Files
KCGL/inventory-web/src/stores/user.ts
2026-02-04 13:30:07 +08:00

46 lines
1.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineStore } from 'pinia'
import { login } from '@/api/auth'
import { ref } from 'vue'
export const useUserStore = defineStore('user', () => {
const token = ref(localStorage.getItem('token') || '')
const role = ref(localStorage.getItem('role') || '') // 持久化角色
const username = ref(localStorage.getItem('username') || '')
const handleLogin = async (loginForm: any) => {
try {
const res = await login(loginForm)
// res.data 结构: { access_token, user: { role, username, ... } }
const data = res.data
token.value = data.access_token
role.value = data.user.role
username.value = data.user.username
// 持久化存储 (简单处理生产环境建议加密或仅存Token)
localStorage.setItem('token', data.access_token)
localStorage.setItem('role', data.user.role)
localStorage.setItem('username', data.user.username)
return true
} catch (error) {
console.error(error)
return false
}
}
const logout = () => {
token.value = ''
role.value = ''
username.value = ''
localStorage.clear()
window.location.reload()
}
// 辅助函数:判断当前用户是否拥有某些角色
const hasRole = (roles: string[]) => {
return roles.includes(role.value)
}
return { token, role, username, handleLogin, logout, hasRole }
})