route.ts 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266
  1. import { RouteRecordRaw } from 'vue-router'
  2. /**
  3. * 建议:路由 path 路径与文件夹名称相同,找文件可浏览器地址找,方便定位文件位置
  4. *
  5. * 路由meta对象参数说明
  6. * meta: {
  7. * title: 菜单栏及 tagsView 栏、菜单搜索名称(国际化)
  8. * isLink: 是否超链接菜单,开启外链条件,`1、isLink: 链接地址不为空 2、isIframe:false`
  9. * isHide: 是否隐藏此路由
  10. * isKeepAlive: 是否缓存组件状态
  11. * isAffix: 是否固定在 tagsView 栏上
  12. * isIframe: 是否内嵌窗口,开启条件,`1、isIframe:true 2、isLink:链接地址不为空`
  13. * roles: 当前路由权限标识,取角色管理。控制路由显示、隐藏。超级管理员:admin 普通角色:common
  14. * icon: 菜单、tagsView 图标,阿里:加 `iconfont xxx`,fontawesome:加 `fa xxx`
  15. * }
  16. */
  17. // 扩展 RouteMeta 接口
  18. declare module 'vue-router' {
  19. interface RouteMeta {
  20. title?: string
  21. isLink?: string
  22. isHide?: boolean
  23. isKeepAlive?: boolean
  24. isAffix?: boolean
  25. isIframe?: boolean
  26. roles?: string[]
  27. icon?: string
  28. }
  29. }
  30. /**
  31. * 定义动态路由
  32. * 前端添加路由,请在顶级节点的 `children 数组` 里添加
  33. * @description 未开启 isRequestRoutes 为 true 时使用(前端控制路由),开启时第一个顶级 children 的路由将被替换成接口请求回来的路由数据
  34. * @description 各字段请查看 `/@/views/example/system/menu/component/addMenu.vue 下的 ruleForm`
  35. * @returns 返回路由菜单数据
  36. */
  37. export const dynamicRoutes: Array<RouteRecordRaw> = [
  38. {
  39. path: '/',
  40. name: '/',
  41. component: () => import('/@/layout/index.vue'),
  42. redirect: '/platform/workbench',
  43. meta: {
  44. isKeepAlive: true,
  45. },
  46. children: import.meta.env.PROD
  47. ? []
  48. : [
  49. {
  50. path: '/example',
  51. name: 'example',
  52. component: () => import('/@/layout/routerView/parent.vue'),
  53. redirect: '/example/home',
  54. meta: {
  55. title: '参考样例',
  56. isLink: '',
  57. isHide: false,
  58. isKeepAlive: true,
  59. isAffix: false,
  60. isIframe: false,
  61. roles: ['admin'],
  62. icon: 'ele-Menu',
  63. },
  64. children: [
  65. {
  66. path: '/example/home',
  67. name: 'example/home',
  68. component: () => import('/@/views/example/home/index.vue'),
  69. meta: {
  70. title: 'message.router.home',
  71. isLink: '',
  72. isHide: false,
  73. isKeepAlive: true,
  74. isAffix: false,
  75. isIframe: false,
  76. roles: ['admin', 'common'],
  77. icon: 'iconfont icon-shouye',
  78. },
  79. },
  80. {
  81. path: '/example/system',
  82. name: 'example/system',
  83. component: () => import('/@/layout/routerView/parent.vue'),
  84. redirect: '/system/menu',
  85. meta: {
  86. title: 'message.router.system',
  87. isLink: '',
  88. isHide: false,
  89. isKeepAlive: true,
  90. isAffix: false,
  91. isIframe: false,
  92. roles: ['admin'],
  93. icon: 'iconfont icon-xitongshezhi',
  94. },
  95. children: [
  96. {
  97. path: '/example/system/menu',
  98. name: 'example/systemMenu',
  99. component: () => import('/@/views/example/system/menu/index.vue'),
  100. meta: {
  101. title: 'message.router.systemMenu',
  102. isLink: '',
  103. isHide: false,
  104. isKeepAlive: true,
  105. isAffix: false,
  106. isIframe: false,
  107. roles: ['admin'],
  108. icon: 'iconfont icon-caidan',
  109. },
  110. },
  111. {
  112. path: '/example/system/role',
  113. name: 'example/systemRole',
  114. component: () => import('/@/views/example/system/role/index.vue'),
  115. meta: {
  116. title: 'message.router.systemRole',
  117. isLink: '',
  118. isHide: false,
  119. isKeepAlive: true,
  120. isAffix: false,
  121. isIframe: false,
  122. roles: ['admin'],
  123. icon: 'ele-ColdDrink',
  124. },
  125. },
  126. {
  127. path: '/example/system/user',
  128. name: 'example/systemUser',
  129. component: () => import('/@/views/example/system/user/index.vue'),
  130. meta: {
  131. title: 'message.router.systemUser',
  132. isLink: '',
  133. isHide: false,
  134. isKeepAlive: true,
  135. isAffix: false,
  136. isIframe: false,
  137. roles: ['admin'],
  138. icon: 'iconfont icon-icon-',
  139. },
  140. },
  141. {
  142. path: '/example/system/dept',
  143. name: 'example/systemDept',
  144. component: () => import('/@/views/example/system/dept/index.vue'),
  145. meta: {
  146. title: 'message.router.systemDept',
  147. isLink: '',
  148. isHide: false,
  149. isKeepAlive: true,
  150. isAffix: false,
  151. isIframe: false,
  152. roles: ['admin'],
  153. icon: 'ele-OfficeBuilding',
  154. },
  155. },
  156. {
  157. path: '/example/system/dic',
  158. name: 'example/systemDic',
  159. component: () => import('/@/views/example/system/dic/index.vue'),
  160. meta: {
  161. title: 'message.router.systemDic',
  162. isLink: '',
  163. isHide: false,
  164. isKeepAlive: true,
  165. isAffix: false,
  166. isIframe: false,
  167. roles: ['admin'],
  168. icon: 'ele-SetUp',
  169. },
  170. },
  171. ],
  172. },
  173. {
  174. path: '/example/limits',
  175. name: 'example/limits',
  176. component: () => import('/@/layout/routerView/parent.vue'),
  177. redirect: '/limits/frontEnd',
  178. meta: {
  179. title: 'message.router.limits',
  180. isLink: '',
  181. isHide: false,
  182. isKeepAlive: true,
  183. isAffix: false,
  184. isIframe: false,
  185. roles: ['admin', 'common'],
  186. icon: 'iconfont icon-quanxian',
  187. },
  188. children: [
  189. {
  190. path: '/example/limits/frontEnd',
  191. name: 'example/limitsFrontEnd',
  192. component: () => import('/@/layout/routerView/parent.vue'),
  193. redirect: '/limits/frontEnd/page',
  194. meta: {
  195. title: 'message.router.limitsFrontEnd',
  196. isLink: '',
  197. isHide: false,
  198. isKeepAlive: true,
  199. isAffix: false,
  200. isIframe: false,
  201. roles: ['admin', 'common'],
  202. icon: '',
  203. },
  204. children: [
  205. {
  206. path: '/example/limits/frontEnd/page',
  207. name: 'example/limitsFrontEndPage',
  208. component: () => import('/@/views/example/limits/frontEnd/page/index.vue'),
  209. meta: {
  210. title: 'message.router.limitsFrontEndPage',
  211. isLink: '',
  212. isHide: false,
  213. isKeepAlive: true,
  214. isAffix: false,
  215. isIframe: false,
  216. roles: ['admin', 'common'],
  217. icon: '',
  218. },
  219. },
  220. {
  221. path: '/example/limits/frontEnd/btn',
  222. name: 'example/limitsFrontEndBtn',
  223. component: () => import('/@/views/example/limits/frontEnd/btn/index.vue'),
  224. meta: {
  225. title: 'message.router.limitsFrontEndBtn',
  226. isLink: '',
  227. isHide: false,
  228. isKeepAlive: true,
  229. isAffix: false,
  230. isIframe: false,
  231. roles: ['admin', 'common'],
  232. icon: '',
  233. },
  234. },
  235. ],
  236. },
  237. {
  238. path: '/example/limits/backEnd',
  239. name: 'example/limitsBackEnd',
  240. component: () => import('/@/layout/routerView/parent.vue'),
  241. meta: {
  242. title: 'message.router.limitsBackEnd',
  243. isLink: '',
  244. isHide: false,
  245. isKeepAlive: true,
  246. isAffix: false,
  247. isIframe: false,
  248. roles: ['admin', 'common'],
  249. icon: '',
  250. },
  251. children: [
  252. {
  253. path: '/example/limits/backEnd/page',
  254. name: 'example/limitsBackEndEndPage',
  255. component: () => import('/@/views/example/limits/backEnd/page/index.vue'),
  256. meta: {
  257. title: 'message.router.limitsBackEndEndPage',
  258. isLink: '',
  259. isHide: false,
  260. isKeepAlive: true,
  261. isAffix: false,
  262. isIframe: false,
  263. roles: ['admin', 'common'],
  264. icon: '',
  265. },
  266. },
  267. ],
  268. },
  269. ],
  270. },
  271. {
  272. path: '/example/menu',
  273. name: 'example/menu',
  274. component: () => import('/@/layout/routerView/parent.vue'),
  275. redirect: '/example/menu/menu1',
  276. meta: {
  277. title: 'message.router.menu',
  278. isLink: '',
  279. isHide: false,
  280. isKeepAlive: true,
  281. isAffix: false,
  282. isIframe: false,
  283. roles: ['admin', 'common'],
  284. icon: 'iconfont icon-caidan',
  285. },
  286. children: [
  287. {
  288. path: '/example/menu/menu1',
  289. name: 'example/menu1',
  290. component: () => import('/@/layout/routerView/parent.vue'),
  291. redirect: '/example/menu/menu1/menu11',
  292. meta: {
  293. title: 'message.router.menu1',
  294. isLink: '',
  295. isHide: false,
  296. isKeepAlive: true,
  297. isAffix: false,
  298. isIframe: false,
  299. roles: ['admin', 'common'],
  300. icon: 'iconfont icon-caidan',
  301. },
  302. children: [
  303. {
  304. path: '/example/menu/menu1/menu11',
  305. name: 'example/menu11',
  306. component: () => import('/@/views/example/menu/menu1/menu11/index.vue'),
  307. meta: {
  308. title: 'message.router.menu11',
  309. isLink: '',
  310. isHide: false,
  311. isKeepAlive: true,
  312. isAffix: false,
  313. isIframe: false,
  314. roles: ['admin', 'common'],
  315. icon: 'iconfont icon-caidan',
  316. },
  317. },
  318. {
  319. path: '/example/menu/menu1/menu12',
  320. name: 'example/menu12',
  321. component: () => import('/@/layout/routerView/parent.vue'),
  322. redirect: '/example/menu/menu1/menu12/menu121',
  323. meta: {
  324. title: 'message.router.menu12',
  325. isLink: '',
  326. isHide: false,
  327. isKeepAlive: true,
  328. isAffix: false,
  329. isIframe: false,
  330. roles: ['admin', 'common'],
  331. icon: 'iconfont icon-caidan',
  332. },
  333. children: [
  334. {
  335. path: '/example/menu/menu1/menu12/menu121',
  336. name: 'example/menu121',
  337. component: () => import('/@/views/example/menu/menu1/menu12/menu121/index.vue'),
  338. meta: {
  339. title: 'message.router.menu121',
  340. isLink: '',
  341. isHide: false,
  342. isKeepAlive: true,
  343. isAffix: false,
  344. isIframe: false,
  345. roles: ['admin', 'common'],
  346. icon: 'iconfont icon-caidan',
  347. },
  348. },
  349. {
  350. path: '/example/menu/menu1/menu12/menu122',
  351. name: 'example/menu122',
  352. component: () => import('/@/views/example/menu/menu1/menu12/menu122/index.vue'),
  353. meta: {
  354. title: 'message.router.menu122',
  355. isLink: '',
  356. isHide: false,
  357. isKeepAlive: true,
  358. isAffix: false,
  359. isIframe: false,
  360. roles: ['admin', 'common'],
  361. icon: 'iconfont icon-caidan',
  362. },
  363. },
  364. ],
  365. },
  366. {
  367. path: '/example/menu/menu1/menu13',
  368. name: 'example/menu13',
  369. component: () => import('/@/views/example/menu/menu1/menu13/index.vue'),
  370. meta: {
  371. title: 'message.router.menu13',
  372. isLink: '',
  373. isHide: false,
  374. isKeepAlive: true,
  375. isAffix: false,
  376. isIframe: false,
  377. roles: ['admin', 'common'],
  378. icon: 'iconfont icon-caidan',
  379. },
  380. },
  381. ],
  382. },
  383. {
  384. path: '/example/menu/menu2',
  385. name: 'example/menu2',
  386. component: () => import('/@/views/example/menu/menu2/index.vue'),
  387. meta: {
  388. title: 'message.router.menu2',
  389. isLink: '',
  390. isHide: false,
  391. isKeepAlive: true,
  392. isAffix: false,
  393. isIframe: false,
  394. roles: ['admin', 'common'],
  395. icon: 'iconfont icon-caidan',
  396. },
  397. },
  398. ],
  399. },
  400. {
  401. path: '/example/fun',
  402. name: 'example/funIndex',
  403. component: () => import('/@/layout/routerView/parent.vue'),
  404. redirect: '/fun/tagsView',
  405. meta: {
  406. title: 'message.router.funIndex',
  407. isLink: '',
  408. isHide: false,
  409. isKeepAlive: true,
  410. isAffix: false,
  411. isIframe: false,
  412. roles: ['admin', 'common'],
  413. icon: 'iconfont icon-crew_feature',
  414. },
  415. children: [
  416. {
  417. path: '/example/fun/tagsView',
  418. name: 'example/funTagsView',
  419. component: () => import('/@/views/example/fun/tagsView/index.vue'),
  420. meta: {
  421. title: 'message.router.funTagsView',
  422. isLink: '',
  423. isHide: false,
  424. isKeepAlive: true,
  425. isAffix: false,
  426. isIframe: false,
  427. roles: ['admin', 'common'],
  428. icon: 'ele-Pointer',
  429. },
  430. },
  431. {
  432. path: '/example/fun/countup',
  433. name: 'example/funCountup',
  434. component: () => import('/@/views/example/fun/countup/index.vue'),
  435. meta: {
  436. title: 'message.router.funCountup',
  437. isLink: '',
  438. isHide: false,
  439. isKeepAlive: true,
  440. isAffix: false,
  441. isIframe: false,
  442. roles: ['admin', 'common'],
  443. icon: 'ele-Odometer',
  444. },
  445. },
  446. {
  447. path: '/example/fun/wangEditor',
  448. name: 'example/funWangEditor',
  449. component: () => import('/@/views/example/fun/wangEditor/index.vue'),
  450. meta: {
  451. title: 'message.router.funWangEditor',
  452. isLink: '',
  453. isHide: false,
  454. isKeepAlive: true,
  455. isAffix: false,
  456. isIframe: false,
  457. roles: ['admin', 'common'],
  458. icon: 'iconfont icon-fuwenbenkuang',
  459. },
  460. },
  461. {
  462. path: '/example/fun/cropper',
  463. name: 'example/funCropper',
  464. component: () => import('/@/views/example/fun/cropper/index.vue'),
  465. meta: {
  466. title: 'message.router.funCropper',
  467. isLink: '',
  468. isHide: false,
  469. isKeepAlive: true,
  470. isAffix: false,
  471. isIframe: false,
  472. roles: ['admin', 'common'],
  473. icon: 'iconfont icon-caijian',
  474. },
  475. },
  476. {
  477. path: '/example/fun/qrcode',
  478. name: 'example/funQrcode',
  479. component: () => import('/@/views/example/fun/qrcode/index.vue'),
  480. meta: {
  481. title: 'message.router.funQrcode',
  482. isLink: '',
  483. isHide: false,
  484. isKeepAlive: true,
  485. isAffix: false,
  486. isIframe: false,
  487. roles: ['admin', 'common'],
  488. icon: 'iconfont icon-ico',
  489. },
  490. },
  491. {
  492. path: '/example/fun/echartsMap',
  493. name: 'example/funEchartsMap',
  494. component: () => import('/@/views/example/fun/echartsMap/index.vue'),
  495. meta: {
  496. title: 'message.router.funEchartsMap',
  497. isLink: '',
  498. isHide: false,
  499. isKeepAlive: true,
  500. isAffix: false,
  501. isIframe: false,
  502. roles: ['admin', 'common'],
  503. icon: 'iconfont icon-ditu',
  504. },
  505. },
  506. {
  507. path: '/example/fun/printJs',
  508. name: 'example/funPrintJs',
  509. component: () => import('/@/views/example/fun/printJs/index.vue'),
  510. meta: {
  511. title: 'message.router.funPrintJs',
  512. isLink: '',
  513. isHide: false,
  514. isKeepAlive: true,
  515. isAffix: false,
  516. isIframe: false,
  517. roles: ['admin', 'common'],
  518. icon: 'ele-Printer',
  519. },
  520. },
  521. {
  522. path: '/example/fun/clipboard',
  523. name: 'example/funClipboard',
  524. component: () => import('/@/views/example/fun/clipboard/index.vue'),
  525. meta: {
  526. title: 'message.router.funClipboard',
  527. isLink: '',
  528. isHide: false,
  529. isKeepAlive: true,
  530. isAffix: false,
  531. isIframe: false,
  532. roles: ['admin', 'common'],
  533. icon: 'ele-DocumentCopy',
  534. },
  535. },
  536. {
  537. path: '/example/fun/gridLayout',
  538. name: 'example/funGridLayout',
  539. component: () => import('/@/views/example/fun/gridLayout/index.vue'),
  540. meta: {
  541. title: 'message.router.funGridLayout',
  542. isLink: '',
  543. isHide: false,
  544. isKeepAlive: true,
  545. isAffix: false,
  546. isIframe: false,
  547. roles: ['admin', 'common'],
  548. icon: 'iconfont icon-tuodong',
  549. },
  550. },
  551. {
  552. path: '/example/fun/splitpanes',
  553. name: 'example/funSplitpanes',
  554. component: () => import('/@/views/example/fun/splitpanes/index.vue'),
  555. meta: {
  556. title: 'message.router.funSplitpanes',
  557. isLink: '',
  558. isHide: false,
  559. isKeepAlive: true,
  560. isAffix: false,
  561. isIframe: false,
  562. roles: ['admin', 'common'],
  563. icon: 'iconfont icon--chaifenlie',
  564. },
  565. },
  566. ],
  567. },
  568. {
  569. path: '/example/pages',
  570. name: 'example/pagesIndex',
  571. component: () => import('/@/layout/routerView/parent.vue'),
  572. redirect: '/pages/filtering',
  573. meta: {
  574. title: 'message.router.pagesIndex',
  575. isLink: '',
  576. isHide: false,
  577. isKeepAlive: true,
  578. isAffix: false,
  579. isIframe: false,
  580. roles: ['admin', 'common'],
  581. icon: 'iconfont icon-fuzhiyemian',
  582. },
  583. children: [
  584. {
  585. path: '/example/pages/filtering',
  586. name: 'example/pagesFiltering',
  587. component: () => import('/@/views/example/pages/filtering/index.vue'),
  588. meta: {
  589. title: 'message.router.pagesFiltering',
  590. isLink: '',
  591. isHide: false,
  592. isKeepAlive: true,
  593. isAffix: false,
  594. isIframe: false,
  595. roles: ['admin', 'common'],
  596. icon: 'ele-Sell',
  597. },
  598. /**
  599. * 注意此处详情写法:
  600. * 1、嵌套进父级里时,面包屑显示为:首页/页面/过滤筛选组件/过滤筛选组件详情
  601. * 2、不嵌套进父级时,面包屑显示为:首页/页面/过滤筛选组件/过滤筛选组件详情
  602. * 3、想要父级不高亮,面包屑显示为:首页/页面/过滤筛选组件详情,设置路径为:/pages/filteringDetails
  603. */
  604. children: [
  605. {
  606. path: '/example/pages/filtering/details',
  607. name: 'example/pagesFilteringDetails',
  608. component: () => import('/@/views/example/pages/filtering/details.vue'),
  609. meta: {
  610. title: 'message.router.pagesFilteringDetails',
  611. isLink: '',
  612. isHide: true,
  613. isKeepAlive: false,
  614. isAffix: false,
  615. isIframe: false,
  616. roles: ['admin', 'common'],
  617. icon: 'ele-Sunny',
  618. },
  619. },
  620. ],
  621. },
  622. {
  623. path: '/example/pages/filtering/details1',
  624. name: 'example/pagesFilteringDetails1',
  625. component: () => import('/@/views/example/pages/filtering/details1.vue'),
  626. meta: {
  627. title: 'message.router.pagesFilteringDetails1',
  628. isLink: '',
  629. isHide: true,
  630. isKeepAlive: false,
  631. isAffix: false,
  632. isIframe: false,
  633. roles: ['admin', 'common'],
  634. icon: 'ele-Sunny',
  635. },
  636. },
  637. {
  638. path: '/example/pages/iocnfont',
  639. name: 'example/pagesIocnfont',
  640. component: () => import('/@/views/example/pages/iocnfont/index.vue'),
  641. meta: {
  642. title: 'message.router.pagesIocnfont',
  643. isLink: '',
  644. isHide: false,
  645. isKeepAlive: true,
  646. isAffix: false,
  647. isIframe: false,
  648. roles: ['admin', 'common'],
  649. icon: 'ele-Present',
  650. },
  651. },
  652. {
  653. path: '/example/pages/element',
  654. name: 'example/pagesElement',
  655. component: () => import('/@/views/example/pages/element/index.vue'),
  656. meta: {
  657. title: 'message.router.pagesElement',
  658. isLink: '',
  659. isHide: false,
  660. isKeepAlive: true,
  661. isAffix: false,
  662. isIframe: false,
  663. roles: ['admin', 'common'],
  664. icon: 'ele-Eleme',
  665. },
  666. },
  667. {
  668. path: '/example/pages/awesome',
  669. name: 'example/pagesAwesome',
  670. component: () => import('/@/views/example/pages/awesome/index.vue'),
  671. meta: {
  672. title: 'message.router.pagesAwesome',
  673. isLink: '',
  674. isHide: false,
  675. isKeepAlive: true,
  676. isAffix: false,
  677. isIframe: false,
  678. roles: ['admin', 'common'],
  679. icon: 'ele-SetUp',
  680. },
  681. },
  682. {
  683. path: '/example/pages/formAdapt',
  684. name: 'example/pagesFormAdapt',
  685. component: () => import('/@/views/example/pages/formAdapt/index.vue'),
  686. meta: {
  687. title: 'message.router.pagesFormAdapt',
  688. isLink: '',
  689. isHide: false,
  690. isKeepAlive: true,
  691. isAffix: false,
  692. isIframe: false,
  693. roles: ['admin', 'common'],
  694. icon: 'iconfont icon-biaodan',
  695. },
  696. },
  697. {
  698. path: '/example/pages/tableRules',
  699. name: 'example/pagesTableRules',
  700. component: () => import('/@/views/example/pages/tableRules/index.vue'),
  701. meta: {
  702. title: 'message.router.pagesTableRules',
  703. isLink: '',
  704. isHide: false,
  705. isKeepAlive: true,
  706. isAffix: false,
  707. isIframe: false,
  708. roles: ['admin', 'common'],
  709. icon: 'iconfont icon-jiliandongxuanzeqi',
  710. },
  711. },
  712. {
  713. path: '/example/pages/formI18n',
  714. name: 'example/pagesFormI18n',
  715. component: () => import('/@/views/example/pages/formI18n/index.vue'),
  716. meta: {
  717. title: 'message.router.pagesFormI18n',
  718. isLink: '',
  719. isHide: false,
  720. isKeepAlive: true,
  721. isAffix: false,
  722. isIframe: false,
  723. roles: ['admin', 'common'],
  724. icon: 'iconfont icon-diqiu',
  725. },
  726. },
  727. {
  728. path: '/example/pages/formRules',
  729. name: 'example/pagesFormRules',
  730. component: () => import('/@/views/example/pages/formRules/index.vue'),
  731. meta: {
  732. title: 'message.router.pagesFormRules',
  733. isLink: '',
  734. isHide: false,
  735. isKeepAlive: true,
  736. isAffix: false,
  737. isIframe: false,
  738. roles: ['admin', 'common'],
  739. icon: 'iconfont icon-shuxing',
  740. },
  741. },
  742. {
  743. path: '/example/pages/listAdapt',
  744. name: 'example/pagesListAdapt',
  745. component: () => import('/@/views/example/pages/listAdapt/index.vue'),
  746. meta: {
  747. title: 'message.router.pagesListAdapt',
  748. isLink: '',
  749. isHide: false,
  750. isKeepAlive: true,
  751. isAffix: false,
  752. isIframe: false,
  753. roles: ['admin', 'common'],
  754. icon: 'iconfont icon-chazhaobiaodanliebiao',
  755. },
  756. },
  757. {
  758. path: '/example/pages/waterfall',
  759. name: 'example/pagesWaterfall',
  760. component: () => import('/@/views/example/pages/waterfall/index.vue'),
  761. meta: {
  762. title: 'message.router.pagesWaterfall',
  763. isLink: '',
  764. isHide: false,
  765. isKeepAlive: true,
  766. isAffix: false,
  767. isIframe: false,
  768. roles: ['admin', 'common'],
  769. icon: 'iconfont icon-zidingyibuju',
  770. },
  771. },
  772. {
  773. path: '/example/pages/steps',
  774. name: 'example/pagesSteps',
  775. component: () => import('/@/views/example/pages/steps/index.vue'),
  776. meta: {
  777. title: 'message.router.pagesSteps',
  778. isLink: '',
  779. isHide: false,
  780. isKeepAlive: true,
  781. isAffix: false,
  782. isIframe: false,
  783. roles: ['admin', 'common'],
  784. icon: 'iconfont icon-step',
  785. },
  786. },
  787. {
  788. path: '/example/pages/preview',
  789. name: 'example/pagesPreview',
  790. component: () => import('/@/views/example/pages/preview/index.vue'),
  791. meta: {
  792. title: 'message.router.pagesPreview',
  793. isLink: '',
  794. isHide: false,
  795. isKeepAlive: true,
  796. isAffix: false,
  797. isIframe: false,
  798. roles: ['admin', 'common'],
  799. icon: 'iconfont icon-15tupianyulan',
  800. },
  801. },
  802. {
  803. path: '/example/pages/waves',
  804. name: 'example/pagesWaves',
  805. component: () => import('/@/views/example/pages/waves/index.vue'),
  806. meta: {
  807. title: 'message.router.pagesWaves',
  808. isLink: '',
  809. isHide: false,
  810. isKeepAlive: true,
  811. isAffix: false,
  812. isIframe: false,
  813. roles: ['admin', 'common'],
  814. icon: 'iconfont icon-bolangneng',
  815. },
  816. },
  817. {
  818. path: '/example/pages/tree',
  819. name: 'example/pagesTree',
  820. component: () => import('/@/views/example/pages/tree/index.vue'),
  821. meta: {
  822. title: 'message.router.pagesTree',
  823. isLink: '',
  824. isHide: false,
  825. isKeepAlive: true,
  826. isAffix: false,
  827. isIframe: false,
  828. roles: ['admin', 'common'],
  829. icon: 'iconfont icon-shuxingtu',
  830. },
  831. },
  832. {
  833. path: '/example/pages/drag',
  834. name: 'example/pagesDrag',
  835. component: () => import('/@/views/example/pages/drag/index.vue'),
  836. meta: {
  837. title: 'message.router.pagesDrag',
  838. isLink: '',
  839. isHide: false,
  840. isKeepAlive: true,
  841. isAffix: false,
  842. isIframe: false,
  843. roles: ['admin', 'common'],
  844. icon: 'ele-Pointer',
  845. },
  846. },
  847. {
  848. path: '/example/pages/lazyImg',
  849. name: 'example/pagesLazyImg',
  850. component: () => import('/@/views/example/pages/lazyImg/index.vue'),
  851. meta: {
  852. title: 'message.router.pagesLazyImg',
  853. isLink: '',
  854. isHide: false,
  855. isKeepAlive: true,
  856. isAffix: false,
  857. isIframe: false,
  858. roles: ['admin'],
  859. icon: 'ele-PictureFilled',
  860. },
  861. },
  862. {
  863. path: '/example/pages/dynamicForm',
  864. name: 'example/pagesDynamicForm',
  865. component: () => import('/@/views/example/pages/dynamicForm/index.vue'),
  866. meta: {
  867. title: 'message.router.pagesDynamicForm',
  868. isLink: '',
  869. isHide: false,
  870. isKeepAlive: true,
  871. isAffix: false,
  872. isIframe: false,
  873. roles: ['admin'],
  874. icon: 'iconfont icon-wenducanshu-05',
  875. },
  876. },
  877. {
  878. path: '/example/pages/workflow',
  879. name: 'example/pagesWorkflow',
  880. component: () => import('/@/views/example/pages/workflow/index.vue'),
  881. meta: {
  882. title: 'message.router.pagesWorkflow',
  883. isLink: '',
  884. isHide: false,
  885. isKeepAlive: true,
  886. isAffix: false,
  887. isIframe: false,
  888. roles: ['admin'],
  889. icon: 'ele-Connection',
  890. },
  891. },
  892. ],
  893. },
  894. {
  895. path: '/example/make',
  896. name: 'example/makeIndex',
  897. component: () => import('/@/layout/routerView/parent.vue'),
  898. redirect: '/make/selector',
  899. meta: {
  900. title: 'message.router.makeIndex',
  901. isLink: '',
  902. isHide: false,
  903. isKeepAlive: true,
  904. isAffix: false,
  905. isIframe: false,
  906. roles: ['admin'],
  907. icon: 'iconfont icon-siweidaotu',
  908. },
  909. children: [
  910. {
  911. path: '/example/make/selector',
  912. name: 'example/makeSelector',
  913. component: () => import('/@/views/example/make/selector/index.vue'),
  914. meta: {
  915. title: 'message.router.makeSelector',
  916. isLink: '',
  917. isHide: false,
  918. isKeepAlive: true,
  919. isAffix: false,
  920. isIframe: false,
  921. roles: ['admin', 'common'],
  922. icon: 'iconfont icon-xuanzeqi',
  923. },
  924. },
  925. {
  926. path: '/example/make/noticeBar',
  927. name: 'example/makeNoticeBar',
  928. component: () => import('/@/views/example/make/noticeBar/index.vue'),
  929. meta: {
  930. title: 'message.router.makeNoticeBar',
  931. isLink: '',
  932. isHide: false,
  933. isKeepAlive: true,
  934. isAffix: false,
  935. isIframe: false,
  936. roles: ['admin', 'common'],
  937. icon: 'ele-Bell',
  938. },
  939. },
  940. {
  941. path: '/example/make/svgDemo',
  942. name: 'example/makeSvgDemo',
  943. component: () => import('/@/views/example/make/svgDemo/index.vue'),
  944. meta: {
  945. title: 'message.router.makeSvgDemo',
  946. isLink: '',
  947. isHide: false,
  948. isKeepAlive: true,
  949. isAffix: false,
  950. isIframe: false,
  951. roles: ['admin', 'common'],
  952. icon: 'fa fa-thumbs-o-up',
  953. },
  954. },
  955. {
  956. path: '/example/make/tableDemo',
  957. name: 'example/makeTableDemo',
  958. component: () => import('/@/views/example/make/tableDemo/index.vue'),
  959. meta: {
  960. title: 'message.router.makeTableDemo',
  961. isLink: '',
  962. isHide: false,
  963. isKeepAlive: true,
  964. isAffix: false,
  965. isIframe: false,
  966. roles: ['admin', 'common'],
  967. icon: 'iconfont icon-shuju',
  968. },
  969. },
  970. ],
  971. },
  972. {
  973. path: '/example/params',
  974. name: 'example/paramsIndex',
  975. component: () => import('/@/layout/routerView/parent.vue'),
  976. redirect: '/params/common',
  977. meta: {
  978. title: 'message.router.paramsIndex',
  979. isLink: '',
  980. isHide: false,
  981. isKeepAlive: true,
  982. isAffix: false,
  983. isIframe: false,
  984. roles: ['admin'],
  985. icon: 'iconfont icon-zhongduancanshu',
  986. },
  987. children: [
  988. {
  989. path: '/example/params/common',
  990. name: 'example/paramsCommon',
  991. component: () => import('/@/views/example/params/common/index.vue'),
  992. meta: {
  993. title: 'message.router.paramsCommon',
  994. isLink: '',
  995. isHide: false,
  996. isKeepAlive: true,
  997. isAffix: false,
  998. isIframe: false,
  999. roles: ['admin'],
  1000. icon: 'iconfont icon-putong',
  1001. },
  1002. },
  1003. {
  1004. path: '/example/params/common/details',
  1005. name: 'example/paramsCommonDetails',
  1006. component: () => import('/@/views/example/params/common/details.vue'),
  1007. meta: {
  1008. title: 'message.router.paramsCommonDetails',
  1009. isLink: '',
  1010. isHide: true,
  1011. isKeepAlive: true,
  1012. isAffix: false,
  1013. isIframe: false,
  1014. roles: ['admin'],
  1015. icon: 'ele-Comment',
  1016. },
  1017. },
  1018. {
  1019. path: '/example/params/dynamic',
  1020. name: 'example/paramsDynamic',
  1021. component: () => import('/@/views/example/params/dynamic/index.vue'),
  1022. meta: {
  1023. title: 'message.router.paramsDynamic',
  1024. isLink: '',
  1025. isHide: false,
  1026. isKeepAlive: true,
  1027. isAffix: false,
  1028. isIframe: false,
  1029. roles: ['admin'],
  1030. icon: 'iconfont icon-dongtai',
  1031. },
  1032. },
  1033. /**
  1034. * tagsViewName 为要设置不同的 "tagsView 名称" 字段
  1035. * 如若需设置不同 "tagsView 名称",tagsViewName 字段必须要有
  1036. */
  1037. {
  1038. path: '/example/params/dynamic/details/:t/:id/:tagsViewName',
  1039. name: 'example/paramsDynamicDetails',
  1040. component: () => import('/@/views/example/params/dynamic/details.vue'),
  1041. meta: {
  1042. title: 'message.router.paramsDynamicDetails',
  1043. isLink: '',
  1044. isHide: true,
  1045. isKeepAlive: true,
  1046. isAffix: false,
  1047. isIframe: false,
  1048. roles: ['admin'],
  1049. icon: 'ele-Lightning',
  1050. },
  1051. },
  1052. ],
  1053. },
  1054. {
  1055. path: '/example/visualizing',
  1056. name: 'example/visualizingIndex',
  1057. component: () => import('/@/layout/routerView/parent.vue'),
  1058. redirect: '/visualizing/visualizingLinkDemo1',
  1059. meta: {
  1060. title: 'message.router.visualizingIndex',
  1061. isLink: '',
  1062. isHide: false,
  1063. isKeepAlive: true,
  1064. isAffix: false,
  1065. isIframe: false,
  1066. roles: ['admin'],
  1067. icon: 'ele-ChatLineRound',
  1068. },
  1069. /**
  1070. * 打开内置全屏
  1071. * component 都为 `() => import('/@/layout/routerView/link.vue')`
  1072. * isLink 链接为内置的路由地址,地址为 staticRoutes 中定义
  1073. */
  1074. children: [
  1075. {
  1076. path: '/example/visualizing/visualizingLinkDemo1',
  1077. name: 'example/visualizingLinkDemo1',
  1078. component: () => import('/@/layout/routerView/link.vue'),
  1079. meta: {
  1080. title: 'message.router.visualizingLinkDemo1',
  1081. isLink: '/example/visualizingDemo1',
  1082. isHide: false,
  1083. isKeepAlive: false,
  1084. isAffix: false,
  1085. isIframe: false,
  1086. roles: ['admin'],
  1087. icon: 'iconfont icon-caozuo-wailian',
  1088. },
  1089. },
  1090. {
  1091. path: '/example/visualizing/visualizingLinkDemo2',
  1092. name: 'example/visualizingLinkDemo2',
  1093. component: () => import('/@/layout/routerView/link.vue'),
  1094. meta: {
  1095. title: 'message.router.visualizingLinkDemo2',
  1096. isLink: '/example/visualizingDemo2',
  1097. isHide: false,
  1098. isKeepAlive: false,
  1099. isAffix: false,
  1100. isIframe: false,
  1101. roles: ['admin'],
  1102. icon: 'iconfont icon-caozuo-wailian',
  1103. },
  1104. },
  1105. ],
  1106. },
  1107. {
  1108. path: '/example/chart',
  1109. name: 'example/chartIndex',
  1110. component: () => import('/@/views/example/chart/index.vue'),
  1111. meta: {
  1112. title: 'message.router.chartIndex',
  1113. isLink: '',
  1114. isHide: false,
  1115. isKeepAlive: true,
  1116. isAffix: false,
  1117. isIframe: false,
  1118. roles: ['admin', 'common'],
  1119. icon: 'iconfont icon-ico_shuju',
  1120. },
  1121. },
  1122. {
  1123. path: '/example/personal',
  1124. name: 'example/personal',
  1125. component: () => import('/@/views/example/personal/index.vue'),
  1126. meta: {
  1127. title: 'message.router.personal',
  1128. isLink: '',
  1129. isHide: false,
  1130. isKeepAlive: true,
  1131. isAffix: false,
  1132. isIframe: false,
  1133. roles: ['admin', 'common'],
  1134. icon: 'iconfont icon-gerenzhongxin',
  1135. },
  1136. },
  1137. {
  1138. path: '/example/tools',
  1139. name: 'example/tools',
  1140. component: () => import('/@/views/example/tools/index.vue'),
  1141. meta: {
  1142. title: 'message.router.tools',
  1143. isLink: '',
  1144. isHide: false,
  1145. isKeepAlive: true,
  1146. isAffix: false,
  1147. isIframe: false,
  1148. roles: ['admin', 'common'],
  1149. icon: 'iconfont icon-gongju',
  1150. },
  1151. },
  1152. {
  1153. path: '/example/link',
  1154. name: 'example/layoutLinkView',
  1155. component: () => import('/@/layout/routerView/link.vue'),
  1156. meta: {
  1157. title: 'message.router.layoutLinkView',
  1158. isLink: 'https://element-plus.gitee.io/#/zh-CN/component/installation',
  1159. isHide: false,
  1160. isKeepAlive: false,
  1161. isAffix: false,
  1162. isIframe: false,
  1163. roles: ['admin'],
  1164. icon: 'iconfont icon-caozuo-wailian',
  1165. },
  1166. },
  1167. {
  1168. path: '/example/iframesOne',
  1169. name: 'example/layoutIframeViewOne',
  1170. component: () => import('/@/layout/routerView/iframes.vue'),
  1171. meta: {
  1172. title: 'message.router.layoutIframeViewOne',
  1173. isLink: 'https://nodejs.org/zh-cn/',
  1174. isHide: false,
  1175. isKeepAlive: true,
  1176. isAffix: false,
  1177. isIframe: true,
  1178. roles: ['admin'],
  1179. icon: 'iconfont icon-neiqianshujuchucun',
  1180. },
  1181. },
  1182. {
  1183. path: '/example/iframesTwo',
  1184. name: 'example/layoutIframeViewTwo',
  1185. component: () => import('/@/layout/routerView/iframes.vue'),
  1186. meta: {
  1187. title: 'message.router.layoutIframeViewTwo',
  1188. isLink: 'https://undraw.co/illustrations',
  1189. isHide: false,
  1190. isKeepAlive: true,
  1191. isAffix: false,
  1192. isIframe: true,
  1193. roles: ['admin'],
  1194. icon: 'iconfont icon-neiqianshujuchucun',
  1195. },
  1196. },
  1197. ],
  1198. },
  1199. ],
  1200. },
  1201. ]
  1202. /**
  1203. * 定义404、401界面
  1204. * @link 参考:https://next.router.vuejs.org/zh/guide/essentials/history-mode.html#netlify
  1205. */
  1206. export const notFoundAndNoPower = [
  1207. {
  1208. path: '/:path(.*)*',
  1209. name: 'notFound',
  1210. component: () => import('/@/views/error/404.vue'),
  1211. meta: {
  1212. title: 'message.staticRoutes.notFound',
  1213. isHide: true,
  1214. },
  1215. },
  1216. {
  1217. path: '/401',
  1218. name: 'noPower',
  1219. component: () => import('/@/views/error/401.vue'),
  1220. meta: {
  1221. title: 'message.staticRoutes.noPower',
  1222. isHide: true,
  1223. },
  1224. },
  1225. ]
  1226. /**
  1227. * 定义静态路由(默认路由)
  1228. * 此路由不要动,前端添加路由的话,请在 `dynamicRoutes 数组` 中添加
  1229. * @description 前端控制直接改 dynamicRoutes 中的路由,后端控制不需要修改,请求接口路由数据时,会覆盖 dynamicRoutes 第一个顶级 children 的内容(全屏,不包含 layout 中的路由出口)
  1230. * @returns 返回路由菜单数据
  1231. */
  1232. export const staticRoutes: Array<RouteRecordRaw> = [
  1233. {
  1234. path: '/login',
  1235. name: 'login',
  1236. component: () => import('/@/views/admin/login/index.vue'),
  1237. meta: {
  1238. title: '登录',
  1239. },
  1240. },
  1241. /**
  1242. * 提示:写在这里的为全屏界面,不建议写在这里
  1243. * 请写在 `dynamicRoutes` 路由数组中
  1244. */
  1245. {
  1246. path: '/example/visualizingDemo1',
  1247. name: 'example/visualizingDemo1',
  1248. component: () => import('/@/views/example/visualizing/demo1.vue'),
  1249. meta: {
  1250. title: 'message.router.visualizingLinkDemo1',
  1251. },
  1252. },
  1253. {
  1254. path: '/example/visualizingDemo2',
  1255. name: 'example/visualizingDemo2',
  1256. component: () => import('/@/views/example/visualizing/demo2.vue'),
  1257. meta: {
  1258. title: 'message.router.visualizingLinkDemo2',
  1259. },
  1260. },
  1261. ]