docs(release-notes): 添加住院护士站划价功能说明和发版记录

- 新增住院护士站划价服务流程说明文档,详细描述了从参数预处理到结果响应的五大阶段流程
- 包含耗材类医嘱和诊疗活动类医嘱的差异化处理逻辑
- 添加完整的发版内容记录,涵盖新增菜单功能和各模块优化点
- 记录了住院相关功能的新增和门诊业务流程的修复
```
This commit is contained in:
2025-12-25 14:13:14 +08:00
parent 85fcb7c2e2
commit abc0674531
920 changed files with 107068 additions and 14495 deletions

View File

@@ -0,0 +1,393 @@
<script lang="ts" setup>
import { ref } from 'vue';
// 1. 基础信息(复用已有变量,补充一致性格式)
const patientInfo = ref({
name: '',
department: '',
bed: '',
inpatientNo: '',
});
defineOptions({
name: 'ProgressNoteform',
});
// 2. 首次病程记录(复用已有变量,补充文本格式)
const firstRecordTime = ref('');
const firstRecordIntro = ref(
''
);
const caseFeatures =
ref('');
const chinaDiscussion = ref('');
const westDiscussion = ref('');
const preliminaryDiagnosis = ref('');
const treatmentPlan = ref(''); // 添加缺失的变量
// 3. 后续查房/会诊记录新增还原PDF所有章节
const roundRecords = ref([
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '主治医师签名:' }, // 区分普通医师和主治医师签名
},
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '副主任医师签名:' },
},
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '' },
},
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '' },
},
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '' },
},
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '' },
},
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '' },
},
{
title: '',
time: '',
content: '',
signature: { doctor: '', physician: '' },
},
]);
// 4. 签名变量(支持所有记录的签名输入)
interface Signatures {
firstDoctor: string;
[key: string]: string;
}
const signatures = ref<Signatures>({
firstDoctor: '', // 首次病程记录医师签名
...roundRecords.value.reduce((acc, record, index) => {
acc[`round${index}Doctor`] = '';
acc[`round${index}Physician`] = '';
return acc;
}, {} as Record<string, string>),
});
// 5. 打印功能:控制打印范围+样式
const handlePrint = () => {
// 1. 触发浏览器打印
window.print();
};
// 暴露接口
defineExpose({ patientInfo, firstRecordTime, firstRecordIntro, caseFeatures, chinaDiscussion, westDiscussion, preliminaryDiagnosis, treatmentPlan, roundRecords, signatures });
</script>
<template>
<div class="medical-record-container">
<!-- 打印按钮固定在顶部非打印内容 -->
<div class="print-btn-container no-print">
<el-button type="primary" @click="handlePrint">打印病历</el-button>
</div>
<!-- 病历主体打印核心内容 -->
<div class="medical-record">
<!-- 1. 医院头部每一页PDF均包含复用已有样式 -->
<div class="hospital-header">
<img src="./imgs/logo.png" alt="长春市朝阳区中医院Logo" class="header-logo" />
<h1 class="hospital-name">长春市朝阳区中医院</h1>
</div>
<!-- 2. 患者信息栏每一页PDF均包含下划线样式 -->
<div class="patient-info">
<span class="info-item">姓名:{{ patientInfo.name }}</span>
<span class="info-item">科室:{{ patientInfo.department }}</span>
<span class="info-item">床号:{{ patientInfo.bed }}</span>
<span class="info-item">住院号:{{ patientInfo.inpatientNo }}</span>
</div>
<!-- 3. 首次病程记录 -->
<div class="record-section">
<h2 class="section-main-title"> </h2>
<div class="record-time">{{ firstRecordTime }}</div>
<el-input v-model="firstRecordIntro" autosize type="textarea" class="clean-textarea" />
<!-- 病例特点 -->
<h3 class="section-sub-title">病例特点</h3>
<el-input v-model="caseFeatures" autosize type="textarea" class="clean-textarea" />
<!-- 拟诊讨论 -->
<h3 class="section-sub-title">拟诊讨论</h3>
<el-input v-model="chinaDiscussion" autosize type="textarea" class="clean-textarea" />
<el-input v-model="westDiscussion" autosize type="textarea" class="clean-textarea" />
<!-- 初步诊断 -->
<el-input v-model="preliminaryDiagnosis" autosize type="textarea" class="clean-textarea" />
<!-- 诊疗计划 -->
<el-input v-model="treatmentPlan" autosize type="textarea" class="clean-textarea" />
<!-- 首次病程记录签名 -->
<div class="signature-group">
<span class="signature-label">医师签名:</span>
<el-input v-model="signatures.firstDoctor" autosize type="textarea" class="clean-textarea signature-input"
:rows="1" />
</div>
</div>
<!-- 4. 分页分隔线模拟PDF分页打印时自动分页 -->
<div class="page-break"></div>
<!-- 5. 后续查房/会诊记录按时间顺序 -->
<div v-for="(record, index) in roundRecords" :key="index" class="record-section">
<!-- 重复患者信息与PDF一致 -->
<div class="patient-info page-repeated-info">
<span class="info-item">姓名:{{ patientInfo.name }}</span>
<span class="info-item">科室:{{ patientInfo.department }}</span>
<span class="info-item">床号:{{ patientInfo.bed }}</span>
<span class="info-item">住院号:{{ patientInfo.inpatientNo }}</span>
</div>
<!-- 查房标题+时间 -->
<h2 class="section-main-title">{{ record.title }}</h2>
<div class="record-time">{{ record.time }}</div>
<!-- 查房内容 -->
<el-input v-model="record.content" autosize type="textarea" class="clean-textarea" />
<!-- 查房签名区分普通医师/上级医师 -->
<div class="signature-group">
<span class="signature-label">医师签名:</span>
<el-input v-model="signatures[`round${index}Doctor`]" autosize type="textarea"
class="clean-textarea signature-input" :rows="1" />
<span v-if="record.signature.physician" class="signature-label ml-20">
{{ record.signature.physician }}
</span>
<el-input v-if="record.signature.physician" v-model="signatures[`round${index}Physician`]" autosize
type="textarea" class="clean-textarea signature-input" :rows="1" />
</div>
<!-- 分页分隔线最后一条记录无需分页 -->
<div v-if="index !== roundRecords.length - 1" class="page-break"></div>
</div>
</div>
</div>
</template>
<style scoped>
/* 1. 容器基础样式 */
.medical-record-container {
padding: 20px;
background-color: #f9f9f9;
}
.print-btn-container {
margin-bottom: 20px;
text-align: right;
}
/* 2. 病历主体样式模拟A4纸 */
.medical-record {
max-width: 210mm;
/* A4宽度 */
min-height: 297mm;
/* A4高度 */
margin: 0 auto;
padding: 20mm;
/* A4页边距 */
background-color: #fff;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
font-family: 'SimSun', '宋体', serif;
/* 病历标准字体 */
}
/* 3. 医院头部样式 */
.hospital-header {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 15px;
}
.header-logo {
width: 60px;
height: 60px;
margin-right: 15px;
}
.hospital-name {
font-size: 24px;
font-weight: bold;
color: #000;
margin: 0;
}
/* 4. 患者信息样式 */
.patient-info {
border-bottom: 1px solid #000;
padding: 5px 0;
margin-bottom: 15px;
font-size: 16px;
line-height: 1.5;
}
.info-item {
margin-right: 30px;
white-space: nowrap;
}
/* 5. 记录章节样式 */
.record-section {
margin-bottom: 30px;
}
.section-main-title {
text-align: center;
font-size: 22px;
font-weight: bold;
margin: 15px 0;
}
.section-sub-title {
font-size: 18px;
font-weight: bold;
margin: 10px 0;
}
.record-time {
font-size: 14px;
margin-bottom: 15px;
color: #666;
}
/* 6. 签名区域样式 */
.signature-group {
display: flex;
align-items: center;
justify-content: flex-end;
margin-top: 20px;
gap: 10px;
flex-wrap: wrap;
width: 100%;
}
.signature-label {
font-size: 16px;
font-weight: bold;
white-space: nowrap;
}
.signature-input {
width: 200px;
flex-shrink: 0;
}
.ml-20 {
margin-left: 20px;
}
/* 7. 分页分隔线模拟PDF分页 */
.page-break {
height: 1px;
background-color: #eee;
margin: 30px 0;
page-break-after: always;
/* 打印时强制分页 */
}
/* 8. 重复信息样式(后续页面的患者信息) */
.page-repeated-info {
margin-top: 20px;
}
/* 9. 清洁输入框样式(复用已有,确保无边框) */
:deep(.clean-textarea .el-textarea__wrapper) {
background-color: transparent;
padding: 0;
border: none;
}
:deep(.clean-textarea .el-textarea__inner) {
border: none;
background-color: transparent;
padding: 0;
resize: none;
word-break: break-word;
white-space: pre-wrap;
overflow-wrap: break-word;
font-family: inherit;
font-size: 16px;
line-height: 1.8;
/* 病历标准行高 */
color: #000;
}
:deep(.clean-textarea .el-textarea__inner:focus) {
outline: none;
box-shadow: none;
}
/* 10. 打印专属样式:控制打印效果 */
@media print {
/* 隐藏非打印内容(如打印按钮) */
.no-print {
display: none !important;
}
/* 强制A4尺寸+无边距 */
@page {
size: A4;
margin: 15mm;
/* 打印页边距匹配PDF */
}
/* 确保背景色打印(部分浏览器默认不打印背景) */
body {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
background-color: #fff;
}
/* 病历主体无边框阴影,仅打印内容 */
.medical-record {
box-shadow: none;
padding: 0;
margin: 0;
}
/* 文本不换行优化 */
.info-item {
margin-right: 20px;
}
/* 确保输入框内容正常打印 */
:deep(.el-textarea__inner) {
border: none !important;
}
}
</style>