demos.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  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-children-in-menu',
  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. },
  130. {
  131. meta: {
  132. icon: 'mdi:lightbulb-error-outline',
  133. title: $t('page.demos.fallback.title'),
  134. },
  135. name: 'Fallback',
  136. path: 'fallback',
  137. redirect: '/demos/fallback/403',
  138. children: [
  139. {
  140. name: 'Fallback403',
  141. path: '403',
  142. component: () => import('#/views/_core/fallback/forbidden.vue'),
  143. meta: {
  144. icon: 'mdi:do-not-disturb-alt',
  145. title: '403',
  146. },
  147. },
  148. {
  149. name: 'Fallback404',
  150. path: '404',
  151. component: () => import('#/views/_core/fallback/not-found.vue'),
  152. meta: {
  153. icon: 'mdi:table-off',
  154. title: '404',
  155. },
  156. },
  157. {
  158. name: 'Fallback500',
  159. path: '500',
  160. component: () =>
  161. import('#/views/_core/fallback/internal-error.vue'),
  162. meta: {
  163. icon: 'mdi:server-network-off',
  164. title: '500',
  165. },
  166. },
  167. {
  168. name: 'FallbackOffline',
  169. path: 'offline',
  170. component: () => import('#/views/_core/fallback/offline.vue'),
  171. meta: {
  172. icon: 'mdi:offline',
  173. title: $t('fallback.offline'),
  174. },
  175. },
  176. ],
  177. },
  178. {
  179. meta: {
  180. icon: 'lucide:circle-dot',
  181. title: $t('page.demos.badge.title'),
  182. },
  183. name: 'BadgeDemo',
  184. path: 'badge',
  185. redirect: '/demos/badge/dot',
  186. children: [
  187. {
  188. name: 'BadgeDotDemo',
  189. component: () => import('#/views/demos/badge/index.vue'),
  190. path: 'dot',
  191. meta: {
  192. badgeType: 'dot',
  193. icon: 'lucide:square-dot',
  194. title: $t('page.demos.badge.dot'),
  195. },
  196. },
  197. {
  198. name: 'BadgeTextDemo',
  199. component: () => import('#/views/demos/badge/index.vue'),
  200. path: 'text',
  201. meta: {
  202. badge: 'New',
  203. icon: 'lucide:square-dot',
  204. title: $t('page.demos.badge.text'),
  205. },
  206. },
  207. {
  208. name: 'BadgeColorDemo',
  209. component: () => import('#/views/demos/badge/index.vue'),
  210. path: 'color',
  211. meta: {
  212. badge: 'Hot',
  213. badgeVariants: 'destructive',
  214. icon: 'lucide:square-dot',
  215. title: $t('page.demos.badge.color'),
  216. },
  217. },
  218. ],
  219. },
  220. {
  221. meta: {
  222. icon: 'ic:round-settings-input-composite',
  223. title: $t('page.demos.outside.title'),
  224. },
  225. name: 'Outside',
  226. path: 'outside',
  227. redirect: '/demos/outside/iframe',
  228. children: [
  229. {
  230. name: 'iframe',
  231. path: 'iframe',
  232. meta: {
  233. icon: 'mdi:newspaper-variant-outline',
  234. title: $t('page.demos.outside.embedded'),
  235. },
  236. redirect: '/demos/outside/iframe/vue-document',
  237. children: [
  238. {
  239. name: 'VueDocument',
  240. path: 'vue-document',
  241. component: IFrameView,
  242. meta: {
  243. icon: 'logos:vue',
  244. iframeSrc: 'https://cn.vuejs.org/',
  245. keepAlive: true,
  246. title: 'Vue',
  247. },
  248. },
  249. {
  250. name: 'Tailwindcss',
  251. path: 'tailwindcss',
  252. component: IFrameView,
  253. meta: {
  254. icon: 'devicon:tailwindcss',
  255. iframeSrc: 'https://tailwindcss.com/',
  256. // keepAlive: true,
  257. title: 'Tailwindcss',
  258. },
  259. },
  260. ],
  261. },
  262. {
  263. name: 'ExternalLink',
  264. path: 'external-link',
  265. meta: {
  266. icon: 'mdi:newspaper-variant-multiple-outline',
  267. title: $t('page.demos.outside.externalLink'),
  268. },
  269. redirect: '/demos/outside/external-link/vite',
  270. children: [
  271. {
  272. name: 'Vite',
  273. path: 'vite',
  274. component: IFrameView,
  275. meta: {
  276. icon: 'logos:vitejs',
  277. link: 'https://vitejs.dev/',
  278. title: 'Vite',
  279. },
  280. },
  281. {
  282. name: 'VueUse',
  283. path: 'vue-use',
  284. component: IFrameView,
  285. meta: {
  286. icon: 'logos:vueuse',
  287. link: 'https://vueuse.org',
  288. title: 'VueUse',
  289. },
  290. },
  291. ],
  292. },
  293. ],
  294. },
  295. {
  296. meta: {
  297. icon: 'ic:round-menu',
  298. title: $t('page.demos.nested.title'),
  299. },
  300. name: 'Nested',
  301. path: 'nested',
  302. redirect: '/demos/nested/menu1',
  303. children: [
  304. {
  305. name: 'Menu1',
  306. path: 'menu1',
  307. component: () => import('#/views/demos/nested/menu-1.vue'),
  308. meta: {
  309. icon: 'ic:round-menu',
  310. keepAlive: true,
  311. title: $t('page.demos.nested.menu1'),
  312. },
  313. },
  314. {
  315. name: 'Menu2',
  316. path: 'menu2',
  317. meta: {
  318. icon: 'ic:round-menu',
  319. keepAlive: true,
  320. title: $t('page.demos.nested.menu2'),
  321. },
  322. redirect: '/demos/nested/menu2/menu2-1',
  323. children: [
  324. {
  325. name: 'Menu21',
  326. path: 'menu2-1',
  327. component: () => import('#/views/demos/nested/menu-2-1.vue'),
  328. meta: {
  329. icon: 'ic:round-menu',
  330. keepAlive: true,
  331. title: $t('page.demos.nested.menu2_1'),
  332. },
  333. },
  334. ],
  335. },
  336. {
  337. name: 'Menu3',
  338. path: 'menu3',
  339. meta: {
  340. icon: 'ic:round-menu',
  341. title: $t('page.demos.nested.menu3'),
  342. },
  343. redirect: '/demos/nested/menu3/menu3-1',
  344. children: [
  345. {
  346. name: 'Menu31',
  347. path: 'menu3-1',
  348. component: () => import('#/views/demos/nested/menu-3-1.vue'),
  349. meta: {
  350. icon: 'ic:round-menu',
  351. keepAlive: true,
  352. title: $t('page.demos.nested.menu3_1'),
  353. },
  354. },
  355. {
  356. name: 'Menu32',
  357. path: 'menu3-2',
  358. meta: {
  359. icon: 'ic:round-menu',
  360. title: $t('page.demos.nested.menu3_2'),
  361. },
  362. redirect: '/demos/nested/menu3/menu3-2/menu3-2-1',
  363. children: [
  364. {
  365. name: 'Menu321',
  366. path: 'menu3-2-1',
  367. component: () =>
  368. import('#/views/demos/nested/menu-3-2-1.vue'),
  369. meta: {
  370. icon: 'ic:round-menu',
  371. keepAlive: true,
  372. title: $t('page.demos.nested.menu3_2_1'),
  373. },
  374. },
  375. ],
  376. },
  377. ],
  378. },
  379. ],
  380. },
  381. ],
  382. },
  383. ];
  384. export default routes;