From f2384cd6229df223707ed48c15bce8f1483e35cc Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期日, 06 九月 2026 17:44:24 +0800
Subject: [PATCH] 修复仅编辑权限的报表预览与更新入口

---
 src/views/ReportCompareForm.vue |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/views/ReportCompareForm.vue b/src/views/ReportCompareForm.vue
index 8f25426..a6ad60d 100644
--- a/src/views/ReportCompareForm.vue
+++ b/src/views/ReportCompareForm.vue
@@ -214,7 +214,9 @@
     canQuery.value = Boolean(info.permissions?.some(item => item === '*:*:*' || item === 'system:compare-report:query'))
     if (id) {
       if (mode === 'edit' && (!canEdit.value || version !== undefined)) throw new Error('历史版本只读或无编辑权限')
-      const record = await getCompareReport(id, version === undefined ? undefined : Number(version), mode === 'edit')
+      // 编辑权限包含读取最新编辑基准,取消或保存后仍可预览;历史查看单独要求查看权限。
+      const editingAccess = mode === 'edit' || (!canQuery.value && canEdit.value && version === undefined)
+      const record = await getCompareReport(id, version === undefined ? undefined : Number(version), editingAccess)
       if (cancelled) return
       editingRecord.value = record
       loadEditingReport()
@@ -429,13 +431,7 @@
       await createCompareReport({ ...content, selections: selectedTests.value.map(item => item.selection) })
     }
     ElMessage.success('对比报表已保存')
-    if (editingId.value && !canQuery.value) {
-      editingRecord.value = await getCompareReport(editingId.value, undefined, true)
-      loadEditingReport()
-      changeSummary.value = ''
-    } else {
-      await router.push(editingId.value ? { path: `/report-compare/${editingId.value}/edit`, query: { mode: 'view' } } : '/report-compare')
-    }
+    await router.push(editingId.value ? { path: `/report-compare/${editingId.value}/edit`, query: { mode: 'view' } } : '/report-compare')
   } catch (error) {
     ElMessage.error(error instanceof Error ? error.message : '保存失败,请重试')
   } finally {
@@ -445,6 +441,7 @@
 
 async function generateFromLatestSource() {
   if (saving.value || !editingRecord.value || !editingId.value) return
+  const baseRecord = editingRecord.value
   let reason: string
   try {
     const result = await ElMessageBox.prompt('将重新读取当前来源并生成新版本,保留已有人工表格值。', '按最新来源生成版本', {
@@ -453,9 +450,11 @@
     })
     reason = result.value.trim()
   } catch { return }
+  if (editingRecord.value !== baseRecord) return
   saving.value = true
   try {
-    const record = await refreshCompareSource(editingId.value, editingRecord.value.versionNo, reason)
+    const record = await refreshCompareSource(baseRecord.id, baseRecord.versionNo, reason)
+    if (editingRecord.value !== baseRecord) return
     editingRecord.value = record
     loadEditingReport()
     ElMessage.success(`已生成版本 ${record.versionNo}`)
@@ -574,6 +573,7 @@
 .report-name-panel, .compare-info-panel, .detail-panel, .metrics-panel { background: #fff; border: 1px solid #d8e1e9; }
 .report-name-panel { padding: 18px 22px; margin-bottom: 16px; }
 .report-name-panel label + label { margin-top: 12px; }
+.report-name-panel > span { display: block; margin-top: 12px; overflow-wrap: anywhere; }
 .series-swatch { flex: 0 0 12px; width: 12px; height: 12px; display: inline-block; }
 .report-name-panel label { display: grid; grid-template-columns: 72px minmax(260px, 420px); align-items: center; gap: 12px; }
 .report-name-panel label > span, .detail-meta label > span { color: #52606d; font-size: 12px; font-weight: 500; }

--
Gitblit v1.7.1