import { clearDashboard } from '@/stores/dashboard'
|
import { clearTodos } from '@/stores/todos'
|
import { getUserInfo, loginApi, logoutApi, type LoginParams } from '../api/auth'
|
|
export interface AuthUser {
|
username: string
|
displayName: string
|
role: string
|
}
|
|
const AUTH_TOKEN_KEY = 'battery_detection_auth_token'
|
const AUTH_USER_KEY = 'battery_detection_auth_user'
|
|
function clearSession() {
|
clearTodos()
|
clearDashboard()
|
localStorage.removeItem(AUTH_TOKEN_KEY)
|
localStorage.removeItem(AUTH_USER_KEY)
|
}
|
|
export async function login(params: LoginParams): Promise<AuthUser> {
|
clearTodos()
|
clearDashboard()
|
const loginResult = await loginApi(params)
|
localStorage.setItem(AUTH_TOKEN_KEY, loginResult.token)
|
|
try {
|
const userResult = await getUserInfo()
|
const username = userResult.user.userName || params.username
|
const user: AuthUser = {
|
username,
|
displayName: userResult.user.nickName || username,
|
role: userResult.roles?.join('、') || '普通用户',
|
}
|
localStorage.setItem(AUTH_USER_KEY, JSON.stringify(user))
|
return user
|
} catch (error) {
|
clearSession()
|
throw error
|
}
|
}
|
|
export async function logout() {
|
try {
|
if (isAuthenticated()) {
|
await logoutApi()
|
}
|
} finally {
|
clearSession()
|
}
|
}
|
|
export function isAuthenticated() {
|
return Boolean(localStorage.getItem(AUTH_TOKEN_KEY))
|
}
|
|
export function getCurrentUser(): AuthUser | null {
|
const rawUser = localStorage.getItem(AUTH_USER_KEY)
|
if (!rawUser) return null
|
|
try {
|
return JSON.parse(rawUser) as AuthUser
|
} catch {
|
clearSession()
|
return null
|
}
|
}
|