import { defineStore } from "pinia"; import { computed, ref } from "vue"; import { http } from "@/modules/admin/api/http"; export type UserProfile = { id: number; username: string; nickname: string; email?: string | null; phone?: string | null; role_id: number; }; export const useAuthStore = defineStore("auth", () => { const token = ref(localStorage.getItem("access_token") || ""); const user = ref(null); const isAuthenticated = computed(() => Boolean(token.value)); function setToken(t: string) { token.value = t; if (t) { localStorage.setItem("access_token", t); } else { localStorage.removeItem("access_token"); } } async function fetchProfile() { const { data } = await http.get("/users/me"); user.value = data; return data; } async function logout() { try { await http.post("/users/logout"); } catch { /* ignore */ } user.value = null; setToken(""); } return { token, user, isAuthenticated, setToken, fetchProfile, logout, }; });