feat(版本详情): 完善任务流程与风险预警
This commit is contained in:
@@ -112,6 +112,21 @@ function roundEffortHours(hours: number): number {
|
||||
return Number(hours.toFixed(2));
|
||||
}
|
||||
|
||||
export function needsDevTaskClaim(task: Pick<DevTask, 'assigneeId'>): boolean {
|
||||
return !task.assigneeId?.trim();
|
||||
}
|
||||
|
||||
export function hasDevTaskPlan(task: Pick<DevTask, 'expectedStartAt' | 'expectedEndAt'>): boolean {
|
||||
if (!task.expectedStartAt || !task.expectedEndAt) return false;
|
||||
const start = new Date(task.expectedStartAt).getTime();
|
||||
const end = new Date(task.expectedEndAt).getTime();
|
||||
return Number.isFinite(start) && Number.isFinite(end) && end > start;
|
||||
}
|
||||
|
||||
export function canStartDevTask(task: Pick<DevTask, 'assigneeId' | 'expectedStartAt' | 'expectedEndAt'>): boolean {
|
||||
return !needsDevTaskClaim(task) && hasDevTaskPlan(task);
|
||||
}
|
||||
|
||||
export function getActualHours(task: DevTask, now: Date = new Date()): number {
|
||||
if (!task.actualStartAt) return 0;
|
||||
const end = task.actualEndAt ?? (task.status === 'submitted' ? task.updatedAt : now.toISOString());
|
||||
|
||||
Reference in New Issue
Block a user