demos.ts 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. import type { RouteRecordRaw } from 'vue-router';
  2. import { $t } from '@vben/locales/helper';
  3. import { BasicLayout, IFrameView } from '#/layouts';
  4. const routes: RouteRecordRaw[] = [
  5. {
  6. component: BasicLayout,
  7. meta: {
  8. icon: 'ic:baseline-view-in-ar',
  9. keepAlive: true,
  10. order: 1000,
  11. title: $t('page.demos.title'),
  12. },
  13. name: 'Demos',
  14. path: '/demos',
  15. redirect: '/demos/access/frontend',
  16. children: [
  17. {
  18. meta: {
  19. icon: 'mdi:shield-key-outline',
  20. title: $t('page.demos.access.title'),
  21. },
  22. name: 'Access',
  23. path: '/access',
  24. redirect: '/access/frontend',
  25. children: [
  26. {
  27. name: 'AccessFrontend',
  28. path: 'frontend',
  29. meta: {
  30. icon: 'mdi:table-key',
  31. title: $t('page.demos.access.frontend-control'),
  32. },
  33. children: [
  34. {
  35. name: 'AccessFrontendPageControl',
  36. path: 'page-control',
  37. component: () =>
  38. import('#/views/demos/access/frontend/index.vue'),
  39. meta: {
  40. icon: 'mdi:page-previous-outline',
  41. title: $t('page.demos.access.page'),
  42. },
  43. },
  44. {
  45. name: 'AccessFrontendButtonControl',
  46. path: 'button-control',
  47. component: () =>
  48. import('#/views/demos/access/frontend/button-control.vue'),
  49. meta: {
  50. icon: 'mdi:button-cursor',
  51. title: $t('page.demos.access.button'),
  52. },
  53. },
  54. {
  55. name: 'AccessFrontendTest1',
  56. path: 'access-test-1',
  57. component: () =>
  58. import('#/views/demos/access/frontend/access-test-1.vue'),
  59. meta: {
  60. authority: ['admin'],
  61. icon: 'mdi:button-cursor',
  62. title: $t('page.demos.access.access-test-1'),
  63. },
  64. },
  65. {
  66. name: 'AccessFrontendTest2',
  67. path: 'access-test-2',
  68. component: () =>
  69. import('#/views/demos/access/frontend/access-test-2.vue'),
  70. meta: {
  71. authority: ['user'],
  72. icon: 'mdi:button-cursor',
  73. title: $t('page.demos.access.access-test-2'),
  74. },
  75. },
  76. ],
  77. },
  78. {
  79. name: 'AccessBackend',
  80. path: 'backend',
  81. component: () => import('#/views/demos/access/backend/index.vue'),
  82. meta: {
  83. icon: 'mdi:cloud-key-outline',
  84. title: $t('page.demos.access.backend-control'),
  85. },
  86. children: [
  87. {
  88. name: 'AccessBackendPageControl',
  89. path: 'page-control',
  90. component: () =>
  91. import('#/views/demos/access/frontend/index.vue'),
  92. meta: {
  93. icon: 'mdi:page-previous-outline',
  94. title: $t('page.demos.access.page'),
  95. },
  96. },
  97. {
  98. name: 'AccessBackendButtonControl',
  99. path: 'button-control',
  100. component: () =>
  101. import('#/views/demos/access/frontend/button-control.vue'),
  102. meta: {
  103. icon: 'mdi:button-cursor',
  104. title: $t('page.demos.access.button'),
  105. },
  106. },
  107. ],
  108. },
  109. ],
  110. },
  111. {
  112. meta: {
  113. icon: 'mdi:lightbulb-error-outline',
  114. title: $t('page.demos.fallback.title'),
  115. },
  116. name: 'Fallback',
  117. path: '/fallback',
  118. redirect: '/fallback/403',
  119. children: [
  120. {
  121. name: 'Fallback403',
  122. path: '403',
  123. component: () =>
  124. import('#/views/_essential/fallback/forbidden.vue'),
  125. meta: {
  126. icon: 'mdi:do-not-disturb-alt',
  127. title: '403',
  128. },
  129. },
  130. {
  131. name: 'Fallback404',
  132. path: '404',
  133. component: () =>
  134. import('#/views/_essential/fallback/not-found.vue'),
  135. meta: {
  136. icon: 'mdi:table-off',
  137. title: '404',
  138. },
  139. },
  140. {
  141. name: 'Fallback500',
  142. path: '500',
  143. component: () =>
  144. import('#/views/_essential/fallback/internal-error.vue'),
  145. meta: {
  146. icon: 'mdi:server-network-off',
  147. title: '500',
  148. },
  149. },
  150. {
  151. name: 'FallbackOffline',
  152. path: 'offline',
  153. component: () => import('#/views/_essential/fallback/offline.vue'),
  154. meta: {
  155. icon: 'mdi:offline',
  156. title: $t('fallback.offline'),
  157. },
  158. },
  159. ],
  160. },
  161. {
  162. meta: {
  163. icon: 'ic:round-settings-input-composite',
  164. title: $t('page.demos.outside.title'),
  165. },
  166. name: 'Outside',
  167. path: '/outside',
  168. redirect: '/outside/iframe',
  169. children: [
  170. {
  171. name: 'iframe',
  172. path: 'iframe',
  173. meta: {
  174. icon: 'mdi:newspaper-variant-outline',
  175. title: $t('page.demos.outside.embedded'),
  176. },
  177. redirect: '/outside/iframe/vue-document',
  178. children: [
  179. {
  180. name: 'VueDocument',
  181. path: 'vue-document',
  182. component: IFrameView,
  183. meta: {
  184. icon: 'logos:vue',
  185. iframeSrc: 'https://cn.vuejs.org/',
  186. keepAlive: true,
  187. title: 'Vue',
  188. },
  189. },
  190. {
  191. name: 'Tailwindcss',
  192. path: 'tailwindcss',
  193. component: IFrameView,
  194. meta: {
  195. icon: 'devicon:tailwindcss',
  196. iframeSrc: 'https://tailwindcss.com/',
  197. // keepAlive: true,
  198. title: 'Tailwindcss',
  199. },
  200. },
  201. ],
  202. },
  203. {
  204. name: 'ExternalLink',
  205. path: 'external-link',
  206. meta: {
  207. icon: 'mdi:newspaper-variant-multiple-outline',
  208. title: $t('page.demos.outside.external-link'),
  209. },
  210. redirect: '/outside/external-link/vite',
  211. children: [
  212. {
  213. name: 'Vite',
  214. path: 'vite',
  215. component: IFrameView,
  216. meta: {
  217. icon: 'logos:vitejs',
  218. link: 'https://vitejs.dev/',
  219. title: 'Vite',
  220. },
  221. },
  222. {
  223. name: 'VueUse',
  224. path: 'vue-use',
  225. component: IFrameView,
  226. meta: {
  227. icon: 'logos:vueuse',
  228. link: 'https://vueuse.org',
  229. title: 'VueUse',
  230. },
  231. },
  232. ],
  233. },
  234. ],
  235. },
  236. {
  237. meta: {
  238. icon: 'ic:round-menu',
  239. title: $t('page.demos.nested.title'),
  240. },
  241. name: 'Nested',
  242. path: 'nested',
  243. redirect: '/demos/nested/menu1',
  244. children: [
  245. {
  246. name: 'Menu1',
  247. path: 'menu1',
  248. component: () => import('#/views/demos/nested/menu-1.vue'),
  249. meta: {
  250. icon: 'ic:round-menu',
  251. keepAlive: true,
  252. title: $t('page.demos.nested.menu1'),
  253. },
  254. },
  255. {
  256. name: 'Menu2',
  257. path: 'menu2',
  258. meta: {
  259. icon: 'ic:round-menu',
  260. keepAlive: true,
  261. title: $t('page.demos.nested.menu2'),
  262. },
  263. redirect: '/nested/menu2/menu2-1',
  264. children: [
  265. {
  266. name: 'Menu21',
  267. path: 'menu2-1',
  268. component: () => import('#/views/demos/nested/menu-2-1.vue'),
  269. meta: {
  270. icon: 'ic:round-menu',
  271. keepAlive: true,
  272. title: $t('page.demos.nested.menu21'),
  273. },
  274. },
  275. ],
  276. },
  277. {
  278. name: 'Menu3',
  279. path: 'menu3',
  280. meta: {
  281. icon: 'ic:round-menu',
  282. title: $t('page.demos.nested.menu3'),
  283. },
  284. redirect: '/nested/menu3/menu3-1',
  285. children: [
  286. {
  287. name: 'Menu31',
  288. path: 'menu3-1',
  289. component: () => import('#/views/demos/nested/menu-3-1.vue'),
  290. meta: {
  291. icon: 'ic:round-menu',
  292. keepAlive: true,
  293. title: $t('page.demos.nested.menu31'),
  294. },
  295. },
  296. {
  297. name: 'Menu32',
  298. path: 'menu3-2',
  299. meta: {
  300. icon: 'ic:round-menu',
  301. title: $t('page.demos.nested.menu32'),
  302. },
  303. redirect: '/nested/menu3/menu3-2/menu3-2-1',
  304. children: [
  305. {
  306. name: 'Menu321',
  307. path: 'menu3-2-1',
  308. component: () =>
  309. import('#/views/demos/nested/menu-3-2-1.vue'),
  310. meta: {
  311. icon: 'ic:round-menu',
  312. keepAlive: true,
  313. title: $t('page.demos.nested.menu321'),
  314. },
  315. },
  316. ],
  317. },
  318. ],
  319. },
  320. ],
  321. },
  322. ],
  323. },
  324. ];
  325. export default routes;