From ed59e93b5312136c4061e506a270466c43d924bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=BF=E4=BA=91=E7=A7=8B=E6=9C=88?= <15273589815@163.com> Date: Tue, 15 Sep 2026 00:21:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8F=91=E5=B8=83=EF=BC=9A=E7=82=B9=E3=80=8C=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E3=80=8D=E5=90=8E=E5=9C=A8=E8=A7=86=E5=8F=A3=E9=87=8C=E7=9C=8B?= =?UTF-8?q?=E4=B8=8D=E5=88=B0=E5=8F=98=E5=8C=96=EF=BC=88=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=B8=B2=E6=9F=93=E5=9C=A8=2020=20=E6=9D=A1=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=B8=8B=E6=96=B9=EF=BC=89=EF=BC=8C=E6=94=B9=E4=B8=BA=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E5=90=8E=E6=BB=9A=E5=8A=A8=E5=AE=9A=E4=BD=8D=20+=20?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E7=94=A8=E5=8F=91=E5=B8=83=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=20+=20=E7=A9=BA=E5=88=97=E8=A1=A8=E7=BB=99=E6=98=BE=E5=BC=8F?= =?UTF-8?q?=E7=A9=BA=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../portal/employee-console/workspace/index.html | 2 +- .../portal/employee-console/workspace/workspace.js | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/static/portal/employee-console/workspace/index.html b/app/static/portal/employee-console/workspace/index.html index 81d35d4..cc504ee 100644 --- a/app/static/portal/employee-console/workspace/index.html +++ b/app/static/portal/employee-console/workspace/index.html @@ -50,6 +50,6 @@ 浏览器按**完整 URL** 去重,两条不同 query 会被当成两个模块、**各执行一次**, 于是入口里的 `mountShell()` 跑两遍,页面上出现**两份顶部导航与页脚**。 改版本号时是**替换**这一行,不是新增一行。 --> - + diff --git a/app/static/portal/employee-console/workspace/workspace.js b/app/static/portal/employee-console/workspace/workspace.js index fc24033..f9e3cf7 100644 --- a/app/static/portal/employee-console/workspace/workspace.js +++ b/app/static/portal/employee-console/workspace/workspace.js @@ -400,6 +400,10 @@ if (requireAdmin()) { const content = state.releaseContent; if (!content?.releaseId) { targets.releaseContent.innerHTML = ''; return; } const { releaseId, items, rules } = content; + // 用发布编号(人类可读)而不是数字 id 做标题:列表里看到的是 release_no, + // 面板上只写 `版本 354` 的话,点完根本对不上是哪一条。 + const release = (state.releases || []).find((row) => String(row.id) === String(releaseId)); + const releaseLabel = release?.release_no ? `${release.release_no}` : `#${releaseId}`; const itemRows = table( items, [['id', '项 ID'], ['namespace', '命名空间'], ['item_key', '键'], ['schema_version', '版本']], @@ -410,13 +414,18 @@ if (requireAdmin()) { [['id', '规则 ID'], ['rule_code', '规则码'], ['agent_type', 'Agent'], ['task_type', '任务'], ['model_policy', '策略'], ['primary_endpoint_id', '主端点']], (rule) => `
`, ); + // `table()` 在空数组时只会渲染一个表头,看着就像"没加载出来" —— 显式给一句空态文案。 + const emptyHint = (message) => `
${escapeHtml(message)}
`; targets.releaseContent.innerHTML = ` -

版本 ${escapeHtml(String(releaseId))} · 配置项

${items.length} 条
${itemRows}
-

版本 ${escapeHtml(String(releaseId))} · 模型路由规则

${rules.length} 条
${ruleRows}
`; +

${escapeHtml(releaseLabel)} · 配置项

${items.length} 条${release ? ` · ${escapeHtml(release.status)}` : ''}
${items.length ? itemRows : emptyHint('这个版本还没有配置项,用下面的表单新增后点「提交校验」。')}
+

${escapeHtml(releaseLabel)} · 模型路由规则

${rules.length} 条
${rules.length ? ruleRows : emptyHint('这个版本还没有模型路由规则(没有就意味着沿用其它版本或代码默认值)。')}
`; targets.releaseContent.querySelector('[data-item-form]').addEventListener('submit', (event) => submitItem(event, releaseId)); targets.releaseContent.querySelector('[data-rule-form]').addEventListener('submit', (event) => submitRule(event, releaseId)); targets.releaseContent.querySelectorAll('[data-edit-item]').forEach((button) => button.addEventListener('click', () => editItem(button.dataset.editItem))); targets.releaseContent.querySelectorAll('[data-edit-rule]').forEach((button) => button.addEventListener('click', () => editRule(button.dataset.editRule))); + // ⚠️ 内容面板渲染在发布列表**下方**,而列表最多 20 条 —— 只渲染不滚动的话, + // 用户点完「内容」在视口里看不到任何变化,会以为按钮没反应(2026-09-14 实测反馈)。 + targets.releaseContent.scrollIntoView({ behavior: 'smooth', block: 'start' }); } function editItem(itemId) {