hasPermi.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { Local, Session } from '@/utils/storage';
  2. import { CACHE_KEY } from '@/constants/index';
  3. /**
  4. * 权限校验指令
  5. * 使用方法:v-hasPermi="['system:user:add']"
  6. */
  7. export default {
  8. mounted(el: HTMLElement, binding: any) {
  9. const { value } = binding;
  10. // 兼容 Local 存储与 Session 存储,防止因不同分支的存储容器不同而导致读空
  11. const cacheData = Local.get(CACHE_KEY.PERMS) || Session.get(CACHE_KEY.PERMS);
  12. // 兼容直接数组形式 [...] 与 对象包裹形式 { data: [...] } 或 { value: [...] }
  13. let perms: string[] = [];
  14. if (Array.isArray(cacheData)) {
  15. perms = cacheData;
  16. } else if (cacheData && typeof cacheData === 'object') {
  17. if (Array.isArray(cacheData.data)) {
  18. perms = cacheData.data;
  19. } else if (Array.isArray(cacheData.value)) {
  20. perms = cacheData.value;
  21. }
  22. }
  23. if (value && value instanceof Array && value.length > 0) {
  24. const hasPermissions = perms.some(permission => {
  25. return (value as string[]).includes(permission);
  26. });
  27. if (!hasPermissions) {
  28. // 如果没有权限,则移除元素
  29. el.parentNode && el.parentNode.removeChild(el);
  30. }
  31. } else {
  32. console.error(`[v-hasPermi]: 请设置操作权限标签值, 如 v-hasPermi="['system:user:add']"`);
  33. }
  34. }
  35. };