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 @@
+
+
+
+
+
+
+
+
+ {{ PHASE_TITLE[phase] }}产物
+
+ {{ artifactsByPhase[phase].length }}
+
+ 当前
+
+
+
+
+
+
+
+ v{{ a.version }}
+
+ AI
+
+
+
+
+ {{ formatDate(a.created_at) }}
+
+
+ {{ a.note }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AI 对话
+ {{ conversations.length }}
+
+
+
+
+
+
+
+
+ {{ c.title || '(未命名)' }}
+
+
+
+
+ {{ formatDateTime(c.updated_at) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ ACP 会话
+ {{ acpSessions.length }}
+
+
+
+
+
+
+
+ {{ s.branch }}
+
+
+
+
+
+ {{ formatDateTime(s.started_at) }}
+ · {{ s.last_error }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+