| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { useRoute } from 'vue-router'
- import { sessionCache } from '@/store'
- import { AuthMenu } from './interface'
- export function useMenu() {
- const route = useRoute();
- const menus = sessionCache.getValue('menus');
- /**
- * 通过code获取对应的子菜单
- * @param routeName
- * @returns
- */
- const getChildrenMenu = (routeName?: string) => {
- const filter = (items: Ermcp.AccountMenu[], name?: string) => {
- let result: Ermcp.AccountMenu[] = [];
- if (name) {
- for (let i = 0; i < items.length; i++) {
- const { code, children } = items[i];
- if (code === name) return children ?? result;
- if (children) {
- result = filter(children, name)
- if (result.length) return result;
- }
- }
- }
- return result;
- }
- return filter(menus, routeName ?? route.name?.toString());
- }
- /**
- * 获取权限菜单
- * @returns
- */
- const getAuthMenu = () => {
- const filter = (menu: Ermcp.AccountMenu) => ({
- path: menu.path,
- name: menu.code,
- label: menu.title,
- icon: menu.icon,
- })
- return menus.map((menu) => {
- const result: AuthMenu = filter(menu);
- if (menu.children) {
- result.children = menu.children.map((child) => filter(child));
- }
- return result;
- })
- }
- /**
- * 获取当前页面操作权限
- * @param filtered 过滤的数据项
- * @param reverse 是否反向过滤
- * @returns
- */
- const getAuth = (filtered: string[] = [], reverse = false) => {
- const result = route.meta.auth as Ermcp.AccountMenu.Auth[];
- if (filtered.length) {
- if (reverse) {
- // 返回除指定的权限代码
- return result.filter((e) => !filtered.includes(e.code));
- } else {
- // 返回指定的权限代码
- return result.filter((e) => filtered.includes(e.code));
- }
- }
- return result;
- }
- return {
- menus,
- getChildrenMenu,
- getAuth,
- getAuthMenu,
- }
- }
|