From feba142ee937b34fa3fe5a7888bafb45c92034a9 Mon Sep 17 00:00:00 2001 From: Script Generator Date: Fri, 12 Jun 2026 16:38:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B0=83=E7=A0=94/=E4=BA=A7=E5=93=81/UI?= =?UTF-8?q?=20=E6=94=B9=E4=B8=BA=E6=89=8B=E5=8A=A8=E7=82=B9=E5=87=BB"?= =?UTF-8?q?=E5=BC=80=E5=A7=8B"=E8=A7=A6=E5=8F=91=E8=AE=A1=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 去掉"到了计划日期自动变进行中"的逻辑,改为用户手动点击: - pending 状态显示蓝色"开始"按钮 - 点击后记录 actualStartAt(精确时间戳) - 进行中才显示"完成"按钮 跟开发/测试逻辑一致:状态由用户主动触发,时间戳准确。 Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/web/components/version/PlanTab.tsx | 39 ++++++++++++------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/apps/web/components/version/PlanTab.tsx b/apps/web/components/version/PlanTab.tsx index de0d817..2dd4e99 100644 --- a/apps/web/components/version/PlanTab.tsx +++ b/apps/web/components/version/PlanTab.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState } from 'react'; -import { Plus, Pencil, Trash2, X, Check, ExternalLink, FileUp, Link2 } from 'lucide-react'; +import { Plus, Pencil, Trash2, X, Check, ExternalLink, FileUp, Link2, Play } from 'lucide-react'; import type { VersionPlan, PlanTask } from '@/lib/version-plan'; import { calcPlanDuration, formatDuration, calcTotalDuration, calcPlanProgress, calcLinkedReqProgress } from '@/lib/version-plan'; @@ -56,19 +56,11 @@ export function PlanTab({ plans, versionId, versionDeadline, currentUserName, pl
{typePlans.map((plan) => { const now = new Date().toISOString(); - const nowDate = now.slice(0, 10); - // 自动进入进行中(到了计划开始日期) - const shouldAutoStart = plan.status === 'pending' && plan.startTime <= nowDate; - if (shouldAutoStart && !plan.actualStartAt) { - onUpdate(plan.id, { status: 'in_progress' }); - } - const effectiveStatus = shouldAutoStart ? 'in_progress' : plan.status; // 耗时用实际时间戳计算 - const actualStart = plan.actualStartAt || (shouldAutoStart ? now : null); - const dur = effectiveStatus === 'completed' && plan.completedAt && actualStart - ? calcPlanDuration(actualStart, plan.completedAt) - : effectiveStatus === 'in_progress' && actualStart - ? calcPlanDuration(actualStart, now) + const dur = plan.status === 'completed' && plan.completedAt && plan.actualStartAt + ? calcPlanDuration(plan.actualStartAt, plan.completedAt) + : plan.status === 'in_progress' && plan.actualStartAt + ? calcPlanDuration(plan.actualStartAt, now) : { days: 0, hours: 0 }; const durText = dur.days > 0 || dur.hours > 0 ? formatDuration(dur.days, dur.hours) : '-'; return ( @@ -77,8 +69,8 @@ export function PlanTab({ plans, versionId, versionDeadline, currentUserName, pl
{plan.title} - - {STATUS_LABEL[effectiveStatus]} + + {STATUS_LABEL[plan.status]}
@@ -164,7 +156,7 @@ export function PlanTab({ plans, versionId, versionDeadline, currentUserName, pl ) : null; })}
- {calcLinkedReqProgress(plan.linkedRequirementIds, plan.completedRequirementIds) === 100 && effectiveStatus !== 'completed' && ( + {calcLinkedReqProgress(plan.linkedRequirementIds, plan.completedRequirementIds) === 100 && plan.status !== 'completed' && (
所有需求已完成,请提交原型成果 @@ -174,11 +166,18 @@ export function PlanTab({ plans, versionId, versionDeadline, currentUserName, pl )}
- {effectiveStatus !== 'completed' && ( + {plan.status === 'pending' && ( + + )} + {plan.status !== 'completed' && plan.status !== 'pending' && ( + + )} + {plan.status !== 'completed' && ( <> -