From 03167ec81343fb8bf8967da13768a1137c89b24d Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期三, 01 四月 2026 08:48:46 +0800
Subject: [PATCH] #前端

---
 rsf-design/src/router/core/MenuProcessor.js |   80 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/rsf-design/src/router/core/MenuProcessor.js b/rsf-design/src/router/core/MenuProcessor.js
index f031609..c750811 100644
--- a/rsf-design/src/router/core/MenuProcessor.js
+++ b/rsf-design/src/router/core/MenuProcessor.js
@@ -5,6 +5,34 @@
 import { RoutesAlias } from '../routesAlias'
 import { adaptBackendMenuTree } from '../adapters/backendMenuAdapter'
 import { formatMenuTitle } from '@/utils'
+
+const WORKBENCH_PATH = '/dashboard/console'
+const WORKBENCH_ROOT_PATH = '/dashboard'
+
+const WORKBENCH_MENU = Object.freeze({
+  name: 'Dashboard',
+  path: WORKBENCH_ROOT_PATH,
+  component: RoutesAlias.Layout,
+  redirect: WORKBENCH_PATH,
+  meta: {
+    title: 'menus.dashboard.title',
+    icon: 'ri:home-smile-2-line'
+  },
+  children: [
+    {
+      name: 'Console',
+      path: 'console',
+      component: WORKBENCH_PATH,
+      meta: {
+        title: 'menus.dashboard.console',
+        icon: 'ri:home-smile-2-line',
+        keepAlive: false,
+        fixedTab: true
+      }
+    }
+  ]
+})
+
 class MenuProcessor {
   /**
    * 鑾峰彇鑿滃崟鏁版嵁
@@ -17,6 +45,7 @@
     } else {
       menuList = await this.processBackendMenu()
     }
+    menuList = this.prependWorkbenchMenu(menuList)
     this.validateMenuPaths(menuList)
     return this.normalizeMenuPaths(menuList)
   }
@@ -206,5 +235,56 @@
     }
     return `/${path}`
   }
+
+  prependWorkbenchMenu(menuList) {
+    if (!Array.isArray(menuList)) {
+      return [this.createWorkbenchMenu()]
+    }
+
+    const hasWorkbench = menuList.some((item) => this.containsWorkbenchMenu(item))
+    if (hasWorkbench) {
+      return menuList
+    }
+
+    return [this.createWorkbenchMenu(), ...menuList]
+  }
+
+  createWorkbenchMenu() {
+    return {
+      ...WORKBENCH_MENU,
+      meta: {
+        ...WORKBENCH_MENU.meta
+      },
+      children: WORKBENCH_MENU.children.map((child) => ({
+        ...child,
+        meta: {
+          ...child.meta
+        }
+      }))
+    }
+  }
+
+  isWorkbenchMenu(item) {
+    if (!item || typeof item !== 'object') {
+      return false
+    }
+    const path = String(item.path || '')
+    const component = String(item.component || '')
+    return (
+      path === WORKBENCH_ROOT_PATH ||
+      path === WORKBENCH_PATH ||
+      component === WORKBENCH_PATH
+    )
+  }
+
+  containsWorkbenchMenu(item) {
+    if (this.isWorkbenchMenu(item)) {
+      return true
+    }
+    if (!Array.isArray(item?.children) || item.children.length === 0) {
+      return false
+    }
+    return item.children.some((child) => this.containsWorkbenchMenu(child))
+  }
 }
 export { MenuProcessor }

--
Gitblit v1.9.1