fix(需求池): 修复列表换行和版本解绑状态

This commit is contained in:
Script Generator
2026-07-02 19:50:47 +08:00
parent 121114af6a
commit 554ab520d1
7 changed files with 194 additions and 17 deletions

View File

@@ -29,6 +29,7 @@ import { hasPermission } from '@/lib/permissions';
import { calcActualElapsedHours, formatActualDuration } from '@/lib/work-hours';
import { formatDateTime, formatLocalDate } from '@/lib/format';
import { getProjectAdoptedRequirementCandidates } from '@/lib/requirement-selector';
import { getRequirementVersionSelectionPatch, getRequirementVersionUnlinkPatch } from '@/lib/requirement-version-link';
import { calcBugSeverityRanking, calcPersonalEffortRanking, calcStageEffortMetrics, calcVersionOverviewEffortTotals } from '@/lib/version-overview';
import { addVersionMembers, DEFAULT_VERSION_MEMBER_ROLE, filterVersionMemberCandidates } from '@/lib/version-members';
import { addRecommendedVersionMembers, getDefaultRecommendedMemberNames, recommendVersionMembers, type MemberRecommendationGroup, type RecommendableRole } from '@/lib/member-recommendation';
@@ -230,7 +231,7 @@ export default function VersionDetailPage() {
buttons.push({ label: '删除', action: () => {
if (confirm('确认删除该版本关联的需求会回到需求池版本下的计划、开发任务、测试用例、Bug 将被清除。')) {
// 释放关联需求
requirements.filter((r) => r.versionId === version.id).forEach((r) => updateRequirement(r.id, { versionId: undefined, addedToVersionBy: undefined }));
requirements.filter((r) => r.versionId === version.id).forEach((r) => updateRequirement(r.id, getRequirementVersionUnlinkPatch(r)));
// 清理计划任务
plans.filter((p) => p.versionId === version.id).forEach((p) => deletePlan(p.id));
// 清理开发任务
@@ -861,11 +862,17 @@ export default function VersionDetailPage() {
readOnly={versionReadonly}
onLink={(ids, addedBy) => {
if (versionReadonly) return;
ids.forEach((id) => updateRequirement(id, { versionId: version.id, addedToVersionBy: addedBy }));
ids.forEach((id) => {
const requirement = requirements.find((item) => item.id === id);
if (!requirement) return;
updateRequirement(id, getRequirementVersionSelectionPatch(requirement, version.id, addedBy));
});
}}
onUnlink={(id) => {
if (versionReadonly) return;
updateRequirement(id, { versionId: undefined, addedToVersionBy: undefined });
const requirement = requirements.find((item) => item.id === id);
if (!requirement) return;
updateRequirement(id, getRequirementVersionUnlinkPatch(requirement));
}}
onCreateChange={(data) => {
if (versionReadonly) return;

View File

@@ -20,6 +20,7 @@ import { useXiaobaoWarningRisks } from '@/hooks/useXiaobaoWarningRisks';
import type { XiaobaoVersionRisk } from '@/lib/xiaobao-risk';
import { getRiskScoreTone } from '@/lib/xiaobao-warning-view';
import { buildVersionScopeTree, filterVersionsForList, type VersionListScope, type VersionProductNode } from '@/lib/version-list';
import { getRequirementVersionUnlinkPatch } from '@/lib/requirement-version-link';
import {
VERSION_DEVELOPMENT_TYPE_OPTIONS,
canSubmitNewVersionForm,
@@ -158,7 +159,7 @@ function VersionsPageContent() {
setOpenMenuId(null);
if (action === 'delete') {
if (!confirm('确认删除该版本?关联的需求会回到需求池。')) return;
requirements.filter((r) => r.versionId === version.id).forEach((r) => updateRequirement(r.id, { versionId: undefined, addedToVersionBy: undefined }));
requirements.filter((r) => r.versionId === version.id).forEach((r) => updateRequirement(r.id, getRequirementVersionUnlinkPatch(r)));
deleteVersion(version.productId, version.id);
return;
}