Python/普康健康自动化录入/template.html

602 lines
20 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>赔案档案</title>
<style>
:root {
--arcoblue-1: #e8f3ff;
--arcoblue-2: #bedaff;
--arcoblue-3: #94bfff;
--arcoblue-4: #6aa1ff;
--arcoblue-5: #4080ff;
--arcoblue-6: #165dff;
--arcoblue-7: #0e42d2;
--arcoblue-8: #072ca6;
--arcoblue-9: #031a79;
--arcoblue-10: #000d4d;
--green-1: #e8ffea;
--green-2: #aff0b5;
--green-3: #7be188;
--green-4: #4cd263;
--green-5: #23c343;
--green-6: #00b42a;
--green-7: #009a29;
--green-8: #008026;
--green-9: #006622;
--green-10: #004d1c;
--red-1: #ffece8;
--red-2: #fdcdc5;
--red-3: #fbaca3;
--red-4: #f98981;
--red-5: #f76560;
--red-6: #f53f3f;
--red-7: #cb272d;
--red-8: #a1151e;
--red-9: #770611;
--red-10: #4d000a;
--orange-1: #fff7e8;
--orange-2: #ffe4ba;
--orange-3: #ffcf8b;
--orange-4: #ffb65d;
--orange-5: #ff9a2e;
--orange-6: #ff7d00;
--orange-7: #d25f00;
--orange-8: #a64500;
--orange-9: #792e00;
--orange-10: #4d1b00;
--gray-1: #f7f8fa;
--gray-2: #f2f3f5;
--gray-3: #e5e6eb;
--gray-4: #c9cdd4;
--gray-5: #a9aeb8;
--gray-6: #86909c;
--gray-7: #6b7785;
--gray-8: #4e5969;
--gray-9: #272e3b;
--gray-10: #1d2129;
--color-primary: var(--arcoblue-6);
--color-primary-light: var(--arcoblue-1);
--color-success: var(--green-6);
--color-warning: var(--orange-6);
--color-danger: var(--red-6);
--color-text: var(--gray-10);
--color-text-secondary: var(--gray-8);
--color-border: var(--gray-3);
--color-bg: var(--gray-1);
--color-bg-secondary: #FFFFFF;
--border-radius-small: 4px;
--border-radius-medium: 6px;
--border-radius-large: 8px;
--font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;
--box-shadow: 0 4px 10px rgba(0, 0, 0, 0.04);
--box-shadow-hover: 0 8px 20px rgba(0, 0, 0, 0.08);
--spacing-xs: 4px;
--spacing-sm: 8px;
--spacing-md: 16px;
--spacing-lg: 24px;
--spacing-xl: 32px;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: var(--font-family);
}
body {
background-color: var(--color-bg);
color: var(--color-text);
line-height: 1.6;
padding: var(--spacing-lg);
min-height: 100vh;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: var(--color-bg-secondary);
border-radius: var(--border-radius-large);
box-shadow: var(--box-shadow);
overflow: hidden;
}
header {
background: var(--color-primary);
color: white;
padding: var(--spacing-xl);
position: relative;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
h1 {
font-size: 20px;
font-weight: 600;
margin-bottom: var(--spacing-sm);
}
.header-info {
font-size: 14px;
opacity: 0.9;
}
.insurance-logo {
background: white;
padding: var(--spacing-xs) var(--spacing-md);
border-radius: 50px;
font-weight: 500;
color: var(--color-primary);
box-shadow: var(--box-shadow);
}
.section {
padding: var(--spacing-lg);
border-bottom: 1px solid var(--color-border);
}
.section:last-child {
border-bottom: none;
}
h2 {
color: var(--color-primary);
font-size: 16px;
margin-bottom: var(--spacing-lg);
padding-bottom: var(--spacing-sm);
border-bottom: 1px solid var(--color-primary-light);
display: flex;
align-items: center;
font-weight: 500;
}
h2:before {
content: "";
display: inline-block;
width: 3px;
height: 16px;
background: var(--color-primary);
border-radius: var(--border-radius-small);
margin-right: var(--spacing-sm);
}
.card-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: var(--spacing-md);
}
.card {
background: var(--color-bg-secondary);
border-radius: var(--border-radius-medium);
padding: var(--spacing-md);
border: 1px solid var(--color-border);
box-shadow: var(--box-shadow);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.card:hover {
transform: translateY(-2px);
box-shadow: var(--box-shadow-hover);
}
.card h3 {
color: var(--color-primary);
font-size: 14px;
margin-bottom: var(--spacing-md);
padding-bottom: var(--spacing-sm);
border-bottom: 1px dashed var(--color-border);
font-weight: 500;
}
/* 字段布局 */
.info-grid {
display: grid;
grid-template-columns: 1fr;
gap: var(--spacing-sm);
font-size: 14px;
}
.info-item {
display: flex;
flex-direction: column;
margin-bottom: 12px;
}
.info-label {
font-size: 12px;
color: var(--color-text-secondary);
margin-bottom: 4px;
}
.info-value {
font-size: 15px;
font-weight: 500;
word-break: break-word;
padding: 4px 0;
}
.invoice-card {
background: var(--color-bg-secondary);
border-radius: var(--border-radius-medium);
padding: var(--spacing-md);
margin-bottom: var(--spacing-md);
box-shadow: var(--box-shadow);
border: 1px solid var(--color-border);
}
.invoice-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: var(--spacing-md);
padding-bottom: var(--spacing-sm);
border-bottom: 1px solid var(--color-border);
}
.invoice-number-container {
display: flex;
flex-direction: column;
}
.invoice-number {
font-size: 15px;
font-weight: 600;
color: var(--color-primary);
}
.invoice-reference {
margin-top: 4px;
font-size: 12px;
color: var(--color-text-secondary);
}
.invoice-examination {
display: flex;
align-items: center;
}
.examination-tag {
padding: 6px 12px;
border-radius: 50px;
font-weight: 600;
display: inline-block;
font-size: 13px;
border: 1px solid;
}
.examination-tag.valid {
background: var(--green-1);
color: var(--green-7);
border-color: var(--green-3);
}
.examination-tag.suspicious {
background: var(--orange-1);
color: var(--orange-7);
border-color: var(--orange-3);
}
.examination-tag.invalid {
background: var(--red-1);
color: var(--red-7);
border-color: var(--red-3);
}
.invoice-details {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: var(--spacing-md);
margin-bottom: var(--spacing-md);
font-size: 14px;
}
.detail-item {
display: flex;
flex-direction: column;
}
.detail-label {
font-size: 12px;
color: var(--color-text-secondary);
margin-bottom: 4px;
}
.detail-value {
font-size: 14px;
font-weight: 500;
}
table {
width: 100%;
margin-top: var(--spacing-md);
border-collapse: collapse;
border-radius: var(--border-radius-medium);
overflow: hidden;
box-shadow: var(--box-shadow);
font-size: 14px;
table-layout: fixed;
}
th {
background-color: var(--color-primary-light);
color: var(--color-primary);
font-weight: 500;
padding: 12px;
text-align: left;
width: 20%;
word-break: break-word;
}
td {
padding: 12px;
border-bottom: 1px solid var(--color-border);
width: 20%;
word-break: break-word;
}
tr:nth-child(even) {
background-color: var(--color-bg);
}
tr:hover {
background-color: var(--color-primary-light);
}
.amount-total {
text-align: right;
font-weight: 600;
font-size: 15px;
color: var(--color-primary);
margin-top: var(--spacing-md);
padding-top: var(--spacing-md);
border-top: 1px solid var(--color-border);
}
footer {
text-align: center;
padding: var(--spacing-md);
color: var(--color-text-secondary);
font-size: 12px;
background: var(--color-bg);
border-top: 1px solid var(--color-border);
}
.highlight {
color: var(--color-danger);
font-weight: 500;
}
@media (max-width: 768px) {
.card-container {
grid-template-columns: 1fr;
}
.invoice-details {
grid-template-columns: 1fr;
}
.header-content {
flex-direction: column;
align-items: flex-start;
}
.insurance-logo {
margin-top: var(--spacing-md);
}
}
</style>
</head>
<body>
<div class="container">
<header>
<div class="header-content">
<div>
<h1>赔案档案</h1>
<div class="header-info">
<p>赔案编号: {{ dossier.赔案层.赔案编号 }} | 保险总公司: {{ dossier.赔案层.保险总公司 }}</p>
</div>
</div>
</div>
</header>
<div class="section">
<h2>影像件层</h2>
<table>
<thead>
<tr>
<th>影像件序号</th>
<th>影像件名称</th>
<th>已分类(含旋正)</th>
<th>影像件类型</th>
<th>已识别</th>
</tr>
</thead>
<tbody>
{% for image in dossier.影像件层 %}
<tr>
<td>{{ image.影像件序号 }}</td>
<td>{{ image.影像件名称 }}</td>
<td>{{ image.已分类 }}</td>
<td>{{ image.影像件类型 }}</td>
<td>{{ image.已识别 }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="section">
<h2>赔案层</h2>
<div class="card-container">
<div class="card">
<h3>申请人信息</h3>
<div class="info-grid">
<div class="info-item">
<div class="info-label">与被保险人关系</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.与被保险人关系 }}</div>
</div>
<div class="info-item">
<div class="info-label">姓名</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.姓名 }}</div>
</div>
<div class="info-item">
<div class="info-label">证件类型</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.证件类型 }}</div>
</div>
<div class="info-item">
<div class="info-label">证件号码</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.证件号码 }}</div>
</div>
<div class="info-item">
<div class="info-label">证件有效期</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.证件有效期起 | date }} 至 {{
dossier.赔案层.申请人信息.证件有效期止 | date }}
</div>
</div>
<div class="info-item">
<div class="info-label">性别</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.性别 }}</div>
</div>
<div class="info-item">
<div class="info-label">出生</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.出生 | date }} | {{
dossier.赔案层.申请人信息.年龄 }}岁
</div>
</div>
<div class="info-item">
<div class="info-label">手机号</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.手机号 }}</div>
</div>
<div class="info-item">
<div class="info-label">住址</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.省 }} {{ dossier.赔案层.申请人信息.地 }} {{
dossier.赔案层.申请人信息.县 }}
</div>
<div class="info-value">{{ dossier.赔案层.申请人信息.详细地址 }}</div>
</div>
</div>
</div>
<div class="card">
<h3>受益人信息</h3>
<div class="info-grid">
<div class="info-item">
<div class="info-label">与被保险人关系</div>
<div class="info-value">{{ dossier.赔案层.受益人信息.与被保险人关系 }}</div>
</div>
<div class="info-item">
<div class="info-label">户名</div>
<div class="info-value">{{ dossier.赔案层.受益人信息.户名 }}</div>
</div>
<div class="info-item">
<div class="info-label">开户银行</div>
<div class="info-value">{{ dossier.赔案层.受益人信息.开户银行 }}</div>
</div>
<div class="info-item">
<div class="info-label">银行账号</div>
<div class="info-value">{{ dossier.赔案层.受益人信息.银行账号 }}</div>
</div>
</div>
</div>
</div>
</div>
<div class="section">
<h2>发票层</h2>
{% for invoice in dossier.发票层 %}
<div class="invoice-card">
<div class="invoice-header">
<div class="invoice-number-container">
<div class="invoice-number">{{ invoice.票据类型 }} | {{ invoice.票据号码 }}</div>
<span class="invoice-reference">关联影像件序号: {{ invoice.关联影像件序号 }}</span>
</div>
<div class="invoice-examination">
{% if invoice.查验状态 == '真票' %}
<span class="examination-tag valid">{{ invoice.查验状态 }}</span>
{% elif invoice.查验状态 == '无法查验' %}
<span class="examination-tag suspicious">{{ invoice.查验状态 }}</span>
{% else %}
<span class="examination-tag invalid">{{ invoice.查验状态 }}</span>
{% endif %}
</div>
</div>
<div class="invoice-details">
<div class="detail-item">
<div class="detail-label">就诊人</div>
<div class="detail-value">{{ invoice.就诊人 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">票据代码</div>
<div class="detail-value">{{ invoice.票据代码 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">校验码后六位</div>
<div class="detail-value">{{ invoice.校验码后六位 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">开票日期</div>
<div class="detail-value">{{ invoice.开票日期 | date }}</div>
</div>
<div class="detail-item">
<div class="detail-label">票据金额</div>
<div class="detail-value">{{ invoice.票据金额 }}元</div>
</div>
<div class="detail-item">
<div class="detail-label">就诊类型</div>
<div class="detail-value">{{ invoice.就诊类型 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">医药机构</div>
<div class="detail-value">{{ invoice.医药机构 }}</div>
</div>
<div class="detail-item">
<div class="detail-label">推定疾病</div>
<div class="detail-value">{{ invoice.推定疾病 }}</div>
</div>
</div>
<table>
<thead>
<tr>
<th>大项</th>
<th>小项</th>
<th>数量</th>
<th>金额</th>
</tr>
</thead>
<tbody>
{% for item in invoice.项目 %}
<tr>
<td>{{ item.大项 }}</td>
<td>{{ item.小项 }}</td>
<td>{{ item.数量 }}</td>
<td>{{ item.金额 }}元</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="amount-total">总金额: {{ invoice.票据金额 }}元</div>
</div>
{% endfor %}
</div>
<footer>
<p>@liubiren.cloud</p>
</footer>
</div>
</body>
</html>