index.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { useRoute } from 'vue-router'
  2. import { sessionCache } from '@/store'
  3. import { AuthMenu } from './interface'
  4. export function useMenu() {
  5. const route = useRoute();
  6. const menus = sessionCache.getValue('menus');
  7. /**
  8. * 通过code获取对应的子菜单
  9. * @param routeName
  10. * @returns
  11. */
  12. const getChildrenMenu = (routeName?: string) => {
  13. const filter = (items: Ermcp.AccountMenu[], name?: string) => {
  14. let result: Ermcp.AccountMenu[] = [];
  15. if (name) {
  16. for (let i = 0; i < items.length; i++) {
  17. const { code, children } = items[i];
  18. if (code === name) return children ?? result;
  19. if (children) {
  20. result = filter(children, name)
  21. if (result.length) return result;
  22. }
  23. }
  24. }
  25. return result;
  26. }
  27. return filter(menus, routeName ?? route.name?.toString());
  28. }
  29. /**
  30. * 获取权限菜单
  31. * @returns
  32. */
  33. const getAuthMenu = () => {
  34. const filter = (menu: Ermcp.AccountMenu) => ({
  35. path: menu.path,
  36. name: menu.code,
  37. label: menu.title,
  38. icon: menu.icon,
  39. })
  40. return menus.map((menu) => {
  41. const result: AuthMenu = filter(menu);
  42. if (menu.children) {
  43. result.children = menu.children.map((child) => filter(child));
  44. }
  45. return result;
  46. })
  47. }
  48. /**
  49. * 获取当前页面操作权限
  50. * @param filtered 过滤的数据项
  51. * @param reverse 是否反向过滤
  52. * @returns
  53. */
  54. const getAuth = (filtered: string[] = [], reverse = false) => {
  55. const result = route.meta.auth as Ermcp.AccountMenu.Auth[];
  56. if (filtered.length) {
  57. if (reverse) {
  58. // 返回除指定的权限代码
  59. return result.filter((e) => !filtered.includes(e.code));
  60. } else {
  61. // 返回指定的权限代码
  62. return result.filter((e) => filtered.includes(e.code));
  63. }
  64. }
  65. return result;
  66. }
  67. return {
  68. menus,
  69. getChildrenMenu,
  70. getAuth,
  71. getAuthMenu,
  72. }
  73. }