diff --git a/src/api/system/employee.js b/src/api/permission/employee.js similarity index 100% rename from src/api/system/employee.js rename to src/api/permission/employee.js diff --git a/src/api/permission/role.js b/src/api/permission/role.js new file mode 100644 index 0000000..9d839a8 --- /dev/null +++ b/src/api/permission/role.js @@ -0,0 +1,42 @@ +import request from '@/utils/request.js'; +export const search = (params) => { + return request({ + url: '/uc/role', + method: 'get', + params, + }); +}; +export const detail = (id) => { + return request({ + url: '/uc/role/' + id, + method: 'get', + }); +}; +export const create = (data) => { + return request({ + url: '/uc/role', + method: 'post', + data, + }); +}; +export const update = (data) => { + return request({ + url: '/uc/role/' + data.id, + method: 'put', + data, + }); +}; +export const updateMenu = (data) => { + return request({ + url: '/uc/role/menu', + method: 'put', + data, + }); +}; +export const remove = (idList) => { + return request({ + url: '/uc/role', + method: 'delete', + params: { idList }, + }); +}; diff --git a/src/router/modules/permission.js b/src/router/modules/permission.js index 9a7c670..1ccbecf 100644 --- a/src/router/modules/permission.js +++ b/src/router/modules/permission.js @@ -27,6 +27,15 @@ export default [ icon: 'menu-2', }, }, + { + path: 'role', + name: 'RoleManagement', + component: () => import('@/views/permission/role/index.vue'), + meta: { + title: '角色管理', + icon: 'account-box-fill', + }, + }, { path: 'employee', name: 'EmployeeManagement', diff --git a/src/store/modules/permission/employee/employee.js b/src/store/modules/permission/employee/employee.js index 4ab7c91..693f822 100644 --- a/src/store/modules/permission/employee/employee.js +++ b/src/store/modules/permission/employee/employee.js @@ -1,5 +1,5 @@ import * as deptAPI from '@/api/permission/dept.js'; -import * as api from '@/api/system/employee.js'; +import * as api from '@/api/permission/employee.js'; import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; const state = () => ({ code: 'EmployeeManagement', diff --git a/src/store/modules/permission/role/role.js b/src/store/modules/permission/role/role.js new file mode 100644 index 0000000..69816a6 --- /dev/null +++ b/src/store/modules/permission/role/role.js @@ -0,0 +1,115 @@ +import * as featureAPI from '@/api/permission/feature.js'; +import * as menuAPI from '@/api/permission/menu.js'; +import * as api from '@/api/permission/role.js'; +import * as systemAPI from '@/api/permission/system.js'; +import { ElMessage, ElMessageBox } from '@/plugins/element-plus'; +const state = () => ({ + code: 'RoleManagement', + condition: {}, + list: [], + total: 0, + opts: { + init: false, + system: [], + status: [ + { + label: '启用', + value: true, + }, + { + label: '禁用', + value: false, + }, + ], + }, +}); +const getters = {}; +const mutations = { + setCode: (state, data) => (state.code = data), + setCondition: (state, data) => (state.condition = data), + setList: (state, data) => (state.list = data), + setTotal: (state, data) => (state.total = data), + setOpts: (state, data) => (state.opts = data), +}; +const actions = { + search: async ({ state, commit, rootGetters }) => { + let res = await api.search({ ...rootGetters['local/page'](state.code), ...state.condition }); + commit('setList', res?.records || []); + commit('setTotal', res?.total || 0); + if (!res) { + ElMessage.error('查询失败'); + } + return res; + }, + load: async ({ state, commit }) => { + commit('setOpts', { + ...state.opts, + init: true, + system: await systemAPI.search(), + }); + }, + loadMenu: async (context, systemId) => { + return await menuAPI.search({ systemId }); + }, + loadPermission: async (context, menuId) => { + return await featureAPI.search({ menuId }); + }, + updateMenu: async (context, data) => { + let res = await api.updateMenu(data); + if (!res) { + ElMessage.error('保存菜单权限失败'); + } + return res; + }, + detail: async (context, id) => { + let res = await api.detail(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'); + } else { + ElMessage.error('保存失败'); + } + return res; + }, + remove: async ({ dispatch }, idList) => { + if (!idList.length) { + ElMessage.warning('请选择要删除的数据'); + } else { + try { + await ElMessageBox.confirm('数据删除后无法恢复,确定要删除吗?', '危险操作'); + let res = await api.remove(idList.join(',')); + if (res) { + ElMessage.success('删除成功'); + dispatch('search'); + } else { + ElMessage.error('删除失败'); + } + } catch (e) { + console.info('取消删除', e); + } + } + }, + enable: async ({ dispatch }, data) => { + let res = await api.update(data); + if (res) { + ElMessage.success((data.isEnable ? '启用' : '禁用') + '成功'); + dispatch('search'); + } else { + ElMessage.error((data.isEnable ? '启用' : '禁用') + '失败'); + } + }, +}; +export default { + state, + getters, + mutations, + actions, +}; diff --git a/src/views/permission/employee/index.vue b/src/views/permission/employee/index.vue index 2ae9a21..8433da5 100644 --- a/src/views/permission/employee/index.vue +++ b/src/views/permission/employee/index.vue @@ -44,7 +44,7 @@ + + diff --git a/src/views/system/customer/index.vue b/src/views/system/customer/index.vue index 90e390d..b13447d 100644 --- a/src/views/system/customer/index.vue +++ b/src/views/system/customer/index.vue @@ -33,7 +33,7 @@