index.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import type { App } from 'vue'
  2. import type { RouteRecordRaw } from 'vue-router'
  3. import { createRouter, createWebHistory } from 'vue-router'
  4. import remainingRouter from './modules/remaining'
  5. import { Layout } from '@/utils/routerHelper'
  6. const collectRouteNames = (routes: RouteRecordRaw[], names = new Set<string>()) => {
  7. routes.forEach((route) => {
  8. if (route.name) names.add(route.name as string)
  9. if (route.children?.length) collectRouteNames(route.children as RouteRecordRaw[], names)
  10. })
  11. return names
  12. }
  13. const staticRouteNames = collectRouteNames(remainingRouter as RouteRecordRaw[])
  14. const qmsFallbackRoutes: RouteRecordRaw[] = [
  15. { path: 'iqc/apply/list', name: 'IqcApplicationList', component: () => import('@/views/qms/ApplicationList.vue'), meta: { module: 'iqc', title: '来料检验申请', noCache: true, hidden: true, canTo: true, activeMenu: '/qms' } },
  16. { path: 'ipqc/apply/list', name: 'IpqcApplicationList', component: () => import('@/views/qms/ApplicationList.vue'), meta: { module: 'ipqc', title: '过程检验申请', noCache: true, hidden: true, canTo: true, activeMenu: '/qms' } },
  17. { path: 'fqc/apply/list', name: 'FqcApplicationList', component: () => import('@/views/qms/ApplicationList.vue'), meta: { module: 'fqc', title: '成品检验申请', noCache: true, hidden: true, canTo: true, activeMenu: '/qms' } },
  18. { path: 'iqc/task/list', name: 'IqcTaskList', component: () => import('@/views/qms/TaskList.vue'), meta: { module: 'iqc', title: '来料检验任务', noCache: true, hidden: true, canTo: true, activeMenu: '/qms' } },
  19. { path: 'ipqc/task/list', name: 'IpqcTaskList', component: () => import('@/views/qms/TaskList.vue'), meta: { module: 'ipqc', title: '过程检验任务', noCache: true, hidden: true, canTo: true, activeMenu: '/qms' } },
  20. { path: 'fqc/task/list', name: 'FqcTaskList', component: () => import('@/views/qms/TaskList.vue'), meta: { module: 'fqc', title: '成品检验任务', noCache: true, hidden: true, canTo: true, activeMenu: '/qms' } }
  21. ]
  22. // 创建路由实例
  23. const router = createRouter({
  24. history: createWebHistory(import.meta.env.VITE_BASE_PATH), // createWebHashHistory URL带#,createWebHistory URL不带#
  25. strict: true,
  26. routes: remainingRouter as RouteRecordRaw[],
  27. scrollBehavior: () => ({ left: 0, top: 0 })
  28. })
  29. export const resetRouter = (): void => {
  30. const resetWhiteNameList = ['Redirect', 'Login', 'NoFound', 'Home']
  31. router.getRoutes().forEach((route) => {
  32. const { name } = route
  33. if (name && !resetWhiteNameList.includes(name as string) && !staticRouteNames.has(name as string)) {
  34. router.hasRoute(name) && router.removeRoute(name)
  35. }
  36. })
  37. }
  38. export const ensureQmsRoutes = () => {
  39. let parentName = router.getRoutes().find((route) => route.path === '/qms' && route.name)?.name as string | undefined
  40. const ensureParent = () => {
  41. if (parentName && router.hasRoute(parentName)) return parentName
  42. if (!router.hasRoute('QmsCenter')) {
  43. router.addRoute({ path: '/qms', component: Layout, name: 'QmsCenter', meta: { hidden: true } })
  44. }
  45. parentName = 'QmsCenter'
  46. return parentName
  47. }
  48. qmsFallbackRoutes.forEach((route) => {
  49. const fullPath = `/qms/${route.path}`
  50. if (router.getRoutes().some((r) => r.path === fullPath)) {
  51. return
  52. }
  53. if (route.name && router.hasRoute(route.name as string)) {
  54. router.removeRoute(route.name as string)
  55. }
  56. router.addRoute(ensureParent(), route)
  57. })
  58. }
  59. export const setupRouter = (app: App<Element>) => {
  60. app.use(router)
  61. ensureQmsRoutes()
  62. }
  63. export default router