import { createStore } from 'vuex' import { StateType, UserInfo, TabItem } from './types' class Store { constructor(tabs: TabItem[]) { this.state.tabs = tabs } state: StateType = { loginInfo: { userInfo: null, token: localStorage.getItem('login_token') }, tabs: [], activeTab: null, pageSizeOpts: [10, 20, 50, 100], pageLayout: 'sizes, prev, pager, next, total, ->, jumper' } mutations = { /** * 登录 * @param {Object} state * @param {UserInfo} data 登录数据 */ login(state: StateType, data: {token?: string, userInfo: UserInfo}): void { if (data.token) { localStorage.setItem('login_token', data.token) state.loginInfo.token = data.token } state.loginInfo.userInfo = data.userInfo }, /** * 注销 * @param {Object} state */ logout(state: StateType): void { localStorage.removeItem('login_token') state.loginInfo.token = null state.loginInfo.userInfo = null }, /** * 添加导航页签 * @param {StateType} state * @param {TabItem} tab 新加入的页签 */ addTab(state: StateType, tab: TabItem): void { if (state.tabs.findIndex(item => item.path === tab.path) === -1) { state.tabs.push(tab) localStorage.setItem('tabs', JSON.stringify(state.tabs)) } }, /** * 移除导航页签 * @param {StateType} state * @param {string} path 页签路径 */ removeTab(state: StateType, path: string): void { const removeIndex = state.tabs.findIndex(item => item.path === path) if (removeIndex !== -1) { state.tabs.splice(removeIndex, 1) localStorage.setItem('tabs', JSON.stringify(state.tabs)) } }, /** * 清空导航标签页 * @param {StateType} state */ clearTabs(state: StateType): void { state.tabs.splice(0, state.tabs.length) state.activeTab = null } } } const tabsStr = localStorage.getItem('tabs') export default createStore(new Store(tabsStr ? JSON.parse(tabsStr) : []))