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; + } + + /** * 获取系统用户数据(查询全部用户,不做租户隔离) *