diff --git a/src/api/auth.js b/src/api/auth.js index d084057..1816ae7 100644 --- a/src/api/auth.js +++ b/src/api/auth.js @@ -26,7 +26,7 @@ export function getUserInfo() { // 获取权限列表 export function getPermission(params) { return request({ - url: '/u-admin/uc/ucPermission/listUserMenu', + url: '/uc/menu', method: 'get', params, }); diff --git a/src/api/permission/employee.js b/src/api/permission/employee.js index 4069c24..2acd82c 100644 --- a/src/api/permission/employee.js +++ b/src/api/permission/employee.js @@ -12,6 +12,19 @@ export const detail = (id) => { method: 'get', }); }; +export const searchPermission = (id) => { + return request({ + url: '/uc/employee/role/' + id, + method: 'get', + }); +}; +export const savePermission = (id, data) => { + return request({ + url: '/uc/employee/role/' + id, + method: 'put', + data, + }); +}; export const create = (data) => { return request({ url: '/uc/employee', diff --git a/src/store/modules/permission/employee/employee.js b/src/store/modules/permission/employee/employee.js index 693f822..750b0f6 100644 --- a/src/store/modules/permission/employee/employee.js +++ b/src/store/modules/permission/employee/employee.js @@ -1,5 +1,6 @@ import * as deptAPI from '@/api/permission/dept.js'; import * as api from '@/api/permission/employee.js'; +import * as systemAPI from '@/api/permission/system.js'; import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; const state = () => ({ code: 'EmployeeManagement', @@ -8,6 +9,7 @@ const state = () => ({ total: 0, opts: { init: false, + system: [], dept: [], }, }); @@ -36,6 +38,7 @@ const actions = { ...state.opts, init: true, dept: await deptAPI.search({ hiddenDisable: true }), + system: await systemAPI.search(), }); }, detail: async (context, id) => { @@ -45,12 +48,27 @@ const actions = { } return res; }, + permission: async (context, id) => { + let res = await api.searchPermission(id); + if (!res) { + ElMessage.error('加载权限列表失败'); + } + return res; + }, save: async ({ dispatch }, data) => { let save = data.id ? api.update : api.create; let res = await save(data); if (res) { - ElMessage.success('保存成功'); - dispatch('search'); + if (!data.id) { + data.id = res; + } + res = await api.savePermission(data.id, { roleIds: data.roleIds }); + if (res) { + ElMessage.success('保存成功'); + dispatch('search'); + } else { + ElMessage.error('保存角色失败'); + } } else { ElMessage.error('保存失败'); } diff --git a/src/views/permission/employee/form.vue b/src/views/permission/employee/form.vue index 7fdb505..776db69 100644 --- a/src/views/permission/employee/form.vue +++ b/src/views/permission/employee/form.vue @@ -43,6 +43,49 @@ + +
+
+

+ {{ item.systemName }} +

+
+ + {{ role.roleName }} + + 添加角色 +
+
+
+ + + + + + + + +
-
+ -
+ -
+ -
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 保存 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 保存 + + + - - - - - - - - - - - - - - - - - - - - - 保存 - - + + + + + + + + + + + + + + + + + + + + + + 保存 + + + @@ -396,6 +400,7 @@ flex-direction: column; .body { flex: 1; + overflow: hidden; display: flex; flex-direction: row; > * { @@ -404,6 +409,17 @@ margin-left: @layout-space; } } + .el-card { + display: flex; + flex-direction: column; + :deep(.el-card__body) { + flex: 1; + overflow: hidden; + .card-body { + padding-right: @layout-space; + } + } + } :deep(.el-tree) { .flex { width: 100%; diff --git a/src/views/permission/role/index.vue b/src/views/permission/role/index.vue index 45d1de9..9037bae 100644 --- a/src/views/permission/role/index.vue +++ b/src/views/permission/role/index.vue @@ -203,7 +203,7 @@ const menuList = ref([]); const permissionList = ref([]); const formState = reactive({ - currentTab: '1', + currentTab: '0', formVisible: false, submitting: false, form: { @@ -230,31 +230,6 @@ departmentList: [{ required: true, trigger: 'change', message: '绑定组织不能为空' }], }, }); - watch( - () => formState.currentTab, - async (value) => { - let res = await store.dispatch('role/detail', formState.form.id); - res.menuIds = []; - res.permissionIds = []; - const deep = (arr) => { - (arr || []).forEach((item) => { - if (item.isHave) { - res.menuIds.push(item.id); - } - res.permissionIds.push( - ...(item.permissionChild || []).filter((item) => item.isHave).map((item) => item.id) - ); - deep(item.menuChild); - }); - }; - deep(res.roleMenuTree); - delete res.roleMenuTree; - Object.assign(formState.form, res); - if (value === '2') { - menuList.value = await store.dispatch('role/loadMenu', formState.form.systemId); - } - } - ); const refsTree = ref(null); const checkAll = ref(false); watch(checkAll, (value) => { @@ -301,8 +276,34 @@ } }); }; + const handleDetail = async () => { + formState.submitting = true; + if (formState.currentTab === '1') { + let res = await store.dispatch('role/detail', formState.form.id); + res.role.menuIds = []; + res.role.permissionIds = []; + const deep = (arr) => { + (arr || []).forEach((item) => { + if (item.isHave) { + res.role.menuIds.push(item.id); + } + res.role.permissionIds.push( + ...(item.permissionChild || []).filter((item) => item.isHave).map((item) => item.id) + ); + deep(item.menuChild); + }); + }; + deep(res.roleMenuTree); + Object.assign(formState.form, res.role); + } else if (formState.currentTab === '2') { + menuList.value = await store.dispatch('role/loadMenu', formState.form.systemId); + } + formState.submitting = false; + }; + watch(() => formState.currentTab, handleDetail); const handleCreate = (row) => { formState.formVisible = true; + formState.currentTab = '1'; Object.assign( formState.form, _.cloneDeep( @@ -330,7 +331,7 @@ ); if (formState.currentTab === '3') { formState.formVisible = false; - formState.currentTab = '1'; + formState.currentTab = '0'; handleSearch(); } else { let data = _.cloneDeep(formState.form); @@ -342,7 +343,7 @@ : 'role/updateDept', data ); - if (res && formState.currentTab === '1') { + if (res && formState.currentTab === '1' && !formState.form.id) { formState.form.id = res.id; } formState.currentTab = +formState.currentTab + 1 + '';