Files
xiaozhi-esp32-server/main/manager-mobile/src/store/user.ts
T

83 lines
2.0 KiB
TypeScript

import type { UserInfo } from '@/api/auth'
import { defineStore } from 'pinia'
import { ref } from 'vue'
import {
getUserInfo as _getUserInfo,
} from '@/api/auth'
// 初始化状态
const userInfoState: UserInfo & { avatar?: string, token?: string } = {
id: 0,
username: '',
realName: '',
email: '',
mobile: '',
status: 0,
superAdmin: 0,
avatar: '/static/images/default-avatar.png',
token: '',
}
export const useUserStore = defineStore(
'userInfo',
() => {
// 定义用户信息
const userInfo = ref<UserInfo & { avatar?: string, token?: string }>({ ...userInfoState })
// 设置用户信息
const setUserInfo = (val: UserInfo & { avatar?: string, token?: string }) => {
console.log('设置用户信息', val)
// 若头像为空 则使用默认头像
if (!val.avatar) {
val.avatar = userInfoState.avatar
}
else {
val.avatar = 'https://oss.laf.run/ukw0y1-site/avatar.jpg?feige'
}
userInfo.value = val
}
const setUserAvatar = (avatar: string) => {
userInfo.value.avatar = avatar
console.log('设置用户头像', avatar)
console.log('userInfo', userInfo.value)
}
// 删除用户信息
const removeUserInfo = () => {
userInfo.value = { ...userInfoState }
uni.removeStorageSync('userInfo')
uni.removeStorageSync('token')
}
/**
* 获取用户信息
*/
const getUserInfo = async () => {
const userData = await _getUserInfo()
setUserInfo(userData)
return userData
}
/**
* 退出登录 并 删除用户信息
*/
const logout = async () => {
removeUserInfo()
}
return {
userInfo,
getUserInfo,
setUserInfo,
setUserAvatar,
logout,
removeUserInfo,
}
},
{
persist: {
key: 'userInfo',
serializer: {
serialize: state => JSON.stringify(state.userInfo),
deserialize: value => ({ userInfo: JSON.parse(value) }),
},
},
},
)