2026-05-27 18:07:48 +08:00
|
|
|
|
import util from '@/libs/util'
|
2018-07-17 22:03:45 +08:00
|
|
|
|
|
2020-04-19 11:50:32 +08:00
|
|
|
|
/**
|
2026-05-27 18:07:48 +08:00
|
|
|
|
* 将后端返回的扁平菜单数组转为 { header: [], aside: [] } 树结构
|
|
|
|
|
|
* @param {Array} arr 后端返回的扁平菜单数据
|
2020-04-19 11:50:32 +08:00
|
|
|
|
*/
|
2026-05-27 18:07:48 +08:00
|
|
|
|
function getMenuData (arr) {
|
|
|
|
|
|
const tree = { header: [], aside: [] }
|
|
|
|
|
|
|
|
|
|
|
|
arr.forEach(value => {
|
|
|
|
|
|
if (!value.is_navi) {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const menuItem = {
|
2026-05-27 18:37:37 +08:00
|
|
|
|
path: value.url || ('d2-menu-empty-' + value.menu_id),
|
2026-05-27 18:07:48 +08:00
|
|
|
|
title: value.name,
|
|
|
|
|
|
icon: value.icon,
|
|
|
|
|
|
type: value.type,
|
2026-05-28 15:47:19 +08:00
|
|
|
|
params: value.params,
|
|
|
|
|
|
remark: value.remark || ''
|
2026-05-27 18:07:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 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
|
2020-04-19 11:50:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-05-27 18:07:48 +08:00
|
|
|
|
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)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|