import { useState } from "react"; import { Input, Button, Radio, Form, InputNumber, App, Select } from "antd"; import { Link, useNavigate } from "react-router"; import { ArrowLeft } from "lucide-react"; import { createTaskUsingPost } from "../collection.apis"; import SimpleCronScheduler from "@/pages/DataCollection/Create/SimpleCronScheduler"; import RadioCard from "@/components/RadioCard"; import { datasetTypes } from "@/pages/DataManagement/dataset.const"; import { SyncModeMap } from "../collection.const"; import { SyncMode } from "../collection.model"; import { DatasetSubType } from "@/pages/DataManagement/dataset.model"; const { TextArea } = Input; const defaultTemplates = [ { id: "NAS", name: "NAS到本地", description: "从NAS文件系统导入数据到本地文件系统", config: { reader: "nfsreader", writer: "localwriter", }, }, { id: "OBS", name: "OBS到本地", description: "从OBS文件系统导入数据到本地文件系统", config: { reader: "obsreader", writer: "localwriter", }, }, { id: "MYSQL", name: "Mysql到本地", description: "从Mysql中导入数据到本地文件系统", config: { reader: "mysqlreader", writer: "localwriter", }, }, ]; const syncModeOptions = Object.values(SyncModeMap); enum TemplateType { NAS = "NAS", OBS = "OBS", MYSQL = "MYSQL", } export default function CollectionTaskCreate() { const navigate = useNavigate(); const [form] = Form.useForm(); const { message } = App.useApp(); const [templateType, setTemplateType] = useState<"default" | "custom">( "default" ); // 默认模板类型设为 NAS const [selectedTemplate, setSelectedTemplate] = useState( TemplateType.NAS ); const [customConfig, setCustomConfig] = useState(""); // 将 newTask 设为 any,并初始化 config.templateType 为 NAS const [newTask, setNewTask] = useState({ name: "", description: "", syncMode: SyncMode.ONCE, cronExpression: "", maxRetries: 10, dataset: null, config: { templateType: TemplateType.NAS }, createDataset: false, }); const [scheduleExpression, setScheduleExpression] = useState({ type: SyncMode.SCHEDULED, time: "00:00", cronExpression: "0 0 0 * * ?", }); const [isCreateDataset, setIsCreateDataset] = useState(false); const handleSubmit = async () => { try { await form.validateFields(); if (templateType === "default" && !selectedTemplate) { window.alert("请选择默认模板"); return; } if (templateType === "custom" && !customConfig.trim()) { window.alert("请填写自定义配置"); return; } // 构建最终 payload,不依赖异步 setState const payload = { ...newTask, taskType: templateType === "default" ? selectedTemplate : "CUSTOM", config: { ...((newTask && newTask.config) || {}), ...(templateType === "custom" ? { dataxJson: customConfig } : {}), }, }; console.log("创建任务 payload:", payload); await createTaskUsingPost(payload); message.success("任务创建成功"); navigate("/data/collection"); } catch (error) { message.error(`${error?.data?.message}:${error?.data?.data}`); } }; return (

创建归集任务

{ setNewTask({ ...newTask, ...allValues }); }} > {/* 基本信息 */}

基本信息