feat(menu): 为页面添加标题和布局配置支持

This commit is contained in:
严浩
2025-10-22 11:29:27 +08:00
parent 18360ac41d
commit 4949e1c957
11 changed files with 40 additions and 92 deletions

View File

@@ -1,20 +0,0 @@
diff --git a/client.d.ts b/client.d.ts
index 05b92f32d1ba3df543d46fb1e93d53c6a5834583..81952e9cf3d4ebe5ca7c354e977354a120707fa8 100644
--- a/client.d.ts
+++ b/client.d.ts
@@ -2,12 +2,12 @@ declare module "virtual:meta-layouts" {
import type {
Router,
RouteRecordNormalized,
- RouteRecordRaw,
+ RouterOptions,
} from "vue-router";
export const setupLayouts: (
- routes: RouteRecordRaw[],
- ) => RouteRecordRaw[];
+ routes: RouterOptions['routes'],
+ ) => RouterOptions['routes'];
export const createGetRoutes: (
router: Router,

View File

@@ -1,6 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref } from 'vue';
definePage({
meta: {
title: 'API 调用示例',
},
});
// ========== API 模块 ========== // ========== API 模块 ==========
const apiResult = ref<string>(''); const apiResult = ref<string>('');
const loading = ref(false); const loading = ref(false);

View File

@@ -2,6 +2,12 @@
import { ref } from 'vue'; import { ref } from 'vue';
import { NButton } from 'naive-ui'; import { NButton } from 'naive-ui';
definePage({
meta: {
title: '点击计数器',
},
});
// ========== 计数器模块 ========== // ========== 计数器模块 ==========
const clickCount = ref(0); const clickCount = ref(0);

View File

@@ -0,0 +1,4 @@
<script setup lang="ts">
definePage({ meta: { title: '示例演示' } });
</script>
<template>这个文件只是为了给菜单渲染标题</template>

View File

@@ -1,6 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onUnmounted, computed, nextTick } from 'vue'; import { ref, onUnmounted, computed, nextTick } from 'vue';
definePage({
meta: {
title: 'WebSocket 示例',
},
});
// ========== WebSocket 模块 ========== // ========== WebSocket 模块 ==========
const ws = ref<WebSocket | null>(null); const ws = ref<WebSocket | null>(null);
const wsConnected = ref(false); const wsConnected = ref(false);

View File

@@ -1,5 +0,0 @@
<script setup lang="ts"></script>
<template>
<div>deep</div>
</template>

View File

@@ -1,5 +0,0 @@
<script setup lang="ts"></script>
<template>
<div>deep2</div>
</template>

View File

@@ -1,5 +0,0 @@
<script setup lang="ts"></script>
<template>
<div>Demo-API-Page</div>
</template>

View File

@@ -1,5 +0,0 @@
<script setup lang="ts"></script>
<template>
<div>Demo-Icons-Page</div>
</template>

View File

@@ -52,6 +52,11 @@ declare module 'vue-router' {
* @description 菜单标题 * @description 菜单标题
*/ */
title?: string; title?: string;
/**
* @description 使用的布局,设置为 false 则表示不使用布局
*/
layout?: string | false;
} }
} }

65
typed-router.d.ts vendored
View File

@@ -37,6 +37,13 @@ declare module 'vue-router/auto-routes' {
{ path: ParamValue<false> }, { path: ParamValue<false> },
| never | never
>, >,
'Demos': RouteRecordInfo<
'Demos',
'/demos',
Record<never, never>,
Record<never, never>,
| never
>,
'DemosApiDemo': RouteRecordInfo< 'DemosApiDemo': RouteRecordInfo<
'DemosApiDemo', 'DemosApiDemo',
'/demos/api-demo', '/demos/api-demo',
@@ -65,34 +72,6 @@ declare module 'vue-router/auto-routes' {
Record<never, never>, Record<never, never>,
| never | never
>, >,
'PageDeepDeep': RouteRecordInfo<
'PageDeepDeep',
'/page/deep/deep',
Record<never, never>,
Record<never, never>,
| never
>,
'PageDeepDeep2': RouteRecordInfo<
'PageDeepDeep2',
'/page/deep/deep2',
Record<never, never>,
Record<never, never>,
| never
>,
'PageDemoApi': RouteRecordInfo<
'PageDemoApi',
'/page/demo-api',
Record<never, never>,
Record<never, never>,
| never
>,
'PageDemoIcons': RouteRecordInfo<
'PageDemoIcons',
'/page/demo-icons',
Record<never, never>,
Record<never, never>,
| never
>,
} }
/** /**
@@ -118,6 +97,12 @@ declare module 'vue-router/auto-routes' {
views: views:
| never | never
} }
'src/pages/demos/index.page.vue': {
routes:
| 'Demos'
views:
| never
}
'src/pages/demos/api-demo.page.vue': { 'src/pages/demos/api-demo.page.vue': {
routes: routes:
| 'DemosApiDemo' | 'DemosApiDemo'
@@ -142,30 +127,6 @@ declare module 'vue-router/auto-routes' {
views: views:
| never | never
} }
'src/pages/page/deep/deep.page.vue': {
routes:
| 'PageDeepDeep'
views:
| never
}
'src/pages/page/deep/deep2.page.vue': {
routes:
| 'PageDeepDeep2'
views:
| never
}
'src/pages/page/demo-api.page.vue': {
routes:
| 'PageDemoApi'
views:
| never
}
'src/pages/page/demo-icons.page.vue': {
routes:
| 'PageDemoIcons'
views:
| never
}
} }
/** /**