From 4d2d06a46b05e1b1e0efb37afc74d40a5d400a89 Mon Sep 17 00:00:00 2001
From: wangjunjie <873143256@qq.com>
Date: Mon, 8 Dec 2025 17:39:55 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BE=A7=E8=BE=B9=E5=AF=BC=E8=88=AA=E6=A0=8F?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/a-frame/AAside.tsx | 186 ++++++++++++++++++++---------------
src/pages/a-frame/AFrame.vue | 62 ++++++------
2 files changed, 137 insertions(+), 111 deletions(-)
diff --git a/src/pages/a-frame/AAside.tsx b/src/pages/a-frame/AAside.tsx
index e6c7a54..4df0617 100644
--- a/src/pages/a-frame/AAside.tsx
+++ b/src/pages/a-frame/AAside.tsx
@@ -1,104 +1,126 @@
-import {
- ElButton,
- ElIcon,
- ElMenu,
- ElMenuItem,
- ElMenuItemGroup,
- ElSubMenu,
- type MenuItemRegistered,
-} from 'element-plus'
-import { elIcons } from '@/common/element/element.ts'
-import AIcon from '@/components/a-icon/AIcon.tsx'
-import type { IconName } from '@/components/a-icon/iconfont.ts'
-import styles from '@/pages/a-frame/aaside.module.styl'
+import { ElButton, ElIcon, ElMenu, ElMenuItem, ElMenuItemGroup, ElSubMenu, type MenuItemRegistered } from "element-plus";
+import { elIcons } from "@/common/element/element.ts";
+import AIcon from "@/components/a-icon/AIcon.tsx";
+import type { IconName } from "@/components/a-icon/iconfont.ts";
+import styles from "@/pages/a-frame/aaside.module.styl";
export interface Menu extends G.TreeNode {
// Id
- id: string
+ id: string;
// 编码
- sn: string
+ sn: string;
// 上级 Id; 层级为 1 的节点值为 0
- pid: string
+ pid: string;
// 菜单名称
- title: string
+ title: string;
// 图标
- icon: string
+ icon: string;
// 层级; >= 1
- tier: number
+ tier: number;
// 排序
- sort: number
+ sort: number;
// 路由名称
- routeName: string
+ routeName: string;
// 面包路径
- breadcrumb: string[]
+ breadcrumb: string[];
// 类型
- menuCategory: 'Catalog' | 'Group' | 'Page' | 'SubPage' | 'Btn'
+ menuCategory: "Catalog" | "Group" | "Page" | "SubPage" | "Btn";
// 子菜单
- children?: Menu[]
+ children?: Menu[];
}
export default defineComponent(
- (props, {emit}) => {
- const onMenuClick = (it: MenuItemRegistered) => emit('menuClick', it.index)
- const renderMenu = (it: Menu) => {
- let renderChildNode: (() => VNode[] | undefined) | undefined = undefined
- if (it.children != null && it.children.length > 0) {
- renderChildNode = () => (it.children?.map(renderMenu))
+ (props, { emit }) => {
+ let defaultId = "";
+ let path: any = props.defaultPath.split("/");
+ path = path[path.length - 1];
+ props.menus.forEach((item) => {
+ if (item.routeName == path) {
+ defaultId = item.id;
+ } else if (item.children && item.children.length) {
+ item.children.forEach((item2) => {
+ if (item2.routeName == path) {
+ defaultId = item2.id;
+ } else if (item2.children && item2.children.length) {
+ item2.children.forEach((item3) => {
+ if (item3.routeName == path) {
+ defaultId = item3.id;
+ }
+ });
+ }
+ });
}
- let currentNode: VNode
+ });
+
+ const onMenuClick = (it: MenuItemRegistered) => emit("menuClick", it.index);
+ const renderMenu = (it: Menu) => {
+ let renderChildNode: (() => VNode[] | undefined) | undefined = undefined;
+ if (it.children != null && it.children.length > 0) {
+ renderChildNode = () => it.children?.map(renderMenu);
+ }
+ let currentNode: VNode;
switch (it.menuCategory) {
- case 'Catalog': {
- currentNode = (
- {{
- title: () => (<>
-
- {it.title}
- >),
- default: renderChildNode,
- }}
- )
- break
+ case "Catalog": {
+ currentNode = (
+
+ {{
+ title: () => (
+ <>
+
+ {it.title}
+ >
+ ),
+ default: renderChildNode,
+ }}
+
+ );
+ break;
}
- case 'Group': {
- currentNode = (
- {{
- default: renderChildNode,
- }}
- )
- break
+ case "Group": {
+ currentNode = (
+
+ {{
+ default: renderChildNode,
+ }}
+
+ );
+ break;
}
- case 'Page': {
- currentNode = (
- {{
- title: () => {it.title},
- default: () => ,
- }}
- )
- break
+ case "Page": {
+ currentNode = (
+
+ {{
+ title: () => {it.title},
+ default: () => ,
+ }}
+
+ );
+ break;
}
default:
- currentNode = (<>>)
+ currentNode = <>>;
}
- return currentNode
- }
- const isCollapse = ref(false)
+ return currentNode;
+ };
+ const isCollapse = ref(false);
- return () => (<>
-
- {{
- default: () => props.menus.map(renderMenu),
- }}
-
- {
- isCollapse.value = !isCollapse.value
- }}>
-
- {
- isCollapse.value ? :
- }
-
-
- >)
+ return () => (
+ <>
+
+ {
+ isCollapse.value = !isCollapse.value;
+ }}
+ >
+ {isCollapse.value ? : }
+
+ >
+ );
},
{
props: {
@@ -107,10 +129,14 @@ export default defineComponent(
required: true,
validator: (value: Menu[]) => value != null && value.length > 0,
},
+ defaultPath: {
+ type: String,
+ required: true,
+ },
},
emits: {
menuClick: (id: string) => id != null,
},
- name: 'AAside',
- })
-
+ name: "AAside",
+ }
+);
diff --git a/src/pages/a-frame/AFrame.vue b/src/pages/a-frame/AFrame.vue
index 085eabc..3158a33 100644
--- a/src/pages/a-frame/AFrame.vue
+++ b/src/pages/a-frame/AFrame.vue
@@ -1,63 +1,64 @@
-

+
{{ appName }}
-
+
-
+
-
+
@@ -118,7 +119,6 @@ onUnmounted(() => {
}
}
}
-