import { create } from 'zustand'; import { persist } from 'zustand/middleware'; /** * 用户信息接口 */ export interface User { id: number; email: string; full_name: string; role: string; permissions: string[]; company_id: number; } /** * 认证状态接口 */ interface AuthState { user: User | null; token: string | null; isAuthenticated: boolean; // Actions login: (user: User, token: string) => void; logout: () => void; setUser: (user: User) => void; updateUser: (userData: Partial) => void; } /** * 认证状态 Store * 使用 localStorage 持久化 */ export const useAuthStore = create()( persist( (set) => ({ user: null, token: null, isAuthenticated: false, login: (user, token) => { // 保存到 localStorage if (typeof window !== 'undefined') { localStorage.setItem('auth_token', token); localStorage.setItem('company_id', String(user.company_id)); } set({ user, token, isAuthenticated: true, }); }, logout: () => { // 清除 localStorage if (typeof window !== 'undefined') { localStorage.removeItem('auth_token'); localStorage.removeItem('company_id'); // 清除 cookie document.cookie = 'auth_token=; path=/; max-age=0; SameSite=Lax'; document.cookie = 'company_id=; path=/; max-age=0; SameSite=Lax'; } set({ user: null, token: null, isAuthenticated: false, }); }, setUser: (user) => { set({ user, isAuthenticated: true }); }, updateUser: (userData) => { set((state) => ({ user: state.user ? { ...state.user, ...userData } : null, })); }, }), { name: 'auth-storage', partialize: (state) => ({ user: state.user, token: state.token, isAuthenticated: state.isAuthenticated, }), } ) );