391 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			391 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
export interface UserInfo {
 | 
						|
  id: number;
 | 
						|
  password: string;
 | 
						|
  realName: string;
 | 
						|
  roles: string[];
 | 
						|
  username: string;
 | 
						|
  homePath?: string;
 | 
						|
}
 | 
						|
 | 
						|
export const MOCK_USERS: UserInfo[] = [
 | 
						|
  {
 | 
						|
    id: 0,
 | 
						|
    password: '123456',
 | 
						|
    realName: 'Vben',
 | 
						|
    roles: ['super'],
 | 
						|
    username: 'vben',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: 1,
 | 
						|
    password: '123456',
 | 
						|
    realName: 'Admin',
 | 
						|
    roles: ['admin'],
 | 
						|
    username: 'admin',
 | 
						|
    homePath: '/workspace',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: 2,
 | 
						|
    password: '123456',
 | 
						|
    realName: 'Jack',
 | 
						|
    roles: ['user'],
 | 
						|
    username: 'jack',
 | 
						|
    homePath: '/analytics',
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
export const MOCK_CODES = [
 | 
						|
  // super
 | 
						|
  {
 | 
						|
    codes: ['AC_100100', 'AC_100110', 'AC_100120', 'AC_100010'],
 | 
						|
    username: 'vben',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    // admin
 | 
						|
    codes: ['AC_100010', 'AC_100020', 'AC_100030'],
 | 
						|
    username: 'admin',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    // user
 | 
						|
    codes: ['AC_1000001', 'AC_1000002'],
 | 
						|
    username: 'jack',
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
const dashboardMenus = [
 | 
						|
  {
 | 
						|
    meta: {
 | 
						|
      order: -1,
 | 
						|
      title: 'page.dashboard.title',
 | 
						|
    },
 | 
						|
    name: 'Dashboard',
 | 
						|
    path: '/dashboard',
 | 
						|
    redirect: '/analytics',
 | 
						|
    children: [
 | 
						|
      {
 | 
						|
        name: 'Analytics',
 | 
						|
        path: '/analytics',
 | 
						|
        component: '/dashboard/analytics/index',
 | 
						|
        meta: {
 | 
						|
          affixTab: true,
 | 
						|
          title: 'page.dashboard.analytics',
 | 
						|
        },
 | 
						|
      },
 | 
						|
      {
 | 
						|
        name: 'Workspace',
 | 
						|
        path: '/workspace',
 | 
						|
        component: '/dashboard/workspace/index',
 | 
						|
        meta: {
 | 
						|
          title: 'page.dashboard.workspace',
 | 
						|
        },
 | 
						|
      },
 | 
						|
    ],
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
const createDemosMenus = (role: 'admin' | 'super' | 'user') => {
 | 
						|
  const roleWithMenus = {
 | 
						|
    admin: {
 | 
						|
      component: '/demos/access/admin-visible',
 | 
						|
      meta: {
 | 
						|
        icon: 'mdi:button-cursor',
 | 
						|
        title: 'demos.access.adminVisible',
 | 
						|
      },
 | 
						|
      name: 'AccessAdminVisibleDemo',
 | 
						|
      path: '/demos/access/admin-visible',
 | 
						|
    },
 | 
						|
    super: {
 | 
						|
      component: '/demos/access/super-visible',
 | 
						|
      meta: {
 | 
						|
        icon: 'mdi:button-cursor',
 | 
						|
        title: 'demos.access.superVisible',
 | 
						|
      },
 | 
						|
      name: 'AccessSuperVisibleDemo',
 | 
						|
      path: '/demos/access/super-visible',
 | 
						|
    },
 | 
						|
    user: {
 | 
						|
      component: '/demos/access/user-visible',
 | 
						|
      meta: {
 | 
						|
        icon: 'mdi:button-cursor',
 | 
						|
        title: 'demos.access.userVisible',
 | 
						|
      },
 | 
						|
      name: 'AccessUserVisibleDemo',
 | 
						|
      path: '/demos/access/user-visible',
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  return [
 | 
						|
    {
 | 
						|
      meta: {
 | 
						|
        icon: 'ic:baseline-view-in-ar',
 | 
						|
        keepAlive: true,
 | 
						|
        order: 1000,
 | 
						|
        title: 'demos.title',
 | 
						|
      },
 | 
						|
      name: 'Demos',
 | 
						|
      path: '/demos',
 | 
						|
      redirect: '/demos/access',
 | 
						|
      children: [
 | 
						|
        {
 | 
						|
          name: 'AccessDemos',
 | 
						|
          path: '/demosaccess',
 | 
						|
          meta: {
 | 
						|
            icon: 'mdi:cloud-key-outline',
 | 
						|
            title: 'demos.access.backendPermissions',
 | 
						|
          },
 | 
						|
          redirect: '/demos/access/page-control',
 | 
						|
          children: [
 | 
						|
            {
 | 
						|
              name: 'AccessPageControlDemo',
 | 
						|
              path: '/demos/access/page-control',
 | 
						|
              component: '/demos/access/index',
 | 
						|
              meta: {
 | 
						|
                icon: 'mdi:page-previous-outline',
 | 
						|
                title: 'demos.access.pageAccess',
 | 
						|
              },
 | 
						|
            },
 | 
						|
            {
 | 
						|
              name: 'AccessButtonControlDemo',
 | 
						|
              path: '/demos/access/button-control',
 | 
						|
              component: '/demos/access/button-control',
 | 
						|
              meta: {
 | 
						|
                icon: 'mdi:button-cursor',
 | 
						|
                title: 'demos.access.buttonControl',
 | 
						|
              },
 | 
						|
            },
 | 
						|
            {
 | 
						|
              name: 'AccessMenuVisible403Demo',
 | 
						|
              path: '/demos/access/menu-visible-403',
 | 
						|
              component: '/demos/access/menu-visible-403',
 | 
						|
              meta: {
 | 
						|
                authority: ['no-body'],
 | 
						|
                icon: 'mdi:button-cursor',
 | 
						|
                menuVisibleWithForbidden: true,
 | 
						|
                title: 'demos.access.menuVisible403',
 | 
						|
              },
 | 
						|
            },
 | 
						|
            roleWithMenus[role],
 | 
						|
          ],
 | 
						|
        },
 | 
						|
      ],
 | 
						|
    },
 | 
						|
  ];
 | 
						|
};
 | 
						|
 | 
						|
export const MOCK_MENUS = [
 | 
						|
  {
 | 
						|
    menus: [...dashboardMenus, ...createDemosMenus('super')],
 | 
						|
    username: 'vben',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    menus: [...dashboardMenus, ...createDemosMenus('admin')],
 | 
						|
    username: 'admin',
 | 
						|
  },
 | 
						|
  {
 | 
						|
    menus: [...dashboardMenus, ...createDemosMenus('user')],
 | 
						|
    username: 'jack',
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
export const MOCK_MENU_LIST = [
 | 
						|
  {
 | 
						|
    id: 1,
 | 
						|
    name: 'Workspace',
 | 
						|
    status: 1,
 | 
						|
    type: 'menu',
 | 
						|
    icon: 'mdi:dashboard',
 | 
						|
    path: '/workspace',
 | 
						|
    component: '/dashboard/workspace/index',
 | 
						|
    meta: {
 | 
						|
      icon: 'carbon:workspace',
 | 
						|
      title: 'page.dashboard.workspace',
 | 
						|
      affixTab: true,
 | 
						|
      order: 0,
 | 
						|
    },
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: 2,
 | 
						|
    meta: {
 | 
						|
      icon: 'carbon:settings',
 | 
						|
      order: 9997,
 | 
						|
      title: 'system.title',
 | 
						|
      badge: 'new',
 | 
						|
      badgeType: 'normal',
 | 
						|
      badgeVariants: 'primary',
 | 
						|
    },
 | 
						|
    status: 1,
 | 
						|
    type: 'catalog',
 | 
						|
    name: 'System',
 | 
						|
    path: '/system',
 | 
						|
    children: [
 | 
						|
      {
 | 
						|
        id: 201,
 | 
						|
        pid: 2,
 | 
						|
        path: '/system/menu',
 | 
						|
        name: 'SystemMenu',
 | 
						|
        authCode: 'System:Menu:List',
 | 
						|
        status: 1,
 | 
						|
        type: 'menu',
 | 
						|
        meta: {
 | 
						|
          icon: 'carbon:menu',
 | 
						|
          title: 'system.menu.title',
 | 
						|
        },
 | 
						|
        component: '/system/menu/list',
 | 
						|
        children: [
 | 
						|
          {
 | 
						|
            id: 20_101,
 | 
						|
            pid: 201,
 | 
						|
            name: 'SystemMenuCreate',
 | 
						|
            status: 1,
 | 
						|
            type: 'button',
 | 
						|
            authCode: 'System:Menu:Create',
 | 
						|
            meta: { title: 'common.create' },
 | 
						|
          },
 | 
						|
          {
 | 
						|
            id: 20_102,
 | 
						|
            pid: 201,
 | 
						|
            name: 'SystemMenuEdit',
 | 
						|
            status: 1,
 | 
						|
            type: 'button',
 | 
						|
            authCode: 'System:Menu:Edit',
 | 
						|
            meta: { title: 'common.edit' },
 | 
						|
          },
 | 
						|
          {
 | 
						|
            id: 20_103,
 | 
						|
            pid: 201,
 | 
						|
            name: 'SystemMenuDelete',
 | 
						|
            status: 1,
 | 
						|
            type: 'button',
 | 
						|
            authCode: 'System:Menu:Delete',
 | 
						|
            meta: { title: 'common.delete' },
 | 
						|
          },
 | 
						|
        ],
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: 202,
 | 
						|
        pid: 2,
 | 
						|
        path: '/system/dept',
 | 
						|
        name: 'SystemDept',
 | 
						|
        status: 1,
 | 
						|
        type: 'menu',
 | 
						|
        authCode: 'System:Dept:List',
 | 
						|
        meta: {
 | 
						|
          icon: 'carbon:container-services',
 | 
						|
          title: 'system.dept.title',
 | 
						|
        },
 | 
						|
        component: '/system/dept/list',
 | 
						|
        children: [
 | 
						|
          {
 | 
						|
            id: 20_401,
 | 
						|
            pid: 201,
 | 
						|
            name: 'SystemDeptCreate',
 | 
						|
            status: 1,
 | 
						|
            type: 'button',
 | 
						|
            authCode: 'System:Dept:Create',
 | 
						|
            meta: { title: 'common.create' },
 | 
						|
          },
 | 
						|
          {
 | 
						|
            id: 20_402,
 | 
						|
            pid: 201,
 | 
						|
            name: 'SystemDeptEdit',
 | 
						|
            status: 1,
 | 
						|
            type: 'button',
 | 
						|
            authCode: 'System:Dept:Edit',
 | 
						|
            meta: { title: 'common.edit' },
 | 
						|
          },
 | 
						|
          {
 | 
						|
            id: 20_403,
 | 
						|
            pid: 201,
 | 
						|
            name: 'SystemDeptDelete',
 | 
						|
            status: 1,
 | 
						|
            type: 'button',
 | 
						|
            authCode: 'System:Dept:Delete',
 | 
						|
            meta: { title: 'common.delete' },
 | 
						|
          },
 | 
						|
        ],
 | 
						|
      },
 | 
						|
    ],
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: 9,
 | 
						|
    meta: {
 | 
						|
      badgeType: 'dot',
 | 
						|
      order: 9998,
 | 
						|
      title: 'demos.vben.title',
 | 
						|
      icon: 'carbon:data-center',
 | 
						|
    },
 | 
						|
    name: 'Project',
 | 
						|
    path: '/vben-admin',
 | 
						|
    type: 'catalog',
 | 
						|
    status: 1,
 | 
						|
    children: [
 | 
						|
      {
 | 
						|
        id: 901,
 | 
						|
        pid: 9,
 | 
						|
        name: 'VbenDocument',
 | 
						|
        path: '/vben-admin/document',
 | 
						|
        component: 'IFrameView',
 | 
						|
        type: 'embedded',
 | 
						|
        status: 1,
 | 
						|
        meta: {
 | 
						|
          icon: 'carbon:book',
 | 
						|
          iframeSrc: 'https://doc.vben.pro',
 | 
						|
          title: 'demos.vben.document',
 | 
						|
        },
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: 902,
 | 
						|
        pid: 9,
 | 
						|
        name: 'VbenGithub',
 | 
						|
        path: '/vben-admin/github',
 | 
						|
        component: 'IFrameView',
 | 
						|
        type: 'link',
 | 
						|
        status: 1,
 | 
						|
        meta: {
 | 
						|
          icon: 'carbon:logo-github',
 | 
						|
          link: 'https://github.com/vbenjs/vue-vben-admin',
 | 
						|
          title: 'Github',
 | 
						|
        },
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: 903,
 | 
						|
        pid: 9,
 | 
						|
        name: 'VbenAntdv',
 | 
						|
        path: '/vben-admin/antdv',
 | 
						|
        component: 'IFrameView',
 | 
						|
        type: 'link',
 | 
						|
        status: 0,
 | 
						|
        meta: {
 | 
						|
          icon: 'carbon:hexagon-vertical-solid',
 | 
						|
          badgeType: 'dot',
 | 
						|
          link: 'https://ant.vben.pro',
 | 
						|
          title: 'demos.vben.antdv',
 | 
						|
        },
 | 
						|
      },
 | 
						|
    ],
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: 10,
 | 
						|
    component: '_core/about/index',
 | 
						|
    type: 'menu',
 | 
						|
    status: 1,
 | 
						|
    meta: {
 | 
						|
      icon: 'lucide:copyright',
 | 
						|
      order: 9999,
 | 
						|
      title: 'demos.vben.about',
 | 
						|
    },
 | 
						|
    name: 'About',
 | 
						|
    path: '/about',
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
export function getMenuIds(menus: any[]) {
 | 
						|
  const ids: number[] = [];
 | 
						|
  menus.forEach((item) => {
 | 
						|
    ids.push(item.id);
 | 
						|
    if (item.children && item.children.length > 0) {
 | 
						|
      ids.push(...getMenuIds(item.children));
 | 
						|
    }
 | 
						|
  });
 | 
						|
  return ids;
 | 
						|
}
 |