style(原型设计): 调整为蓝白助手工作台风格

This commit is contained in:
2026-06-03 23:24:16 +08:00
parent e75f0a0356
commit c303a2fcc6

View File

@@ -6,22 +6,24 @@
<title>审核 Agent 原型演示站</title> <title>审核 Agent 原型演示站</title>
<style> <style>
:root { :root {
--bg: #f7f8fa; --bg: #f4f7fc;
--panel: #ffffff; --panel: #ffffff;
--panel-soft: #fbfbfc; --panel-soft: #f8fbff;
--ink: #111827; --ink: #1f2f46;
--muted: #6b7280; --muted: #7c8ba5;
--line: #e5e7eb; --line: #dfE8f5;
--line-strong: #d1d5db; --line-strong: #c9d8ee;
--accent: #1f2937; --accent: #3a73d9;
--accent-soft: #f3f4f6; --accent-soft: #eaf2ff;
--nav-bg: #ffffff;
--sidebar-bg: linear-gradient(180deg, #edf4ff 0%, #e7f0ff 36%, #eef4ff 100%);
--success: #166534; --success: #166534;
--success-bg: #ecfdf3; --success-bg: #ecfdf3;
--warning: #92400e; --warning: #92400e;
--warning-bg: #fff7ed; --warning-bg: #fff7ed;
--danger: #b42318; --danger: #b42318;
--danger-bg: #fef3f2; --danger-bg: #fef3f2;
--shadow: 0 8px 24px rgba(17, 24, 39, 0.04); --shadow: 0 10px 28px rgba(52, 89, 152, 0.08);
--radius-lg: 12px; --radius-lg: 12px;
--radius-md: 10px; --radius-md: 10px;
--radius-sm: 8px; --radius-sm: 8px;
@@ -60,37 +62,40 @@
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 10; z-index: 10;
background: rgba(255, 255, 255, 0.94); background: rgba(255, 255, 255, 0.98);
backdrop-filter: blur(12px); backdrop-filter: blur(12px);
border-bottom: 1px solid var(--line); border-bottom: 1px solid var(--line);
} }
.topbar-inner { .topbar-inner {
max-width: 1480px; max-width: 100%;
margin: 0 auto; margin: 0 auto;
padding: 18px 24px 14px; padding: 0 18px;
display: grid; display: flex;
gap: 14px; align-items: stretch;
justify-content: space-between;
gap: 20px;
min-height: 64px;
} }
.brand-row { .brand-row {
display: flex; display: flex;
justify-content: space-between;
align-items: center; align-items: center;
gap: 16px; gap: 18px;
min-width: 0;
} }
.brand h1 { .brand h1 {
margin: 0; margin: 0;
font-size: 22px; font-size: 18px;
line-height: 1.2; line-height: 1.2;
font-weight: 700; font-weight: 700;
} }
.brand p { .brand p {
margin: 6px 0 0; margin: 4px 0 0;
color: var(--muted); color: var(--muted);
font-size: 13px; font-size: 12px;
} }
.summary-row { .summary-row {
@@ -135,31 +140,36 @@
.tabs { .tabs {
display: flex; display: flex;
gap: 8px; gap: 2px;
border-top: 1px solid var(--line); align-items: stretch;
padding-top: 14px; margin-left: 20px;
} }
.tab-btn { .tab-btn {
padding: 10px 16px; padding: 0 20px;
border-radius: 999px; min-height: 64px;
border: 1px solid transparent; border-radius: 0;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 2px solid transparent;
color: var(--muted); color: var(--muted);
background: transparent; background: transparent;
font-weight: 600; font-weight: 600;
position: relative;
} }
.tab-btn.active { .tab-btn.active {
background: var(--accent); background: #eef4ff;
color: #fff; color: var(--accent);
border-color: var(--accent); border-color: #b9cdf5;
} }
.content { .content {
max-width: 1480px; max-width: 100%;
width: 100%; width: 100%;
margin: 0 auto; margin: 0;
padding: 24px; padding: 18px;
} }
.page { .page {
@@ -173,9 +183,9 @@
.agent-layout { .agent-layout {
display: grid; display: grid;
grid-template-columns: 280px minmax(0, 1fr) 320px; grid-template-columns: 302px minmax(0, 1fr) 340px;
gap: 18px; gap: 18px;
min-height: calc(100vh - 170px); min-height: calc(100vh - 100px);
} }
.panel { .panel {
@@ -242,9 +252,9 @@
} }
.history-item.active { .history-item.active {
border-color: var(--line-strong); border-color: #b9cdf5;
background: #fff; background: linear-gradient(180deg, #eef4ff 0%, #e5efff 100%);
box-shadow: inset 0 0 0 1px #d1d5db; box-shadow: inset 0 0 0 1px #c7d8f4;
} }
.history-item strong, .history-item strong,
@@ -272,10 +282,74 @@
.conversation-shell { .conversation-shell {
display: grid; display: grid;
grid-template-rows: auto auto 1fr auto; grid-template-rows: auto auto auto 1fr auto;
min-height: 100%; min-height: 100%;
} }
.hero-center {
padding: 54px 24px 24px;
text-align: center;
display: grid;
gap: 18px;
justify-items: center;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 16px;
border-radius: 999px;
background: var(--accent);
color: #fff;
font-size: 13px;
box-shadow: 0 10px 20px rgba(58, 115, 217, 0.18);
}
.hero-center h2 {
margin: 0;
font-size: 28px;
line-height: 1.35;
color: #17315f;
}
.hero-center p {
max-width: 760px;
margin: 0;
color: var(--muted);
font-size: 15px;
line-height: 1.9;
}
.hero-tags {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 10px;
}
.hero-note-row {
display: grid;
grid-template-columns: 1.4fr 0.8fr;
gap: 12px;
width: min(880px, 100%);
}
.hero-note-card {
padding: 16px;
border-radius: 14px;
border: 1px solid #d8e4f8;
background: linear-gradient(180deg, #f6f9ff 0%, #eef4ff 100%);
text-align: left;
}
.hero-note-card strong {
display: block;
margin-bottom: 8px;
color: #2453a6;
font-size: 14px;
}
.prompt-rail { .prompt-rail {
padding: 14px 18px 0; padding: 14px 18px 0;
display: flex; display: flex;
@@ -286,9 +360,9 @@
.prompt-chip { .prompt-chip {
padding: 8px 12px; padding: 8px 12px;
border-radius: 999px; border-radius: 999px;
border: 1px solid var(--line); border: 1px solid #dbe6fb;
background: #fff; background: #eef4ff;
color: var(--muted); color: #4a73b8;
font-size: 12px; font-size: 12px;
} }
@@ -308,12 +382,12 @@
} }
.node-item.active { .node-item.active {
border-color: var(--line-strong); border-color: #bfd2f5;
background: #f9fafb; background: #eef4ff;
} }
.conversation-board { .conversation-board {
padding: 18px; padding: 12px 18px 18px;
display: grid; display: grid;
gap: 14px; gap: 14px;
align-content: start; align-content: start;
@@ -330,16 +404,18 @@
.message.user { .message.user {
margin-left: auto; margin-left: auto;
background: #f9fafb; background: #eef4ff;
border-color: #d6e2f8;
} }
.message.agent { .message.agent {
margin-right: auto; margin-right: auto;
background: #ffffff;
} }
.message.system { .message.system {
margin-right: auto; margin-right: auto;
background: #fcfcfd; background: #f8fbff;
} }
.message-head { .message-head {
@@ -363,19 +439,22 @@
.composer { .composer {
border-top: 1px solid var(--line); border-top: 1px solid var(--line);
padding: 16px 18px 18px; padding: 18px;
display: grid; display: grid;
gap: 12px; gap: 12px;
background: linear-gradient(180deg, rgba(244,247,252,0) 0%, #f7faff 100%);
} }
.composer-box { .composer-box {
min-height: 100px; min-height: 58px;
border: 1px solid var(--line); border: 1px solid #d7e3f8;
border-radius: var(--radius-md); border-radius: 999px;
background: #fff; background: #fff;
padding: 14px; padding: 16px 20px;
color: var(--muted); color: var(--muted);
line-height: 1.7; line-height: 1.4;
display: flex;
align-items: center;
} }
.composer-actions, .composer-actions,
@@ -396,14 +475,14 @@
padding: 10px 14px; padding: 10px 14px;
font-size: 13px; font-size: 13px;
font-weight: 600; font-weight: 600;
border: 1px solid var(--line); border: 1px solid #d4def2;
background: #fff; background: #fff;
color: var(--ink); color: #345383;
} }
.primary-btn { .primary-btn {
background: var(--accent); background: linear-gradient(180deg, #4f86e8 0%, #336fd7 100%);
border-color: var(--accent); border-color: #336fd7;
color: #fff; color: #fff;
} }
@@ -423,10 +502,10 @@
} }
.upload-box { .upload-box {
border: 1px dashed var(--line-strong); border: 1px dashed #c8d8f2;
border-radius: var(--radius-md); border-radius: var(--radius-md);
padding: 16px; padding: 16px;
background: #fcfcfd; background: linear-gradient(180deg, #f9fbff 0%, #f1f6ff 100%);
display: grid; display: grid;
gap: 12px; gap: 12px;
} }
@@ -452,8 +531,8 @@
} }
.ability-card.active { .ability-card.active {
border-color: var(--line-strong); border-color: #bfd2f5;
background: #f9fafb; background: linear-gradient(180deg, #f5f9ff 0%, #eef4ff 100%);
} }
.metric-grid { .metric-grid {
@@ -586,11 +665,110 @@
.search-input { .search-input {
padding: 11px 14px; padding: 11px 14px;
border-radius: 10px; border-radius: 10px;
border: 1px solid var(--line); border: 1px solid #d4def2;
background: #fff; background: #fff;
color: var(--ink); color: var(--ink);
} }
.system-nav {
display: flex;
align-items: stretch;
gap: 2px;
margin-left: 26px;
}
.system-nav-btn {
min-height: 64px;
padding: 0 16px;
display: inline-flex;
align-items: center;
color: #3b4e6d;
border-bottom: 2px solid transparent;
font-size: 15px;
}
.system-nav-btn.active {
background: #eef4ff;
color: var(--accent);
border-color: #c5d7f6;
}
.topbar-right {
display: flex;
align-items: center;
gap: 16px;
color: var(--muted);
font-size: 14px;
white-space: nowrap;
}
.user-badge {
width: 34px;
height: 34px;
display: inline-grid;
place-items: center;
border-radius: 50%;
background: #e8edf7;
color: #5b6f8d;
font-weight: 700;
}
.history-panel {
background: var(--sidebar-bg);
border-color: #dbe7fb;
overflow: hidden;
}
.history-panel .panel-head,
.history-panel .panel-body {
border-bottom-color: rgba(201, 216, 238, 0.9);
}
.history-toolbar {
display: grid;
gap: 12px;
}
.search-shell {
padding: 10px 12px;
border-radius: 10px;
border: 1px solid #d5e1f5;
background: rgba(255,255,255,0.86);
color: #8a98b3;
font-size: 13px;
}
.history-caption {
padding: 10px 12px;
border-radius: 10px;
background: rgba(215, 229, 255, 0.72);
color: #4b73b5;
font-size: 13px;
text-align: center;
font-weight: 600;
}
.history-footer {
margin-top: 16px;
padding-top: 16px;
border-top: 1px solid rgba(201, 216, 238, 0.9);
display: flex;
align-items: center;
gap: 12px;
}
.history-avatar {
width: 38px;
height: 38px;
border-radius: 50%;
background: linear-gradient(180deg, #5d8ee9 0%, #3c74db 100%);
color: #fff;
display: grid;
place-items: center;
font-weight: 700;
box-shadow: 0 8px 18px rgba(58, 115, 217, 0.2);
}
@keyframes fadeIn { @keyframes fadeIn {
from { opacity: 0; transform: translateY(4px); } from { opacity: 0; transform: translateY(4px); }
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
@@ -604,6 +782,10 @@
.kb-grid { .kb-grid {
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
} }
.system-nav {
display: none;
}
} }
@media (max-width: 1080px) { @media (max-width: 1080px) {
@@ -618,6 +800,10 @@
.kb-grid { .kb-grid {
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
} }
.hero-note-row {
grid-template-columns: 1fr;
}
} }
@media (max-width: 720px) { @media (max-width: 720px) {
@@ -627,6 +813,11 @@
padding-right: 16px; padding-right: 16px;
} }
.topbar-inner,
.brand-row {
flex-wrap: wrap;
}
.metric-grid, .metric-grid,
.kb-grid { .kb-grid {
grid-template-columns: 1fr; grid-template-columns: 1fr;
@@ -647,12 +838,26 @@
<h1>试剂盒临床注册文件准备与审核 Agent</h1> <h1>试剂盒临床注册文件准备与审核 Agent</h1>
<p>以对话为核心的人机协同审核原型,聚焦上传、知识库、留痕与结构化结论。</p> <p>以对话为核心的人机协同审核原型,聚焦上传、知识库、留痕与结构化结论。</p>
</div> </div>
<nav class="system-nav">
<button class="system-nav-btn">首页</button>
<button class="system-nav-btn">资料管理</button>
<button class="system-nav-btn">审核任务</button>
<button class="system-nav-btn">知识库</button>
<button class="system-nav-btn active">审核智能体</button>
<button class="system-nav-btn">流程留痕</button>
</nav>
</div>
<div class="topbar-right">
<div class="summary-row"> <div class="summary-row">
<span class="chip">批次SUB-20260603-001</span> <span class="chip">批次SUB-20260603-001</span>
<span class="chip">产品:新型冠状病毒 2019-nCoV 核酸检测试剂盒</span> <span class="chip">产品:新型冠状病毒 2019-nCoV 核酸检测试剂盒</span>
<span class="status-tag danger">当前结论:正式导出受阻</span> <span class="status-tag danger">正式导出受阻</span>
</div> </div>
<span>admin1</span>
<span class="user-badge">A</span>
</div> </div>
</div>
<div class="topbar-inner" style="min-height:auto; padding-top:0; padding-bottom:0;">
<div class="tabs" id="tabList"></div> <div class="tabs" id="tabList"></div>
</div> </div>
</header> </header>
@@ -1011,35 +1216,59 @@
return ` return `
<section class="page ${activeTabId === "chat" ? "active" : ""}" data-page="chat"> <section class="page ${activeTabId === "chat" ? "active" : ""}" data-page="chat">
<div class="agent-layout"> <div class="agent-layout">
<aside class="panel"> <aside class="panel history-panel">
<div class="panel-head"> <div class="panel-head">
<div> <div class="history-toolbar" style="width:100%;">
<h3>对话历史</h3> <button class="primary-btn" style="width:100%; justify-content:center;">+ 新对话</button>
<p>按批次管理会话,适合保留多轮审核上下文。</p> <div class="search-shell">搜索会话...</div>
<div class="history-caption">对话记录</div>
</div> </div>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="muted" style="margin-bottom:12px; color:#6f81a2; font-weight:600;">更早</div>
<div class="history-list"> <div class="history-list">
${renderHistoryList(data.conversations)} ${renderHistoryList(data.conversations)}
</div> </div>
<div class="history-footer">
<div class="history-avatar">A</div>
<div>
<strong style="display:block; font-size:14px;">admin1</strong>
<div class="muted" style="color:#5da96f;">在线</div>
</div>
</div>
</div> </div>
</aside> </aside>
<section class="panel conversation-shell"> <section class="panel conversation-shell">
<div class="panel-head"> <div class="hero-center">
<span class="hero-badge">审核智能助手</span>
<h2>试剂盒临床注册资料智能工作台</h2>
<p>面向注册申报资料准备、审核与整改协同场景,提供资料上传、目录汇总、完整性检查、字段抽取、一致性核查和导出建议的一站式 Agent 对话入口。</p>
<div class="hero-tags">
<span class="prompt-chip">自动汇总文件夹目录与页数</span>
<span class="prompt-chip">执行法规完整性检查</span>
<span class="prompt-chip">抽取字段并生成字段池</span>
<span class="prompt-chip">解释冲突字段原因</span>
<span class="prompt-chip">给出整改与导出建议</span>
</div>
<div class="hero-note-row">
<div class="hero-note-card">
<strong>推荐提问方式</strong>
<div class="muted">建议说明统计范围、资料对象和输出目标,例如“请自动汇总这个资料包的目录、页数与章节点,并标出待复核异常”。</div>
</div>
<div class="hero-note-card">
<strong>当前数据权限</strong>
<div class="muted">可查询当前批次资料、知识库法规规则、已入库模板与历史处理记录。</div>
</div>
</div>
</div>
<div class="panel-head" style="border-top:1px solid var(--line);">
<div> <div>
<h2>${conversation.title}</h2> <h2>${conversation.title}</h2>
<p>对话中穿插节点结果,点击节点可以快速定位审核阶段。</p> <p>对话中穿插节点结果,点击节点可以快速定位审核阶段。</p>
</div> </div>
<span class="status-tag ${statusClass(conversation.status)}">${conversation.status}</span> <span class="status-tag ${statusClass(conversation.status)}">${conversation.status}</span>
</div> </div>
<div class="prompt-rail">
<span class="prompt-chip">自动汇总文件夹文件目录与页数</span>
<span class="prompt-chip">执行法规完整性检查</span>
<span class="prompt-chip">抽取字段并生成字段池</span>
<span class="prompt-chip">解释冲突字段原因</span>
<span class="prompt-chip">给出导出建议与整改责任人</span>
</div>
<div class="node-strip"> <div class="node-strip">
${renderNodeStrip(conversation.nodes)} ${renderNodeStrip(conversation.nodes)}
</div> </div>
@@ -1049,9 +1278,9 @@
<div class="composer"> <div class="composer">
<div class="composer-box">在这里继续输入指令,例如:“先自动汇总目录与页数,再按法规要求执行完整性检查,并输出缺失项和法规依据。”</div> <div class="composer-box">在这里继续输入指令,例如:“先自动汇总目录与页数,再按法规要求执行完整性检查,并输出缺失项和法规依据。”</div>
<div class="composer-actions"> <div class="composer-actions">
<button class="primary-btn">发送给 Agent</button> <button class="secondary-btn">上传附件</button>
<button class="secondary-btn">插入模板提示词</button> <button class="secondary-btn">插入模板提示词</button>
<button class="ghost-btn">生成结构化结论</button> <button class="primary-btn">发送给 Agent</button>
</div> </div>
</div> </div>
</section> </section>