import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { getToken, setToken, removeToken } from '@/utils/auth' import { login, logout, getUserInfo } from '@/api/auth' import type { LoginData, User } from '@/types/system' export const useUserStore = defineStore('user', () => { const token = ref(getToken()) const userInfo = ref(null) const roles = ref([]) const isLoggedIn = computed(() => !!token.value) async function loginAction(data: LoginData) { const res = await login(data) token.value = res.token setToken(res.token) return res } async function fetchUserInfo() { const res = await getUserInfo() userInfo.value = res roles.value = res.roleIds?.map(String) || [] return res } async function logoutAction() { try { await logout() } catch { // ignore } token.value = undefined userInfo.value = null roles.value = [] removeToken() } return { token, userInfo, roles, isLoggedIn, loginAction, fetchUserInfo, logoutAction } })