diff --git a/apps/web/components/test-case/TestCaseTab.tsx b/apps/web/components/test-case/TestCaseTab.tsx index 8d1dc44..a11bd44 100644 --- a/apps/web/components/test-case/TestCaseTab.tsx +++ b/apps/web/components/test-case/TestCaseTab.tsx @@ -1,9 +1,10 @@ 'use client'; import { useState, useMemo, useEffect } from 'react'; -import { Plus, ClipboardCheck, Filter } from 'lucide-react'; +import { Plus, ClipboardCheck, Filter, CheckCircle2 } from 'lucide-react'; import { useTestCaseStore } from '@/stores/useTestCaseStore'; import { useBugStore } from '@/stores/useBugStore'; +import { useDevTaskStore } from '@/stores/useDevTaskStore'; import { useRequirementStore } from '@/stores/useRequirementStore'; import { useAuthStore } from '@/stores/useAuthStore'; import { TestCaseRow } from './TestCaseRow'; @@ -22,6 +23,7 @@ interface Props { export function TestCaseTab({ versionId, requirementIds }: Props) { const { testCases, fetchTestCases } = useTestCaseStore(); const { bugs, fetchBugs } = useBugStore(); + const { tasks: devTasks } = useDevTaskStore(); const { requirements } = useRequirementStore(); const user = useAuthStore((s) => s.user); @@ -30,9 +32,13 @@ export function TestCaseTab({ versionId, requirementIds }: Props) { const versionCases = useMemo( () => testCases.filter((c) => c.versionId === versionId), - [testCases, requirementIds], + [testCases, versionId], ); + // 提测状态判断 + const versionDevTasks = useMemo(() => devTasks.filter((t) => requirementIds.includes(t.requirementId)), [devTasks, requirementIds]); + const allSubmitted = versionDevTasks.length > 0 && versionDevTasks.every((t) => t.status === 'submitted' || t.status === 'done'); + const stats = calcTestProgress(versionCases); // 筛选 @@ -73,6 +79,19 @@ export function TestCaseTab({ versionId, requirementIds }: Props) { return (