Files
HIS/患者列表处理/人工复核网页端/templates/index.html

383 lines
19 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">
<title>患者目录图片集群人工复核及抽查</title>
<link rel="stylesheet" href="/static/app.css">
</head>
<body>
<header class="topbar">
<div class="top-title">
<div class="eyebrow">HIS LIST REVIEW</div>
<h1>患者目录图片集群人工复核及抽查</h1>
</div>
<span id="saveState" class="save-state"></span>
<div class="top-actions">
<nav class="top-nav">
<button class="nav-button active" type="button" data-view="overview">概览</button>
<button class="nav-button" type="button" data-view="review">复核</button>
<button class="nav-button" type="button" data-view="audit">抽查</button>
<button class="nav-button" type="button" data-view="auditHistory">抽查一览</button>
<button class="nav-button" type="button" data-view="settings">设置</button>
</nav>
<span id="pgState" class="pg-state"></span>
<button id="pgTestButton" class="ghost-button" type="button">测试PG</button>
<button id="pgSyncButton" class="ghost-button" type="button">提交待同步</button>
<form method="post" action="/logout">
<button class="ghost-button" type="submit">退出</button>
</form>
</div>
</header>
<main id="overviewView" class="page-view overview-view">
<section class="overview-grid" id="overviewGrid"></section>
<section class="overview-panel">
<h2>复核工作台</h2>
<div id="overviewBatches" class="batch-grid"></div>
</section>
<section class="overview-panel">
<h2>抽查一览工作台</h2>
<div id="overviewAudit" class="batch-grid"></div>
</section>
</main>
<main id="reviewView" class="workspace page-view hidden">
<aside class="queue-panel" id="queuePanel" tabindex="0">
<section class="stats-grid" id="statsGrid"></section>
<div class="filters">
<label class="inline-field review-filter-field">
<span class="field-prefix">数据源:</span>
<select id="batchFilter"></select>
</label>
<input type="hidden" id="statusFilter" value="pending">
<div class="review-status-row">
<div class="inline-field review-filter-field">
<span class="field-prefix">状态:</span>
<div id="statusSegment" class="status-segment" aria-label="复核状态">
<button type="button" class="status-pill active" data-status="pending">待处理</button>
</div>
</div>
<label class="inline-field review-filter-field">
<span class="field-prefix">其他:</span>
<select id="moreStatusFilter" aria-label="其他复核状态">
<option value="">其他状态</option>
<option value="confirming">待确认</option>
<option value="done">人工复核通过</option>
<option value="all">全部</option>
</select>
</label>
</div>
<label class="inline-field review-filter-field">
<span class="field-prefix">排序:</span>
<select id="sortFilter">
<option value="source">默认顺序</option>
<option value="updated_desc">最近修订优先</option>
</select>
</label>
<label class="inline-field review-filter-field">
<span class="field-prefix">搜索:</span>
<input id="searchInput" placeholder="姓名/住院号/科室">
</label>
<div class="ai-action-panel review-ai-panel">
<div class="ai-action-title"><span class="ai-badge">AI</span><span>辅助修改</span></div>
<div class="ai-action-buttons">
<button type="button" id="kimiCurrentButton" class="secondary-button ai-button">修改当前项</button>
<button type="button" id="kimiFiveButton" class="secondary-button ai-button">修改下5项</button>
<button type="button" id="kimiRemainingButton" class="secondary-button ai-button">修改下所有项</button>
</div>
</div>
</div>
<div id="queueList" class="queue-list"></div>
</aside>
<section class="image-panel">
<div class="index-note">核对与同步都以住院号作为唯一定位依据,姓名和科室只作辅助参考</div>
<div class="record-strip">
<div>
<div id="recordTitle" class="record-title">未选择记录</div>
<div id="recordMeta" class="record-meta"></div>
</div>
<a id="fullImageLink" class="ghost-button" target="_blank" rel="noreferrer">原图</a>
</div>
<div class="crop-frame" id="cropFrame">
<img id="cropImage" alt="裁剪截图" draggable="false">
</div>
<div class="zoom-actions">
<button id="zoomOutButton" class="ghost-button" type="button">缩小</button>
<button id="zoomResetButton" class="ghost-button" type="button">恢复尺寸</button>
<button id="zoomInButton" class="ghost-button" type="button">放大</button>
<span id="zoomLabel" class="queue-meta">100%</span>
</div>
<div id="tipsBox" class="tips-box"></div>
</section>
<section class="edit-panel">
<form id="editForm" class="edit-form">
<div class="form-grid">
<label>姓名<input name="姓名"></label>
<label>性别<input name="性别"></label>
<label>年龄<input name="年龄"></label>
<label>住院号<input name="住院号"></label>
</div>
<label>诊断<textarea name="诊断" rows="4"></textarea></label>
<div class="form-grid">
<label>入院时间<input name="入院时间"></label>
<label>最后书写时间<input name="最后书写时间"></label>
<label>住院天数<input name="住院天数"></label>
<label>出院时间<input name="出院时间"></label>
</div>
<label>手术后天数(格式为 空 或 后X天<input name="手术后天数"></label>
<div id="reviewChangeLog" class="change-log review-change-log"></div>
<label>复核备注<textarea id="manualNote" rows="3"></textarea></label>
<div class="button-row review-actions">
<button type="submit" class="primary-button">保存确认</button>
<button type="button" id="resetButton" class="secondary-button">还原 OCR</button>
<button type="button" id="deleteButton" class="danger-button">删除修订</button>
</div>
</form>
</section>
</main>
<main id="auditView" class="page-view hidden audit-view">
<section class="audit-toolbar">
<label class="inline-field">
<span class="field-prefix">数据源:</span>
<select id="auditSource">
<option value="manual_review_passed">已处理-人工复核通过项</option>
<option value="db_auto_passed">数据库-自动复核通过</option>
</select>
</label>
<label class="inline-field">
<span class="field-prefix">数量:</span>
<input id="auditCount" type="number" min="1" max="20" value="5">
</label>
<button id="auditSampleButton" class="primary-button" type="button">随机抽取</button>
<div class="ai-action-panel audit-ai-panel">
<div class="ai-action-title"><span class="ai-badge">AI</span><span>智能抽查</span></div>
<div class="ai-action-buttons">
<button id="auditKimiButton" class="secondary-button ai-button" type="button">AI抽查当前项</button>
<button id="auditKimiAllButton" class="secondary-button ai-button" type="button">AI抽查所有项</button>
</div>
</div>
<span id="auditState" class="save-state"></span>
</section>
<section class="audit-layout">
<div id="auditList" class="queue-list"></div>
<div class="audit-detail">
<div class="record-strip">
<div>
<div id="auditTitle" class="record-title">未选择抽查记录</div>
<div id="auditMeta" class="record-meta"></div>
</div>
<a id="auditFullImageLink" class="ghost-button" target="_blank" rel="noreferrer">原图</a>
</div>
<div class="crop-frame audit-frame" id="auditFrame">
<div class="audit-image-stage">
<img id="auditImage" alt="抽查截图" draggable="false">
</div>
</div>
<div class="zoom-actions">
<button id="auditZoomOutButton" class="ghost-button" type="button">缩小</button>
<button id="auditZoomResetButton" class="ghost-button" type="button">恢复尺寸</button>
<button id="auditZoomInButton" class="ghost-button" type="button">放大</button>
<span id="auditZoomLabel" class="queue-meta">100%</span>
</div>
<section class="model-label ai-result-section">
<span>AI结论与建议</span>
<div id="auditModelResult" class="model-result"></div>
</section>
<details id="auditPromptDetails" class="ai-full-output ai-prompt-output">
<summary>询问提示词</summary>
<pre id="auditPromptText"></pre>
</details>
<details id="auditRawOutputDetails" class="ai-full-output">
<summary>AI完整输出</summary>
<pre id="auditRawOutput"></pre>
</details>
<textarea id="auditPrompt" class="hidden" readonly></textarea>
</div>
<aside class="audit-side">
<h2>患者信息修订</h2>
<div id="auditPatientInfo" class="audit-edit-grid"></div>
<div id="auditTipsBox" class="tips-box"></div>
<div id="auditChangeLog" class="change-log"></div>
<input id="auditMachineVerdict" type="hidden" value="">
<div class="audit-verdict-grid">
<span>AI核验判断</span>
<strong id="auditMachineVerdictText">未判断</strong>
<span>人工核验判断</span>
<strong id="auditManualVerdictText">未选择</strong>
</div>
<label>人工反馈<textarea id="auditManualFeedback" rows="4"></textarea></label>
<div class="settings-label">人工核验判断</div>
<div class="button-row">
<button id="auditPassButton" class="primary-button" type="button">人工核验通过</button>
<button id="auditFailButton" class="danger-button" type="button">人工核验异常</button>
<button id="auditUnsureButton" class="secondary-button" type="button">暂不确定</button>
</div>
</aside>
</section>
</main>
<main id="auditHistoryView" class="page-view hidden audit-view audit-history-view">
<section class="audit-toolbar audit-history-toolbar">
<button id="auditHistoryRefreshButton" class="primary-button" type="button">刷新抽查记录</button>
<span id="auditHistoryState" class="save-state"></span>
</section>
<section class="audit-layout audit-history-layout">
<aside class="audit-history-left">
<div class="audit-history-filters">
<label class="inline-field">
<span class="field-prefix">数据源:</span>
<select id="auditHistorySourceFilter">
<option value="">全部抽查源</option>
<option value="manual_review_passed">已处理-人工复核通过项</option>
<option value="db_auto_passed">数据库-自动复核通过</option>
</select>
</label>
<label class="inline-field">
<span class="field-prefix">状态:</span>
<select id="auditHistoryStatusFilter">
<option value="">全部状态</option>
<option value="manual_pending">未人工核验</option>
<option value="manual_passed">人工核验通过</option>
<option value="manual_failed">人工核验异常</option>
<option value="manual_unsure">暂不确定</option>
<option value="ai_failed">AI核验异常</option>
</select>
</label>
<label class="inline-field">
<span class="field-prefix">排序:</span>
<select id="auditHistorySortFilter">
<option value="checked_desc">最近抽查优先</option>
<option value="checked_asc">最早抽查优先</option>
</select>
</label>
<label class="inline-field">
<span class="field-prefix">搜索:</span>
<input id="auditHistorySearchInput" placeholder="姓名/住院号/科室">
</label>
</div>
<div id="auditHistoryList" class="queue-list"></div>
</aside>
<div class="audit-detail">
<div class="record-strip">
<div>
<div id="auditHistoryTitle" class="record-title">未选择抽查记录</div>
<div id="auditHistoryMeta" class="record-meta"></div>
</div>
<a id="auditHistoryFullImageLink" class="ghost-button" target="_blank" rel="noreferrer">原图</a>
</div>
<div class="crop-frame audit-frame" id="auditHistoryFrame">
<div class="audit-image-stage">
<img id="auditHistoryImage" alt="抽查截图" draggable="false">
</div>
</div>
<div class="zoom-actions">
<button id="auditHistoryZoomOutButton" class="ghost-button" type="button">缩小</button>
<button id="auditHistoryZoomResetButton" class="ghost-button" type="button">恢复尺寸</button>
<button id="auditHistoryZoomInButton" class="ghost-button" type="button">放大</button>
<span id="auditHistoryZoomLabel" class="queue-meta">100%</span>
</div>
<section class="model-label">
<span>AI结论与建议</span>
<div id="auditHistoryAiResult" class="model-result"></div>
</section>
<details class="ai-full-output">
<summary>AI完整输出</summary>
<pre id="auditHistoryRawOutput"></pre>
</details>
</div>
<aside class="audit-side">
<h2>最终审核</h2>
<div id="auditHistoryPatientInfo" class="audit-edit-grid"></div>
<div id="auditHistoryTipsBox" class="tips-box"></div>
<div id="auditHistoryChangeLog" class="change-log"></div>
<div class="audit-verdict-grid">
<span>AI核验判断</span>
<strong id="auditHistoryAiVerdict"></strong>
<span>人工核验判断</span>
<strong id="auditHistoryManualVerdict"></strong>
<span>抽查源</span>
<strong id="auditHistorySource"></strong>
<span>操作人</span>
<strong id="auditHistoryUser"></strong>
<span>抽查时间</span>
<strong id="auditHistoryCheckedAt"></strong>
</div>
<div class="settings-label">最终人工核验判断</div>
<div class="button-row">
<button id="auditHistoryPassButton" class="primary-button" type="button">人工核验通过</button>
<button id="auditHistoryFailButton" class="danger-button" type="button">人工核验异常</button>
<button id="auditHistoryUnsureButton" class="secondary-button" type="button">暂不确定</button>
</div>
</aside>
</section>
</main>
<main id="settingsView" class="page-view hidden settings-view">
<section class="settings-layout">
<section class="settings-panel user-admin-panel">
<div class="settings-heading">
<h2>用户与权限</h2>
<span id="settingsUserCount" class="badge">0 个用户</span>
</div>
<form id="userForm" class="new-user-form">
<div class="settings-form-grid">
<label>新用户名<input id="newUsername" autocomplete="off"></label>
<label>密码<input id="newPassword" type="password" autocomplete="new-password"></label>
</div>
<div>
<div class="settings-label">页面权限</div>
<div id="newUserPermissions" class="permission-grid"></div>
</div>
<button class="primary-button" type="submit">新建用户</button>
</form>
<div id="userList" class="settings-list"></div>
</section>
<aside class="settings-side">
<form id="kimiForm" class="settings-panel">
<div class="settings-heading">
<h2>抽查大模型 API</h2>
<button id="kimiToggleButton" class="secondary-button compact-button" type="button">关闭API</button>
</div>
<label>Kimi API Key<input id="kimiApiKey" type="password" autocomplete="off"></label>
<label>模型<input id="kimiModel" value="kimi-k2.6"></label>
<button class="primary-button" type="submit">保存 Kimi 设置</button>
<div id="settingsState" class="save-state"></div>
</form>
<section class="settings-panel">
<div class="settings-heading">
<h2>处理项寻找</h2>
</div>
<p class="settings-note">进入系统时会自动扫描一次,查找复核、抽查和同步里仍需处理的数据。</p>
<div id="processingFinderGrid" class="finder-grid"></div>
<button id="processingFindButton" class="secondary-button" type="button">重新寻找处理项</button>
<div id="processingFinderState" class="save-state"></div>
</section>
<section class="settings-panel">
<div class="settings-heading">
<h2>数据提交</h2>
</div>
<p class="settings-note">将已人工复核通过的修订写入合并结果文件,重试同步数据库,并把这些条目归档隐藏。</p>
<button id="commitManualPassedButton" class="primary-button" type="button">提交已人工通过数据</button>
<div id="commitManualPassedState" class="save-state"></div>
</section>
<section class="settings-panel">
<div class="settings-heading">
<h2>抽查记录管理</h2>
</div>
<p class="settings-note">清空数据库中的抽查一览结果,不影响患者基础信息和复核修订。</p>
<button id="resetAuditHistoryButton" class="danger-button" type="button">重置抽查一览</button>
<div id="resetAuditHistoryState" class="save-state"></div>
</section>
</aside>
</section>
</main>
<script src="/static/app.js"></script>
</body>
</html>