import { defineStore } from 'pinia' import router from '../router' import { baAccountLogout } from '/@/api/backend/index' import { BA_ACCOUNT } from '/@/stores/constant/cacheKey' import type { UserInfo } from '/@/stores/interface' import { Local } from '/@/utils/storage' export const useBaAccount = defineStore('baAccount', { state: (): Partial => { return { id: 0, username: '', nickname: '', email: '', mobile: '', avatar: '', gender: 0, birthday: '', money: 0, score: 0, motto: '', token: '', refresh_token: '', } }, actions: { /** * 状态批量填充 * @param state 新状态数据 * @param [exclude=true] 是否排除某些字段(忽略填充),默认值 true 排除 token 和 refresh_token,传递 false 则不排除,还可传递 string[] 指定排除字段列表 */ dataFill(state: Partial, exclude: boolean | string[] = true) { if (exclude === true) { exclude = ['token', 'refresh_token'] } else if (exclude === false) { exclude = [] } if (Array.isArray(exclude)) { exclude.forEach((item) => { delete state[item as keyof UserInfo] }) } this.$patch(state) }, removeToken() { this.token = '' this.refresh_token = '' }, getGenderIcon() { let icon = { name: 'fa fa-transgender-alt', color: 'var(--el-text-color-secondary)' } switch (this.gender) { case 1: icon = { name: 'fa fa-mars-stroke-v', color: 'var(--el-color-primary)' } break case 2: icon = { name: 'fa fa-mars-stroke', color: 'var(--el-color-danger)' } break } return icon }, setToken(token: string, type: 'auth' | 'refresh') { const field = type == 'auth' ? 'token' : 'refresh_token' this[field] = token }, getToken(type: 'auth' | 'refresh' = 'auth') { return type === 'auth' ? this.token : this.refresh_token }, logout() { baAccountLogout().then((res) => { if (res.code == 1) { Local.remove(BA_ACCOUNT) router.go(0) } }) }, }, persist: { key: BA_ACCOUNT, }, })