// /src/stores/authStore.js import { defineStore } from 'pinia'; import { ref, computed } from 'vue'; import { authApi } from '@/api/authApi'; import Cookies from 'js-cookie'; import { usePermissionStore } from './permissionStore'; export const useAuthStore = defineStore('auth', () => { const accessToken = ref(localStorage.getItem('accessToken') || Cookies.get('accessToken') || ''); const refreshToken = ref(localStorage.getItem('refreshToken') || Cookies.get('refreshToken') || ''); const user = ref(JSON.parse(localStorage.getItem('user') || 'null')); const isAuthenticated = computed(() => !!accessToken.value); function setTokens(access, refresh) { accessToken.value = access; refreshToken.value = refresh; if (access) { localStorage.setItem('accessToken', access); Cookies.set('accessToken', access); } else { localStorage.removeItem('accessToken'); Cookies.remove('accessToken'); } if (refresh) { localStorage.setItem('refreshToken', refresh); Cookies.set('refreshToken', refresh); } else { localStorage.removeItem('refreshToken'); Cookies.remove('refreshToken'); } } function setUser(userData) { user.value = userData; if (userData) { localStorage.setItem('user', JSON.stringify(userData)); } else { localStorage.removeItem('user'); } } async function login(credentials) { const response = await authApi.login(credentials); const data = response.data || response; // Server response: accessToken, refreshToken, user, permissions / role setTokens(data.accessToken, data.refreshToken); setUser(data.user); const permissionStore = usePermissionStore(); const perms = data.user?.role?.permissions || data.permissions || []; const roleName = data.user?.role?.name || data.role || ''; permissionStore.setPermissions(perms, roleName); return data; } async function logout() { try { if (refreshToken.value) { await authApi.logout(refreshToken.value); } } catch (e) { console.warn('Logout API error:', e); } finally { setTokens('', ''); setUser(null); const permissionStore = usePermissionStore(); permissionStore.clearPermissions(); } } return { accessToken, refreshToken, user, isAuthenticated, setTokens, setUser, login, logout }; });