fix(version): 限制任务需求候选为版本已关联需求
This commit is contained in:
@@ -9,12 +9,15 @@ import { useMemberStore } from '@/stores/useMemberStore';
|
||||
import { useAuthStore } from '@/stores/useAuthStore';
|
||||
import { FilterSelect } from '@/components/FilterSelect';
|
||||
import { WorkDateTimePicker } from '@/components/WorkDateTimePicker';
|
||||
import { getVersionLinkedRequirementCandidates } from '@/lib/requirement-selector';
|
||||
import { calcWorkHours, formatWorkHours, isoToLocal, localToISO } from '@/lib/work-hours';
|
||||
import type { Priority } from '@/lib/derive';
|
||||
import type { Requirement } from '@/lib/requirement';
|
||||
|
||||
interface Props {
|
||||
versionId: string;
|
||||
requirementIds: string[];
|
||||
versionRequirements?: Requirement[];
|
||||
versionDeadline?: string;
|
||||
onClose: () => void;
|
||||
onCreated?: () => void;
|
||||
@@ -32,16 +35,17 @@ function defaultExpectedEnd(): string {
|
||||
return isoToLocal(d.toISOString());
|
||||
}
|
||||
|
||||
export function DevTaskCreateModal({ versionId, requirementIds, versionDeadline, onClose, onCreated }: Props) {
|
||||
export function DevTaskCreateModal({ versionId, requirementIds, versionRequirements, versionDeadline, onClose, onCreated }: Props) {
|
||||
const { createTask, tasks } = useDevTaskStore();
|
||||
const { categories } = useTaskCategoryStore();
|
||||
const { requirements } = useRequirementStore();
|
||||
const { members } = useMemberStore();
|
||||
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 versionTasks = useMemo(
|
||||
() => tasks.filter((t) => t.versionId === versionId || requirementIds.includes(t.requirementId)),
|
||||
@@ -65,6 +69,17 @@ export function DevTaskCreateModal({ versionId, requirementIds, versionDeadline,
|
||||
if (categories[0] && !categoryId) setCategoryId(categories[0].id);
|
||||
}, [categories, categoryId]);
|
||||
|
||||
useEffect(() => {
|
||||
if (versionReqs.length === 0) {
|
||||
if (requirementId) setRequirementId('');
|
||||
return;
|
||||
}
|
||||
if (versionReqs.some((r) => r.id === requirementId)) return;
|
||||
const nextRequirement = versionReqs[0];
|
||||
setRequirementId(nextRequirement.id);
|
||||
if (!priorityManuallySet) setPriority(nextRequirement.priority);
|
||||
}, [versionReqs, requirementId, priorityManuallySet]);
|
||||
|
||||
const expectedStartISO = localToISO(expectedStartLocal);
|
||||
const expectedEndISO = localToISO(expectedEndLocal);
|
||||
|
||||
|
||||
@@ -254,7 +254,15 @@ export function DevTaskTab({ versionId, requirementIds, versionDeadline, readOnl
|
||||
|
||||
{total > 20 && <Pagination total={total} page={page} pageSize={pageSize} onChange={setPage} onPageSizeChange={setPageSize} />}
|
||||
|
||||
{showCreate && !readOnly && <DevTaskCreateModal versionId={versionId} requirementIds={requirementIds} versionDeadline={versionDeadline} onClose={() => setShowCreate(false)} />}
|
||||
{showCreate && !readOnly && (
|
||||
<DevTaskCreateModal
|
||||
versionId={versionId}
|
||||
requirementIds={requirementIds}
|
||||
versionRequirements={versionRequirements}
|
||||
versionDeadline={versionDeadline}
|
||||
onClose={() => setShowCreate(false)}
|
||||
/>
|
||||
)}
|
||||
{selectedTaskId && <DevTaskDetailDrawer taskId={selectedTaskId} allTaskIds={allTaskIds} readOnly={readOnly} onClose={() => setSelectedTaskId(null)} />}
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user