From 0edd7184a640ec22edf9ff808b5d64a3e5574ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=89=E6=9D=A5=E6=8A=80=E6=9C=AF?= <1490493387@qq.com> Date: Sun, 12 Dec 2021 19:57:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(Menu.vue):=20=E6=B7=BB=E5=8A=A0=E9=9D=A2?= =?UTF-8?q?=E5=8C=85=E5=B1=91=E5=AF=BC=E8=88=AA=E5=92=8C=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +- src/api/system/menu.ts | 2 +- src/api/system/perm.ts | 79 +++++ src/api/system/role.ts | 79 +++++ src/components/Breadcrumb/index.vue | 69 ++-- src/permission.ts | 7 +- src/store/modules/permission.ts | 12 +- src/views/system/dict/components/Dict.vue | 2 +- src/views/system/dict/components/DictItem.vue | 18 +- src/views/system/menu/components/Menu.vue | 328 +++++++++++++++++- src/views/system/menu/components/Perm.vue | 324 ++++++++++++++++- src/views/system/menu/index.vue | 19 +- 12 files changed, 876 insertions(+), 66 deletions(-) create mode 100644 src/api/system/perm.ts create mode 100644 src/api/system/role.ts diff --git a/package.json b/package.json index 7c9f6b26..de586a08 100644 --- a/package.json +++ b/package.json @@ -7,15 +7,16 @@ "serve": "vite preview" }, "dependencies": { + "@element-plus/icons": "0.0.11", "axios": "^0.24.0", "element-plus": "^1.2.0-beta.6", - "@element-plus/icons": "0.0.11", "nprogress": "^0.2.0", "path-browserify": "^1.0.1", "path-to-regexp": "^6.2.0", "screenfull": "^6.0.0", "vue": "^3.2.16", "vue-router": "^4.0.12", + "vue3-treeselect": "^0.1.10", "vuex": "^4.0.2" }, "devDependencies": { diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts index b59dc84a..b47013b3 100644 --- a/src/api/system/menu.ts +++ b/src/api/system/menu.ts @@ -87,7 +87,7 @@ export function updateMenu(id: number, data: object) { * * @param ids 菜单ID,多个以英文逗号(,)分割 */ -export function deleteMenu(ids: string) { +export function deleteMenus(ids: string) { return request({ url: '/youlai-admin/api/v1/menus/' + ids, method: 'delete' diff --git a/src/api/system/perm.ts b/src/api/system/perm.ts new file mode 100644 index 00000000..bbe9de17 --- /dev/null +++ b/src/api/system/perm.ts @@ -0,0 +1,79 @@ +import request from '@/utils/request' + +/** + * 获取权限分页列表 + * + * @param queryParams + */ +export function listPermsWithPage(queryParams: object) { + return request({ + url: '/youlai-admin/api/v1/permissions/page', + method: 'get', + params: queryParams + }) +} + +/** + * 获取权限列表 + * + * @param queryParams + */ +export function listPerms(queryParams: object) { + return request({ + url: '/youlai-admin/api/v1/permissions', + method: 'get', + params: queryParams + }) +} + +/** + * 获取权限详情 + * + * @param id + */ +export function getPermDetail(id: number) { + return request({ + url: '/youlai-admin/api/v1/permissions/' + id, + method: 'get' + }) +} + +/** + * 添加权限 + * + * @param data + */ +export function addPerm(data: object) { + return request({ + url: '/youlai-admin/api/v1/permissions', + method: 'post', + data: data + }) +} + +/** + * 更新权限 + * + * @param id + * @param data + */ +export function updatePerm(id: number, data: object) { + return request({ + url: '/youlai-admin/api/v1/permissions/' + id, + method: 'put', + data: data + }) +} + +/** + * 批量删除权限,多个以英文逗号(,)分割 + * + * @param ids + */ +export function deletePerms(ids: string) { + return request({ + url: '/youlai-admin/api/v1/permissions/' + ids, + method: 'delete' + }) +} + diff --git a/src/api/system/role.ts b/src/api/system/role.ts new file mode 100644 index 00000000..cd197c21 --- /dev/null +++ b/src/api/system/role.ts @@ -0,0 +1,79 @@ +import request from '@/utils/request' + +/** + * 获取角色分页列表 + * + * @param queryParams + */ +export function listRolesWithPage(queryParams: object) { + return request({ + url: '/youlai-admin/api/v1/roles/page', + method: 'get', + params: queryParams + }) +} + +/** + * 获取角色列表 + * + * @param queryParams + */ +export function listRoles(queryParams: object) { + return request({ + url: '/youlai-admin/api/v1/roles', + method: 'get', + params: queryParams + }) +} + +/** + * 获取角色详情 + * + * @param id + */ +export function getPermDetail(id: number) { + return request({ + url: '/youlai-admin/api/v1/roles/' + id, + method: 'get' + }) +} + +/** + * 添加角色 + * + * @param data + */ +export function addPerm(data: object) { + return request({ + url: '/youlai-admin/api/v1/roles', + method: 'post', + data: data + }) +} + +/** + * 更新角色 + * + * @param id + * @param data + */ +export function updatePerm(id: number, data: object) { + return request({ + url: '/youlai-admin/api/v1/roles/' + id, + method: 'put', + data: data + }) +} + +/** + * 批量删除角色,多个以英文逗号(,)分割 + * + * @param ids + */ +export function deleteRoles(ids: string) { + return request({ + url: '/youlai-admin/api/v1/roles/' + ids, + method: 'delete' + }) +} + diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index eb6d0ab0..e32bf387 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -1,42 +1,50 @@ + + \ No newline at end of file diff --git a/src/permission.ts b/src/permission.ts index 871c7fde..86732f07 100644 --- a/src/permission.ts +++ b/src/permission.ts @@ -11,7 +11,7 @@ const whiteList = ['/login', '/auth-redirect'] router.beforeEach(async (to, form, next) => { NProgress.start() - const hasToken =store.state.user.token + const hasToken = store.state.user.token if (hasToken) { // 如果登录成功,跳转到首页 if (to.path === '/login') { @@ -25,8 +25,8 @@ router.beforeEach(async (to, form, next) => { try { await store.dispatch('user/getUserInfo') const roles = store.state.user.roles - await store.dispatch('permission/generateRoutes', roles) - store.state.permission.addRoutes.forEach(route => { + const accessRoutes = await store.dispatch('permission/generateRoutes', roles) + accessRoutes.forEach((route: any) => { router.addRoute(route) }) next({...to, replace: true}) @@ -50,7 +50,6 @@ router.beforeEach(async (to, form, next) => { } }) - router.afterEach(() => { NProgress.done() }) \ No newline at end of file diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index 83a5a633..c918c2f2 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -8,10 +8,6 @@ const modules = import.meta.glob("../../views/**/**.vue"); export const Layout = () => import( '@/layout/index.vue') const hasPermission = (roles: string[], route: RouteRecordRaw) => { - // 超级管理员放行 - if (roles.includes('ROOT')) { - return true - } if (route.meta && route.meta.roles) { return roles.some(role => { if (route.meta?.roles !== undefined) { @@ -66,7 +62,12 @@ const permissionModule: Module = { return new Promise((resolve, reject) => { listRoutes().then(response => { const asyncRoutes = response.data - let accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) + let accessedRoutes + if (roles.includes('ROOT')) { // 超级管理员拥有全部权限 + accessedRoutes = asyncRoutes || [] + } else { + accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) + } commit('SET_ROUTES', accessedRoutes) resolve(accessedRoutes) }).catch(error => { @@ -74,7 +75,6 @@ const permissionModule: Module = { }) }) } - } } export default permissionModule; diff --git a/src/views/system/dict/components/Dict.vue b/src/views/system/dict/components/Dict.vue index 67320a7a..b2c73661 100644 --- a/src/views/system/dict/components/Dict.vue +++ b/src/views/system/dict/components/Dict.vue @@ -158,7 +158,7 @@ const state = reactive({ }) function handleQuery() { - emit('dictClick',{}) + emit('dictClick',null) state.loading = true listDictWithPage(state.queryParams).then(response => { const {data, total} = response as any diff --git a/src/views/system/dict/components/DictItem.vue b/src/views/system/dict/components/DictItem.vue index 345ba335..75e0539a 100644 --- a/src/views/system/dict/components/DictItem.vue +++ b/src/views/system/dict/components/DictItem.vue @@ -14,7 +14,7 @@ @@ -32,8 +32,8 @@ size="mini" > - - + +