hasPermi.ts,具体逻辑根据各自的项目自行设计
import router from '@/router';
import { usePermissionStore } from '@/store';export default {mounted(el, binding) {const { value } = binding;if (value && value instanceof Array && value.length > 0) {let hasPermission = false;const permissionStore = usePermissionStore();const pagesRoutesMap = permissionStore.pagesRoutesMap;if (pagesRoutesMap.size === 0) {hasPermission = false;} else {const routePath = (router.currentRoute as any)._value.path || '';const target: any = pagesRoutesMap.get(routePath);if (!target) {hasPermission = false;} else {const permissions = target.buttonPermissionList || [];hasPermission = permissions.some((permission) => {return value.includes(permission);});}}if (!hasPermission) {el.parentNode && el.parentNode.removeChild(el);}} else {throw new Error('v-hasPermi value must be an array');}},
};
index.ts
import hasPermi from './hasPermi';export default function directive(app) {app.directive('hasPermi', hasPermi);
}
在main.ts中引入
import directive from '@/directive'; directive(app);
使用
v-hasPermi="['system:user:add', 'system:user:delete']"