diff --git a/apps/web-antd/src/adapter/vxe-table.ts b/apps/web-antd/src/adapter/vxe-table.ts index 397c04a..93a2c9b 100644 --- a/apps/web-antd/src/adapter/vxe-table.ts +++ b/apps/web-antd/src/adapter/vxe-table.ts @@ -11,9 +11,12 @@ import { objectOmit } from '@vueuse/core'; import { Button, Image, Popconfirm, Switch, Tag } from 'ant-design-vue'; import { $t } from '#/locales'; +import { useAuthStore } from '#/store'; import { useVbenForm } from './form'; +const authStore = useAuthStore(); + setupVbenVxeTable({ configVxeTable: (vxeUI) => { vxeUI.setConfig({ @@ -162,7 +165,11 @@ setupVbenVxeTable({ }); return optBtn; }) - .filter((opt) => opt.show !== false); + .filter( + (opt) => + opt.show !== false && + (!opt.permission || authStore.hasPerm(opt.permission)), + ); function renderBtn(opt: Recordable, listen = true) { return h( diff --git a/apps/web-antd/src/store/auth.ts b/apps/web-antd/src/store/auth.ts index 17417e7..2f40f74 100644 --- a/apps/web-antd/src/store/auth.ts +++ b/apps/web-antd/src/store/auth.ts @@ -134,6 +134,12 @@ export const useAuthStore = defineStore('auth', () => { loginLoading.value = false; } + // 👇 添加 hasPerm 方法 + function hasPerm(permission: string): boolean { + const userInfo = userStore.userInfo; + return Boolean(userInfo?.permissions?.includes(permission)); + } + return { $reset, authLogin, @@ -141,5 +147,6 @@ export const useAuthStore = defineStore('auth', () => { loginLoading, logout, csrfToken, + hasPerm, }; }); diff --git a/apps/web-antd/src/views/user/data.ts b/apps/web-antd/src/views/user/data.ts index dd65578..9b99429 100644 --- a/apps/web-antd/src/views/user/data.ts +++ b/apps/web-antd/src/views/user/data.ts @@ -186,17 +186,17 @@ export function useColumns( nameField: 'name', nameTitle: '用户', onClick: onActionClick, - options: [ - { - code: 'edit', - text: '修改', - }, - { - code: 'delete', - text: '删除', - }, - ], }, + options: [ + { + code: 'edit', + text: '修改', + }, + { + code: 'delete', + text: '删除', + }, + ], name: 'CellOperation', }, field: 'operation',