'use client'; import { create } from 'zustand'; interface AuthUser { id: string; name: string; roleId: string; departmentId: string; phone: string; email: string; } interface AuthState { user: AuthUser | null; isAuthenticated: boolean; login: (phone: string, password: string, remember: boolean) => boolean; logout: () => void; checkAuth: () => void; } const SESSION_KEY = 'ftb_auth_session'; const PERSIST_KEY = 'ftb_auth_persist'; export const useAuthStore = create((set) => ({ user: null, isAuthenticated: false, login: (phone, password, remember) => { const membersRaw = localStorage.getItem('ftb_members_v1'); let members: any[] = []; if (membersRaw) { const parsed = JSON.parse(membersRaw); members = parsed.members || []; } // fallback: 如果 localStorage 没有数据或为空,使用默认 mock if (members.length === 0) { members = [ { id: 'm-1', name: '张三', departmentId: 'dept-1', roleId: 'role-pm', phone: '13800138001', email: 'zhangsan@company.com', password: 'Ftb@2024' }, { id: 'm-2', name: '李四', departmentId: 'dept-2-1', roleId: 'role-dev', phone: '13900139002', email: 'lisi@company.com', password: 'Ftb@2024' }, { id: 'm-3', name: '王五', departmentId: 'dept-2-2', roleId: 'role-dev', phone: '13700137003', email: 'wangwu@company.com', password: 'Ftb@2024' }, { id: 'm-4', name: '赵六', departmentId: 'dept-2-3', roleId: 'role-test', phone: '13600136004', email: 'zhaoliu@company.com', password: 'Ftb@2024' }, { id: 'm-5', name: '孙七', departmentId: 'dept-3', roleId: 'role-design', phone: '13500135005', email: 'sunqi@company.com', password: 'Ftb@2024' }, { id: 'm-6', name: '周八', departmentId: 'dept-4', roleId: 'role-pm', phone: '13400134006', email: 'zhouba@company.com', password: 'Ftb@2024' }, { id: 'm-7', name: '吴九', departmentId: 'dept-2-1', roleId: 'role-dev', phone: '13300133007', email: 'wujiu@company.com', password: 'Ftb@2024' }, { id: 'm-8', name: '陈十', departmentId: 'dept-1', roleId: 'role-admin', phone: '13200132008', email: 'chenshi@company.com', password: 'Ftb@2024' }, ]; } const member = members.find((m: any) => m.phone === phone && (m.password || 'Ftb@2024') === password); if (!member) return false; const user: AuthUser = { id: member.id, name: member.name, roleId: member.roleId, departmentId: member.departmentId, phone: member.phone, email: member.email, }; set({ user, isAuthenticated: true }); sessionStorage.setItem(SESSION_KEY, JSON.stringify(user)); if (remember) { localStorage.setItem(PERSIST_KEY, JSON.stringify(user)); } return true; }, logout: () => { set({ user: null, isAuthenticated: false }); sessionStorage.removeItem(SESSION_KEY); localStorage.removeItem(PERSIST_KEY); }, checkAuth: () => { const session = sessionStorage.getItem(SESSION_KEY); if (session) { set({ user: JSON.parse(session), isAuthenticated: true }); return; } const persist = localStorage.getItem(PERSIST_KEY); if (persist) { const user = JSON.parse(persist); set({ user, isAuthenticated: true }); sessionStorage.setItem(SESSION_KEY, JSON.stringify(user)); return; } }, }));