refactor: remove old demo pages and static menu logic

1. 删除大量旧的示例页面、组件示例和静态菜单配置
2. 新增菜单扁平数组转树形结构工具函数
3. 重构菜单加载逻辑,改为从后端动态获取并格式化
4. 新增全局权限检查方法和自定义权限指令
5. 优化侧边栏菜单路由跳转逻辑,自动跳转第一个有权限的子页面
6. 移除路由中对旧demo模块的引用
This commit is contained in:
sheng
2026-05-27 18:07:48 +08:00
parent 0f3b5d4371
commit 2cc8329695
96 changed files with 799 additions and 4985 deletions

View File

@@ -1,42 +1,52 @@
import { uniqueId } from 'lodash'
// 插件
import demoPlugins from './modules/demo-plugins'
// 组件
import demoComponents from './modules/demo-components'
// 功能
import demoPlayground from './modules/demo-playground'
import util from '@/libs/util'
/**
* @description 给菜单数据补充上 path 字段
* @description https://github.com/d2-projects/d2-admin/issues/209
* @param {Array} menu 原始的菜单数据
* 将后端返回的扁平菜单数组转为 { header: [], aside: [] } 树结构
* @param {Array} arr 后端返回的扁平菜单数据
*/
function supplementPath (menu) {
return menu.map(e => ({
...e,
path: e.path || uniqueId('d2-menu-empty-'),
...e.children ? {
children: supplementPath(e.children)
} : {}
}))
function getMenuData (arr) {
const tree = { header: [], aside: [] }
arr.forEach(value => {
if (!value.is_navi) {
return
}
const menuItem = {
path: value.url,
title: value.name,
icon: value.icon,
type: value.type,
params: value.params
}
// parent_id 为 0 的节点放入顶栏
if (value.parent_id === 0) {
tree.header.push({ ...menuItem })
}
// 所有节点保留 menu_id / parent_id 用于构建侧栏树形结构
menuItem.menu_id = value.menu_id
menuItem.parent_id = value.parent_id
tree.aside.push(menuItem)
})
// 扁平 aside 数组转为嵌套树
tree.aside = util.formatDataToTree(tree.aside)
return tree
}
// 菜单 侧边栏
export const menuAside = supplementPath([
demoComponents,
demoPlugins,
demoPlayground
])
// 菜单 顶栏
export const menuHeader = supplementPath([
{
path: '/index',
title: '首页',
icon: 'home'
},
demoPlayground,
demoComponents,
demoPlugins
])
export default {
/**
* 由 sourceDataLoad 调用,将菜单源数据写入 store
* @param {Object} vm vuex store 实例 (this)
* @param {Array} source 后端返回的扁平菜单数组
*/
install (vm, source) {
vm.commit('d2admin/menu/headerAuth', source)
const { header, aside } = getMenuData(source)
vm.commit('d2admin/menu/headerSet', header)
vm.commit('d2admin/menu/asideSet', aside)
}
}