import { getByAppId, getAppCurrentMenus } from '@/api/appCenter.js' import { translateTreeToData } from '@/utils' import defaultSettings from '@/config' const { tabsBar, layout, header, themeBar, style, themeColor } = defaultSettings const topMenus = [ { id: '163', type: 163, name: '邮件中心' }, { id: '164', type: 164, name: '消息中心' }, ] const state = () => ({ menus: [], tileMenus: [], appInfo: {}, logo: null, visitedMenus: [], activeMenu: null, indexMenu: {}, tabsBar: tabsBar, layout: layout, header: header, themeBar: themeBar, style: style, themeColor: themeColor, }) const getters = { menus: (state) => state.menus, appInfo: (state) => state.appInfo, logo: (state) => state.logo, visitedMenus: (state) => state.visitedMenus, activeMenu: (state) => state.activeMenu, tileMenus: (state) => state.tileMenus, tabsBar: (state) => state.tabsBar, layout: (state) => state.layout, header: (state) => state.header, themeBar: (state) => state.themeBar, style: (state) => state.style, themeColor: (state) => state.themeColor, } const mutations = { setAppInfo(state, appInfo) { state.appInfo = appInfo }, setMenus(state, menus) { state.menus = menus state.tileMenus = translateTreeToData([...topMenus, ...menus], 'name') }, setLogo(state, logo) { state.logo = logo }, addVisitedMenus(state, menu) { state.visitedMenus.push(menu) }, delVisitedMenus(state, menu) { state.visitedMenus.forEach((item, index) => { if (item.id === menu.id) state.visitedMenus.splice(index, 1) }) }, setActiveMenu(state, menu) { state.activeMenu = menu }, setVisitedMenus(state, menus) { state.visitedMenus = menus }, setIndexMenu(state, menu) { state.indexMenu = menu }, changeLayout: (state, layout) => { if (layout) state.layout = layout }, changeStyle: (state, style) => { if (style) state.style = style }, changeThemeColor: (state, themeColor) => { if (style) state.themeColor = themeColor }, changeHeader: (state, header) => { if (header) state.header = header }, changeTabsBar: (state, tabsBar) => { if (tabsBar) state.tabsBar = tabsBar }, } const actions = { getMenus({ commit, state, dispatch }, appId) { getAppCurrentMenus(appId).then((data) => { commit('setMenus', data) let firstMenu = state.tileMenus .filter((item) => item.menuType === 'page') .find((menu) => !topMenus.map((item) => item.id).includes(menu.id)) commit('setIndexMenu', firstMenu) dispatch('setVisitedMenus', []) dispatch('addVisitedMenus', firstMenu.id) }) }, getAppInfo({ commit, state }, appId) { return getByAppId(appId).then((data) => { commit('setAppInfo', data) commit('setLogo', data.icon) }) }, addVisitedMenus({ commit, state }, selectedMenuId) { let selectedMenu = state.tileMenus.find( (menu) => menu.id === selectedMenuId ) commit('setActiveMenu', selectedMenu) if ( !state.visitedMenus.some( (visitedMenu) => visitedMenu.id === selectedMenu.id ) ) { commit('addVisitedMenus', selectedMenu) } }, addVisitedMenuByObject({ commit, state }, selectedMenu) { commit('setActiveMenu', selectedMenu) if ( !state.visitedMenus.some( (visitedMenu) => visitedMenu.id === selectedMenu.id ) ) { commit('addVisitedMenus', selectedMenu) } }, delVisitedMenus({ commit, state }, menu) { commit('delVisitedMenus', menu) }, setActiveMenu({ commit, state }, menu) { commit('setActiveMenu', menu) }, delAllVisitedMenus({ commit, state }) { commit('setVisitedMenus', []) }, setVisitedMenus({ commit, state }, menus) { commit('setVisitedMenus', menus) }, delOtherMenus({ commit }, menu) { commit('setVisitedMenus', [menu]) }, delLeftMenus({ commit, state }, index) { commit( 'setVisitedMenus', state.visitedMenus.slice(index, state.visitedMenus.length) ) }, delRightMenus({ commit, state }, index) { commit('setVisitedMenus', state.visitedMenus.slice(0, index + 1)) }, changeStyle({ commit }, style) { commit('changeStyle', style) }, changeLayout({ commit }, layout) { commit('changeLayout', layout) }, changeThemeColor({ commit }, themeColor) { commit('changeThemeColor', themeColor) }, changeHeader({ commit }, header) { commit('changeHeader', header) }, changeTabsBar({ commit }, tabsBar) { commit('changeTabsBar', tabsBar) }, } export default { state, getters, mutations, actions }