可正常保存流程

This commit is contained in:
戚辰先生 2024-12-05 10:31:22 +08:00
parent 42ad69abb5
commit 2c39b79515
3 changed files with 43 additions and 15 deletions

View File

@ -78,7 +78,7 @@ ModuleName/ # 模块结构
// 标准 CRUD 接口
export const getList = (params?: Query) =>
request.get<Response[]>('/api/v1/xxx', { params });
request.get<Page<Response>>('/api/v1/xxx/page', { params }); // 列表接口统一使用 /page 后缀
export const create = (data: Request) =>
request.post<Response>('/api/v1/xxx', data);
@ -105,8 +105,24 @@ ModuleName/ # 模块结构
- 资源使用复数形式users, roles
- 特殊操作使用动词export, import
3. 列表数据获取规范:
- API 路径必须以 `/page` 结尾,例如:`/api/v1/workflow-definitions/page`
- 服务层方法定义示例:
```typescript
export const getDefinitions = (params?: WorkflowDefinitionQuery) =>
request.get<Page<WorkflowDefinitionResponse>>(`${DEFINITION_URL}/page`, { params });
```
- 组件中获取列表数据:
```typescript
const response = await getDefinitions();
if (response) {
setList(response.content); // 使用 response.content 获取列表数据
}
```
- 分页数据结构统一使用 `Page<T>` 类型
- 列表数据必须位于返回结果的 `content` 字段中
4. 类型处理规则:
## 4. 类型处理规则:
- request 工具的泛型参数 T 表示业务数据类型
- 响应拦截器负责从 Response<T> 中提取 data
- 服务方法直接使用业务数据类型作为泛型参数

View File

@ -1,24 +1,38 @@
import React from 'react';
import React, { useState, useEffect } from 'react';
import { Card, Table, Button, Space, Tag, Popconfirm, message } from 'antd';
import { useNavigate } from 'react-router-dom';
import type { ColumnsType } from 'antd/es/table';
import { useTableData } from '@/hooks/useTableData';
import { getDefinitions, deleteDefinition, publishDefinition, disableDefinition, enableDefinition } from '../service';
import { WorkflowDefinitionResponse, WorkflowStatus } from '../types';
const Definition: React.FC = () => {
const navigate = useNavigate();
const { list, loading, pagination, handleTableChange, refresh } = useTableData({
service: {
list: getDefinitions
const [loading, setLoading] = useState(false);
const [list, setList] = useState<WorkflowDefinitionResponse[]>([]);
const loadData = async () => {
try {
setLoading(true);
const response = await getDefinitions();
if (response) {
setList(response.content);
}
} catch (error) {
message.error('加载数据失败');
} finally {
setLoading(false);
}
});
};
useEffect(() => {
loadData();
}, []);
const handlePublish = async (id: number) => {
try {
await publishDefinition(id);
message.success('发布成功');
refresh();
loadData();
} catch (error) {
message.error('发布失败');
}
@ -28,7 +42,7 @@ const Definition: React.FC = () => {
try {
await disableDefinition(id);
message.success('禁用成功');
refresh();
loadData();
} catch (error) {
message.error('禁用失败');
}
@ -38,7 +52,7 @@ const Definition: React.FC = () => {
try {
await enableDefinition(id);
message.success('启用成功');
refresh();
loadData();
} catch (error) {
message.error('启用失败');
}
@ -48,7 +62,7 @@ const Definition: React.FC = () => {
try {
await deleteDefinition(id);
message.success('删除成功');
refresh();
loadData();
} catch (error) {
message.error('删除失败');
}
@ -154,8 +168,6 @@ const Definition: React.FC = () => {
columns={columns}
dataSource={list}
loading={loading}
pagination={pagination}
onChange={handleTableChange}
rowKey="id"
/>
</Card>

View File

@ -19,7 +19,7 @@ const LOG_URL = '/api/v1/workflow-logs';
// 工作流定义相关接口
export const getDefinitions = (params?: WorkflowDefinitionQuery) =>
request.get<Page<WorkflowDefinitionResponse>>(`${DEFINITION_URL}`, { params });
request.get<Page<WorkflowDefinitionResponse>>(`${DEFINITION_URL}/page`, { params });
export const getDefinition = (id: number) =>
request.get<WorkflowDefinitionResponse>(`${DEFINITION_URL}/${id}`);