- ErrorBoundary 组件:全局错误捕获与优雅降级 - 提取 5 个自定义 hooks:useCountUp, useDarkMode, useDebouncedValue, usePaginatedData, useApiRequest - 从 11 个 API 文件提取 PaginatedResponse 共享类型到 api/types.ts - 统一 API 错误处理(api/errors.ts) - client.ts 迁移到 axios adapter 模式(替代废弃的 CancelToken) - 添加 react-i18next 国际化基础设施 + zh-CN 语言包
41 lines
978 B
TypeScript
41 lines
978 B
TypeScript
import client from './client';
|
|
import type { PaginatedResponse } from './types';
|
|
|
|
export interface MessageTemplateInfo {
|
|
id: string;
|
|
tenant_id: string;
|
|
name: string;
|
|
code: string;
|
|
channel: string;
|
|
title_template: string;
|
|
body_template: string;
|
|
language: string;
|
|
created_at: string;
|
|
updated_at: string;
|
|
}
|
|
|
|
export interface CreateTemplateRequest {
|
|
name: string;
|
|
code: string;
|
|
channel?: string;
|
|
title_template: string;
|
|
body_template: string;
|
|
language?: string;
|
|
}
|
|
|
|
export async function listTemplates(page = 1, pageSize = 20) {
|
|
const { data } = await client.get<{ success: boolean; data: PaginatedResponse<MessageTemplateInfo> }>(
|
|
'/message-templates',
|
|
{ params: { page, page_size: pageSize } },
|
|
);
|
|
return data.data;
|
|
}
|
|
|
|
export async function createTemplate(req: CreateTemplateRequest) {
|
|
const { data } = await client.post<{ success: boolean; data: MessageTemplateInfo }>(
|
|
'/message-templates',
|
|
req,
|
|
);
|
|
return data.data;
|
|
}
|