import { InjectionKey } from 'vue' import { createStore, useStore as baseUseStore, Store } from 'vuex' import themeConfig from '/@/utils/themeConfig.ts' export interface RootStateTypes { themeConfig: { isDrawer: boolean, primary: string, success: string, info: string, warning: string, danger: string, topBar: string, menuBar: string, columnsMenuBar: string, topBarColor: string, menuBarColor: string, columnsMenuBarColor: string, isTopBarColorGradual: boolean, isMenuBarColorGradual: boolean, isMenuBarColorHighlight: boolean, isCollapse: boolean, isUniqueOpened: boolean, isFixedHeader: boolean, isFixedHeaderChange: boolean, isClassicSplitMenu: boolean, isLockScreen: boolean, lockScreenTime: number, isShowLogo: boolean, isShowLogoChange: boolean, isBreadcrumb: boolean, isTagsview: boolean, isBreadcrumbIcon: boolean, isTagsviewIcon: boolean, isCacheTagsView: boolean, isFooter: boolean, isGrayscale: boolean, isInvert: boolean, isWartermark: boolean, wartermarkText: string, tagsStyle: string, animation: string, columnsAsideStyle: string, layout: string }, routes: Array, caches: Array, tagsViewRoutes: Array, auths: Array } export const key: InjectionKey> = Symbol() export const store = createStore({ state: { themeConfig, routes: [], caches: [], tagsViewRoutes: [], auths: [] }, mutations: { getThemeConfig(state: any, data: object) { state.themeConfig = Object.assign({}, data) }, getRoutes(state: any, data: Array) { state.routes = data }, getCacheKeepAlive(state: any, data: Array) { state.caches = data }, getTagsViewRoutes(state: any, data: Array) { state.tagsViewRoutes = data }, getAuths(state: any, data: Array) { state.auths = data } }, actions: { setThemeConfig({ commit }, data: object) { commit('getThemeConfig', data) }, async setRoutes({ commit }, data: any) { commit('getRoutes', data) }, async setCacheKeepAlive({ commit }, data: Array) { commit('getCacheKeepAlive', data) }, async setTagsViewRoutes({ commit }, data: Array) { commit('getTagsViewRoutes', data) }, setAuths({ commit }, data: Array) { const defaultAuthList: Array = ['admin', 'btn.add', 'btn.del', 'btn.edit'] let authList: Array = [] if (data && data.length > 0) authList = data else authList = defaultAuthList commit('getAuths', authList) } } }) export function useStore() { return baseUseStore(key) }