demos.ts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. import type { RouteRecordRaw } from 'vue-router';
  2. import { BasicLayout, IFrameView } from '#/layouts';
  3. import { $t } from '#/locales';
  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',
  16. children: [
  17. {
  18. meta: {
  19. icon: 'mdi:shield-key-outline',
  20. title: $t('page.demos.access.frontendPermissions'),
  21. },
  22. name: 'Access',
  23. path: 'access',
  24. redirect: '/demos/access/page-control',
  25. children: [
  26. {
  27. name: 'AccessPageControl',
  28. path: 'page-control',
  29. component: () => import('#/views/demos/access/index.vue'),
  30. meta: {
  31. icon: 'mdi:page-previous-outline',
  32. title: $t('page.demos.access.pageAccess'),
  33. },
  34. },
  35. {
  36. name: 'AccessButtonControl',
  37. path: 'button-control',
  38. component: () => import('#/views/demos/access/button-control.vue'),
  39. meta: {
  40. icon: 'mdi:button-cursor',
  41. title: $t('page.demos.access.buttonControl'),
  42. },
  43. },
  44. {
  45. name: 'AccessMenuVisible403',
  46. path: 'menu-visible-403',
  47. component: () =>
  48. import('#/views/demos/access/menu-visible-403.vue'),
  49. meta: {
  50. authority: ['no-body'],
  51. icon: 'mdi:button-cursor',
  52. menuVisibleWithForbidden: true,
  53. title: $t('page.demos.access.menuVisible403'),
  54. },
  55. },
  56. {
  57. name: 'AccessSuperVisible',
  58. path: 'super-visible',
  59. component: () => import('#/views/demos/access/super-visible.vue'),
  60. meta: {
  61. authority: ['super'],
  62. icon: 'mdi:button-cursor',
  63. title: $t('page.demos.access.superVisible'),
  64. },
  65. },
  66. {
  67. name: 'AccessAdminVisible',
  68. path: 'admin-visible',
  69. component: () => import('#/views/demos/access/admin-visible.vue'),
  70. meta: {
  71. authority: ['admin'],
  72. icon: 'mdi:button-cursor',
  73. title: $t('page.demos.access.adminVisible'),
  74. },
  75. },
  76. {
  77. name: 'AccessUserVisible',
  78. path: 'user-visible',
  79. component: () => import('#/views/demos/access/user-visible.vue'),
  80. meta: {
  81. authority: ['user'],
  82. icon: 'mdi:button-cursor',
  83. title: $t('page.demos.access.userVisible'),
  84. },
  85. },
  86. ],
  87. },
  88. {
  89. meta: {
  90. icon: 'mdi:feature-highlight',
  91. title: $t('page.demos.features.title'),
  92. },
  93. name: 'Features',
  94. path: 'features',
  95. redirect: '/demos/features/hide-menu-children',
  96. children: [
  97. {
  98. name: 'HideChildrenInMenuParent',
  99. path: 'hide-menu-children',
  100. component: () =>
  101. import('#/views/demos/features/hide-menu-children/parent.vue'),
  102. meta: {
  103. hideChildrenInMenu: true,
  104. icon: 'ic:round-menu',
  105. title: 'page.demos.features.hideChildrenInMenu',
  106. },
  107. children: [
  108. {
  109. name: 'HideChildrenInMenuChildren',
  110. path: 'hide-children-in-menu',
  111. component: () =>
  112. import(
  113. '#/views/demos/features/hide-menu-children/children.vue'
  114. ),
  115. },
  116. ],
  117. },
  118. {
  119. name: 'LoginExpired',
  120. path: 'login-expired',
  121. component: () =>
  122. import('#/views/demos/features/login-expired/index.vue'),
  123. meta: {
  124. icon: 'mdi:encryption-expiration',
  125. title: $t('page.demos.features.loginExpired'),
  126. },
  127. },
  128. {
  129. name: 'BreadcrumbDemos',
  130. path: 'breadcrumb',
  131. redirect: '/demos/features/breadcrumb/lateral',
  132. meta: {
  133. icon: 'lucide:navigation',
  134. title: $t('page.demos.features.breadcrumbNavigation'),
  135. },
  136. children: [
  137. {
  138. name: 'BreadcrumbLateral',
  139. path: 'lateral',
  140. component: () =>
  141. import('#/views/demos/features/breadcrumb/lateral.vue'),
  142. meta: {
  143. icon: 'lucide:navigation',
  144. title: $t('page.demos.features.breadcrumbLateral'),
  145. },
  146. },
  147. {
  148. name: 'BreadcrumbLateralDetail',
  149. path: 'lateral-detail',
  150. component: () =>
  151. import(
  152. '#/views/demos/features/breadcrumb/lateral-detail.vue'
  153. ),
  154. meta: {
  155. activePath: '/demos/features/breadcrumb/lateral',
  156. hideInMenu: true,
  157. title: $t('page.demos.features.breadcrumbLateralDetail'),
  158. },
  159. },
  160. {
  161. name: 'BreadcrumbLevel',
  162. path: 'level',
  163. redirect: '/demos/features/breadcrumb/level/detail',
  164. meta: {
  165. icon: 'lucide:navigation',
  166. title: $t('page.demos.features.breadcrumbLevel'),
  167. },
  168. children: [
  169. {
  170. name: 'BreadcrumbLevelDetail',
  171. path: 'detail',
  172. component: () =>
  173. import(
  174. '#/views/demos/features/breadcrumb/level-detail.vue'
  175. ),
  176. meta: {
  177. title: $t('page.demos.features.breadcrumbLevelDetail'),
  178. },
  179. },
  180. ],
  181. },
  182. ],
  183. },
  184. ],
  185. },
  186. {
  187. meta: {
  188. icon: 'mdi:lightbulb-error-outline',
  189. title: $t('page.demos.fallback.title'),
  190. },
  191. name: 'Fallback',
  192. path: 'fallback',
  193. redirect: '/demos/fallback/403',
  194. children: [
  195. {
  196. name: 'Fallback403',
  197. path: '403',
  198. component: () => import('#/views/_core/fallback/forbidden.vue'),
  199. meta: {
  200. icon: 'mdi:do-not-disturb-alt',
  201. title: '403',
  202. },
  203. },
  204. {
  205. name: 'Fallback404',
  206. path: '404',
  207. component: () => import('#/views/_core/fallback/not-found.vue'),
  208. meta: {
  209. icon: 'mdi:table-off',
  210. title: '404',
  211. },
  212. },
  213. {
  214. name: 'Fallback500',
  215. path: '500',
  216. component: () =>
  217. import('#/views/_core/fallback/internal-error.vue'),
  218. meta: {
  219. icon: 'mdi:server-network-off',
  220. title: '500',
  221. },
  222. },
  223. {
  224. name: 'FallbackOffline',
  225. path: 'offline',
  226. component: () => import('#/views/_core/fallback/offline.vue'),
  227. meta: {
  228. icon: 'mdi:offline',
  229. title: $t('fallback.offline'),
  230. },
  231. },
  232. ],
  233. },
  234. {
  235. meta: {
  236. badgeType: 'dot',
  237. badgeVariants: 'destructive',
  238. icon: 'lucide:circle-dot',
  239. title: $t('page.demos.badge.title'),
  240. },
  241. name: 'BadgeDemo',
  242. path: 'badge',
  243. redirect: '/demos/badge/dot',
  244. children: [
  245. {
  246. name: 'BadgeDotDemo',
  247. component: () => import('#/views/demos/badge/index.vue'),
  248. path: 'dot',
  249. meta: {
  250. badgeType: 'dot',
  251. icon: 'lucide:square-dot',
  252. title: $t('page.demos.badge.dot'),
  253. },
  254. },
  255. {
  256. name: 'BadgeTextDemo',
  257. component: () => import('#/views/demos/badge/index.vue'),
  258. path: 'text',
  259. meta: {
  260. badge: '10',
  261. icon: 'lucide:square-dot',
  262. title: $t('page.demos.badge.text'),
  263. },
  264. },
  265. {
  266. name: 'BadgeColorDemo',
  267. component: () => import('#/views/demos/badge/index.vue'),
  268. path: 'color',
  269. meta: {
  270. badge: 'Hot',
  271. badgeVariants: 'destructive',
  272. icon: 'lucide:square-dot',
  273. title: $t('page.demos.badge.color'),
  274. },
  275. },
  276. ],
  277. },
  278. {
  279. meta: {
  280. icon: 'ic:round-settings-input-composite',
  281. title: $t('page.demos.outside.title'),
  282. },
  283. name: 'Outside',
  284. path: 'outside',
  285. redirect: '/demos/outside/iframe',
  286. children: [
  287. {
  288. name: 'iframe',
  289. path: 'iframe',
  290. meta: {
  291. icon: 'mdi:newspaper-variant-outline',
  292. title: $t('page.demos.outside.embedded'),
  293. },
  294. redirect: '/demos/outside/iframe/vue-document',
  295. children: [
  296. {
  297. name: 'VueDocument',
  298. path: 'vue-document',
  299. component: IFrameView,
  300. meta: {
  301. icon: 'logos:vue',
  302. iframeSrc: 'https://cn.vuejs.org/',
  303. keepAlive: true,
  304. title: 'Vue',
  305. },
  306. },
  307. {
  308. name: 'Tailwindcss',
  309. path: 'tailwindcss',
  310. component: IFrameView,
  311. meta: {
  312. icon: 'devicon:tailwindcss',
  313. iframeSrc: 'https://tailwindcss.com/',
  314. // keepAlive: true,
  315. title: 'Tailwindcss',
  316. },
  317. },
  318. ],
  319. },
  320. {
  321. name: 'ExternalLink',
  322. path: 'external-link',
  323. meta: {
  324. icon: 'mdi:newspaper-variant-multiple-outline',
  325. title: $t('page.demos.outside.externalLink'),
  326. },
  327. redirect: '/demos/outside/external-link/vite',
  328. children: [
  329. {
  330. name: 'Vite',
  331. path: 'vite',
  332. component: IFrameView,
  333. meta: {
  334. icon: 'logos:vitejs',
  335. link: 'https://vitejs.dev/',
  336. title: 'Vite',
  337. },
  338. },
  339. {
  340. name: 'VueUse',
  341. path: 'vue-use',
  342. component: IFrameView,
  343. meta: {
  344. icon: 'logos:vueuse',
  345. link: 'https://vueuse.org',
  346. title: 'VueUse',
  347. },
  348. },
  349. ],
  350. },
  351. ],
  352. },
  353. {
  354. meta: {
  355. icon: 'ic:round-menu',
  356. title: $t('page.demos.nested.title'),
  357. },
  358. name: 'Nested',
  359. path: 'nested',
  360. redirect: '/demos/nested/menu1',
  361. children: [
  362. {
  363. name: 'Menu1',
  364. path: 'menu1',
  365. component: () => import('#/views/demos/nested/menu-1.vue'),
  366. meta: {
  367. icon: 'ic:round-menu',
  368. keepAlive: true,
  369. title: $t('page.demos.nested.menu1'),
  370. },
  371. },
  372. {
  373. name: 'Menu2',
  374. path: 'menu2',
  375. meta: {
  376. icon: 'ic:round-menu',
  377. keepAlive: true,
  378. title: $t('page.demos.nested.menu2'),
  379. },
  380. redirect: '/demos/nested/menu2/menu2-1',
  381. children: [
  382. {
  383. name: 'Menu21',
  384. path: 'menu2-1',
  385. component: () => import('#/views/demos/nested/menu-2-1.vue'),
  386. meta: {
  387. icon: 'ic:round-menu',
  388. keepAlive: true,
  389. title: $t('page.demos.nested.menu2_1'),
  390. },
  391. },
  392. ],
  393. },
  394. {
  395. name: 'Menu3',
  396. path: 'menu3',
  397. meta: {
  398. icon: 'ic:round-menu',
  399. title: $t('page.demos.nested.menu3'),
  400. },
  401. redirect: '/demos/nested/menu3/menu3-1',
  402. children: [
  403. {
  404. name: 'Menu31',
  405. path: 'menu3-1',
  406. component: () => import('#/views/demos/nested/menu-3-1.vue'),
  407. meta: {
  408. icon: 'ic:round-menu',
  409. keepAlive: true,
  410. title: $t('page.demos.nested.menu3_1'),
  411. },
  412. },
  413. {
  414. name: 'Menu32',
  415. path: 'menu3-2',
  416. meta: {
  417. icon: 'ic:round-menu',
  418. title: $t('page.demos.nested.menu3_2'),
  419. },
  420. redirect: '/demos/nested/menu3/menu3-2/menu3-2-1',
  421. children: [
  422. {
  423. name: 'Menu321',
  424. path: 'menu3-2-1',
  425. component: () =>
  426. import('#/views/demos/nested/menu-3-2-1.vue'),
  427. meta: {
  428. icon: 'ic:round-menu',
  429. keepAlive: true,
  430. title: $t('page.demos.nested.menu3_2_1'),
  431. },
  432. },
  433. ],
  434. },
  435. ],
  436. },
  437. ],
  438. },
  439. ],
  440. },
  441. ];
  442. export default routes;