feat: 更新路由插件,重构路由获取逻辑并添加新的路由页面
Some checks failed
/ depcheck (push) Successful in 1m35s
/ playwright (push) Successful in 1m56s
/ build-and-deploy-to-vercel (push) Failing after 30s

This commit is contained in:
严浩
2024-12-27 00:02:11 +08:00
parent bc8fc96580
commit b6a51c1245
8 changed files with 69 additions and 40 deletions

View File

@ -84,6 +84,6 @@
} catch (e) {} } catch (e) {}
}; };
s.parentNode.insertBefore(tk, s); s.parentNode.insertBefore(tk, s);
})(document); }) /* (document) */;
</script> </script>
</html> </html>

View File

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { getRoutes } from '@/plugins/router'; import { createGetRoutes } from '@/plugins/router';
import type { MenuItem } from 'primevue/menuitem'; import type { MenuItem } from 'primevue/menuitem';
import type { PanelMenuProps } from 'primevue/panelmenu'; import type { PanelMenuProps } from 'primevue/panelmenu';
@ -13,7 +13,7 @@ const _generateMenuItems = (routes: RouteRecordRaw[]): PanelMenuProps['model'] =
}; };
const cmptItems = computed(() => { const cmptItems = computed(() => {
return getRoutes() return createGetRoutes(router)()
.filter((route) => !route.path.includes('/:')) .filter((route) => !route.path.includes('/:'))
.map((route, index) => { .map((route, index) => {
return { return {

56
src/pages/router.page.vue Normal file
View File

@ -0,0 +1,56 @@
<script setup lang="ts">
import { createGetRoutes, setupLayoutsResult } from '@/plugins/router';
import { routes } from 'vue-router/auto-routes';
const router = useRouter();
const list = [
{
title: 'routes',
json: routes,
},
{
title: 'setupLayoutsResult',
json: setupLayoutsResult,
},
{
title: 'createGetRoutes(router)()',
json: createGetRoutes(router)().map((route) => ({
...route,
instances: undefined,
leaveGuards: undefined,
updateGuards: undefined,
enterCallbacks: undefined,
components: undefined,
})),
},
// {
// title: 'createGetRoutes(router, true)()',
// json: createGetRoutes(router, true)(),
// },
{
title: 'router.getRoutes()',
json: router.getRoutes().map((route) => ({
...route,
instances: undefined,
leaveGuards: undefined,
updateGuards: undefined,
enterCallbacks: undefined,
components: undefined,
})),
},
];
</script>
<template>
<Tabs :value="list[0].title">
<TabList>
<Tab v-for="item in list" :key="item.title" :value="item.title">{{ item.title }}</Tab>
</TabList>
<TabPanels>
<TabPanel v-for="item in list" :key="item.title" :value="item.title">
<pre>{{ item.json }}</pre>
</TabPanel>
</TabPanels>
</Tabs>
</template>
<style scoped></style>

View File

@ -1,11 +0,0 @@
<template>
<div>src/pages/use-second-layout-1/index.page.vue</div>
</template>
<script setup lang="ts"></script>
<style scoped></style>
<route lang="yaml">
meta:
layout: second
</route>

View File

@ -1,11 +0,0 @@
<template>
<div>src/pages/use-second-layout-2.page.vue</div>
</template>
<script setup lang="ts"></script>
<style scoped></style>
<route lang="yaml">
meta:
layout: second
</route>

View File

@ -3,10 +3,10 @@ import { createGetRoutes, setupLayouts } from 'virtual:meta-layouts';
// import { createGetRoutes, setupLayouts } from 'virtual:generated-layouts'; // import { createGetRoutes, setupLayouts } from 'virtual:generated-layouts';
import { createRouter, createWebHistory } from 'vue-router/auto'; import { createRouter, createWebHistory } from 'vue-router/auto';
import { handleHotUpdate, routes } from 'vue-router/auto-routes'; import { handleHotUpdate, routes } from 'vue-router/auto-routes';
const setupLayoutsResult = setupLayouts(routes);
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
routes: /* routes ?? */ setupLayouts(routes), routes: /* routes ?? */ setupLayoutsResult,
strict: true, strict: true,
scrollBehavior: (_to, _from, savedPosition) => { scrollBehavior: (_to, _from, savedPosition) => {
if (savedPosition) { if (savedPosition) {
@ -16,28 +16,19 @@ const router = createRouter({
} }
}, },
}); });
const getRoutes = createGetRoutes(router);
if (import.meta.hot) handleHotUpdate(router); if (import.meta.hot) handleHotUpdate(router);
if ($__DEV__) Object.assign(window, { router }); if ($__DEV__) Object.assign(window, { router });
router.onError((error) => { router.onError((error) => {
console.debug('🚨 [router error]: ', error); console.debug('🚨 [router error]: ', error);
}); });
export { getRoutes, router }; export { router, setupLayoutsResult, createGetRoutes };
export function install({ app }: { app: import('vue').App<Element> }) { export function install({ app }: { app: import('vue').App<Element> }) {
app app
// Register the plugin before the router // Register the plugin before the router
.use(DataLoaderPlugin, { router }) .use(DataLoaderPlugin, { router })
// adding the router will trigger the initial navigation // adding the router will trigger the initial navigation
.use(router); .use(router);
if ('2' === ('1' as never)) {
const getRoutes = createGetRoutes(router);
const setupLayoutsResult = setupLayouts(routes);
console.debug(`routes :>> `, routes);
console.debug(`getRoutes() :>> `, getRoutes()); // 获取路由表但是不包含布局路由
console.debug(`setupLayoutsResult :>> `, setupLayoutsResult);
}
} }
// ======================================================================== // ========================================================================
// =========================== Router Guards ============================== // =========================== Router Guards ==============================

3
typed-router.d.ts vendored
View File

@ -31,10 +31,9 @@ declare module 'vue-router/auto-routes' {
'InfiniteLoading': RouteRecordInfo<'InfiniteLoading', '/infinite-loading', Record<never, never>, Record<never, never>>, 'InfiniteLoading': RouteRecordInfo<'InfiniteLoading', '/infinite-loading', Record<never, never>, Record<never, never>>,
'MdPage': RouteRecordInfo<'MdPage', '/md-page', Record<never, never>, Record<never, never>>, 'MdPage': RouteRecordInfo<'MdPage', '/md-page', Record<never, never>, Record<never, never>>,
'Primevue': RouteRecordInfo<'Primevue', '/primevue', Record<never, never>, Record<never, never>>, 'Primevue': RouteRecordInfo<'Primevue', '/primevue', Record<never, never>, Record<never, never>>,
'Router': RouteRecordInfo<'Router', '/router', Record<never, never>, Record<never, never>>,
'SomePage': RouteRecordInfo<'SomePage', '/some-page', Record<never, never>, Record<never, never>>, 'SomePage': RouteRecordInfo<'SomePage', '/some-page', Record<never, never>, Record<never, never>>,
'TsEnumUtil': RouteRecordInfo<'TsEnumUtil', '/ts-enum-util', Record<never, never>, Record<never, never>>, 'TsEnumUtil': RouteRecordInfo<'TsEnumUtil', '/ts-enum-util', Record<never, never>, Record<never, never>>,
'UseSecondLayout1': RouteRecordInfo<'UseSecondLayout1', '/use-second-layout-1', Record<never, never>, Record<never, never>>,
'UseSecondLayout2': RouteRecordInfo<'UseSecondLayout2', '/use-second-layout-2', Record<never, never>, Record<never, never>>,
'VueMacrosDefineRender': RouteRecordInfo<'VueMacrosDefineRender', '/vue-macros/DefineRender', Record<never, never>, Record<never, never>>, 'VueMacrosDefineRender': RouteRecordInfo<'VueMacrosDefineRender', '/vue-macros/DefineRender', Record<never, never>, Record<never, never>>,
'VueMacrosReactivityTransform': RouteRecordInfo<'VueMacrosReactivityTransform', '/vue-macros/ReactivityTransform', Record<never, never>, Record<never, never>>, 'VueMacrosReactivityTransform': RouteRecordInfo<'VueMacrosReactivityTransform', '/vue-macros/ReactivityTransform', Record<never, never>, Record<never, never>>,
'VueMacrosReusableTemplate': RouteRecordInfo<'VueMacrosReusableTemplate', '/vue-macros/ReusableTemplate', Record<never, never>, Record<never, never>>, 'VueMacrosReusableTemplate': RouteRecordInfo<'VueMacrosReusableTemplate', '/vue-macros/ReusableTemplate', Record<never, never>, Record<never, never>>,

View File

@ -32,7 +32,12 @@ export default defineConfig(({ mode, command }) => {
if (warning.code === 'EVAL' && warning.id?.includes('node_modules/mockjs')) return; if (warning.code === 'EVAL' && warning.id?.includes('node_modules/mockjs')) return;
warn(warning); warn(warning);
}, },
output: env.VITE_SPLIT_CHUNKS === 'true' ? createSplitChunkOutput() : undefined,
// https://cn.rollupjs.org/configuration-options/#output-assetfilenames
// output: env.VITE_SPLIT_CHUNKS === 'true' ? (await import('utils4u/rollup')).createSplitChunkOutput() : undefined,
output: {
minifyInternalExports: false,
},
}, },
}, },
}; };