Jelajahi Sumber

[Feat 0000] 菜单改造为可线上更改配置的静态路由与动态生成路由的版本

houzekong 4 bulan lalu
induk
melakukan
5aa7839fa9
8 mengubah file dengan 697 tambahan dan 43 penghapusan
  1. 7 10
      index.html
  2. 1 1
      mock/sys/menu.ts
  3. 591 0
      public/js/global.js
  4. 52 12
      src/api/sys/menu.ts
  5. 19 1
      src/api/sys/model/menuModel.ts
  6. 22 19
      src/api/sys/user.ts
  7. 3 0
      types/global.d.ts
  8. 2 0
      types/vue-router.d.ts

+ 7 - 10
index.html

@@ -1,13 +1,10 @@
-<!DOCTYPE html>
+<!doctype html>
 <html lang="zh_CN" id="htmlRoot">
   <head>
     <meta charset="UTF-8" />
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
     <meta name="renderer" content="webkit" />
-    <meta
-      name="viewport"
-      content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0"
-    />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" />
 
     <title><%= title %></title>
     <link rel="icon" href="<%= basePublicPath %>/logo.png" />
@@ -165,17 +162,17 @@
         </div>
       </div>
     </div>
+    <script src="/js/global.js"></script>
     <script type="module" src="/src/main.ts"></script>
     <!-- 百度统计 -->
     <script>
       var _hmt = _hmt || [];
-      (function() {
-        var hm = document.createElement("script");
-        hm.src = "https://hm.baidu.com/hm.js?0febd9e3cacb3f627ddac64d52caac39";
-        var s = document.getElementsByTagName("script")[0];
+      (function () {
+        var hm = document.createElement('script');
+        hm.src = 'https://hm.baidu.com/hm.js?0febd9e3cacb3f627ddac64d52caac39';
+        var s = document.getElementsByTagName('script')[0];
         s.parentNode.insertBefore(hm, s);
       })();
     </script>
-
   </body>
 </html>

+ 1 - 1
mock/sys/menu.ts

@@ -3443,7 +3443,7 @@ export default [
           {
             redirect: null,
             path: '/dashboard',
-            component: 'layouts/default/index',
+            component: 'layouts/default/PlainLayout',
             route: '1',
             children: [
               {

+ 591 - 0
public/js/global.js

@@ -0,0 +1,591 @@
+/** 静态菜单 */
+const __STATIC_ROUTES__ = [
+    {
+        redirect: undefined,
+        path: '/dashboard',
+        component: 'layouts/default/index',
+        children: [
+            {
+                path: '/dashboard/sealedGoafIndex',
+                component: 'dashboard/SealedGoaf',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'sealedGoafIndex',
+                    title: '采空区首页',
+                },
+                name: 'dashboard-sealedGoafIndex',
+            },
+            {
+                path: '/dashboard/analysis',
+                component: 'dashboard/Analysis',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'Analysis',
+                    title: '首页',
+                },
+                name: 'dashboard-analysis',
+            },
+            {
+                path: '/portal-view/system',
+                component: '1',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: '1',
+                    title: '主门户',
+                },
+                name: 'portal-view-system',
+            },
+            {
+                path: '/portal-view/personal',
+                component: '1',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: '1',
+                    title: '个人工作台',
+                },
+                name: 'portal-view-personal',
+            },
+            {
+                path: '/dashboard/workbench',
+                component: 'dashboard/workbench/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '工作台',
+                },
+                name: 'dashboard-workbench',
+            },
+        ],
+        meta: {
+            keepAlive: false,
+            internalOrExternal: false,
+            icon: '',
+            componentName: 'index',
+            title: '主页',
+        },
+        name: 'dashboard',
+    },
+    {
+        redirect: undefined,
+        path: '/basicInfo',
+        component: 'layouts/default/index',
+        children: [
+            {
+                path: '/basicInfo/minesInfo',
+                component: 'dashboard/basicInfo/minesInfo',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '矿山信息',
+                },
+                name: 'basicInfo-minesInfoIndex',
+            },
+            {
+                path: '/basicInfo/accessStatistics',
+                component: 'dashboard/basicInfo/accessStatistics',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '接入统计',
+                },
+                name: 'basicInfo-accessStatisticsIndex',
+            },
+            {
+                path: '/basicInfo/dataQuality',
+                component: 'dashboard/basicInfo/dataQuality',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '数据质量',
+                },
+                name: 'basicInfo-dataQualityIndex',
+            },
+            {
+                path: '/basicInfo/closedStatistics',
+                component: 'dashboard/basicInfo/closedStatistics',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '密闭统计',
+                },
+                name: 'basicInfo-closedStatisticsIndex',
+            },
+        ],
+        meta: {
+            keepAlive: false,
+            internalOrExternal: false,
+            icon: '',
+            componentName: 'index',
+            title: '矿山基础信息',
+        },
+        name: 'basicInfo',
+    },
+    {
+        redirect: undefined,
+        path: '/sealedMonitoring',
+        component: 'layouts/default/index',
+        children: [
+            {
+                path: '${id}',
+                component: '/dashboard/sealedMonitoring/realtimeData/index',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '${departName}',
+                    hideMenu: true
+                    // orderNo: '${departOrder}',
+                },
+                name: '${id}',
+            }
+        ],
+        meta: {
+            keepAlive: false,
+            internalOrExternal: false,
+            icon: '',
+            componentName: 'index',
+            title: '密闭监测',
+            generation: true,
+        },
+        name: 'sealedMonitoring',
+    },
+    {
+        redirect: undefined,
+        path: '/warningAnalysis',
+        component: 'layouts/default/index',
+        children: [],
+        meta: {
+            keepAlive: false,
+            internalOrExternal: false,
+            icon: '',
+            componentName: 'index',
+            title: '预警分析',
+        },
+        name: 'warningAnalysis',
+    },
+    {
+        redirect: undefined,
+        path: '/smartAnalysis',
+        component: 'layouts/default/index',
+        children: [],
+        meta: {
+            keepAlive: false,
+            internalOrExternal: false,
+            icon: '',
+            componentName: 'index',
+            title: '智能分析',
+        },
+        name: 'smartAnalysis',
+    },
+    {
+        redirect: undefined,
+        path: '/3dManage',
+        component: 'layouts/default/index',
+        children: [],
+        meta: {
+            keepAlive: false,
+            internalOrExternal: false,
+            icon: '',
+            componentName: 'index',
+            title: '模型管理',
+        },
+        name: '3dManage',
+    },
+    {
+        redirect: undefined,
+        path: '/isystem',
+        component: 'layouts/default/index',
+        children: [
+            {
+                path: '/system/menu',
+                component: 'system/menu/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '系统菜单',
+                },
+                name: 'system-menu',
+            },
+            {
+                path: '/system/user',
+                component: 'system/user/index',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '系统用户',
+                },
+                name: 'system-user',
+            },
+            {
+                path: '/system/homeConfig',
+                component: 'system/homeConfig/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '首页配置',
+                },
+                name: 'system-homeConfig',
+            },
+            {
+                path: '/system/role',
+                component: 'system/role/index',
+                meta: {
+                    keepAlive: true,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '系统角色',
+                },
+                name: 'system-role',
+            },
+            {
+                path: '/system/dict',
+                component: 'system/dict/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '数据字典',
+                },
+                name: 'system-dict',
+            },
+            {
+                path: '/system/depart',
+                component: 'system/depart/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '部门管理',
+                },
+                name: 'system-depart',
+            },
+            {
+                path: '/system/tenant',
+                component: 'system/tenant/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '多租户管理',
+                },
+                name: 'system-tenant',
+            },
+            {
+                path: '/tenant/TenantDefaultPack',
+                component: 'system/tenant/pack/TenantDefaultPackList',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'TenantDefaultPackList',
+                    title: '租户默认套餐',
+                },
+                name: 'tenant-TenantDefaultPack',
+            },
+            {
+                path: '/system/position',
+                component: 'system/position/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '职务级别',
+                },
+                name: 'system-position',
+            },
+            {
+                path: '/system/category',
+                component: 'system/category/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '分类字典',
+                },
+                name: 'system-category',
+            },
+            {
+                path: '/system/notice',
+                component: 'system/notice/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '通知公告',
+                },
+                name: 'system-notice',
+            },
+            {
+                path: '/system/depart-user',
+                component: 'system/departUser/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '我的部门',
+                },
+                name: 'system-depart-user',
+            },
+            {
+                path: '/system/usersetting',
+                component: 'system/usersetting/UserSetting',
+                meta: {
+                    hideMenu: true,
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'UserSetting',
+                    title: '用户设置',
+                },
+                name: 'system-usersetting',
+            },
+            {
+                path: '/third/app',
+                component: 'system/appconfig/ThirdAppConfigList',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'ThirdAppConfigList',
+                    title: '第三方配置',
+                },
+                name: 'third-app',
+            },
+            {
+                path: '/system/configurable',
+                component: 'system/configurable/index',
+                meta: {
+                    keepAlive: false,
+                    internalOrExternal: false,
+                    icon: '',
+                    componentName: 'index',
+                    title: '可配置模块管理',
+                },
+                name: 'configurable-manage',
+            },
+        ],
+        meta: {
+            keepAlive: false,
+            internalOrExternal: false,
+            icon: '',
+            componentName: 'index',
+            title: '系统管理',
+        },
+        name: 'isystem',
+    },
+    // {
+    //     redirect: undefined,
+    //     path: '/monitor',
+    //     component: 'layouts/default/index',
+    //     children: [
+    //         {
+    //             path: '/monitor/route',
+    //             component: 'monitor/route/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: '网关路由',
+    //             },
+    //             name: 'monitor-route',
+    //         },
+    //         {
+    //             path: '/monitor/quartz',
+    //             component: 'monitor/quartz/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: '定时任务',
+    //             },
+    //             name: 'monitor-quartz',
+    //         },
+    //         {
+    //             path: '/monitor/datasource',
+    //             component: 'monitor/datasource/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: '数据源管理',
+    //             },
+    //             name: 'monitor-datasource',
+    //         },
+    //         {
+    //             path: '/monitor/datalog',
+    //             component: 'monitor/datalog/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: '数据日志',
+    //             },
+    //             name: 'monitor-datalog',
+    //         },
+    //         {
+    //             path: '/monitor/log',
+    //             component: 'monitor/log/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: '日志管理',
+    //             },
+    //             name: 'monitor-log',
+    //         },
+    //         {
+    //             path: '/monitor/druid',
+    //             component: "{{ window._CONFIG['domianURL'] }}/druid",
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: true,
+    //                 icon: '',
+    //                 componentName: 'druid',
+    //                 title: 'SQL监控',
+    //             },
+    //             name: 'monitor-druid',
+    //         },
+    //         {
+    //             path: '/monitor/server',
+    //             component: 'monitor/server/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: '性能监控',
+    //             },
+    //             name: 'monitor-server',
+    //         },
+    //         {
+    //             path: '/monitor/redis',
+    //             component: 'monitor/redis/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: 'Redis监控',
+    //             },
+    //             name: 'monitor-redis',
+    //         },
+    //         {
+    //             path: '/monitor/trace',
+    //             component: 'monitor/trace/index',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'index',
+    //                 title: '请求追踪',
+    //             },
+    //             name: 'monitor-trace',
+    //         },
+    //         {
+    //             path: '/system/onlineuser',
+    //             component: 'system/onlineuser/OnlineUserList',
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'OnlineUserList',
+    //                 title: '在线用户',
+    //             },
+    //             name: 'system-onlineuser',
+    //         },
+    //         {
+    //             path: '/openapi',
+    //             component: 'layouts/RouteView',
+    //             children: [
+    //                 {
+    //                     path: '/openapi/openApiAuthList',
+    //                     component: 'openapi/OpenApiAuthList',
+    //                     meta: {
+    //                         keepAlive: false,
+    //                         internalOrExternal: false,
+    //                         componentName: 'OpenApiAuthList',
+    //                         title: '授权管理',
+    //                     },
+    //                     name: 'openapi-openApiAuthList',
+    //                 },
+    //                 {
+    //                     path: '/openapi/openApiList',
+    //                     component: 'openapi/OpenApiList',
+    //                     meta: {
+    //                         keepAlive: false,
+    //                         internalOrExternal: false,
+    //                         componentName: 'OpenApiList',
+    //                         title: '接口管理',
+    //                     },
+    //                     name: 'openapi-openApiList',
+    //                 },
+    //                 {
+    //                     path: '/openapi/SwaggerUI',
+    //                     component: 'openapi/SwaggerUI',
+    //                     meta: {
+    //                         keepAlive: false,
+    //                         internalOrExternal: false,
+    //                         componentName: 'SwaggerUI',
+    //                         title: '接口文档',
+    //                     },
+    //                     name: 'openapi-SwaggerUI',
+    //                 },
+    //             ],
+    //             meta: {
+    //                 keepAlive: false,
+    //                 internalOrExternal: false,
+    //                 icon: '',
+    //                 componentName: 'RouteView',
+    //                 title: 'OpenAPI',
+    //             },
+    //             name: 'openapi',
+    //         },
+    //     ],
+    //     meta: {
+    //         keepAlive: false,
+    //         internalOrExternal: false,
+    //         icon: '',
+    //         componentName: 'index',
+    //         title: '系统监控',
+    //     },
+    //     name: 'monitor',
+    // },
+]

+ 52 - 12
src/api/sys/menu.ts

@@ -1,31 +1,71 @@
 import { defHttp } from '/@/utils/http/axios';
-import { getMenuListResultModel } from './model/menuModel';
+import { getMenuListResultModel, EnfMineTreeItem, RouteItem } from './model/menuModel';
 import { useUserStoreWithOut } from '@/store/modules/user';
 import { setAuthCache } from '@/utils/auth';
 import { TOKEN_KEY } from '@/enums/cacheEnum';
 import { router } from '@/router';
 import { PageEnum } from '@/enums/pageEnum';
+import { getFormattedText } from '/@/components/Configurable/hooks/helper';
 
 enum Api {
-  GetMenuList = '/mock/sys/permission/getUserPermissionByToken',
+  GetMenuList = '/sys/permission/getUserPermissionByToken',
+  // 获取执法处及其下辖地区树状数据
+  getEnfMineTreeData = '/sys/user/getEnfMineTreeData',
   // 【QQYUN-8487】
   // SwitchVue3Menu = '/sys/switchVue3Menu',
 }
 
+const generateStaticSealedMonitorRoute = (route: RouteItem, item: EnfMineTreeItem) => {
+  const res: RouteItem = {
+    component: route.component,
+    path: getFormattedText(item, route.path),
+    name: getFormattedText(item, route.name || ''),
+    meta: {
+      ...route.meta,
+      title: getFormattedText(item, route.meta.title),
+      hideMenu: false,
+      // orderNo: parseInt(getFormattedText(item, String(route.meta.orderNo))),
+    },
+  };
+
+  if (item.childDepart) {
+    res.children = item.childDepart.map((child) => generateStaticSealedMonitorRoute(route, child));
+  }
+
+  return res;
+};
+
 /**
  * @description: Get user menu based on id
  */
 
-export const getMenuList = () => {
-  return new Promise((resolve) => {
-    //为了兼容mock和接口数据
-    defHttp.get<getMenuListResultModel>({ url: Api.GetMenuList }).then((res) => {
-      if (Array.isArray(res)) {
-        resolve(res);
-      } else {
-        resolve(res['menu']);
+export const getMenuList: () => Promise<getMenuListResultModel> = () => {
+  return Promise.all([
+    defHttp.get<getMenuListResultModel>({ url: Api.GetMenuList }),
+    defHttp.get<EnfMineTreeItem[]>(
+      { url: Api.getEnfMineTreeData },
+      {
+        isTransformResponse: false,
       }
-    });
+    ),
+  ]).then(([res, tree]) => {
+    return {
+      allAuth: res.allAuth || [],
+      auth: res.auth || [],
+      codeList: res.codeList || [],
+      menu: __STATIC_ROUTES__.map((ele) => {
+        if (ele.children && ele.children.length && ele.meta?.generation) {
+          const template = ele.children[0];
+          ele.children.push(
+            ...tree.map((d) => {
+              return generateStaticSealedMonitorRoute(template, d);
+            })
+          );
+        }
+
+        return ele;
+      }),
+    };
   });
 };
 
@@ -33,7 +73,7 @@ export const getMenuList = () => {
  * @description: 获取后台菜单权限和按钮权限
  */
 export function getBackMenuAndPerms() {
-  return defHttp.get({ url: Api.GetMenuList }).catch((e) => {
+  return getMenuList().catch((e) => {
     console.log('接口 getBackMenuAndPerms 异常错误信息:', e);
     // Token过期失效,直接跳转登录页面 2025-09-08 scott
     if (e && (e.message.includes('timeout') || e.message.includes('401') || e.message.includes('500'))) {

+ 19 - 1
src/api/sys/model/menuModel.ts

@@ -13,4 +13,22 @@ export interface RouteItem {
 /**
  * @description: Get menu return value
  */
-export type getMenuListResultModel = RouteItem[];
+export interface getMenuListResultModel {
+  codeList: string[];
+  allAuth: any[];
+  auth: any[];
+  menu: RouteItem[];
+}
+
+export interface EnfMineTreeItem {
+  /** 部门ID */
+  id: string;
+  /** 部门名称 */
+  departName: string;
+  /** 父部门ID */
+  parentId: string;
+  /** 子部门列表 */
+  childDepart: EnfMineTreeItem[];
+  /** 部门排序 */
+  departOrder?: number;
+}

+ 22 - 19
src/api/sys/user.ts

@@ -8,7 +8,7 @@ import { setAuthCache } from '/@/utils/auth';
 import { TOKEN_KEY } from '/@/enums/cacheEnum';
 import { router } from '/@/router';
 import { PageEnum } from '/@/enums/pageEnum';
-import { ExceptionEnum } from "@/enums/exceptionEnum";
+import { ExceptionEnum } from '@/enums/exceptionEnum';
 
 const { createErrorModal } = useMessage();
 enum Api {
@@ -91,7 +91,7 @@ export function getUserInfo() {
         query: {
           // 传入当前的路由,登录成功后跳转到当前路由
           redirect: router.currentRoute.value.fullPath,
-        }
+        },
       });
     }
   });
@@ -114,22 +114,25 @@ export function getCodeInfo(currdatetime) {
  */
 export function getCaptcha(params) {
   return new Promise((resolve, reject) => {
-    defHttp.post({ url: Api.getCaptcha, params }, { isTransformResponse: false }).then((res) => {
-      console.log(res);
-      if (res.success) {
-        resolve(true);
-      } else {
-        // 代码逻辑说明: 【QQYUN-9005】同一个IP,1分钟超过5次短信,则提示需要验证码---
-        if(res.code != ExceptionEnum.PHONE_SMS_FAIL_CODE){
-          createErrorModal({ title: '错误提示', content: res.message || '未知问题' });
-          reject();
+    defHttp
+      .post({ url: Api.getCaptcha, params }, { isTransformResponse: false })
+      .then((res) => {
+        console.log(res);
+        if (res.success) {
+          resolve(true);
+        } else {
+          // 代码逻辑说明: 【QQYUN-9005】同一个IP,1分钟超过5次短信,则提示需要验证码---
+          if (res.code != ExceptionEnum.PHONE_SMS_FAIL_CODE) {
+            createErrorModal({ title: '错误提示', content: res.message || '未知问题' });
+            reject();
+          }
+          reject(res);
         }
-        reject(res);
-      }
-    }).catch((res)=>{
-      createErrorModal({ title: '错误提示', content: res.message || '未知问题' });
-      reject();
-    });
+      })
+      .catch((res) => {
+        createErrorModal({ title: '错误提示', content: res.message || '未知问题' });
+        reject();
+      });
   });
 }
 
@@ -160,8 +163,8 @@ export const passwordChange = (params) => defHttp.get({ url: Api.passwordChange,
  */
 export function thirdLogin(params, mode: ErrorMessageMode = 'modal') {
   //==========begin 第三方登录/auth2登录需要传递租户id===========
-  let tenantId = "0";
-  if(!params.tenantId){
+  let tenantId = '0';
+  if (!params.tenantId) {
     tenantId = params.tenantId;
   }
   //==========end 第三方登录/auth2登录需要传递租户id===========

+ 3 - 0
types/global.d.ts

@@ -1,6 +1,9 @@
 import type { ComponentRenderProxy, VNode, VNodeChild, ComponentPublicInstance, FunctionalComponent, PropType as VuePropType } from 'vue';
+import { RouteItem } from '/@/api/sys/model/menuModel';
 
 declare global {
+  const __STATIC_ROUTES__: RouteItem[];
+
   const __APP_INFO__: {
     pkg: {
       name: string;

+ 2 - 0
types/vue-router.d.ts

@@ -41,5 +41,7 @@ declare module 'vue-router' {
     ignoreRoute?: boolean;
     // Hide path for children
     hidePathForChildren?: boolean;
+    // whether to generate the routes content
+    generation?: boolean;
   }
 }