'use client';
import { useState } from 'react';
import { Plus, X, Search } from 'lucide-react';
import type { Requirement } from '@/lib/requirement';
import { REQ_STATUS_LABEL, REQ_STATUS_COLOR } from '@/lib/requirement';
interface Props {
versionId: string;
projectId: string;
requirements: Requirement[];
onLink: (reqIds: string[], addedBy: string) => void;
onUnlink: (reqId: string) => void;
currentUserName: string;
}
export function VersionRequirementsTab({ versionId, projectId, requirements, onLink, onUnlink, currentUserName }: Props) {
const [showAddModal, setShowAddModal] = useState(false);
const linkedReqs = requirements.filter((r) => r.versionId === versionId);
const availableReqs = requirements.filter((r) => r.projectId === projectId && !r.versionId && r.status === 'adopted');
return (
{linkedReqs.length} 条关联需求
{linkedReqs.length === 0 ? (
暂无关联需求,从需求池中添加
) : (
| 编号 |
需求概述 |
描述 |
状态 |
添加人 |
操作 |
{linkedReqs.map((req) => (
| {req.code} |
{req.title} |
{req.description || '-'} |
{REQ_STATUS_LABEL[req.status]}
|
{req.addedToVersionBy || '-'} |
|
))}
)}
{showAddModal && (
setShowAddModal(false)}
onConfirm={(ids) => { onLink(ids, currentUserName); setShowAddModal(false); }}
/>
)}
);
}
function AddRequirementModal({ available, onClose, onConfirm }: {
available: Requirement[];
onClose: () => void;
onConfirm: (ids: string[]) => void;
}) {
const [selected, setSelected] = useState>(new Set());
const [search, setSearch] = useState('');
const filtered = available.filter((r) =>
r.title.includes(search) || r.code.includes(search)
);
const toggle = (id: string) => {
const next = new Set(selected);
if (next.has(id)) next.delete(id); else next.add(id);
setSelected(next);
};
return (
e.stopPropagation()}>
从需求池添加
{filtered.length === 0 ? (
没有可添加的需求
) : (
{filtered.map((req) => (
))}
)}
已选 {selected.size} 条
);
}