feat(v2.4): 切换需求池领域主写

This commit is contained in:
2026-07-08 12:18:15 +08:00
parent 142800f75b
commit 5f5a211c99
11 changed files with 602 additions and 56 deletions

View File

@@ -358,7 +358,10 @@ export default function VersionDetailPage() {
alert('版本关联数据正在加载,请稍后再删除。');
return;
}
scopedVersionData.requirements.forEach((r) => updateRequirement(r.id, getRequirementVersionUnlinkPatch(r)));
scopedVersionData.requirements.forEach((r) => updateRequirement(r.id, {
productId: r.productId,
...getRequirementVersionUnlinkPatch(r),
}));
// 清理计划任务
scopedVersionData.plans.forEach((p) => deletePlan(p.id));
// 清理开发任务
@@ -988,16 +991,22 @@ export default function VersionDetailPage() {
onLink={(ids, addedBy) => {
if (versionReadonly || !requirementWriteReady) return;
ids.forEach((id) => {
const requirement = requirements.find((item) => item.id === id);
const requirement = displayRequirements.find((item) => item.id === id);
if (!requirement) return;
updateRequirement(id, getRequirementVersionSelectionPatch(requirement, version.id, addedBy));
updateRequirement(id, {
productId: requirement.productId,
...getRequirementVersionSelectionPatch(requirement, version.id, addedBy),
});
});
}}
onUnlink={(id) => {
if (versionReadonly || !requirementWriteReady) return;
const requirement = requirements.find((item) => item.id === id);
const requirement = displayRequirements.find((item) => item.id === id);
if (!requirement) return;
updateRequirement(id, getRequirementVersionUnlinkPatch(requirement));
updateRequirement(id, {
productId: requirement.productId,
...getRequirementVersionUnlinkPatch(requirement),
});
}}
onCreateChange={(data) => {
if (versionReadonly || !requirementWriteReady) return;
@@ -1039,7 +1048,10 @@ export default function VersionDetailPage() {
if (versionReadonly || !planWriteReady) return;
createPlan(data);
if ((pt === 'product') && data.linkedRequirementIds?.length) {
data.linkedRequirementIds.forEach((rid) => updateRequirement(rid, { productOwner: data.owner }));
data.linkedRequirementIds.forEach((rid) => {
const requirement = displayRequirements.find((item) => item.id === rid);
if (requirement) updateRequirement(rid, { productId: requirement.productId, productOwner: data.owner });
});
}
// 同步版本状态:计划开始时间<=今天,版本进入对应阶段
const today = new Date().toISOString().slice(0, 10);
@@ -1052,7 +1064,10 @@ export default function VersionDetailPage() {
if (versionReadonly || !planWriteReady) return;
updatePlan(id, data);
if ((pt === 'product') && data.linkedRequirementIds && data.owner) {
data.linkedRequirementIds.forEach((rid) => updateRequirement(rid, { productOwner: data.owner }));
data.linkedRequirementIds.forEach((rid) => {
const requirement = displayRequirements.find((item) => item.id === rid);
if (requirement) updateRequirement(rid, { productId: requirement.productId, productOwner: data.owner });
});
}
}}
onComplete={(id, result) => {

View File

@@ -159,7 +159,9 @@ function VersionsPageContent() {
setOpenMenuId(null);
if (action === 'delete') {
if (!confirm('确认删除该版本?关联的需求会回到需求池。')) return;
requirements.filter((r) => r.versionId === version.id).forEach((r) => updateRequirement(r.id, getRequirementVersionUnlinkPatch(r)));
requirements
.filter((r) => r.versionId === version.id)
.forEach((r) => updateRequirement(r.id, { productId: r.productId, ...getRequirementVersionUnlinkPatch(r) }));
deleteVersion(version.productId, version.id);
return;
}