import {createWebHistory, createRouter} from 'vue-router' /* Layout */ import Layout from '@/layout' /** * Note: 路由配置项 * * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 * roles: ['admin', 'common'] // 访问路由的角色权限 * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 * meta : { noCache: true // 如果设置为true,则不会被 缓存(默认 false) title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 } */ // 公共路由 export const constantRoutes = [ { path: '/redirect', component: Layout, hidden: true, children: [ { path: '/redirect/:path(.*)', component: () => import('@/views/redirect/index.vue') } ] }, { path: '/login', component: () => import('@/views/login'), hidden: true }, { path: '/register', component: () => import('@/views/register'), hidden: true }, { path: '/401', component: () => import('@/views/error/401'), hidden: true }, { path: '', component: Layout, redirect: '/index', children: [ { path: '/index', component: () => import('@/views/index'), name: 'Index', meta: {title: '首页', icon: 'dashboard', affix: true} } ] }, { path: '/user', component: Layout, hidden: true, redirect: 'noredirect', children: [ { path: 'profile', component: () => import('@/views/system/user/profile/index'), name: 'Profile', meta: {title: '个人中心', icon: 'user'} } ] }, // 住院护士站 — 快捷访问路由(与 sys_menu 中 menu_id=295 的动态路由并存,路径不同不冲突) { path: '/inpatientNurse', component: Layout, hidden: true, redirect: '/inpatientNurse/inpatientNurseStation', children: [ { path: 'inpatientNurseStation', component: () => import('@/views/inpatientNurse/inpatientNurseStation/index.vue'), name: 'InpatientNurseStation', meta: {title: '住院护士站'} }, { path: 'medicalOrderExecution', component: () => import('@/views/inpatientNurse/medicalOrderExecution/index.vue'), name: 'MedicalOrderExecution', meta: {title: '医嘱执行'} }, { path: 'medicalOrderProofread', component: () => import('@/views/inpatientNurse/medicalOrderProofread/index.vue'), name: 'MedicalOrderProofread', meta: {title: '医嘱校对'} }, { path: 'medicineCollect', component: () => import('@/views/inpatientNurse/medicineCollect/index.vue'), name: 'MedicineCollect', meta: {title: '领药管理'} }, { path: 'tprsheet', component: () => import('@/views/inpatientNurse/tprsheet/index.vue'), name: 'TprSheet', meta: {title: '体温单'} }, { path: 'nursingRecord', component: () => import('@/views/inpatientNurse/nursingRecord/index.vue'), name: 'NursingRecord', meta: {title: '护理记录'} } ] }, // 添加套餐管理相关路由到公共路由,确保始终可用 { path: '/maintainSystem/Inspection/PackageManagement', component: Layout, hidden: true, children: [ { path: '', component: () => import('@/views/maintainSystem/Inspection/PackageManagement.vue'), name: 'DirectPackageManagement', meta: {title: '套餐管理'} } ] } ] // 动态路由,基于用户权限动态去加载 export const dynamicRoutes = [ { path: '/system/tenant-user', component: Layout, hidden: true, permissions: ['*:*:*'], children: [ { path: 'set/:tenantId(\\d+)', component: () => import('@/views/system/tenant/setUser'), name: 'SetUser', meta: {title: '所属用户', activeMenu: '/system/tenant'} } ] }, { path: '/system/tenant-contract', component: Layout, hidden: true, permissions: ['*:*:*'], children: [ { path: 'set/:tenantId(\\d+)', component: () => import('@/views/system/tenant/setContract'), name: 'SetContract', meta: {title: '合同管理', activeMenu: '/system/tenant'} } ] }, { path: '/system/user-auth', component: Layout, hidden: true, permissions: ['system:user:edit'], children: [ { path: 'role/:userId(\\d+)', component: () => import('@/views/system/user/authRole'), name: 'AuthRole', meta: {title: '分配角色', activeMenu: '/system/user'} } ] }, { path: '/system/role-auth', component: Layout, hidden: true, permissions: ['system:role:edit'], children: [ { path: 'user/:roleId(\\d+)', component: () => import('@/views/system/role/authUser'), name: 'AuthUser', meta: {title: '分配用户', activeMenu: '/system/role'} } ] }, { path: '/monitor', component: Layout, redirect: '/monitor/operlog', name: 'Monitor', meta: {title: '系统监控', icon: 'monitor'}, children: [ { path: 'operlog', component: () => import('@/views/monitor/operlog/index.vue'), name: 'Operlog', meta: {title: '操作日志', icon: 'operlog', permissions: ['monitor:operlog:list']} }, { path: 'logininfor', component: () => import('@/views/monitor/logininfor/index.vue'), name: 'Logininfor', meta: {title: '登录日志', icon: 'logininfor', permissions: ['monitor:logininfor:list']} }, { path: 'job', component: () => import('@/views/monitor/job/index.vue'), name: 'Job', meta: {title: '定时任务', icon: 'job', permissions: ['monitor:job:list']} } ] }, { path: '/tool', component: Layout, redirect: '/tool/gen', name: 'Tool', meta: {title: '系统工具', icon: 'tool'}, children: [ { path: 'gen', component: () => import('@/views/tool/gen/index.vue'), name: 'Gen', meta: {title: '代码生成', icon: 'gen', permissions: ['tool:gen:list']} } ] }, { path: '/monitor/job-log', component: Layout, hidden: true, permissions: ['monitor:job:list'], children: [ { path: 'index/:jobId(\\d+)', component: () => import('@/views/monitor/job/log'), name: 'JobLog', meta: {title: '调度日志', activeMenu: '/monitor/job'} } ] }, { path: '/tool/gen-edit', component: Layout, hidden: true, permissions: ['tool:gen:edit'], children: [ { path: 'index/:tableId(\\d+)', component: () => import('@/views/tool/gen/editTable'), name: 'GenEdit', meta: {title: '修改生成配置', activeMenu: '/tool/gen'} } ] }, { path: '/help-center', component: Layout, hidden: true, children: [ { path: '', component: () => import('@/views/helpcenter/index.vue'), name: 'HelpCenter', meta: { title: '帮助中心', link: '/help-center/vuepress-theme-vdoing-doc/docs/.vuepress/dist/pages/520e67/index.html' }, }, ], }, { path: '/doctorstation', component: Layout, redirect: '/doctorstation/index', name: 'DoctorStation', meta: {title: '医生工作站', icon: 'operation'}, children: [ { path: 'pending-emr', component: () => import('@/views/doctorstation/pendingEmr.vue'), name: 'PendingEmr', meta: {title: '待写病历', icon: 'document', permissions: ['doctorstation:pending-emr:view']} } ] }, { path: '/features', component: Layout, name: 'Features', meta: {title: '全部功能', icon: 'menu'}, children: [ { path: '', component: () => import('@/views/features/index.vue'), name: 'FeaturesIndex', meta: {title: '功能列表', icon: 'menu'} }, { path: 'config', component: () => import('@/views/features/config.vue'), name: 'FeaturesConfig', meta: {title: '功能配置', icon: 'setting'} } ] }, { path: '/todo', component: Layout, name: 'Todo', meta: {title: '待办事项', icon: 'todo'}, children: [ { path: '', component: () => import('@/views/todo/index.vue'), name: 'TodoIndex', meta: {title: '待办列表', icon: 'todo'} } ] }, { path: '/appoinmentmanage', component: Layout, name: 'AppoinmentManage', meta: {title: '预约管理', icon: 'appointment'}, children: [ { path: 'deptManage', component: () => import('@/views/appoinmentmanage/deptManage/index.vue'), name: 'DeptManage', meta: {title: '科室排班管理', icon: 'calendar'} } ] }, { path: '/clinicmanagement', component: Layout, name: 'ClinicManagement', meta: {title: '门诊管理', icon: 'operation'}, children: [ { path: 'dayEnd', component: () => import('@/views/clinicmanagement/dayEnd/index.vue'), name: 'DayEnd', meta: {title: '门诊日结', icon: 'document'} } ] }, { path: '/consultationmanagement', component: Layout, name: 'ConsultationManagement', meta: {title: '会诊管理', icon: 'operation'}, children: [ { path: 'consultationapplication', component: () => import('@/views/consultationmanagement/consultationapplication/index.vue'), name: 'ConsultationApplication', meta: {title: '门诊会诊申请管理', icon: 'document'} }, { path: 'consultationconfirmation', component: () => import('@/views/consultationmanagement/consultationconfirmation/index.vue'), name: 'ConsultationConfirmation', meta: {title: '门诊会诊申请确认', icon: 'document'} } ] }, { path: '/medicationmanagement', component: Layout, name: 'MedicationManagement', meta: {title: '药房管理', icon: 'medication'}, children: [ { path: 'dayEndSettlement', component: () => import('@/views/medicationmanagement/dayEndSettlement/index.vue'), name: 'DayEndSettlement', meta: {title: '日结结算单管理', icon: 'document'} } ] }, { path: '/inspection', component: Layout, redirect: '/inspection/report', name: 'Inspection', meta: {title: '检查管理', icon: 'inspection'}, children: [ { path: 'report', component: () => import('@/views/inspection/report/index.vue'), name: 'Report', meta: {title: '检查报告', icon: 'document'} }, { path: 'sampleType', component: () => import('@/views/inspection/sampleType/index.vue'), name: 'SampleType', meta: {title: '样本类型', icon: 'sample'} }, { path: 'observation', component: () => import('@/views/inspection/observation/index.vue'), name: 'Observation', meta: {title: '观测记录', icon: 'observation'} }, { path: 'lisconfig', component: () => import('@/views/inspection/lisconfig/index.vue'), name: 'LisConfig', meta: {title: 'LIS 配置', icon: 'setting'} }, { path: 'instrument', component: () => import('@/views/inspection/instrument/index.vue'), name: 'Instrument', meta: {title: '仪器管理', icon: 'instrument'} }, { path: 'groupRec', component: () => import('@/views/inspection/groupRec/index.vue'), name: 'GroupRec', meta: {title: '组合记录', icon: 'group'} }, { path: 'sampleCollection', component: () => import('@/views/inspection/sampleCollection/index.vue'), name: 'SampleCollection', meta: {title: '样本采集', icon: 'collection'} } ] } ]; // 合并常量路由和动态路由,确保所有路由都能被访问 const allRoutes = [...constantRoutes, ...dynamicRoutes]; // 添加404路由到所有路由的最后 allRoutes.push({ path: "/:pathMatch(.*)*", component: () => import('@/views/error/404'), hidden: true }); const router = createRouter({ history: createWebHistory(), routes: allRoutes, scrollBehavior(to, from, savedPosition) { if (savedPosition) { return savedPosition } else { return {top: 0} } }, }); export default router;