feat: 新增顶部菜单切换、菜单复制新增功能并优化侧边栏渲染

1.  新增顶部菜单选择器,支持切换顶级菜单并动态渲染对应侧边栏
2.  菜单管理页面添加复制新增按钮,可基于现有菜单快速创建新菜单
3.  重构侧边栏路由逻辑,支持自动匹配当前页面所属顶级菜单
4.  在vuex中新增顶部菜单状态管理,持久化激活的顶级菜单
This commit is contained in:
2026-06-25 10:52:46 +08:00
parent 24030dd93f
commit e994afb97f
6 changed files with 384 additions and 39 deletions

View File

@@ -18,6 +18,8 @@ const getters = {
topbarRouters:state => state.permission.topbarRouters,
defaultRoutes:state => state.permission.defaultRoutes,
sidebarRouters:state => state.permission.sidebarRouters,
topMenuList: state => state.permission.topMenuList,
activeTopMenu: state => state.permission.activeTopMenu,
productList: state => state.category.productList,
rawMaterialList: state => state.category.rawMaterialList,
bomMap: state => state.category.bomMap,

View File

@@ -4,6 +4,7 @@ import { getRouters } from '@/api/menu'
import Layout from '@/layout/index'
import ParentView from '@/components/ParentView'
import InnerLink from '@/layout/components/InnerLink'
import Cookies from 'js-cookie'
const permission = {
state: {
@@ -11,7 +12,9 @@ const permission = {
addRoutes: [],
defaultRoutes: [],
topbarRouters: [],
sidebarRouters: []
sidebarRouters: [],
topMenuList: [],
activeTopMenu: Cookies.get('activeTopMenu') || ''
},
mutations: {
SET_ROUTES: (state, routes) => {
@@ -27,6 +30,13 @@ const permission = {
SET_SIDEBAR_ROUTERS: (state, routes) => {
state.sidebarRouters = routes
},
SET_TOP_MENU_LIST: (state, menus) => {
state.topMenuList = menus
},
SET_ACTIVE_TOP_MENU: (state, path) => {
state.activeTopMenu = path
Cookies.set('activeTopMenu', path)
},
},
actions: {
// 生成路由
@@ -45,9 +55,19 @@ const permission = {
commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
commit('SET_DEFAULT_ROUTES', sidebarRoutes)
commit('SET_TOPBAR_ROUTES', sidebarRoutes)
commit('SET_TOP_MENU_LIST', sidebarRoutes)
resolve(rewriteRoutes)
})
})
},
selectTopMenu({ commit, state }, menuPath) {
const menu = state.topMenuList.find(m => m.path === menuPath)
if (menu) {
commit('SET_ACTIVE_TOP_MENU', menuPath)
const children = menu.children ? menu.children.filter(c => !c.hidden) : []
commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(children))
}
}
}
}