08335 / hivui-platform-template
hivui平台项目模板
Newer
Older
hivui-platform-template / project / hivuiMain / store / modules / app.js
caibinghong on 4 Jun 2021 add
import { getMenus, getQuickNav,getLeastRecentlyUsed,getPermissions } from '@main/api/menu'
const portal = {
    namespaced: true,
    state: {
        powerList:[],
        menusList:[],
        menus:[],
        defTabs: [],
        navs: [],
        latelyNavs:[],
        config:window.__sysConfig
    },
    mutations: {
        SET_powerList: (state, powerList) => {
            state.powerList = powerList
        },
        SET_menusList: (state, menusList) => {
            state.menusList = menusList
        },
        SET_menus: (state, menus) => {
            state.menus = menus
        },
        SET_defTabs: (state, data) => {
            state.defTabs = data
        },
        SET_navs: (state, navs) => {
            state.navs = navs
        },
        SET_latelyNavs: (state, latelyNavs) => {
            state.latelyNavs = latelyNavs
        },
    },
    actions: {
        //取功能菜单
        async getMenus({ commit, state }) {
            await getMenus().then(res => {
                const data = res.data.dataPack.rows;
                commit('SET_menusList', [...data]);
                console.log(`SET_menusList:`,data);
                let treeMap = {},treeData=[],defTabs=[],flag=false;
                data.map(item=>{
                    //构建 树 map
                    treeMap[item.resId] = item,flag=false;
                    for(let i = (state.defTabs||[]).length-1;i>=0;i--){
                        if(state.defTabs[i].resId==item.resId){
                            flag = true;
                            break;
                        }
                    }
                    //获取默认打开项的菜单
                    if(item.isActive&&!flag) defTabs.push(item);
                });   
                commit('SET_defTabs', [...defTabs,...state.defTabs]);
                data.map(item=>{
                    if(treeMap[item.parentId]){
                        treeMap[item.parentId].children=treeMap[item.parentId].children||[];
                        //将子节点挂到 对应父节点上
                        treeMap[item.parentId].children.push(item); 
                    }
                });
                
                debugger; 
                console.log('treeMap', treeMap);
                let vList = [];
                for(let key in treeMap){
                    let item = treeMap[key];
                    if(item.type=='vdir'){ //虚拟目录
                        vList.push(item.resId);
                        if(treeMap[item.parentId]){
                            treeMap[item.parentId].children=treeMap[item.parentId].children||[];
                            //将子节点挂到 对应父节点上
                            treeMap[item.parentId].children = treeMap[item.parentId].children.concat(item.children||[]);                            
                        }
                    }

                    if(item.parentId!='-1'){                        
                        delete treeMap[key];
                    }else if((item.type=='dir'||item.type=='vdir') && item.children){//第一级只能是目录
                        treeData.push(item);
                    }
                }
                //清理虚拟目录
                var mData=[];
                treeData.map(item=>{
                    if(item.type=='vdir'){
                        (item.children||[]).map(i=>{
                            if(i.type!='vdir'&&i.children){
                                i.parentId="-1";
                                i.parentName="";
                                mData.push(i);
                            }
                        });
                    }else{
                        mData.push(item);
                    }

                });
                console.info('menusTree:',mData);
                commit('SET_menus', mData);
                return mData;
            });
        },
        //取左侧快速
        async getQuickNav({ commit, state }) {
            await getQuickNav().then(res => {
                const data = res.data.dataPack.rows;
                console.log(`getQuickNav`)
                let defTabs=[],flag=false;
                data.map(item=>{ 
                    flag=false;
                    for(let i = state.defTabs.length-1;i>=0;i--){
                        if(state.defTabs[i].resId==item.resId){
                            flag = true;
                            break;
                        }
                    }
                    if(item.isActive&&!flag) defTabs.push(item);
                });   
                commit('SET_defTabs', [...defTabs,...state.defTabs]);
                commit('SET_navs', data);
                return data;
            });
        },
        setQuickNav({ commit, state },data){
            commit('SET_navs', data);
        },
        async getLatelyUse({ commit, state }){
            let me =this;
            await getLeastRecentlyUsed(me.state.user.id).then(res => {
                const data = res.data.dataPack.rows;
                commit('SET_latelyNavs', data);
                return data;
            });
        },
        //取功能权限
        async getPowers({ commit, state }) {
            await getPermissions(this.state.user.id).then(res => {
                const data = res.data.dataPack.rows;
                commit('SET_powerList', [...data]);  
            });
        },
    }
}

export default portal