"use client"; import { useState } from "react"; interface ChainStarterProps { // 发起一条链(起始章 + 章数);父层负责 POST run + 轮询。 onStart: (startChapterNo: number, count: number) => void; // 链正在运行/等待裁决时禁用(避免重复发起)。 disabled: boolean; } const DEFAULT_START = 1; const DEFAULT_COUNT = 3; const MAX_COUNT = 50; // 链发起表单(净新):选起始章号 + 连续写几章 → 调 onStart。 // count 1..50(对齐后端 ChainRunRequest Field 约束;前端先拦一道,越界后端 422 兜底)。 export function ChainStarter({ onStart, disabled }: ChainStarterProps) { const [start, setStart] = useState(String(DEFAULT_START)); const [count, setCount] = useState(String(DEFAULT_COUNT)); const startNo = Number.parseInt(start, 10); const countNo = Number.parseInt(count, 10); const valid = Number.isInteger(startNo) && startNo >= 1 && Number.isInteger(countNo) && countNo >= 1 && countNo <= MAX_COUNT; return (
{ e.preventDefault(); if (valid && !disabled) onStart(startNo, countNo); }} >

连续写多章

从指定章起循环「写章 → 四审 → 验收」;遇未决冲突会暂停等你裁决再续跑。

); }