diff --git a/src/directives/index.js b/src/directives/index.js index f27a036..43e605a 100644 --- a/src/directives/index.js +++ b/src/directives/index.js @@ -8,7 +8,7 @@ import { router } from '@/router' -const permission = { +export const permission = { mounted(el, binding) { const currentRoute = unref(router.currentRoute) const btns = currentRoute.meta?.btns?.map(item => item.code) || [] diff --git a/src/router/guards/permission-guard.js b/src/router/guards/permission-guard.js index 6e0115d..48bfc89 100644 --- a/src/router/guards/permission-guard.js +++ b/src/router/guards/permission-guard.js @@ -43,6 +43,12 @@ export function createPermissionGuard(router) { return { ...to, replace: true } } + router.addRoute({ + name: 'catchAll', + path: '/:catchAll(.*)', + redirect: '/404', + }) + const routes = router.getRoutes() if (routes.find(route => route.name === to.name)) return true diff --git a/src/store/modules/router.js b/src/store/modules/router.js index 51a5b59..21e0098 100644 --- a/src/store/modules/router.js +++ b/src/store/modules/router.js @@ -16,6 +16,8 @@ export const useRouterStore = defineStore('router', () => { accessRoutes.forEach((item) => { router.hasRoute(item.name) && router.removeRoute(item.name) }) + + router.removeRoute('catchAll') } return { diff --git a/src/utils/index.js b/src/utils/index.js index a18642a..154db1e 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -11,4 +11,5 @@ export * from './common' export * from './http' export * from './is' export * from './naiveTools' +export * from './permissionH' export * from './storage' diff --git a/src/utils/permissionH.js b/src/utils/permissionH.js new file mode 100644 index 0000000..9847509 --- /dev/null +++ b/src/utils/permissionH.js @@ -0,0 +1,9 @@ +import { permission } from '@/directives' +/** + * @description: 按钮权限渲染 + */ +import { withDirectives } from 'vue' + +export function withPermission(vnode, code) { + return withDirectives(vnode, [[permission, code]]) +} diff --git a/src/views/pms/role/role-user.vue b/src/views/pms/role/role-user.vue index b13fd70..875bcb0 100644 --- a/src/views/pms/role/role-user.vue +++ b/src/views/pms/role/role-user.vue @@ -163,31 +163,31 @@ const columns = [ render(row) { return row.roles?.some(item => item.id === +route.params.roleId) ? h( - NButton, - { - size: 'small', - type: 'error', - secondary: true, - onClick: () => handleBatchRemove([row.id]), - }, - { - default: () => '取消授权', - icon: () => h('i', { class: 'i-material-symbols:delete-outline text-14' }), - }, - ) + NButton, + { + size: 'small', + type: 'error', + secondary: true, + onClick: () => handleBatchRemove([row.id]), + }, + { + default: () => '取消授权', + icon: () => h('i', { class: 'i-material-symbols:delete-outline text-14' }), + }, + ) : h( - NButton, - { - size: 'small', - type: 'primary', - secondary: true, - onClick: () => handleBatchAdd([row.id]), - }, - { - default: () => '授权', - icon: () => h('i', { class: 'i-line-md:confirm-circle text-14' }), - }, - ) + NButton, + { + size: 'small', + type: 'primary', + secondary: true, + onClick: () => handleBatchAdd([row.id]), + }, + { + default: () => '授权', + icon: () => h('i', { class: 'i-line-md:confirm-circle text-14' }), + }, + ) }, }, ] diff --git a/src/views/pms/user/index.vue b/src/views/pms/user/index.vue index fc56310..c653612 100644 --- a/src/views/pms/user/index.vue +++ b/src/views/pms/user/index.vue @@ -112,7 +112,7 @@