import { Button, Divider, Input, Modal, notification, Space, Steps, Typography, } from "antd"; import { useState } from "react"; import Workflow from "./Workflow"; import type { IProjectTreeData, IProjectTreeInsertRequest, IProjectTreeResponse, ITaskData, ITaskGroupInsertData, ITaskGroupInsertRequest, ITaskGroupResponse, } from "../../api/task"; import ChapterToc from "../article/ChapterToc"; import type { IChapterToc } from "../../api/Corpus"; import { post } from "../../request"; import TaskBuilderProp, { type IParam, IProp } from "./TaskBuilderProp"; import type { IPayload, ITokenCreate, ITokenCreateResponse, ITokenData, TPower, } from "../../api/token"; import ProjectWithTasks from "./ProjectWithTasks"; import { useIntl } from "react-intl"; import React from "react"; const { Text, Paragraph } = Typography; interface IModal { studioName?: string; channels?: string[]; book?: number; para?: number; open?: boolean; onClose?: () => void; } export const TaskBuilderChapterModal = ({ studioName, channels, book, para, open = false, onClose, }: IModal) => { return ( <> ); }; type NotificationType = "success" | "info" | "warning" | "error"; interface IWidget { studioName?: string; channels?: string[]; book?: number; para?: number; style?: React.CSSProperties; } const TaskBuilderChapter = ({ studioName, book, para, style, channels, }: IWidget) => { const intl = useIntl(); const [current, setCurrent] = useState(0); const [workflow, setWorkflow] = useState(); const [chapter, setChapter] = useState(); const [tokens, setTokens] = useState(); const [messages, setMessages] = useState([]); const [prop, setProp] = useState(); const [title, setTitle] = useState(); const [loading, setLoading] = useState(false); const [projects, setProjects] = useState(); const [done, setDone] = useState(false); const steps = [ { title: "选择章节", content: (
{"任务组标题"} { setTitle(e.target.value); }} /> { setChapter(data); if (data.length > 0) { if (!title && data[0].text) { setTitle(data[0].text); } } }} />
), }, { title: "选择工作流", content: ( { if (typeof data === "undefined") { setWorkflow(undefined); } }} onData={(data) => { console.debug("workflow", data); setWorkflow(data); }} /> ), }, { title: "参数设置", content: (
{ console.info("TaskBuilderProp prop value", data); setProp(data); const channels = new Map(); data?.forEach((value) => { value.param?.forEach((param) => { if (param.type.includes("channel")) { channels.set(param.value, 1); } }); }); //获取channel token let payload: IPayload[] = []; if (chapter) { channels.forEach((_value, key) => { const [channelId, power] = key.split("@"); payload = payload.concat( chapter.map((item) => { return { res_id: channelId, res_type: "channel", book: item.book, para_start: item.paragraph, para_end: item.paragraph + item.chapter_len, power: power as TPower, }; }) ); }); const url = "/v2/access-token"; const values = { payload: payload }; console.info("api request", url, values); post(url, values).then( (json) => { console.info("api response token", json); setTokens(json.data.rows); } ); } }} />
), }, { title: "生成任务", content: (
title {title}
新增任务组 {chapter?.length}
每个任务组任务数量 {workflow?.length}
点击生成按钮生成
{messages?.map((item, id) => { return
{item}
; })}
), }, { title: "完成", content: projects ? ( ) : ( <> ), }, ]; const next = () => { setCurrent(current + 1); }; const prev = () => { setCurrent(current - 1); }; const items = steps.map((item) => ({ key: item.title, title: item.title })); const [api, contextHolder] = notification.useNotification(); const openNotification = ( type: NotificationType, title: string, description?: string ) => { api[type]({ message: title, description: description, }); }; //生成任务组 const projectGroup = async () => { if (!studioName || !chapter) { console.error("缺少参数", studioName, chapter); return; } const url = "/v2/project-tree"; const values: IProjectTreeInsertRequest = { studio_name: studioName, data: chapter.map((item, id) => { return { id: item.paragraph.toString(), title: id === 0 && title ? title : (item.text ?? ""), type: "instance", weight: item.chapter_strlen, parent_id: item.parent.toString(), res_id: `${item.book}-${item.paragraph}`, }; }), }; let res; try { console.info("api request", url, values); res = await post( url, values ); console.info("api response", res); // 检查响应状态 if (!res.ok) { throw new Error(`HTTP error! status: `); } setProjects(res.data.rows); setMessages((origin) => [...origin, "生成任务组成功"]); } catch (error) { console.error("Fetch error:", error); openNotification("error", "生成任务组失败"); throw error; } return res.data.rows; }; const DoButton = () => { return ( <> ); }; return (
{contextHolder}
{steps[current].content}
{current < steps.length - 1 ? ( ) : ( <> )} {current < steps.length - 2 && ( )} {current === steps.length - 2 && ( <> {done ? ( ) : ( )} )}
); }; export default TaskBuilderChapter;