2026-03-28 00:56:59 +08:00

75 lines
2.1 KiB
TypeScript

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) : []))