Browse Source

数据运营平台固定菜单

zhengnaiwen_citu 3 months ago
parent
commit
986f120956

+ 32 - 0
package-lock.json

@@ -1171,6 +1171,18 @@
       "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==",
       "dev": true
     },
+    "@mendable/firecrawl-js": {
+      "version": "1.19.1",
+      "resolved": "https://registry.npmmirror.com/@mendable/firecrawl-js/-/firecrawl-js-1.19.1.tgz",
+      "integrity": "sha512-rtBnlF6oLJAxhH4YG8P72FernR1TvdI4J7uiSad2hOF7ZtbkzHkuNsa/10KUTPsmeQf8ESxiSQ1p7HMyEXuW9g==",
+      "requires": {
+        "axios": "^1.6.8",
+        "isows": "^1.0.4",
+        "typescript-event-target": "^1.1.1",
+        "zod": "^3.23.8",
+        "zod-to-json-schema": "^3.23.0"
+      }
+    },
     "@nicolo-ribaudo/eslint-scope-5-internals": {
       "version": "5.1.1-v1",
       "resolved": "https://registry.npmmirror.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@@ -6906,6 +6918,11 @@
       "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
       "dev": true
     },
+    "isows": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/isows/-/isows-1.0.6.tgz",
+      "integrity": "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw=="
+    },
     "jade": {
       "version": "1.11.0",
       "resolved": "https://registry.npmmirror.com/jade/-/jade-1.11.0.tgz",
@@ -11096,6 +11113,11 @@
       "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
       "dev": true
     },
+    "typescript-event-target": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/typescript-event-target/-/typescript-event-target-1.1.1.tgz",
+      "integrity": "sha512-dFSOFBKV6uwaloBCCUhxlD3Pr/P1a/tJdcmPrTXCHlEFD3faj0mztjcGn6VBAhQ0/Bdy8K3VWrrqwbt/ffsYsg=="
+    },
     "uc.micro": {
       "version": "1.0.6",
       "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz",
@@ -12550,6 +12572,16 @@
         }
       }
     },
+    "zod": {
+      "version": "3.24.2",
+      "resolved": "https://registry.npmmirror.com/zod/-/zod-3.24.2.tgz",
+      "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ=="
+    },
+    "zod-to-json-schema": {
+      "version": "3.24.3",
+      "resolved": "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.24.3.tgz",
+      "integrity": "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A=="
+    },
     "zrender": {
       "version": "5.6.1",
       "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",

+ 1 - 0
package.json

@@ -14,6 +14,7 @@
     "@babel/polyfill": "^7.12.1",
     "@babel/preset-env": "^7.23.9",
     "@handsontable/vue": "^14.2.0",
+    "@mendable/firecrawl-js": "^1.19.1",
     "@vue-office/excel": "^1.7.14",
     "@vue/composition-api": "^1.7.2",
     "axios": "^1.7.2",

+ 1 - 1
public/version.json

@@ -1,3 +1,3 @@
 {
-  "version": 1713434954684
+  "version": 1741945443886
 }

+ 82 - 111
src/permission.js

@@ -1,26 +1,16 @@
-import router, { resetRouter } from './router'
-import Layout from '@/layout'
-import { checkToken, refreshToken } from '@/api/system'
-import { getToken, setToken, deleteToken } from './utils/auth'
-import store from './store'
+import router from './router'
+// import Layout from '@/layout'
+// import { checkToken, refreshToken } from '@/api/system'
+import {
+  getToken
+  // deleteToken
+} from './utils/auth'
+// import store from './store'
 import Vue from 'vue'
 
-// 检测单点登录
-const url = decodeURIComponent(window.location.href)
-const hasEqual = url.split('res=')[1] ? url.split('res=')[1] : ''
-const obj = hasEqual ? JSON.parse(hasEqual) : null
-if (obj && obj.data.loginType === 1) {
-  // store.commit('user/SET_SINGLE_SIGN_ON', 1)
-  store.commit('user/SET_USERINFO', obj.data.user)
-  // 单点登录清空路由重新获取权限
-  store.commit('menu/SET_ROLES', [])
-  setToken(obj.data.token)
-}
-
-let isRefresh = true
-
 // 路由拦截
 router.beforeEach((to, from, next) => {
+  // debugger
   // 无需登录无需获取动态路由
   if (to?.meta?.noLogin) {
     next()
@@ -32,110 +22,91 @@ router.beforeEach((to, from, next) => {
       next()
       return
     }
-    onFilterRoutes(to, next)
+    // onFilterRoutes(to, next)
     next('/')
     return
   }
 
   if (to.path === '/login') {
     next('/home')
-    return
-  }
-  // 开发环境不进行单点登录
-  if (isRefresh) {
-    refreshToken().then(({ data }) => {
-      setToken(data)
-      store.commit('menu/SET_ROLES', []) // 清空路由
-    }).catch(() => {
-      Vue.prototype.$snackbar.error('刷新token异常')
-    }).finally(() => {
-      isRefresh = false
-      // 校验失败
-      next({ ...to, replace: true })
-      // deleteToken()
-    })
-    return
+    // return
   }
-
-  checkToken().then(() => {
-    onFilterRoutes(to, next)
-  }).catch(error => {
-    deleteToken()
-    if (!error?.data?.redirectUrl) {
-      Vue.prototype.$snackbar.error(error.message)
-      return
-    }
-    // 本地返回
-    if (error.data.redirectUrl === 'local') {
-      setTimeout(() => {
-        next(`/login-local?redirect=${to.path}`)
-      }, 1000)
-      return
-    }
-    window.location.href = error.data.redirectUrl
-  })
+  next()
+  // onFilterRoutes(to, next)
 })
 router.afterEach((to, from) => {
   document.title = to.meta.title ?? Vue.prototype.$DEFAULT_TITLE
 })
 // 路由过滤和跳转
-function onFilterRoutes (to, next) {
-  if (store.getters.roles && store.getters.roles.length) {
-    initRoutes(to, next, store.getters.roles)
-    return
-  }
-  store.dispatch('menu/getMenu2').then(res => {
-    initRoutes(to, next, res)
-  }).catch(err => {
-    deleteToken()
-    next({ ...to, replace: true })
-    // next('/login-local')
-    Vue.prototype.$snackbar.error(err)
-  })
-}
+// function onFilterRoutes (to, next) {
+//   // 判断是否刷新页面重新加载路由
+//   if (!store.getters.refresh) {
+//     next()
+//     return
+//   }
+//   // if (store.getters.roles && store.getters.roles.length) {
+//   //   initRoutes(to, next, store.getters.roles)
+//   //   return
+//   // }
+//   store.dispatch('menu/getMenu2').then(res => {
+//     initRoutes(to, next, res)
+//   })
+//   // .catch(err => {
+//   //   deleteToken()
+//   //   next({ ...to, replace: true })
+//   //   // next('/login-local')
+//   //   Vue.prototype.$snackbar.error(err)
+//   // })
+// }
 
-function initRoutes (to, next, e) {
-  // 判断是否刷新页面重新加载路由
-  if (!store.getters.refresh) {
-    next()
-    return
-  }
-  store.commit('menu/SET_REFRESH', false) // 关闭更新
-  // 清除路由
-  resetRouter()
-  const routes = mapASyncRoutes(e) // 路由替换
-  if (!routes.length) {
-    deleteToken()
-    // next('/login-local')
-    next({ ...to, replace: true })
-    return
-  }
-  routes.forEach(item => {
-    router.addRoute(item)
-  })
-  const hasHome = routes.find(_e => _e.name === 'home')
-  router.addRoute({ path: '/', redirect: hasHome ? '/home' : chooseFirst(routes[0]) })
-  router.addRoute({ path: '*', redirect: '/404', hidden: true })
-  next({ ...to, replace: true })
-}
-function chooseFirst (item) {
-  if (item.children && item.children.length > 0 && item.component.name === 'layoutIndex') {
-    return chooseFirst(item.children[0])
-  }
-  return item.path
-}
+// function initRoutes (to, next, e) {
+//   // debugger
+//   store.commit('menu/SET_REFRESH', false) // 关闭更新
+//   // 清除路由
+//   resetRouter()
+//   const routes = mapASyncRoutes(e)
+//   // 路由替换
+//   // debugger
+//   // if (!routes.length) {
+//   //   deleteToken()
+//   //   // next('/login-local')
+//   //   next({ ...to, replace: true })
+//   //   return
+//   // }
+//   router.addRoute({ path: '/', redirect: '/home' })
+//   routes.forEach(item => {
+//     console.log(item)
+//     router.addRoute(item)
+//   })
+//   router.addRoute({ path: '*', redirect: '/404', hidden: true })
+//   // const hasHome = routes.find(_e => _e.name === 'home')
+//   // router.addRoute({ path: '/', redirect: hasHome ? '/home' : chooseFirst(routes[0]) })
+//   // router.addRoute({ path: '*', redirect: '/404', hidden: true })
+//   console.log(router.getRoutes()) // 检查新路由是否已添加
+//   debugger
+//   next({ ...to, replace: true })
+// }
+// function chooseFirst (item) {
+//   if (item.children && item.children.length > 0 && item.component.name === 'layoutIndex') {
+//     return chooseFirst(item.children[0])
+//   }
+//   return item.path
+// }
 // 递归路由 转换为组件对象和路径
-function mapASyncRoutes (data) {
-  return data.map(item => {
-    item.component = item.component === 'Layout' ? Layout : loadView(item.component)
-    if (item.children && item.children.length > 0) {
-      item.children = mapASyncRoutes(item.children)
-    }
-    return item
-  })
-}
+// function mapASyncRoutes (data) {
+//   return data.map(item => {
+//     if (!item.redirect) {
+//       item.redirect = undefined
+//     }
+//     item.component = item.component === 'Layout' ? Layout : loadView(item.component)
+//     if (item.children && item.children.length > 0) {
+//       item.children = mapASyncRoutes(item.children)
+//     }
+//     return item
+//   })
+// }
 
-// 路由插件
-function loadView (view) {
-  return !view ? { render: (c) => c('router-view') } : () => import(`@/views/${view}`)
-}
+// // 路由插件
+// function loadView (view) {
+//   return !view ? { render: (c) => c('router-view') } : () => import(`@/views/${view}`)
+// }

+ 22 - 1
src/router/defaultRoute.js

@@ -1,3 +1,24 @@
+import Routes from './routes'
+import Layout from '../layout'
+
+function mapASyncRoutes (data) {
+  return data.map(item => {
+    // if (!item.redirect) {
+    //   item.redirect = undefined
+    // }
+    item.component = item.component === 'Layout' ? Layout : loadView(item.component)
+    if (item.children && item.children.length > 0) {
+      item.children = mapASyncRoutes(item.children)
+    }
+    return item
+  })
+}
+
+// 路由插件
+function loadView (view) {
+  return !view ? { render: (c) => c('router-view') } : () => import(`@/views/${view}`)
+}
+
 const base = [
   {
     path: '/login-local',
@@ -32,4 +53,4 @@ const base = [
   }
 ]
 
-export default base
+export default [...base, { path: '/', redirect: '/home' }, ...mapASyncRoutes(Routes.routes), { path: '*', redirect: '/404', hidden: true }]

+ 2383 - 0
src/router/routes.js

@@ -0,0 +1,2383 @@
+export default {
+  routes: [
+    {
+      meun: '',
+      code: '',
+      hidden: 0,
+      rootId: 0,
+      icon: 'mdi-home',
+      remark: '',
+      type: 0,
+      title: '工作台',
+      local: '',
+      path: '/home',
+      urls: '',
+      children: [
+        {
+          meun: '',
+          code: '',
+          hidden: 1,
+          rootId: 653,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '工作台',
+          local: '',
+          path: '/home',
+          urls: '',
+          children: [],
+          enName: 'workbench',
+          id: 654,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '工作台',
+          sort: 0,
+          parentId: 653,
+          effectiveStatus: true,
+          parentName: 'home',
+          component: 'home',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'workbench',
+            icon: '',
+            editModules: true,
+            title: '工作台',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'index',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"workbench","editModules":true,"title":"工作台","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 1,
+          rootId: 653,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '主页编辑',
+          local: '',
+          path: '/home/edit',
+          urls: '',
+          children: [],
+          enName: 'Edit Home Page',
+          id: 655,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '主页编辑',
+          sort: 0,
+          parentId: 653,
+          effectiveStatus: true,
+          parentName: '',
+          component: 'home/edit',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Edit Home Page',
+            icon: '',
+            editModules: true,
+            title: '主页编辑',
+            fullScreen: true,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'homeEdit',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Edit Home Page","editModules":true,"title":"主页编辑","fullScreen":true,"target":false}',
+          open: null
+        }
+      ],
+      enName: 'workbench',
+      id: 653,
+      redirect: '',
+      level: 1,
+      openPath: '',
+      active: '',
+      label: '工作台',
+      sort: 0,
+      parentId: 0,
+      effectiveStatus: true,
+      parentName: 'efficiency',
+      component: 'Layout',
+      meta: {
+        allowClick: false,
+        roles: [],
+        enName: 'workbench',
+        icon: 'mdi-home',
+        title: '工作台',
+        target: false,
+        effectiveStatus: true
+      },
+      name: 'home',
+      style: '',
+      alwaysShow: 0,
+      metastr: '{"allowClick":false,"enName":"workbench","title":"工作台","target":false}',
+      open: null
+    },
+    {
+      meun: '',
+      code: '',
+      hidden: 0,
+      rootId: 0,
+      icon: 'mdi-database-search',
+      remark: '',
+      type: 0,
+      title: '产品知识库',
+      local: '',
+      path: '/knowledge-base-product',
+      urls: '',
+      children: [
+        {
+          meun: '',
+          code: '',
+          hidden: 1,
+          rootId: 1221,
+          icon: 'mdi-file-chart-outline',
+          remark: '',
+          type: 1,
+          title: '产品知识库列表',
+          local: '',
+          path: '/knowledge-base-product',
+          urls: '',
+          children: [],
+          enName: 'product Knowledge Base',
+          id: 1224,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '产品知识库列表',
+          sort: 0,
+          parentId: 1221,
+          effectiveStatus: true,
+          parentName: '',
+          component: 'knowledgeBaseProduct/index',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'product Knowledge Base',
+            icon: 'mdi-file-chart-outline',
+            editModules: false,
+            title: '产品知识库列表',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'knowledgeBaseProductList',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"product Knowledge Base","editModules":false,"title":"产品知识库列表","fullScreen":false,"target":false}',
+          open: null
+        }
+      ],
+      enName: 'product Knowledge Base',
+      id: 1221,
+      redirect: '',
+      level: 1,
+      openPath: '',
+      active: '',
+      label: '产品知识库',
+      sort: 18,
+      parentId: 0,
+      effectiveStatus: true,
+      parentName: '',
+      component: 'Layout',
+      meta: {
+        allowClick: false,
+        roles: [],
+        enName: 'product Knowledge Base',
+        icon: 'mdi-database-search',
+        title: '产品知识库',
+        target: false,
+        effectiveStatus: true
+      },
+      name: 'knowledgeBaseProduct',
+      style: '',
+      alwaysShow: 0,
+      metastr: '{"allowClick":false,"enName":"product Knowledge Base","title":"产品知识库","target":false}',
+      open: null
+    },
+    {
+      meun: '',
+      code: '',
+      hidden: 0,
+      rootId: 0,
+      icon: 'mdi-database-clock',
+      remark: '',
+      type: 0,
+      title: '数据资产',
+      local: '',
+      path: '/data-asset',
+      urls: '',
+      children: [
+        {
+          meun: '',
+          code: '',
+          hidden: 1,
+          rootId: 1231,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '产品知识库列表',
+          local: '',
+          path: '/data-asset',
+          urls: '',
+          children: [],
+          enName: 'Data Asset',
+          id: 1232,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '产品知识库列表',
+          sort: 0,
+          parentId: 1231,
+          effectiveStatus: true,
+          parentName: '',
+          component: 'dataAsset',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Data Asset',
+            icon: '',
+            editModules: false,
+            title: '产品知识库列表',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'dataAssetList',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Data Asset","editModules":false,"title":"产品知识库列表","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 1,
+          rootId: 1231,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '产品知识库详情',
+          local: '',
+          path: '/data-asset/details/:id/:name',
+          urls: '',
+          children: [],
+          enName: 'Data Asset Details',
+          id: 1233,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '产品知识库详情',
+          sort: 0,
+          parentId: 1231,
+          effectiveStatus: true,
+          parentName: '',
+          component: 'dataAsset/details',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Data Asset Details',
+            icon: '',
+            editModules: false,
+            title: '产品知识库详情',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'dataAssetDetails',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Data Asset Details","editModules":false,"title":"产品知识库详情","fullScreen":false,"target":false}',
+          open: null
+        }
+      ],
+      enName: 'Data Asset',
+      id: 1231,
+      redirect: '',
+      level: 1,
+      openPath: '',
+      active: '',
+      label: '数据资产',
+      sort: 30,
+      parentId: 0,
+      effectiveStatus: true,
+      parentName: '',
+      component: 'Layout',
+      meta: {
+        allowClick: true,
+        roles: [],
+        enName: 'Data Asset',
+        icon: 'mdi-database-clock',
+        title: '数据资产',
+        target: false,
+        effectiveStatus: true
+      },
+      name: 'dataAsset',
+      style: '',
+      alwaysShow: 0,
+      metastr: '{"allowClick":true,"enName":"Data Asset","title":"数据资产","target":false}',
+      open: null
+    },
+    {
+      meun: '',
+      code: '',
+      hidden: 0,
+      rootId: 0,
+      icon: 'mdi-clipboard-text-outline',
+      remark: '',
+      type: 0,
+      title: '数据治理',
+      local: '',
+      path: '/data-governance',
+      urls: '',
+      children: [
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1187,
+          icon: 'mdi-book-open-outline',
+          remark: '',
+          type: 1,
+          title: '元数据',
+          local: '',
+          path: '/data-governance/metadata',
+          urls: '',
+          children: [],
+          enName: 'Metadata',
+          id: 1188,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '元数据',
+          sort: 0,
+          parentId: 1187,
+          effectiveStatus: true,
+          parentName: 'data-governance',
+          component: 'dataGovernance/metadata',
+          meta: {
+            keepAlive: false,
+            allowClick: true,
+            roles: [],
+            enName: 'Metadata',
+            icon: 'mdi-book-open-outline',
+            editModules: false,
+            title: '元数据',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'metadata',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":true,"enName":"Metadata","editModules":false,"title":"元数据","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1187,
+          icon: 'mdi-book-open-outline',
+          remark: '',
+          type: 1,
+          title: '数据资源',
+          local: '',
+          path: '/data-governance/data-resource',
+          urls: '',
+          children: [],
+          enName: 'Data Resource',
+          id: 1189,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据资源',
+          sort: 1,
+          parentId: 1187,
+          effectiveStatus: true,
+          parentName: 'data-governance',
+          component: 'dataGovernance/dataResource',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Data Resource',
+            icon: 'mdi-book-open-outline',
+            editModules: false,
+            title: '数据资源',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-resource',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Data Resource","editModules":false,"title":"数据资源","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1187,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '数据模型',
+          local: '',
+          path: '/data-governance/data-modules',
+          urls: '',
+          children: [],
+          enName: 'Data Field',
+          id: 1193,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据模型',
+          sort: 4,
+          parentId: 1187,
+          effectiveStatus: true,
+          parentName: 'data-governance',
+          component: 'dataGovernance/dataModules',
+          meta: {
+            keepAlive: false,
+            allowClick: true,
+            roles: [],
+            enName: 'Data Field',
+            icon: '',
+            editModules: false,
+            title: '数据模型',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-modules',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":true,"enName":"Data Field","editModules":false,"title":"数据模型","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1187,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '数据指标',
+          local: '',
+          path: '/data-governance/data-indicator',
+          urls: '',
+          children: [],
+          enName: 'Data Indicator',
+          id: 1190,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据指标',
+          sort: 5,
+          parentId: 1187,
+          effectiveStatus: true,
+          parentName: 'data-governance',
+          component: 'dataGovernance/dataIndicator',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Data Indicator',
+            icon: '',
+            editModules: false,
+            title: '数据指标',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-indicator',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Data Indicator","editModules":false,"title":"数据指标","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1187,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '数据标准',
+          local: '',
+          path: '/data-governance/data-standard',
+          urls: '',
+          children: [],
+          enName: 'Data Standard',
+          id: 1191,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据标准',
+          sort: 10,
+          parentId: 1187,
+          effectiveStatus: true,
+          parentName: 'data-governance',
+          component: 'dataGovernance/dataStandard',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Data Standard',
+            icon: '',
+            editModules: false,
+            title: '数据标准',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-standard',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Data Standard","editModules":false,"title":"数据标准","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1187,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '数据标签',
+          local: '',
+          path: '/data-governance/data-Label',
+          urls: '',
+          children: [],
+          enName: 'Data Label',
+          id: 1217,
+          redirect: '',
+          level: 0,
+          openPath: '',
+          active: '',
+          label: '数据标签',
+          sort: 15,
+          parentId: 1187,
+          effectiveStatus: true,
+          parentName: '',
+          component: 'dataGovernance/dataLabel',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Data Label',
+            icon: '',
+            editModules: false,
+            title: '数据标签',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-label',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Data Label","editModules":false,"title":"数据标签","fullScreen":false,"target":false}',
+          open: null
+        }
+      ],
+      enName: 'Data Governance',
+      id: 1187,
+      redirect: '',
+      level: 1,
+      openPath: '',
+      active: '',
+      label: '数据治理',
+      sort: 44,
+      parentId: 0,
+      effectiveStatus: true,
+      parentName: '',
+      component: 'Layout',
+      meta: {
+        allowClick: false,
+        roles: [],
+        enName: 'Data Governance',
+        icon: 'mdi-clipboard-text-outline',
+        title: '数据治理',
+        target: false,
+        effectiveStatus: true
+      },
+      name: 'data-governance',
+      style: '',
+      alwaysShow: 0,
+      metastr: '{"allowClick":false,"enName":"Data Governance","title":"数据治理","target":false}',
+      open: null
+    },
+    {
+      meun: '',
+      code: '',
+      hidden: 0,
+      rootId: 0,
+      icon: 'mdi-factory',
+      remark: '',
+      type: 0,
+      title: '数据工厂',
+      local: '',
+      path: '/dataFactory',
+      urls: '',
+      children: [
+        {
+          meun: null,
+          code: null,
+          hidden: 0,
+          rootId: 972,
+          icon: 'mdi-spider',
+          remark: '',
+          type: 0,
+          title: '数据收集',
+          local: null,
+          path: '/dataFactory/data-collection',
+          urls: null,
+          children: [
+            {
+              meun: null,
+              code: null,
+              hidden: 0,
+              rootId: 972,
+              icon: 'mdi-account-plus-outline',
+              remark: '',
+              type: 1,
+              title: '手动收集',
+              local: null,
+              path: '/dataFactory/data-collection/manual-collection',
+              urls: null,
+              children: [],
+              enName: 'Manual collection',
+              id: 1320,
+              redirect: null,
+              level: 3,
+              openPath: null,
+              active: null,
+              label: '手动收集',
+              sort: 1,
+              parentId: 1319,
+              effectiveStatus: true,
+              parentName: null,
+              component: 'dataFactory/dataCollection/manualCollection',
+              meta: {
+                keepAlive: false,
+                allowClick: false,
+                roles: [
+                  {
+                    active: '1',
+                    alwaysShow: 0,
+                    children: [],
+                    code: '',
+                    component: '',
+                    effectiveStatus: true,
+                    enName: 'Excel Import',
+                    hidden: 0,
+                    icon: '',
+                    id: 1321,
+                    label: 'Excel导入',
+                    level: 3,
+                    local: '',
+                    meta: null,
+                    metastr: '{"enName":"Excel Import","title":"Excel导入","target":false}',
+                    meun: '',
+                    name: 'excelImport',
+                    open: 0,
+                    openPath: '',
+                    parentId: 1320,
+                    parentName: '',
+                    path: '',
+                    redirect: '',
+                    remark: '',
+                    rootId: 1319,
+                    sort: 0,
+                    style: '',
+                    type: 3,
+                    urls: ''
+                  },
+                  {
+                    active: '1',
+                    alwaysShow: 0,
+                    children: [],
+                    code: '',
+                    component: '',
+                    effectiveStatus: true,
+                    enName: 'Image Import',
+                    hidden: 0,
+                    icon: '',
+                    id: 1322,
+                    label: '图片导入',
+                    level: 3,
+                    local: '',
+                    meta: null,
+                    metastr: '{"enName":"Image Import","title":"图片导入","target":false}',
+                    meun: '',
+                    name: 'imageImport',
+                    open: 0,
+                    openPath: '',
+                    parentId: 1320,
+                    parentName: '',
+                    path: '',
+                    redirect: '',
+                    remark: '',
+                    rootId: 1319,
+                    sort: 5,
+                    style: '',
+                    type: 3,
+                    urls: ''
+                  },
+                  {
+                    active: '1',
+                    alwaysShow: 0,
+                    children: [],
+                    code: '',
+                    component: '',
+                    effectiveStatus: true,
+                    enName: 'Manual Import',
+                    hidden: 0,
+                    icon: '',
+                    id: 1323,
+                    label: '手动输入',
+                    level: 3,
+                    local: '',
+                    meta: null,
+                    metastr: '{"enName":"Manual Import","title":"手动输入","target":false}',
+                    meun: '',
+                    name: 'manualImport',
+                    open: 0,
+                    openPath: '',
+                    parentId: 1320,
+                    parentName: '',
+                    path: '',
+                    redirect: '',
+                    remark: '',
+                    rootId: 1319,
+                    sort: 10,
+                    style: '',
+                    type: 3,
+                    urls: ''
+                  }
+                ],
+                enName: 'Manual collection',
+                icon: 'mdi-account-plus-outline',
+                editModules: false,
+                title: '手动收集',
+                fullScreen: false,
+                target: false,
+                dataPermission: false,
+                effectiveStatus: true
+              },
+              name: 'manual-collection',
+              style: null,
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":false,"enName":"Manual collection","editModules":false,"title":"手动收集","fullScreen":false,"target":false,"dataPermission":false}',
+              open: null
+            },
+            {
+              meun: null,
+              code: null,
+              hidden: 0,
+              rootId: 972,
+              icon: 'mdi-bug',
+              remark: '',
+              type: 1,
+              title: '自动收集',
+              local: null,
+              path: '/dataFactory/data-collection/auto-collection',
+              urls: null,
+              children: [],
+              enName: 'Auto collection',
+              id: 1324,
+              redirect: null,
+              level: 3,
+              openPath: null,
+              active: null,
+              label: '自动收集',
+              sort: 1,
+              parentId: 1319,
+              effectiveStatus: true,
+              parentName: null,
+              component: 'dataFactory/dataCollection/autoCollection',
+              meta: {
+                keepAlive: false,
+                allowClick: false,
+                roles: [
+                  {
+                    active: '1',
+                    alwaysShow: 0,
+                    children: [],
+                    code: '',
+                    component: '',
+                    effectiveStatus: true,
+                    enName: 'Spider Management',
+                    hidden: 0,
+                    icon: 'mdi-bug',
+                    id: 1325,
+                    label: '爬虫管理',
+                    level: 3,
+                    local: '',
+                    meta: null,
+                    metastr: '{"enName":"Spider Management","title":"爬虫管理","target":false}',
+                    meun: '',
+                    name: 'spiderManagement',
+                    open: 0,
+                    openPath: '',
+                    parentId: 1324,
+                    parentName: '',
+                    path: '',
+                    redirect: '',
+                    remark: '',
+                    rootId: 1319,
+                    sort: 1,
+                    style: '',
+                    type: 3,
+                    urls: ''
+                  },
+                  {
+                    active: '1',
+                    alwaysShow: 0,
+                    children: [],
+                    code: '',
+                    component: '',
+                    effectiveStatus: true,
+                    enName: 'Page Parsing',
+                    hidden: 0,
+                    icon: 'mdi-bug',
+                    id: 1326,
+                    label: '网页解析',
+                    level: 3,
+                    local: '',
+                    meta: null,
+                    metastr: '{"enName":"Page Parsing","title":"网页解析","target":false}',
+                    meun: '',
+                    name: 'pageParsing',
+                    open: 0,
+                    openPath: '',
+                    parentId: 1324,
+                    parentName: '',
+                    path: '',
+                    redirect: '',
+                    remark: '',
+                    rootId: 1319,
+                    sort: 1,
+                    style: '',
+                    type: 3,
+                    urls: ''
+                  }
+                ],
+                enName: 'Auto collection',
+                icon: 'mdi-bug',
+                editModules: false,
+                title: '自动收集',
+                fullScreen: false,
+                target: false,
+                dataPermission: false,
+                effectiveStatus: true
+              },
+              name: 'auto-collection',
+              style: null,
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":false,"enName":"Auto collection","editModules":false,"title":"自动收集","fullScreen":false,"target":false,"dataPermission":false}',
+              open: null
+            }
+          ],
+          enName: 'Data collection',
+          id: 1319,
+          redirect: null,
+          level: 2,
+          openPath: null,
+          active: null,
+          label: '数据收集',
+          sort: 0,
+          parentId: 972,
+          effectiveStatus: true,
+          parentName: null,
+          component: '',
+          meta: {
+            allowClick: false,
+            roles: [],
+            enName: 'Data collection',
+            icon: 'mdi-spider',
+            title: '数据收集',
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-collection',
+          style: null,
+          alwaysShow: 0,
+          metastr: '{"allowClick":false,"enName":"Data collection","title":"数据收集","target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 972,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '生产线监控',
+          local: '',
+          path: '/dataFactory/production-line-monitor',
+          urls: '',
+          children: [],
+          enName: 'production line monitor',
+          id: 961,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '生产线监控',
+          sort: 4,
+          parentId: 972,
+          effectiveStatus: true,
+          parentName: 'dataFactory',
+          component: 'dataFactory/productionLineMonitor',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'production line monitor',
+            icon: '',
+            editModules: false,
+            title: '生产线监控',
+            fullScreen: false,
+            target: false,
+            dataPermission: false,
+            effectiveStatus: true
+          },
+          name: 'productionLineMonitor',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"production line monitor","editModules":false,"title":"生产线监控","fullScreen":false,"target":false,"dataPermission":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 972,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '生产线管理',
+          local: '',
+          path: '/dataFactory/production-line-manage',
+          urls: '',
+          children: [],
+          enName: 'Assembly Line',
+          id: 973,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '生产线管理',
+          sort: 6,
+          parentId: 972,
+          effectiveStatus: true,
+          parentName: 'dataFactory',
+          component: 'dataFactory/productionLine',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Assembly Line',
+            icon: '',
+            editModules: false,
+            title: '生产线管理',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'productionLine',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Assembly Line","editModules":false,"title":"生产线管理","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 972,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '生产线调度',
+          local: '',
+          path: '/dataFactory/production-line-dispatch',
+          urls: '',
+          children: [],
+          enName: 'Assembly Line',
+          id: 1230,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '生产线调度',
+          sort: 8,
+          parentId: 972,
+          effectiveStatus: true,
+          parentName: '',
+          component: 'dataFactory/dispatch',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Assembly Line',
+            icon: '',
+            editModules: false,
+            title: '生产线调度',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'productionLineDispatch',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Assembly Line","editModules":false,"title":"生产线调度","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 972,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '生产线日志',
+          local: '',
+          path: '/dataFactory/log-manage',
+          urls: '',
+          children: [],
+          enName: 'log manage',
+          id: 974,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '生产线日志',
+          sort: 10,
+          parentId: 972,
+          effectiveStatus: true,
+          parentName: 'dataFactory',
+          component: 'dataFactory/logManage',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'log manage',
+            icon: '',
+            editModules: false,
+            title: '生产线日志',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'productionLineLogManage',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"log manage","editModules":false,"title":"生产线日志","fullScreen":false,"target":false}',
+          open: null
+        }
+      ],
+      enName: 'production line manage',
+      id: 972,
+      redirect: '',
+      level: 1,
+      openPath: '',
+      active: '',
+      label: '数据工厂',
+      sort: 47,
+      parentId: 0,
+      effectiveStatus: true,
+      parentName: 'dataFactory',
+      component: 'Layout',
+      meta: {
+        allowClick: false,
+        roles: [],
+        enName: 'production line manage',
+        icon: 'mdi-factory',
+        title: '数据工厂',
+        target: false,
+        effectiveStatus: true
+      },
+      name: 'dataFactory',
+      style: '',
+      alwaysShow: 0,
+      metastr: '{"allowClick":false,"enName":"production line manage","title":"数据工厂","target":false}',
+      open: null
+    },
+    {
+      meun: '',
+      code: '',
+      hidden: 0,
+      rootId: 0,
+      icon: 'mdi-book-open-outline',
+      remark: '',
+      type: 0,
+      title: '数据手册',
+      local: '',
+      path: '/data-book',
+      urls: '',
+      children: [
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1225,
+          icon: '',
+          remark: '',
+          type: 0,
+          title: '元数据',
+          local: '',
+          path: '/data-book/data-metadata',
+          urls: '',
+          children: [
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '元数据',
+              local: '',
+              path: '/data-book/data-metadata',
+              urls: '',
+              children: [],
+              enName: 'metaData',
+              id: 1214,
+              redirect: '',
+              level: 0,
+              openPath: '',
+              active: '',
+              label: '元数据',
+              sort: 0,
+              parentId: 1213,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataMetaData',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'metaData',
+                icon: '',
+                editModules: false,
+                title: '元数据',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-metadata-list',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"metaData","editModules":false,"title":"元数据","fullScreen":false,"target":false}',
+              open: null
+            },
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '元数据详情',
+              local: '',
+              path: '/data-book/data-metadata/details/:id/:name',
+              urls: '',
+              children: [],
+              enName: 'metaData details',
+              id: 1215,
+              redirect: '',
+              level: 0,
+              openPath: '',
+              active: '',
+              label: '元数据详情',
+              sort: 0,
+              parentId: 1213,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataMetaData/details',
+              meta: {
+                keepAlive: false,
+                allowClick: false,
+                roles: [],
+                enName: 'metaData details',
+                icon: '',
+                editModules: false,
+                title: '元数据详情',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-metadata-details',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":false,"enName":"metaData details","editModules":false,"title":"元数据详情","fullScreen":false,"target":false}',
+              open: null
+            }
+          ],
+          enName: 'metadata',
+          id: 1213,
+          redirect: '',
+          level: 0,
+          openPath: '',
+          active: '',
+          label: '元数据',
+          sort: 1,
+          parentId: 1225,
+          effectiveStatus: true,
+          parentName: '',
+          component: '',
+          meta: {
+            allowClick: true,
+            roles: [],
+            enName: 'metadata',
+            icon: '',
+            title: '元数据',
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-metadata',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"allowClick":true,"enName":"metadata","title":"元数据","target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1225,
+          icon: '',
+          remark: '',
+          type: 0,
+          title: '数据资源',
+          local: '',
+          path: '/data-book/data-resource',
+          urls: '',
+          children: [
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据资源详情',
+              local: '',
+              path: '/data-book/data-resource/details/:id/:name',
+              urls: '',
+              children: [],
+              enName: 'data Modules Details',
+              id: 1204,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据资源详情',
+              sort: 0,
+              parentId: 1207,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataResource/details',
+              meta: {
+                keepAlive: false,
+                allowClick: false,
+                roles: [],
+                enName: 'data Modules Details',
+                icon: '',
+                editModules: false,
+                title: '数据资源详情',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-data-resource-details',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":false,"enName":"data Modules Details","editModules":false,"title":"数据资源详情","fullScreen":false,"target":false}',
+              open: null
+            },
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 662,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据资源',
+              local: '',
+              path: '/data-book/data-resource',
+              urls: '',
+              children: [],
+              enName: 'data Resource',
+              id: 1208,
+              redirect: '',
+              level: 0,
+              openPath: '',
+              active: '',
+              label: '数据资源',
+              sort: 8,
+              parentId: 1207,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataResource',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Resource',
+                icon: '',
+                editModules: false,
+                title: '数据资源',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'dataBookDataResourceIndex',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Resource","editModules":false,"title":"数据资源","fullScreen":false,"target":false}',
+              open: null
+            }
+          ],
+          enName: 'data Resource',
+          id: 1207,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据资源',
+          sort: 4,
+          parentId: 1225,
+          effectiveStatus: true,
+          parentName: '',
+          component: '',
+          meta: {
+            allowClick: true,
+            roles: [],
+            enName: 'data Resource',
+            icon: '',
+            title: '数据资源',
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-book-resource',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"allowClick":true,"enName":"data Resource","title":"数据资源","target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1225,
+          icon: '',
+          remark: '',
+          type: 0,
+          title: '数据模型',
+          local: '',
+          path: '/data-book/data-model',
+          urls: '',
+          children: [
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据模型详情',
+              local: '',
+              path: '/data-book/data-model/details/:id/:name',
+              urls: '',
+              children: [],
+              enName: 'data Modules Details',
+              id: 1212,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据模型详情',
+              sort: 0,
+              parentId: 1210,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataModel/details',
+              meta: {
+                keepAlive: false,
+                allowClick: false,
+                roles: [],
+                enName: 'data Modules Details',
+                icon: '',
+                editModules: false,
+                title: '数据模型详情',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-data-model-details',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":false,"enName":"data Modules Details","editModules":false,"title":"数据模型详情","fullScreen":false,"target":false}',
+              open: null
+            },
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据模型',
+              local: '',
+              path: '/data-book/data-model',
+              urls: '',
+              children: [],
+              enName: 'data Model',
+              id: 1211,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据模型',
+              sort: 20,
+              parentId: 1210,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataModel',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Model',
+                icon: '',
+                editModules: false,
+                title: '数据模型',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-data-model-index',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Model","editModules":false,"title":"数据模型","fullScreen":false,"target":false}',
+              open: null
+            }
+          ],
+          enName: 'data Model',
+          id: 1210,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据模型',
+          sort: 11,
+          parentId: 1225,
+          effectiveStatus: true,
+          parentName: '',
+          component: '',
+          meta: {
+            allowClick: true,
+            roles: [],
+            enName: 'data Model',
+            icon: '',
+            title: '数据模型',
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-book-data-model',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"allowClick":true,"enName":"data Model","title":"数据模型","target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1225,
+          icon: '',
+          remark: '',
+          type: 0,
+          title: '数据指标',
+          local: '',
+          path: '/data-book/data-indicator',
+          urls: '',
+          children: [
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据指标',
+              local: '',
+              path: '/data-book/data-indicator',
+              urls: '',
+              children: [],
+              enName: 'data Indicator',
+              id: 1267,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据指标',
+              sort: 1,
+              parentId: 1182,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/indicator',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Indicator',
+                icon: '',
+                editModules: false,
+                title: '数据指标',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-indicator-index',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Indicator","editModules":false,"title":"数据指标","fullScreen":false,"target":false}',
+              open: null
+            },
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据指标详情',
+              local: '',
+              path: '/data-book/data-indicator/details/:id/:name',
+              urls: '',
+              children: [],
+              enName: 'data Indicator',
+              id: 1268,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据指标详情',
+              sort: 1,
+              parentId: 1182,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/indicator/details',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Indicator',
+                icon: '',
+                editModules: false,
+                title: '数据指标详情',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-indicator-details',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Indicator","editModules":false,"title":"数据指标详情","fullScreen":false,"target":false}',
+              open: null
+            }
+          ],
+          enName: 'data Indicator',
+          id: 1182,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据指标',
+          sort: 30,
+          parentId: 1225,
+          effectiveStatus: true,
+          parentName: 'dataBook',
+          component: '',
+          meta: {
+            allowClick: true,
+            roles: [],
+            enName: 'data Indicator',
+            icon: '',
+            title: '数据指标',
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-book-indicator',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"allowClick":true,"enName":"data Indicator","title":"数据指标","target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1225,
+          icon: '',
+          remark: '',
+          type: 0,
+          title: '数据标准',
+          local: '',
+          path: '/data-book/data-standard',
+          urls: '',
+          children: [
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据标准',
+              local: '',
+              path: '/data-book/data-standard',
+              urls: '',
+              children: [],
+              enName: 'data Indicator',
+              id: 1269,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据标准',
+              sort: 1,
+              parentId: 1202,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataStandard',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Indicator',
+                icon: '',
+                editModules: false,
+                title: '数据标准',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-standard-index',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Indicator","editModules":false,"title":"数据标准","fullScreen":false,"target":false}',
+              open: null
+            },
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据标准详情',
+              local: '',
+              path: '/data-book/data-standard/details/:id/:name',
+              urls: '',
+              children: [],
+              enName: 'data Indicator',
+              id: 1270,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据标准详情',
+              sort: 10,
+              parentId: 1202,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataStandard/details',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Indicator',
+                icon: '',
+                editModules: false,
+                title: '数据标准详情',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-standard-details',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Indicator","editModules":false,"title":"数据标准详情","fullScreen":false,"target":false}',
+              open: null
+            }
+          ],
+          enName: 'data Indicator',
+          id: 1202,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据标准',
+          sort: 35,
+          parentId: 1225,
+          effectiveStatus: true,
+          parentName: '',
+          component: '',
+          meta: {
+            allowClick: true,
+            roles: [],
+            enName: 'data Indicator',
+            icon: '',
+            title: '数据标准',
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-book-standard',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"allowClick":true,"enName":"data Indicator","title":"数据标准","target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1225,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '数据标签',
+          local: '',
+          path: '/data-book/data-label',
+          urls: '',
+          children: [
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据标签',
+              local: '',
+              path: '/data-book/data-label',
+              urls: '',
+              children: [],
+              enName: 'data Label',
+              id: 1271,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据标签',
+              sort: 1,
+              parentId: 1218,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataLabel',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Label',
+                icon: '',
+                editModules: false,
+                title: '数据标签',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-label-index',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Label","editModules":false,"title":"数据标签","fullScreen":false,"target":false}',
+              open: null
+            },
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '数据标签详情',
+              local: '',
+              path: '/data-book/data-label/details/:id/:name',
+              urls: '',
+              children: [],
+              enName: 'data Label',
+              id: 1272,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '数据标签详情',
+              sort: 1,
+              parentId: 1218,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/dataLabel/details',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'data Label',
+                icon: '',
+                editModules: false,
+                title: '数据标签详情',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-label-details',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Label","editModules":false,"title":"数据标签详情","fullScreen":false,"target":false}',
+              open: null
+            }
+          ],
+          enName: 'data Label',
+          id: 1218,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '数据标签',
+          sort: 40,
+          parentId: 1225,
+          effectiveStatus: true,
+          parentName: '',
+          component: '',
+          meta: {
+            keepAlive: false,
+            allowClick: true,
+            roles: [],
+            enName: 'data Label',
+            icon: '',
+            editModules: false,
+            title: '数据标签',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-book-label',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":true,"enName":"data Label","editModules":false,"title":"数据标签","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 1225,
+          icon: '',
+          remark: '',
+          type: 0,
+          title: '业务域',
+          local: '',
+          path: '/data-book/business-domain',
+          urls: '',
+          children: [
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '业务域',
+              local: '',
+              path: '/data-book/business-domain',
+              urls: '',
+              children: [],
+              enName: 'Business Domain',
+              id: 1286,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '业务域',
+              sort: 0,
+              parentId: 1285,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/businessDomain',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'Business Domain',
+                icon: '',
+                editModules: false,
+                title: '业务域',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-business-domain-index',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"Business Domain","editModules":false,"title":"业务域","fullScreen":false,"target":false}',
+              open: null
+            },
+            {
+              meun: '',
+              code: '',
+              hidden: 1,
+              rootId: 1225,
+              icon: '',
+              remark: '',
+              type: 1,
+              title: '业务域详情',
+              local: '',
+              path: '/data-book/business-domain/details/:id/:name',
+              urls: '',
+              children: [],
+              enName: 'Business Domain',
+              id: 1287,
+              redirect: '',
+              level: 3,
+              openPath: '',
+              active: '',
+              label: '业务域详情',
+              sort: 10,
+              parentId: 1285,
+              effectiveStatus: true,
+              parentName: '',
+              component: 'dataBook/businessDomain/details',
+              meta: {
+                keepAlive: false,
+                allowClick: true,
+                roles: [],
+                enName: 'Business Domain',
+                icon: '',
+                editModules: false,
+                title: '业务域详情',
+                fullScreen: false,
+                target: false,
+                effectiveStatus: true
+              },
+              name: 'data-book-business-domain-details',
+              style: '',
+              alwaysShow: 0,
+              metastr: '{"keepAlive":false,"allowClick":true,"enName":"Business Domain","editModules":false,"title":"业务域详情","fullScreen":false,"target":false}',
+              open: null
+            }
+          ],
+          enName: 'Business Domain',
+          id: 1285,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '业务域',
+          sort: 60,
+          parentId: 1225,
+          effectiveStatus: true,
+          parentName: '',
+          component: '',
+          meta: {
+            allowClick: true,
+            roles: [],
+            enName: 'Business Domain',
+            icon: '',
+            title: '业务域',
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'data-book-business-domain',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"allowClick":true,"enName":"Business Domain","title":"业务域","target":false}',
+          open: null
+        }
+      ],
+      enName: 'data book',
+      id: 1225,
+      redirect: '',
+      level: 1,
+      openPath: '',
+      active: '',
+      label: '数据手册',
+      sort: 49,
+      parentId: 0,
+      effectiveStatus: true,
+      parentName: '',
+      component: 'Layout',
+      meta: {
+        allowClick: false,
+        roles: [],
+        enName: 'data book',
+        icon: 'mdi-book-open-outline',
+        title: '数据手册',
+        target: false,
+        effectiveStatus: true
+      },
+      name: 'data-book',
+      style: '',
+      alwaysShow: 0,
+      metastr: '{"allowClick":false,"enName":"data book","title":"数据手册","target":false}',
+      open: null
+    },
+    {
+      meun: '',
+      code: '',
+      hidden: 0,
+      rootId: 0,
+      icon: 'mdi-cog',
+      remark: '',
+      type: 0,
+      title: '系统管理',
+      local: '',
+      path: '/systemManage',
+      urls: '',
+      children: [
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 742,
+          icon: 'mdi-security',
+          remark: '',
+          type: 1,
+          title: '安全中心',
+          local: '',
+          path: '/systemManage/safety',
+          urls: '',
+          children: [],
+          enName: 'safety',
+          id: 1234,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '安全中心',
+          sort: 0,
+          parentId: 742,
+          effectiveStatus: true,
+          parentName: '',
+          component: 'systemManage/safety',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'safety',
+            icon: 'mdi-security',
+            editModules: false,
+            title: '安全中心',
+            fullScreen: false,
+            target: false,
+            dataPermission: false,
+            effectiveStatus: true
+          },
+          name: 'safety',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"safety","editModules":false,"title":"安全中心","fullScreen":false,"target":false,"dataPermission":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 742,
+          icon: 'mdi-auto-fix',
+          remark: '',
+          type: 1,
+          title: '平台设置',
+          local: '',
+          path: '/systemManage/systemIndividuation',
+          urls: '',
+          children: [],
+          enName: 'System Setting',
+          id: 807,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '平台设置',
+          sort: 3,
+          parentId: 742,
+          effectiveStatus: true,
+          parentName: 'systemManage',
+          component: 'systemManage/systemIndividuation',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'System Setting',
+            icon: 'mdi-auto-fix',
+            editModules: false,
+            title: '平台设置',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'systemIndividuation',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"System Setting","editModules":false,"title":"平台设置","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 742,
+          icon: '',
+          remark: '',
+          type: 1,
+          title: '租户管理',
+          local: '',
+          path: '/systemManage/tenantry',
+          urls: '',
+          children: [],
+          enName: 'Tenant Management',
+          id: 650,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '租户管理',
+          sort: 40,
+          parentId: 742,
+          effectiveStatus: true,
+          parentName: 'systemManage',
+          component: 'systemManage/tenantry',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'Tenant Management',
+            icon: '',
+            editModules: false,
+            title: '租户管理',
+            fullScreen: false,
+            target: false,
+            effectiveStatus: true
+          },
+          name: 'tenantry',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"Tenant Management","editModules":false,"title":"租户管理","fullScreen":false,"target":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 742,
+          icon: 'mdi-microsoft-xbox-controller-menu',
+          remark: '',
+          type: 1,
+          title: '菜单管理',
+          local: '',
+          path: '/systemManage/routeManage',
+          urls: '',
+          children: [],
+          enName: 'routeManage',
+          id: 648,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '菜单管理',
+          sort: 42,
+          parentId: 742,
+          effectiveStatus: true,
+          parentName: 'systemManage',
+          component: 'systemManage/routeManage',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'routeManage',
+            icon: 'mdi-microsoft-xbox-controller-menu',
+            editModules: false,
+            title: '菜单管理',
+            fullScreen: false,
+            target: false,
+            dataPermission: false,
+            effectiveStatus: true
+          },
+          name: 'routeManage',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"routeManage","editModules":false,"title":"菜单管理","fullScreen":false,"target":false,"dataPermission":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 742,
+          icon: 'mdi-account-details',
+          remark: '',
+          type: 1,
+          title: '角色管理',
+          local: '',
+          path: '/systemManage/roleManage',
+          urls: '',
+          children: [],
+          enName: 'roleManage',
+          id: 719,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '角色管理',
+          sort: 45,
+          parentId: 742,
+          effectiveStatus: true,
+          parentName: 'systemManage',
+          component: 'systemManage/roleManage',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'roleManage',
+            icon: 'mdi-account-details',
+            editModules: false,
+            title: '角色管理',
+            fullScreen: false,
+            target: false,
+            dataPermission: false,
+            effectiveStatus: true
+          },
+          name: 'roleManage',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"roleManage","editModules":false,"title":"角色管理","fullScreen":false,"target":false,"dataPermission":false}',
+          open: null
+        },
+        {
+          meun: '',
+          code: '',
+          hidden: 0,
+          rootId: 742,
+          icon: 'mdi-card-account-details-outline',
+          remark: '',
+          type: 1,
+          title: '用户管理',
+          local: '',
+          path: '/systemManage/user',
+          urls: '',
+          children: [],
+          enName: 'userManage',
+          id: 690,
+          redirect: '',
+          level: 2,
+          openPath: '',
+          active: '',
+          label: '用户管理',
+          sort: 50,
+          parentId: 742,
+          effectiveStatus: true,
+          parentName: 'systemManage',
+          component: 'systemManage/user',
+          meta: {
+            keepAlive: false,
+            allowClick: false,
+            roles: [],
+            enName: 'userManage',
+            icon: 'mdi-card-account-details-outline',
+            editModules: false,
+            title: '用户管理',
+            fullScreen: false,
+            target: false,
+            dataPermission: false,
+            effectiveStatus: true
+          },
+          name: 'userManage',
+          style: '',
+          alwaysShow: 0,
+          metastr: '{"keepAlive":false,"allowClick":false,"enName":"userManage","editModules":false,"title":"用户管理","fullScreen":false,"target":false,"dataPermission":false}',
+          open: null
+        }
+      ],
+      enName: 'System Manage',
+      id: 742,
+      redirect: '',
+      level: 1,
+      openPath: '',
+      active: '',
+      label: '系统管理',
+      sort: 95,
+      parentId: 0,
+      effectiveStatus: true,
+      parentName: '',
+      component: 'Layout',
+      meta: {
+        allowClick: false,
+        roles: [],
+        enName: 'System Manage',
+        icon: 'mdi-cog',
+        title: '系统管理',
+        target: false,
+        effectiveStatus: true
+      },
+      name: 'systemManage',
+      style: '',
+      alwaysShow: 0,
+      metastr: '{"allowClick":false,"enName":"System Manage","title":"系统管理","target":false}',
+      open: null
+    }
+  ],
+  permission: [
+    'systemManage:roleManage:create',
+    'systemManage:roleManage:edit',
+    'systemManage:roleManage:delete',
+    'systemManage:roleManage:data'
+  ]
+}

+ 22 - 11
src/store/modules/menu.js

@@ -1,10 +1,15 @@
 // import { getPermission, setPermission } from '@/utils/auth'
-import { getMenu2, saveMenu, saveMenuAll, deleteMenu } from '@/api/menu'
-
+import {
+  // getMenu2,
+  saveMenu,
+  saveMenuAll,
+  deleteMenu
+} from '@/api/menu'
+import Routes from '@/router/routes'
 const state = {
   refresh: true, // 更新路由
-  roles: [],
-  permission: []
+  roles: Routes.routes,
+  permission: Routes.permission
 }
 
 const mutations = {
@@ -67,13 +72,19 @@ const actions = {
   },
   getMenu2 ({ commit, dispatch }) {
     return new Promise((resolve, reject) => {
-      getMenu2({}).then(response => {
-        commit('SET_ROLES', response.data.routes)
-        commit('SET_PERMISSION', response.data.permission)
-        // 路由重新配置触发更新
-        commit('SET_REFRESH', true)
-        resolve(response.data.routes)
-      }).catch(err => { reject(err) })
+      const { routes, permission } = Routes
+      commit('SET_ROLES', routes)
+      commit('SET_PERMISSION', permission)
+      // 路由重新配置触发更新
+      commit('SET_REFRESH', true)
+      resolve(routes)
+      // getMenu2({}).then(response => {
+      //   commit('SET_ROLES', response.data.routes)
+      //   commit('SET_PERMISSION', response.data.permission)
+      //   // 路由重新配置触发更新
+      //   commit('SET_REFRESH', true)
+      //   resolve(response.data.routes)
+      // }).catch(err => { reject(err) })
     })
   }
 }

+ 89 - 0
src/views/dataAsset/components/edit.vue

@@ -0,0 +1,89 @@
+<template>
+  <form-list ref="form" class="mt-5" :items="formItems"></form-list>
+</template>
+
+<script>
+import FormList from '@/components/Form/list'
+const defaultOption = {
+  value: null,
+  outlined: true,
+  dense: true
+}
+export default {
+  name: 'data-asset-edit',
+  components: { FormList },
+  props: {
+    itemData: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+  data () {
+    return {
+      formItems: {
+        options: [
+          {
+            type: 'text',
+            key: 'name',
+            label: '请输入资产名称',
+            ...defaultOption,
+            rules: [v => !!v || '请输入资产名称']
+          },
+          {
+            type: 'text',
+            key: 'classify',
+            label: '请输入分类',
+            ...defaultOption,
+            rules: [v => !!v || '请输入分类']
+          },
+          {
+            type: 'text',
+            key: 'institution',
+            label: '请输入制作单位',
+            ...defaultOption,
+            rules: [v => !!v || '请输入制作单位']
+          },
+          {
+            type: 'text',
+            key: 'organization',
+            label: '请输入评估机构',
+            ...defaultOption,
+            rules: [v => !!v || '请输入评估机构']
+          },
+          {
+            type: 'text',
+            key: 'amount',
+            label: '请输入估值(万元)',
+            ...defaultOption,
+            rules: [v => !!v || '请输入估值(万元)']
+          }
+        ]
+      }
+    }
+  },
+  created () {
+    if (!this.itemData.id) {
+      return
+    }
+    this.formItems.options.forEach(item => {
+      item.value = this.itemData[item.key]
+    })
+  },
+  methods: {
+    validate () {
+      return this.$refs.form.validate()
+    },
+    getValue () {
+      const id = this.itemData.id
+      return this.formItems.options.reduce((res, item) => {
+        res[item.key] = item.value
+        return res
+      }, { id })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 34 - 0
src/views/dataAsset/details.vue

@@ -0,0 +1,34 @@
+<template>
+  <div style="font-size: 16px;">
+    <div>
+      <v-tabs v-model="tabs">
+        <v-tab>基础信息</v-tab>
+      </v-tabs>
+    </div>
+    <div>
+      <v-tabs-items v-model="tabs">
+        <v-tab-item class="pa-3">
+          基础信息
+        </v-tab-item>
+      </v-tabs-items>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'data-asset-details',
+  data () {
+    return {
+      tabs: 0
+    }
+  },
+  created () {
+    this.$route.meta.title = this.$route.params.name
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 146 - 0
src/views/dataAsset/index.vue

@@ -0,0 +1,146 @@
+<template>
+  <div class="pa-3 white">
+    <m-filter :option="filter" @search="handleSearch" />
+    <m-table
+      class="mt-3"
+      :loading="loading"
+      :headers="headers"
+      :items="items"
+      :total="total"
+      :show-select="false"
+      :is-tools="false"
+      :page-info="pageInfo"
+      @edit="handleEdit"
+      @delete="handleDelete"
+      @pageHandleChange="pageHandleChange"
+      @sort="handleSort"
+    >
+      <template #name="{ item }">
+        <span class="defaultLink" @click="handleDetails(item)">{{ item.name }}</span>
+      </template>
+      <template #navBtn>
+        <v-btn rounded color="primary" class="buttons" elevation="5" @click="handleAdd">
+          <v-icon left>mdi-plus</v-icon>
+          新增资产
+        </v-btn>
+      </template>
+    </m-table>
+    <m-dialog :title="title" :visible.sync="show" @submit="handleSubmit">
+      <edit-page v-if="show" ref="edit" :item-data="itemData"></edit-page>
+    </m-dialog>
+  </div>
+</template>
+
+<script>
+import MFilter from '@/components/Filter'
+import MTable from '@/components/List/table.vue'
+import MDialog from '@/components/Dialog'
+import EditPage from './components/edit'
+export default {
+  name: 'data-asset',
+  components: { MFilter, MTable, MDialog, EditPage },
+  data () {
+    return {
+      loading: false,
+      show: false,
+      filter: {
+        list: [
+          { type: 'textField', value: null, label: '分类', key: 'type' },
+          { type: 'datePicker', value: null, label: '时间', key: 'time' }
+        ]
+      },
+      queryData: {
+        type: null,
+        time: null
+      },
+      headers: [
+        { text: '资产名称', align: 'start', value: 'name' },
+        { text: '分类', align: 'start', value: 'type' },
+        { text: '制作单位', align: 'start', value: 'institution' },
+        { text: '制作时间', align: 'start', value: 'time' },
+        { text: '评估机构', align: 'start', value: 'organization' },
+        { text: '估值(万元)', align: 'start', value: 'amount' },
+        { text: '操作', align: 'start', value: 'actions' }
+      ],
+      itemData: {},
+      items: [
+        {
+          id: '1',
+          name: '最近五年市场销售数据集',
+          type: '市场营销',
+          institution: '市场部',
+          time: '2024年08月11日',
+          organization: '广州数据交易所',
+          amount: '100'
+        }
+      ],
+      orders: [],
+      pageInfo: {
+        size: 10,
+        current: 1
+      },
+      total: 1
+    }
+  },
+  computed: {
+    title () {
+      return Object.keys(this.itemData).length ? '编辑数据资产' : '新增数据资产'
+    }
+  },
+  created () {
+    this.init()
+  },
+  methods: {
+    async init () {
+      try {
+        this.loading = true
+      } catch (error) {
+
+      } finally {
+        this.loading = false
+      }
+    },
+    handleDetails ({ id, name }) {
+      this.$router.push(`${this.$route.path}/details/${id}/${name}`)
+    },
+    handleSearch (val) {
+      Object.assign(this.queryData, val)
+      this.pageInfo.current = 1
+      this.init()
+    },
+    handleAdd () {
+      this.itemData = {}
+      this.show = true
+    },
+    async handleEdit (item) {
+      this.itemData = item
+      this.show = true
+    },
+    handleSubmit () {},
+    handleDelete (ids) {
+      if (Array.isArray(ids) && !ids.length) return this.$snackbar.warning('请选择要删除的选项')
+      this.$confirm('提示', '是否删除该选项')
+        .then(async () => {
+          try {
+            this.$snackbar.success('删除成功')
+            this.init()
+          } catch (error) {
+            this.$snackbar.error('删除失败')
+          }
+        })
+    },
+    pageHandleChange (page) {
+      this.pageInfo.current = page
+      this.init()
+    },
+    handleSort (val) {
+      this.orders = val
+      this.init()
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 15 - 15
src/views/home/index.vue

@@ -15,7 +15,7 @@
 import ScrollTabs from '@/components/ScrollTabs'
 import FeatureModule from './components/featureModule.vue'
 import MEmpty from '@/components/Common/empty'
-import { getWorkbenchList } from '@/api/menu'
+// import { getWorkbenchList } from '@/api/menu'
 
 export default {
   name: 'home-index',
@@ -29,13 +29,13 @@ export default {
   data () {
     return {
       isMini: true,
-      isEmpty: false,
+      isEmpty: true,
       list: [],
       tabItems: []
     }
   },
   mounted () {
-    this.init()
+    // this.init()
     this.$parent.$on('$HANDLE_EDIT_MODULES', this.handleClick)
     this.$nextTick(() => {
       this.$refs.scrollBox.scrollTo({ top: 0, behavior: 'instant' })
@@ -46,18 +46,18 @@ export default {
     this.$parent.$off('$HANDLE_EDIT_MODULES', this.handleClick)
   },
   methods: {
-    async init () {
-      try {
-        const { data } = await getWorkbenchList()
-        // console.log(data)
-        this.isEmpty = data.every(_e => _e.entity.active === '0')
-        this.list = data.map(e => {
-          return Object.assign(e.entity, { efficacy: e.efficacy })
-        })
-      } catch (error) {
-        this.$snackbar.error(error)
-      }
-    },
+    // async init () {
+    //   try {
+    //     const { data } = await getWorkbenchList()
+    //     // console.log(data)
+    //     this.isEmpty = data.every(_e => _e.entity.active === '0')
+    //     this.list = data.map(e => {
+    //       return Object.assign(e.entity, { efficacy: e.efficacy })
+    //     })
+    //   } catch (error) {
+    //     this.$snackbar.error(error)
+    //   }
+    // },
     handleTabItems (val) {
       this.tabItems = val
     },

+ 12 - 9
src/views/login/components/login.vue

@@ -21,7 +21,10 @@
 <script>
 
 import FormData from '@/components/Form'
-import { getSettingInfo, setBurialPoint } from '@/api/system'
+import {
+  getSettingInfo
+  // setBurialPoint
+} from '@/api/system'
 import { mapMutations } from 'vuex'
 
 export default {
@@ -126,7 +129,7 @@ export default {
             return
           }
           // 登录成功记录访问 + 1
-          this.handleBurialPoint()
+          // this.handleBurialPoint()
           this.$router.push('/')
         } catch (error) {
           if (typeof error === 'object' && error?.code) {
@@ -142,13 +145,13 @@ export default {
         }
       }
     },
-    async handleBurialPoint () {
-      try {
-        await setBurialPoint({ accessRecordIndex: 'home' })
-      } catch (error) {
-        console.log('访问新增失败')
-      }
-    },
+    // async handleBurialPoint () {
+    //   try {
+    //     await setBurialPoint({ accessRecordIndex: 'home' })
+    //   } catch (error) {
+    //     console.log('访问新增失败')
+    //   }
+    // },
     fetchGetVerificationCode () {
       const api = this.$api
       const rand = Math.ceil(Math.random() * 10)