From 96d4f1d2a5f4e4fefbe46ce042a53f25b430b826 Mon Sep 17 00:00:00 2001
From: zhc077 <565291854@qq.com>
Date: Fri, 23 Aug 2024 14:43:56 +0800
Subject: [PATCH 1/9] =?UTF-8?q?=E5=9B=A2=E9=98=9F=E8=B5=9B=E9=98=9F?=
=?UTF-8?q?=E5=91=98=E9=85=8D=E7=BD=AE=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../components/AnnualCompPointForm.vue | 35 +++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/jeecgboot-vue3-master/src/views/annualCompPoint/committee/components/AnnualCompPointForm.vue b/jeecgboot-vue3-master/src/views/annualCompPoint/committee/components/AnnualCompPointForm.vue
index 630c118e..5a4324b9 100644
--- a/jeecgboot-vue3-master/src/views/annualCompPoint/committee/components/AnnualCompPointForm.vue
+++ b/jeecgboot-vue3-master/src/views/annualCompPoint/committee/components/AnnualCompPointForm.vue
@@ -90,6 +90,7 @@
+ 设置
@@ -296,9 +297,24 @@
+
+
+ 从内部关闭弹窗
+
+ 从内部修改title
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/UserAgentModal.vue b/jeecgboot-vue3-master/src/views/system/userTEA/UserAgentModal.vue
new file mode 100644
index 00000000..f191b996
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/UserAgentModal.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/UserDrawer.vue b/jeecgboot-vue3-master/src/views/system/userTEA/UserDrawer.vue
new file mode 100644
index 00000000..2391706c
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/UserDrawer.vue
@@ -0,0 +1,184 @@
+
+
+
+
+
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/UserQuitAgentModal.vue b/jeecgboot-vue3-master/src/views/system/userTEA/UserQuitAgentModal.vue
new file mode 100644
index 00000000..f54a1e6c
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/UserQuitAgentModal.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/UserQuitModal.vue b/jeecgboot-vue3-master/src/views/system/userTEA/UserQuitModal.vue
new file mode 100644
index 00000000..70ca45a3
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/UserQuitModal.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+ 批量取消
+
+
+
+ 批量操作
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/UserRecycleBinModal.vue b/jeecgboot-vue3-master/src/views/system/userTEA/UserRecycleBinModal.vue
new file mode 100644
index 00000000..6c96bcbc
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/UserRecycleBinModal.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+ 批量删除
+
+
+
+ 批量还原
+
+
+
+ 批量操作
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/index.vue b/jeecgboot-vue3-master/src/views/system/userTEA/index.vue
new file mode 100644
index 00000000..1354a90d
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/index.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+ 新增
+
+ 导出
+ 导入
+ 导入模板
+
+
+
+
+
+
+ 删除
+
+
+
+ 冻结
+
+
+
+ 解冻
+
+
+
+ 批量操作
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/user.api.ts b/jeecgboot-vue3-master/src/views/system/userTEA/user.api.ts
new file mode 100644
index 00000000..d79d67d1
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/user.api.ts
@@ -0,0 +1,301 @@
+import { defHttp } from '/src/utils/http/axios';
+import { Modal } from 'ant-design-vue';
+
+enum Api {
+ listNoCareTenant = '/sys/user/listAll',
+ listZjNoCareTenant = '/sys/user/listTEAAll',
+ listzdzx = '/sys/user/listzdzx',
+ list = '/sys/user/list',
+ save = '/sys/user/add',
+ edit = '/sys/user/edit',
+ saveZJ = '/seteacher/seteacher/addTEA',
+ editZJ = '/expert/expert/editZJ',
+ queryExpertById = '/expert/expert/queryById',
+ agentSave = '/sys/sysUserAgent/add',
+ agentEdit = '/sys/sysUserAgent/edit',
+ getUserRole = '/sys/user/queryUserRole',
+ duplicateCheck = '/sys/duplicate/check',
+ deleteUser = '/sys/user/delete',
+ deleteBatch = '/sys/user/deleteBatch',
+ importExcel = '/sys/user/importExcel',
+ exportXls = '/sys/user/exportXls',
+
+ recycleBinList = '/sys/user/recycleBin',
+ putRecycleBin = '/sys/user/putRecycleBin',
+ deleteRecycleBin = '/sys/user/deleteRecycleBin',
+ allRolesList = '/sys/role/queryall',
+ allRolesListNoByTenant = '/sys/role/queryallNoByTenant',
+ allRolesListExcludeByTenant = '/sys/role/queryallExcludeByTenant',
+ allTenantList = '/sys/tenant/queryList',
+ allPostList = '/sys/position/list',
+ userDepartList = '/sys/user/userDepartList',
+ changePassword = '/sys/user/changePassword',
+ frozenBatch = '/sys/user/frozenBatch',
+ getUserAgent = '/sys/sysUserAgent/queryByUserName',
+ syncUser = '/act/process/extActProcess/doSyncUser',
+ userQuitAgent = '/sys/user/userQuitAgent',
+ getQuitList = '/sys/user/getQuitList',
+ putCancelQuit = '/sys/user/putCancelQuit',
+ updateUserTenantStatus='/sys/tenant/updateUserTenantStatus',
+ getUserTenantPageList='/sys/tenant/getUserTenantPageList',
+ exportXlsMb = '/sys/user/exportXlsMb',
+ //导出专家
+ exportZjXls = '/expert/expert/exportXls',
+ //导出专家模板
+ exportZjXlsMb = '/expert/expert/exportXlsMb',
+ //导入专家
+ getZjImportUrl = '/expert/expert/importExcel',
+
+ queryByUserId = '/expert/expert/queryByUserId',
+}
+/**
+ * 根据userid判断是否为专家
+ * @param params
+ */
+export const queryByUserId = (params) => {
+ return defHttp.get({ url: Api.queryByUserId, params },{ successMessageMode: 'none' });
+};
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+
+export const getExportUrlMb = Api.exportXlsMb;
+
+/**
+ * 导出 专家
+ */
+export const getExportZjUrl = Api.exportZjXls;
+/**
+ * 导出 专家模板
+ */
+export const getExportZjUrlMb = Api.exportZjXlsMb;
+/**
+ * 导入 专家
+ */
+export const getZjImportUrl = Api.getZjImportUrl;
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+/**
+ * 列表接口(查询用户,通过租户隔离)
+ * @param params
+ */
+export const list = (params) => defHttp.get({ url: Api.list, params });
+
+/**
+ * 列表接口(查询全部用户,不通过租户隔离)
+ * @param params
+ */
+export const listNoCareTenant = (params) => defHttp.get({ url: Api.listNoCareTenant, params });
+
+/**
+ * 列表接口(查询角色为“专家”,不通过租户隔离)
+ * @param params
+ */
+export const listZjNoCareTenant = (params) => defHttp.get({ url: Api.listZjNoCareTenant, params });
+
+
+/**
+ * 列表接口(查询全部用户,不通过租户隔离)
+ * 适用于专家、学生、组委会查看自己的信息
+ * @param params
+ */
+export const listzdzx = (params) => defHttp.get({ url: Api.listzdzx, params });
+
+/**
+ * 用户角色接口
+ * @param params
+ */
+export const getUserRoles = (params) => defHttp.get({ url: Api.getUserRole, params }, { errorMessageMode: 'none' });
+/**
+ * 专家信息接口
+ * @param params
+ */
+export const queryExpertById = (params) => defHttp.get({ url: Api.queryExpertById, params }, { successMessageMode: 'none' });
+
+
+/**
+ * 删除用户
+ */
+export const deleteUser = (params, handleSuccess) => {
+ return defHttp.delete({ url: Api.deleteUser, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 批量删除用户
+ * @param params
+ */
+export const batchDeleteUser = (params, handleSuccess) => {
+ Modal.confirm({
+ title: '确认删除',
+ content: '是否删除选中数据',
+ okText: '确认',
+ cancelText: '取消',
+ onOk: () => {
+ return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+ },
+ });
+};
+/**
+ * 保存或者更新用户
+ * @param params
+ */
+export const saveOrUpdateUser = (params, isUpdate) => {
+ let url = isUpdate ? Api.edit : Api.save;
+ return defHttp.post({ url: url, params });
+};
+/**
+ * 保存或者更新专家用户
+ * @param params
+ */
+export const saveOrUpdateUserZJ = (params, isUpdate) => {
+ let url = isUpdate ? Api.editZJ : Api.saveZJ;
+ return defHttp.post({ url: url, params });
+};
+/**
+ * 唯一校验
+ * @param params
+ */
+export const duplicateCheck = (params) => defHttp.get({ url: Api.duplicateCheck, params }, { isTransformResponse: false });
+/**
+ * 获取全部角色(租户隔离)
+ * @param params
+ */
+export const getAllRolesList = (params) => defHttp.get({ url: Api.allRolesList, params });
+/**
+ * 获取全部角色(不租户隔离)
+ * @param params
+ */
+export const getAllRolesListNoByTenant = (params) => defHttp.get({ url: Api.allRolesListNoByTenant, params });
+
+
+/**
+ * 获取角色(排除:总管理)
+ * @param params
+ */
+export const getAllRolesListNoByExcludeTenant = (params) => defHttp.get({ url: Api.allRolesListExcludeByTenant, params });
+
+
+/**
+ * 获取全部租户
+ */
+export const getAllTenantList = (params) => defHttp.get({ url: Api.allTenantList, params });
+/**
+ * 获取指定用户负责部门
+ */
+export const getUserDepartList = (params) => defHttp.get({ url: Api.userDepartList, params }, { successMessageMode: 'none' });
+/**
+ * 获取全部职务
+ */
+export const getAllPostList = (params) => {
+ return new Promise((resolve) => {
+ defHttp.get({ url: Api.allPostList, params }).then((res) => {
+ resolve(res.records);
+ });
+ });
+};
+/**
+ * 回收站列表
+ * @param params
+ */
+export const getRecycleBinList = (params) => defHttp.get({ url: Api.recycleBinList, params });
+/**
+ * 回收站还原
+ * @param params
+ */
+export const putRecycleBin = (params, handleSuccess) => {
+ return defHttp.put({ url: Api.putRecycleBin, params }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 回收站删除
+ * @param params
+ */
+export const deleteRecycleBin = (params, handleSuccess) => {
+ return defHttp.delete({ url: Api.deleteRecycleBin, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 修改密码
+ * @param params
+ */
+export const changePassword = (params) => {
+ return defHttp.put({ url: Api.changePassword, params });
+};
+/**
+ * 冻结解冻
+ * @param params
+ */
+export const frozenBatch = (params, handleSuccess) => {
+ return defHttp.put({ url: Api.frozenBatch, params }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 获取用户代理
+ * @param params
+ */
+export const getUserAgent = (params) => defHttp.get({ url: Api.getUserAgent, params }, { isTransformResponse: false });
+/**
+ * 保存或者更新用户代理
+ * @param params
+ */
+export const saveOrUpdateAgent = (params) => {
+ let url = params.id ? Api.agentEdit : Api.agentSave;
+ return defHttp.post({ url: url, params });
+};
+
+/**
+ * 用户同步流程
+ * @param params
+ */
+export const syncUser = () => defHttp.put({ url: Api.syncUser });
+
+/**
+ * 用户离职(新增代理人和用户状态变更操作)
+ * @param params
+ */
+export const userQuitAgent = (params) => {
+ return defHttp.put({ url: Api.userQuitAgent, params });
+};
+
+/**
+ * 用户离职列表
+ * @param params
+ */
+export const getQuitList = (params) => {
+ return defHttp.get({ url: Api.getQuitList, params });
+};
+
+/**
+ * 取消离职
+ * @param params
+ */
+export const putCancelQuit = (params, handleSuccess) => {
+ return defHttp.put({ url: Api.putCancelQuit, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+
+/**
+ * 待审批获取列表数据
+ */
+export const getUserTenantPageList = (params)=>{
+ return defHttp.get({url:Api.getUserTenantPageList,params})
+}
+
+/**
+ * 更新租户状态
+ * @param params
+ */
+export const updateUserTenantStatus = (params)=>{
+ return defHttp.put({ url: Api.updateUserTenantStatus, params }, { joinParamsToUrl: true,isTransformResponse: false });
+}
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/user.data.ts b/jeecgboot-vue3-master/src/views/system/userTEA/user.data.ts
new file mode 100644
index 00000000..bbed1ed8
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/user.data.ts
@@ -0,0 +1,604 @@
+import { BasicColumn } from '/src/components/Table';
+import { FormSchema } from '/src/components/Table';
+import { getAllRolesListNoByTenant,getAllRolesListNoByExcludeTenant, getAllTenantList } from './user.api';
+import { rules } from '/src/utils/helper/validator';
+import { render } from '/src/utils/common/renderUtils';
+export const columns: BasicColumn[] = [
+ {
+ title: '用户账号',
+ dataIndex: 'username',
+ width: 120,
+ },
+ {
+ title: '用户姓名',
+ dataIndex: 'realname',
+ width: 100,
+ },
+ {
+ title: '头像',
+ dataIndex: 'avatar',
+ width: 120,
+ customRender: render.renderAvatar,
+ },
+ /*{
+ title: '性别',
+ dataIndex: 'sex',
+ width: 80,
+ sorter: true,
+ customRender: ({ text }) => {
+ return render.renderDict(text, 'sex');
+ },
+ },
+ {
+ title: '生日',
+ dataIndex: 'birthday',
+ width: 100,
+ },*/
+ {
+ title: '手机号',
+ dataIndex: 'phone',
+ width: 100,
+ },
+ {
+ title: '院系/部门',
+ width: 150,
+ dataIndex: 'orgCodeTxt',
+ },
+/* {
+ title: '负责部门',
+ width: 150,
+ dataIndex: 'departIds_dictText',
+ },*/
+ {
+ title: '状态',
+ dataIndex: 'status_dictText',
+ width: 80,
+ },
+];
+
+export const recycleColumns: BasicColumn[] = [
+ {
+ title: '用户账号',
+ dataIndex: 'username',
+ width: 100,
+ },
+ {
+ title: '用户姓名',
+ dataIndex: 'realname',
+ width: 100,
+ },
+ {
+ title: '头像',
+ dataIndex: 'avatar',
+ width: 80,
+ customRender: render.renderAvatar,
+ },
+ {
+ title: '性别',
+ dataIndex: 'sex',
+ width: 80,
+ sorter: true,
+ customRender: ({ text }) => {
+ return render.renderDict(text, 'sex');
+ },
+ },
+];
+
+export const searchFormSchema: FormSchema[] = [
+/* {
+ label: '账号',
+ field: 'username',
+ component: 'JInput',
+ colProps: { span: 6 },
+ },*/
+ {
+ label: '名字',
+ field: 'realname',
+ component: 'JInput',
+ colProps: { span: 6 },
+ },
+ /*{
+ label: '性别',
+ field: 'sex',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'sex',
+ placeholder: '请选择性别',
+ stringToNumber: true,
+ },
+ colProps: { span: 6 },
+ },*/
+ {
+ label: '手机号码',
+ field: 'phone',
+ component: 'Input',
+ colProps: { span: 6 },
+ },
+ {
+ label: '用户状态',
+ field: 'status',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'user_status',
+ placeholder: '请选择状态',
+ stringToNumber: true,
+ },
+ colProps: { span: 6 },
+ },
+];
+export const formSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ label: '专家账号',
+ field: 'username',
+ component: 'Input',
+ dynamicDisabled: ({ values }) => {
+ return !!values.id;
+ },
+ dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'username', model, schema, true),
+ },
+ {
+ label: '登录密码',
+ field: 'password',
+ component: 'StrengthMeter',
+ rules: [
+ {
+ required: true,
+ message: '请输入登录密码',
+ },
+ ],
+ },
+ {
+ label: '确认密码',
+ field: 'confirmPassword',
+ component: 'InputPassword',
+ dynamicRules: ({ values }) => rules.confirmPassword(values, true),
+ },
+ {
+ label: '用户姓名',
+ field: 'realname',
+ required: true,
+ component: 'Input',
+ },
+ {
+ label: '工号',
+ field: 'workNo',
+ required: true,
+ component: 'Input',
+ dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
+ },
+ /*{
+ label: '职务',
+ field: 'post',
+ required: false,
+ component: 'JSelectPosition',
+ componentProps: {
+ rowKey: 'code',
+ labelKey: 'name',
+ },
+ },*/
+/* {
+ label: '角色',
+ field: 'selectedroles',
+ dynamicDisabled: ({ values }) => {
+ return !!values.id;
+ },
+ component: 'ApiSelect',
+ componentProps: {
+ api: getAllRolesListNoByExcludeTenant,
+ labelField: 'roleName',
+ valueField: 'id',
+ },
+ },*/
+ {
+ label: '所属部门',
+ field: 'selecteddeparts',
+ component: 'JSelectDept',
+ componentProps: ({ formActionType, formModel }) => {
+ return {
+ sync: false,
+ checkStrictly: true,
+ defaultExpandLevel: 2,
+ multiple:false,
+ onSelect: (options, values) => {
+ const { updateSchema } = formActionType;
+ //所属部门修改后更新负责部门下拉框数据
+ updateSchema([
+ {
+ field: 'departIds',
+ componentProps: { options },
+ },
+ ]);
+ //所属部门修改后更新负责部门数据
+ formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
+ },
+ };
+ },
+ },
+ /*{
+ label: '租户',
+ field: 'relTenantIds',
+ component: 'ApiSelect',
+ componentProps: {
+ mode: 'multiple',
+ api: getAllTenantList,
+ numberToString: true,
+ labelField: 'name',
+ valueField: 'id',
+ },
+ },*/
+ /*{
+ label: '身份',
+ field: 'userIdentity',
+ component: 'RadioGroup',
+ defaultValue: 1,
+ componentProps: ({ formModel }) => {
+ return {
+ options: [
+ { label: '普通用户', value: 1, key: '1' },
+ { label: '上级', value: 2, key: '2' },
+ ],
+ onChange: () => {
+ formModel.userIdentity == 1 && (formModel.departIds = []);
+ },
+ };
+ },
+ },*/
+ /* {
+ label: '负责部门',
+ field: 'departIds',
+ component: 'Select',
+ componentProps: {
+ mode: 'multiple',
+ },
+ ifShow: ({ values }) => values.userIdentity == 2,
+ },*/
+ {
+ label: '头像',
+ field: 'avatar',
+ component: 'JImageUpload',
+ componentProps: {
+ fileMax: 1,
+ },
+ },
+ {
+ label: '生日',
+ field: 'birthday',
+ component: 'DatePicker',
+ },
+ {
+ label: '性别',
+ field: 'sex',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'sex',
+ placeholder: '请选择性别',
+ stringToNumber: true,
+ },
+ },
+ {
+ label: '邮箱',
+ field: 'email',
+ component: 'Input',
+ },
+ {
+ label: '手机号码',
+ field: 'phone',
+ component: 'Input',
+ },
+ /*{
+ label: '座机',
+ field: 'telephone',
+ component: 'Input',
+ rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
+ },
+ {
+ label: '工作流引擎',
+ field: 'activitiSync',
+ defaultValue: 1,
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'activiti_sync',
+ type: 'radio',
+ stringToNumber: true,
+ },
+ },*/
+ {
+ label: '学历',
+ field: 'expTitle',
+ component: 'Input',
+ },
+
+ {
+ label: '专业',
+ field: 'teamajor',
+ component: 'Input',
+ },
+ {
+ label: '学位',
+ field: 'expXw',
+ component: 'Input',
+ },
+ {
+ label: '职称',
+ field: 'expZc',
+ component: 'Input',
+ },
+ {
+ label: '研究方向',
+ field: 'expYjfx',
+ component: 'Input',
+ },
+ {
+ label: '从事工作',
+ field: 'expCsgz',
+ component: 'Input',
+ },
+ {
+ label: '毕业院校',
+ field: 'expSc',
+ component: 'Input',
+ },
+ {
+ label: '简介',
+ field: 'expResume',
+ component: 'InputTextArea',
+ },
+ /*{
+ label: '比赛',
+ field: 'compid',
+ component: 'Input',
+ show: false,
+ },*/
+ /*{
+ label: '比赛名称',
+ field: 'compName',
+ component: 'JPopup',
+ componentProps: ({ formActionType }) => {
+ const {setFieldsValue} = formActionType;
+ return{
+ setFieldsValue:setFieldsValue,
+ code:"comp_select",
+ fieldConfig: [
+ { source: 'id', target: 'compid' },
+ { source: 'comp_name', target: 'compName' },
+ ],
+ multi:true
+ }
+ },
+ },*/
+/* {
+ label: '比赛状态',
+ field: 'stat',
+ component: 'JSwitch',
+ defaultValue: 'Y',
+ componentProps: {},
+ },*/
+];
+export const formPasswordSchema: FormSchema[] = [
+ {
+ label: '用户账号',
+ field: 'username',
+ component: 'Input',
+ componentProps: { readOnly: true },
+ },
+ {
+ label: '登录密码',
+ field: 'password',
+ component: 'StrengthMeter',
+ componentProps: {
+ placeholder: '请输入登录密码',
+ },
+ rules: [
+ {
+ required: true,
+ message: '请输入登录密码',
+ },
+ ],
+ },
+ {
+ label: '确认密码',
+ field: 'confirmPassword',
+ component: 'InputPassword',
+ dynamicRules: ({ values }) => rules.confirmPassword(values, true),
+ },
+];
+
+export const formAgentSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ field: 'userName',
+ label: '用户名',
+ component: 'Input',
+ componentProps: {
+ readOnly: true,
+ allowClear: false,
+ },
+ },
+ {
+ field: 'agentUserName',
+ label: '代理人用户名',
+ required: true,
+ component: 'JSelectUser',
+ componentProps: {
+ rowKey: 'username',
+ labelKey: 'realname',
+ maxSelectCount: 10,
+ },
+ },
+ {
+ field: 'startTime',
+ label: '代理开始时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择代理开始时间',
+ },
+ },
+ {
+ field: 'endTime',
+ label: '代理结束时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择代理结束时间',
+ },
+ },
+ {
+ field: 'status',
+ label: '状态',
+ component: 'JDictSelectTag',
+ defaultValue: '1',
+ componentProps: {
+ dictCode: 'valid_status',
+ type: 'radioButton',
+ },
+ },
+];
+export const formQuitAgentSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ field: 'userName',
+ label: '用户名',
+ component: 'Input',
+ componentProps: {
+ readOnly: true,
+ allowClear: false,
+ },
+ },
+ {
+ field: 'agentUserName',
+ label: '交接人员',
+ required: true,
+ component: 'JSelectUser',
+ componentProps: {
+ rowKey: 'username',
+ labelKey: 'realname',
+ maxSelectCount: 1,
+ },
+ },
+ {
+ field: 'startTime',
+ label: '交接开始时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择交接开始时间',
+ getPopupContainer: () => document.body,
+ },
+ },
+ {
+ field: 'endTime',
+ label: '交接结束时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择交接结束时间',
+ getPopupContainer: () => document.body,
+ },
+ },
+ {
+ field: 'status',
+ label: '状态',
+ component: 'JDictSelectTag',
+ defaultValue: '1',
+ componentProps: {
+ dictCode: 'valid_status',
+ type: 'radioButton',
+ },
+ },
+];
+
+//租户用户列表
+export const userTenantColumns: BasicColumn[] = [
+ {
+ title: '用户账号',
+ dataIndex: 'username',
+ width: 120,
+ },
+ {
+ title: '用户姓名',
+ dataIndex: 'realname',
+ width: 100,
+ },
+ {
+ title: '头像',
+ dataIndex: 'avatar',
+ width: 120,
+ customRender: render.renderAvatar,
+ },
+ {
+ title: '手机号',
+ dataIndex: 'phone',
+ width: 100,
+ },
+ {
+ title: '部门',
+ width: 150,
+ dataIndex: 'orgCodeTxt',
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ width: 80,
+ customRender: ({ text }) => {
+ if (text === '1') {
+ return '正常';
+ } else if (text === '3') {
+ return '审批中';
+ } else {
+ return '已拒绝';
+ }
+ },
+ },
+];
+
+//用户租户搜索表单
+export const userTenantFormSchema: FormSchema[] = [
+ {
+ label: '账号',
+ field: 'username',
+ component: 'Input',
+ colProps: { span: 6 },
+ },
+ {
+ label: '名字',
+ field: 'realname',
+ component: 'Input',
+ colProps: { span: 6 },
+ },
+ {
+ label: '性别',
+ field: 'sex',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'sex',
+ placeholder: '请选择性别',
+ stringToNumber: true,
+ },
+ colProps: { span: 6 },
+ },
+];
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/userDetails.vue b/jeecgboot-vue3-master/src/views/system/userTEA/userDetails.vue
new file mode 100644
index 00000000..59991ee3
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/userDetails.vue
@@ -0,0 +1,54 @@
+
+
+
+
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/userZJ.api.ts b/jeecgboot-vue3-master/src/views/system/userTEA/userZJ.api.ts
new file mode 100644
index 00000000..91f8ce1a
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/userZJ.api.ts
@@ -0,0 +1,272 @@
+import { defHttp } from '/src/utils/http/axios';
+import { Modal } from 'ant-design-vue';
+
+enum Api {
+ listNoCareTenant = '/sys/user/listAll',
+ listzdzx = '/sys/user/listzdzx',
+ list = '/sys/user/list',
+ save = '/sys/user/add',
+ edit = '/sys/user/edit',
+ saveZJ = '/seteacher/seteacher/addTEA',
+ editZJ = '/seteacher/seteacher/editTEA',
+ queryExpertById = '/seteacher/seteacher/queryById',
+ agentSave = '/sys/sysUserAgent/add',
+ agentEdit = '/sys/sysUserAgent/edit',
+ getUserRole = '/sys/user/queryUserRole',
+ duplicateCheck = '/sys/duplicate/check',
+ deleteUser = '/sys/user/delete',
+ deleteBatch = '/sys/user/deleteBatch',
+ importExcel = '/sys/user/importExcel',
+ exportXls = '/sys/user/exportXls',
+ recycleBinList = '/sys/user/recycleBin',
+ putRecycleBin = '/sys/user/putRecycleBin',
+ deleteRecycleBin = '/sys/user/deleteRecycleBin',
+ allRolesList = '/sys/role/queryall',
+ allRolesListNoByTenant = '/sys/role/queryallNoByTenant',
+ allRolesListExcludeByTenant = '/sys/role/queryallExcludeByTenant',
+ allTenantList = '/sys/tenant/queryList',
+ allPostList = '/sys/position/list',
+ userDepartList = '/sys/user/userDepartList',
+ changePassword = '/sys/user/changePassword',
+ frozenBatch = '/sys/user/frozenBatch',
+ getUserAgent = '/sys/sysUserAgent/queryByUserName',
+ syncUser = '/act/process/extActProcess/doSyncUser',
+ userQuitAgent = '/sys/user/userQuitAgent',
+ getQuitList = '/sys/user/getQuitList',
+ putCancelQuit = '/sys/user/putCancelQuit',
+ updateUserTenantStatus='/sys/tenant/updateUserTenantStatus',
+ getUserTenantPageList='/sys/tenant/getUserTenantPageList',
+ exportXlsMb = '/sys/user/exportXlsMb',
+ queryByUserId = '/expert/expert/queryByUserId',
+}
+/**
+ * 根据userid判断是否为专家
+ * @param params
+ */
+export const queryByUserId = (params) => {
+ return defHttp.get({ url: Api.queryByUserId, params },{ successMessageMode: 'none' });
+};
+/**
+ * 导出api
+ * @param params
+ */
+export const getExportUrl = Api.exportXls;
+
+export const getExportUrlMb = Api.exportXlsMb;
+/**
+ * 导入api
+ */
+export const getImportUrl = Api.importExcel;
+/**
+ * 列表接口(查询用户,通过租户隔离)
+ * @param params
+ */
+export const list = (params) => defHttp.get({ url: Api.list, params });
+
+/**
+ * 列表接口(查询全部用户,不通过租户隔离)
+ * @param params
+ */
+export const listNoCareTenant = (params) => defHttp.get({ url: Api.listNoCareTenant, params });
+
+/**
+ * 列表接口(查询全部用户,不通过租户隔离)
+ * 适用于专家、学生、组委会查看自己的信息
+ * @param params
+ */
+export const listzdzx = (params) => defHttp.get({ url: Api.listzdzx, params });
+
+/**
+ * 用户角色接口
+ * @param params
+ */
+export const getUserRoles = (params) => defHttp.get({ url: Api.getUserRole, params }, { errorMessageMode: 'none' });
+/**
+ * 专家信息接口
+ * @param params
+ */
+export const queryExpertById = (params) => defHttp.get({ url: Api.queryExpertById, params }, { successMessageMode: 'none' });
+
+
+/**
+ * 删除用户
+ */
+export const deleteUser = (params, handleSuccess) => {
+ return defHttp.delete({ url: Api.deleteUser, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 批量删除用户
+ * @param params
+ */
+export const batchDeleteUser = (params, handleSuccess) => {
+ Modal.confirm({
+ title: '确认删除',
+ content: '是否删除选中数据',
+ okText: '确认',
+ cancelText: '取消',
+ onOk: () => {
+ return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+ },
+ });
+};
+/**
+ * 保存或者更新用户
+ * @param params
+ */
+export const saveOrUpdateUser = (params, isUpdate) => {
+ let url = isUpdate ? Api.edit : Api.save;
+ return defHttp.post({ url: url, params });
+};
+/**
+ * 保存或者更新专家用户
+ * @param params
+ */
+export const saveOrUpdateUserZJ = (params, isUpdate) => {
+ let url = isUpdate ? Api.editZJ : Api.saveZJ;
+ return defHttp.post({ url: url, params });
+};
+/**
+ * 唯一校验
+ * @param params
+ */
+export const duplicateCheck = (params) => defHttp.get({ url: Api.duplicateCheck, params }, { isTransformResponse: false });
+/**
+ * 获取全部角色(租户隔离)
+ * @param params
+ */
+export const getAllRolesList = (params) => defHttp.get({ url: Api.allRolesList, params });
+/**
+ * 获取全部角色(不租户隔离)
+ * @param params
+ */
+export const getAllRolesListNoByTenant = (params) => defHttp.get({ url: Api.allRolesListNoByTenant, params });
+
+
+/**
+ * 获取角色(排除:总管理)
+ * @param params
+ */
+export const getAllRolesListNoByExcludeTenant = (params) => defHttp.get({ url: Api.allRolesListExcludeByTenant, params });
+
+
+/**
+ * 获取全部租户
+ */
+export const getAllTenantList = (params) => defHttp.get({ url: Api.allTenantList, params });
+/**
+ * 获取指定用户负责部门
+ */
+export const getUserDepartList = (params) => defHttp.get({ url: Api.userDepartList, params }, { successMessageMode: 'none' });
+/**
+ * 获取全部职务
+ */
+export const getAllPostList = (params) => {
+ return new Promise((resolve) => {
+ defHttp.get({ url: Api.allPostList, params }).then((res) => {
+ resolve(res.records);
+ });
+ });
+};
+/**
+ * 回收站列表
+ * @param params
+ */
+export const getRecycleBinList = (params) => defHttp.get({ url: Api.recycleBinList, params });
+/**
+ * 回收站还原
+ * @param params
+ */
+export const putRecycleBin = (params, handleSuccess) => {
+ return defHttp.put({ url: Api.putRecycleBin, params }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 回收站删除
+ * @param params
+ */
+export const deleteRecycleBin = (params, handleSuccess) => {
+ return defHttp.delete({ url: Api.deleteRecycleBin, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 修改密码
+ * @param params
+ */
+export const changePassword = (params) => {
+ return defHttp.put({ url: Api.changePassword, params });
+};
+/**
+ * 冻结解冻
+ * @param params
+ */
+export const frozenBatch = (params, handleSuccess) => {
+ return defHttp.put({ url: Api.frozenBatch, params }).then(() => {
+ handleSuccess();
+ });
+};
+/**
+ * 获取用户代理
+ * @param params
+ */
+export const getUserAgent = (params) => defHttp.get({ url: Api.getUserAgent, params }, { isTransformResponse: false });
+/**
+ * 保存或者更新用户代理
+ * @param params
+ */
+export const saveOrUpdateAgent = (params) => {
+ let url = params.id ? Api.agentEdit : Api.agentSave;
+ return defHttp.post({ url: url, params });
+};
+
+/**
+ * 用户同步流程
+ * @param params
+ */
+export const syncUser = () => defHttp.put({ url: Api.syncUser });
+
+/**
+ * 用户离职(新增代理人和用户状态变更操作)
+ * @param params
+ */
+export const userQuitAgent = (params) => {
+ return defHttp.put({ url: Api.userQuitAgent, params });
+};
+
+/**
+ * 用户离职列表
+ * @param params
+ */
+export const getQuitList = (params) => {
+ return defHttp.get({ url: Api.getQuitList, params });
+};
+
+/**
+ * 取消离职
+ * @param params
+ */
+export const putCancelQuit = (params, handleSuccess) => {
+ return defHttp.put({ url: Api.putCancelQuit, params }, { joinParamsToUrl: true }).then(() => {
+ handleSuccess();
+ });
+};
+
+/**
+ * 待审批获取列表数据
+ */
+export const getUserTenantPageList = (params)=>{
+ return defHttp.get({url:Api.getUserTenantPageList,params})
+}
+
+/**
+ * 更新租户状态
+ * @param params
+ */
+export const updateUserTenantStatus = (params)=>{
+ return defHttp.put({ url: Api.updateUserTenantStatus, params }, { joinParamsToUrl: true,isTransformResponse: false });
+}
diff --git a/jeecgboot-vue3-master/src/views/system/userTEA/userZJ.data.ts b/jeecgboot-vue3-master/src/views/system/userTEA/userZJ.data.ts
new file mode 100644
index 00000000..a58ea02d
--- /dev/null
+++ b/jeecgboot-vue3-master/src/views/system/userTEA/userZJ.data.ts
@@ -0,0 +1,771 @@
+import { BasicColumn } from '/src/components/Table';
+import { FormSchema } from '/src/components/Table';
+import { getAllRolesListNoByTenant,getAllRolesListNoByExcludeTenant, getAllTenantList } from './userZJ.api';
+import { rules } from '/src/utils/helper/validator';
+import { render } from '/src/utils/common/renderUtils';
+export const columns: BasicColumn[] = [
+ {
+ title: '用户账号',
+ dataIndex: 'username',
+ width: 120,
+ },
+ {
+ title: '用户姓名',
+ dataIndex: 'realname',
+ width: 100,
+ },
+ {
+ title: '头像',
+ dataIndex: 'avatar',
+ width: 120,
+ customRender: render.renderAvatar,
+ },
+ /* {
+ title: '性别',
+ dataIndex: 'sex',
+ width: 80,
+ sorter: true,
+ customRender: ({ text }) => {
+ return render.renderDict(text, 'sex');
+ },
+ },
+ {
+ title: '生日',
+ dataIndex: 'birthday',
+ width: 100,
+ },*/
+ {
+ title: '手机号',
+ dataIndex: 'phone',
+ width: 100,
+ },
+ {
+ title: '部门',
+ width: 150,
+ dataIndex: 'orgCodeTxt',
+ },
+ {
+ title: '负责部门',
+ width: 150,
+ dataIndex: 'departIds_dictText',
+ },
+ {
+ title: '状态',
+ dataIndex: 'status_dictText',
+ width: 80,
+ },
+];
+
+export const recycleColumns: BasicColumn[] = [
+ {
+ title: '用户账号',
+ dataIndex: 'username',
+ width: 100,
+ },
+ {
+ title: '用户姓名',
+ dataIndex: 'realname',
+ width: 100,
+ },
+ {
+ title: '头像',
+ dataIndex: 'avatar',
+ width: 80,
+ customRender: render.renderAvatar,
+ },
+ {
+ title: '性别',
+ dataIndex: 'sex',
+ width: 80,
+ sorter: true,
+ customRender: ({ text }) => {
+ return render.renderDict(text, 'sex');
+ },
+ },
+];
+
+export const searchFormSchema: FormSchema[] = [
+ {
+ label: '账号',
+ field: 'username',
+ component: 'JInput',
+ colProps: { span: 6 },
+ },
+ {
+ label: '名字',
+ field: 'realname',
+ component: 'JInput',
+ colProps: { span: 6 },
+ },
+ {
+ label: '性别',
+ field: 'sex',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'sex',
+ placeholder: '请选择性别',
+ stringToNumber: true,
+ },
+ colProps: { span: 6 },
+ },
+ {
+ label: '手机号码',
+ field: 'phone',
+ component: 'Input',
+ colProps: { span: 6 },
+ },
+ {
+ label: '用户状态',
+ field: 'status',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'user_status',
+ placeholder: '请选择状态',
+ stringToNumber: true,
+ },
+ colProps: { span: 6 },
+ },
+];
+export const formSchemaZJ: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ label: '专家账号',
+ field: 'username',
+ component: 'Input',
+ dynamicDisabled: ({ values }) => {
+ return !!values.id;
+ },
+ dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'username', model, schema, true),
+ },
+ {
+ label: '登录密码',
+ field: 'password',
+ component: 'StrengthMeter',
+ rules: [
+ {
+ required: true,
+ message: '请输入登录密码',
+ },
+ ],
+ },
+ {
+ label: '确认密码',
+ field: 'confirmPassword',
+ component: 'InputPassword',
+ dynamicRules: ({ values }) => rules.confirmPassword(values, true),
+ },
+ {
+ label: '用户姓名',
+ field: 'realname',
+ required: true,
+ component: 'Input',
+ },
+ {
+ label: '工号',
+ field: 'workNo',
+ required: true,
+ component: 'Input',
+ dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
+ },
+ /*{
+ label: '职务',
+ field: 'post',
+ required: false,
+ component: 'JSelectPosition',
+ componentProps: {
+ rowKey: 'code',
+ labelKey: 'name',
+ },
+ },*/
+ {
+ label: '角色',
+ field: 'selectedroles',
+ component: 'ApiSelect',
+ componentProps: {
+ api: getAllRolesListNoByExcludeTenant,
+ labelField: 'roleName',
+ valueField: 'id',
+ },
+ },
+ {
+ label: '所属部门',
+ field: 'selecteddeparts',
+ component: 'JSelectDept',
+ componentProps: ({ formActionType, formModel }) => {
+ return {
+ sync: false,
+ checkStrictly: true,
+ defaultExpandLevel: 2,
+
+ onSelect: (options, values) => {
+ const { updateSchema } = formActionType;
+ //所属部门修改后更新负责部门下拉框数据
+ updateSchema([
+ {
+ field: 'departIds',
+ componentProps: { options },
+ },
+ ]);
+ //所属部门修改后更新负责部门数据
+ formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
+ },
+ };
+ },
+ },
+ /*{
+ label: '租户',
+ field: 'relTenantIds',
+ component: 'ApiSelect',
+ componentProps: {
+ mode: 'multiple',
+ api: getAllTenantList,
+ numberToString: true,
+ labelField: 'name',
+ valueField: 'id',
+ },
+ },*/
+ /*{
+ label: '身份',
+ field: 'userIdentity',
+ component: 'RadioGroup',
+ defaultValue: 1,
+ componentProps: ({ formModel }) => {
+ return {
+ options: [
+ { label: '普通用户', value: 1, key: '1' },
+ { label: '上级', value: 2, key: '2' },
+ ],
+ onChange: () => {
+ formModel.userIdentity == 1 && (formModel.departIds = []);
+ },
+ };
+ },
+ },*/
+ /* {
+ label: '负责部门',
+ field: 'departIds',
+ component: 'Select',
+ componentProps: {
+ mode: 'multiple',
+ },
+ ifShow: ({ values }) => values.userIdentity == 2,
+ },*/
+ {
+ label: '头像',
+ field: 'avatar',
+ component: 'JImageUpload',
+ componentProps: {
+ fileMax: 1,
+ },
+ },
+ {
+ label: '生日',
+ field: 'birthday',
+ component: 'DatePicker',
+ },
+ {
+ label: '性别',
+ field: 'sex',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'sex',
+ placeholder: '请选择性别',
+ stringToNumber: true,
+ },
+ },
+ {
+ label: '邮箱',
+ field: 'email',
+ component: 'Input',
+ },
+ {
+ label: '手机号码',
+ field: 'phone',
+ component: 'Input',
+ },
+ /*{
+ label: '座机',
+ field: 'telephone',
+ component: 'Input',
+ rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
+ },
+ {
+ label: '工作流引擎',
+ field: 'activitiSync',
+ defaultValue: 1,
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'activiti_sync',
+ type: 'radio',
+ stringToNumber: true,
+ },
+ },*/
+ {
+ label: '专家毕业院校',
+ field: 'expSc',
+ component: 'Input',
+ },
+ {
+ label: '专家履历',
+ field: 'expResume',
+ component: 'InputTextArea',
+ },
+ {
+ label: '专家学历',
+ field: 'expTitle',
+ component: 'Input',
+ },
+ {
+ label: '比赛',
+ field: 'compid',
+ component: 'Input',
+ show: false,
+ },
+ {
+ label: '比赛名称',
+ field: 'compName',
+ component: 'JPopup',
+ componentProps: ({ formActionType }) => {
+ const {setFieldsValue} = formActionType;
+ return{
+ setFieldsValue:setFieldsValue,
+ code:"comp_select",
+ fieldConfig: [
+ { source: 'id', target: 'compid' },
+ { source: 'comp_name', target: 'compName' },
+ ],
+ multi:true
+ }
+ },
+ },
+ {
+ label: '状态',
+ field: 'stat',
+ component: 'JSwitch',
+ componentProps:{
+ },
+ },
+];
+
+export const formSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ label: '用户账号',
+ field: 'username',
+ component: 'Input',
+ dynamicDisabled: ({ values }) => {
+ return !!values.id;
+ },
+ dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'username', model, schema, true),
+ },
+ {
+ label: '登录密码',
+ field: 'password',
+ component: 'StrengthMeter',
+ rules: [
+ {
+ required: true,
+ message: '请输入登录密码',
+ },
+ ],
+ },
+ {
+ label: '确认密码',
+ field: 'confirmPassword',
+ component: 'InputPassword',
+ dynamicRules: ({ values }) => rules.confirmPassword(values, true),
+ },
+ {
+ label: '用户姓名',
+ field: 'realname',
+ required: true,
+ component: 'Input',
+ },
+ {
+ label: '工号',
+ field: 'workNo',
+ required: true,
+ component: 'Input',
+ dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
+ },
+ {
+ label: '职务',
+ field: 'post',
+ required: false,
+ component: 'JSelectPosition',
+ componentProps: {
+ rowKey: 'code',
+ labelKey: 'name',
+ },
+ },
+ {
+ label: '角色',
+ field: 'selectedroles',
+ component: 'ApiSelect',
+ componentProps: {
+ mode: 'multiple',
+ api: getAllRolesListNoByTenant,
+ labelField: 'roleName',
+ valueField: 'id',
+ },
+ },
+ {
+ label: '所属部门',
+ field: 'selecteddeparts',
+ component: 'JSelectDept',
+ componentProps: ({ formActionType, formModel }) => {
+ return {
+ sync: false,
+ checkStrictly: true,
+ defaultExpandLevel: 2,
+
+ onSelect: (options, values) => {
+ const { updateSchema } = formActionType;
+ //所属部门修改后更新负责部门下拉框数据
+ updateSchema([
+ {
+ field: 'departIds',
+ componentProps: { options },
+ },
+ ]);
+ //所属部门修改后更新负责部门数据
+ formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
+ },
+ };
+ },
+ },
+ {
+ label: '租户',
+ field: 'relTenantIds',
+ component: 'ApiSelect',
+ componentProps: {
+ mode: 'multiple',
+ api: getAllTenantList,
+ numberToString: true,
+ labelField: 'name',
+ valueField: 'id',
+ },
+ },
+ {
+ label: '身份',
+ field: 'userIdentity',
+ component: 'RadioGroup',
+ defaultValue: 1,
+ componentProps: ({ formModel }) => {
+ return {
+ options: [
+ { label: '普通用户', value: 1, key: '1' },
+ { label: '上级', value: 2, key: '2' },
+ ],
+ onChange: () => {
+ formModel.userIdentity == 1 && (formModel.departIds = []);
+ },
+ };
+ },
+ },
+ {
+ label: '负责部门',
+ field: 'departIds',
+ component: 'Select',
+ componentProps: {
+ mode: 'multiple',
+ },
+ ifShow: ({ values }) => values.userIdentity == 2,
+ },
+ {
+ label: '头像',
+ field: 'avatar',
+ component: 'JImageUpload',
+ componentProps: {
+ fileMax: 1,
+ },
+ },
+ {
+ label: '生日',
+ field: 'birthday',
+ component: 'DatePicker',
+ },
+ {
+ label: '性别',
+ field: 'sex',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'sex',
+ placeholder: '请选择性别',
+ stringToNumber: true,
+ },
+ },
+ {
+ label: '邮箱',
+ field: 'email',
+ component: 'Input',
+ dynamicRules: ({ model, schema }) => {
+ return [
+ { ...rules.duplicateCheckRule('sys_user', 'email', model, schema, true)[0] },
+ { ...rules.rule('email', false)[0] },
+ ];
+ },
+ },
+ {
+ label: '手机号码',
+ field: 'phone',
+ component: 'Input',
+ dynamicRules: ({ model, schema }) => {
+ return [
+ { ...rules.duplicateCheckRule('sys_user', 'phone', model, schema, true)[0] },
+ { pattern: /^1[3456789]\d{9}$/, message: '手机号码格式有误' },
+ ];
+ },
+ },
+ {
+ label: '座机',
+ field: 'telephone',
+ component: 'Input',
+ rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
+ },
+ // {
+ // label: '工作流引擎',
+ // field: 'activitiSync',
+ // defaultValue: 1,
+ // component: 'JDictSelectTag',
+ // componentProps: {
+ // dictCode: 'activiti_sync',
+ // type: 'radio',
+ // stringToNumber: true,
+ // },
+ // },
+];
+
+export const formPasswordSchema: FormSchema[] = [
+ {
+ label: '用户账号',
+ field: 'username',
+ component: 'Input',
+ componentProps: { readOnly: true },
+ },
+ {
+ label: '登录密码',
+ field: 'password',
+ component: 'StrengthMeter',
+ componentProps: {
+ placeholder: '请输入登录密码',
+ },
+ rules: [
+ {
+ required: true,
+ message: '请输入登录密码',
+ },
+ ],
+ },
+ {
+ label: '确认密码',
+ field: 'confirmPassword',
+ component: 'InputPassword',
+ dynamicRules: ({ values }) => rules.confirmPassword(values, true),
+ },
+];
+
+export const formAgentSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ field: 'userName',
+ label: '用户名',
+ component: 'Input',
+ componentProps: {
+ readOnly: true,
+ allowClear: false,
+ },
+ },
+ {
+ field: 'agentUserName',
+ label: '代理人用户名',
+ required: true,
+ component: 'JSelectUser',
+ componentProps: {
+ rowKey: 'username',
+ labelKey: 'realname',
+ maxSelectCount: 10,
+ },
+ },
+ {
+ field: 'startTime',
+ label: '代理开始时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择代理开始时间',
+ },
+ },
+ {
+ field: 'endTime',
+ label: '代理结束时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择代理结束时间',
+ },
+ },
+ {
+ field: 'status',
+ label: '状态',
+ component: 'JDictSelectTag',
+ defaultValue: '1',
+ componentProps: {
+ dictCode: 'valid_status',
+ type: 'radioButton',
+ },
+ },
+];
+
+export const formQuitAgentSchema: FormSchema[] = [
+ {
+ label: '',
+ field: 'id',
+ component: 'Input',
+ show: false,
+ },
+ {
+ field: 'userName',
+ label: '用户名',
+ component: 'Input',
+ componentProps: {
+ readOnly: true,
+ allowClear: false,
+ },
+ },
+ {
+ field: 'agentUserName',
+ label: '交接人员',
+ required: true,
+ component: 'JSelectUser',
+ componentProps: {
+ rowKey: 'username',
+ labelKey: 'realname',
+ maxSelectCount: 1,
+ },
+ },
+ {
+ field: 'startTime',
+ label: '交接开始时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择交接开始时间',
+ getPopupContainer: () => document.body,
+ },
+ },
+ {
+ field: 'endTime',
+ label: '交接结束时间',
+ component: 'DatePicker',
+ required: true,
+ componentProps: {
+ showTime: true,
+ valueFormat: 'YYYY-MM-DD HH:mm:ss',
+ placeholder: '请选择交接结束时间',
+ getPopupContainer: () => document.body,
+ },
+ },
+ {
+ field: 'status',
+ label: '状态',
+ component: 'JDictSelectTag',
+ defaultValue: '1',
+ componentProps: {
+ dictCode: 'valid_status',
+ type: 'radioButton',
+ },
+ },
+];
+
+//租户用户列表
+export const userTenantColumns: BasicColumn[] = [
+ {
+ title: '用户账号',
+ dataIndex: 'username',
+ width: 120,
+ },
+ {
+ title: '用户姓名',
+ dataIndex: 'realname',
+ width: 100,
+ },
+ {
+ title: '头像',
+ dataIndex: 'avatar',
+ width: 120,
+ customRender: render.renderAvatar,
+ },
+ {
+ title: '手机号',
+ dataIndex: 'phone',
+ width: 100,
+ },
+ {
+ title: '部门',
+ width: 150,
+ dataIndex: 'orgCodeTxt',
+ },
+ {
+ title: '状态',
+ dataIndex: 'status',
+ width: 80,
+ customRender: ({ text }) => {
+ if (text === '1') {
+ return '正常';
+ } else if (text === '3') {
+ return '审批中';
+ } else {
+ return '已拒绝';
+ }
+ },
+ },
+];
+
+//用户租户搜索表单
+export const userTenantFormSchema: FormSchema[] = [
+ {
+ label: '账号',
+ field: 'username',
+ component: 'Input',
+ colProps: { span: 6 },
+ },
+ {
+ label: '名字',
+ field: 'realname',
+ component: 'Input',
+ colProps: { span: 6 },
+ },
+ {
+ label: '性别',
+ field: 'sex',
+ component: 'JDictSelectTag',
+ componentProps: {
+ dictCode: 'sex',
+ placeholder: '请选择性别',
+ stringToNumber: true,
+ },
+ colProps: { span: 6 },
+ },
+];
From d5fd46fa93d0da012538bc60add76d35df9b7037 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=AE=B6=E4=B8=9C?= <1654135867@qq.com>
Date: Tue, 27 Aug 2024 10:59:27 +0800
Subject: [PATCH 8/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=99=E5=B8=88?=
=?UTF-8?q?=E5=BA=93=E9=83=A8=E5=88=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/SeteacherController.java | 351 ++++++++++++++++++
.../demo/seteacher/entity/Seteacher.java | 102 +++++
.../seteacher/mapper/SeteacherMapper.java | 17 +
.../seteacher/mapper/xml/SeteacherMapper.xml | 5 +
.../seteacher/service/ISeteacherService.java | 14 +
.../service/impl/SeteacherServiceImpl.java | 19 +
6 files changed, 508 insertions(+)
create mode 100644 jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/controller/SeteacherController.java
create mode 100644 jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/entity/Seteacher.java
create mode 100644 jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/SeteacherMapper.java
create mode 100644 jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/xml/SeteacherMapper.xml
create mode 100644 jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/ISeteacherService.java
create mode 100644 jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/impl/SeteacherServiceImpl.java
diff --git a/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/controller/SeteacherController.java b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/controller/SeteacherController.java
new file mode 100644
index 00000000..78c5df61
--- /dev/null
+++ b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/controller/SeteacherController.java
@@ -0,0 +1,351 @@
+package org.jeecg.modules.demo.seteacher.controller;
+
+import java.util.*;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.PasswordUtil;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.base.service.BaseCommonService;
+import org.jeecg.modules.demo.compexp.entity.CompExp;
+import org.jeecg.modules.demo.expert.entity.Expert;
+import org.jeecg.modules.demo.seteacher.entity.Seteacher;
+import org.jeecg.modules.demo.seteacher.service.ISeteacherService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecg.modules.system.entity.*;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.system.service.ISysRoleService;
+import org.jeecg.modules.system.service.ISysUserRoleService;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: seteacher
+ * @Author: jeecg-boot
+ * @Date: 2024-08-23
+ * @Version: V1.0
+ */
+@Api(tags="seteacher")
+@RestController
+@RequestMapping("/seteacher/seteacher")
+@Slf4j
+public class SeteacherController extends JeecgController {
+ @Autowired
+ private ISeteacherService seteacherService;
+ @Autowired
+ private BaseCommonService baseCommonService;
+ @Autowired
+ private ISysUserService sysUserService;
+ @Autowired
+ private ISysUserRoleService sysUserRoleService;
+ @Autowired
+ private ISysRoleService sysRoleService;
+ @Autowired
+ private ISysDictService sysDictService;
+
+ /**
+ * 分页列表查询
+ *
+ * @param seteacher
+ * @param pageNo
+ * @param pageSize
+ * @param req
+ * @return
+ */
+ //@AutoLog(value = "seteacher-分页列表查询")
+ @ApiOperation(value="seteacher-分页列表查询", notes="seteacher-分页列表查询")
+ @GetMapping(value = "/list")
+ public Result> queryPageList(Seteacher seteacher,
+ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+ HttpServletRequest req) {
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(seteacher, req.getParameterMap());
+ Page page = new Page(pageNo, pageSize);
+ IPage pageList = seteacherService.page(page, queryWrapper);
+ return Result.OK(pageList);
+ }
+
+ /**
+ * 添加教师信息
+ *
+ * @param seteacher
+ * @return
+ */
+ @AutoLog(value = "seteacher-添加")
+ @ApiOperation(value="seteacher-添加", notes="seteacher-添加")
+ @RequiresPermissions("seteacher:seteacher:add")
+ @PostMapping(value = "/add")
+ public Result add(@RequestBody Seteacher seteacher) {
+ seteacherService.save(seteacher);
+ return Result.OK("添加成功!");
+ }
+
+ @RequestMapping(value = "/addTEA", method = RequestMethod.POST)
+ public Result addZJ(@RequestBody JSONObject jsonObject) {
+ LoginUser userss= (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ //设置部门
+ String selectedDeparts ="";
+ //根据user查找角色
+ String roles = getRoleByUserId(userss.getId());
+ //如果是学校管理员就就找到当前设置的院系,如果是院系管理员就直接获取所在院系
+ if (roles.equals("superAdmin")){
+ selectedDeparts = jsonObject.getString("selecteddeparts");
+ }else{
+ String roleid =findroles(userss);
+ selectedDeparts = roleid;
+ }
+ Result result = new Result();
+ // String selectedRoles = jsonObject.getString("selectedroles");
+ String selectedRoles = "1731948288626339844";
+ String expSc = jsonObject.getString("expSc");
+ String expResume = jsonObject.getString("expResume");//简介
+ String expTitle = jsonObject.getString("expTitle");
+ String teamajor = jsonObject.getString("teamajor");//专业
+ String expXw = jsonObject.getString("expXw");//学位
+ String expZc = jsonObject.getString("expZc");//职称
+ String expYjfx = jsonObject.getString("expYjfx");//研究方向
+ String expCsgz = jsonObject.getString("expCsgz");//从事工作
+ try {
+ SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
+ user.setCreateTime(new Date());//设置创建时间
+ String salt = oConvertUtils.randomGen(8);
+ user.setSalt(salt);
+ String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), salt);
+ user.setPassword(passwordEncode);
+ user.setStatus(1);
+ user.setDelFlag(CommonConstant.DEL_FLAG_0);
+ //用户表字段org_code不能在这里设置他的值
+ user.setOrgCode(null);
+ // 保存用户走一个service 保证事务
+ //获取租户ids
+ String relTenantIds = jsonObject.getString("relTenantIds");
+ sysUserService.saveUser(user, selectedRoles, selectedDeparts, relTenantIds);
+ baseCommonService.addLog("添加专家用户,username: " +user.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+ Seteacher expert = new Seteacher();
+ expert.setUserId(user.getId());
+ expert.setExpImg(user.getAvatar());
+ expert.setExpSc(expSc);
+ expert.setExpResume(expResume);
+ expert.setExpTitle(expTitle);
+ expert.setName(user.getRealname());
+ expert.setExpXw(expXw);//学位
+ expert.setExpZc(expZc);//职称
+ expert.setExpYjfx(expYjfx);//研究方向
+ expert.setExpCsgz(expCsgz);//从事工作
+ expert.setTeamajor(teamajor);//专业
+ seteacherService.save(expert);
+ result.success("添加成功!");
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ result.error500("操作失败");
+ }
+ return result;
+ }
+
+ //用于当前登录信息的部门设置
+ private String findroles(LoginUser userss) {
+ SysDict sysDict = sysDictService.query().eq("org_code",userss.getOrgCode()).one();
+ return sysDict.getId();
+
+ }
+
+
+ /**
+ * 1.2根据用户id获取用户角色信息
+ *
+ * @param userId
+ * @return
+ */
+ public String getRoleByUserId(String userId) {
+ SysUserRole userRoleList = sysUserRoleService.query().eq("user_id", userId).one();
+ SysRole sysRole = sysRoleService.getById(userRoleList.getRoleId());
+
+ return sysRole.getRoleCode();
+ }
+
+ @RequestMapping(value = "/editTEA", method = {RequestMethod.PUT,RequestMethod.POST})
+ public Result editZJ(@RequestBody JSONObject jsonObject,HttpServletRequest req) {
+ Result result = new Result();
+ try {
+ SysUser sysUser = sysUserService.getById(jsonObject.getString("id"));
+ baseCommonService.addLog("编辑用户,username: " +sysUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2);
+ if(sysUser==null) {
+ result.error500("未找到对应实体");
+ }else {
+ SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
+ user.setUpdateTime(new Date());
+ //String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), sysUser.getSalt());
+ user.setPassword(sysUser.getPassword());
+ String roles = "1731948288626339844";
+ String departs = jsonObject.getString("selecteddeparts");
+ String expSc = jsonObject.getString("expSc");
+ String expResume = jsonObject.getString("expResume");
+ String expTitle = jsonObject.getString("expTitle");
+ String teamajor =jsonObject.getString("teamajor");
+ String expXw = jsonObject.getString("expXw");//学位
+ String expZc = jsonObject.getString("expZc");//职称
+ String expYjfx = jsonObject.getString("expYjfx");//研究方向
+ String expCsgz = jsonObject.getString("expCsgz");//从事工作
+
+ if(oConvertUtils.isEmpty(departs)){
+ //vue3.0前端只传递了departIds
+ departs=user.getDepartIds();
+ }
+ //用户表字段org_code不能在这里设置他的值
+ user.setOrgCode(null);
+ // 修改用户走一个service 保证事务
+ //获取租户ids
+ String relTenantIds = jsonObject.getString("relTenantIds");
+ sysUserService.editUser(user, roles, departs, relTenantIds);
+ Seteacher expert = new Seteacher();
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(expert, req.getParameterMap());
+ queryWrapper.eq("user_id",user.getId());
+ List listex = seteacherService.list(queryWrapper);
+ expert = listex.get(0);
+ expert.setUserId(user.getId());
+ expert.setExpImg(user.getAvatar());
+ expert.setExpSc(expSc);
+ expert.setExpResume(expResume);
+ expert.setExpTitle(expTitle);
+ expert.setName(user.getRealname());
+ expert.setExpXw(expXw);//学位
+ expert.setTeamajor(teamajor);//专业
+ expert.setExpZc(expZc);//职称
+ expert.setExpYjfx(expYjfx);//研究方向
+ expert.setExpCsgz(expCsgz);//从事工作
+
+ seteacherService.updateById(expert);
+ result.success("修改成功!");
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ result.error500("操作失败");
+ }
+ return result;
+ }
+
+
+
+
+
+ /**
+ * 编辑
+ *
+ * @param seteacher
+ * @return
+ */
+ @AutoLog(value = "seteacher-编辑")
+ @ApiOperation(value="seteacher-编辑", notes="seteacher-编辑")
+ @RequiresPermissions("seteacher:seteacher:edit")
+ @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+ public Result edit(@RequestBody Seteacher seteacher) {
+ seteacherService.updateById(seteacher);
+ return Result.OK("编辑成功!");
+ }
+
+ /**
+ * 通过id删除
+ *
+ * @param id
+ * @return
+ */
+ @AutoLog(value = "seteacher-通过id删除")
+ @ApiOperation(value="seteacher-通过id删除", notes="seteacher-通过id删除")
+ @RequiresPermissions("seteacher:seteacher:delete")
+ @DeleteMapping(value = "/delete")
+ public Result delete(@RequestParam(name="id",required=true) String id) {
+ seteacherService.removeById(id);
+ return Result.OK("删除成功!");
+ }
+
+ /**
+ * 批量删除
+ *
+ * @param ids
+ * @return
+ */
+ @AutoLog(value = "seteacher-批量删除")
+ @ApiOperation(value="seteacher-批量删除", notes="seteacher-批量删除")
+ @RequiresPermissions("seteacher:seteacher:deleteBatch")
+ @DeleteMapping(value = "/deleteBatch")
+ public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+ this.seteacherService.removeByIds(Arrays.asList(ids.split(",")));
+ return Result.OK("批量删除成功!");
+ }
+
+ /**
+ * 通过id查询
+ *
+ * @param id
+ * @return
+ */
+ //@AutoLog(value = "seteacher-通过id查询")
+ @ApiOperation(value="seteacher-通过id查询", notes="seteacher-通过id查询")
+ @GetMapping(value = "/queryById")
+ public Result queryById(@RequestParam(name="id",required=true) String id,HttpServletRequest req) {
+ Seteacher seteacher = new Seteacher();
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(seteacher, req.getParameterMap());
+ queryWrapper.eq("user_id",id);
+ seteacher=seteacherService.getOne(queryWrapper);
+ if(seteacher==null) {
+ return Result.error("未找到对应数据");
+ }
+ return Result.OK(seteacher);
+ }
+
+ /**
+ * 导出excel
+ *
+ * @param request
+ * @param seteacher
+ */
+ @RequiresPermissions("seteacher:seteacher:exportXls")
+ @RequestMapping(value = "/exportXls")
+ public ModelAndView exportXls(HttpServletRequest request, Seteacher seteacher) {
+ return super.exportXls(request, seteacher, Seteacher.class, "seteacher");
+ }
+
+ /**
+ * 通过excel导入数据
+ *
+ * @param request
+ * @param response
+ * @return
+ */
+ @RequiresPermissions("seteacher:seteacher:importExcel")
+ @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+ public Result> importExcel(HttpServletRequest request, HttpServletResponse response) {
+ return super.importExcel(request, response, Seteacher.class);
+ }
+
+}
diff --git a/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/entity/Seteacher.java b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/entity/Seteacher.java
new file mode 100644
index 00000000..eb54dc88
--- /dev/null
+++ b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/entity/Seteacher.java
@@ -0,0 +1,102 @@
+package org.jeecg.modules.demo.seteacher.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: seteacher
+ * @Author: jeecg-boot
+ * @Date: 2024-08-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("seteacher")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="seteacher对象", description="seteacher")
+public class Seteacher implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**id*/
+ @TableId(type = IdType.ASSIGN_ID)
+ @ApiModelProperty(value = "id")
+ private String id;
+ /**创建人*/
+ @ApiModelProperty(value = "创建人")
+ private String createBy;
+ /**创建日期*/
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "创建日期")
+ private Date createTime;
+ /**更新人*/
+ @ApiModelProperty(value = "更新人")
+ private String updateBy;
+ /**更新日期*/
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "更新日期")
+ private Date updateTime;
+ /**所属部门*/
+ @ApiModelProperty(value = "所属部门")
+ private String sysOrgCode;
+ /**用户id*/
+ @Excel(name = "用户id", width = 15)
+ @ApiModelProperty(value = "用户id")
+ private String userId;
+ /**专家照片*/
+ @Excel(name = "专家照片", width = 15)
+ @ApiModelProperty(value = "专家照片")
+ private String expImg;
+ /**专家毕业院校*/
+ @Excel(name = "专家毕业院校", width = 15)
+ @ApiModelProperty(value = "专家毕业院校")
+ private String expSc;
+ /**简介*/
+ @Excel(name = "简介", width = 15)
+ @ApiModelProperty(value = "简介")
+ private String expResume;
+ /**专家学历*/
+ @Excel(name = "专家学历", width = 15)
+ @ApiModelProperty(value = "专家学历")
+ private String expTitle;
+ /**学位*/
+ @Excel(name = "学位", width = 15)
+ @ApiModelProperty(value = "学位")
+ private String expXw;
+ /**职称*/
+ @Excel(name = "职称", width = 15)
+ @ApiModelProperty(value = "职称")
+ private String expZc;
+ /**研究方向*/
+ @Excel(name = "研究方向", width = 15)
+ @ApiModelProperty(value = "研究方向")
+ private String expYjfx;
+ /**从事工作*/
+ @Excel(name = "从事工作", width = 15)
+ @ApiModelProperty(value = "从事工作")
+ private String expCsgz;
+ /**专家名称*/
+ @Excel(name = "专家名称", width = 15)
+ @ApiModelProperty(value = "专家名称")
+ private String name;
+ /**专业*/
+ @Excel(name = "专业", width = 15)
+ @ApiModelProperty(value = "专业")
+ private String teamajor;
+}
diff --git a/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/SeteacherMapper.java b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/SeteacherMapper.java
new file mode 100644
index 00000000..729ad607
--- /dev/null
+++ b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/SeteacherMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.demo.seteacher.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.demo.seteacher.entity.Seteacher;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: seteacher
+ * @Author: jeecg-boot
+ * @Date: 2024-08-23
+ * @Version: V1.0
+ */
+public interface SeteacherMapper extends BaseMapper {
+
+}
diff --git a/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/xml/SeteacherMapper.xml b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/xml/SeteacherMapper.xml
new file mode 100644
index 00000000..03642c84
--- /dev/null
+++ b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/mapper/xml/SeteacherMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/ISeteacherService.java b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/ISeteacherService.java
new file mode 100644
index 00000000..00d86be9
--- /dev/null
+++ b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/ISeteacherService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.demo.seteacher.service;
+
+import org.jeecg.modules.demo.seteacher.entity.Seteacher;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: seteacher
+ * @Author: jeecg-boot
+ * @Date: 2024-08-23
+ * @Version: V1.0
+ */
+public interface ISeteacherService extends IService {
+
+}
diff --git a/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/impl/SeteacherServiceImpl.java b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/impl/SeteacherServiceImpl.java
new file mode 100644
index 00000000..46cea898
--- /dev/null
+++ b/jeecg-boot-master/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/seteacher/service/impl/SeteacherServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.demo.seteacher.service.impl;
+
+import org.jeecg.modules.demo.seteacher.entity.Seteacher;
+import org.jeecg.modules.demo.seteacher.mapper.SeteacherMapper;
+import org.jeecg.modules.demo.seteacher.service.ISeteacherService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: seteacher
+ * @Author: jeecg-boot
+ * @Date: 2024-08-23
+ * @Version: V1.0
+ */
+@Service
+public class SeteacherServiceImpl extends ServiceImpl implements ISeteacherService {
+
+}
From 04c5da6081e592087e7c8e5ecfb4b400676430c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=AE=B6=E4=B8=9C?= <1654135867@qq.com>
Date: Tue, 27 Aug 2024 10:59:45 +0800
Subject: [PATCH 9/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=99=E5=B8=88?=
=?UTF-8?q?=E5=BA=93=E9=83=A8=E5=88=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../system/controller/SysUserController.java | 38 +++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/jeecg-boot-master/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java b/jeecg-boot-master/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
index a0e964ec..10d3df8c 100644
--- a/jeecg-boot-master/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
+++ b/jeecg-boot-master/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
@@ -192,6 +192,44 @@ public class SysUserController {
return result;
}
+ /**
+ * 用于教师库管理
+ *
+ * @param user
+ * @param pageNo
+ * @param pageSize
+ * @param req
+ * @return
+ */
+ //@RequiresPermissions("system:user:listAll")
+ @RequestMapping(value = "/listTEAAll", method = RequestMethod.GET)
+ public Result> listTEAAll(SysUser user, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
+ Result> result = new Result>();
+ Page page = new Page(pageNo, pageSize);
+// String roleId = req.getParameter("roleId");
+ String roleId = "1731948288626339844";
+ String username = req.getParameter("username");
+ IPage pageList = sysUserService.getUserByRoleId(page,roleId,username);
+ //批量查询用户的所属部门
+ //step.1 先拿到全部的 useids
+ //step.2 通过 useids,一次性查询用户的所属部门名字
+ List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
+ if (userIds != null && userIds.size() > 0) {
+ Map useDepNames = sysUserService.getDepNamesByUserIds(userIds);
+ pageList.getRecords().forEach(item ->
+ {
+ item.setOrgCodeTxt(useDepNames.get(item.getId()));
+
+ });
+ }
+ result.setSuccess(true);
+ result.setResult(pageList);
+ return result;
+ }
+
+
/**
* 获取系统用户数据(查询全部用户,不做租户隔离)
*