diff --git a/apps/web/app/versions/[id]/page.tsx b/apps/web/app/versions/[id]/page.tsx index 0a26db7..b8182cb 100644 --- a/apps/web/app/versions/[id]/page.tsx +++ b/apps/web/app/versions/[id]/page.tsx @@ -54,9 +54,9 @@ export default function VersionDetailPage() { const { requirements, fetchRequirements, updateRequirement } = useRequirementStore(); const { records, fetchRecords } = useOvertimeStore(); const { plans, fetchPlans, createPlan, updatePlan, completePlan, deletePlan } = useVersionPlanStore(); - const { tasks: devTasks, fetchTasks: fetchDevTasks } = useDevTaskStore(); - const { testCases, fetchTestCases } = useTestCaseStore(); - const { bugs, fetchBugs } = useBugStore(); + const { tasks: devTasks, fetchTasks: fetchDevTasks, deleteTask: deleteDevTask } = useDevTaskStore(); + const { testCases, fetchTestCases, deleteTestCase } = useTestCaseStore(); + const { bugs, fetchBugs, deleteBug } = useBugStore(); const user = useAuthStore((s) => s.user); const [activeTab, setActiveTab] = useState('overview'); @@ -117,9 +117,17 @@ export default function VersionDetailPage() { const buttons: { label: string; action: () => void; danger?: boolean }[] = []; if (version.status === 'planned') { buttons.push({ label: '删除', action: () => { - if (confirm('确认删除该版本?关联的需求会回到需求池。')) { + if (confirm('确认删除该版本?关联的需求会回到需求池,版本下的计划、开发任务、测试用例、Bug 将被清除。')) { // 释放关联需求 requirements.filter((r) => r.versionId === version.id).forEach((r) => updateRequirement(r.id, { versionId: undefined, addedToVersionBy: undefined })); + // 清理计划任务 + plans.filter((p) => p.versionId === version.id).forEach((p) => deletePlan(p.id)); + // 清理开发任务 + const versionReqIds = new Set(requirements.filter((r) => r.versionId === version.id).map((r) => r.id)); + devTasks.filter((t) => versionReqIds.has(t.requirementId)).forEach((t) => deleteDevTask(t.id)); + // 清理测试用例和Bug + testCases.filter((c) => c.versionId === version.id).forEach((c) => deleteTestCase(c.id)); + bugs.filter((b) => b.versionId === version.id).forEach((b) => deleteBug(b.id)); deleteVersion(version.productId, version.id); router.push('/versions'); } @@ -152,7 +160,15 @@ export default function VersionDetailPage() { 版本 / - {version.name} + + {version.projectName && version.projectName !== '未关联' && ( + <> + / + {version.projectName} + + )} + / + {version.name}
{renderActions()}
@@ -236,13 +252,15 @@ export default function VersionDetailPage() { {/* 统计卡片 */} -
- +
+ p.versionId === version.id).length} /> + + - 0} /> 0} /> +
{/* 风险详情(胶囊条上方) */}