2026-05-10 13:12:44 +08:00

58 lines
1.4 KiB
TypeScript

import { create } from 'zustand';
export interface AICompanion {
name: string;
avatar: string;
persona: string;
}
export interface User {
id: string;
nickname: string;
role: 'author' | 'editor' | 'operator';
phone: string;
aiCompanion: AICompanion;
creditScore: number;
}
interface AuthState {
token: string | null;
user: User | null;
isAuthenticated: boolean;
setAuth: (token: string, user: User) => void;
logout: () => void;
loadFromStorage: () => void;
}
export const useAuthStore = create<AuthState>((set) => ({
token: null,
user: null,
isAuthenticated: false,
setAuth: (token: string, user: User) => {
localStorage.setItem('writing_token', token);
localStorage.setItem('writing_user', JSON.stringify(user));
set({ token, user, isAuthenticated: true });
},
logout: () => {
localStorage.removeItem('writing_token');
localStorage.removeItem('writing_user');
set({ token: null, user: null, isAuthenticated: false });
},
loadFromStorage: () => {
const token = localStorage.getItem('writing_token');
const userStr = localStorage.getItem('writing_user');
if (token && userStr) {
try {
const user = JSON.parse(userStr);
set({ token, user, isAuthenticated: true });
} catch {
localStorage.removeItem('writing_token');
localStorage.removeItem('writing_user');
}
}
},
}));