export const BRAND = { red: '#A02D30', yellow: '#FFC107', bg: '#f5f5f5', text: '#333', muted: '#999', }; export const apiBase = '/api/v1'; export async function request( clientApp: string, path: string, options: RequestInit = {}, ): Promise { const token = localStorage.getItem('accessToken'); const headers: Record = { 'Content-Type': 'application/json', 'X-Client-App': clientApp, ...(options.headers as Record), }; if (token) headers.Authorization = `Bearer ${token}`; const res = await fetch(`${apiBase}${path}`, { ...options, headers }); const json = await res.json(); if (json.code !== 0) throw new Error(json.message || '请求失败'); return json.data as T; } export function saveAuth(data: { accessToken: string; refreshToken?: string }) { localStorage.setItem('accessToken', data.accessToken); if (data.refreshToken) localStorage.setItem('refreshToken', data.refreshToken); } export function clearAuth() { localStorage.removeItem('accessToken'); localStorage.removeItem('refreshToken'); } export function isLoggedIn() { return !!localStorage.getItem('accessToken'); }