Add File
This commit is contained in:
164
frontend/src/stores/user.ts
Normal file
164
frontend/src/stores/user.ts
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
import { defineStore } from 'pinia'
|
||||||
|
// import { ref } from 'vue'
|
||||||
|
import { AuthApi } from '@/api/login'
|
||||||
|
import { useCache } from '@/utils/useCache'
|
||||||
|
import { i18n } from '@/i18n'
|
||||||
|
import { store } from './index'
|
||||||
|
|
||||||
|
const { wsCache } = useCache()
|
||||||
|
|
||||||
|
interface UserState {
|
||||||
|
token: string
|
||||||
|
uid: string
|
||||||
|
account: string
|
||||||
|
name: string
|
||||||
|
oid: string
|
||||||
|
language: string
|
||||||
|
exp: number
|
||||||
|
time: number
|
||||||
|
weight: number
|
||||||
|
[key: string]: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
export const UserStore = defineStore('user', {
|
||||||
|
state: (): UserState => {
|
||||||
|
return {
|
||||||
|
token: '',
|
||||||
|
uid: '',
|
||||||
|
account: '',
|
||||||
|
name: '',
|
||||||
|
oid: '',
|
||||||
|
language: 'zh-CN',
|
||||||
|
exp: 0,
|
||||||
|
time: 0,
|
||||||
|
weight: 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getters: {
|
||||||
|
getToken(): string {
|
||||||
|
return this.token
|
||||||
|
},
|
||||||
|
getUid(): string {
|
||||||
|
return this.uid
|
||||||
|
},
|
||||||
|
getAccount(): string {
|
||||||
|
return this.account
|
||||||
|
},
|
||||||
|
getName(): string {
|
||||||
|
return this.name
|
||||||
|
},
|
||||||
|
getOid(): string {
|
||||||
|
return this.oid
|
||||||
|
},
|
||||||
|
getLanguage(): string {
|
||||||
|
return this.language
|
||||||
|
},
|
||||||
|
getExp(): number {
|
||||||
|
return this.exp
|
||||||
|
},
|
||||||
|
getTime(): number {
|
||||||
|
return this.time
|
||||||
|
},
|
||||||
|
isAdmin(): boolean {
|
||||||
|
return this.uid === '1'
|
||||||
|
},
|
||||||
|
getWeight(): number {
|
||||||
|
return this.weight
|
||||||
|
},
|
||||||
|
isSpaceAdmin(): boolean {
|
||||||
|
return this.uid === '1' || !!this.weight
|
||||||
|
},
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
async login(formData: { username: string; password: string }) {
|
||||||
|
const res: any = await AuthApi.login(formData)
|
||||||
|
this.setToken(res.access_token)
|
||||||
|
},
|
||||||
|
|
||||||
|
logout() {
|
||||||
|
this.clear()
|
||||||
|
},
|
||||||
|
|
||||||
|
async info() {
|
||||||
|
const res: any = await AuthApi.info()
|
||||||
|
const res_data = res || {}
|
||||||
|
|
||||||
|
const keys = ['uid', 'account', 'name', 'oid', 'language', 'exp', 'time', 'weight'] as const
|
||||||
|
|
||||||
|
keys.forEach((key) => {
|
||||||
|
const dkey = key === 'uid' ? 'id' : key
|
||||||
|
const value = res_data[dkey]
|
||||||
|
if (key === 'exp' || key === 'time' || key === 'weight') {
|
||||||
|
this[key] = Number(value)
|
||||||
|
} else {
|
||||||
|
this[key] = String(value)
|
||||||
|
}
|
||||||
|
wsCache.set('user.' + key, value)
|
||||||
|
})
|
||||||
|
|
||||||
|
this.setLanguage(this.language)
|
||||||
|
},
|
||||||
|
setToken(token: string) {
|
||||||
|
wsCache.set('user.token', token)
|
||||||
|
this.token = token
|
||||||
|
},
|
||||||
|
setExp(exp: number) {
|
||||||
|
wsCache.set('user.exp', exp)
|
||||||
|
this.exp = exp
|
||||||
|
},
|
||||||
|
setTime(time: number) {
|
||||||
|
wsCache.set('user.time', time)
|
||||||
|
this.time = time
|
||||||
|
},
|
||||||
|
setUid(uid: string) {
|
||||||
|
wsCache.set('user.uid', uid)
|
||||||
|
this.uid = uid
|
||||||
|
},
|
||||||
|
setAccount(account: string) {
|
||||||
|
wsCache.set('user.account', account)
|
||||||
|
this.account = account
|
||||||
|
},
|
||||||
|
setName(name: string) {
|
||||||
|
wsCache.set('user.name', name)
|
||||||
|
this.name = name
|
||||||
|
},
|
||||||
|
setOid(oid: string) {
|
||||||
|
wsCache.set('user.oid', oid)
|
||||||
|
this.oid = oid
|
||||||
|
},
|
||||||
|
setLanguage(language: string) {
|
||||||
|
if (!language || language === 'zh_CN') {
|
||||||
|
language = 'zh-CN'
|
||||||
|
}
|
||||||
|
wsCache.set('user.language', language)
|
||||||
|
this.language = language
|
||||||
|
i18n.global.locale.value = language
|
||||||
|
/* const { locale } = useI18n()
|
||||||
|
locale.value = language */
|
||||||
|
// locale.setLang(language)
|
||||||
|
},
|
||||||
|
setWeight(weight: number) {
|
||||||
|
wsCache.set('user.weight', weight)
|
||||||
|
this.weight = weight
|
||||||
|
},
|
||||||
|
clear() {
|
||||||
|
const keys: string[] = [
|
||||||
|
'token',
|
||||||
|
'uid',
|
||||||
|
'account',
|
||||||
|
'name',
|
||||||
|
'oid',
|
||||||
|
'language',
|
||||||
|
'exp',
|
||||||
|
'time',
|
||||||
|
'weight',
|
||||||
|
]
|
||||||
|
keys.forEach((key) => wsCache.delete('user.' + key))
|
||||||
|
this.$reset()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
export const useUserStore = () => {
|
||||||
|
return UserStore(store)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user