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) {