Blame view

src/store/modules/permission.js 2.01 KB
1 2 3 4 5
/*
 * @Description: 
 * @Autor: renchao
 * @LastEditTime: 2023-05-17 10:35:01
 */
赵千 committed
6
import { asyncRoutes, constantRoutes, resetRouter } from '@/router'
任超 committed
7
import asyncRouter from '@/utils/asyncRouter.js'
赵千 committed
8 9 10 11 12 13 14 15
const state = {
    routes: [],
    addRoutes: false,
}

const mutations = {
    SET_ROUTES: (state, routes) => {
        state.addRoutes = true
任超 committed
16
        state.routes = routes
赵千 committed
17 18 19 20 21 22 23 24 25 26
    },
    RESET_ROUTE: (state) => {
        state.addRoutes = false
    }
}
const actions = {
    // 添加全部菜单
    generateRoutes ({ commit }, getMenuInfo) {
        return new Promise(resolve => {
            // 将权限菜单数组转成路由树数据结构
任超 committed
27
            let permission_tree = asyncRouter(getMenuInfo)
任超 committed
28 29
            const mergeResult = _.cloneDeep(constantRoutes).concat(permission_tree);
            commit('SET_ROUTES', mergeResult)
赵千 committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
            resolve(permission_tree)
        })
    },
    // 重置路由
    resetRoutes ({ commit }) {
        commit('RESET_ROUTE')
    }
}
// 树转数组
function dfs (root, fVisit) {
    let stack = Array.isArray(root) ? [...root] : [root];
    while (stack.length) {
        let node = stack.pop();
        fVisit && fVisit(node);
        let children = node.children;
        if (children && children.length) {
            for (let i = children.length - 1; i >= 0; i--) stack.push(children[i]);
        }
    }
}
// 数组转树
//需要插入父节点id,pid为null或'',就是找root节点,然后root节点再去找自己的子节点
function array2Tree (data, pid) {
    let res = [];
    data.forEach(item => {
        if (item.parentId === pid) {
            let itemChildren = array2Tree(data, item.id);
            if (itemChildren.length) item.children = itemChildren;
            res.push(item);
        }
    });
    // 菜单数据反转,保持一致
    res.reverse()
    _.each(res, c => {
        if (c.children && c.children.length > 0) {
            c.children.reverse()
        }
    })
    return res;
}

export default {
    namespaced: true,
    state,
    mutations,
    actions
}