From fba3a143678d2fd6a7ad25a848e9200ef96fa682 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 11 Jun 2026 14:26:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E5=BF=AB=E9=80=9F=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/projects/RequirementDetailView.vue | 21 +- .../components/RequirementHistoryPanel.vue | 330 ++++++++++++++++++ 2 files changed, 350 insertions(+), 1 deletion(-) create mode 100644 web/src/views/projects/components/RequirementHistoryPanel.vue diff --git a/web/src/views/projects/RequirementDetailView.vue b/web/src/views/projects/RequirementDetailView.vue index 6e1a518..2805659 100644 --- a/web/src/views/projects/RequirementDetailView.vue +++ b/web/src/views/projects/RequirementDetailView.vue @@ -88,7 +88,7 @@

- + + + + (null) const artifactPanelRef = ref | null>(null) +const historyPanelRef = ref | null>(null) const prevArtifact = ref(null) const workspaceOptions = computed(() => wsStore.list.map((w) => ({ label: `${w.name} (${w.slug})`, value: w.id })), ) +const workspaceSlug = computed(() => { + if (!data.value?.requirement.workspace_id) return null + return wsStore.list.find((w) => w.id === data.value!.requirement.workspace_id)?.slug ?? null +}) + // 当前阶段属于 AI 对话三阶段时返回该阶段,否则 null。 const chatPhase = computed(() => { const p = data.value?.requirement.phase @@ -271,6 +289,7 @@ watch(chatPhase, loadPrevArtifact) function onArtifactSaved() { artifactPanelRef.value?.refresh() + historyPanelRef.value?.refresh() } async function onWorkspaceChange(v: string | null) { diff --git a/web/src/views/projects/components/RequirementHistoryPanel.vue b/web/src/views/projects/components/RequirementHistoryPanel.vue new file mode 100644 index 0000000..5cfcef0 --- /dev/null +++ b/web/src/views/projects/components/RequirementHistoryPanel.vue @@ -0,0 +1,330 @@ + + +