43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
export const BRAND = {
|
|
red: '#A02D30',
|
|
yellow: '#FFC107',
|
|
bg: '#f5f5f5',
|
|
text: '#333',
|
|
muted: '#999',
|
|
};
|
|
|
|
export const apiBase = '/api/v1';
|
|
|
|
export async function request<T>(
|
|
clientApp: string,
|
|
path: string,
|
|
options: RequestInit = {},
|
|
): Promise<T> {
|
|
const token = localStorage.getItem('accessToken');
|
|
const headers: Record<string, string> = {
|
|
'Content-Type': 'application/json',
|
|
'X-Client-App': clientApp,
|
|
...(options.headers as Record<string, string>),
|
|
};
|
|
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');
|
|
}
|