feat(版本): 记录计划需求进展活动

关键改动:

- 记录产品/UI 计划需求覆盖进展,并写入工作活动与实体日志

- 日报和小宝预警补充需求进展活动证据

- 调整版本列表与需求覆盖面板展示,并补充测试

Co-Authored-By: Codex GPT-5 <codex@openai.com>
This commit is contained in:
Script Generator
2026-06-30 15:35:36 +08:00
parent f82ec1ea6f
commit 04520bd8c5
13 changed files with 173 additions and 82 deletions

View File

@@ -7,8 +7,10 @@ import type { PlanResultPayload } from '@/lib/version-plan-workflow';
import {
makeVersionPlanCompletedActivity,
makeVersionPlanCreatedActivity,
makeVersionPlanRequirementProgressActivity,
makeVersionPlanStartedActivity,
} from '@/lib/work-activity-factory';
import type { WorkActivityDraft } from '@/lib/work-activity';
import { useWorkActivityStore } from './useWorkActivityStore';
const MOCK_PLANS: VersionPlan[] = [];
@@ -51,7 +53,7 @@ export const useVersionPlanStore = create<VersionPlanState>((set, get) => ({
updatePlan: (id, data) => {
const now = new Date().toISOString();
const activities: ReturnType<typeof makeVersionPlanStartedActivity>[] = [];
const activities: WorkActivityDraft[] = [];
const plans = get().plans.map((p) => {
if (p.id !== id) return p;
const patch = { ...data };
@@ -68,6 +70,12 @@ export const useVersionPlanStore = create<VersionPlanState>((set, get) => ({
if (p.status !== 'completed' && next.status === 'completed') {
activities.push(makeVersionPlanCompletedActivity(next, next.owner));
}
const previousLogIds = new Set((p.logs ?? []).map((log) => log.id));
for (const log of next.logs ?? []) {
if (previousLogIds.has(log.id)) continue;
const activity = makeVersionPlanRequirementProgressActivity(next, log);
if (activity) activities.push(activity);
}
return next;
});
set({ plans });