import {createRouter, createWebHistory} 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: '/:pathMatch(.*)*', component: () => import('@/views/error/404'), 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' }, }, ], }, { path: '/tpr', component: () => import('@/views/inpatientNurse/tprsheet/index.vue'), } ]; // 动态路由 - 基于用户权限动态加载的路由 export const dynamicRoutes = [ // 基础管理路由 // { // path: '/basicmanage', // component: Layout, // redirect: '/basicmanage/invoice-management', // name: 'BasicManage', // meta: { title: '基础管理', icon: 'component' }, // children: [ // { // path: 'invoice-management', // component: () => import('@/views/basicmanage/InvoiceManagement/index.vue'), // name: 'invoice-management', // meta: { title: '发票管理' } // } // ] // }, // 兼容系统业务管理路径的发票管理路由 // { // path: '/system/ywgz', // component: Layout, // redirect: '/system/ywgz/InvoiceManagement', // hidden: true, // children: [ // { // path: 'InvoiceManagement', // component: () => import('@/views/basicmanage/InvoiceManagement/index.vue'), // name: 'SystemInvoiceManagement', // meta: { title: '发票管理' } // } // ] // }, // 维护系统路由 // { // path: '/maintainSystem', // component: Layout, // redirect: '/maintainSystem/chargeConfig', // name: 'MaintainSystem', // meta: { title: '维护系统', icon: 'system' }, // children: [ // { // path: '', // redirect: 'chargeConfig', // name: 'MaintainSystemIndex' // 添加名称以解决警告 // }, // { // path: 'chargeConfig', // 收费配置路由 // component: () => import('@/views/maintainSystem/chargeConfig/index.vue'), // name: 'ChargeConfig', // meta: { title: '挂号收费系统参数维护', icon: 'config', permissions: ['maintainSystem:chargeConfig:list'] } // }, // { // path: 'Inspection', // 检验管理路由 // component: () => import('@/views/maintainSystem/Inspection/index.vue'), // name: 'Inspection', // meta: { title: '检验管理', icon: 'inspection' }, // children: [ // { // path: 'PackageManagement', // 套餐管理路由 // component: () => import('@/views/maintainSystem/Inspection/PackageManagement.vue'), // name: 'PackageManagement', // meta: { title: '套餐管理' } // } // ] // } // ] // }, // 系统管理路由 // { // path: '/system', // component: Layout, // redirect: '/system/user', // name: 'System', // meta: { title: '系统管理', icon: 'system' }, // children: [ // { // path: 'basicdata', // component: Layout, // redirect: '/system/basicdata/location', // name: 'BasicData', // meta: { title: '基础数据', icon: 'location' }, // children: [ // { // path: 'operatingroom', // component: () => import('@/views/operatingroom/index.vue'), // name: 'OperatingRoomManage', // meta: { title: '手术室管理' } // } // ] // } // ] // }, // 租户用户设置路由 { 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/basicmanage/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/basicmanage/tenant' }, }, ], }, // 预约管理路由 { path: '/appoinmentmanage', component: Layout, redirect: '/appoinmentmanage/deptappthoursManage', name: 'AppoinmentManage', meta: { title: '预约管理', icon: 'appointment' }, children: [ { path: 'deptappthoursManage', component: () => import('@/views/appoinmentmanage/deptappthoursManage/index.vue'), name: 'DeptAppthoursManage', meta: { title: '科室预约工作时间维护', icon: 'appointment' } } ] }, { 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: '/system/dict-data', component: Layout, hidden: true, permissions: ['system:dict:list'], children: [ { path: 'index/:dictId(\\d+)', component: () => import('@/views/system/dict/data'), name: 'Data', meta: { title: '字典数据', activeMenu: '/system/dict' }, }, ], }, { 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: '帮助中心'}, }, ], }, ]; // 合并常量路由和动态路由,确保所有路由都能被访问 const allRoutes = [...constantRoutes, ...dynamicRoutes]; // 添加404路由到所有路由的最后,确保捕获所有未匹配的路由 allRoutes.push({ path: "/:pathMatch(.*)*", component: () => import('@/views/error/404'), hidden: true }); // 创建Vue Router实例 const router = createRouter({ history: createWebHistory(), // 使用HTML5历史模式 routes: allRoutes, // 使用合并后的所有路由 scrollBehavior(to, from, savedPosition) { // 页面滚动行为:如果有保存的位置则恢复,否则滚动到顶部 if (savedPosition) { return savedPosition; } else { return { top: 0 }; } }, }); // 导出路由实例 export default router;