From 3fd07dda71452965fce5fa6e6007a3b8ccf8e44e Mon Sep 17 00:00:00 2001 From: Script Generator Date: Fri, 12 Jun 2026 16:59:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=89=88=E6=9C=AC=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 删除版本时清理所有孤儿数据: - 释放关联需求回需求池 - 删除计划任务(调研/产品/UI) - 删除开发任务 - 删除测试用例 - 删除 Bug 2. Header 面包屑链路化: 版本 / 产品名(可点击) / 项目名 / 版本名 点击产品名跳转产品页 3. 概览统计卡片增加完整链路数据: 关联需求 | 计划任务 | 开发任务 | 测试用例 | 待开发 | 开发中 | 未关闭Bug | 加班时长 Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/web/app/versions/[id]/page.tsx | 34 ++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) 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} /> +
{/* 风险详情(胶囊条上方) */}