import Cookies from 'js-cookie' import { getDimension, setDimension } from '../../utils/auth' import $storage from 'good-storage' import { switchPoint, getUnreadMessageCount } from '../../api/user.js' import { isMobile } from '../../utils/base.js' const state = { sidebar: { opened: isMobile() ? false : true, withoutAnimation: false, width: Cookies.get('sidebarWidth') || '230px' }, topMenu: Cookies.get('topMenu'), // 当前语言 language: Cookies.get('language') || 'en_US', // 主题 '':亮色 / dark:暗黑 theme: $storage.get('theme') || '', // 系统端 system: $storage.get('system') || '', // 当前系统的所有多语言数据 i18nMessages: {}, // 组件全局尺寸 dimension: getDimension(), // 字体尺寸 size: Cookies.get('size') || 'medium', reloginVisible: false, // 面包屑 breadcrumbList: [], // 菜单打开项 openedKeys: [], showMessage: false, messageData: {}, messageCount: 0, // 是否显示18禁弹窗 showForbidden: true, // 阻止页面切换 showPrevent: false, showLogin: false } const mutations = { // 切换菜单显示隐藏 TOGGLE_SIDEBAR: (state) => { state.sidebar.opened = !state.sidebar.opened state.sidebar.withoutAnimation = false if (state.sidebar.opened) { Cookies.set('sidebarStatus', 1) } else { Cookies.set('sidebarStatus', 0) } }, CLOSE_SIDEBAR: (state) => { Cookies.set('sidebarStatus', 0) state.sidebar.opened = false }, // 设置一级菜单值 SET_TOP_MENU: (state, value) => { Cookies.set('topMenu', value) state.topMenu = value }, // 设置菜单宽度 SET_SIDEBAR_WIDTH: (state, width) => { state.sidebar.width = width Cookies.set('sidebarWidth', width) }, SET_LANGUAGE: (state, language) => { state.language = language Cookies.set('language', language) }, SET_SIZE: (state, size) => { state.size = size Cookies.set('size', size) }, SET_DIMENSION: (state, value) => { state.dimension = value setDimension(value) }, SET_I18N_MESSAGES: (state, value) => { state.i18nMessages = value }, SET_BREADCRUMB: (state, value) => { state.breadcrumbList = value }, SET_BREADCRUMB_NAME: (state, value) => { if (!Array.isArray(value)) return value.map((i) => { state.breadcrumbList .filter((bread) => bread?.meta?.title === i.currTitle) .map((bread) => { bread.meta.title = i.newTitle bread.meta.i18n = false if (i.redirect) bread.redirect = i.redirect }) }) }, // 设置主题 SET_THEME(state, value) { state.theme = value $storage.set('theme', value) }, // 设置系统端 SET_SYSTEM(state, value) { state.system = value $storage.set('system', value) }, SET_OPENED_KEYS(state, value) { state.openedKeys = value; }, SHOW_MESSAGE(state, { show, source, id, orderid }) { state.showMessage = show; state.messageData = { source, id, orderid } }, SET_UNREAD_MESSAGE(state, value) { state.messageCount = value; }, SET_FORBIDDEN(state, value) { state.showForbidden = value; $storage.set('showForbidden', value) }, SET_PREVENT(state, value) { state.showPrevent = value; }, SET_SHOW_LOGIN(state, value) { state.showLogin = value; } } const actions = { setPrevent({ commit }, value) { commit('SET_PREVENT', value); }, setShowLogin({ commit }, value) { commit('SET_SHOW_LOGIN', value); }, toggleSideBar({ commit }) { commit('TOGGLE_SIDEBAR') }, closeSideBar({ commit }) { commit('CLOSE_SIDEBAR') }, setTopMenu({ commit }, value) { commit('SET_TOP_MENU', value) }, setLanguage({ commit }, language) { commit('SET_LANGUAGE', language) }, setSize({ commit }, size) { commit('SET_SIZE', size) }, setDimension({ commit }, value) { commit('SET_DIMENSION', value) }, setI18nMessages({ commit }, messages) { commit('SET_I18N_MESSAGES', messages) }, // 设置面包屑 setBreadcrumb({ commit }, value) { commit('SET_BREADCRUMB', value) }, // 设置面包屑名称 setBreadcrumbName({ commit }, value) { commit('SET_BREADCRUMB_NAME', value) }, // 设置主题 setTheme({ commit }, value) { commit('SET_THEME', value) }, // 设置当前系统端 setSystem({ commit }, value) { commit('SET_SYSTEM', value) }, // 设置菜单展开项 setOpenedKeys({ commit }, value) { commit('SET_OPENED_KEYS', value) }, // 显示消息提示 showMessage({ commit, dispatch }, value) { return new Promise((resolve, reject) => { let { mid } = value; if (mid) { dispatch('main/switchSystem', 'service', { root: true }).then((_) => { dispatch('user/swichUser', mid, { root: true }).then((_) => { commit('SHOW_MESSAGE', value) resolve() }) }) } else { commit('SHOW_MESSAGE', value) resolve() } }) }, // 读取未读消息数量 getUnreadMessage({ commit }) { getUnreadMessageCount().then(res => { commit('SET_UNREAD_MESSAGE', parseInt(res)) }) }, // 设置是否显示18禁弹窗 setForbidden({ commit }, value) { commit('SET_FORBIDDEN', value) }, } export default { namespaced: true, state, mutations, actions }