Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/03-UI设计/微信端PI.html
HaHafeng 4c5bb3d174 feat(iit): Initialize IIT Manager Agent MVP - Day 1 complete
- Add iit_schema with 5 tables
- Create module structure and types (223 lines)
- WeChat integration verified (Access Token success)
- Update system docs to v2.4
- Add REDCap source folders to .gitignore
- Day 1/14 complete (11/11 tasks)
2025-12-31 18:35:05 +08:00

235 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>PI 决策舱 - 微信端原型</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<style>
body {
background-color: #f3f4f6;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
user-select: none;
-webkit-tap-highlight-color: transparent;
}
.wechat-card {
box-shadow: 0 1px 2px rgba(0,0,0,0.05);
}
.mini-program-nav {
background: linear-gradient(135deg, #1e40af 0%, #1e3a8a 100%);
}
.glass-card {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
}
.safe-area-bottom {
padding-bottom: env(safe-area-inset-bottom);
}
@keyframes pulse-soft {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.02); }
}
.urgent-pulse {
animation: pulse-soft 2s infinite;
}
</style>
</head>
<body class="flex flex-col items-center min-h-screen">
<!-- 模拟手机外壳 -->
<div class="w-full max-w-md bg-white min-h-screen shadow-2xl overflow-hidden flex flex-col relative">
<!-- 场景 1企业微信消息列表 (模拟) -->
<div id="scene-notification" class="flex-1 flex flex-col bg-slate-100">
<!-- 微信顶部状态栏 -->
<div class="h-10 bg-slate-100 flex items-center justify-between px-6">
<span class="text-xs font-bold">18:30</span>
<div class="flex space-x-1">
<i class="fa-solid fa-signal text-[10px]"></i>
<i class="fa-solid fa-wifi text-[10px]"></i>
<i class="fa-solid fa-battery-three-quarters text-[10px]"></i>
</div>
</div>
<!-- 微信导航栏 -->
<div class="h-12 border-b border-slate-200 flex items-center px-4 space-x-4 bg-slate-100">
<i class="fa-solid fa-chevron-left"></i>
<span class="font-bold">企业微信 (1)</span>
</div>
<!-- 消息内容 -->
<div class="p-4 space-y-6">
<div class="text-center">
<span class="bg-slate-200 text-white text-[10px] px-2 py-0.5 rounded">18:31</span>
</div>
<!-- 智能提醒卡片 -->
<div onclick="openApplet()" class="wechat-card bg-white rounded-lg overflow-hidden cursor-pointer active:bg-slate-50 transition-colors">
<div class="p-4 border-b border-slate-100 flex items-center space-x-3">
<div class="w-10 h-10 bg-blue-600 rounded flex items-center justify-center text-white text-xl">
<i class="fa-solid fa-robot"></i>
</div>
<div>
<p class="font-bold text-slate-800">临床研究助理</p>
<p class="text-xs text-slate-400">来自: 北医三院项目组</p>
</div>
</div>
<div class="p-4">
<h4 class="font-bold text-slate-800 mb-2">⚠️ 严重方案偏离提醒 (PD)</h4>
<div class="space-y-1 text-sm text-slate-600">
<p>受试者: <span class="font-medium text-slate-900">P001</span></p>
<p>异常类型: <span class="text-red-600 font-bold">入排标准违背</span></p>
<p>详情: 年龄录入为 76 岁,超出方案限制。</p>
</div>
<div class="mt-4 pt-4 border-t border-slate-100 text-blue-600 text-sm font-medium flex justify-between items-center">
<span>点击进入决策中心查看证据</span>
<i class="fa-solid fa-chevron-right text-xs"></i>
</div>
</div>
</div>
</div>
</div>
<!-- 场景 2微信小程序 (决策中心) -->
<div id="scene-applet" class="hidden absolute inset-0 z-50 bg-slate-50 flex flex-col">
<!-- 小程序胶囊按钮 (模拟) -->
<div class="mini-program-nav h-24 pt-10 px-4 flex items-center justify-between text-white shrink-0">
<div class="flex items-center space-x-2">
<i class="fa-solid fa-hospital text-sm opacity-80"></i>
<span class="text-sm font-bold truncate max-w-[200px]">北医三院骨科项目组</span>
</div>
<div class="flex items-center space-x-3 bg-black/20 rounded-full px-3 py-1 border border-white/20">
<i class="fa-solid fa-ellipsis text-sm"></i>
<div class="w-px h-3 bg-white/20"></div>
<i onclick="closeApplet()" class="fa-solid fa-circle-stop text-sm cursor-pointer"></i>
</div>
</div>
<!-- 主题切换与项目卡片 -->
<div class="flex-1 overflow-y-auto no-scrollbar">
<!-- 影子决策详情 -->
<div class="p-4">
<div class="bg-white rounded-2xl shadow-sm border border-slate-200 overflow-hidden">
<div class="bg-amber-50 p-4 border-b border-amber-100 flex items-center justify-between">
<span class="text-xs font-bold text-amber-800 uppercase tracking-widest">待复核质疑</span>
<span class="text-[10px] bg-amber-200 text-amber-800 px-2 py-0.5 rounded-full">高风险</span>
</div>
<div class="p-4">
<div class="flex items-center justify-between mb-4">
<div>
<p class="text-[10px] text-slate-400 font-bold">受试者编号</p>
<p class="text-lg font-bold text-slate-800">P001</p>
</div>
<div class="text-right">
<p class="text-[10px] text-slate-400 font-bold">提交时间</p>
<p class="text-sm text-slate-600">18:31</p>
</div>
</div>
<!-- 证据展示区 -->
<div class="bg-slate-50 rounded-xl p-4 mb-4">
<p class="text-xs text-slate-500 mb-2">AI 推理建议:</p>
<p class="text-sm font-medium text-slate-800 leading-relaxed">
检测到年龄录入值为 <span class="bg-amber-200 px-1 font-bold">76</span>。检索研究方案第 14 页入选标准第 1.1 条,明确要求年龄上限为 <span class="underline decoration-blue-500">75 岁</span>
</p>
</div>
<!-- 移动端证据预览 -->
<div class="relative h-40 bg-slate-800 rounded-xl overflow-hidden mb-4 border border-slate-200">
<div class="absolute inset-0 p-4 text-[8px] text-slate-400 bg-white">
<p class="text-[10px] font-bold text-slate-900 border-b pb-1 mb-2">方案原文节选</p>
<p>1. 受试者入选标准:</p>
<p class="bg-amber-100 text-slate-800 font-bold px-1 mt-1">1.1 年龄 18 岁(含)至 75 岁(含),性别不限;</p>
<p>1.2 经组织学或细胞学确诊的局部晚期...</p>
</div>
<div class="absolute bottom-2 right-2 px-2 py-1 bg-blue-600 text-white text-[8px] rounded-full shadow-lg">
<i class="fa-solid fa-magnifying-glass mr-1"></i> 点击查看全文
</div>
</div>
<!-- 决策按钮 -->
<div class="flex space-x-3">
<button class="flex-1 py-3 bg-slate-100 text-slate-600 rounded-xl font-bold text-sm" onclick="rejectAction()">暂缓处理</button>
<button class="flex-1 py-3 bg-blue-600 text-white rounded-xl font-bold text-sm shadow-lg shadow-blue-200" onclick="approveAction()">批准并生成质疑</button>
</div>
</div>
</div>
</div>
<!-- 快捷统计看板 -->
<div class="px-4 pb-10">
<h5 class="text-sm font-bold text-slate-800 mb-4">今日项目动态</h5>
<div class="grid grid-cols-2 gap-3">
<div class="bg-white p-4 rounded-2xl border border-slate-100 shadow-sm">
<p class="text-[10px] text-slate-400 font-bold uppercase">入组进度</p>
<p class="text-xl font-bold text-slate-800 mt-1">85<span class="text-xs text-slate-400 font-normal"> / 100</span></p>
</div>
<div class="bg-white p-4 rounded-2xl border border-slate-100 shadow-sm">
<p class="text-[10px] text-slate-400 font-bold uppercase">待审 PD</p>
<p class="text-xl font-bold text-amber-500 mt-1">3</p>
</div>
</div>
</div>
</div>
<!-- 底部导航 (小程序 TabBar) -->
<div class="h-16 border-t border-slate-100 bg-white flex items-center justify-around safe-area-bottom">
<div class="flex flex-col items-center text-blue-600">
<i class="fa-solid fa-house text-sm"></i>
<span class="text-[10px] mt-1">首页</span>
</div>
<div class="flex flex-col items-center text-slate-400">
<i class="fa-solid fa-chart-pie text-sm"></i>
<span class="text-[10px] mt-1">报表中心</span>
</div>
<div class="flex flex-col items-center text-slate-400">
<i class="fa-solid fa-robot text-sm"></i>
<span class="text-[10px] mt-1">AI 咨询</span>
</div>
<div class="flex flex-col items-center text-slate-400">
<i class="fa-solid fa-user text-sm"></i>
<span class="text-[10px] mt-1">我的</span>
</div>
</div>
</div>
<!-- 成功/反馈轻提示 -->
<div id="toast" class="fixed bottom-24 left-1/2 -translate-x-1/2 bg-slate-800/90 text-white px-6 py-3 rounded-full text-xs font-bold transform translate-y-20 opacity-0 transition-all z-[100]">
已批准REDcap 质疑已自动生成
</div>
</div>
<script>
function openApplet() {
document.getElementById('scene-notification').classList.add('hidden');
document.getElementById('scene-applet').classList.remove('hidden');
}
function closeApplet() {
document.getElementById('scene-notification').classList.remove('hidden');
document.getElementById('scene-applet').classList.add('hidden');
}
function approveAction() {
const toast = document.getElementById('toast');
toast.innerText = "✅ 影子决策已转正REDcap 质疑已生成";
toast.classList.remove('translate-y-20', 'opacity-0');
setTimeout(() => {
toast.classList.add('translate-y-20', 'opacity-0');
}, 2000);
}
function rejectAction() {
const toast = document.getElementById('toast');
toast.innerText = "已记录意见,待 CRC 进一步核实";
toast.classList.remove('translate-y-20', 'opacity-0');
setTimeout(() => {
toast.classList.add('translate-y-20', 'opacity-0');
}, 2000);
}
</script>
</body>
</html>