Blame view

src/store/modules/permission.js 1.93 KB
赵千 committed
1
import { asyncRoutes, constantRoutes, resetRouter } from '@/router'
任超 committed
2
import asyncRouter from '@/utils/asyncRouter.js'
赵千 committed
3 4 5 6 7 8 9 10
const state = {
    routes: [],
    addRoutes: false,
}

const mutations = {
    SET_ROUTES: (state, routes) => {
        state.addRoutes = true
任超 committed
11
        state.routes = routes
赵千 committed
12 13 14 15 16 17 18 19 20 21
    },
    RESET_ROUTE: (state) => {
        state.addRoutes = false
    }
}
const actions = {
    // 添加全部菜单
    generateRoutes ({ commit }, getMenuInfo) {
        return new Promise(resolve => {
            // 将权限菜单数组转成路由树数据结构
任超 committed
22
            let permission_tree = asyncRouter(getMenuInfo)
任超 committed
23 24
            const mergeResult = _.cloneDeep(constantRoutes).concat(permission_tree);
            commit('SET_ROUTES', mergeResult)
赵千 committed
25 26 27 28 29 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
            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
}