wms_vue/src/store/module/app.js

313 lines
8.7 KiB
JavaScript

import config from '@/configure/pear.config.js';
import { message } from "@hwork/ant-design-vue";
const state = {
/**
* 布局方式(整体界面的排版方式)
* layout-side -- 侧边布局
* layout-head -- 顶部菜单
* layout-comp -- 联动布局
* */
layout: config.layout == null ? "layout-side" : localStorage.getItem("layout") == null ? config.layout : localStorage.getItem("layout"),
/**
* 系统主题(整体色调)
* light -- 白色主题
* dark -- 暗色主题
* night -- 夜间主题
*/
theme: config.theme == null ? "theme-dark" : localStorage.getItem("theme") == null ? config.theme : localStorage.getItem("theme"),
/**
* 主题颜色(主题颜色)
*/
color: config.color == null ? "theme-green" : localStorage.getItem("color") == null ? config.color : localStorage.getItem("color"),
/**
* 侧边状态
* true -- 隐藏
* false -- 展开
* */
collapsed: config.collapsed == null ? false : localStorage.getItem("collapsed") == null ? config.collapsed : localStorage.getItem("collapsed"),
/**
* 菜单头部
* true -- 隐藏
* false -- 展开
* */
logo: config.logo == null ? true : localStorage.getItem("logo") == null ? config.logo : localStorage.getItem("logo"),
/**
* 是否开启多标签页
* true -- 隐藏
* false -- 展开
* */
tab: config.tab == null ? true : localStorage.getItem("tab") == null ? config.tab : localStorage.getItem("tab"),
/**
* 保持状态
* true -- 是
* false -- 否
*/
keepAlive: config.keepAlive == null ? true : localStorage.getItem("keepAlive") == null ? config.keepAlive : localStorage.getItem("keepAlive"),
/**
* 多标签页样式
* pear-card-tab
* pear-dot-tab
*/
tabType: config.tabType == null ? "pear-dot-tab" : localStorage.getItem("tabType") == null ? config.tabType : localStorage.getItem("tabType"),
/**
* 侧边菜单栏宽度
* 单位:px
* */
sideWitch: config.sideWidth == null ? 220 : config.sideWidth,
/**
* 侧边菜单栏宽度(折叠)
* 单位:px
* */
collapsedWidth: config.collapsedWidth == null ? 60 : config.collapsedWidth,
/**
* 固定头部
* true
* false
*/
fixedHeader: config.fixedHeader == null ? true : localStorage.getItem("fixedHeader") == null ? config.fixedHeader : localStorage.getItem("fixedHeader"),
/**
* 固定侧边
* true
* false
*/
fixedSide: config.fixedSide == null ? true : localStorage.getItem("fixedSide") == null ? config.fixedSide : localStorage.getItem("fixedSide"),
/**
* 路由动画
* fadeRight
* fadeTop
*/
routerAnimate: config.routerAnimate == null ? "" : localStorage.getItem("routerAnimate") == null ? config.routerAnimate : localStorage.getItem("routerAnimate"),
/**
* 配色列表
*/
colorList: config.colorList,
/**
* 主题面板状态
* true
* false
*/
setting: { opened: false },
// 选项卡内容存储
panes: sessionStorage.getItem("pear_tabs")
? JSON.parse(sessionStorage.getItem("pear_tabs"))
: [],
// 当前激活选项卡
activeKey: "",
// 当前打开菜单
openKey: [],
// 手风琴配置
muiltOpen: true,
// 路由刷新辅助变量
routerActive: true,
// 浏览器全屏
fullscreen: false,
// 路由列表
routes: [],
// 是否是移动端
isMobile: false,
language: config.defaultLanguage == null ? "zh-CN" : localStorage.getItem("pear_lang") == null ? config.defaultLanguage : localStorage.getItem("pear_lang"),
cancelToken: []
}
const mutations = {
TOGGLE_FIXEDSIDE(state) {
state.fixedSide = !state.fixedSide;
},
TOGGLE_FIXEDHEADER(state) {
state.fixedHeader = !state.fixedHeader;
},
TOGGLE_LANGUAGE(state, language) {
state.language = language;
},
UPDATE_LAYOUT(state, layout) {
state.layout = layout;
},
UPDATE_TAB_TYPE(state, tabType) {
state.tabType = tabType;
},
UPDATE_THEME(state, theme) {
state.theme = theme;
},
UPDATE_ROUTER_ANIMATE(state, routerAnimate) {
state.routerAnimate = routerAnimate;
},
UPDATE_COLOR(state, color) {
localStorage.setItem("color", color);
state.color = color;
},
UPDATE_ROUTES(state, routes) {
state.routes = routes;
},
UPDATE_COLLAPSED(state, collapsed) {
state.collapsed = collapsed;
},
TOGGLE_SIDEBAR(state) {
if (state.collapsed) {
// 要展开
state.openKey = JSON.parse(localStorage.getItem("openKey"));
} else {
// 要隐藏
localStorage.setItem("openKey", JSON.stringify(state.openKey));
state.openKey = [];
}
state.collapsed = !state.collapsed;
},
// 设置面板是否打开
TOGGLE_SETTING(state) {
state.setting.opened = !state.setting.opened;
},
TOGGLE_SIDEWITCH(state, width) {
state.sideWitch = width;
},
// 是否显示LOGO
TOGGLE_LOGO(state) {
state.logo = !state.logo;
},
// 是否开启选项卡模式
updateTab(state) {
state.tab = !state.tab;
},
// 修改全屏打开
updateFullscreen(state) {
state.fullscreen = !state.fullscreen;
},
// 修改菜单打开项
updateOpenKey(state, { openKeys }) {
//手风琴模式, 只保留当前打开的节点
let length = openKeys.length;
if (length > 0 && state.muiltOpen) {
//除了最后打开的节点, 其他的节点可能包含父节点
let otherKeys = openKeys.slice(0, length - 1);
//最后一次打开的节点
let lastKey = openKeys[length - 1];
state.openKey = [
...otherKeys.filter(ok => lastKey.startsWith(ok)),
lastKey
];
} else {
state.openKey = openKeys;
}
},
clearOpenKey(state) {
state.openKey = [];
},
// 新增选项卡操作
addTab(state, value) {
// 遍历当前的选项卡中是否已存在新增的 Key
if (state.panes.findIndex(pane => pane.path === value.path) === -1) {
// 如果不存在新增选项卡
state.panes.push(value);
sessionStorage.setItem("pear_tabs", JSON.stringify(state.panes));
}
state.activeKey = value.path;
},
// 删除选项卡实现
removeTab(state, targetKey) {
//当前激活的选项卡, 选项卡列表
let { activeKey, panes } = state;
panes.forEach((pane, index) => {
if (pane.path === targetKey) {
if (pane.closable != false) {
panes.splice(index, 1);
state.panes = panes;
sessionStorage.setItem("pear_tabs", JSON.stringify(panes));
//更换已经选中的菜单
if (activeKey === targetKey) {
let lastPane = panes[panes.length - 1];
state.activeKey = lastPane ? lastPane.path : "";
}
} else {
message.warning("禁止关闭");
}
}
});
},
//keepKeys, 需要保留的keys
closeAllTab(state, keepKeys = []) {
//当前激活的选项卡, 选项卡列表
let { activeKey, panes } = state;
//保留不能关闭的选项卡
panes = panes.filter(
pane => pane.closable === false || keepKeys.includes(pane.path)
);
state.panes = panes;
sessionStorage.setItem("pear_tabs", JSON.stringify(panes));
//检查当前选中的是否被关闭
if (panes.findIndex(pane => pane.path === activeKey) === -1) {
let lastPane = panes[panes.length - 1];
state.activeKey = lastPane ? lastPane.path : "";
}
},
closeOtherTab(state) {
mutations.closeAllTab(state, [state.activeKey]);
},
closeCurrentTab(state) {
mutations.removeTab(state, state.activeKey);
},
initPanes(state, panes) {
state.panes = panes;
},
selectTab(state, key) {
state.activeKey = key;
},
UPDATE_ROUTER_ACTIVE(state) {
state.routerActive = !state.routerActive;
},
UPDATE_ISMOBILE(state, isMobile) {
state.isMobile = isMobile;
},
TOGGLE_KEEP_ALIVE(state) {
state.keepAlive = !state.keepAlive;
},
PUSH_CANCEL_TOKEN (state, payload) {
state.cancelToken.push(payload.cancelToken)
},
EXEC_CANCEL_TOKEN (state) {
state.cancelToken.forEach(executor => {
executor('路由跳转取消上个页面的请求')
})
state.cancelToken = []
},
SET_LANGUAGE (state, payload) {
state.language = payload
localStorage.setItem('pear_lang', payload)
}
}
const actions = {
execCancelToken ({commit}) {
return new Promise(resolve => {
commit('EXEC_CANCEL_TOKEN');
resolve()
})
},
setLanguage({commit}, payload) {
commit('SET_LANGUAGE', payload)
}
}
export default {
namespaced: true,
state,
mutations,
actions
}