index.js 22 KB

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