authDirective.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import type { App } from 'vue';
  2. import { useUserInfo } from '/@/stores/userInfo';
  3. import { judementSameArr } from '/@/utils/arrayOperation';
  4. /**
  5. * 用户权限指令
  6. * @directive 单个权限验证(v-auth="xxx")
  7. * @directive 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
  8. * @directive 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
  9. */
  10. export function authDirective(app: App) {
  11. // 单个权限验证(v-auth="xxx")
  12. app.directive('auth', {
  13. mounted(el, binding) {
  14. const stores = useUserInfo();
  15. if (!stores.userInfos.authBtnList.some((v: string) => v === binding.value)) el.parentNode.removeChild(el);
  16. },
  17. });
  18. // 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
  19. app.directive('auths', {
  20. mounted(el, binding) {
  21. let flag = false;
  22. const stores = useUserInfo();
  23. stores.userInfos.authBtnList.map((val: string) => {
  24. binding.value.map((v: string) => {
  25. if (val === v) flag = true;
  26. });
  27. });
  28. if (!flag) el.parentNode.removeChild(el);
  29. },
  30. });
  31. // 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
  32. app.directive('auth-all', {
  33. mounted(el, binding) {
  34. const stores = useUserInfo();
  35. const flag = judementSameArr(binding.value, stores.userInfos.authBtnList);
  36. if (!flag) el.parentNode.removeChild(el);
  37. },
  38. });
  39. }