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,5 +1,7 @@
// 设置文件
import setting from '@/setting.js'
import util from '@/libs/util'
import menu from '@/menu'
import { getMenuAll } from '@/api/menu'
export default {
namespaced: true,
@@ -12,19 +14,14 @@ export default {
asideCollapse: setting.menu.asideCollapse,
// 侧边栏折叠动画
asideTransition: setting.menu.asideTransition,
// 权限字典 { '/path': '菜单名' }
authKey: {},
// 菜单源数据
sourceData: []
},
actions: {
/**
* 设置侧边栏展开或者收缩
* @param {Object} context
* @param {Boolean} collapse is collapse
*/
async asideCollapseSet ({ state, dispatch }, collapse) {
// store 赋值
state.asideCollapse = collapse
// 持久化
await dispatch('d2admin/db/set', {
dbName: 'sys',
path: 'menu.asideCollapse',
@@ -32,14 +29,8 @@ export default {
user: true
}, { root: true })
},
/**
* 切换侧边栏展开和收缩
* @param {Object} context
*/
async asideCollapseToggle ({ state, dispatch }) {
// store 赋值
state.asideCollapse = !state.asideCollapse
// 持久化
await dispatch('d2admin/db/set', {
dbName: 'sys',
path: 'menu.asideCollapse',
@@ -47,15 +38,8 @@ export default {
user: true
}, { root: true })
},
/**
* 设置侧边栏折叠动画
* @param {Object} context
* @param {Boolean} transition is transition
*/
async asideTransitionSet ({ state, dispatch }, transition) {
// store 赋值
state.asideTransition = transition
// 持久化
await dispatch('d2admin/db/set', {
dbName: 'sys',
path: 'menu.asideTransition',
@@ -63,14 +47,8 @@ export default {
user: true
}, { root: true })
},
/**
* 切换侧边栏折叠动画
* @param {Object} context
*/
async asideTransitionToggle ({ state, dispatch }) {
// store 赋值
state.asideTransition = !state.asideTransition
// 持久化
await dispatch('d2admin/db/set', {
dbName: 'sys',
path: 'menu.asideTransition',
@@ -78,52 +56,58 @@ export default {
user: true
}, { root: true })
},
/**
* 持久化数据加载侧边栏设置
* @param {Object} context
*/
async asideLoad ({ state, dispatch }) {
// store 赋值
const menu = await dispatch('d2admin/db/get', {
const menuSetting = await dispatch('d2admin/db/get', {
dbName: 'sys',
path: 'menu',
defaultValue: setting.menu,
user: true
}, { root: true })
state.asideCollapse = menu.asideCollapse !== undefined ? menu.asideCollapse : setting.menu.asideCollapse
state.asideTransition = menu.asideTransition !== undefined ? menu.asideTransition : setting.menu.asideTransition
state.asideCollapse = menuSetting.asideCollapse !== undefined ? menuSetting.asideCollapse : setting.menu.asideCollapse
state.asideTransition = menuSetting.asideTransition !== undefined ? menuSetting.asideTransition : setting.menu.asideTransition
},
/**
* 持久化数据加载菜单数据
* @param {Object} context
*/
async sourceDataLoad ({ state, dispatch }) {
const sourceData = await dispatch('d2admin/db/get', {
async sourceDataLoad ({ state, commit, dispatch }) {
// 优先从 localStorage 读取上次缓存的菜单数据
state.sourceData = await dispatch('d2admin/db/get', {
dbName: 'database',
path: '$menu.sourceData',
defaultValue: [],
user: true
}, { root: true })
state.sourceData = sourceData
// 缓存为空且已登录时,从后端获取菜单
if (!state.sourceData.length && util.cookies.get('token')) {
const res = await getMenuAll()
state.sourceData = res || []
await dispatch('d2admin/db/set', {
dbName: 'database',
path: '$menu.sourceData',
value: state.sourceData,
user: true
}, { root: true })
}
// 构建菜单树和权限字典
menu.install(this, state.sourceData)
}
},
mutations: {
/**
* @description 设置顶栏菜单
* @param {Object} state state
* @param {Array} menu menu setting
*/
headerAuth (state, source) {
if (!source || source.length <= 0) {
return
}
const auth = {}
source.forEach(value => {
if (value.url) {
auth[value.url] = value.name
}
})
state.authKey = auth
},
headerSet (state, menu) {
// store 赋值
state.header = menu
},
/**
* @description 设置侧边栏菜单
* @param {Object} state state
* @param {Array} menu menu setting
*/
asideSet (state, menu) {
// store 赋值
state.aside = menu
}
}