index.ts 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. import config from '@/config/axios/config'
  2. import { MockMethod } from 'vite-plugin-mock'
  3. import Mock from 'mockjs'
  4. import { toAnyString } from '@/utils'
  5. const { code } = config
  6. const timeout = 1
  7. const adminList = [
  8. {
  9. path: '/dashboard',
  10. component: '#',
  11. redirect: '/dashboard/analysis',
  12. name: 'Dashboard',
  13. meta: {
  14. title: 'router.dashboard',
  15. icon: 'ant-design:dashboard-filled',
  16. alwaysShow: true
  17. },
  18. children: [
  19. {
  20. path: 'analysis',
  21. component: 'views/Dashboard/Analysis',
  22. name: 'Analysis',
  23. meta: {
  24. title: 'router.analysis',
  25. noCache: true
  26. }
  27. },
  28. {
  29. path: 'workplace',
  30. component: 'views/Dashboard/Workplace',
  31. name: 'Workplace',
  32. meta: {
  33. title: 'router.workplace',
  34. noCache: true
  35. }
  36. }
  37. ]
  38. },
  39. {
  40. path: '/example',
  41. component: '#',
  42. redirect: '/example/example-page',
  43. name: 'Example',
  44. meta: {
  45. title: 'router.example',
  46. icon: 'ep:management',
  47. alwaysShow: true
  48. },
  49. children: [
  50. {
  51. path: 'example-page',
  52. component: 'views/Example/Page/ExamplePage',
  53. name: 'ExamplePage',
  54. meta: {
  55. title: 'router.examplePage'
  56. }
  57. },
  58. {
  59. path: 'example-add',
  60. component: 'views/Example/Page/ExampleAdd',
  61. name: 'ExampleAdd',
  62. meta: {
  63. title: 'router.exampleAdd',
  64. noTagsView: true,
  65. noCache: true,
  66. hidden: true,
  67. showMainRoute: true,
  68. activeMenu: '/example/example-page'
  69. }
  70. },
  71. {
  72. path: 'example-edit',
  73. component: 'views/Example/Page/ExampleEdit',
  74. name: 'ExampleEdit',
  75. meta: {
  76. title: 'router.exampleEdit',
  77. noTagsView: true,
  78. noCache: true,
  79. hidden: true,
  80. showMainRoute: true,
  81. activeMenu: '/example/example-page'
  82. }
  83. },
  84. {
  85. path: 'example-detail',
  86. component: 'views/Example/Page/ExampleDetail',
  87. name: 'ExampleDetail',
  88. meta: {
  89. title: 'router.exampleDetail',
  90. noTagsView: true,
  91. noCache: true,
  92. hidden: true,
  93. showMainRoute: true,
  94. activeMenu: '/example/example-page'
  95. }
  96. }
  97. ]
  98. },
  99. {
  100. path: '/authorization',
  101. component: '#',
  102. redirect: '/authorization/user',
  103. name: 'Authorization',
  104. meta: {
  105. title: 'router.authorization',
  106. icon: 'eos-icons:role-binding',
  107. alwaysShow: true
  108. },
  109. children: [
  110. {
  111. path: 'department',
  112. component: 'views/Authorization/Department/Department',
  113. name: 'Department',
  114. meta: {
  115. title: 'router.department'
  116. }
  117. },
  118. {
  119. path: 'user',
  120. component: 'views/Authorization/User/User',
  121. name: 'User',
  122. meta: {
  123. title: 'router.user'
  124. }
  125. },
  126. {
  127. path: 'menu',
  128. component: 'views/Authorization/Menu/Menu',
  129. name: 'Menu',
  130. meta: {
  131. title: 'router.menuManagement'
  132. }
  133. },
  134. {
  135. path: 'role',
  136. component: 'views/Authorization/Role/Role',
  137. name: 'Role',
  138. meta: {
  139. title: 'router.role'
  140. }
  141. },
  142. {
  143. path: 'test',
  144. component: 'views/Authorization/Test/Test',
  145. name: 'Test',
  146. meta: {
  147. title: 'router.permission',
  148. permission: ['add', 'edit', 'delete']
  149. }
  150. }
  151. ]
  152. }
  153. ]
  154. const testList: string[] = [
  155. '/dashboard',
  156. '/dashboard/analysis',
  157. '/dashboard/workplace',
  158. 'external-link',
  159. 'https://element-plus-admin-doc.cn/',
  160. '/guide',
  161. '/guide/index',
  162. '/components',
  163. '/components/form',
  164. '/components/form/default-form',
  165. '/components/form/use-form',
  166. '/components/form/ref-form',
  167. '/components/table',
  168. '/components/table/default-table',
  169. '/components/table/use-table',
  170. '/components/table/tree-table',
  171. '/components/table/table-image-preview',
  172. '/components/table/ref-table',
  173. '/components/editor-demo',
  174. '/components/editor-demo/editor',
  175. '/components/search',
  176. '/components/descriptions',
  177. '/components/image-viewer',
  178. '/components/dialog',
  179. '/components/icon',
  180. '/components/echart',
  181. '/components/count-to',
  182. '/components/qrcode',
  183. '/components/highlight',
  184. '/components/infotip',
  185. '/Components/InputPassword',
  186. '/Components/Sticky',
  187. '/hooks',
  188. '/hooks/useWatermark',
  189. '/hooks/useOpenTab',
  190. // '/hooks/useCrudSchemas',
  191. '/level',
  192. '/level/menu1',
  193. '/level/menu1/menu1-1',
  194. '/level/menu1/menu1-1/menu1-1-1',
  195. '/level/menu1/menu1-2',
  196. '/level/menu2',
  197. '/example',
  198. '/example/example-dialog',
  199. '/example/example-page',
  200. '/example/example-add',
  201. '/example/example-edit',
  202. '/example/example-detail',
  203. '/authorization',
  204. '/authorization/department',
  205. '/authorization/user',
  206. '/authorization/role',
  207. '/authorization/menu',
  208. '/authorization/test',
  209. '/error',
  210. '/error/404-demo',
  211. '/error/403-demo',
  212. '/error/500-demo'
  213. ]
  214. const List: any[] = []
  215. const roleNames = ['超级管理员', '管理员', '普通用户', '游客']
  216. const menus = [
  217. [
  218. {
  219. path: '/dashboard',
  220. component: '#',
  221. redirect: '/dashboard/analysis',
  222. name: 'Dashboard',
  223. status: Mock.Random.integer(0, 1),
  224. id: 1,
  225. meta: {
  226. title: '首页',
  227. icon: 'ant-design:dashboard-filled',
  228. alwaysShow: true
  229. },
  230. children: [
  231. {
  232. path: 'analysis',
  233. component: 'views/Dashboard/Analysis',
  234. name: 'Analysis',
  235. status: Mock.Random.integer(0, 1),
  236. id: 2,
  237. meta: {
  238. title: '分析页',
  239. noCache: true
  240. }
  241. },
  242. {
  243. path: 'workplace',
  244. component: 'views/Dashboard/Workplace',
  245. name: 'Workplace',
  246. status: Mock.Random.integer(0, 1),
  247. id: 3,
  248. meta: {
  249. title: '工作台',
  250. noCache: true
  251. }
  252. }
  253. ]
  254. },
  255. {
  256. path: '/external-link',
  257. component: '#',
  258. meta: {
  259. title: '文档',
  260. icon: 'clarity:document-solid'
  261. },
  262. name: 'ExternalLink',
  263. status: Mock.Random.integer(0, 1),
  264. id: 4,
  265. children: [
  266. {
  267. path: 'https://element-plus-admin-doc.cn/',
  268. name: 'DocumentLink',
  269. status: Mock.Random.integer(0, 1),
  270. id: 5,
  271. meta: {
  272. title: '文档'
  273. }
  274. }
  275. ]
  276. },
  277. {
  278. path: '/level',
  279. component: '#',
  280. redirect: '/level/menu1/menu1-1/menu1-1-1',
  281. name: 'Level',
  282. status: Mock.Random.integer(0, 1),
  283. id: 6,
  284. meta: {
  285. title: '菜单',
  286. icon: 'carbon:skill-level-advanced'
  287. },
  288. children: [
  289. {
  290. path: 'menu1',
  291. name: 'Menu1',
  292. component: '##',
  293. status: Mock.Random.integer(0, 1),
  294. id: 7,
  295. redirect: '/level/menu1/menu1-1/menu1-1-1',
  296. meta: {
  297. title: '菜单1'
  298. },
  299. children: [
  300. {
  301. path: 'menu1-1',
  302. name: 'Menu11',
  303. component: '##',
  304. status: Mock.Random.integer(0, 1),
  305. id: 8,
  306. redirect: '/level/menu1/menu1-1/menu1-1-1',
  307. meta: {
  308. title: '菜单1-1',
  309. alwaysShow: true
  310. },
  311. children: [
  312. {
  313. path: 'menu1-1-1',
  314. name: 'Menu111',
  315. component: 'views/Level/Menu111',
  316. status: Mock.Random.integer(0, 1),
  317. id: 9,
  318. permission: ['edit', 'add', 'delete'],
  319. meta: {
  320. title: '菜单1-1-1',
  321. permission: ['edit', 'add', 'delete']
  322. }
  323. }
  324. ]
  325. },
  326. {
  327. path: 'menu1-2',
  328. name: 'Menu12',
  329. component: 'views/Level/Menu12',
  330. status: Mock.Random.integer(0, 1),
  331. id: 10,
  332. permission: ['edit', 'add', 'delete'],
  333. meta: {
  334. title: '菜单1-2',
  335. permission: ['edit', 'add', 'delete']
  336. }
  337. }
  338. ]
  339. },
  340. {
  341. path: 'menu2',
  342. name: 'Menu2Demo',
  343. component: 'views/Level/Menu2',
  344. status: Mock.Random.integer(0, 1),
  345. id: 11,
  346. permission: ['edit', 'add', 'delete'],
  347. meta: {
  348. title: '菜单2',
  349. permission: ['edit', 'add', 'delete']
  350. }
  351. }
  352. ]
  353. },
  354. {
  355. path: '/example',
  356. component: '#',
  357. redirect: '/example/example-dialog',
  358. name: 'Example',
  359. status: Mock.Random.integer(0, 1),
  360. id: 12,
  361. meta: {
  362. title: '综合示例',
  363. icon: 'ep:management',
  364. alwaysShow: true
  365. },
  366. children: [
  367. {
  368. path: 'example-dialog',
  369. component: 'views/Example/Dialog/ExampleDialog',
  370. name: 'ExampleDialog',
  371. status: Mock.Random.integer(0, 1),
  372. id: 13,
  373. permission: ['edit', 'add', 'delete'],
  374. meta: {
  375. title: '综合示例-弹窗',
  376. permission: ['edit', 'add', 'delete']
  377. }
  378. },
  379. {
  380. path: 'example-page',
  381. component: 'views/Example/Page/ExamplePage',
  382. name: 'ExamplePage',
  383. status: Mock.Random.integer(0, 1),
  384. id: 14,
  385. permission: ['edit', 'add', 'delete'],
  386. meta: {
  387. title: '综合示例-页面',
  388. permission: ['edit', 'add', 'delete']
  389. }
  390. },
  391. {
  392. path: 'example-add',
  393. component: 'views/Example/Page/ExampleAdd',
  394. name: 'ExampleAdd',
  395. status: Mock.Random.integer(0, 1),
  396. id: 15,
  397. permission: ['edit', 'add', 'delete'],
  398. meta: {
  399. title: '综合示例-新增',
  400. noTagsView: true,
  401. noCache: true,
  402. hidden: true,
  403. showMainRoute: true,
  404. activeMenu: '/example/example-page',
  405. permission: ['edit', 'add', 'delete']
  406. }
  407. },
  408. {
  409. path: 'example-edit',
  410. component: 'views/Example/Page/ExampleEdit',
  411. name: 'ExampleEdit',
  412. status: Mock.Random.integer(0, 1),
  413. id: 16,
  414. permission: ['edit', 'add', 'delete'],
  415. meta: {
  416. title: '综合示例-编辑',
  417. noTagsView: true,
  418. noCache: true,
  419. hidden: true,
  420. showMainRoute: true,
  421. activeMenu: '/example/example-page',
  422. permission: ['edit', 'add', 'delete']
  423. }
  424. },
  425. {
  426. path: 'example-detail',
  427. component: 'views/Example/Page/ExampleDetail',
  428. name: 'ExampleDetail',
  429. status: Mock.Random.integer(0, 1),
  430. id: 17,
  431. permission: ['edit', 'add', 'delete'],
  432. meta: {
  433. title: '综合示例-详情',
  434. noTagsView: true,
  435. noCache: true,
  436. hidden: true,
  437. showMainRoute: true,
  438. activeMenu: '/example/example-page',
  439. permission: ['edit', 'add', 'delete']
  440. }
  441. }
  442. ]
  443. }
  444. ],
  445. [
  446. {
  447. path: '/dashboard',
  448. component: '#',
  449. redirect: '/dashboard/analysis',
  450. name: 'Dashboard',
  451. status: Mock.Random.integer(0, 1),
  452. id: 1,
  453. meta: {
  454. title: '首页',
  455. icon: 'ant-design:dashboard-filled',
  456. alwaysShow: true
  457. },
  458. children: [
  459. {
  460. path: 'analysis',
  461. component: 'views/Dashboard/Analysis',
  462. name: 'Analysis',
  463. status: Mock.Random.integer(0, 1),
  464. id: 2,
  465. meta: {
  466. title: '分析页',
  467. noCache: true
  468. }
  469. },
  470. {
  471. path: 'workplace',
  472. component: 'views/Dashboard/Workplace',
  473. name: 'Workplace',
  474. status: Mock.Random.integer(0, 1),
  475. id: 3,
  476. meta: {
  477. title: '工作台',
  478. noCache: true
  479. }
  480. }
  481. ]
  482. }
  483. ],
  484. [
  485. {
  486. path: '/external-link',
  487. component: '#',
  488. meta: {
  489. title: '文档',
  490. icon: 'clarity:document-solid'
  491. },
  492. name: 'ExternalLink',
  493. status: Mock.Random.integer(0, 1),
  494. id: 4,
  495. children: [
  496. {
  497. path: 'https://element-plus-admin-doc.cn/',
  498. name: 'DocumentLink',
  499. status: Mock.Random.integer(0, 1),
  500. id: 5,
  501. meta: {
  502. title: '文档'
  503. }
  504. }
  505. ]
  506. },
  507. {
  508. path: '/level',
  509. component: '#',
  510. redirect: '/level/menu1/menu1-1/menu1-1-1',
  511. name: 'Level',
  512. status: Mock.Random.integer(0, 1),
  513. id: 6,
  514. meta: {
  515. title: '菜单',
  516. icon: 'carbon:skill-level-advanced'
  517. },
  518. children: [
  519. {
  520. path: 'menu1',
  521. name: 'Menu1',
  522. component: '##',
  523. status: Mock.Random.integer(0, 1),
  524. id: 7,
  525. redirect: '/level/menu1/menu1-1/menu1-1-1',
  526. meta: {
  527. title: '菜单1'
  528. },
  529. children: [
  530. {
  531. path: 'menu1-1',
  532. name: 'Menu11',
  533. component: '##',
  534. status: Mock.Random.integer(0, 1),
  535. id: 8,
  536. redirect: '/level/menu1/menu1-1/menu1-1-1',
  537. meta: {
  538. title: '菜单1-1',
  539. alwaysShow: true
  540. },
  541. children: [
  542. {
  543. path: 'menu1-1-1',
  544. name: 'Menu111',
  545. component: 'views/Level/Menu111',
  546. status: Mock.Random.integer(0, 1),
  547. id: 9,
  548. permission: ['edit', 'add', 'delete'],
  549. meta: {
  550. title: '菜单1-1-1',
  551. permission: ['edit', 'add', 'delete']
  552. }
  553. }
  554. ]
  555. },
  556. {
  557. path: 'menu1-2',
  558. name: 'Menu12',
  559. component: 'views/Level/Menu12',
  560. status: Mock.Random.integer(0, 1),
  561. id: 10,
  562. permission: ['edit', 'add', 'delete'],
  563. meta: {
  564. title: '菜单1-2',
  565. permission: ['edit', 'add', 'delete']
  566. }
  567. }
  568. ]
  569. },
  570. {
  571. path: 'menu2',
  572. name: 'Menu2Demo',
  573. component: 'views/Level/Menu2',
  574. status: Mock.Random.integer(0, 1),
  575. id: 11,
  576. permission: ['edit', 'add', 'delete'],
  577. meta: {
  578. title: '菜单2',
  579. permission: ['edit', 'add', 'delete']
  580. }
  581. }
  582. ]
  583. }
  584. ],
  585. [
  586. {
  587. path: '/example',
  588. component: '#',
  589. redirect: '/example/example-dialog',
  590. name: 'Example',
  591. status: Mock.Random.integer(0, 1),
  592. id: 12,
  593. meta: {
  594. title: '综合示例',
  595. icon: 'ep:management',
  596. alwaysShow: true
  597. },
  598. children: [
  599. {
  600. path: 'example-detail',
  601. component: 'views/Example/Page/ExampleDetail',
  602. name: 'ExampleDetail',
  603. status: Mock.Random.integer(0, 1),
  604. id: 17,
  605. permission: ['edit', 'add', 'delete'],
  606. meta: {
  607. title: '综合示例-详情',
  608. noTagsView: true,
  609. noCache: true,
  610. hidden: true,
  611. showMainRoute: true,
  612. activeMenu: '/example/example-page',
  613. permission: ['edit', 'add', 'delete']
  614. }
  615. }
  616. ]
  617. }
  618. ]
  619. ]
  620. for (let i = 0; i < 4; i++) {
  621. List.push(
  622. Mock.mock({
  623. id: toAnyString(),
  624. // timestamp: +Mock.Random.date('T'),
  625. roleName: roleNames[i],
  626. role: '@first',
  627. status: Mock.Random.integer(0, 1),
  628. createTime: '@datetime',
  629. remark: '@cword(10, 15)',
  630. menu: menus[i]
  631. })
  632. )
  633. }
  634. export default [
  635. // 列表接口
  636. {
  637. url: '/role/list',
  638. method: 'get',
  639. timeout,
  640. response: ({ query }) => {
  641. const { roleName } = query
  642. return {
  643. data: {
  644. code: code,
  645. data: roleName === 'admin' ? adminList : testList
  646. }
  647. }
  648. }
  649. },
  650. {
  651. url: '/role/table',
  652. method: 'get',
  653. timeout,
  654. response: () => {
  655. return {
  656. data: {
  657. code: code,
  658. data: {
  659. list: List,
  660. total: 4
  661. }
  662. }
  663. }
  664. }
  665. }
  666. ] as MockMethod[]