import { createRouter, createWebHashHistory } from 'vue-router' import type { RouteRecordRaw } from 'vue-router' import type { App } from 'vue' import { Layout } from '@/utils/routerHelper' import { useI18n } from '@/hooks/web/useI18n' const { t } = useI18n() export const constantRouterMap: AppRouteRecordRaw[] = [ { path: '/', component: Layout, redirect: '/version/version', name: 'Root', meta: { hidden: true } }, { path: '/redirect', component: Layout, name: 'Redirect', children: [ { path: '/redirect/:path(.*)', name: 'Redirect', component: () => import('@/views/Redirect/Redirect.vue'), meta: {} } ], meta: { hidden: true, noTagsView: true } }, { path: '/login', component: () => import('@/views/Login/Login.vue'), name: 'Login', meta: { hidden: true, title: t('router.login'), noTagsView: true } }, { path: '/404', component: () => import('@/views/Error/404.vue'), name: 'NoFind', meta: { hidden: true, title: '404', noTagsView: true } } ] export const asyncRouterMap: AppRouteRecordRaw[] = [ { path: '/version', name: 'Version', component: Layout, redirect: '/version/version/version_server', meta: { title: t('router.version'), icon: 'vi-cib:telegram-plane', alwaysShow: true }, children: [ { path: 'version', name: 'VersionRoot', component: Layout, // 🔥 这里变成父级 redirect: '/version/version/version_server', meta: { title: t('router.version_list'), alwaysShow: true }, children: [ { path: 'version_server', name: 'VersionServer', component: () => import('@/views/Version/VersionServer.vue'), meta: { title: t('router.version_server'), noCache: true } } /*, { path: 'version_client', name: 'VersionClient', component: () => import('@/views/Version/VersionClient.vue'), meta: { title: t('router.version_client'), noCache: true } }*/ ] }, { path: 'test', component: () => import('@/views/Version/Test.vue'), name: 'VersionTest', meta: { title: t('router.version_test'), noCache: true } } ] }, { path: '/channel', name: 'Channel', component: Layout, redirect: '/channel/manage', meta: { title: t('router.channel'), icon: 'ep:share', alwaysShow: true }, children: [ { path: 'manage', name: 'ChannelManage', component: () => import('@/views/Channel/ChannelManage.vue'), meta: { title: t('router.channel_manage'), noCache: true } } ] } ] const router = createRouter({ history: createWebHashHistory(), strict: true, routes: constantRouterMap as RouteRecordRaw[], scrollBehavior: () => ({ left: 0, top: 0 }) }) export const resetRouter = (): void => { const resetWhiteNameList = ['Redirect', 'Login', 'NoFind', 'Root'] router.getRoutes().forEach((route) => { const { name } = route if (name && !resetWhiteNameList.includes(name as string)) { router.hasRoute(name) && router.removeRoute(name) } }) } export const setupRouter = (app: App) => { app.use(router) } export default router