bmfe-vue2-base
Version:
BM 后台系统基础框架
140 lines (125 loc) • 4.09 kB
JavaScript
/**
* @Author: songqi
* @Date: 2017-01-16
* @Last modified by: songqi
* @Last modified time: 2017-02-21
*/
import _isString from 'lodash/isString';
import {
get as storageGet,
set as storageSet
} from 'Utils/globalContext';
import {
HREFTAG,
PATH
} from 'Config/config';
const state = {
navTree: [],
navBarList: [],
breadcrumb: [],
navbarShowed: true
}
const getters = {
COMMON_NAVBAR_navTree: state => state.navTree,
COMMON_NAVBAR_breadcrumb: state => state.breadcrumb,
COMMON_NAVBAR_navbarShowed: state => state.navbarShowed
}
const getDefaultBreadcrumb = (navBarList, path) => {
var _breadcrumb = [];
navBarList.map(function(item){
if(item.href === path.slice(0, item.href.length)){
_breadcrumb.push({
name: item.name,
href: item.routeHref
});
}
});
return _breadcrumb;
}
const mutations = {
COMMON_SET_navbar(state, datas){
var dataMap = {},
navTree = [];
state.navBarList = datas;
datas.map(function(item){
if(!dataMap[item.id]){
dataMap[item.id] = item;
}
if(!item.parentId){
navTree.push(item);
}
});
datas.map(function(item){
if(item.parentId && dataMap[item.parentId]){
if(!dataMap[item.parentId]['children']){
dataMap[item.parentId]['children'] = [];
}
if (item['showType'] === 'MENU') {
dataMap[item.parentId]['children'].push(item);
}
if(dataMap[item.parentId]['children'] && !dataMap[item.parentId]['children'].length) {
dataMap[item.parentId]['children'] = undefined;
}
}
});
for(var i in dataMap){
var item = dataMap[i];
if(item.children){
item.routeHref = 'javascript:;'
}else{
if(item.path === PATH){
item.routeHref = HREFTAG + item.href;
}else{
item.routeHref = item.path + HREFTAG + item.href;
}
}
}
state.navTree = navTree;
},
COMMON_SET_breadcrumb(state, { type, data, route }){
// 如果 navBarList 不存在则直接返回
if(!state.navBarList.length){
return;
}
var path = route.path,
_breadcrumb = storageGet('breadcrumb') || [];
// 初始化进入,一般认为是刷新,或者从 url 里输入
if(type === 'init'){
let lastBreadcrumb = _breadcrumb[_breadcrumb.length - 1];
// 判断是否为刷新,刷新则直接从页面 localstorage 中取出来
if(lastBreadcrumb && HREFTAG + path === lastBreadcrumb.href){
state.breadcrumb = _breadcrumb;
// 其他的全部从path匹配菜单
}else{
state.breadcrumb = getDefaultBreadcrumb(state.navBarList, path);
}
}else if(type === 'pathChange'){
let backBreadcrumb = _breadcrumb[_breadcrumb.length - 2];
// 判断是否为返回
if(backBreadcrumb && HREFTAG + path === backBreadcrumb.href){
state.breadcrumb = _breadcrumb.slice(0, _breadcrumb.length - 1);
// 其他的全部从path匹配菜单
}else{
state.breadcrumb = getDefaultBreadcrumb(state.navBarList, path);
}
// 额外手工 push 数据
}else if(type === 'push'){
if(_isString(data)){
data = {
name: data,
href: HREFTAG + path
}
}
state.breadcrumb.push(data);
}
storageSet('breadcrumb', state.breadcrumb);
},
COMMON_TOGGLE_navbarShowed(state){
state.navbarShowed = !state.navbarShowed;
}
}
export default {
state,
getters,
mutations
}