11import { defineStore } from 'pinia'
2- import { ref } from 'vue'
2+ // import { ref } from 'vue'
33import { AuthApi } from '@/api/login'
44import { useCache } from '@/utils/useCache'
55import { i18n } from '@/i18n'
@@ -17,18 +17,19 @@ interface UserState {
1717 language : string
1818 exp : number
1919 time : number
20+ [ key : string ] : string | number
2021}
2122
2223export const UserStore = defineStore ( 'user' , {
2324 state : ( ) : UserState => {
2425 return {
25- token : null ,
26- uid : null ,
27- name : null ,
28- oid : null ,
26+ token : '' ,
27+ uid : '' ,
28+ name : '' ,
29+ oid : '' ,
2930 language : 'zh-CN' ,
30- exp : null ,
31- time : null
31+ exp : 0 ,
32+ time : 0
3233 }
3334 } ,
3435 getters : {
@@ -69,13 +70,23 @@ export const UserStore = defineStore('user', {
6970 const res : any = await AuthApi . info ( )
7071 const res_data = res || { }
7172
72- const keys : string [ ] = [ 'uid' , 'name' , 'oid' , 'language' , 'exp' , 'time' ]
73-
73+ // 指定 keys 类型为 UserState 的键
74+ const keys = [ 'uid' , 'name' , 'oid' , 'language' , 'exp' , 'time' ] as const
75+
7476 keys . forEach ( key => {
7577 const dkey = key === 'uid' ? 'id' : key
76- this [ key ] = res_data [ dkey ]
77- wsCache . set ( 'user.' + key , this [ key ] )
78+ const value = res_data [ dkey ]
79+
80+ // 使用类型守卫区分数字和字符串类型
81+ if ( key === 'exp' || key === 'time' ) {
82+ this [ key ] = Number ( value )
83+ wsCache . set ( 'user.' + key , value . toString ( ) )
84+ } else {
85+ this [ key ] = String ( value )
86+ wsCache . set ( 'user.' + key , value )
87+ }
7888 } )
89+
7990 this . setLanguage ( this . language )
8091 } ,
8192 setToken ( token : string ) {
0 commit comments