feat: 计划转交功能 + 关联需求增强(描述/变更/类型/日期)
一、调研/产品方案/UI设计 - 转交功能: - 未开始/进行中状态可转交给其他参与人员 - 转交按钮打开内联选择器,从 version.members 选人 - 确认后更新 plan.owner 二、关联需求表格增强: - 描述列:超出宽度省略号,hover 显示完整 title 属性 - 需求类型列:原始需求(灰色)/ 变更需求(橙色) - 变更原因列:显示变更原因标签 - 添加日期列:显示 createdAt 三、需求变更功能: - 新增"需求变更"按钮(橙色边框) - 变更表单:变更人员(从参与人员选)、变更原因(6种)、 需求概述、需求详细 - 变更原因选项:需求理解偏差导致返工、反馈导致返工、 实现难度超预期、上游交付延误、范围蔓延、其他 - 创建后自动关联到当前版本,标记为变更需求 四、数据模型扩展(lib/requirement.ts): - 新增 reqType: 'original' | 'change' - 新增 changeReason: ChangeReason - 新增 changeBy: string - 导出 CHANGE_REASON_LABEL 常量 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -52,7 +52,7 @@ export default function VersionDetailPage() {
|
||||
const router = useRouter();
|
||||
const versionId = params.id as string;
|
||||
const { overview, fetchOverview, updateVersion, deleteVersion } = useProductStore();
|
||||
const { requirements, fetchRequirements, updateRequirement } = useRequirementStore();
|
||||
const { requirements, fetchRequirements, updateRequirement, createRequirement } = useRequirementStore();
|
||||
const { records, fetchRecords } = useOvertimeStore();
|
||||
const { plans, fetchPlans, createPlan, updatePlan, completePlan, deletePlan } = useVersionPlanStore();
|
||||
const { tasks: devTasks, fetchTasks: fetchDevTasks, deleteTask: deleteDevTask } = useDevTaskStore();
|
||||
@@ -751,11 +751,30 @@ export default function VersionDetailPage() {
|
||||
projectId={version.projectId}
|
||||
requirements={requirements}
|
||||
devTasks={devTasks}
|
||||
versionMembers={version.members ?? []}
|
||||
currentUserName={user?.name ?? ''}
|
||||
onLink={(ids, addedBy) => {
|
||||
ids.forEach((id) => updateRequirement(id, { versionId: version.id, addedToVersionBy: addedBy }));
|
||||
}}
|
||||
onUnlink={(id) => updateRequirement(id, { versionId: undefined, addedToVersionBy: undefined })}
|
||||
onCreateChange={(data) => {
|
||||
createRequirement({
|
||||
...data,
|
||||
productId: version.productId,
|
||||
projectId: version.projectId,
|
||||
versionId: version.id,
|
||||
sourceType: 'internal',
|
||||
sourceTarget: '',
|
||||
platforms: [],
|
||||
typeId: '',
|
||||
status: 'adopted',
|
||||
priority: 'P2',
|
||||
effort: 'M',
|
||||
creator: user?.name ?? '',
|
||||
addedToVersionBy: user?.name ?? '',
|
||||
reqType: 'change',
|
||||
} as any);
|
||||
}}
|
||||
/>
|
||||
) : (activeTab === 'research' || activeTab === 'product' || activeTab === 'ui') ? (
|
||||
(() => {
|
||||
@@ -769,6 +788,7 @@ export default function VersionDetailPage() {
|
||||
versionDeadline={version.expectedReleaseDate ?? undefined}
|
||||
currentUserName={user?.name ?? ''}
|
||||
planType={pt}
|
||||
versionMembers={version.members ?? []}
|
||||
linkedRequirements={pt !== 'research' ? linkedReqs : undefined}
|
||||
onCreate={(data) => {
|
||||
createPlan(data);
|
||||
|
||||
Reference in New Issue
Block a user