编辑页面

修改后将从当前时间重新计算过期时间

目录项配置

目录编号 目录名称 页数要求 验证规则 操作
CAT001 患者基本信息
CAT002 诊断记录

高级选项

自动执行验证
任务创建后自动开始验证流程
自动盖章
验证通过后自动进行盖章
失败自动重试
验证失败时自动重试3次
`; } function renderTaskList() { return `
${mockData.recentTasks.map(task => ` `).join('')}
任务编号 任务名称 类型 状态 进度 文档数 创建时间 操作
${task.id} ${task.name} ${getTaskTypeText(task.id)} ${getStatusText(task.status)}
${task.progress}%
${task.documents} ${task.id.substring(4,8)}-${task.id.substring(8,10)}-${task.id.substring(10,12)}
`; } function renderTaskExecute() { return `

当前执行: EOMR20260507002

住院患者EOMR整理

21
验证成功
3
验证失败
8
待处理
总进度 67%
验证成功 (21)
验证失败 (3)
待处理 (8)

执行详情

${mockData.documents.map(doc => ` `).join('')}
文档名称 状态 验证规则 耗时 操作
${doc.name} ${getDocStatusText(doc.status)} ${doc.status === 'failed' ? '编号匹配' : '文本提取'} ${Math.floor(Math.random() * 5 + 1)}s
${doc.status === 'failed' ? ` ` : ''}

执行日志

${[1,2,3,4,5].map(i => `
15:${10 - i}:${String(Math.floor(Math.random()*60)).padStart(2,'0')} 成功 验证文档 ${i}.pdf
`).join('')}
`; } function renderVerification() { return `
${[1,2,3,4].map(i => `
${['编号匹配验证', '文本提取验证', '完整性校验', '清单生成验证'][i-1]} ${i % 2 === 0 ? '启用' : '编辑中'}
${85 + i * 3}%

${['验证患者编号与文档编号一致性', '从文档中提取关键信息进行比对', '检查文档完整性和页数要求', '生成清单并与预期对比'][i-1]}

验证次数 ${120 + i * 30}次
成功率 ${85 + i * 2}%
最后执行 ${i}小时前
`).join('')}

验证阈值设置

85%
低于此值的验证结果将被标记为失败
允许的实际页数与要求页数偏差
`; } function renderPreview() { return `
3 / 12 页
100%

PDF 预览区域

患者登记卡.pdf - 第3页

文档列表 (6)
${mockData.documents.map((doc, i) => `
${doc.name}
${doc.pages}页 | ${doc.size}
${getDocStatusText(doc.status)}
`).join('')}

标注工具

`; } function renderMerge() { return `

合并页面排序

${mockData.documents.flatMap((doc, docIdx) => Array.from({length: doc.pages}, (_, pageIdx) => `
${docIdx * doc.pages + pageIdx + 1} ${doc.name} P${pageIdx + 1}
`) ).join('')}

合并设置

添加封面
自动生成合并文档封面
添加目录页
自动生成页码目录

页码设置

自动页码
页脚显示页码
`; } function renderReport() { return `
EOMR文档校验报告
报告编号: RPT20260507001 | 生成时间: 2026-05-07 15:30
一、基本信息
32
总文档数
29
验证通过
3
验证失败
二、完整性校验
检查项 结果 详情
页数完整性 通过 所有文档页数符合要求
目录项完整性 通过 6/6 目录项完整
文件格式 通过 全部为PDF格式
三、匹配度校验
文档编号 文档名称 匹配度 状态
DOC001 患者登记卡.pdf 98% 通过
DOC002 血液检验报告.pdf 95% 通过
DOC003 CT影像报告.pdf 87% 通过
DOC004 出院小结.pdf 62% 失败
四、盖章情况
28
已盖章文档
4
待盖章文档
五、问题汇总

发现 3 处问题

  • 出院小结.pdf - 编号不匹配 (期望: EOMR-2026-0507-001, 实际: EOMR-2026-0506-001)
  • 手术记录.pdf - 页数不足 (期望: 5页, 实际: 3页)
  • 处方明细.pdf - 缺少签字页

智能EOMR汇编系统 | 校验时间: 2026-05-07 15:30:00 | 校验人员: 张明

报告设置

包含封面
包含明细
电子签章

快速操作

`; } function renderStamp() { return `

检测完成

文档已正确盖章

文档名称
手术记录.pdf
文档页数
8 页
检测结果
已盖章 (8/8)
盖章位置
右下角 (7处)

盖章检测结果

${[1,2,3,4,5,6,7,8].map(page => ` `).join('')}
页码 盖章状态 位置 操作
第 ${page} 页 ${page <= 7 ? '已盖章' : '未盖章'} ${page <= 7 ? '右下角' : '-'}

无章标记管理

注意

当前有 1 个文档标记为无章待处理

文档 页码 原因 操作
处方明细.pdf 第8页 缺少盖章

批量盖章设置

80%
`; } function renderUserList() { return `
${mockData.users.map(user => ` `).join('')}
用户 用户名 角色 状态 最后登录 操作
${user.name}
${user.username} ${getRoleText(user.role)}
${user.status === 'online' ? '在线' : '离线'}
${user.lastLogin}
`; } function renderRoleConfig() { return `
角色名称 角色代码 描述 用户数 权限 操作
系统管理员 admin 拥有系统全部权限 2
操作员 operator 负责日常任务执行操作 3
审核员 reviewer 负责验证结果审核 2
`; } function renderOperationLog() { return `
${mockData.logs.map(log => ` `).join('')}
时间 操作人 操作类型 操作对象 IP地址 详情
${log.time} ${log.user} ${log.action} ${log.target} 192.168.1.${Math.floor(Math.random()*100)+1}
`; } function renderSysConfig() { return `
连接设置
同步设置
自动同步
开启后自动同步文档数据
同步间隔
数据同步的时间间隔
增量同步
仅同步新增或修改的数据
性能优化
API端点
端点 方法 状态
/api/v1/documents GET, POST 正常
/api/v1/verify POST 正常
/api/v1/stamp POST 正常
`; } function renderAiConfig() { return `
模型选择
API设置
验证规则模板
规则名称 提示词模板 启用
编号匹配验证 请验证文档中的编号是否与预期一致...
文本提取验证 请从文档中提取关键信息并验证...
完整性检查 请检查文档的完整性和一致性...
`; } function renderStorageConfig() { return `
本地存储
已使用: 256 GB 51%
云存储
启用云备份
自动上传文档到云存储
`; } function renderBackup() { return `

自动备份设置

启用自动备份
按设定周期自动备份数据

备份历史

备份时间 备份类型 文件大小 状态 操作
2026-05-07 02:00:00 自动备份 2.4 GB 成功
2026-05-06 02:00:00 自动备份 2.3 GB 成功
2026-05-05 15:30:00 手动备份 2.1 GB 成功
`; } function renderNotification() { return `
${mockData.notifications.map(notif => `
${notif.title}
${notif.message}
${notif.time}
${notif.read ? '' : ``}
`).join('')}
${mockData.notifications.filter(n => n.type === 'task').map(notif => `
${notif.title}
${notif.message}
${notif.time}
`).join('')}
${mockData.notifications.filter(n => n.type !== 'task').map(notif => `
${notif.title}
${notif.message}
${notif.time}
`).join('')}
`; } // ===== Helper Functions ===== function getStatusText(status) { const statusMap = { 'pending': '待处理', 'processing': '执行中', 'completed': '已完成', 'failed': '失败' }; return statusMap[status] || status; } function getDocStatusText(status) { const statusMap = { 'pending': '待验证', 'verified': '已验证', 'failed': '失败', 'stamped': '已盖章' }; return statusMap[status] || status; } function getCatalogTypeText(type) { const typeMap = { 'patient_info': '患者信息', 'diagnosis': '诊断记录', 'lab_report': '检验报告', 'imaging': '影像资料', 'surgery': '手术记录', 'orders': '医嘱记录' }; return typeMap[type] || type; } function getTaskTypeText(taskId) { if (taskId.includes('0507')) return '住院档案'; if (taskId.includes('0506')) return '门诊处方'; if (taskId.includes('0505')) return '检验报告'; return '其他'; } function getRoleText(role) { const roleMap = { 'admin': '管理员', 'operator': '操作员', 'reviewer': '审核员' }; return roleMap[role] || role; } function getNotificationIcon(type) { const iconMap = { 'task': 'fa-tasks', 'error': 'fa-exclamation-circle', 'success': 'fa-check-circle', 'info': 'fa-info-circle' }; return iconMap[type] || 'fa-bell'; } // ===== Modal Functions ===== function showModal(title, content) { document.getElementById('modalTitle').textContent = title; document.getElementById('modalBody').innerHTML = content; document.getElementById('commonModal').classList.add('show'); } function closeModal() { document.getElementById('commonModal').classList.remove('show'); } function confirmModal() { showToast('操作成功!', 'success'); closeModal(); } // ===== Toast Functions ===== function showToast(message, type = 'info') { const container = document.getElementById('toastContainer'); const toast = document.createElement('div'); toast.className = `toast ${type}`; const iconMap = { 'success': 'fa-check-circle', 'error': 'fa-times-circle', 'warning': 'fa-exclamation-circle', 'info': 'fa-info-circle' }; toast.innerHTML = ` ${message} `; container.appendChild(toast); setTimeout(() => { toast.style.opacity = '0'; setTimeout(() => toast.remove(), 300); }, 3000); } // ===== Action Functions ===== function toggleSidebar() { document.getElementById('sidebar').classList.toggle('open'); } function toggleUserMenu() { showToast('用户菜单', 'info'); } function showSearch() { showToast('搜索功能', 'info'); } function showNotifications() { navigateTo('notification'); } function toggleFullscreen() { if (!document.fullscreenElement) { document.documentElement.requestFullscreen(); } else { document.exitFullscreen(); } } function switchTab(tab, contentId) { const parent = tab.parentElement; parent.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); tab.classList.add('active'); const container = parent.nextElementSibling; while (container && !container.classList.contains('card-body')) { container = container.nextElementSibling; } if (container) { container.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active')); const targetContent = container.parentElement.querySelector(`#${contentId}`); if (targetContent) targetContent.classList.add('active'); } } function attachTableActions() { // Re-attach table action tooltips document.querySelectorAll('[data-tooltip]').forEach(el => { el.style.cursor = 'pointer'; }); } // Placeholder action functions function refreshDashboard() { showToast('数据已刷新', 'success'); } function viewTask(id) { showToast(`查看任务 ${id}`, 'info'); } function retryTask(id) { showToast(`重试任务 ${id}`, 'info'); } function editCatalog(id) { showModal('编辑目录', '

编辑目录表单

'); } function viewCatalog(id) { showToast(`查看目录 ${id}`, 'info'); } function deleteCatalog(id) { showToast(`删除目录 ${id}`, 'warning'); } function exportCatalog() { showToast('导出目录', 'info'); } function importTemplate() { showToast('导入模板', 'info'); } function editTemplate(id) { showToast(`编辑模板 ${id}`, 'info'); } function useTemplate(id) { showToast(`使用模板 ${id}`, 'success'); } function exportData(format) { showToast(`导出 ${format.toUpperCase()} 文件`, 'success'); } function createTask() { showToast('任务创建成功!', 'success'); navigateTo('task-list'); } function saveAsDraft() { showToast('草稿已保存', 'success'); } function executeTask(id) { navigateTo('task-execute'); } function copyTask(id) { showToast(`复制任务 ${id}`, 'info'); } function deleteTask(id) { showToast(`删除任务 ${id}`, 'warning'); } function refreshExecution() { showToast('刷新执行状态', 'success'); } function pauseExecution() { showToast('已暂停执行', 'info'); } function resumeExecution() { showToast('继续执行', 'success'); } function stopExecution() { showToast('已停止执行', 'warning'); } function retryFailed() { showToast('重试失败项', 'info'); } function viewDoc(id) { navigateTo('preview'); } function retryDoc(id) { showToast(`重试文档 ${id}`, 'info'); } function editRule(id) { showModal('编辑验证规则', '

验证规则表单

'); } function testRule(id) { showToast(`测试规则 ${id}`, 'info'); } function deleteRule(id) { showToast(`删除规则 ${id}`, 'warning'); } function saveThresholds() { showToast('阈值已保存', 'success'); } function zoomIn() { showToast('放大', 'info'); } function zoomOut() { showToast('缩小', 'info'); } function downloadFile() { showToast('下载文件', 'info'); } function printFile() { showToast('打印文件', 'info'); } function showMergePreview() { showToast('预览合并结果', 'info'); } function exportMerged() { showToast('导出合并文件', 'success'); } function resetMerge() { showToast('重置排序', 'info'); } function applyMerge() { showToast('应用合并', 'success'); } function printReport() { showToast('打印报告', 'info'); } function exportReport(format) { showToast(`导出 ${format.toUpperCase()}`, 'success'); } function generateReport() { showToast('重新生成报告', 'success'); } function sendReport() { showToast('发送报告', 'info'); } function archiveReport() { showToast('归档报告', 'info'); } function uploadStampFile() { showToast('上传盖章文件', 'info'); } function markStamp(page) { showToast(`标记页面 ${page}`, 'info'); } function clearNoStamp() { showToast('清除无章标记', 'warning'); } function addStamp(page) { showToast(`添加盖章到页面 ${page}`, 'success'); } function batchStamp() { showToast('批量盖章', 'success'); } function editUser(id) { showModal('编辑用户', '

用户编辑表单

'); } function viewUserLog(id) { showToast(`查看用户 ${id} 日志`, 'info'); } function deleteUser(id) { showToast(`删除用户 ${id}`, 'warning'); } function editPermissions(role) { showModal(`${getRoleText(role)} 权限配置`, '

权限配置表单

'); } function editRole(role) { showModal('编辑角色', '

角色编辑表单

'); } function exportLogs() { showToast('导出日志', 'info'); } function viewLogDetail() { showToast('查看日志详情', 'info'); } function saveConfig() { showToast('配置已保存', 'success'); } function resetConfig() { showToast('配置已重置', 'info'); } function testAiConfig() { showToast('测试AI连接', 'info'); } function saveAiConfig() { showToast('AI配置已保存', 'success'); } function testStorage() { showToast('测试存储连接', 'info'); } function saveStorageConfig() { showToast('存储配置已保存', 'success'); } function createBackup() { showToast('创建备份', 'info'); } function restoreBackup() { showToast('恢复备份', 'info'); } function downloadBackup() { showToast('下载备份', 'info'); } function deleteBackup() { showToast('删除备份', 'warning'); } function markAllRead() { showToast('全部已读', 'success'); } function markRead(id) { showToast(`标记 ${id} 已读`, 'success'); } function deleteNotif(id) { showToast(`删除通知 ${id}`, 'warning'); } // Form renderers for modal function renderCatalogForm() { return `
必填项
`; } function renderTemplateForm() { return `
`; } function renderCatalogItemForm() { return `
`; } function renderVerificationRuleForm() { return `
`; } function renderUserForm() { return `
`; } function renderRoleForm() { return `
`; } function removeCatalogItem(btn) { btn.closest('tr').remove(); } // ===== Initialize ===== document.addEventListener('DOMContentLoaded', function() { setupNavigation(); // Demo login - auto login for prototype // In production, this would be removed document.getElementById('loginPage').style.display = 'none'; document.getElementById('mainApp').style.display = 'flex'; loadPage('dashboard'); });

📋 已保存模板

夏季运动系列
产品:女士运动上衣、运动短裤 | 客群:25-35岁美国女性
美妆新品推广
产品:护肤套装 | 客群:18-30岁 | 价格:$50-$100
轻奢包包
产品:女士手提包 | 客群:25-40岁 | 价格:$100-$300

AI推荐结果

🤖
点击"开始AI筛选"获取推荐结果
💡 提示:使用AI优化可以根据KOL风格自动调整邮件内容

📁 邮件模板库

新品合作邀请
适用于首次建联
跟进邮件
适用于未回复跟进
节日问候
适用于节日维护
已发送
2,456
已打开
1,287
52.4% 打开率
已回复
456
18.6% 回复率
待回复
831
67.4% 待回复

邮件追踪详情

全部
已发送
已打开
已回复
收件人 主题 发送时间 状态 打开次数 操作
@style_savvy Summer Collection Collaboration 2024-01-15 10:30 已打开 3次 查看详情
@makeup_master Beauty Product Partnership 2024-01-15 09:15 已回复 5次 查看详情
@fitness_freak Fitness Gear Collaboration 2024-01-14 16:45 已发送 0次 查看详情
@travel_tales Travel Content Partnership 2024-01-14 14:20 已打开 2次 查看详情
@luxe_living Luxury Brand Collaboration 2024-01-13 11:00 待发送 - 查看详情

⏰ AI自动跟进提醒

系统将在指定天数后自动提醒您跟进未回复的邮件

📋 待跟进列表

@fashion_blogger - 夏季新品合作邀请
发送时间:2024-01-12 | 已等待 5 天
@lifestyle_creator - 产品测评邀约
发送时间:2024-01-10 | 已等待 7 天
@beauty_insider - 节日合作机会
发送时间:2024-01-08 | 已等待 9 天

📝 跟进话术模板

温馨提醒
友好提醒之前的邮件
价值强调
强调合作价值
限时优惠
提供限时优惠激励

CRM客户管理

全部
待联系
已发送
已回复
谈判中
合作确认
KOL 平台 粉丝数 互动率 当前状态 最近联系 操作
S
@style_savvy
Instagram 58.6万 4.8% 谈判中 2024-01-15 详情 跟进
M
@makeup_master
TikTok 120万 6.2% 合作确认 2024-01-14 详情 跟进
F
@fitness_freak
YouTube 89万 5.1% 已回复 2024-01-14 详情 跟进
T
@travel_tales
Instagram 45万 3.9% 已发送 2024-01-13 详情 跟进
L
@luxe_living
Instagram 78万 4.5% 待联系 2024-01-12 详情 跟进
发送总量
2,456
↑ 15% 较上月
打开率
52.4%
↑ 3.2% 较上月
回复率
18.6%
↑ 1.8% 较上月
转化率
3.2%
↓ 0.5% 较上月

📊 转化漏斗

发送量 2,456
打开 1,287 (52.4%)
回复 456 (18.6%)
谈判 186 (7.6%)
合作 79 (3.2%)

📈 各平台表现

Instagram 回复率 22.3%
TikTok 回复率 18.1%
YouTube 回复率 15.6%

🏆 KOL排行榜

排名 KOL 回复率 转化率
1 @makeup_master 32.5% 8.2%
2 @skincare_sensei 28.6% 7.1%
3 @style_savvy 25.2% 6.5%

💡 AI策略建议

📊 分析结论
Instagram平台表现最佳,回复率达22.3%,高于其他平台。建议增加Instagram渠道投入。
🎯 优化建议
美妆类KOL转化效果最好,建议重点拓展该垂类KOL资源。
⏰ 时机建议
数据显示周二、周四发送邮件打开率最高,建议集中在这两天发送。

🤝 合作管理

KOL 合作内容 合作形式 时间段 状态 操作
@makeup_master 新品测评推广 佣金分成 2024.01.20 - 2024.02.20 进行中 查看详情
@style_savvy 春季穿搭系列 买断制 2024.02.01 - 2024.03.01 待开始 查看详情
@fitness_freak 运动装备测评 免费寄样 2023.12.01 - 2023.12.31 已完成 查看详情

📅 即将到期

@makeup_master 合作
2024-02-20 到期

🎉 节日维护

情人节维护
2024-02-14

📞 长期未互动

@travel_tales
已超过30天未联系

📦 寄样物流追踪

实时追踪样品寄送状态,确保合作顺利执行

物流记录

快递单号 KOL 产品 物流商 状态 预计到达 操作
FX1234567890 @makeup_master 护肤套装 x2 FedEx 运输中 2024-01-18 查看详情
UPS9876543210 @style_savvy 夏季连衣裙 x1 UPS 已签收 2024-01-15 查看详情
DHL5678901234 @fitness_freak 运动套装 x3 DHL 已完成 2024-01-10 查看详情

📍 物流详情 - @style_savvy

2024-01-15 14:30
📦 已签收 - 收件人已签收
2024-01-14 09:15
🚚 派送中 - 正在为您派送
2024-01-13 18:22
✈️ 到达目的地 - 快件已到达目的地
2024-01-12 06:45
🌍 清关中 - 正在进行清关处理
2024-01-11 22:30
🛫 已发货 - 航班已起飞
2024-01-11 16:00
📤 已揽收 - 包裹已揽收

📋 寄样信息

快递单号
UPS9876543210
物流商
UPS
KOL
@style_savvy
产品
夏季连衣裙 x1
货值
$89.00
运费
$45.00
取消
访问码: tzii8du6