index.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858
  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: 1,
  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: '/codeList',
  196. name: 'codeList',
  197. component: () => import('@/views/data/medicalRecords/codeList'),
  198. hidden: true, //不在导航栏展示
  199. meta: {
  200. title: '编码员',
  201. keepAlive: 1,
  202. canMultipleOpen: true
  203. }
  204. },
  205. {
  206. path: '/details',
  207. name: 'details',
  208. component: () => import('@/views/data/query/details'),
  209. hidden: true, //不在导航栏展示
  210. meta: {
  211. title: '病案首页质控详情',
  212. keepAlive: 0,
  213. canMultipleOpen: true
  214. }
  215. },
  216. {
  217. path: '/ChargeDetails',
  218. name: 'ChargeDetails',
  219. hidden: true, //不在导航栏展示
  220. component: () => import('@/views/data/query/ChargeDetails'),
  221. meta: {
  222. title: '费用明细',
  223. keepAlive: 0,
  224. canMultipleOpen: true
  225. }
  226. },
  227. {
  228. path: '/StatementList',
  229. name: 'StatementList',
  230. component: () => import('@/views/SettlementList/StatementList'),
  231. hidden: true,//不在导航栏展示
  232. meta: {
  233. title: '结算清单数量',
  234. keepAlive: 0,
  235. canMultipleOpen: true
  236. }
  237. },
  238. // 医保结算清单
  239. {
  240. path: '/SetDetails',
  241. name: 'SetDetails',
  242. component: () => import('@/views/SettlementList/SetDetails'),
  243. hidden: true,//不在导航栏展示
  244. meta: {
  245. title: '医保结算单病案数量',
  246. keepAlive: 0,
  247. canMultipleOpen: true
  248. }
  249. },
  250. {
  251. path: '/StatementListquery',
  252. name: 'StatementListquery',
  253. component: () => import('@/views/SettlementList/StatementListquery'),
  254. hidden: true,//不在导航栏展示
  255. meta: {
  256. title: '医保结算单病案数量',
  257. keepAlive: 1,
  258. canMultipleOpen: true
  259. }
  260. },
  261. {
  262. path: '/defectStatementList',
  263. name: 'defectStatementList',
  264. hidden: true,//不在导航栏展示
  265. component: () => import('@/views/SettlementList/defectStatementList'),
  266. meta: {
  267. title: '缺陷结算清单数量',
  268. keepAlive: 1,
  269. canMultipleOpen: true
  270. }
  271. },
  272. {
  273. path: '/otherStatisticsData',
  274. name: 'OtherStatisticsData',
  275. component: () => import('@/views/otherStatisticsData/index'),
  276. hidden: true,
  277. meta: {
  278. title: '其他统计数据',
  279. keepAlive: 1,
  280. canMultipleOpen: true
  281. },
  282. },
  283. {
  284. path: '/otherStatisticsList',
  285. name: 'OtherStatisticsList',
  286. component: () => import('@/views/otherStatisticsData/list'),
  287. hidden: true,
  288. meta: {
  289. title: '其他统计数据详情',
  290. keepAlive: 1,
  291. canMultipleOpen: true
  292. },
  293. },
  294. {
  295. path: '/caseIndex',
  296. name: 'caseIndex',
  297. component: () => import('@/views/allcase/caseIndex'),
  298. hidden: true,
  299. meta: {
  300. title: '重点专业质量控制指标',
  301. keepAlive: 1,
  302. canMultipleOpen: true
  303. },
  304. },
  305. {
  306. path: '/caseIndexList',
  307. name: 'caseIndexList',
  308. component: () => import('@/views/allcase/caseIndexList'),
  309. hidden: true,
  310. meta: {
  311. title: '重点专业质量控制指标列表',
  312. keepAlive: 1,
  313. canMultipleOpen: true
  314. },
  315. },
  316. {
  317. path: '/caseIndexAnalysis',
  318. name: 'CaseIndexAnalysis',
  319. component: () => import('@/views/allcase/caseIndexAnalysis'),
  320. hidden: true,
  321. meta: {
  322. title: '评审评价指标分析',
  323. keepAlive: 1,
  324. canMultipleOpen: true
  325. },
  326. },
  327. {
  328. path: '/caseIndexAnalysisList',
  329. name: 'CaseIndexAnalysisList',
  330. component: () => import('@/views/allcase/caseIndexAnalysisList'),
  331. hidden: true,
  332. meta: {
  333. title: '评审评价指标分析-科室病案',
  334. keepAlive: 1,
  335. canMultipleOpen: true
  336. }
  337. },
  338. {
  339. path: '/searchSystem',
  340. name: 'SearchSystem',
  341. component: () => import('@/views/searchSystem/index'),
  342. hidden: true,
  343. meta: {
  344. title: '医院大数据自助查询系统',
  345. icon: 'dashboard',
  346. keepAlive: 1,
  347. canMultipleOpen: true
  348. },
  349. },
  350. {
  351. path: '/outpatientCase',
  352. name: 'OutpatientCase',
  353. component: () => import('@/views/outpatient/case'),
  354. hidden: true,
  355. meta: {
  356. title: '门诊病历查询',
  357. keepAlive: 1,
  358. canMultipleOpen: true
  359. },
  360. },
  361. {
  362. path: '/outpatientControl',
  363. name: 'OutpatientControl',
  364. component: () => import('@/views/outpatient/control'),
  365. meta: {
  366. title: '门诊病历质控',
  367. keepAlive: 1,
  368. canMultipleOpen: true
  369. },
  370. hidden: true,
  371. },
  372. {
  373. path: '/outpatientMedicalRecordDefectNumber',
  374. name: 'OutpatientMedicalRecordDefectNumber',
  375. component: () => import('@/views/outpatient/control/defectNumber'),
  376. meta: {
  377. title: '门诊病历',
  378. keepAlive: 1,
  379. canMultipleOpen: true
  380. },
  381. hidden: true,
  382. },
  383. {
  384. path: '/outpatientMedicalShouldDefectNumber',
  385. name: 'OutpatientMedicalShouldDefectNumber',
  386. component: () => import('@/views/outpatient/control/shouldDefectNumber'),
  387. meta: {
  388. title: '门诊应有病历',
  389. keepAlive: 1,
  390. canMultipleOpen: true
  391. },
  392. hidden: true,
  393. },
  394. {
  395. path: '/outpatientMedicalRecordDetail',
  396. name: 'OutpatientMedicalRecordDetail',
  397. component: () => import('@/views/outpatient/control/detail'),
  398. meta: {
  399. title: '门诊病历详情',
  400. keepAlive: 0,
  401. canMultipleOpen: true
  402. },
  403. hidden: true,
  404. },
  405. {
  406. path: '/reviewIndicators',
  407. name: 'reviewIndicators',
  408. component: () => import('@/views/allcase/reviewIndicators.vue'),
  409. hidden: true,
  410. meta: {
  411. title: '评审指标',
  412. keepAlive: 1,
  413. canMultipleOpen: true
  414. },
  415. },
  416. {
  417. path: '/reviewIndicatorsList',
  418. name: 'reviewIndicatorsList',
  419. component: () => import('@/views/allcase/reviewIndicatorsList.vue'),
  420. hidden: true,
  421. meta: {
  422. title: '指标列表',
  423. keepAlive: 1,
  424. },
  425. },
  426. {
  427. path: '/yypsIndexAnalysis',
  428. name: 'YypsIndexAnalysis',
  429. component: () => import('@/views/yyps/analysis/index.vue'),
  430. hidden: true,
  431. meta: {
  432. title: '指标分析',
  433. keepAlive: 1,
  434. canMultipleOpen: true
  435. },
  436. },
  437. {
  438. path: '/yypsIndexAnalysisList',
  439. name: 'YypsIndexAnalysisList',
  440. component: () => import('@/views/yyps/analysis/list.vue'),
  441. hidden: true,
  442. meta: {
  443. title: '指标分析-科室病案',
  444. keepAlive: 1,
  445. canMultipleOpen: true
  446. },
  447. },
  448. {
  449. path: '/yypsIndex',
  450. name: 'yypsIndex',
  451. component: () => import('@/views/yyps/index/index.vue'),
  452. hidden: true,
  453. meta: {
  454. title: '评审指标',
  455. keepAlive: 1,
  456. canMultipleOpen: true
  457. },
  458. },
  459. {
  460. path: '/middleCaseNumber',
  461. name: 'MiddleCaseNumber',
  462. component: () => import('@/views/middleCaseControl/caseNumber'),
  463. hidden: true, //不在导航栏展示
  464. meta: {
  465. title: '病案数量',
  466. keepAlive: 1,
  467. canMultipleOpen: true
  468. },
  469. },
  470. {
  471. path: '/middleDefectNumber',
  472. name: 'MiddleDefectNumber',
  473. component: () => import('@/views/middleCaseControl/defectNumber'),
  474. hidden: true,//不在导航栏展示
  475. meta: {
  476. title: '缺陷病案',
  477. keepAlive: 1,
  478. canMultipleOpen: true
  479. },
  480. },
  481. ],
  482. },
  483. // 暂时添加的路由
  484. // {
  485. // path: '/import',
  486. // name: 'import',
  487. // component: Layout,
  488. // meta:{
  489. // icon: "table",
  490. // title: "数据导入"
  491. // },
  492. // children: [
  493. // {
  494. // path: '/recordsImport',
  495. // name: 'recordsImport',
  496. // component: () => import('@/views/dataImport/recordsImport/index'),
  497. // meta: {
  498. // title: '首页数据导入',
  499. // keepAlive: 1,
  500. // canMultipleOpen: true,
  501. // hidden: true
  502. // }
  503. // },
  504. // {
  505. // path: '/dataAnalysis',
  506. // name: 'dataAnalysis',
  507. // component: () => import('@/views/dataImport/dataAnalysis/index'),
  508. // meta: {
  509. // title: '首页数据分析',
  510. // keepAlive: 1,
  511. // canMultipleOpen: true,
  512. // hidden: true
  513. // }
  514. // },
  515. // ]
  516. // },
  517. // 医院大数据自助查询系统
  518. {
  519. path: '/hospital',
  520. component: AppMain,
  521. redirect: '/hospital-search',
  522. children: [
  523. {
  524. path: '/hospital-search',
  525. name: 'HospitalSearch',
  526. component: () => import('@/views/searchSystem/index'),
  527. meta: {
  528. keepAlive: 1,
  529. canMultipleOpen: true,
  530. nocopy: true
  531. },
  532. hidden: true
  533. },
  534. {
  535. path: '/hospital-caseViews',
  536. name: 'HospitalCaseViews',
  537. component: () => import('@/views/allcase/caseViews'),
  538. meta: {
  539. keepAlive: 0,
  540. canMultipleOpen: true,
  541. nocopy: true
  542. },
  543. hidden: true
  544. },
  545. {
  546. path: '/hospital-details',
  547. name: 'HospitalDetails',
  548. component: () => import('@/views/data/query/details'),
  549. meta: {
  550. keepAlive: 0,
  551. canMultipleOpen: true,
  552. nocopy: true
  553. },
  554. hidden: true
  555. },
  556. {
  557. path: '/hospital-chargeDetails',
  558. name: 'HospitalChargeDetails',
  559. hidden: true,
  560. component: () => import('@/views/data/query/ChargeDetails'),
  561. meta: {
  562. keepAlive: 0,
  563. canMultipleOpen: true,
  564. nocopy: true
  565. },
  566. },
  567. ]
  568. },
  569. {
  570. path: '/embedIndex',
  571. component: AppMain,
  572. redirect: '/embedIndex-home',
  573. children: [
  574. {
  575. path: '/embedIndex-home',
  576. name: 'EmbedIndexHome',
  577. component: () => import('@/views/embedIndex/index'),
  578. meta: {
  579. keepAlive: 1,
  580. canMultipleOpen: true,
  581. nocopy: true
  582. },
  583. hidden: true
  584. },
  585. {
  586. path: '/embedIndex-caseIndexAnalysisList',
  587. name: 'EmbedIndexCaseIndexAnalysisList',
  588. component: () => import('@/views/allcase/caseIndexAnalysisList'),
  589. hidden: true,
  590. meta: {
  591. keepAlive: 1,
  592. canMultipleOpen: true,
  593. nocopy: true
  594. },
  595. },
  596. {
  597. path: '/embedIndex-caseIndexList',
  598. name: 'EmbedIndexCaseIndexList',
  599. component: () => import('@/views/allcase/caseIndexList'),
  600. hidden: true,
  601. meta: {
  602. keepAlive: 1,
  603. canMultipleOpen: true,
  604. nocopy: true
  605. },
  606. },
  607. {
  608. path: '/embedIndex-caseViews',
  609. name: 'EmbedIndexCaseViews',
  610. component: () => import('@/views/allcase/caseViews'),
  611. hidden: true,
  612. meta: {
  613. keepAlive: 0,
  614. canMultipleOpen: true,
  615. nocopy: true
  616. },
  617. },
  618. {
  619. path: '/embedIndex-chargeDetails',
  620. name: 'EmbedIndexChargeDetails',
  621. hidden: true,
  622. meta: {
  623. keepAlive: 0,
  624. canMultipleOpen: true,
  625. nocopy: true
  626. },
  627. component: () => import('@/views/data/query/ChargeDetails')
  628. }
  629. ]
  630. },
  631. {
  632. path: '/reviewIndex',
  633. component: AppMain,
  634. redirect: '/reviewIndex-home',
  635. children: [
  636. {
  637. path: '/reviewIndex-home',
  638. name: 'ReviewIndex',
  639. component: () => import('@/views/reviewIndex/index'),
  640. meta: {
  641. keepAlive: 1,
  642. canMultipleOpen: true,
  643. nocopy: true
  644. },
  645. hidden: true
  646. },
  647. {
  648. path: '/reviewIndex-caseIndexList',
  649. name: 'ReviewIndexCaseIndexList',
  650. component: () => import('@/views/allcase/caseIndexList'),
  651. hidden: true,
  652. meta: {
  653. keepAlive: 1,
  654. canMultipleOpen: true,
  655. nocopy: true
  656. },
  657. },
  658. {
  659. path: '/reviewIndex-caseViews',
  660. name: 'ReviewIndexCaseViews',
  661. component: () => import('@/views/allcase/caseViews'),
  662. hidden: true,
  663. meta: {
  664. keepAlive: 0,
  665. canMultipleOpen: true,
  666. nocopy: true
  667. },
  668. },
  669. {
  670. path: '/reviewIndex-yypsIndexAnalysisList',
  671. name: 'ReviewYypsIndexAnalysisList',
  672. component: () => import('@/views/yyps/analysis/list.vue'),
  673. hidden: true,
  674. meta: {
  675. title: '指标分析-科室病案',
  676. keepAlive: 1,
  677. canMultipleOpen: true,
  678. nocopy: true
  679. },
  680. },
  681. {
  682. path: '/reviewIndex-chargeDetails',
  683. name: 'ReviewIndexChargeDetails',
  684. hidden: true,
  685. component: () => import('@/views/data/query/ChargeDetails'),
  686. meta: {
  687. keepAlive: 0,
  688. canMultipleOpen: true,
  689. nocopy: true
  690. },
  691. }
  692. ]
  693. },
  694. {
  695. path: '/whitelist',
  696. component: AppMain,
  697. redirect: '/whitelist-search',
  698. children: [
  699. {
  700. path: '/whitelist-search',
  701. name: 'WhitelistSearch',
  702. component: () => import('@/views/searchSystem/index'),
  703. meta: {
  704. keepAlive: 1,
  705. canMultipleOpen: true,
  706. nocopy: true
  707. },
  708. hidden: true
  709. },
  710. {
  711. path: '/whitelist-caseViews',
  712. name: 'WhitelistCaseViews',
  713. component: () => import('@/views/allcase/caseViews'),
  714. hidden: true,
  715. meta: {
  716. keepAlive: 0,
  717. canMultipleOpen: true,
  718. nocopy: true
  719. },
  720. },
  721. {
  722. path: '/whitelist-chargeDetails',
  723. name: 'WhitelistChargeDetails',
  724. hidden: true,
  725. meta: {
  726. keepAlive: 0,
  727. canMultipleOpen: true,
  728. nocopy: true
  729. },
  730. component: () => import('@/views/data/query/ChargeDetails')
  731. },
  732. {
  733. path: '/whitelist-details',
  734. name: 'WhitelistDetails',
  735. component: () => import('@/views/data/query/details'),
  736. hidden: true,
  737. meta: {
  738. keepAlive: 0,
  739. canMultipleOpen: true,
  740. nocopy: true
  741. },
  742. },
  743. {
  744. path: '/whitelist-outpatientMedicalRecordDetail',
  745. name: 'WhitelistOutpatientMedicalRecordDetail',
  746. component: () => import('@/views/outpatient/control/detail'),
  747. hidden: true,
  748. meta: {
  749. keepAlive: 0,
  750. canMultipleOpen: true,
  751. nocopy: true
  752. },
  753. },
  754. {
  755. path: '/whitelist-caseControl',
  756. name: 'WhitelistCaseControl',
  757. component: () => import('@/views/allcase/caseControl'),
  758. hidden: true,
  759. meta: {
  760. keepAlive: 1,
  761. canMultipleOpen: true,
  762. nocopy: true
  763. },
  764. },
  765. {
  766. path: '/whitelist-qualityResults',
  767. name: 'WhitelistQualityResults',
  768. component: () => import('@/views/data/query/qualityResults'),
  769. hidden: true,
  770. meta: {
  771. keepAlive: 0,
  772. canMultipleOpen: true,
  773. nocopy: true,
  774. nocrumb: true, // 不展示多页签tab栏
  775. },
  776. },
  777. ]
  778. }
  779. ];
  780. const createRouter = () =>
  781. new Router({
  782. // mode: 'history', // require service support
  783. scrollBehavior: () => ({ y: 0 }),
  784. routes: constantRoutes,
  785. });
  786. const router = createRouter();
  787. const whiteList = ['/login','/404', '/whitelist-search', '/whitelist-caseViews', '/whitelist-chargeDetails', '/whitelist-details', '/whitelist-caseControl','/whitelist-qualityResults', '/whitelist-outpatientMedicalRecordDetail']; // 添加路由白名单
  788. //路由判断
  789. router.beforeEach(async (to, from, next) => {
  790. const hasToken = getToken();
  791. if(hasToken){
  792. if (!store.state.user.menu.length) {
  793. // 判断当前用户是否已拉取完权限菜单信息
  794. // 如果本地不存在权限菜单,则获取权限菜单,生成菜单列表
  795. if(!sessionStorage.getItem("route")){
  796. //获取路由菜单
  797. menu.getMenu().then(response =>{
  798. //保险起见,组装一次数据
  799. menu.parseRoute(JSON.parse(sessionStorage.getItem("route")),[]).then(res =>{
  800. //添加路由并进行跳转
  801. menu.addMenu(res).then(e =>{
  802. next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
  803. })
  804. })
  805. }).catch(err =>{//失败则直接跳转登录页面
  806. next(`/login`);
  807. })
  808. }else{//从缓存中读取用户权限列表,并添加菜单到侧边栏和路由元
  809. menu.parseRoute(JSON.parse(sessionStorage.getItem("route")),[]).then(res =>{
  810. menu.addMenu(res).then(e =>{
  811. next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
  812. })
  813. })
  814. }
  815. }else{
  816. // 有路由表直接放行
  817. next();
  818. }
  819. }else{
  820. if (whiteList.indexOf(to.path) !== -1) {
  821. // 在白名单内直接放行
  822. next();
  823. } else {
  824. // 其他没有访问权限的页面将被重定向到登录页面。
  825. next(`/login`);
  826. }
  827. }
  828. if(to.path == from.path ){
  829. // 让 列表页 即不缓存,刷新
  830. to.meta.keepAlive = false;
  831. }
  832. next()
  833. })
  834. // Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
  835. export function resetRouter() {
  836. const newRouter = createRouter();
  837. router.matcher = newRouter.matcher; // reset router
  838. }
  839. export default router;