awake
This commit is contained in:
119
src/stores/modules/user.ts
Normal file
119
src/stores/modules/user.ts
Normal file
@ -0,0 +1,119 @@
|
||||
/**
|
||||
* 用户状态管理
|
||||
*/
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
|
||||
export interface UserInfo {
|
||||
id: number | string
|
||||
username: string
|
||||
nickname: string
|
||||
avatar?: string
|
||||
email?: string
|
||||
phone?: string
|
||||
roles: string[]
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
// 用户信息
|
||||
const userInfo = ref<UserInfo | null>(null)
|
||||
|
||||
// 访问令牌
|
||||
const accessToken = ref<string>('')
|
||||
|
||||
// 刷新令牌
|
||||
const refreshToken = ref<string>('')
|
||||
|
||||
// 计算属性
|
||||
const isLoggedIn = computed(() => !!accessToken.value && !!userInfo.value)
|
||||
const username = computed(() => userInfo.value?.username || '')
|
||||
const nickname = computed(() => userInfo.value?.nickname || '')
|
||||
const roles = computed(() => userInfo.value?.roles || [])
|
||||
|
||||
// 设置用户信息
|
||||
const setUserInfo = (info: UserInfo) => {
|
||||
userInfo.value = info
|
||||
}
|
||||
|
||||
// 设置访问令牌
|
||||
const setAccessToken = (token: string) => {
|
||||
accessToken.value = token
|
||||
}
|
||||
|
||||
// 设置刷新令牌
|
||||
const setRefreshToken = (token: string) => {
|
||||
refreshToken.value = token
|
||||
}
|
||||
|
||||
// 登录
|
||||
const login = async (loginData: { username: string; password: string }) => {
|
||||
try {
|
||||
// 这里调用登录API
|
||||
// const response = await loginApi(loginData)
|
||||
|
||||
// 模拟登录成功
|
||||
const mockUserInfo: UserInfo = {
|
||||
id: 1,
|
||||
username: loginData.username,
|
||||
nickname: loginData.username,
|
||||
roles: ['user']
|
||||
}
|
||||
|
||||
setUserInfo(mockUserInfo)
|
||||
setAccessToken('mock-access-token')
|
||||
setRefreshToken('mock-refresh-token')
|
||||
|
||||
return { success: true, data: mockUserInfo }
|
||||
} catch (error) {
|
||||
console.error('登录失败:', error)
|
||||
return { success: false, error: '登录失败' }
|
||||
}
|
||||
}
|
||||
|
||||
// 登出
|
||||
const logout = () => {
|
||||
userInfo.value = null
|
||||
accessToken.value = ''
|
||||
refreshToken.value = ''
|
||||
}
|
||||
|
||||
// 更新用户信息
|
||||
const updateUserInfo = (updates: Partial<UserInfo>) => {
|
||||
if (userInfo.value) {
|
||||
userInfo.value = { ...userInfo.value, ...updates }
|
||||
}
|
||||
}
|
||||
|
||||
// 检查权限
|
||||
const hasRole = (role: string) => {
|
||||
return roles.value.includes(role)
|
||||
}
|
||||
|
||||
// 检查多个权限
|
||||
const hasAnyRole = (roleList: string[]) => {
|
||||
return roleList.some(role => hasRole(role))
|
||||
}
|
||||
|
||||
return {
|
||||
// 状态
|
||||
userInfo,
|
||||
accessToken,
|
||||
refreshToken,
|
||||
|
||||
// 计算属性
|
||||
isLoggedIn,
|
||||
username,
|
||||
nickname,
|
||||
roles,
|
||||
|
||||
// 方法
|
||||
setUserInfo,
|
||||
setAccessToken,
|
||||
setRefreshToken,
|
||||
login,
|
||||
logout,
|
||||
updateUserInfo,
|
||||
hasRole,
|
||||
hasAnyRole
|
||||
}
|
||||
})
|
Reference in New Issue
Block a user