feat(原型设计): 精简导航并补充资料与法规页

This commit is contained in:
2026-06-03 23:32:56 +08:00
parent f53d5a1902
commit 134e0fb5ff

View File

@@ -792,12 +792,11 @@
<p>以对话为核心的人机协同审核原型,聚焦上传、知识库、留痕与结构化结论。</p>
</div>
<nav class="system-nav">
<button class="system-nav-btn" data-top-nav="home">首页</button>
<button class="system-nav-btn" data-top-nav="materials">资料管理</button>
<button class="system-nav-btn" data-top-nav="tasks">审核任务</button>
<button class="system-nav-btn" data-top-nav="knowledge">知识库</button>
<button class="system-nav-btn" data-top-nav="materials">资料包</button>
<button class="system-nav-btn" data-top-nav="regulations">法规依据</button>
<button class="system-nav-btn" data-top-nav="chat">审核智能体</button>
<button class="system-nav-btn" data-top-nav="history">流程留痕</button>
<button class="system-nav-btn" data-top-nav="knowledge">知识库</button>
<button class="system-nav-btn" data-top-nav="history">处理历史</button>
</nav>
</div>
</div>
@@ -1044,6 +1043,35 @@
trace: ["字段抽取", "字段复核", "回填草稿"]
}
]
},
materials: {
metrics: [
{ label: "资料文件数", value: "18", note: "含监管信息、说明书与补充材料" },
{ label: "已识别页数", value: "236", note: "PDF / DOCX 已统计1 份 DOC 待复核" },
{ label: "章节点命中", value: "14", note: "覆盖 CH1 至 CH6 关键章节" },
{ label: "目录异常", value: "2", note: "1 份页数待复核1 份疑似目录错放" }
],
items: [
{ path: "第1章 监管信息/CH1.2 监管信息目录.docx", chapter: "CH1.2", pages: "3", status: "已识别", note: "命中监管信息目录" },
{ path: "第1章 监管信息/CH1.4 申请表.docx", chapter: "CH1.4", pages: "5", status: "已识别", note: "用于字段抽取与一致性核查" },
{ path: "第1章 监管信息/CH1.9 产品申报前沟通的说明.doc", chapter: "CH1.9", pages: "待复核", status: "异常", note: "疑似目录错放,页数待人工确认" },
{ path: "第1章 监管信息/CH1.11.1 符合标准的清单.docx", chapter: "CH1.11.1", pages: "2", status: "已识别", note: "可用于完整性检查" },
{ path: "第1章 监管信息/CH1.11.5 真实性声明.docx", chapter: "CH1.11.5", pages: "1", status: "已识别", note: "监管声明材料" },
{ path: "目标产品说明书.docx", chapter: "CH3", pages: "18", status: "已识别", note: "主要字段来源文档" }
]
},
regulations: {
metrics: [
{ label: "法规源数量", value: "6", note: "公告、申报要求、批准证明文件格式等" },
{ label: "适用条款", value: "24", note: "当前原型重点命中 CH1 相关条款" },
{ label: "命中规则包", value: "4", note: "完整性、一致性、风险与导出规则" },
{ label: "高风险依据", value: "2", note: "缺失必交项与冲突字段命中阻断条件" }
],
refs: [
{ title: "附件 4 体外诊断试剂注册申报资料要求及说明", type: "核心法规", hit: "CH1.11.4 必交项", summary: "用于判断授权书/声明类资料缺失是否构成高风险。" },
{ title: "关于公布体外诊断试剂注册申报资料要求和批准证明文件格式的公告", type: "配套公告", hit: "资料结构要求", summary: "用于说明申报资料章节结构和材料格式要求。" },
{ title: "目标产品说明书.docx", type: "业务依据", hit: "字段取值比对", summary: "作为字段抽取和一致性核查的重要业务依据。" }
]
}
};
@@ -1063,9 +1091,7 @@
function renderTopNav() {
document.querySelectorAll("[data-top-nav]").forEach(item => {
const target = item.dataset.topNav;
const isActive = (activeTabId === "chat" && target === "chat")
|| (activeTabId === "knowledge" && target === "knowledge")
|| (activeTabId === "history" && target === "history");
const isActive = activeTabId === target;
item.classList.toggle("active", isActive);
});
}
@@ -1275,6 +1301,115 @@
`;
}
function renderMaterialsPage() {
return `
<section class="page ${activeTabId === "materials" ? "active" : ""}" data-page="materials">
${renderMetrics(data.materials.metrics)}
<div class="panel" style="margin-bottom:18px;">
<div class="panel-head">
<div>
<h2>资料包总览</h2>
<p>直接承接原始材料目录,用于上传后快速看到文件结构、章节点和异常。</p>
</div>
<div class="table-actions">
<button class="mini-btn">导入资料包</button>
<button class="mini-btn">刷新目录</button>
<button class="mini-btn">生成目录报告</button>
</div>
</div>
<div class="panel-body">
<div class="table-shell">
<table>
<thead>
<tr>
<th>相对路径</th>
<th>命中章节</th>
<th>页数</th>
<th>状态</th>
<th>说明</th>
</tr>
</thead>
<tbody>
${data.materials.items.map(item => `
<tr>
<td>${item.path}</td>
<td>${item.chapter}</td>
<td>${item.pages}</td>
<td><span class="status-tag ${statusClass(item.status)}">${item.status}</span></td>
<td>${item.note}</td>
</tr>
`).join("")}
</tbody>
</table>
</div>
</div>
</div>
</section>
`;
}
function renderRegulationsPage() {
return `
<section class="page ${activeTabId === "regulations" ? "active" : ""}" data-page="regulations">
${renderMetrics(data.regulations.metrics)}
<div class="knowledge-layout">
<div class="history-layout">
<section class="panel">
<div class="panel-head">
<div>
<h2>法规依据总览</h2>
<p>展示当前审核 Agent 会引用的核心法规、公告和业务说明材料。</p>
</div>
</div>
<div class="panel-body">
<div class="record-list">
${data.regulations.refs.map(item => `
<div class="queue-item">
<div class="meta-row">
<span class="mini-tag">${item.type}</span>
<span class="status-tag warning">${item.hit}</span>
</div>
<strong>${item.title}</strong>
<div class="muted">${item.summary}</div>
</div>
`).join("")}
</div>
</div>
</section>
</div>
<div class="side-stack">
<section class="panel">
<div class="panel-head">
<div>
<h3>当前命中依据</h3>
<p>本轮高风险结论主要来自以下两类法规判断。</p>
</div>
</div>
<div class="panel-body">
<div class="process-steps">
<div class="step-card blocked">
<div>
<strong>CH1.11.4 缺失必交资料</strong>
<div class="muted">依据申报资料要求及说明,授权书/声明类文件属于必交项,缺失即触发高风险。</div>
</div>
<span class="status-tag danger">高风险</span>
</div>
<div class="step-card running">
<div>
<strong>产品名称冲突待确认</strong>
<div class="muted">说明书与申请表出现表述差异,进入一致性核查并阻断正式导出。</div>
</div>
<span class="status-tag warning">核查中</span>
</div>
</div>
</div>
</section>
</div>
</div>
</section>
`;
}
function renderKnowledgePage() {
return `
<section class="page ${activeTabId === "knowledge" ? "active" : ""}" data-page="knowledge">
@@ -1522,6 +1657,8 @@
function renderPages() {
document.getElementById("pages").innerHTML = [
renderMaterialsPage(),
renderRegulationsPage(),
renderChatPage(),
renderKnowledgePage(),
renderHistoryPage()
@@ -1539,7 +1676,7 @@
const topNav = event.target.closest("[data-top-nav]");
if (topNav) {
const target = topNav.dataset.topNav;
if (target === "chat" || target === "knowledge" || target === "history") {
if (target === "materials" || target === "regulations" || target === "chat" || target === "knowledge" || target === "history") {
activeTabId = target;
}
rerender();