index.js 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084
  1. import Vue from 'vue';
  2. import Router from 'vue-router';
  3. import store from '../store'
  4. import menu from '../menu/menu.js'
  5. import { getToken } from '@/utils/auth'; // get token from cookie
  6. Vue.use(Router);
  7. /* Layout */
  8. import Layout from '@/layout';
  9. import AppMain from '@/layout/components/AppMain.vue';
  10. /**
  11. * Note: sub-menu only appear when route children.length >= 1
  12. * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
  13. *
  14. * hidden: true if set true, item will not show in the sidebar(default is false)
  15. * alwaysShow: true if set true, will always show the root menu
  16. * if not set alwaysShow, when item has more than one children route,
  17. * it will becomes nested mode, otherwise not show the root menu
  18. * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb
  19. * name:'router-name' the name is used by <keep-alive> (must set!!!)
  20. * meta : {
  21. roles: ['admin','editor'] control the page roles (you can set multiple roles)
  22. title: 'title' the name show in sidebar and breadcrumb (recommend set)
  23. icon: 'svg-name'/'el-icon-x' the icon show in the sidebar
  24. breadcrumb: false if set false, the item will hidden in breadcrumb(default is true)
  25. activeMenu: '/example/list' if set path, the sidebar will highlight the path you set
  26. }
  27. */
  28. /**
  29. * constantRoutes
  30. * a base page that does not have permission requirements
  31. * all roles can be accessed
  32. */
  33. export const constantRoutes = [
  34. {
  35. path: '/login',
  36. component: () => import('@/views/login/index'),
  37. hidden: true,
  38. },
  39. {
  40. path: '/404',
  41. component: () => import('@/views/404'),
  42. hidden: true,
  43. },
  44. {
  45. path: '/',
  46. component: Layout,
  47. redirect: '/dashboard',
  48. children: [
  49. {
  50. path: 'dashboard',
  51. name: 'Dashboard',
  52. component: () => import('@/views/dashboard/index'),
  53. meta: {
  54. title: '病案首页质量分析',
  55. icon: 'dashboard',
  56. keepAlive: 1,
  57. canMultipleOpen: true
  58. },
  59. },
  60. //全病历质控
  61. {
  62. path: '/caseNumber',
  63. name: 'caseNumber',
  64. component: () => import('@/views/allcase/caseNumber'),
  65. hidden: true, //不在导航栏展示
  66. meta: {
  67. title: '病案数量',
  68. keepAlive: 1,
  69. canMultipleOpen: true
  70. },
  71. },
  72. {
  73. path: '/defectNumber',
  74. name: 'defectNumber',
  75. component: () => import('@/views/allcase/defectNumber'),
  76. hidden: true,//不在导航栏展示
  77. meta: {
  78. title: '缺陷病案',
  79. keepAlive: 0,
  80. canMultipleOpen: true
  81. },
  82. },
  83. {
  84. path: '/homePage',
  85. name: 'homePage',
  86. component: () => import('@/views/allcase/homePage'),
  87. hidden: true,//不在导航栏展示
  88. meta: {
  89. title: '出院记录',
  90. keepAlive: 0,
  91. canMultipleOpen: true //支持根据参数不同多开不同页签,如果你需要/a跟/a?v=123都分别打开两个页签,请设置为true,否则就只会显示一个页签,后打开的会替换到前打开的页签
  92. },
  93. },
  94. {
  95. path: '/search',
  96. name: 'Search',
  97. component: () => import('@/views/search/index'),
  98. hidden: true,//不在导航栏展示
  99. meta: {
  100. title: '住院病历查询',
  101. keepAlive: 1,
  102. canMultipleOpen: true
  103. },
  104. },
  105. {
  106. path: '/caseViews',
  107. name: 'caseViews',
  108. component: () => import('@/views/allcase/caseViews'),
  109. hidden: true,//不在导航栏展示
  110. meta: {
  111. title: '病案详情',
  112. keepAlive: 0,
  113. canMultipleOpen: true
  114. },
  115. },
  116. //首页数据质控
  117. {
  118. path: '/defectList',
  119. name: 'defectList',
  120. component: () => import('@/views/data/medicalRecords/defectList'),
  121. hidden: true,//不在导航栏展示
  122. meta: {
  123. title: '质量分析缺陷病案',
  124. keepAlive: 1,
  125. canMultipleOpen: true
  126. }
  127. },
  128. {
  129. path: '/medicalRecords',
  130. name: 'medicalRecords',
  131. component: () => import('@/views/data/medicalRecords'),
  132. hidden: true, //不在导航栏展示
  133. meta: {
  134. title: '质量分析病案数量',
  135. keepAlive: 1,
  136. canMultipleOpen: true
  137. }
  138. },
  139. {
  140. path: '/errorList',
  141. name: 'errorList',
  142. component: () => import('@/views/data/medicalRecords/errorList'),
  143. hidden: true, //不在导航栏展示
  144. meta: {
  145. title: '病案数',
  146. keepAlive: 1,
  147. canMultipleOpen: true
  148. }
  149. },
  150. {
  151. path: '/department',
  152. name: 'department',
  153. component: () => import('@/views/data/medicalRecords/department'),
  154. hidden: true, //不在导航栏展示
  155. meta: {
  156. title: '总缺陷',
  157. keepAlive: 1,
  158. canMultipleOpen: true
  159. }
  160. },
  161. {
  162. path: '/TotalRankingList',
  163. name: 'TotalRankingList',
  164. component: () => import('@/views/data/frontHome/TotalRankingList'),
  165. hidden: true, //不在导航栏展示
  166. meta: {
  167. title: '总排名',
  168. keepAlive: 1,
  169. canMultipleOpen: true
  170. },
  171. },
  172. {
  173. path: '/defectProblem',
  174. name: 'DefectProblem',
  175. component: () => import('@/views/data/frontHome/defectProblem'),
  176. hidden: true, //不在导航栏展示
  177. meta: {
  178. title: '缺陷问题',
  179. keepAlive: 1,
  180. canMultipleOpen: true
  181. },
  182. },
  183. {
  184. path: '/defectRuleProblem',
  185. name: 'DefectRuleProblem',
  186. component: () => import('@/views/data/frontHome/defectRuleProblem'),
  187. hidden: true, //不在导航栏展示
  188. meta: {
  189. title: '缺陷问题详情',
  190. keepAlive: 0,
  191. canMultipleOpen: true
  192. },
  193. },
  194. {
  195. path: '/defectProblemList',
  196. name: 'DefectProblemList',
  197. component: () => import('@/views/data/frontHome/defectProblemList'),
  198. hidden: true, //不在导航栏展示
  199. meta: {
  200. title: '缺陷问题列表',
  201. keepAlive: 1,
  202. canMultipleOpen: true
  203. },
  204. },
  205. {
  206. path: '/data/front',
  207. name: 'Fornt',
  208. component: () => import('@/views/data/frontHome/index'),
  209. hidden: true, //不在导航栏展示
  210. meta: {
  211. title: '首页质控(病案室)',
  212. keepAlive: 1,
  213. canMultipleOpen: true
  214. },
  215. },
  216. {
  217. path: '/codeList',
  218. name: 'codeList',
  219. component: () => import('@/views/data/medicalRecords/codeList'),
  220. hidden: true, //不在导航栏展示
  221. meta: {
  222. title: '编码员',
  223. keepAlive: 1,
  224. canMultipleOpen: true
  225. }
  226. },
  227. {
  228. path: '/details',
  229. name: 'details',
  230. component: () => import('@/views/data/query/details'),
  231. hidden: true, //不在导航栏展示
  232. meta: {
  233. title: '病案首页质控详情',
  234. keepAlive: 0,
  235. canMultipleOpen: true
  236. }
  237. },
  238. {
  239. path: '/forewarning',
  240. name: 'forewarning',
  241. component: () => import('@/views/forewarning/index'),
  242. hidden: true, //不在导航栏展示
  243. meta: {
  244. title: '预警信息查询',
  245. keepAlive: 1,
  246. canMultipleOpen: true
  247. },
  248. },
  249. {
  250. path: '/ChargeDetails',
  251. name: 'ChargeDetails',
  252. hidden: true, //不在导航栏展示
  253. component: () => import('@/views/data/query/ChargeDetails'),
  254. meta: {
  255. title: '费用明细',
  256. keepAlive: 0,
  257. canMultipleOpen: true
  258. }
  259. },
  260. {
  261. path: '/StatementList',
  262. name: 'StatementList',
  263. component: () => import('@/views/SettlementList/StatementList'),
  264. hidden: true,//不在导航栏展示
  265. meta: {
  266. title: '结算清单数量',
  267. keepAlive: 0,
  268. canMultipleOpen: true
  269. }
  270. },
  271. // 医保结算清单
  272. {
  273. path: '/SetDetails',
  274. name: 'SetDetails',
  275. component: () => import('@/views/SettlementList/SetDetails'),
  276. hidden: true,//不在导航栏展示
  277. meta: {
  278. title: '医保结算单病案数量',
  279. keepAlive: 0,
  280. canMultipleOpen: true
  281. }
  282. },
  283. {
  284. path: '/StatementListquery',
  285. name: 'StatementListquery',
  286. component: () => import('@/views/SettlementList/StatementListquery'),
  287. hidden: true,//不在导航栏展示
  288. meta: {
  289. title: '医保结算单病案数量',
  290. keepAlive: 1,
  291. canMultipleOpen: true
  292. }
  293. },
  294. {
  295. path: '/defectStatementList',
  296. name: 'defectStatementList',
  297. hidden: true,//不在导航栏展示
  298. component: () => import('@/views/SettlementList/defectStatementList'),
  299. meta: {
  300. title: '缺陷结算清单数量',
  301. keepAlive: 1,
  302. canMultipleOpen: true
  303. }
  304. },
  305. {
  306. path: '/otherStatisticsData',
  307. name: 'OtherStatisticsData',
  308. component: () => import('@/views/otherStatisticsData/index'),
  309. hidden: true,
  310. meta: {
  311. title: '其他统计数据',
  312. keepAlive: 1,
  313. canMultipleOpen: true
  314. },
  315. },
  316. {
  317. path: '/otherStatisticsList',
  318. name: 'OtherStatisticsList',
  319. component: () => import('@/views/otherStatisticsData/list'),
  320. hidden: true,
  321. meta: {
  322. title: '其他统计数据详情',
  323. keepAlive: 1,
  324. canMultipleOpen: true
  325. },
  326. },
  327. {
  328. path: '/majorIndex',
  329. name: 'majorIndex',
  330. component: () => import('@/views/allcase/majorIndex'),
  331. hidden: true,
  332. meta: {
  333. title: '重点专业指标',
  334. keepAlive: 0,
  335. canMultipleOpen: true
  336. },
  337. },
  338. {
  339. path: '/majorIndexDetail',
  340. name: 'majorIndexDetail',
  341. component: () => import('@/views/allcase/majorIndexDetail'),
  342. hidden: true,
  343. meta: {
  344. title: '重点专业指标详情',
  345. keepAlive: 0,
  346. canMultipleOpen: true
  347. },
  348. },
  349. {
  350. path: '/caseIndex',
  351. name: 'caseIndex',
  352. component: () => import('@/views/allcase/caseIndex'),
  353. hidden: true,
  354. meta: {
  355. title: '重点专业质量控制指标',
  356. keepAlive: 1,
  357. canMultipleOpen: true
  358. },
  359. },
  360. {
  361. path: '/caseIndexList',
  362. name: 'caseIndexList',
  363. component: () => import('@/views/allcase/caseIndexList'),
  364. hidden: true,
  365. meta: {
  366. title: '重点专业质量控制指标列表',
  367. keepAlive: 1,
  368. canMultipleOpen: true
  369. },
  370. },
  371. {
  372. path: '/caseIndexAnalysis',
  373. name: 'CaseIndexAnalysis',
  374. component: () => import('@/views/allcase/caseIndexAnalysis'),
  375. hidden: true,
  376. meta: {
  377. title: '评审评价指标分析',
  378. keepAlive: 1,
  379. canMultipleOpen: true
  380. },
  381. },
  382. {
  383. path: '/caseIndexAnalysisList',
  384. name: 'CaseIndexAnalysisList',
  385. component: () => import('@/views/allcase/caseIndexAnalysisList'),
  386. hidden: true,
  387. meta: {
  388. title: '评审评价指标分析-科室病案',
  389. keepAlive: 1,
  390. canMultipleOpen: true
  391. }
  392. },
  393. {
  394. path: '/searchSystem',
  395. name: 'SearchSystem',
  396. component: () => import('@/views/searchSystem/index'),
  397. hidden: true,
  398. meta: {
  399. title: '医院大数据自助查询系统',
  400. icon: 'dashboard',
  401. keepAlive: 1,
  402. canMultipleOpen: true
  403. },
  404. },
  405. {
  406. path: '/outpatientCase',
  407. name: 'OutpatientCase',
  408. component: () => import('@/views/outpatient/case'),
  409. hidden: true,
  410. meta: {
  411. title: '门诊病历查询',
  412. keepAlive: 1,
  413. canMultipleOpen: true
  414. },
  415. },
  416. {
  417. path: '/outpatientControl',
  418. name: 'OutpatientControl',
  419. component: () => import('@/views/outpatient/control'),
  420. meta: {
  421. title: '门诊病历质控',
  422. keepAlive: 1,
  423. canMultipleOpen: true
  424. },
  425. hidden: true,
  426. },
  427. {
  428. path: '/outpatientMedicalRecordDefectNumber',
  429. name: 'OutpatientMedicalRecordDefectNumber',
  430. component: () => import('@/views/outpatient/control/defectNumber'),
  431. meta: {
  432. title: '门诊病历',
  433. keepAlive: 1,
  434. canMultipleOpen: true
  435. },
  436. hidden: true,
  437. },
  438. {
  439. path: '/outpatientMedicalShouldDefectNumber',
  440. name: 'OutpatientMedicalShouldDefectNumber',
  441. component: () => import('@/views/outpatient/control/shouldDefectNumber'),
  442. meta: {
  443. title: '门诊应有病历',
  444. keepAlive: 1,
  445. canMultipleOpen: true
  446. },
  447. hidden: true,
  448. },
  449. {
  450. path: '/outpatientMedicalRecordDetail',
  451. name: 'OutpatientMedicalRecordDetail',
  452. component: () => import('@/views/outpatient/control/detail'),
  453. meta: {
  454. title: '门诊病历详情',
  455. keepAlive: 0,
  456. canMultipleOpen: true
  457. },
  458. hidden: true,
  459. },
  460. {
  461. path: '/reviewIndicators',
  462. name: 'reviewIndicators',
  463. component: () => import('@/views/allcase/reviewIndicators.vue'),
  464. hidden: true,
  465. meta: {
  466. title: '评审指标',
  467. keepAlive: 1,
  468. canMultipleOpen: true
  469. },
  470. },
  471. {
  472. path: '/reviewIndicatorsList',
  473. name: 'reviewIndicatorsList',
  474. component: () => import('@/views/allcase/reviewIndicatorsList.vue'),
  475. hidden: true,
  476. meta: {
  477. title: '指标列表',
  478. keepAlive: 1,
  479. },
  480. },
  481. {
  482. path: '/yypsIndexAnalysis',
  483. name: 'YypsIndexAnalysis',
  484. component: () => import('@/views/yyps/analysis/index.vue'),
  485. hidden: true,
  486. meta: {
  487. title: '指标分析',
  488. keepAlive: 1,
  489. canMultipleOpen: true
  490. },
  491. },
  492. {
  493. path: '/yypsIndexAnalysisList',
  494. name: 'YypsIndexAnalysisList',
  495. component: () => import('@/views/yyps/analysis/list.vue'),
  496. hidden: true,
  497. meta: {
  498. title: '指标分析-科室病案',
  499. keepAlive: 1,
  500. canMultipleOpen: true
  501. },
  502. },
  503. {
  504. path: '/yypsIndex',
  505. name: 'yypsIndex',
  506. component: () => import('@/views/yyps/index/index.vue'),
  507. hidden: true,
  508. meta: {
  509. title: '评审指标',
  510. keepAlive: 1,
  511. canMultipleOpen: true
  512. },
  513. },
  514. {
  515. path: '/middleCaseNumber',
  516. name: 'MiddleCaseNumber',
  517. component: () => import('@/views/middleCaseControl/caseNumber'),
  518. hidden: true, //不在导航栏展示
  519. meta: {
  520. title: '病案数量',
  521. keepAlive: 1,
  522. canMultipleOpen: true
  523. },
  524. },
  525. {
  526. path: '/middleDefectNumber',
  527. name: 'MiddleDefectNumber',
  528. component: () => import('@/views/middleCaseControl/defectNumber'),
  529. hidden: true,//不在导航栏展示
  530. meta: {
  531. title: '缺陷病案',
  532. keepAlive: 1,
  533. canMultipleOpen: true
  534. },
  535. },
  536. {
  537. path: '/encoder/errors',
  538. name: 'EncoderErrors',
  539. component: () => import('@/views/encoder/errors'),
  540. hidden: true,//不在导航栏展示
  541. meta: {
  542. title: '编码员缺陷病案',
  543. keepAlive: 1,
  544. canMultipleOpen: true
  545. },
  546. },
  547. {
  548. path: '/doctor/bl',
  549. name: 'DoctorBl',
  550. component: () => import('@/views/encoder/doctorBl'),
  551. hidden: true,//不在导航栏展示
  552. meta: {
  553. title: '医生病历总数',
  554. keepAlive: 1,
  555. canMultipleOpen: true
  556. },
  557. },
  558. {
  559. path: '/doctor/blkf',
  560. name: 'DoctorBlKf',
  561. component: () => import('@/views/encoder/doctorBlKf'),
  562. hidden: true,//不在导航栏展示
  563. meta: {
  564. title: '医生病历扣分',
  565. keepAlive: 1,
  566. canMultipleOpen: true
  567. },
  568. },
  569. {
  570. path: '/medicalRecordNew',
  571. name: 'MedicalRecordNew',
  572. component: () => import('@/views/medicalRecord/index'),
  573. hidden: true,//不在导航栏展示
  574. meta: {
  575. title: '病案详情',
  576. keepAlive: 1,
  577. canMultipleOpen: true
  578. },
  579. },
  580. {
  581. path: '/cost',
  582. name: 'Cost',
  583. component: () => import('@/views/medicalRecord/cost'),
  584. hidden: true,//不在导航栏展示
  585. meta: {
  586. title: '费用详情',
  587. keepAlive: 1,
  588. canMultipleOpen: true
  589. },
  590. },
  591. {
  592. path: '/evaluateIndex',
  593. name: 'EvaluateIndex',
  594. component: () => import('@/views/evaluate/index/index'),
  595. hidden: true,//不在导航栏展示
  596. meta: {
  597. title: '评审评价指标',
  598. keepAlive: 1,
  599. canMultipleOpen: true
  600. },
  601. },
  602. ],
  603. },
  604. // 医院大数据自助查询系统
  605. {
  606. path: '/hospital',
  607. component: AppMain,
  608. redirect: '/hospital-search',
  609. children: [
  610. {
  611. path: '/hospital-search',
  612. name: 'HospitalSearch',
  613. component: () => import('@/views/searchSystem/index'),
  614. meta: {
  615. keepAlive: 1,
  616. canMultipleOpen: true,
  617. nocopy: true
  618. },
  619. hidden: true
  620. },
  621. {
  622. path: '/hospital-caseViews',
  623. name: 'HospitalCaseViews',
  624. component: () => import('@/views/allcase/caseViews'),
  625. meta: {
  626. keepAlive: 0,
  627. canMultipleOpen: true,
  628. nocopy: true
  629. },
  630. hidden: true
  631. },
  632. {
  633. path: '/hospital-details',
  634. name: 'HospitalDetails',
  635. component: () => import('@/views/data/query/details'),
  636. meta: {
  637. keepAlive: 0,
  638. canMultipleOpen: true,
  639. nocopy: true
  640. },
  641. hidden: true
  642. },
  643. {
  644. path: '/hospital-chargeDetails',
  645. name: 'HospitalChargeDetails',
  646. hidden: true,
  647. component: () => import('@/views/data/query/ChargeDetails'),
  648. meta: {
  649. keepAlive: 0,
  650. canMultipleOpen: true,
  651. nocopy: true
  652. },
  653. },
  654. ]
  655. },
  656. {
  657. path: '/embedIndex',
  658. component: AppMain,
  659. redirect: '/embedIndex-home',
  660. children: [
  661. {
  662. path: '/embedIndex-home',
  663. name: 'EmbedIndexHome',
  664. component: () => import('@/views/embedIndex/index'),
  665. meta: {
  666. keepAlive: 1,
  667. canMultipleOpen: true,
  668. nocopy: true
  669. },
  670. hidden: true
  671. },
  672. {
  673. path: '/embedIndex-caseIndexAnalysisList',
  674. name: 'EmbedIndexCaseIndexAnalysisList',
  675. component: () => import('@/views/allcase/caseIndexAnalysisList'),
  676. hidden: true,
  677. meta: {
  678. keepAlive: 1,
  679. canMultipleOpen: true,
  680. nocopy: true
  681. },
  682. },
  683. {
  684. path: '/embedIndex-caseIndexList',
  685. name: 'EmbedIndexCaseIndexList',
  686. component: () => import('@/views/allcase/caseIndexList'),
  687. hidden: true,
  688. meta: {
  689. keepAlive: 1,
  690. canMultipleOpen: true,
  691. nocopy: true
  692. },
  693. },
  694. {
  695. path: '/embedIndex-caseViews',
  696. name: 'EmbedIndexCaseViews',
  697. component: () => import('@/views/allcase/caseViews'),
  698. hidden: true,
  699. meta: {
  700. keepAlive: 0,
  701. canMultipleOpen: true,
  702. nocopy: true
  703. },
  704. },
  705. {
  706. path: '/embedIndex-chargeDetails',
  707. name: 'EmbedIndexChargeDetails',
  708. hidden: true,
  709. meta: {
  710. keepAlive: 0,
  711. canMultipleOpen: true,
  712. nocopy: true
  713. },
  714. component: () => import('@/views/data/query/ChargeDetails')
  715. }
  716. ]
  717. },
  718. {
  719. path: '/reviewIndex',
  720. component: AppMain,
  721. redirect: '/reviewIndex-home',
  722. children: [
  723. {
  724. path: '/reviewIndex-home',
  725. name: 'ReviewIndex',
  726. component: () => import('@/views/reviewIndex/index'),
  727. meta: {
  728. keepAlive: 1,
  729. canMultipleOpen: true,
  730. nocopy: true
  731. },
  732. hidden: true
  733. },
  734. {
  735. path: '/reviewIndex-caseIndexList',
  736. name: 'ReviewIndexCaseIndexList',
  737. component: () => import('@/views/allcase/caseIndexList'),
  738. hidden: true,
  739. meta: {
  740. keepAlive: 1,
  741. canMultipleOpen: true,
  742. nocopy: true
  743. },
  744. },
  745. {
  746. path: '/reviewIndex-caseViews',
  747. name: 'ReviewIndexCaseViews',
  748. component: () => import('@/views/allcase/caseViews'),
  749. hidden: true,
  750. meta: {
  751. keepAlive: 0,
  752. canMultipleOpen: true,
  753. nocopy: true
  754. },
  755. },
  756. {
  757. path: '/reviewIndex-yypsIndexAnalysisList',
  758. name: 'ReviewYypsIndexAnalysisList',
  759. component: () => import('@/views/yyps/analysis/list.vue'),
  760. hidden: true,
  761. meta: {
  762. title: '指标分析-科室病案',
  763. keepAlive: 1,
  764. canMultipleOpen: true,
  765. nocopy: true
  766. },
  767. },
  768. {
  769. path: '/reviewIndex-chargeDetails',
  770. name: 'ReviewIndexChargeDetails',
  771. hidden: true,
  772. component: () => import('@/views/data/query/ChargeDetails'),
  773. meta: {
  774. keepAlive: 0,
  775. canMultipleOpen: true,
  776. nocopy: true
  777. },
  778. }
  779. ]
  780. },
  781. // {
  782. // path: '/login',
  783. // component: Layout,
  784. // redirect: '/login',
  785. // keepAlive: 1,
  786. // canMultipleOpen: true,
  787. // meta: { title: '病案分析' },
  788. // children: [
  789. // {
  790. // path: 'login',
  791. // name: 'login',
  792. // component: () => import('@/views/caseAnalysis/login.vue'),
  793. // meta: { title: '病案分析' }
  794. // },
  795. // ]
  796. // },
  797. // {
  798. // path: '/caseAnalysis',
  799. // component: Layout,
  800. // redirect: '/caseAnalysis',
  801. // keepAlive: 1,
  802. // canMultipleOpen: true,
  803. // meta: { title: '病案分析' },
  804. // children: [
  805. // {
  806. // path: 'caseAnalysis',
  807. // name: 'caseAnalysis',
  808. // component: () => import('@/views/caseAnalysis/caseAnalysis.vue'),
  809. // meta: { title: '病案分析' }
  810. // },
  811. //
  812. // ]
  813. // },
  814. {
  815. path: '/whitelist',
  816. component: AppMain,
  817. redirect: '/whitelist-search',
  818. children: [
  819. {
  820. path: '/whitelist-search-specialty',
  821. name: 'WhitelistSearchSpecialty',
  822. component: () => import('@/views/search/index'),
  823. meta: {
  824. keepAlive: 1,
  825. canMultipleOpen: true,
  826. nocopy: true
  827. },
  828. hidden: true
  829. },
  830. {
  831. path: '/whitelist-search',
  832. name: 'WhitelistSearch',
  833. component: () => import('@/views/searchSystem/index'),
  834. meta: {
  835. keepAlive: 1,
  836. canMultipleOpen: true,
  837. nocopy: true
  838. },
  839. hidden: true
  840. },
  841. {
  842. path: '/whitelist-caseViews',
  843. name: 'WhitelistCaseViews',
  844. component: () => import('@/views/allcase/caseViews'),
  845. hidden: true,
  846. meta: {
  847. keepAlive: 0,
  848. canMultipleOpen: true,
  849. nocopy: true
  850. },
  851. },
  852. {
  853. path: '/whitelist-chargeDetails',
  854. name: 'WhitelistChargeDetails',
  855. hidden: true,
  856. meta: {
  857. keepAlive: 0,
  858. canMultipleOpen: true,
  859. nocopy: true
  860. },
  861. component: () => import('@/views/data/query/ChargeDetails')
  862. },
  863. {
  864. path: '/whitelist-details',
  865. name: 'WhitelistDetails',
  866. component: () => import('@/views/data/query/details'),
  867. hidden: true,
  868. meta: {
  869. keepAlive: 0,
  870. canMultipleOpen: true,
  871. nocopy: true
  872. },
  873. },
  874. {
  875. path: '/whitelist-outpatientMedicalRecordDetail',
  876. name: 'WhitelistOutpatientMedicalRecordDetail',
  877. component: () => import('@/views/outpatient/control/detail'),
  878. hidden: true,
  879. meta: {
  880. keepAlive: 0,
  881. canMultipleOpen: true,
  882. nocopy: true
  883. },
  884. },
  885. {
  886. path: '/whitelist-caseControl',
  887. name: 'WhitelistCaseControl',
  888. component: () => import('@/views/allcase/caseControl'),
  889. hidden: true,
  890. meta: {
  891. keepAlive: 1,
  892. canMultipleOpen: true,
  893. nocopy: true,
  894. nocrumb: true, // 不展示多页签tab栏
  895. },
  896. },
  897. {
  898. path: '/whitelist-qualityResults',
  899. name: 'WhitelistQualityResults',
  900. component: () => import('@/views/data/query/qualityResults'),
  901. hidden: true,
  902. meta: {
  903. keepAlive: 0,
  904. canMultipleOpen: true,
  905. nocopy: true,
  906. nocrumb: true, // 不展示多页签tab栏
  907. },
  908. },
  909. {
  910. path: '/whitelist-bmyQualityResult',
  911. name: 'WhitelistBmyQualityResult',
  912. component: () => import('@/views/data/query/bmyQualityResult'),
  913. hidden: true,
  914. meta: {
  915. keepAlive: 0,
  916. canMultipleOpen: true,
  917. nocopy: true,
  918. nocrumb: true, // 不展示多页签tab栏
  919. },
  920. },
  921. ]
  922. },
  923. {
  924. path: '/ccyxy',
  925. redirect: '/ccyxy/index',
  926. component: AppMain,
  927. children: [
  928. {
  929. path: 'index',
  930. name: 'CcyxyIndex',
  931. component: () => import('@/views/changchun/index'),
  932. meta: {
  933. keepAlive: 1,
  934. canMultipleOpen: false,
  935. nocopy: true,
  936. // nocrumb: true
  937. },
  938. hidden: true
  939. },
  940. {
  941. path: 'defectNumber',
  942. name: 'CcyxyDefectNumber',
  943. component: () => import('@/views/changchun/defectNumber'),
  944. hidden: true,
  945. meta: {
  946. title: '缺陷病案',
  947. keepAlive: 0,
  948. canMultipleOpen: true,
  949. // nocrumb: true
  950. },
  951. },
  952. {
  953. path: 'caseViews',
  954. name: 'CcyxyCaseViews',
  955. component: () => import('@/views/allcase/caseViews'),
  956. hidden: true,
  957. meta: {
  958. keepAlive: 0,
  959. canMultipleOpen: true,
  960. nocopy: true,
  961. // nocrumb: true
  962. },
  963. },
  964. {
  965. path: '/test',
  966. name: 'test',
  967. component: () => import('@/views/test/test.vue'),
  968. hidden: true,
  969. meta: {
  970. title: '测试',
  971. keepAlive: 1,
  972. canMultipleOpen: true
  973. },
  974. }
  975. ]
  976. }
  977. ];
  978. const createRouter = () =>
  979. new Router({
  980. // mode: 'history', // require service support
  981. scrollBehavior: () => ({ y: 0 }),
  982. routes: constantRoutes,
  983. });
  984. const router = createRouter();
  985. const whiteList = [
  986. '/login',
  987. '/defectProblemList',
  988. '/404',
  989. '/whitelist-search',
  990. '/whitelist-caseViews',
  991. '/whitelist-chargeDetails',
  992. '/whitelist-details',
  993. '/whitelist-caseControl',
  994. '/whitelist-qualityResults',
  995. '/whitelist-bmyQualityResult',
  996. '/whitelist-outpatientMedicalRecordDetail',
  997. '/ccyxy/index',
  998. '/ccyxy/defectNumber',
  999. '/ccyxy/caseViews'
  1000. ]; // 添加路由白名单
  1001. //路由判断
  1002. router.beforeEach(async (to,
  1003. from, next) => {
  1004. const hasToken = getToken();
  1005. if (hasToken) {
  1006. if (!store.state.user.menu.length) {
  1007. // 判断当前用户是否已拉取完权限菜单信息
  1008. // 如果本地不存在权限菜单,则获取权限菜单,生成菜单列表
  1009. if (!sessionStorage.getItem("route")) {
  1010. //获取路由菜单
  1011. menu.getMenu().then(response => {
  1012. //保险起见,组装一次数据
  1013. menu.parseRoute(JSON.parse(sessionStorage.getItem("route")), []).then(res => {
  1014. //添加路由并进行跳转
  1015. menu.addMenu(res).then(e => {
  1016. next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
  1017. })
  1018. })
  1019. }).catch(err => {//失败则直接跳转登录页面
  1020. next(`/login`);
  1021. })
  1022. } else {//从缓存中读取用户权限列表,并添加菜单到侧边栏和路由元
  1023. menu.parseRoute(JSON.parse(sessionStorage.getItem("route")), []).then(res => {
  1024. menu.addMenu(res).then(e => {
  1025. next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
  1026. })
  1027. })
  1028. }
  1029. } else {
  1030. // 有路由表直接放行
  1031. next();
  1032. }
  1033. } else {
  1034. if (whiteList.indexOf(to.path) !== -1) {
  1035. // 在白名单内直接放行
  1036. next();
  1037. } else {
  1038. // 其他没有访问权限的页面将被重定向到登录页面。
  1039. next(`/login`);
  1040. }
  1041. }
  1042. if (to.path == from.path) {
  1043. // 让 列表页 即不缓存,刷新
  1044. to.meta.keepAlive = false;
  1045. }
  1046. if (to.path == '/allcase/index' || to.path == '/encoder/index' || to.path == '/qc/index') {
  1047. to.meta.keepAlive = true;
  1048. }
  1049. console.log('=============', to.path == '/qc/caseViews' && to.query && to.query.from == 'review')
  1050. if(to.path == '/qc/caseViews') {
  1051. if(to.query && to.query.from == 'review') {
  1052. to.meta.title = '申诉详情';
  1053. } else {
  1054. to.meta.title = '质控详情';
  1055. }
  1056. }
  1057. next()
  1058. })
  1059. // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
  1060. export function resetRouter() {
  1061. const newRouter = createRouter();
  1062. router.matcher = newRouter.matcher; // reset router
  1063. }
  1064. export default router;