From 52833d81ac81fdef51d71b66bb7e5f4db722bef4 Mon Sep 17 00:00:00 2001 From: Script Generator Date: Thu, 25 Jun 2026 14:04:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=BC=80=E5=8F=91=E4=BB=BB=E5=8A=A1):=20?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=B5=81=E8=BD=AC=E6=8E=A5=E5=85=A5=E5=8D=95?= =?UTF-8?q?=E6=9D=A1=E5=B7=A5=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev-task/DevTaskCreateModal.tsx | 17 ++++ apps/web/lib/dev-task-transitions.ts | 56 ------------- apps/web/lib/dev-task-workflow.test.ts | 81 +++++++++++++++++++ apps/web/lib/dev-task-workflow.ts | 49 +++++++++++ apps/web/lib/dev-task.ts | 17 +++- apps/web/stores/useDevTaskStore.ts | 76 ++++++----------- 6 files changed, 187 insertions(+), 109 deletions(-) create mode 100644 apps/web/lib/dev-task-workflow.test.ts create mode 100644 apps/web/lib/dev-task-workflow.ts diff --git a/apps/web/components/dev-task/DevTaskCreateModal.tsx b/apps/web/components/dev-task/DevTaskCreateModal.tsx index b1fbd85..3b7ae01 100644 --- a/apps/web/components/dev-task/DevTaskCreateModal.tsx +++ b/apps/web/components/dev-task/DevTaskCreateModal.tsx @@ -57,6 +57,7 @@ export function DevTaskCreateModal({ versionId, requirementIds, versionDeadline, const [predecessorIds, setPredecessorIds] = useState([]); const [description, setDescription] = useState(''); const [overdueVersionReason, setOverdueVersionReason] = useState(''); + const [prototypeNotes, setPrototypeNotes] = useState(''); useEffect(() => { if (categories[0] && !categoryId) setCategoryId(categories[0].id); @@ -95,6 +96,15 @@ export function DevTaskCreateModal({ versionId, requirementIds, versionDeadline, const handleSubmit = () => { if (!canSubmit) return; + const reqRef = versionReqs.find((r) => r.id === requirementId); + const references = [ + ...(reqRef ? [{ type: 'requirement' as const, id: reqRef.code, label: `${reqRef.code} ${reqRef.title}` }] : []), + ...prototypeNotes.split(/[,,\s]+/).map((s) => s.trim()).filter(Boolean).map((note) => ({ + type: 'prototype_note' as const, + id: note, + label: note, + })), + ]; createTask({ requirementId, title: title.trim(), @@ -105,6 +115,7 @@ export function DevTaskCreateModal({ versionId, requirementIds, versionDeadline, priority: effectivePriority, expectedStartAt: expectedStartISO, expectedEndAt: expectedEndISO, + estimateHours, actualStartAt: undefined, actualEndAt: undefined, status: 'todo', @@ -114,6 +125,7 @@ export function DevTaskCreateModal({ versionId, requirementIds, versionDeadline, riskLevel: undefined, delayReason: undefined, overdueVersionReason: isOverdueVersion ? overdueVersionReason.trim() : undefined, + references: references.length > 0 ? references : undefined, createdBy: user?.name || '系统', }); onCreated?.(); @@ -212,6 +224,11 @@ export function DevTaskCreateModal({ versionId, requirementIds, versionDeadline,