- 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 语言包
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import client from './client';
|
|
import type { PaginatedResponse } from './types';
|
|
|
|
export interface TokenInfo {
|
|
id: string;
|
|
node_id: string;
|
|
status: string;
|
|
created_at: string;
|
|
}
|
|
|
|
export interface ProcessInstanceInfo {
|
|
id: string;
|
|
definition_id: string;
|
|
definition_name?: string;
|
|
business_key?: string;
|
|
status: string;
|
|
started_by: string;
|
|
started_at: string;
|
|
completed_at?: string;
|
|
created_at: string;
|
|
active_tokens: TokenInfo[];
|
|
}
|
|
|
|
export interface StartInstanceRequest {
|
|
definition_id: string;
|
|
business_key?: string;
|
|
variables?: Array<{ name: string; var_type?: string; value: unknown }>;
|
|
}
|
|
|
|
export async function startInstance(req: StartInstanceRequest) {
|
|
const { data } = await client.post<{ success: boolean; data: ProcessInstanceInfo }>(
|
|
'/workflow/instances',
|
|
req,
|
|
);
|
|
return data.data;
|
|
}
|
|
|
|
export async function listInstances(page = 1, pageSize = 20) {
|
|
const { data } = await client.get<{ success: boolean; data: PaginatedResponse<ProcessInstanceInfo> }>(
|
|
'/workflow/instances',
|
|
{ params: { page, page_size: pageSize } },
|
|
);
|
|
return data.data;
|
|
}
|
|
|
|
export async function getInstance(id: string) {
|
|
const { data } = await client.get<{ success: boolean; data: ProcessInstanceInfo }>(
|
|
`/workflow/instances/${id}`,
|
|
);
|
|
return data.data;
|
|
}
|
|
|
|
export async function suspendInstance(id: string) {
|
|
const { data } = await client.post<{ success: boolean; data: null }>(
|
|
`/workflow/instances/${id}/suspend`,
|
|
);
|
|
return data.data;
|
|
}
|
|
|
|
export async function resumeInstance(id: string) {
|
|
const { data } = await client.post<{ success: boolean; data: null }>(
|
|
`/workflow/instances/${id}/resume`,
|
|
);
|
|
return data.data;
|
|
}
|
|
|
|
export async function terminateInstance(id: string) {
|
|
const { data } = await client.post<{ success: boolean; data: null }>(
|
|
`/workflow/instances/${id}/terminate`,
|
|
);
|
|
return data.data;
|
|
}
|