fix(version): 限制任务需求候选为版本已关联需求
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -332,7 +332,15 @@ export function TestCaseTab({
|
||||
|
||||
{total > 20 && <Pagination total={total} page={page} pageSize={pageSize} onChange={setPage} onPageSizeChange={setPageSize} />}
|
||||
|
||||
{showCreate && !readOnly && <TestCaseCreateModal versionId={versionId} requirementIds={requirementIds} roundNo={activeRound} onClose={() => setShowCreate(false)} />}
|
||||
{showCreate && !readOnly && (
|
||||
<TestCaseCreateModal
|
||||
versionId={versionId}
|
||||
requirementIds={requirementIds}
|
||||
versionRequirements={versionRequirements}
|
||||
roundNo={activeRound}
|
||||
onClose={() => setShowCreate(false)}
|
||||
/>
|
||||
)}
|
||||
{selectedCaseId && <TestCaseDetailDrawer testCaseId={selectedCaseId} readOnly={readOnly} onClose={() => setSelectedCaseId(null)} onCreateBug={(id) => { if (!readOnly) setBugForCaseId(id); }} />}
|
||||
{bugForCaseId && !readOnly && <BugCreateModal testCaseId={bugForCaseId} onClose={() => setBugForCaseId(null)} />}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user