Skip to content

Commit 1970a71

Browse files
committed
frontend: 优化清洗算子编排代码结构
1 parent ec18019 commit 1970a71

File tree

11 files changed

+155
-227
lines changed

11 files changed

+155
-227
lines changed

frontend/src/pages/DataCleansing/Create/CreateTask.tsx

Lines changed: 7 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ import { Card, Steps, Button, message } from "antd";
33
import { SaveOutlined } from "@ant-design/icons";
44
import { Link, useNavigate } from "react-router";
55
import { ArrowLeft } from "lucide-react";
6-
import OperatorLibrary from "./components/OperatorLibrary";
7-
import OperatorOrchestration from "./components/OperatorOrchestration";
8-
import OperatorConfig from "./components/OperatorConfig";
9-
import { useDragOperators } from "./hooks/useDragOperators";
10-
import { useOperatorOperations } from "./hooks/useOperatorOperations";
116
import { createCleaningTaskUsingPost } from "../cleansing.api";
12-
import CleansingTaskStepOne from "./components/StepOne";
7+
import CleansingTaskStepOne from "./components/CreateTaskStepOne";
8+
import { useCreateStepTwo } from "./hooks/useCreateStepTwo";
139

1410
export default function CleansingTaskCreate() {
1511
const navigate = useNavigate();
@@ -26,35 +22,12 @@ export default function CleansingTaskCreate() {
2622
});
2723

2824
const {
29-
operators,
25+
renderStepTwo,
3026
selectedOperators,
3127
currentStep,
32-
templates,
33-
currentTemplate,
34-
configOperator,
35-
setCurrentTemplate,
36-
setConfigOperator,
37-
setSelectedOperators,
38-
handleConfigChange,
39-
toggleOperator,
40-
removeOperator,
41-
handleNext,
4228
handlePrev,
43-
} = useOperatorOperations();
44-
45-
const {
46-
handleDragStart,
47-
handleDragEnd,
48-
handleContainerDragOver,
49-
handleContainerDragLeave,
50-
handleItemDragOver,
51-
handleItemDragLeave,
52-
handleItemDrop,
53-
handleDropToContainer,
54-
} = useDragOperators({
55-
operators: selectedOperators,
56-
setOperators: setSelectedOperators,
57-
});
29+
handleNext,
30+
} = useCreateStepTwo();
5831

5932
const handleSave = async () => {
6033
const task = {
@@ -75,7 +48,7 @@ export default function CleansingTaskCreate() {
7548
taskConfig.name && taskConfig.datasetId && taskConfig.newDatasetName
7649
);
7750
case 2:
78-
return operators.length > 0;
51+
return selectedOperators.length > 0;
7952
default:
8053
return false;
8154
}
@@ -91,43 +64,7 @@ export default function CleansingTaskCreate() {
9164
/>
9265
);
9366
case 2:
94-
return (
95-
<div className="flex w-full h-full">
96-
{/* 左侧算子库 */}
97-
<OperatorLibrary
98-
selectedOperators={selectedOperators}
99-
operatorList={operators}
100-
toggleOperator={toggleOperator}
101-
handleDragStart={handleDragStart}
102-
/>
103-
104-
{/* 中间算子编排区域 */}
105-
<OperatorOrchestration
106-
selectedOperators={selectedOperators}
107-
configOperator={configOperator}
108-
templates={templates}
109-
currentTemplate={currentTemplate}
110-
setSelectedOperators={setSelectedOperators}
111-
setConfigOperator={setConfigOperator}
112-
setCurrentTemplate={setCurrentTemplate}
113-
removeOperator={removeOperator}
114-
handleDragStart={handleDragStart}
115-
handleContainerDragLeave={handleContainerDragLeave}
116-
handleContainerDragOver={handleContainerDragOver}
117-
handleItemDragOver={handleItemDragOver}
118-
handleItemDragLeave={handleItemDragLeave}
119-
handleItemDrop={handleItemDrop}
120-
handleDropToContainer={handleDropToContainer}
121-
handleDragEnd={handleDragEnd}
122-
/>
123-
124-
{/* 右侧参数配置面板 */}
125-
<OperatorConfig
126-
selectedOp={configOperator}
127-
handleConfigChange={handleConfigChange}
128-
/>
129-
</div>
130-
);
67+
return renderStepTwo;
13168
default:
13269
return null;
13370
}

frontend/src/pages/DataCleansing/Create/CreateTempate.tsx

Lines changed: 15 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
import { useState } from "react";
2-
import { Card, Button, Input, Steps, Form, Divider } from "antd";
2+
import { Card, Button, Steps, Form, Divider } from "antd";
33
import { Link, useNavigate } from "react-router";
4-
import RadioCard from "@/components/RadioCard";
54

65
import { ArrowLeft } from "lucide-react";
7-
import OperatorLibrary from "./components/OperatorLibrary";
8-
import OperatorOrchestration from "./components/OperatorOrchestration";
9-
import OperatorConfig from "./components/OperatorConfig";
10-
import { templateTypes, OPERATOR_CATEGORIES } from "@/mock/cleansing";
116
import { createCleaningTemplateUsingPost } from "../cleansing.api";
12-
import { useDragOperators } from "./hooks/useDragOperators";
13-
import { useOperatorOperations } from "./hooks/useOperatorOperations";
14-
15-
const { TextArea } = Input;
7+
import CleansingTemplateStepOne from "./components/CreateTemplateStepOne";
8+
import { useCreateStepTwo } from "./hooks/useCreateStepTwo";
169

1710
export default function CleansingTemplateCreate() {
1811
const navigate = useNavigate();
@@ -28,7 +21,7 @@ export default function CleansingTemplateCreate() {
2821
const template = {
2922
...values,
3023
...templateConfig,
31-
operators,
24+
operators: selectedOperators,
3225
createdAt: new Date().toISOString(),
3326
};
3427
console.log("保存模板数据:", template);
@@ -41,117 +34,38 @@ export default function CleansingTemplateCreate() {
4134
};
4235

4336
const {
44-
templates,
45-
operators,
46-
currentTemplate,
37+
renderStepTwo,
38+
selectedOperators,
4739
currentStep,
48-
setCurrentTemplate,
49-
setOperators,
50-
selectedOperator,
51-
setSelectedOperator,
52-
toggleOperator,
53-
removeOperator,
54-
handleNext,
5540
handlePrev,
56-
} = useOperatorOperations();
41+
handleNext,
42+
} = useCreateStepTwo();
5743

5844
const canProceed = () => {
5945
const values = form.getFieldsValue();
6046
switch (currentStep) {
6147
case 1:
6248
return values.name && values.type;
6349
case 2:
64-
return operators.length > 0;
50+
return selectedOperators.length > 0;
6551
default:
6652
return false;
6753
}
6854
};
6955

70-
const {
71-
handleDragStart,
72-
handleDragEnd,
73-
handleContainerDragOver,
74-
handleContainerDragLeave,
75-
handleItemDragOver,
76-
handleItemDragLeave,
77-
handleItemDrop,
78-
handleDropToContainer,
79-
} = useDragOperators({ operators, setOperators });
80-
8156
const renderStepContent = () => {
8257
switch (currentStep) {
8358
case 1:
8459
return (
85-
<Form
60+
<CleansingTemplateStepOne
8661
form={form}
87-
layout="vertical"
88-
initialValues={templateConfig}
89-
onValuesChange={handleValuesChange}
90-
>
91-
<Form.Item
92-
label="模板名称"
93-
name="name"
94-
rules={[{ required: true, message: "请输入模板名称" }]}
95-
>
96-
<Input placeholder="输入模板名称" />
97-
</Form.Item>
98-
<Form.Item label="模板描述" name="description">
99-
<TextArea placeholder="描述模板的用途和特点" rows={4} />
100-
</Form.Item>
101-
<Form.Item
102-
label="模板类型"
103-
name="type"
104-
rules={[{ required: true, message: "请选择模板类型" }]}
105-
>
106-
<RadioCard
107-
options={templateTypes}
108-
value={templateConfig.type}
109-
onChange={(type) =>
110-
setTemplateConfig({ ...templateConfig, type })
111-
}
112-
/>
113-
</Form.Item>
114-
</Form>
62+
handleValuesChange={handleValuesChange}
63+
templateConfig={templateConfig}
64+
setTemplateConfig={setTemplateConfig}
65+
/>
11566
);
11667
case 2:
117-
return (
118-
<div className="flex w-full h-full">
119-
{/* 左侧算子库 */}
120-
<OperatorLibrary
121-
operators={operators}
122-
operatorList={currentTemplate?.instance || []}
123-
OPERATOR_CATEGORIES={OPERATOR_CATEGORIES}
124-
toggleOperator={toggleOperator}
125-
handleDragStart={handleDragStart}
126-
/>
127-
128-
{/* 中间算子编排区域 */}
129-
<OperatorOrchestration
130-
templates={templates}
131-
currentTemplate={currentTemplate}
132-
setCurrentTemplate={setCurrentTemplate}
133-
operators={operators}
134-
setOperators={setOperators}
135-
OPERATOR_CATEGORIES={OPERATOR_CATEGORIES}
136-
selectedOperator={selectedOperator}
137-
setSelectedOperator={setSelectedOperator}
138-
removeOperator={removeOperator}
139-
handleDragStart={handleDragStart}
140-
handleContainerDragLeave={handleContainerDragLeave}
141-
handleContainerDragOver={handleContainerDragOver}
142-
handleItemDragOver={handleItemDragOver}
143-
handleItemDragLeave={handleItemDragLeave}
144-
handleItemDrop={handleItemDrop}
145-
handleDropToContainer={handleDropToContainer}
146-
handleDragEnd={handleDragEnd}
147-
/>
148-
149-
{/* 右侧参数配置面板 */}
150-
<OperatorConfig
151-
selectedOp={operators.find((op) => op.id === selectedOperator)}
152-
/>
153-
</div>
154-
);
68+
return renderStepTwo;
15569
default:
15670
return null;
15771
}

frontend/src/pages/DataCleansing/Create/components/StepOne.tsx renamed to frontend/src/pages/DataCleansing/Create/components/CreateTaskStepOne.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import TextArea from "antd/es/input/TextArea";
55
import { Database } from "lucide-react";
66
import { useEffect, useState } from "react";
77

8-
export default function CleansingTaskStepOne({ taskConfig, setTaskConfig }) {
8+
export default function CreateTaskStepOne({ taskConfig, setTaskConfig }) {
99
const [datasets, setDatasets] = useState<any[]>([]);
1010
const fetchDatasets = async () => {
1111
const { data } = await queryDatasetsUsingGet({ page: 0, size: 1000 });
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import RadioCard from "@/components/RadioCard";
2+
import { templateTypes } from "@/mock/cleansing";
3+
import { Input, Form } from "antd";
4+
5+
const { TextArea } = Input;
6+
7+
export default function CreateTemplateStepOne({
8+
form,
9+
templateConfig,
10+
setTemplateConfig,
11+
handleValuesChange,
12+
}) {
13+
return (
14+
<Form
15+
form={form}
16+
layout="vertical"
17+
initialValues={templateConfig}
18+
onValuesChange={handleValuesChange}
19+
>
20+
<Form.Item
21+
label="模板名称"
22+
name="name"
23+
rules={[{ required: true, message: "请输入模板名称" }]}
24+
>
25+
<Input placeholder="输入模板名称" />
26+
</Form.Item>
27+
<Form.Item label="模板描述" name="description">
28+
<TextArea placeholder="描述模板的用途和特点" rows={4} />
29+
</Form.Item>
30+
<Form.Item
31+
label="模板类型"
32+
name="type"
33+
rules={[{ required: true, message: "请选择模板类型" }]}
34+
>
35+
<RadioCard
36+
options={templateTypes}
37+
value={templateConfig.type}
38+
onChange={(type) => setTemplateConfig({ ...templateConfig, type })}
39+
/>
40+
</Form.Item>
41+
</Form>
42+
);
43+
}

frontend/src/pages/DataCleansing/Create/components/FileComparison.tsx

Whitespace-only changes.

frontend/src/pages/DataCleansing/Create/components/OperatorConfig.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import React from "react";
22
import { Tag, Divider, Form } from "antd";
33
import { SettingOutlined } from "@ant-design/icons";
44
import ParamConfig from "./ParamConfig";
5+
import { OperatorI } from "../../cleansing.model";
56

67
// OperatorConfig/OperatorTemplate 类型需根据主文件实际导入
78
interface OperatorConfigProps {
8-
selectedOp: any; // OperatorConfig
9+
selectedOp: OperatorI;
910
renderParamConfig?: (
10-
operator: any,
11+
operator: OperatorI,
1112
paramKey: string,
1213
param: any
1314
) => React.ReactNode;

frontend/src/pages/DataCleansing/Create/components/ParamConfig.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import React from "react";
22
import { Input, Select, Radio, Checkbox, Form, InputNumber, Slider } from "antd";
3+
import { OperatorI } from "../../cleansing.model";
34

45
interface ParamConfigProps {
5-
operator: any;
6+
operator: OperatorI;
67
paramKey: string;
78
param: any;
89
onParamChange?: (operatorId: string, paramKey: string, value: any) => void;

0 commit comments

Comments
 (0)