import { ModalForm, ProForm, ProFormText } from "@ant-design/pro-components"; import { Alert, Form } from "antd"; import type { IProjectData, IProjectResponse, IProjectUpdateRequest, ITaskData, ITaskGroupInsertData, ITaskGroupInsertRequest, ITaskGroupResponse, ITaskListResponse, } from "../../api/task"; import { get, post } from "../../request"; import { useState } from "react"; interface IWidget { trigger?: JSX.Element; studioName?: string; projectId?: string; } const ProjectClone = ({ trigger, studioName, projectId }: IWidget) => { const [form] = Form.useForm(); const [project, setProject] = useState(); const [tasks, setTasks] = useState(); const [message, setMessage] = useState(); return ( title="Clone" trigger={trigger} form={form} autoFocusFirstInput modalProps={{ destroyOnClose: true, onCancel: () => console.log("run"), }} submitTimeout={2000} onFinish={async (values) => { if (!studioName || !project || !tasks) { return false; } const data: IProjectUpdateRequest = { studio_name: studioName, title: values.title, type: project.type, privacy: "private", description: project.description, }; const url = `/v2/project`; console.info("save api request", url, data); const res = await post( url, data ); console.info("save api response", res); if (!res.ok) { setMessage("Project 建立错误 " + res.message); return false; } const taskData: ITaskGroupInsertData = { project_id: res.data.id, tasks: tasks, }; const taskUrl = "/v2/task-group"; const taskRes = await post( taskUrl, { data: [taskData] } ); if (!taskRes.ok) { setMessage("task 建立错误 " + taskRes.message); return false; } return true; }} request={async (_params: Record, _props: any) => { const url = `/v2/project/${projectId}`; console.info("api request", url); const project = await get(url); setProject(project.data); console.info("api response", project.ok); //获取tasks const taskUrl = `/v2/task?view=project&project_id=${projectId}`; const res = await get(taskUrl); setTasks(res.data.rows); return project.data; }} > ); }; export default ProjectClone;