import { defineStore } from 'pinia' import { ref } from 'vue' import { authApi } from '../api' export const useAuthStore = defineStore('auth', () => { const user = ref(null) const token = ref(localStorage.getItem('token') || '') async function login(username, password) { const res = await authApi.login({ username, password }) token.value = res.access_token localStorage.setItem('token', res.access_token) // 登录后立即获取用户信息,失败不影响登录流程 try { user.value = await authApi.me() } catch (e) { console.error('fetchUser after login failed:', e) } } async function fetchUser() { if (!token.value) return try { user.value = await authApi.me() } catch { logout() } } function logout() { user.value = null token.value = '' localStorage.removeItem('token') } const isOwner = () => user.value?.role === 'Owner' const isSupervisor = () => ['Owner', '主管'].includes(user.value?.role) const isLeaderOrAbove = () => ['Owner', '主管', '组长'].includes(user.value?.role) return { user, token, login, fetchUser, logout, isOwner, isSupervisor, isLeaderOrAbove } })