diff --git a/frontend/.cursorrules b/frontend/.cursorrules index ad0fd472..209e4803 100644 --- a/frontend/.cursorrules +++ b/frontend/.cursorrules @@ -78,7 +78,7 @@ ModuleName/ # 模块结构 // 标准 CRUD 接口 export const getList = (params?: Query) => - request.get('/api/v1/xxx', { params }); + request.get>('/api/v1/xxx/page', { params }); // 列表接口统一使用 /page 后缀 export const create = (data: Request) => request.post('/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>(`${DEFINITION_URL}/page`, { params }); + ``` + - 组件中获取列表数据: + ```typescript + const response = await getDefinitions(); + if (response) { + setList(response.content); // 使用 response.content 获取列表数据 + } + ``` + - 分页数据结构统一使用 `Page` 类型 + - 列表数据必须位于返回结果的 `content` 字段中 -4. 类型处理规则: +## 4. 类型处理规则: - request 工具的泛型参数 T 表示业务数据类型 - 响应拦截器负责从 Response 中提取 data - 服务方法直接使用业务数据类型作为泛型参数 diff --git a/frontend/src/pages/Workflow/Definition/index.tsx b/frontend/src/pages/Workflow/Definition/index.tsx index e2544a68..41b9e0ba 100644 --- a/frontend/src/pages/Workflow/Definition/index.tsx +++ b/frontend/src/pages/Workflow/Definition/index.tsx @@ -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([]); + + 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" /> diff --git a/frontend/src/pages/Workflow/service.ts b/frontend/src/pages/Workflow/service.ts index dbc567ab..89047cee 100644 --- a/frontend/src/pages/Workflow/service.ts +++ b/frontend/src/pages/Workflow/service.ts @@ -19,7 +19,7 @@ const LOG_URL = '/api/v1/workflow-logs'; // 工作流定义相关接口 export const getDefinitions = (params?: WorkflowDefinitionQuery) => - request.get>(`${DEFINITION_URL}`, { params }); + request.get>(`${DEFINITION_URL}/page`, { params }); export const getDefinition = (id: number) => request.get(`${DEFINITION_URL}/${id}`);