浏览代码

新的动态路由

xiaochan 1 年之前
父节点
当前提交
92080baf00

+ 19 - 9
src/api/settings/menu-settings.ts

@@ -1,22 +1,25 @@
 import requestV2 from "@/utils/request-v2";
 
 
-
 export interface IntergrationMenu {
-    id?: number;
-    type?: number;
-    path?: string;
-    icon?: string;
-    name?: string;
+    id: number;
+    type: number;
+    path: string;
+    icon: string;
+    name: string;
     parentId?: number;
-    metaTitle?: string;
+    metaTitle: string;
     metaHideTabs?: boolean;
     metaPassRule?: boolean;
-    sort?: number;
-    component?: string;
+    mainCard?: boolean;
+    mainOverflowAuto?: boolean;
+    metaNeedToken?: boolean;
+    sort: number;
+    component: string;
     redirect?: string;
     pathParams?: string;
     children?: IntergrationMenu[];
+    completePath?: string
 }
 
 export function getMenuSettings() {
@@ -25,3 +28,10 @@ export function getMenuSettings() {
         url: "/menuSettings/getMenuSettings",
     })
 }
+
+export function getUserMenu() {
+    return requestV2<IntergrationMenu[]>({
+        method: "GET",
+        url: "/menuSettings/getUserMenu",
+    })
+}

+ 9 - 0
src/layout/EmptyRouter.vue

@@ -0,0 +1,9 @@
+<template>
+  <router-view v-slot="{ Component }">
+    <transition name="fade-transform" mode="out-in">
+      <keep-alive>
+        <component :is="Component"/>
+      </keep-alive>
+    </transition>
+  </router-view>
+</template>

+ 33 - 16
src/layout/MenuV2/MenuItemV2.vue

@@ -1,21 +1,21 @@
 <template>
   <el-sub-menu v-if="data?.children && data?.children.length > 0"
-               :index="data?.completeRoute"
-               :id="data?.completeRoute"
-               :router="data?.completeRoute">
+               :index="data?.path"
+               :id="data?.completePath"
+               :router="data?.completePath">
     <template #title>
-      <i :class="data?.meta?.icon"
-         v-if="data?.meta?.icon"></i>
+      <i :class="data?.icon"
+         v-if="data?.icon"></i>
       <span v-html="highlightTitle(data?.metaTitle)"></span>
     </template>
     <menu-item-v2 :menu-text="menuText"
                   :data="item"
                   v-for="item in data?.children"/>
   </el-sub-menu>
-  <el-menu-item v-else :index="data?.completeRoute"
-                :id="data?.completeRoute"
-                :router="data?.completeRoute">
-    <i :class="data?.meta?.icon" v-if="data?.meta?.icon"></i>
+  <el-menu-item v-else :index="data?.completePath"
+                :id="data?.completePath"
+                :router="data?.completePath">
+    <i :class="data?.icon" v-if="data?.icon"></i>
     <span v-html="highlightTitle(data?.metaTitle)"></span>
   </el-menu-item>
 </template>
@@ -24,12 +24,29 @@
 import {toRefs} from "vue";
 
 declare type MenuType = {
-  metaTitle: string
-  completeRoute: string
+  id: number;
+  type: number;
+  path: string;
+  icon: string;
+  name: string;
+  parentId?: number;
+  metaTitle: string;
+  metaHideTabs?: boolean;
+  metaPassRule?: boolean;
+  sort: number;
+  component: string;
+  redirect?: string;
+  pathParams?: string;
+  children?: MenuType[];
+  completePath?: string
   meta: {
-    icon: string
+    title?: string;
+    hideTabs?: boolean,
+    passRule?: boolean,
+    needToken?: boolean,
+    mainCard?: boolean,
+    mainRolling?: boolean
   }
-  children: MenuType[]
 }
 
 const props = defineProps<{
@@ -52,8 +69,8 @@ i {
 }
 
 a {
-  text-decoration: none; /* 去除默认的下划线 */
-  outline: none; /* 去除旧版浏览器的点击后的外虚线框 */
-  color: #000; /* 去除默认的颜色和点击后变化的颜色 */
+  text-decoration: none;
+  outline: none;
+  color: #000;
 }
 </style>

+ 9 - 9
src/layout/MenuV2/MenuV2.vue

@@ -20,7 +20,7 @@
           :collapse="isCollapse"
           :default-active="isSearch ? '' : activeMenu"
           :unique-opened="isSearch ? false : expandOneMenu">
-        <menu-item-v2 v-for="item in isSearch ? searchData : data"
+        <menu-item-v2 v-for="item in isSearch ? searchData : menuData"
                       :data="item"
                       :menuText="menuText"/>
       </el-menu>
@@ -28,14 +28,14 @@
   </div>
 </template>
 
-<script setup name='MenuV2' lang="ts">
+<script setup lang="ts">
 import store from '@/store'
 import MenuItemV2 from "./MenuItemV2.vue";
 import {computed, nextTick, onMounted, reactive, Ref, ref, watch} from "vue";
 import {useRoute} from "vue-router";
 import Logo from '../HeaderV2/Logo.vue'
 import XEUtils from "xe-utils";
-import router from '@/router'
+import router, {routerMenus} from '@/router'
 import sleep from "@/utils/sleep";
 import {treeSearch} from "@/utils/array-utils";
 import {useCompRef} from "@/utils/useCompRef";
@@ -44,7 +44,7 @@ import {ElMenu} from "element-plus";
 const menuText: Ref<string> = ref('')
 const menuRef = useCompRef(ElMenu)
 
-const data = store.state['user'].routes
+const menuData = ref(routerMenus.value)
 const rendering = ref(true)
 
 const isSearch = ref<boolean>(false)
@@ -57,7 +57,7 @@ const searchInput: (val: string) => void = XEUtils.debounce(async (val: string)
   searchActives.clear();
 
   if (val) {
-    searchData.value = treeSearch<{ metaTitle: string; }>(data, (item) => {
+    searchData.value = treeSearch<{ metaTitle: string; }>(menuData.value, (item) => {
       const metaTitle: string = item.metaTitle
       return metaTitle.includes(val);
     });
@@ -107,14 +107,14 @@ const expandMenu = () => {
   if (isCollapse.value) {
     store.commit('app/isCollapseChange', false)
     setTimeout(() => {
-      searchRef.value.focus()
+      searchRef.value!.focus()
     }, 100)
   }
 }
 
-const logoRef: Ref<HTMLHtmlElement> = ref(null)
-const searchRef: Ref<HTMLHeadElement> = ref(null)
-const floatingRef: Ref<HTMLHtmlElement> = ref(null)
+const logoRef: Ref<HTMLHtmlElement | null> = ref(null)
+const searchRef: Ref<HTMLHeadElement | null> = ref(null)
+const floatingRef: Ref<HTMLHtmlElement | null> = ref(null)
 
 const barHeight = reactive({
   height: ''

+ 7 - 9
src/layout/default-content/DefaultContent.vue

@@ -1,11 +1,9 @@
-<script setup lang="ts">
-
-</script>
-
 <template>
-
+  <router-view v-slot="{ Component }">
+    <transition name="fade-transform" mode="out-in">
+      <keep-alive>
+        <component :is="Component"/>
+      </keep-alive>
+    </transition>
+  </router-view>
 </template>
-
-<style scoped lang="scss">
-
-</style>

+ 0 - 11
src/layout/fillet-content/index.vue

@@ -1,11 +0,0 @@
-<script setup lang="ts" name="FilletContent">
-
-</script>
-
-<template>
-
-</template>
-
-<style scoped lang="scss">
-
-</style>

+ 1 - 1
src/main.js

@@ -53,7 +53,6 @@ VXETable.use(VXETablePluginExportXLSX, {
 
 app.use(ElementPlus, {locale: zhCn, size: store.state.app.elementSize})
 app.use(store)
-app.use(router)
 app.use(DataVVue3)
 app.directive('el-btn', VElBtn)
 app.directive('title', VTitle)
@@ -61,4 +60,5 @@ app.directive('ClickOutside', ClickOutside)
 app.use(print)
 app.use(VXETable)
 app.use(JsonViewer);
+app.use(router)
 app.mount('#app')

+ 0 - 84
src/router/index.js

@@ -1,84 +0,0 @@
-/**
- * @description 所有人可使用的参数配置列表
- * @params hideMenu: 是否隐藏当前路由结点不在导航中展示
- * @params alwaysShow: 只有一个子路由时是否总是展示菜单,默认false
- */
-import {createRouter, createWebHistory} from 'vue-router'
-import store from '@/store'
-import NProgress from '@/utils/system/nprogress'
-import {changeTitle} from '@/utils/system/title'
-
-// 动态路由相关引入数据
-// 引入modules
-import Dashboard from './modules/dashboard'
-import System from './modules/system'
-
-
-const router = createRouter({
-    history: createWebHistory(),
-    routes: [...Dashboard, ...System],
-})
-
-const vueFile = import.meta.glob('../views/**/*.{vue,tsx}');
-
-
-//   这个方法可以动态添加 路由
-function text() {
-    let a = [{
-        path: 'test',
-        component: '/src/views/settings/Test.vue',
-        title: '测试页面',
-        icon: 'iconfont icon-dianhua'
-    }]
-    a.forEach(item => {
-        let data = {
-            path: '/' + item.path,
-            name: item.title,
-            meta: {
-                title: item.title
-            },
-            component: vueFile[`${item.component}`]
-        }
-        router.addRoute(data)
-    })
-}
-
-
-const whiteList = ['/login', '/dashboard', '/scrollSource', '/lottery', '/404', '/401', '/']
-
-router.beforeEach((to, _from, next) => {
-    NProgress.start();
-    if (to.meta.passRule) {
-        to.meta.title ? changeTitle(to.meta.title) : ''
-        next()
-        return
-    } else if (to.meta.blankPage) {
-        to.meta.title ? changeTitle(to.meta.title) : ''
-        next(to.query.path)
-        return
-    }
-    if (to.meta.parent) {
-        to.meta.title ? changeTitle(to.meta.title) : ''
-        next(to.meta.parent)
-        return
-    }
-
-    if (store.state.user.token || whiteList.indexOf(to.path) !== -1) {
-        to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
-        next()
-    } else {
-        next('/login') // 全部重定向到登录页
-        to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
-    }
-})
-
-router.afterEach((to, _from) => {
-    const keepAliveComponentsName = store.getters['keepAlive/keepAliveComponentsName'] || []
-    const name = to.matched[to.matched.length - 1].components.default.name
-    if (to.meta && to.meta.cache && name && !keepAliveComponentsName.includes(name)) {
-        store.commit('keepAlive/addKeepAliveComponentsName', name)
-    }
-    NProgress.done()
-})
-
-export default router

+ 154 - 0
src/router/index.ts

@@ -0,0 +1,154 @@
+//@ts-nocheck
+/**
+ * @description 所有人可使用的参数配置列表
+ * @params hideMenu: 是否隐藏当前路由结点不在导航中展示
+ * @params alwaysShow: 只有一个子路由时是否总是展示菜单,默认false
+ */
+import {createRouter, createWebHistory, RouteRecordRaw} from 'vue-router'
+import store from '@/store'
+import NProgress from '@/utils/system/nprogress'
+import {changeTitle} from '@/utils/system/title'
+
+// 动态路由相关引入数据
+// 引入modules
+import Dashboard from './modules/dashboard'
+import {getUserMenu, IntergrationMenu} from "@/api/settings/menu-settings";
+import {createVNode, defineComponent, h} from "vue";
+import Layout from "@/layout/index.vue";
+import {userInfoStore} from "@/utils/store-public";
+import {stringIsBlank} from "@/utils/blank-utils";
+import XEUtils from "xe-utils";
+
+function dashboardRouter(data: Array<RouteRecordRaw>) {
+    data.forEach((item) => {
+        XEUtils.set(item, "meta.needToken", false)
+        if (item.children && item.children.length > 0) {
+            dashboardRouter(item.children)
+        }
+    })
+}
+
+dashboardRouter(Dashboard)
+
+const router = createRouter({
+    history: createWebHistory(),
+    routes: [...Dashboard],
+})
+
+
+const vueFile = import.meta.glob('../views/**/*.{vue,tsx}');
+vueFile.EmptyRouter = import.meta.glob('../layout/EmptyRouter')['../layout/EmptyRouter']
+vueFile.Layout = import.meta.glob('../layout/index.vue')['../layout/index.vue']
+
+let asyncFinished = false
+export const routerMenus = ref([])
+
+async function beforeAddRoutes() {
+    routerMenus.value = await getUserMenu()
+    const routers = addRoutes(routerMenus.value)
+    routers.forEach(item => {
+        router.addRoute(item)
+    })
+
+    // 404 要添加到最后面才可以,不然一开始就会是 404
+    router.addRoute({
+        path: '/:path(.*)*',
+        name: 'notFound',
+        component: Layout,
+        redirect: '/404',
+        hideMenu: true,
+    })
+}
+
+function createNameComponent(item) {
+    return () => {
+        return new Promise(resolve => {
+            vueFile[`${item.component}`]().then(res => {
+                const tmp = defineComponent({
+                    name: item.name,
+                    render() {
+                        const style = {
+                            height: '100%',
+                            width: '100%',
+                        }
+                        const props = {
+                            style
+                        }
+                        if (item.mainCard) {
+                            props.class = 'cy_card'
+                        }
+                        if (item.mainOverflowAuto) {
+                            style.overflow = "auto";
+                        }
+
+                        return h('div', props, [createVNode(res.default)]);
+                    }
+                })
+                resolve(tmp)
+            })
+        })
+    }
+}
+
+const capitalizeFirstLower = (word: string) => {
+    return word.charAt(0).toLowerCase() + word.slice(1);
+}
+
+function addRoutes(menus: IntergrationMenu[]) {
+    const routers: RouteRecordRaw[] = []
+    menus.forEach(item => {
+        const meta: { [key: string]: any } = {}
+        for (let key in item) {
+            if (key.startsWith("meta")) {
+                const metaKey = capitalizeFirstLower(key.replace("meta", ""))
+                meta[metaKey] = item[key]
+            }
+        }
+        const data: RouteRecordRaw = {
+            path: item.path + item.pathParams,
+            name: item.name,
+            redirect: item.redirect,
+            meta: meta,
+            component: createNameComponent(item)
+        };
+        if (item.children && item.children.length > 0) {
+            data.children = addRoutes(item.children)
+        }
+        routers.push(data)
+    })
+    return routers
+}
+
+
+router.beforeEach(async (to, _from, next) => {
+        NProgress.start();
+
+        function tmpNext(...arg) {
+            to.meta.title && changeTitle(to.meta.title)
+            if (to.meta.needToken && stringIsBlank(userInfoStore.value.token)) {
+                next('/login')
+                return
+            }
+            next(...arg);
+        }
+
+        if (!asyncFinished) {
+            await beforeAddRoutes()
+            tmpNext({path: to.path, query: to.query, replace: true});
+            asyncFinished = true
+        } else {
+            tmpNext();
+        }
+    }
+)
+
+router.afterEach((to, _from) => {
+    const keepAliveComponentsName = store.getters['keepAlive/keepAliveComponentsName'] || []
+    const name = to.matched[to.matched.length - 1].components.default.name
+    if (to.meta && to.meta.cache && name && !keepAliveComponentsName.includes(name)) {
+        store.commit('keepAlive/addKeepAliveComponentsName', name)
+    }
+    NProgress.done()
+})
+
+export default router

+ 0 - 1186
src/router/modules/dashboard.js

@@ -1,1186 +0,0 @@
-import Layout from '@/layout/index.vue'
-import {createNameComponent} from '../createNode'
-
-const route = [
-    {
-        path: '/login',
-        component: createNameComponent(() => import('@/views/system/login.vue')),
-        hideMenu: true,
-        meta: {title: '登录', hideTabs: true},
-    }, {
-        path: '/jumpRedirect',
-        component: createNameComponent(() => import('@/views/system/JumpRedirect.vue')),
-        hideMenu: true,
-        meta: {title: '跳转重定向', hideTabs: true, passRule: true},
-    },
-    {
-        path: '/mzEmr/:patientInfo?',
-        component: createNameComponent(() => import('@/views/mz-emr/MzEmr.vue')),
-        hideMenu: true,
-        meta: {title: '门诊电子病历', hideTabs: true, passRule: true},
-    },
-    {
-        path: '/shareholderCard/:patientInfo?',
-        component: createNameComponent(() => import('@/views/mz-emr/ShareholderCard.vue')),
-        hideMenu: true,
-        meta: {title: '股东卡优惠', hideTabs: true, passRule: true},
-    },
-    {
-        path: '/scrollSource',
-        component: createNameComponent(() => import('@/views/single-page/TodayClinicResource.vue')),
-        hideMenu: true,
-        meta: {title: '今日号源', hideTabs: true},
-    },
-    {
-        path: '/lottery',
-        component: createNameComponent(() => import('@/views/single-page/Lottery.vue')),
-        meta: {title: '抽奖'}
-    },
-    {
-        path: '/myEmrEditor/:pat?/:refresh?',
-        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/Home.vue')),
-        hideMenu: true,
-        meta: {title: '电子病历', hideTabs: true},
-    },
-    {
-        path: '/fluorescenceTest',
-        component: createNameComponent(() => import('@/components/zhu-yuan-yi-sheng/emr/auxiliary-tools/fluorescence-test/FluorescenceTest.vue')),
-        hideMenu: true,
-        meta: {title: '荧光检验', hideTabs: true},
-    },
-    {
-        path: '/siSettleDetailList/:patientId?/:times?',
-        component: createNameComponent(() => import('@/views/medical-insurance/allpatient/SiSettleDetailList.vue')),
-        meta: {title: '医保结算单', passRule: true},
-    },
-    {
-        path: '/view/patient360',
-        component: createNameComponent(() => import('@/views/view/patient360/src/Patient360.vue')),
-        meta: {title: '患者360', passRule: true, hideTabs: true},
-    },
-    {
-        path: '/',
-        component: Layout,
-        redirect: '/dashboard',
-        meta: {title: '工作集成平台'},
-        children: [
-            {
-                path: 'dashboard',
-                component: createNameComponent(() => import('@/views/dashboard/index.vue')),
-                meta: {title: '首页', hideClose: true},
-            },
-        ],
-    },
-    {
-        path: '/blank',
-        name: 'blank',
-        component: () => import('@/views/system/Blank.vue'),
-        meta: {hideTabs: true},
-    },
-    {
-        path: '/medins',
-        component: Layout,
-        meta: {title: '医保模块'},
-        children: [
-            {
-                path: 'inpatient',
-                component: createNameComponent(() => import('@/views/medical-insurance/inpatient/Home.vue')),
-                meta: {title: '住院医保'},
-                redirect: '/medins/inpatient/admRegistration',
-                children: [
-                    {
-                        path: 'admRegistration',
-                        component: createNameComponent(() => import('@/views/medical-insurance/inpatient/AdmRegistration.vue')),
-                        meta: {title: '医保入院登记'},
-                    },
-                    {
-                        path: 'inHospFeeUpload',
-                        component: createNameComponent(() => import('@/views/medical-insurance/inpatient/InHospFeeUpload.vue')),
-                        meta: {title: '医保费用上传'},
-                    },
-                    {
-                        path: 'discSettlement',
-                        component: createNameComponent(() => import('@/views/medical-insurance/inpatient/DiscSettlement.vue')),
-                        meta: {title: '医保出院结算'},
-                    },
-                    {
-                        path: 'hospitalApproveApply',
-                        component: createNameComponent(() => import('@/views/medical-insurance/inpatient/HospitalApproveApply.vue')),
-                        meta: {title: '医院审批申请'},
-                    },
-                ],
-            },
-            {
-                path: 'inpatient/admissVerification',
-                component: createNameComponent(() => import('@/views/medical-insurance/inpatient/AdmissVerification.vue')),
-                meta: {title: '入院登记审核'},
-            },
-            {
-                path: 'inpatient/medInsVerification',
-                component: createNameComponent(() => import('@/views/medical-insurance/inpatient/SettleVerification.vue')),
-                meta: {title: '出院结算审核'},
-            },
-            {
-                path: 'inpatient/hospitalApproveVerify',
-                component: createNameComponent(() => import('@/views/medical-insurance/inpatient/HospitalApproveVerify.vue')),
-                meta: {title: '医院审批审核'},
-            },
-            {
-                path: 'inpatient/frontSheetUpload',
-                component: createNameComponent(() => import('@/views/medical-insurance/inpatient/FrontSheetUpload.vue')),
-                meta: {title: '病案首页上传'},
-            },
-            {
-                path: 'outpatient/mzRegister',
-                component: createNameComponent(() => import('@/views/medical-insurance/outpatient/MzRegister.vue')),
-                meta: {title: '门诊登记'},
-            },
-            {
-                path: 'outpatient/mzSpltryRcrd',
-                component: createNameComponent(() => import('@/views/medical-insurance/outpatient/MzSpltryRcrd.vue')),
-                meta: {title: '门诊补录'},
-            },
-            {
-                path: 'outpatient/spcChrRcd',
-                component: createNameComponent(() => import('@/views/medical-insurance/outpatient/SpcChrRcd.vue')),
-                meta: {title: '慢特病备案'},
-            },
-            {
-                path: 'qryManage/catalogue',
-                component: createNameComponent(() => import('@/views/medical-insurance/management/Catalogue.vue')),
-                meta: {title: '目录管理'},
-            },
-            {
-                path: 'qryManage/psnInfo',
-                component: createNameComponent(() => import('@/views/medical-insurance/allpatient/PsnInfo.vue')),
-                meta: {title: '医保身份查询'},
-            },
-            {
-                path: 'qryManage/inhospInfo',
-                component: createNameComponent(() => import('@/views/medical-insurance/allpatient/InhospInfo.vue')),
-                meta: {title: '在院查询'},
-            },
-            {
-                path: 'qryManage/visitInfo',
-                component: createNameComponent(() => import('@/views/medical-insurance/allpatient/VisitInfo.vue')),
-                meta: {title: '就诊信息查询'},
-            },
-            {
-                path: 'qryManage/siSettleDetailList',
-                component: createNameComponent(() => import('@/views/medical-insurance/allpatient/SiSettleDetailList.vue')),
-                meta: {title: '医保结算单'},
-            },
-            {
-                path: 'qryManage/setllistReconciliation',
-                component: createNameComponent(() => import('@/views/medical-insurance/allpatient/SetllistReconciliation.vue')),
-                meta: {title: '结算与对账'},
-            },
-            {
-                path: 'qryManage/exportAutoUploadInfo',
-                name: 'ExportAutoUploadInfo',
-                component: createNameComponent(() => import('@/components/si-sheet-upload/ExportAutoUploadInfo.vue')),
-                meta: {title: '上传信息'},
-            },
-            {
-                path: 'qryManage/drgGroupResult',
-                name: 'DrgGroupResult',
-                component: createNameComponent(() => import('@/components/si-sheet-upload/DrgGroupResult.vue')),
-                meta: {title: '分组信息'},
-            },
-            {
-                path: 'qryManage/setlStatistics',
-                component: createNameComponent(() => import('@/views/medical-insurance/allpatient/SetlStatistics.vue')),
-                meta: {title: '结算统计'},
-            },
-            {
-                path: 'qryManage/logAnalyse',
-                component: createNameComponent(() => import('@/views/medical-insurance/management/LogAnalyse.vue')),
-                meta: {title: '日志分析'},
-            },
-            {
-                path: 'qryManage/catalogue',
-                component: createNameComponent(() => import('@/views/medical-insurance/management/Catalogue.vue')),
-                meta: {title: '目录管理'},
-            },
-            {
-                path: 'qryManage/seriousViolations',
-                component: createNameComponent(() => import('@/views/medical-insurance/management/ViolationRules.vue')),
-                meta: {title: '违规规则'},
-            },
-            {
-                path: 'qryManage/supplementary',
-                component: createNameComponent(() => import('@/views/medical-insurance/management/SupplementaryInquiry.vue')),
-                meta: {title: '辅助查询'},
-            },
-            {
-                path: 'qryManage/recordManagement',
-                component: createNameComponent(() => import('@/views/medical-insurance/management/RecordManagement.vue')),
-                meta: {title: '备案管理'},
-            },
-            {
-                path: 'qryManage/insurIncomeAnalysis',
-                component: createNameComponent(() => import('@/views/medical-insurance/allpatient/InsurIncomeAnalysis.vue')),
-                meta: {title: '全院医保收入分析'},
-            },
-            {
-                path: 'statistical/cssybJsTj',
-                component: createNameComponent(() => import('@/views/medical-insurance/statistical/CssybJsTj.vue')),
-                meta: {title: '市医保决算统计'},
-            },
-            {
-                path: 'statistical/cssybCsTj',
-                component: createNameComponent(() => import('@/views/medical-insurance/statistical/CssybCsTj.vue')),
-                meta: {title: '市医保测算统计'},
-            },
-            {
-                path: 'statistical/cssybBzTj',
-                component: createNameComponent(() => import('@/views/medical-insurance/statistical/CssybBzTj.vue')),
-                meta: {title: '市医保病种统计'},
-            },
-            {
-                path: 'statistical/clnTimesAvg',
-                component: createNameComponent(() => import('@/views/medical-insurance/statistical/ClnTimesAvg.vue')),
-                meta: {title: '长浏宁次均费用'},
-            },
-        ],
-    },
-    {
-        path: '/inspections',
-        component: Layout,
-        meta: {title: '检验检查'},
-        children: [
-            {
-                path: 'inspectionReportIndex',
-                name: 'inspectionReportIndex',
-                component: createNameComponent(() => import('@/views/examination/InspectionReportIndex.vue')),
-                meta: {title: '检验报告'},
-            },
-            {
-                path: 'covidExamResult',
-                component: createNameComponent(() => import('@/views/examination/CovidExamResult.vue')),
-                meta: {title: '新冠核酸检测报告'},
-            },
-            {
-                path: 'healthCrdUpld',
-                component: createNameComponent(() => import('@/views/examination/UploadToHealthCard.vue')),
-                meta: {title: '健康证对接'},
-            },
-            {
-                path: 'bookableManagement',
-                component: createNameComponent(() => import('@/views/examination/BookableManagement.vue')),
-                meta: {title: '检验检查预约维护'},
-            },
-            {
-                path: 'mixLabelPrinter',
-                component: createNameComponent(() => import('@/views/examination/MixLabelPrinter.vue')),
-                meta: {title: '混采标签打印'},
-            },
-            {
-                path: 'tjReportInfo',
-                component: createNameComponent(() => import('@/views/examination/TjReportInfo.vue')),
-                meta: {title: '体检报告'},
-            },
-            {
-                name: 'bloodSugarQuery',
-                path: 'bloodSugarQuery',
-                component: createNameComponent(() => import('@/views/examination/BloodSugarQuery/BloodSugarQuery.vue')),
-                meta: {title: '血糖查询'},
-            },
-        ],
-    },
-    {
-        path: '/medTecMod',
-        component: Layout,
-        meta: {title: '医技模块'},
-        children: [
-            {
-                path: 'yiJiFeiYongLuRu/:patNo?',
-                component: createNameComponent(() => import('@/views/med-tec-mod/YiJiFeiYongLuRu.vue')),
-                meta: {title: '医技费用录入'},
-            },
-            {
-                path: 'chargeInputInquiry',
-                component: createNameComponent(() => import('@/views/med-tec-mod/ChargeInputInquiry.vue')),
-                meta: {title: '费用录入查询'},
-            },
-            {
-                path: 'queRenYiZhuShouFei',
-                component: createNameComponent(() => import('@/views/med-tec-mod/QueRenYiZhuShouFei.vue')),
-                meta: {title: '确认医嘱费用'},
-            },
-            {
-                path: 'menZhenXiangMu',
-                component: createNameComponent(() => import('@/views/med-tec-mod/MenZhenXiangMu.vue')),
-                meta: {title: '门诊项目确认或取消'},
-            },
-        ],
-    },
-    {
-        path: '/dictionary',
-        component: Layout,
-        meta: {title: '字典准备'},
-        children: [
-            {
-                path: 'prjctMdcnMtch',
-                component: createNameComponent(() => import('@/views/dictionary/NationalSiMatch.vue')),
-                meta: {title: '项目药品匹配'},
-            },
-            {
-                path: 'deptMatch',
-                component: createNameComponent(() => import('@/views/dictionary/YiBaoKeShiPiPei.vue')),
-                meta: {title: '医保科室匹配'},
-            },
-            {
-                path: 'hisWjwMatch',
-                component: createNameComponent(() => import('@/views/dictionary/HisWjwMatch.vue')),
-                meta: {title: '卫健委字典匹配'},
-            },
-            {
-                path: 'shouShuBuWeiWeiHu',
-                component: createNameComponent(() => import('@/views/dictionary/ShouShuBuWeiWeiHu.vue')),
-                meta: {title: '手术部位维护'},
-            },
-            {
-                path: 'oprtLevel',
-                component: createNameComponent(() => import('@/views/dictionary/OprtLevel.vue')),
-                meta: {title: '手术级别管理'},
-            },
-            {
-                path: 'oprtDoctorLevel',
-                component: createNameComponent(() => import('@/views/dictionary/OprtDoctorLevel.vue')),
-                meta: {title: '手术医生级别管理'},
-            },
-            {
-                path: 'personnel/deptDict',
-                component: createNameComponent(() => import('@/views/dictionary/personnel/DeptDict.vue')),
-                meta: {title: '科室字典'},
-            },
-            {
-                path: 'templateThumb',
-                component: createNameComponent(() => import('@/views/dictionary/TemplateThumb.vue')),
-                meta: {title: '套餐图片维护'},
-            },
-            {
-                path: 'personnel/personnelDict',
-                component: createNameComponent(() => import('@/views/dictionary/personnel/PersonnelDict.vue')),
-                meta: {title: '人事基础字典'},
-            },
-            {
-                path: 'personnel/employeeMi',
-                component: createNameComponent(() => import('@/views/dictionary/personnel/EmployeeMi.vue')),
-                meta: {title: '职工字典'},
-            },
-            {
-                path: 'serviceNumber/healthEducation',
-                component: createNameComponent(() => import('@/views/dictionary/serviceNumber/HealthEducation.vue')),
-                meta: {title: '健康教育字典'},
-            },
-        ],
-    },
-    {
-        path: '/reports',
-        component: Layout,
-        meta: {title: '报表模块'},
-        children: [
-            {
-                path: 'superReportQueryCenter',
-                component: createNameComponent(() => import('@/views/reports/super-report-query-center/SuperReportQueryCenter.vue')),
-                meta: {title: 'super报表查询'},
-            },
-            {
-                path: 'deptPriodRprt',
-                component: createNameComponent(() => import('@/views/reports/DeptPeriodReport.vue')),
-                meta: {title: '科室时段报表'},
-            },
-            {
-                path: 'reportQueryCenter',
-                component: createNameComponent(() => import('@/views/reports/ReportQueryCenter.vue')),
-                meta: {title: '报表查询中心'},
-            },
-            {
-                path: 'infntChrgRprt',
-                component: createNameComponent(() => import('@/views/reports/InfantFeeReport.vue')),
-                meta: {title: '婴儿收费统计'},
-            },
-            {
-                path: 'mdcnStckCnt',
-                component: createNameComponent(() => import('@/views/reports/MedicineStockCount.vue')),
-                meta: {title: '药品盘点'},
-            },
-            {
-                path: 'clockinStatistics',
-                component: createNameComponent(() => import('@/views/reports/ClockinData.vue')),
-                meta: {title: '打卡数据'},
-            },
-            {
-                path: 'covidVaccinateAppointment',
-                component: createNameComponent(() => import('@/views/reports/covid-vaccinate/CovidVaccinateAppointment.vue')),
-                meta: {title: '新冠接种预约'},
-            },
-            {
-                path: 'inquiryOfConsultationFee',
-                component: createNameComponent(() => import('@/views/reports/InquiryOfConsultationFee.vue')),
-                meta: {title: '查询会诊费用'},
-            },
-            {
-                path: 'consumablesStatistics',
-                component: createNameComponent(() => import('@/views/reports/ConsumablesStatistics.vue')),
-                meta: {title: '耗材使用统计'},
-            },
-            {
-                path: 'illegalChargesAnalysis',
-                component: createNameComponent(() => import('@/views/reports/IllegalChargesAnalysis.vue')),
-                meta: {title: '违规收费分析'},
-            },
-            {
-                path: 'queryPayService',
-                component: createNameComponent(() => import('@/views/reports/QueryPayService.vue')),
-                meta: {title: '收费项目'},
-            },
-            {
-                path: 'drugInquiry',
-                component: createNameComponent(() => import('@/views/reports/DrugInquiry.vue')),
-                meta: {title: '查询药品'},
-            },
-            {
-                path: 'yuanNeiTongJi',
-                component: createNameComponent(() => import('@/views/reports/YuanNeiTongJi.vue')),
-                meta: {title: '院内统计'},
-            },
-            {
-                path: 'keShiShouRuTongJi',
-                component: createNameComponent(() => import('@/views/reports/KeShiShouRuTongJi.vue')),
-                meta: {title: '科室收入统计'},
-            },
-            {
-                path: 'bedDays',
-                component: createNameComponent(() => import('@/views/reports/BedDays.vue')),
-                meta: {title: '管床日数统计'},
-            },
-            {
-                path: 'inpatientAddrAnalyze',
-                component: createNameComponent(() => import('@/views/reports/patient-distribution/patient-distribution.vue')),
-                meta: {title: '住院患者分布'},
-            },
-            {
-                path: 'outpatientCoordination',
-                component: createNameComponent(() => import('@/views/reports/OutpatientCoordination.vue')),
-                meta: {title: '门诊统筹统计'},
-            },
-            {
-                path: 'mzSpecialDisease',
-                component: createNameComponent(() => import('@/views/reports/MzSpecialDisease.vue')),
-                meta: {title: '门诊特殊病统计'},
-            },
-            {
-                path: 'infectiousDisease',
-                component: createNameComponent(() => import('@/views/reports/InfectiousDisease.vue')),
-                meta: {title: '传染病统计'},
-            },
-        ],
-    },
-    {
-        path: '/dataModify',
-        component: Layout,
-        meta: {title: '数据修改'},
-        children: [
-            {
-                path: 'yzActOrderModify',
-                name: 'yzActOrderModify',
-                component: createNameComponent(() => import('@/views/data-modify/YzActOrderModify.vue')),
-                meta: {title: '医嘱修改申请'},
-            },
-            {
-                path: 'zyChargeFeeModify',
-                component: createNameComponent(() => import('@/views/data-modify/ZyChargeFeeModify.vue')),
-                meta: {title: '住院费用修改'},
-            },
-            {
-                path: 'yzActOrderModifyVerify',
-                component: createNameComponent(() => import('@/views/data-modify/YzActOrderModifyVerify.vue')),
-                meta: {title: '医嘱修改审核'},
-            },
-            {
-                path: 'yzTemperatureModify',
-                component: createNameComponent(() => import('@/views/data-modify/YzTemperatureModify.vue')),
-                meta: {title: '护理记录单修改'},
-            },
-            {
-                path: 'secondFefund',
-                component: createNameComponent(() => import('@/views/data-modify/SecondFefund.vue')),
-                meta: {title: '二次退费'},
-            },
-            {
-                path: 'queryOfReceiptDetails',
-                component: createNameComponent(() => import('@/views/data-modify/QueryOfReceiptDetails.vue')),
-                meta: {title: '入库明细查询'},
-            },
-            {
-                path: 'deliveryDetailsQuery',
-                component: createNameComponent(() => import('@/views/data-modify/DeliveryDetailsQuery.vue')),
-                meta: {title: '出库明细查询'},
-            },
-            {
-                path: 'reqOrderQuash',
-                component: createNameComponent(() => import('@/views/data-modify/OrderQuash.vue')),
-                meta: {title: '医嘱撤销审核'},
-            },
-        ],
-    },
-    {
-        path: '/myEmrManage',
-        component: Layout,
-        meta: {title: '电子病历管理'},
-        children: [
-            {
-                path: 'emrRelieveRule',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/EmrRelieveRule.vue')),
-                meta: {title: '解除病历限制'},
-            },
-            {
-                path: 'emrControlRule',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr_control_rule/EmrControlRule.vue')),
-                meta: {title: '环节质控'},
-            },
-            {
-                path: 'dieQuery',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/query-die/QueryDie.vue')),
-                meta: {title: '死亡病历分析'},
-            },
-            {
-                path: 'finalQualityControl',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/final-quality-control/FinalQualityControl.vue')),
-                meta: {title: '终末质控'},
-            },
-            {
-                path: 'myEmrQuery',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-query/EmrQueryIndex.vue')),
-                meta: {title: '电子病历查询中心'},
-            },
-            {
-                path: 'emrSuggestion',
-                component: createNameComponent(() => import('@/views/emr-manage/EmrSuggestion.vue')),
-                meta: {title: '病历建议维护'},
-            },
-            {
-                path: 'dynamicDataObjects',
-                component: createNameComponent(() => import('@/views/emr-manage/DynamicDataObjects.vue')),
-                meta: {title: '动态数据元'}
-            }
-        ]
-    },
-    {
-        path: '/inpatient',
-        component: Layout,
-        meta: {title: '住院模块'},
-        children: [
-            {
-                path: 'makeDbzFees',
-                component: createNameComponent(() => import('@/views/hospitalization/MakeDbzFees.vue')),
-                meta: {title: '单病种费用生成'},
-            },
-            {
-                path: 'advrsEvnt/fillAdverseEvent',
-                component: createNameComponent(() => import('@/views/hospitalization/adverse-event/FillAderverseEvent.vue')),
-                meta: {title: '不良事件上报'},
-            },
-            {
-                path: 'advrsEvnt/dealAdverseEvent',
-                component: createNameComponent(() => import('@/views/hospitalization/adverse-event/DealAdverseEvent.vue')),
-                meta: {title: '不良事件处理'},
-            },
-            {
-                path: 'advrsEvnt/allAdverseEvent',
-                component: createNameComponent(() => import('@/views/hospitalization/adverse-event/AllAdverseEvent.vue')),
-                meta: {title: '不良事件汇总'},
-            },
-            {
-                path: 'casefrntsht/fillCaseFrontSheet',
-                name: 'fillCaseFrontSheet',
-                component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/FillCaseFrontSheet.vue')),
-                meta: {title: '病案首页填写'},
-            },
-            {
-                path: 'casefrntsht/allCaseFrontSheet',
-                component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/AllCaseFrontSheet.vue')),
-                meta: {title: '病案首页汇总'},
-            },
-            {
-                path: 'casefrntsht/frontSheetQuality',
-                component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/FrontSheetQuality.vue')),
-                meta: {title: '病案首页质控'},
-            },
-            {
-                path: 'casefrntsht/frontSheetExport',
-                component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/FrontSheetExport.vue')),
-                meta: {title: '病案首页导出'},
-            },
-            {
-                path: 'casefrntsht/drgCoding',
-                name: 'DrgCoding',
-                component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/DrgCoding.vue')),
-                meta: {title: 'DRG编码'},
-            },
-            {
-                path: 'doctorsAdvise/doctorsAdviseGenerate',
-                component: createNameComponent(() => import('@/views/hospitalization/doctors-advise/DoctorsAdviseGenerate.vue')),
-                meta: {title: '医嘱生成'},
-            },
-            {
-                path: 'casefrntsht/jieShouHuiZhen',
-                component: createNameComponent(() => import('@/views/hospitalization/case-front-sheet/JieShouHuiZhen.vue')),
-                meta: {title: '接收会诊'},
-            },
-            {
-                path: 'patientInformationInquiry',
-                name: 'patientInformationInquiry',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/PatientInformationInquiry.vue')),
-                meta: {title: '患者信息查询', passRule: true},
-            },
-            {
-                path: 'level3DoctorSetup',
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/level3-doctor-setup/Level3DoctorSetup.vue')),
-                meta: {title: '三级医生设置'},
-            },
-            {
-                path: '/inpatient/zhuYuanYiSheng',
-                redirect: '', //
-                component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/Home.vue')),
-                meta: {title: '住院医生', passRule: true},
-                children: [
-                    {
-                        path: 'dianZiBingLi',
-                        name: 'dianZiBingLi',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/Home.vue')),
-                        meta: {
-                            title: '电子病历',
-                        },
-                    },
-                    {
-                        path: 'yiZhuLuRu',
-                        name: 'yiZhuLuRu',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/YiZhuLuRu.vue')),
-                        meta: {
-                            title: '医嘱录入',
-                        },
-                    },
-                    {
-                        path: 'orderTemplateMaintenance',
-                        name: 'orderTemplateMaintenance',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/yi-zhu-lu-ru/TemplateMaintenance.vue')),
-                        meta: {
-                            title: '医嘱模板维护',
-                        },
-                    },
-                    {
-                        path: 'huiZhenShenQing',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/hui-zhen/HuiZhenShenQing.vue')),
-                        meta: {
-                            title: '会诊申请',
-                        },
-                    },
-                    {
-                        path: 'patientInfoView',
-                        component: createNameComponent(() => import('@/components/zhu-yuan-yi-sheng/public/PatientInfoView.vue')),
-                        meta: {
-                            title: '患者信息',
-                            hideTabs: true
-                        },
-                    },
-                    {
-                        path: 'jianChaShenQing',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/jian-cha-jian-yan-shen-qing/JianChaShenQing.vue')),
-                        meta: {
-                            title: '检查申请',
-                        },
-                    },
-                    {
-                        path: 'jianYanShenQing',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/jian-cha-jian-yan-shen-qing/JianYanShenQing.vue')),
-                        meta: {
-                            title: '检验申请',
-                        },
-                    },
-                    {
-                        path: 'shouShuShenQing',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/shou-shu-shen-qing/src/ShouShu.vue')),
-                        meta: {
-                            title: '查看手术',
-                        },
-                    },
-                    {
-                        path: 'caoYaoYiZhu',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/cao-yao-yi-zhu/ChaXunChaoYaoYiZhu.vue')),
-                        meta: {
-                            title: '查看草药医嘱',
-                        },
-                    },
-                    {
-                        path: 'medicalHistoryPrompts',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/MedicalHistoryPrompts.vue')),
-                        meta: {
-                            title: '病历文本提示维护',
-                        },
-                    },
-                    {
-                        path: 'criticalValue',
-                        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/critical-value/CriticalValue.vue')),
-                        meta: {
-                            title: '患者危急值',
-                        },
-                    },
-                ],
-            },
-            {
-                path: 'nurseModule/printInfusionCard',
-                component: createNameComponent(() => import('@/views/hospitalization/nurse-module/PrintInfusionCard.vue')),
-                meta: {
-                    title: '打印输液卡',
-                },
-            },
-        ],
-    },
-
-    {
-        path: '/outpatient',
-        component: Layout,
-        meta: {title: '门诊模块'},
-        children: [
-            {
-                path: 'doctorInfoManagement',
-                component: createNameComponent(() => import('@/views/clinic/DoctorInfoManagement.vue')),
-                meta: {title: '医生信息管理'},
-            },
-            {
-                path: 'transferInOfExpenses',
-                component: createNameComponent(() => import('@/views/clinic/TransferInOfExpenses.vue')),
-                meta: {title: '急诊费用转入'},
-            },
-            {
-                path: 'wxPayRefund',
-                component: createNameComponent(() => import('@/views/clinic/WxPayRefund.vue')),
-                meta: {title: '微信支付退款'},
-            },
-            {
-                path: 'couponManage',
-                component: createNameComponent(() => import('@/views/clinic/CouponManage.vue')),
-                meta: {title: '优惠券管理'},
-            },
-            {
-                path: 'interactive/complaintsAndSuggestions',
-                component: createNameComponent(() => import('@/views/clinic/interactive/ComplaintsAndSuggestions.vue')),
-                meta: {title: '服务号投诉'},
-            },
-            {
-                path: 'interactive/comments',
-                component: createNameComponent(() => import('@/views/clinic/interactive/Comments.vue')),
-                meta: {title: '服务号患者评价'},
-            },
-            {
-                path: 'interactive/clinicSatisfied',
-                component: createNameComponent(() => import('@/views/clinic/interactive/ClinicSatisfied.vue')),
-                meta: {title: '满意度调查'},
-            },
-            {
-                path: 'triage/untriaged',
-                component: createNameComponent(() => import('@/views/clinic/triage/Untriaged.vue')),
-                meta: {title: '未分诊'},
-            },
-            {
-                path: 'triage/triaged',
-                component: createNameComponent(() => import('@/views/clinic/triage/Triaged.vue')),
-                meta: {title: '已分诊'},
-            },
-            {
-                path: 'triage/treated',
-                component: createNameComponent(() => import('@/views/clinic/triage/Treated.vue')),
-                meta: {title: '已接诊'},
-            },
-            {
-                path: 'triage/allTriages',
-                component: createNameComponent(() => import('@/views/clinic/triage/AllTriages.vue')),
-                meta: {title: '所有挂号'},
-            },
-            {
-                path: 'triage/triageDeptSettings',
-                component: createNameComponent(() => import('@/views/clinic/triage/DeptSettings.vue')),
-                meta: {title: '科室设置'},
-            },
-            {
-                path: 'triage/triageRoomSettings',
-                component: createNameComponent(() => import('@/views/clinic/triage/RoomSettings.vue')),
-                meta: {title: '诊室设置'},
-            },
-            {
-                path: 'triage/triageIpManagement',
-                component: createNameComponent(() => import('@/views/clinic/triage/IpManagement.vue')),
-                meta: {title: 'IP管理'},
-            },
-            {
-                path: 'triage/triageDisplaySettings',
-                component: createNameComponent(() => import('@/views/clinic/triage/DisplaySettings.vue')),
-                meta: {title: '显示管理'},
-            },
-            {
-                path: 'chronicDisease/chronicDiseaseRegister/:patNo?',
-                component: createNameComponent(() => import('@/views/clinic/chronicDisease/ChronicDiseaseRegister.vue')),
-                meta: {title: '慢病信息登记'},
-            },
-            {
-                path: 'chronicDisease/chronicDiseaseQuestionnaire/:id?',
-                name: 'chronicDiseaseQuestionnaire',
-                component: createNameComponent(() => import('@/views/clinic/chronicDisease/ChronicDiseaseQuestionnaire.vue')),
-                meta: {title: '慢病调查问卷'},
-            },
-            {
-                path: 'chronicDisease/chronicDiseaseSearch',
-                component: createNameComponent(() => import('@/views/clinic/chronicDisease/ChronicDiseaseSearch.vue')),
-                meta: {title: '慢病登记检索'},
-            },
-        ],
-    },
-    {
-        path: '/settings',
-        component: Layout,
-        meta: {title: '设置'},
-        children: [
-            {
-                path: 'deptPhones',
-                component: createNameComponent(() => import('@/views/settings/DeptPhones.vue')),
-                meta: {title: '科室电话'},
-            },
-            {
-                path: 'sendNotification',
-                component: createNameComponent(() => import('@/views/settings/SendNotification.vue')),
-                meta: {title: '发送通知'},
-            },
-            {
-                path: 'userInfo',
-                component: createNameComponent(() => import('@/views/settings/UserInfo.vue')),
-                meta: {title: '个人中心'},
-            },
-            {
-                path: 'permission/userRoleSettings',
-                component: createNameComponent(() => import('@/views/settings/permissions/UserRoleSettings.vue')),
-                meta: {title: '人员角色管理'},
-            },
-            {
-                path: 'permission/roleMenuSettings',
-                component: createNameComponent(() => import('@/views/settings/permissions/RoleMenuSettings.vue')),
-                meta: {title: '角色菜单管理'},
-            },
-            {
-                path: 'test',
-                component: createNameComponent(() => import('@/views/settings/Test.vue')),
-                meta: {title: '测试页面'},
-            },
-            {
-                path: 'menu',
-                component: createNameComponent(() => import('@/views/settings/menu-settings/MenuSettings.vue')),
-                meta: {title: '菜单设置'},
-            },
-        ],
-    },
-    {
-        path: '/shouShuGuanLi',
-        component: Layout,
-        meta: {title: '手术管理'},
-        children: [
-            {
-                path: 'shouShuAnPai',
-                component: createNameComponent(() => import('@/views/surgical-management/SurgeryArrangement.vue')),
-                meta: {title: '手术安排'},
-            },
-            {
-                path: 'surgeryRecord',
-                component: createNameComponent(() => import('@/views/surgical-management/SurgeryRecord.vue')),
-                meta: {title: '手术信息记录'},
-            },
-        ],
-    },
-    {
-        path: '/medicineManagement',
-        component: Layout,
-        meta: {title: '药品管理'},
-        children: [
-            {
-                path: 'pageSubmit',
-                component: createNameComponent(() => import('@/views/medicine-management/MedicinePageSubmit.vue')),
-                meta: {title: '提交药品单'}
-            },
-            {
-                path: 'pageInquiry',
-                component: createNameComponent(() => import('@/views/medicine-management/MedicinePageInquiry.vue')),
-                meta: {title: '药单情况查询'}
-            },
-            {
-                path: 'ypDict/ypDictBase',
-                component: createNameComponent(() => import('@/views/yp-dict/YpDictBase.vue')),
-                meta: {title: '药品基础字典'},
-            },
-            {
-                path: 'ypDict/ypDictInfo',
-                component: createNameComponent(() => import('@/views/yp-dict/YpDictInfo.vue')),
-                meta: {title: '药品账页维护'},
-            },
-            {
-                path: 'ypInventory/ypOutInStat',
-                component: createNameComponent(() => import('@/views/yp-inventory/YpOutInStat.vue')),
-                meta: {title: '药品进销存统计'},
-            },
-        ],
-    },
-    {
-        path: '/utilities',
-        component: Layout,
-        meta: {title: '通用工具'},
-        children: [
-            {
-                path: 'itemApply',
-                component: createNameComponent(() => import('@/views/utilities/ItemApply.vue')),
-                meta: {title: '物品领用'}
-            },
-            {
-                path: 'parseJson',
-                component: createNameComponent(() => import('@/views/utilities/ParseJson.vue')),
-                meta: {title: 'JSON格式化'},
-            },
-            {
-                path: 'pageEditorHelp',
-                component: createNameComponent(() => import('@/views/utilities/page-editor-help/PageEditorHelp.vue')),
-                meta: {title: '页面编辑'}
-            }
-        ],
-    },
-
-    {
-        path: '/operateMonitoring',
-        component: Layout,
-        meta: {title: '运营监测'},
-        children: [
-            {
-                path: 'inpatient/inHospital',
-                component: createNameComponent(() => import('@/views/operate-monitoring/OperateMonitoring.vue')),
-                meta: {title: '在院运营监测'},
-                params: {
-                    reportType: "zy",
-                    menuId: "122",
-                    levelType: "2",
-                    type: "2",
-                }
-            },
-            {
-                path: 'inpatient/outHospital',
-                component: createNameComponent(() => import('@/views/operate-monitoring/OperateMonitoringDate.vue')),
-                meta: {title: '出院运营监测'},
-                params: {
-                    startTime: "",
-                    endTime: "",
-                    reportType: "cy",
-                    menuId: "123",
-                    levelType: "2",
-                    type: "2",
-                }
-            },
-            {
-                path: 'statAnalysis/outHospUnsettl',
-                component: createNameComponent(() => import('@/views/operate-monitoring/OutHospUnsettl.vue')),
-                meta: {title: '出院未结算统计'},
-                params: {}
-            },
-            {
-                path: 'statAnalysis/workloadStatistics',
-                component: createNameComponent(() => import('@/views/operate-monitoring/WorkloadStatistics.vue')),
-                meta: {title: '工作量统计'},
-                params: {}
-            },
-            {
-                path: 'statAnalysis/incomeStatistics',
-                component: createNameComponent(() => import('@/views/operate-monitoring/IncomeStatistics.vue')),
-                meta: {title: '收入量统计'},
-                params: {}
-            },
-            {
-                path: 'efficiency/MzYsOperateDynamics',
-                component: createNameComponent(() => import('@/views/operate-monitoring/MzYsOperateDynamics.vue')),
-                meta: {title: '门诊部医师运营动态'},
-                params: {}
-            },
-            {
-                path: 'efficiency/ReceivePatients',
-                component: createNameComponent(() => import('@/views/operate-monitoring/ReceivePatients.vue')),
-                meta: {title: '接诊统计'},
-                params: {}
-            },
-            {
-                path: 'outpatient/outpatientDept',
-                component: createNameComponent(() => import('@/views/operate-monitoring/OperateMonitoringDate.vue')),
-                meta: {title: '门诊运营监测'},
-                params: {
-                    startTime: "",
-                    endTime: "",
-                    reportType: "mz",
-                    menuId: "124",
-                    levelType: "2",
-                    type: "2",
-                }
-            },
-            {
-                path: 'dataBigScreen',
-                component: createNameComponent(() => import('@/views/operate-monitoring/DataBigScreen.vue')),
-                meta: {title: '数据大屏'},
-                params: {}
-            },
-        ],
-    },
-    {
-        path: '/medicalAdvice',
-        component: Layout,
-        meta: {title: '医嘱模块'},
-        children: [
-            {
-                path: 'medicaManagement/cqYzPrint',
-                component: createNameComponent(() => import('@/views/medical-advice/advice-management/CqYzPrint.vue')),
-                meta: {title: '打印长期医嘱单'},
-            },
-            {
-                path: 'medicaManagement/lsYzPrint',
-                component: createNameComponent(() => import('@/views/medical-advice/advice-management/LsYzPrint.vue')),
-                meta: {title: '打印临时医嘱单'},
-            },
-            {
-                path: 'medicaManagement/queryYz',
-                component: createNameComponent(() => import('@/views/medical-advice/advice-management/QueryYz.vue')),
-                meta: {title: '查询医嘱'},
-            },
-            {
-                path: 'nursingManagement/threeTestList',
-                component: createNameComponent(() => import('@/views/medical-advice/nursing-manage/ThreeTestList.vue')),
-                meta: {title: '三测单录入'},
-            },
-            {
-                path: 'nursingManagement/nursingRecord',
-                component: createNameComponent(() => import('@/views/medical-advice/nursing-manage/NursingRecord.vue')),
-                meta: {title: '护理记录'},
-            },
-            {
-                path: 'nursingManagement/printThreeTestList',
-                component: createNameComponent(() => import('@/views/medical-advice/nursing-manage/PrintThreeTestList.vue')),
-                meta: {title: '打印三测单'},
-            }, {
-                path: 'patientInfo/adjustBed',
-                component: createNameComponent(() => import('@/views/medical-advice/patient-info/AdjustBed.vue')),
-                meta: {title: '整理床位'},
-            }, {
-                path: 'chaXunFenXi/arrearagePatientList',
-                component: createNameComponent(() => import('@/views/medical-advice/cha-xun-fen-xi/ArrearagePatientList.vue')),
-                meta: {title: '欠费病人清单'},
-            },
-            {
-                path: 'drugManage/drugSubmit',
-                component: createNameComponent(() => import('@/views/medical-advice/drug-manage/DrugSubmit.vue')),
-                meta: {title: '医嘱提交药品单'},
-            },
-            {
-                path: 'drugManage/TcInfo',
-                component: createNameComponent(() => import('@/views/medical-advice/drug-manage/TcInfo.vue')),
-                meta: {title: '生成退药单'},
-            }, {
-                path: 'drugManage/FyInfo',
-                component: createNameComponent(() => import('@/views/medical-advice/drug-manage/FyInfo.vue')),
-                meta: {title: '已发药单查询'},
-            }, {
-                path: 'drugManage/DsyInfo',
-                component: createNameComponent(() => import('@/views/medical-advice/drug-manage/DsyInfo.vue')),
-                meta: {title: '大输液统计'},
-            }, {
-                path: 'executeItem/yzChange',
-                component: createNameComponent(() => import('@/views/medical-advice/execute-item/YzChange.vue')),
-                meta: {title: '医嘱变更单'},
-            }, {
-                path: 'executeItem/yzExecuteSignature',
-                component: createNameComponent(() => import('@/views/medical-advice/execute-item/YzExecuteSignature.vue')),
-                meta: {title: '医嘱执行签名'},
-            }, {
-                path: 'executeItem/printExecuteItem',
-                component: createNameComponent(() => import('@/views/medical-advice/execute-item/PrintExecuteItem.vue')),
-                meta: {title: '打印执行项目表'},
-            }, {
-                path: 'executeItem/printExecuteDetail',
-                component: createNameComponent(() => import('@/views/medical-advice/execute-item/PrintExecuteDetail.vue')),
-                meta: {title: '打印执行单明细'},
-            }, {
-                path: 'executeItem/psInfo',
-                component: createNameComponent(() => import('@/views/medical-advice/nursing-manage/PsInfo.vue')),
-                meta: {title: '皮试结果确认'},
-            }, {
-                path: 'medicaManagement/yzCheck',
-                component: createNameComponent(() => import('@/views/medical-advice/advice-management/YzCheck.vue')),
-                meta: {title: '医嘱核对'},
-            }, {
-                path: 'patientInfo/addBabyInfo',
-                component: createNameComponent(() => import('@/views/medical-advice/patient-info/AddBabyInfo.vue')),
-                meta: {title: '增加婴儿信息'},
-            }, {
-                path: 'patientInfo/dealZk',
-                component: createNameComponent(() => import('@/views/medical-advice/patient-info/DealZk.vue')),
-                meta: {title: '转科处理'},
-            }, {
-                path: 'executeItem/generateYz',
-                component: createNameComponent(() => import('@/views/medical-advice/execute-item/GenerateYz.vue')),
-                meta: {title: '医嘱生成'},
-            },
-        ],
-    },
-    {
-        path: '/targetManagement',
-        component: Layout,
-        meta: {title: '指标管理'},
-        children: [
-            {
-                path: 'targetHome/targetHomePage',
-                component: createNameComponent(() => import('@/views/target-management/target-home/TargetHomePage.vue')),
-                meta: {title: '指标管理综合首页'},
-            },
-            {
-                path: 'targetDict/targetDictConfig',
-                component: createNameComponent(() => import('@/views/target-management/target-dict/TargetDictConfig.vue')),
-                meta: {title: '指标字典维护'},
-            },
-            {
-                path: 'targetDict/targetDictInfo',
-                component: createNameComponent(() => import('@/views/target-management/target-dict/TargetDictInfo.vue')),
-                meta: {title: '指标详情'},
-            },
-            {
-                path: 'targetDict/targetReportConfig',
-                component: createNameComponent(() => import('@/views/target-management/target-dict/TargetReportConfig.vue')),
-                meta: {title: '指标报表维护'},
-            }
-        ],
-    },
-    {
-        path: '/dataBase',
-        component: Layout,
-        meta: {title: '数据管理'},
-        children: [
-            {
-                path: '/dataBase/dataBaseApi',
-                component: createNameComponent(() => import('@/views/data-base/data-base-api/DataBase.vue')),
-                meta: {title: 'API管理'},
-            },
-            {
-                path: '/dataBase/pageEditorHelp',
-                component: createNameComponent(() => import('@/views/data-base/page-editor-help-v2/src/PageEditorHelpV2.vue')),
-                meta: {title: '页面编辑'},
-            },
-            {
-                path: '/dataBase/dictionaryMaintenanceEditing',
-                component: createNameComponent(() => import('@/views/data-base/dictionary-maintenance-editing/src/DictionaryMaintenanceEditing.vue')),
-                meta: {title: '基本字典维护编辑'},
-            },
-        ]
-    },
-];
-
-export default route

+ 120 - 0
src/router/modules/dashboard.ts

@@ -0,0 +1,120 @@
+// @ts-nocheck
+import Layout from '@/layout/index.vue'
+import {createNameComponent} from '../createNode'
+import {RouteRecordRaw} from "vue-router";
+
+
+declare module 'vue-router' {
+    interface RouteMeta {
+        title?: string;
+        hideTabs?: boolean,
+        passRule?: boolean,
+        needToken?: boolean,
+        mainCard?: boolean,
+        mainRolling?: boolean
+    }
+}
+
+const route: Array<RouteRecordRaw> = [
+    {
+        path: '/login',
+        component: createNameComponent(() => import('@/views/system/login.vue')),
+        hideMenu: true,
+        meta: {title: '登录', hideTabs: true},
+    }, {
+        path: '/jumpRedirect',
+        component: createNameComponent(() => import('@/views/system/JumpRedirect.vue')),
+        hideMenu: true,
+        meta: {title: '跳转重定向', hideTabs: true},
+    },
+    {
+        path: '/mzEmr/:patientInfo?',
+        component: createNameComponent(() => import('@/views/mz-emr/MzEmr.vue')),
+        hideMenu: true,
+        meta: {title: '门诊电子病历', hideTabs: true},
+    },
+    {
+        path: '/shareholderCard/:patientInfo?',
+        component: createNameComponent(() => import('@/views/mz-emr/ShareholderCard.vue')),
+        hideMenu: true,
+        meta: {title: '股东卡优惠', hideTabs: true},
+    },
+    {
+        path: '/scrollSource',
+        component: createNameComponent(() => import('@/views/single-page/TodayClinicResource.vue')),
+        hideMenu: true,
+        meta: {title: '今日号源', hideTabs: true},
+    },
+    {
+        path: '/lottery',
+        component: createNameComponent(() => import('@/views/single-page/Lottery.vue')),
+        meta: {title: '抽奖'}
+    },
+    {
+        path: '/myEmrEditor/:pat?/:refresh?',
+        component: createNameComponent(() => import('@/views/hospitalization/zhu-yuan-yi-sheng/electronic-medical-record/emr-editor/Home.vue')),
+        hideMenu: true,
+        meta: {title: '电子病历', hideTabs: true},
+    },
+    {
+        path: '/fluorescenceTest',
+        component: createNameComponent(() => import('@/components/zhu-yuan-yi-sheng/emr/auxiliary-tools/fluorescence-test/FluorescenceTest.vue')),
+        hideMenu: true,
+        meta: {title: '荧光检验', hideTabs: true},
+    },
+    {
+        path: '/siSettleDetailList/:patientId?/:times?',
+        component: createNameComponent(() => import('@/views/medical-insurance/allpatient/SiSettleDetailList.vue')),
+        meta: {title: '医保结算单'},
+    },
+    {
+        path: '/view/patient360',
+        component: createNameComponent(() => import('@/views/view/patient360/src/Patient360.vue')),
+        meta: {title: '患者360', hideTabs: true},
+    },
+    {
+        path: '/',
+        component: Layout,
+        redirect: '/dashboard',
+        meta: {title: '工作集成平台'},
+        children: [
+            {
+                path: 'dashboard',
+                component: createNameComponent(() => import('@/views/dashboard/index.vue')),
+                meta: {title: '首页'},
+            },
+        ],
+    },
+    {
+        path: '/blank',
+        name: 'blank',
+        component: () => import('@/views/system/Blank.vue'),
+        meta: {hideTabs: true},
+    },
+    {
+        path: '/system',
+        component: Layout,
+        redirect: '/404',
+        hideMenu: true,
+        meta: {title: '系统目录'},
+        children: [
+            {
+                path: '/404',
+                component: createNameComponent(() => import('@/views/system/404.vue')),
+                meta: {title: '404', hideTabs: true},
+            },
+            {
+                path: '/401',
+                component: createNameComponent(() => import('@/views/system/401.vue')),
+                meta: {title: '401', hideTabs: true},
+            },
+            {
+                path: '/redirect/:path(.*)',
+                component: createNameComponent(() => import('@/views/system/redirect.vue')),
+                meta: {title: 'redirect', hideTabs: true},
+            },
+        ],
+    },
+];
+
+export default route

+ 0 - 37
src/router/modules/system.js

@@ -1,37 +0,0 @@
-import Layout from '@/layout/index.vue'
-import { createNameComponent } from '../createNode'
-const route = [
-  {
-    path: '/system',
-    component: Layout,
-    redirect: '/404',
-    hideMenu: true,
-    meta: { title: '系统目录' },
-    children: [
-      {
-        path: '/404',
-        component: createNameComponent(() => import('@/views/system/404.vue')),
-        meta: { title: '404', hideTabs: true },
-      },
-      {
-        path: '/401',
-        component: createNameComponent(() => import('@/views/system/401.vue')),
-        meta: { title: '401', hideTabs: true },
-      },
-      {
-        path: '/redirect/:path(.*)',
-        component: createNameComponent(() => import('@/views/system/redirect.vue')),
-        meta: { title: 'redirect', hideTabs: true },
-      },
-    ],
-  },
-  {
-    // 找不到路由重定向到404页面
-    path: '/:pathMatch(.*)',
-    component: Layout,
-    redirect: '/404',
-    hideMenu: true,
-  },
-]
-
-export default route

+ 1 - 1
src/utils/system/title.js

@@ -1,5 +1,5 @@
 import { systemTitle } from '@/config'
 
-export function changeTitle(name) {
+export function changeTitle(name = '') {
   document.title = `${name}-${systemTitle}`
 }

+ 39 - 30
src/views/settings/menu-settings/MenuSettings.vue

@@ -17,36 +17,46 @@ onMounted(async () => {
 </script>
 
 <template>
-  <div class="cy_main_card ">
-    <el-table
-        class="no_el-table"
-        :data="menuTreeData"
-        highlight-current-row
-        height="100%"
-        style="width: 100%"
-        row-key="id"
-        :tree-props="{ children: 'children' }"
-    >
-      <el-table-column prop="metaTitle" label="标题">
-        <template #default="{row}">
-          <span :class="`${row.icon}`"></span>
-          <span>&nbsp;&nbsp;&nbsp;{{ row.metaTitle }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column prop="path" label="路径"/>
-      <el-table-column prop="component" label="组件路径"/>
-      <el-table-column label="操作">
-        <template #default="{row}">
-          <el-button-group>
-            <el-button type="primary" size="large" link @click="modify(row)">修改</el-button>
-            <el-button type="danger" size="large" link>删除</el-button>
-          </el-button-group>
-        </template>
-      </el-table-column>
-    </el-table>
+  <vxe-table
+      show-overflow
+      :row-config="{isHover: true, useKey: true}"
+      :column-config="{resizable: true}"
+      :tree-config="{transform: true, rowField: 'id', parentField: 'parentId', line: true}"
+      :data="menuTreeData">
+    <vxe-column field="metaTitle" title="标题" tree-node></vxe-column>
+    <vxe-column field="path" title="路径"></vxe-column>
+    <vxe-column field="component" title="组件路径"></vxe-column>
+    <vxe-column title="操作" fixed="right"></vxe-column>
+  </vxe-table>
 
-    <Dialog :menuTreeData="menuTreeData" ref="dialog"/>
-  </div>
+  <!--  <el-table-->
+  <!--      class="no_el-table"-->
+  <!--      :data="menuTreeData"-->
+  <!--      highlight-current-row-->
+  <!--      height="100%"-->
+  <!--      style="width: 100%"-->
+  <!--      row-key="id"-->
+  <!--      :tree-props="{ children: 'children' }"-->
+  <!--  >-->
+  <!--    <el-table-column prop="metaTitle" label="标题">-->
+  <!--      <template #default="{row}">-->
+  <!--        <span :class="`${row.icon}`"></span>-->
+  <!--        <span>&nbsp;&nbsp;&nbsp;{{ row.metaTitle }}</span>-->
+  <!--      </template>-->
+  <!--    </el-table-column>-->
+  <!--    <el-table-column prop="path" label="路径"/>-->
+  <!--    <el-table-column prop="component" label="组件路径"/>-->
+  <!--    <el-table-column label="操作">-->
+  <!--      <template #default="{row}">-->
+  <!--        <el-button-group>-->
+  <!--          <el-button type="primary" size="large" link @click="modify(row)">修改</el-button>-->
+  <!--          <el-button type="danger" size="large" link>删除</el-button>-->
+  <!--        </el-button-group>-->
+  <!--      </template>-->
+  <!--    </el-table-column>-->
+  <!--  </el-table>-->
+
+  <Dialog :menuTreeData="menuTreeData" ref="dialog"/>
 </template>
 
 <style lang="scss">
@@ -59,6 +69,5 @@ onMounted(async () => {
   .el-table__cell {
     padding: 12px 0;
   }
-
 }
 </style>