fix: 调研/产品/UI 实际耗时改为精确时间戳显示和计算
- PlanTab 自动进入"进行中"时调用 onUpdate 记录 actualStartAt - 显示实际开始时间和完成时间(精确到分钟) - calcPlanDuration 改为用时间差计算小时数(精确到0.5h) - formatDuration 显示小时而非天数 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -55,13 +55,20 @@ export function PlanTab({ plans, versionId, versionDeadline, currentUserName, pl
|
||||
) : (
|
||||
<div className="space-y-3">
|
||||
{typePlans.map((plan) => {
|
||||
// 已耗时:已完成用实际完成时间,进行中用当前时间,未开始为0
|
||||
const now = new Date().toISOString().slice(0, 10);
|
||||
const effectiveStatus = plan.status === 'pending' && plan.startTime <= now ? 'in_progress' : plan.status;
|
||||
const dur = effectiveStatus === 'completed' && plan.completedAt
|
||||
? calcPlanDuration(plan.startTime, plan.completedAt)
|
||||
: effectiveStatus === 'in_progress'
|
||||
? calcPlanDuration(plan.startTime, now)
|
||||
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)
|
||||
: { days: 0, hours: 0 };
|
||||
const durText = dur.days > 0 || dur.hours > 0 ? formatDuration(dur.days, dur.hours) : '-';
|
||||
return (
|
||||
@@ -76,7 +83,8 @@ export function PlanTab({ plans, versionId, versionDeadline, currentUserName, pl
|
||||
</div>
|
||||
<div className="flex items-center gap-4 text-[12px] text-[var(--ink-soft)]">
|
||||
<span>计划:{plan.startTime.slice(0, 10)} → {plan.endTime.slice(0, 10)}</span>
|
||||
{plan.completedAt && <span className="text-green-600">完成:{plan.completedAt.slice(0, 10)}</span>}
|
||||
{plan.actualStartAt && <span className="text-blue-600">实际开始:{plan.actualStartAt.slice(0, 16).replace('T', ' ')}</span>}
|
||||
{plan.completedAt && <span className="text-green-600">完成:{plan.completedAt.slice(0, 16).replace('T', ' ')}</span>}
|
||||
<span className="font-medium text-[var(--ink)]">已耗时 {durText}</span>
|
||||
</div>
|
||||
{plan.overdueReason && (
|
||||
|
||||
Reference in New Issue
Block a user