fix(version): 限制任务需求候选为版本已关联需求

This commit is contained in:
2026-07-06 11:43:23 +08:00
parent bc6e9357ea
commit 8d61bb7c13
7 changed files with 84 additions and 12 deletions

View File

@@ -10,13 +10,16 @@ import { useAuthStore } from '@/stores/useAuthStore';
import { FilterSelect } from '@/components/FilterSelect';
import { WorkDateTimePicker } from '@/components/WorkDateTimePicker';
import type { Priority } from '@/lib/derive';
import type { Requirement } from '@/lib/requirement';
import { getCategoriesByGroup, getDefaultCategoryByGroup } from '@/lib/task-category';
import { getVersionLinkedRequirementCandidates } from '@/lib/requirement-selector';
import { clampTestCaseEstimateHours, getDefaultTestCaseEstimateHours } from '@/lib/ai-estimation-policy';
import { isoToLocal, localToISO } from '@/lib/work-hours';
interface Props {
versionId: string;
requirementIds: string[];
versionRequirements?: Requirement[];
roundNo?: number;
onClose: () => void;
}
@@ -33,16 +36,17 @@ function defaultPlannedEndLocal(): string {
return isoToLocal(d.toISOString());
}
export function TestCaseCreateModal({ versionId, requirementIds, roundNo, onClose }: Props) {
export function TestCaseCreateModal({ versionId, requirementIds, versionRequirements, roundNo, onClose }: Props) {
const { createTestCase } = useTestCaseStore();
const { requirements } = useRequirementStore();
const { members } = useMemberStore();
const { categories } = useTaskCategoryStore();
const user = useAuthStore((s) => s.user);
const requirementSource = versionRequirements ?? requirements;
const versionReqs = useMemo(
() => requirements.filter((r) => requirementIds.includes(r.id)),
[requirements, requirementIds],
() => getVersionLinkedRequirementCandidates(requirementSource, requirementIds),
[requirementSource, requirementIds],
);
const testCategories = useMemo(() => getCategoriesByGroup(categories, 'testing'), [categories]);
@@ -69,6 +73,12 @@ export function TestCaseCreateModal({ versionId, requirementIds, roundNo, onClos
setEstimateHours(getDefaultTestCaseEstimateHours(next.code));
}, [categoryId, testCategories]);
useEffect(() => {
if (!requirementId) return;
if (versionReqs.some((r) => r.id === requirementId)) return;
setRequirementId('');
}, [versionReqs, requirementId]);
const handleCategoryChange = (nextCategoryId: string) => {
setCategoryId(nextCategoryId);
const category = categories.find((c) => c.id === nextCategoryId) ?? testCategories.find((c) => c.id === nextCategoryId);