75 lines
2.1 KiB
TypeScript
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) : [])) |