提交merge1.3

This commit is contained in:
2025-12-27 15:30:25 +08:00
parent 8c607c8749
commit 088861f66e
1245 changed files with 220442 additions and 77616 deletions

View File

@@ -0,0 +1,449 @@
<template>
<div class="medical-form">
<div class="patient-name">
患者姓名{{ patient?.patientName || '未知' }} &nbsp;&nbsp; 病历号{{
patient?.busNo || '未知'
}}
</div>
<h2 style="text-align: center">长春市朝阳区中医院</h2>
<h2 style="text-align: center">出院诊断病历</h2>
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
<el-form
ref="formRef"
:model="formData"
:rules="rules"
label-width="100px"
label-align="left"
class="medical-full-form"
>
<h4 class="section-title">基础信息</h4>
<!-- 1. 基础信息单行自适应排列 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="姓名" prop="patientName" class="row-item">
<div class="input-with-unit">
<el-input
disabled
v-model="formData.patientName"
type="text"
placeholder="请输入"
/>
</div>
</el-form-item>
<el-form-item label="年龄" prop="age" class="row-item">
<div class="input-with-unit">
<el-input disabled v-model="formData.age" type="text" placeholder="请输入" />
</div>
</el-form-item>
<el-form-item label="性别" prop="gender" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.gender" type="text" placeholder="请输入" />
</div>
</el-form-item>
<el-form-item label="住院号" prop="busNo" class="row-item">
<div class="input-with-unit">
<el-input disabled v-model="formData.busNo" type="text" placeholder="请输入" />
</div>
</el-form-item>
<el-form-item label="职业" prop="temperature" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
</div>
</el-form-item>
<el-form-item label="入院日期" prop="admissionDate" class="row-item">
<el-date-picker
v-model="formData.admissionDate"
type="date"
placeholder="选择入院日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="出院日期" prop="dischargeDate" class="row-item">
<el-date-picker
v-model="formData.dischargeDate"
type="date"
placeholder="选择出院日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="住院天数" prop="hospitalDays" class="row-item">
<div class="input-with-unit">
<el-input disabled v-model="formData.hospitalDays" placeholder="请输入" />
</div>
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">诊断</h4>
<!-- 3. 出院诊断必填 -->
<el-form-item label="出院诊断" prop="DischargeDiagnosis" class="required form-item-single">
<el-input
v-model="formData.DischargeDiagnosis"
type="textarea"
placeholder="请输入出院诊断"
:autosize="{ minRows: 1 }"
style="resize: none; padding-right: 10px"
/>
</el-form-item>
<!-- 4. 出院病情摘要及诊疗经过 -->
<el-form-item
label="出院病情摘要及诊疗经过"
prop="SummaryAndDiagnosisAndTreatmentProcess"
class="form-item-single"
>
<el-input
v-model="formData.SummaryAndDiagnosisAndTreatmentProcess"
type="textarea"
placeholder="请输入出院病情摘要及诊疗经过"
:autosize="{ minRows: 1 }"
style="resize: none; padding-right: 10px"
/>
</el-form-item>
<el-form-item
label="出院后要求及注意事项"
prop="RequirementsAndPrecautionsAfterDischarge"
class="form-item-single"
>
<el-input
v-model="formData.RequirementsAndPrecautionsAfterDischarge"
type="textarea"
placeholder="请输入出院后要求及注意事项"
:autosize="{ minRows: 1 }"
style="resize: none; padding-right: 10px"
/>
</el-form-item>
<el-form-item
label="中医调护"
prop="TraditionalChineseMedicineNursing"
class="form-item-single"
>
<el-input
v-model="formData.TraditionalChineseMedicineNursing"
type="textarea"
placeholder="请输入中医调护"
:autosize="{ minRows: 1 }"
style="resize: none; padding-right: 10px"
/>
</el-form-item>
</el-form>
</div>
</div>
<DisDiagnMedicalRecord v-if="isShowprintDom" ref="recordPrintRef"></DisDiagnMedicalRecord>
</template>
<script setup>
import { reactive, ref, onMounted, watch, nextTick } from 'vue';
import { ElMessage } from 'element-plus';
import { previewPrint } from '../utils/printUtils';
import DisDiagnMedicalRecord from '../views/hospitalRecord/components/disDiagnMedicalRecord.vue';
defineOptions({
name: 'DischargeDiagnosisCertificate',
});
// Props与事件
const props = defineProps({
patientInfo: {
type: Object,
required: true,
},
});
const recordPrintRef = ref();
const isShowprintDom = ref(false);
const patient = props.patientInfo;
// const props = defineProps({});
const emits = defineEmits(['submitOk']);
// 数据初始化
// const patient = ref(null);
// 表单数据
const formData = reactive({
patientName: '', // 姓名
age: '', // 年龄
gender: '', // 性别
busNo: '', // 住院号
admissionDate: '', // 入院日期
dischargeDate: '', // 出院日期
hospitalDays: '', // 住院天数
DischargeDiagnosis: '', // 出院诊断
SummaryAndDiagnosisAndTreatmentProcess: '', // 出院病情摘要及诊疗经过
RequirementsAndPrecautionsAfterDischarge: '', // 出院后要求及注意事项
TraditionalChineseMedicineNursing: '', // 中医调护
});
// 表单校验规则
const rules = reactive({
dischargeDiagnosis: [
{
required: true,
message: '请填写出院诊断',
trigger: ['blur', 'submit'],
},
],
});
// 提交函数
const submit = () => {
emits('submitOk', formData);
};
// 表单数据赋值
const setFormData = (data) => {
if (data) {
Object.assign(formData, data);
}
};
// 生命周期
onMounted(() => {
// patient.value = patientInfo.value;
// 组件挂载时自动填充患者信息
// fillPatientInfo(patientInfo.value);
if (!formData.patientName) {
formData.patientName = patient?.patientName || '';
}
if (!formData.gender) {
formData.gender = patient?.genderEnum_enumText || '';
}
if (!formData.age) {
formData.age = patient?.age || '';
}
if (!formData.department) {
formData.department = patient?.inHospitalOrgName || '';
}
if (!formData.bedNo) {
formData.bedNo = patient?.houseName + '-' + patient?.bedName;
}
if (!formData.busNo) {
formData.busNo = patient?.busNo || '';
}
if (!formData.admissionDate) {
formData.admissionDate = patient?.inHospitalTime || '';
}
if (!formData.hospitalDays) {
formData.hospitalDays = patient?.inHospitalDays;
}
console.log('patientInfo========>', JSON.stringify(props.patientInfo));
});
// 监听患者信息变化,实现联动显示和自动填充
// watch(
// () => patientInfo.value,
// (newPatientInfo) => {
// patient.value = newPatientInfo;
// // 患者信息变化时自动填充
// fillPatientInfo(newPatientInfo);
// },
// { deep: true }
// );
// 自动填充患者信息到表单
const fillPatientInfo = (patientData) => {
if (!patientData) {
ElMessage.warning('未获取到患者信息,请确保已选择患者');
return;
}
try {
// 填充基本信息,处理可能的数据缺失情况
formData.patientName = patientData.patientName || '';
formData.age = patientData.age || '';
formData.gender = patientData.genderEnum_enumText || '';
formData.busNo = patientData.busNo || '';
formData.hospitalDays = patientData.inHospitalDays || '';
} catch (error) {
console.error('填充患者信息时发生错误:', error);
ElMessage.error('自动填充患者信息失败,请检查数据源格式');
}
};
// 打印方法
const printFun = () => {
isShowprintDom.value = true;
nextTick(() => {
recordPrintRef?.value.setData(formData);
nextTick(() => {
previewPrint(recordPrintRef?.value.getDom());
isShowprintDom.value = false;
});
});
};
// 暴露接口
defineExpose({ formData, submit, setFormData, fillPatientInfo, printFun });
</script>
<style scoped>
/* 表单外层容器 */
.medical-form {
max-width: 1200px;
width: 100%;
min-height: 800px;
height: auto;
margin: 15px auto;
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
font-family: Arial, sans-serif;
box-sizing: border-box;
overflow: hidden; /* 防止内部内容溢出 */
position: relative;
}
/* 顶部姓名样式 */
.patient-name {
display: inline-block;
margin-bottom: 15px;
font-size: 14px;
color: #333;
font-weight: 500;
}
/* 滚动内容容器 */
.form-scroll-container {
width: 100%;
max-height: 55vh;
overflow-y: auto;
overflow-x: hidden;
scrollbar-width: thin;
scrollbar-color: #ccc #f5f5f5;
position: relative;
}
.form-scroll-container::-webkit-scrollbar {
width: 6px;
}
.form-scroll-container::-webkit-scrollbar-thumb {
background-color: #ccc;
border-radius: 3px;
}
.form-scroll-container::-webkit-scrollbar-track {
background-color: #f5f5f5;
}
/* 完整表单容器 */
.medical-full-form {
width: 100%;
min-width: 0; /* 防止内容强制拉伸容器 */
box-sizing: border-box;
}
/* 区域通用样式 */
.form-section {
margin-bottom: 20px;
}
.section-title {
margin: 0 0 12px;
padding-bottom: 6px;
border-bottom: 1px solid #f0f0f0;
color: #333;
font-size: 16px;
font-weight: bold;
}
/* 通用单行自适应布局(基础信息+病史信息共用) */
.single-row-layout {
display: flex;
flex-wrap: wrap; /* 自动换行 */
align-items: flex-start; /* 顶部对齐,适配文本域高度 */
gap: 15px; /* 统一元素间距 */
width: 100%;
box-sizing: border-box;
}
.row-item {
margin-bottom: 0; /* 取消底部间距,避免换行重叠 */
display: flex;
flex-direction: column;
}
/* 基础信息项:适配短输入框 */
.row-item:not(.history-item) {
min-width: 160px; /* 基础信息项最小宽度 */
}
/* 带单位的输入框样式 */
.input-with-unit {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
}
.input-with-unit .el-input {
flex: 1;
}
.unit {
font-weight: 500;
color: #333;
white-space: nowrap;
font-size: 14px;
}
/* 单行表单项样式(主诉、查体等) */
.form-item-single {
margin: 18px 0;
}
/* 必填项红色星号 */
.required .el-form-item__label::before {
content: '* ';
color: #ff4d4f;
}
/* 输入框统一样式 */
.el-form-item .el-input,
.el-form-item .el-input__wrapper {
width: 100%;
box-sizing: border-box;
}
.el-form-item .el-input__inner {
font-size: 14px;
padding: 8px 12px;
}
/* 确保textarea的rows属性生效 */
.el-textarea__inner {
min-height: auto !important;
height: auto !important;
resize: none;
}
/* 根据rows属性设置高度 */
.el-input--textarea {
height: auto;
}
/* 响应式调整 */
@media (max-width: 768px) {
.medical-form {
height: 80vh;
padding: 10px;
overflow: hidden;
}
.form-scroll-container {
height: calc(100% - 35px);
max-height: none;
}
.el-form {
label-width: 70px !important;
}
.row-item:not(.history-item) {
min-width: 130px;
}
.history-item {
min-width: 100%; /* 移动端病史信息全屏宽度,单行显示 */
}
.form-item-single,
.form-section {
margin-bottom: 15px;
}
}
</style>

View File

@@ -1,15 +1,22 @@
<template>
<<<<<<< HEAD
<!-- 跌倒/坠床评估护理记录单主容器 -->
<div>
<div class="business">
<!-- 已有记录展示表格 -->
<el-table
=======
<div>
<div class="business">
<!-- <el-table
>>>>>>> v1.3
:data="tableDataSource"
border
stripe
fit
:header-cell-style="{ background: '#f2f2f2', color: 'black' }"
>
<<<<<<< HEAD
<!-- 记录时间列 -->
<el-table-column prop="content.recordTime" label="记录时间" />
<!-- 评估分数列 -->
@@ -19,6 +26,12 @@
<!-- 责任护士列 -->
<el-table-column prop="content.nurseSignature" label="责任护士" />
<!-- 操作列编辑和删除按钮 -->
=======
<el-table-column prop="content.recordTime" label="记录时间" />
<el-table-column prop="content.totalScore" label="评估分数" />
<el-table-column prop="content.patientCareSessionsTableList" label="护理措施" />
<el-table-column prop="content.nurseSignature" label="责任护士" />
>>>>>>> v1.3
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
@@ -37,6 +50,7 @@
@click="handleDelete(scope.row)"
:disabled="admissionDataForm !== undefined"
>
<<<<<<< HEAD
删除
</el-button>
</template>
@@ -49,6 +63,17 @@
<!-- 表单主体 -->
<el-form ref="formRef" :model="form" style="width: 99.9%">
<!-- 标题行 -->
=======
删除
</el-button>
</template>
</el-table-column>
</el-table> -->
<div name="跌倒/坠床评估护理记录单" class="changeMajor" style="width: 99.9%">
<div>
<el-form ref="formRef" :model="form" style="width: 99.9%">
>>>>>>> v1.3
<el-form-item style="text-align: center">
<div
style="
@@ -64,12 +89,18 @@
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 日期时间选择器 -->
=======
>>>>>>> v1.3
<el-form-item label="日期:" class="changeMajorFromItem" style="width: 100%">
<el-row :span="20">
<el-col :span="8" style="padding-left: 0px !important">
<el-form-item>
<<<<<<< HEAD
<!-- 日期时间选择器 -->
=======
>>>>>>> v1.3
<el-date-picker
v-model="form.ZKDATE"
type="datetime"
@@ -79,7 +110,10 @@
style="width: 800px"
:disabled="admissionDataForm !== undefined"
/>
<<<<<<< HEAD
<!-- 时间选择器被注释掉 -->
=======
>>>>>>> v1.3
<!-- <span style="margin-left: 5px">时间</span>
<el-time-picker
v-model="form.ZKTIME"
@@ -90,7 +124,10 @@
/> -->
</el-form-item>
</el-col>
<<<<<<< HEAD
<!-- 新增/保存按钮 -->
=======
>>>>>>> v1.3
<el-col :span="5">
<el-button
v-if="!updateFlag"
@@ -114,7 +151,10 @@
</el-row>
</el-form-item>
<<<<<<< HEAD
<!-- 危险因素评估表格 -->
=======
>>>>>>> v1.3
<el-form-item style="padding-top: 10px; margin: 0px !important">
<el-table
:data="dangerData"
@@ -122,7 +162,10 @@
:span-method="handleSpan"
style="text-align: center"
>
<<<<<<< HEAD
<!-- 动态生成表格列 -->
=======
>>>>>>> v1.3
<el-table-column
v-for="column in dangerColumns"
:key="column.key"
@@ -131,7 +174,10 @@
:label="column.title"
align="center"
/>
<<<<<<< HEAD
<!-- 选择列复选框 -->
=======
>>>>>>> v1.3
<el-table-column prop="id" label="选择" width="80" align="center">
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleDangerChange(row)" />
@@ -140,7 +186,10 @@
</el-table>
</el-form-item>
<<<<<<< HEAD
<!-- 总分显示 -->
=======
>>>>>>> v1.3
<el-form-item
style="text-align: center; margin-bottom: 0px; padding: 0px"
class="changeMajorFromItem"
@@ -153,7 +202,10 @@
</el-row>
</el-form-item>
<<<<<<< HEAD
<!-- 护理措施表格 -->
=======
>>>>>>> v1.3
<el-form-item style="padding-top: 10px">
<el-table
:data="nursingData"
@@ -161,7 +213,10 @@
:span-method="arraySpanMethod"
style="width: 100%"
>
<<<<<<< HEAD
<!-- 动态生成表格列 -->
=======
>>>>>>> v1.3
<el-table-column
v-for="column in nursingColumns"
:key="column.key"
@@ -170,7 +225,10 @@
:label="column.title"
align="center"
/>
<<<<<<< HEAD
<!-- 选择列复选框 -->
=======
>>>>>>> v1.3
<el-table-column prop="id" label="选择" width="80" align="center">
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleNursingChange(row)" />
@@ -179,7 +237,10 @@
</el-table>
</el-form-item>
<<<<<<< HEAD
<!-- 护士签字输入框 -->
=======
>>>>>>> v1.3
<el-form-item
style="text-align: center; margin-bottom: 0px; padding: 0px"
class="changeMajorFromItem"
@@ -199,7 +260,10 @@
</el-row>
</el-form-item>
<<<<<<< HEAD
<!-- 备注信息 -->
=======
>>>>>>> v1.3
<el-form-item>
<el-row :span="20">
<el-col :span="5">
@@ -220,6 +284,7 @@
</template>
<script setup>
<<<<<<< HEAD
// 组件选项定义
defineOptions({
name: '跌倒/坠床评估护理记录单',
@@ -238,6 +303,32 @@ const queryRef = ref();
const formRef = ref();
// 基本数据变量
=======
defineOptions({
name: 'FallBedFallAssessment',
});
import { ref, reactive, computed, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
import { useRoute, useRouter } from 'vue-router';
import { patientInfo } from '../views/doctorstation/components/store/patient';
// 定义props和emits
const props = defineProps({
patientInfo: {
type: Object,
default: () => ({}),
},
});
const emits = defineEmits(['submitOk']);
// 响应式数据
const route = useRoute();
const router = useRouter();
const queryRef = ref();
const formRef = ref();
>>>>>>> v1.3
const wardCode = ref('');
const patientId = ref('');
const visitId = ref('');
@@ -251,6 +342,7 @@ const totalScore = ref(0);
const lastSubmit = ref('');
const admissionDataForm = ref(route.params.admissionData);
<<<<<<< HEAD
// 表单数据模型
const form = reactive({
ZKDATE: '', // 日期
@@ -263,6 +355,19 @@ const form = reactive({
});
// 危险因素表格列配置
=======
const form = reactive({
ZKDATE: '',
ZKTIME: '',
recordTime: '',
totalScore: 0,
bedFallRiskAssessmentList: [],
nurseSignature: '',
patientCareSessionsCheckedList: [],
});
// 危险因素表格列
>>>>>>> v1.3
const dangerColumns = [
{
key: 'content',
@@ -327,7 +432,11 @@ const dangerData = ref([
{ id: '27', evalContent: '麻醉止痛剂', score: 2, checked: false },
]);
<<<<<<< HEAD
// 护理措施表格列配置
=======
// 护理措施表格列
>>>>>>> v1.3
const nursingColumns = [
{
key: 'content',
@@ -364,21 +473,33 @@ const instructions = [
'3.评分≥5高度风险每周至少评估一次需采取适宜的预防措施同时填写《预防患者跌倒/坠床知情告知书》',
];
<<<<<<< HEAD
// 计算属性:计算选中的危险因素总分
=======
// 计算属性
>>>>>>> v1.3
const calculate = computed(() => {
return dangerData.value
.filter((option) => option.checked)
.reduce((total, option) => total + option.score, 0);
});
<<<<<<< HEAD
// 计算属性:判断表单是否为空
=======
>>>>>>> v1.3
const isFormEmpty = computed(() => {
return (
form.ZKDATE === '' && form.ZKTIME === '' && form.recordTime === '' && form.nurseSignature === ''
);
});
<<<<<<< HEAD
// 危险因素选择变化处理函数
=======
// 方法 - 不再需要handleData方法通过表单输入和按钮加载数据
>>>>>>> v1.3
const handleDangerChange = (row) => {
totalScore.value = calculate.value;
form.bedFallRiskAssessmentList = dangerData.value
@@ -386,14 +507,20 @@ const handleDangerChange = (row) => {
.map((item) => item.id);
};
<<<<<<< HEAD
// 护理措施选择变化处理函数
=======
>>>>>>> v1.3
const handleNursingChange = (row) => {
form.patientCareSessionsCheckedList = nursingData.value
.filter((item) => item.checked)
.map((item) => item.id);
};
<<<<<<< HEAD
// 初始化函数:加载模拟数据
=======
>>>>>>> v1.3
const init = async () => {
// 使用模拟数据不再调用后端API
try {
@@ -455,7 +582,10 @@ const init = async () => {
}
};
<<<<<<< HEAD
// 危险因素表格合并单元格处理函数
=======
>>>>>>> v1.3
const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
if (columnIndex === 0) {
if (rowIndex === 0) {
@@ -502,7 +632,10 @@ const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
return [1, 1];
};
<<<<<<< HEAD
// 护理措施表格合并单元格处理函数
=======
>>>>>>> v1.3
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
// 护理措施
if (columnIndex === 0) {
@@ -519,9 +652,14 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
return [1, 1];
};
<<<<<<< HEAD
// 提交表单处理函数
const onSubmit = async () => {
// 检查上次提交时间,防止重复提交
=======
const onSubmit = async () => {
// 检查上次提交时间
>>>>>>> v1.3
if (lastSubmit.value && new Date() - lastSubmit.value < 2000) {
ElMessage.error('禁止重复提交!');
return;
@@ -546,6 +684,7 @@ const onSubmit = async () => {
if (isFormEmpty.value) {
ElMessage.error('请填写跌倒/坠床评估护理记录单后再进行操作');
<<<<<<< HEAD
} else {
form.totalScore = totalScore.value;
@@ -554,21 +693,62 @@ const onSubmit = async () => {
if (updateFlag.value) {
// 模拟更新操作
=======
return;
}
// 表单验证通过,收集数据
form.totalScore = totalScore.value;
try {
// 准备保存的数据
const saveData = {
...form,
// 添加患者相关信息
patientId: patientId.value,
visitId: visitId.value,
wardCode: wardCode.value,
// 确保选中项数组存在
bedFallRiskAssessmentList: form.bedFallRiskAssessmentList || [],
patientCareSessionsCheckedList: form.patientCareSessionsCheckedList || [],
};
// 提交表单数据
console.log('提交保存的数据:', saveData);
emits('submitOk', saveData);
// 更新本地数据
if (updateFlag.value) {
// 更新操作
>>>>>>> v1.3
const updatedIndex = tableDataSource.value.findIndex((item) => item.id === updateId.value);
if (updatedIndex !== -1) {
tableDataSource.value[updatedIndex].content = { ...form };
}
<<<<<<< HEAD
ElMessage.success('模拟更新成功');
} else {
// 模拟新增操作
=======
ElMessage.success('更新成功');
} else {
// 新增操作
>>>>>>> v1.3
const newRecord = {
id: Date.now().toString(),
content: { ...form },
};
tableDataSource.value.unshift(newRecord);
<<<<<<< HEAD
ElMessage.success('模拟新增成功');
}
=======
ElMessage.success('保存成功');
}
// 处理返回逻辑
>>>>>>> v1.3
if (admissionDataForm.value !== undefined) {
const admissionDataBack = JSON.parse(admissionDataForm.value);
admissionDataBack.project2 = totalScore.value;
@@ -589,11 +769,22 @@ const onSubmit = async () => {
}
}
<<<<<<< HEAD
reset();
}
};
// 编辑记录处理函数
=======
// 重置表单
reset();
} catch (error) {
console.error('保存失败:', error);
ElMessage.error('保存失败,请重试');
}
};
>>>>>>> v1.3
const handleUpdate = (row) => {
const loginUser = JSON.parse(window.localStorage.getItem('loginUser'));
@@ -623,7 +814,10 @@ const handleUpdate = (row) => {
}
};
<<<<<<< HEAD
// 重置表单函数
=======
>>>>>>> v1.3
const reset = () => {
Object.assign(form, {
ZKDATE: '',
@@ -656,7 +850,10 @@ const reset = () => {
}
};
<<<<<<< HEAD
// 删除记录处理函数
=======
>>>>>>> v1.3
const handleDelete = (row) => {
const loginUser = JSON.parse(window.localStorage.getItem('loginUser'));
@@ -680,7 +877,10 @@ const handleDelete = (row) => {
}
};
<<<<<<< HEAD
// 打印预览函数(暂未实现)
=======
>>>>>>> v1.3
const dc_ajax_preview = () => {
var args = {
report: urlAddRandomNo('./grf/NurseRecord_Pressure_208.grf'),
@@ -691,7 +891,10 @@ const dc_ajax_preview = () => {
webapp_ws_ajax_run(args);
};
<<<<<<< HEAD
// 数据转换函数,用于报表打印
=======
>>>>>>> v1.3
const transformData = () => {
const jsonDate = [...tableDataSource.value];
@@ -838,7 +1041,11 @@ const transformData = () => {
return transformedData;
};
<<<<<<< HEAD
// 组件挂载后执行的生命周期函数
=======
// 生命周期钩子
>>>>>>> v1.3
onMounted(() => {
try {
// 安全获取用户信息
@@ -851,7 +1058,17 @@ onMounted(() => {
wardCode.value = window.localStorage.getItem('wardInfo') || '';
admissionDataForm.value = route.params.admissionData;
<<<<<<< HEAD
// 自动初始化表格数据不再依赖患者ID参数
=======
// 获取患者信息
if (patientInfo.value) {
patientId.value = patientInfo.value.patientId || '';
visitId.value = patientInfo.value.visitId || '';
}
// 自动初始化表格数据
>>>>>>> v1.3
// 延迟执行,确保所有数据都已初始化
setTimeout(() => {
init();
@@ -864,15 +1081,28 @@ onMounted(() => {
}, 100);
}
});
<<<<<<< HEAD
</script>
<style scoped>
/* 页面样式定义 */
=======
// 暴露接口
defineExpose({ form, submit: onSubmit, reset });
</script>
<style scoped>
>>>>>>> v1.3
.business {
background: white;
border-radius: 5px;
padding: 10px 16px;
<<<<<<< HEAD
height: calc(100vh - var(--barHeight) * 1px - 50px);
=======
height: calc(100vh - 250px);
>>>>>>> v1.3
overflow: auto;
display: grid;
grid-row-gap: 16px;
@@ -931,10 +1161,14 @@ onMounted(() => {
margin-bottom: 0px !important;
}
}
<<<<<<< HEAD
/* 备注信息列表样式 */
.instructions-list {
list-style-type: none;
padding-left: 0;
}
</style>
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -2,6 +2,7 @@
<div class="hospital-record-form">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="病案首页(一)" name="first">
<<<<<<< HEAD
<medicalRecordFirst :formData="formData"></medicalRecordFirst>
</el-tab-pane>
<el-tab-pane label="病案首页(二)" name="second">
@@ -9,13 +10,42 @@
</el-tab-pane>
<el-tab-pane label="病案附页(一)" name="third">
<medicalRecordThird :formData="formData"></medicalRecordThird>
=======
<medicalRecordFirst
ref="firstRef"
:formData="formData"
@onCaseFirst="updateCaseFirstDatas"
></medicalRecordFirst>
</el-tab-pane>
<el-tab-pane label="病案首页(二)" name="second">
<medicalRecordSecond
:formData="formData"
@onCaseSecond="updateCaseFirstDatas"
></medicalRecordSecond>
</el-tab-pane>
<el-tab-pane label="病案附页(三)" name="third">
<medicalRecordThird
:formData="formData"
@onCaseThird="updateCaseFirstDatas"
></medicalRecordThird>
>>>>>>> v1.3
</el-tab-pane>
</el-tabs>
<div class="form-footer">
<<<<<<< HEAD
<button @click="printForm" class="print-btn">打印表单</button>
<button @click="resetForm" class="reset-btn">重置表单</button>
</div>
=======
<!-- <button @click="printForm" class="print-btn">打印表单</button> -->
<button @click="resetForm" class="reset-btn">重置表单</button>
</div>
<medicalRecordPrint v-if="isShowprintDom" ref="recordPrintRef"></medicalRecordPrint>
<!-- <el-drawer v-model="drawer" size="100%">
<medicalRecordPrint ref="recordPrintRef"></medicalRecordPrint>
</el-drawer> -->
>>>>>>> v1.3
</div>
</template>
@@ -23,7 +53,12 @@
defineOptions({
name: 'HospitalRecordForm',
});
<<<<<<< HEAD
import { ref, reactive } from 'vue';
=======
import { ref, reactive, nextTick } from 'vue';
import { ElMessage } from 'element-plus';
>>>>>>> v1.3
// import medicalRecordFirst from './components/medicalRecordFirst.vue';
import medicalRecordFirst from '@/views/hospitalRecord/components/medicalRecordFirst.vue';
import medicalRecordSecond from '@/views/hospitalRecord/components/medicalRecordSecond.vue';
@@ -31,6 +66,7 @@ import medicalRecordThird from '@/views/hospitalRecord/components/medicalRecordT
import medicalRecordFirstPrint from '@/views/hospitalRecord/components/medicalRecordFirstPrint.json';
import medicalRecordSecondPrint from '@/views/hospitalRecord/components/medicalRecordSecondPrint.json';
import medicalRecordThirdPrint from '@/views/hospitalRecord/components/medicalRecordThirdPrint.json';
<<<<<<< HEAD
// 表单数据
const formData = reactive({
@@ -144,6 +180,617 @@ const resetForm = () => {
formData.medicalInfo.drugAllergy = '1';
formData.doctorInfo.recordQuality = '1';
};
=======
import formDataJs from '../views/doctorstation/components/store/medicalpage';
import medicalRecordPrint from '../views/hospitalRecord/components/medicalRecordPrint.vue';
import { previewPrint } from '../utils/printUtils';
import {
getEncounterDiagnosis,
getTcmDiagnosis,
} from '../views/inpatientDoctor/home/components/api';
import { cloneDeep } from 'lodash';
const firstRef = ref();
const commpoentType = 'medicalRecord';
const emit = defineEmits(['submitOk']);
const drawer = ref(false);
// 表单数据
const formData = reactive({
//医院信息
hospitalInfo: {
//组织机构代码
orgCode: '41275054-700000',
//医疗付款方式
medicalPaymentCode: '',
},
//患者信息
patientInfo: {
// 健康卡号
healthCardNo: '',
// 患者姓名
patientName: '',
// 患者性别
gender: '',
// 出生日期
birthDate: '',
// 年龄
age: '',
// 国籍
nationality: '中国',
// 籍贯
nativePlace: '',
// 民族
ethnicity: '汉族',
// 身份证号
idCardNo: '',
// 户口住址
householdAddress: '',
// 工作单位地址
workUnitAddress: '',
// 联系人姓名
contactName: '',
// 关系
contactRelation: '',
// 联系人地址
contactAddress: '',
// 联系人电话
contactPhone: '',
},
// 住院信息
admission: {
// 第几次住院
times: 1,
// 住院号
hospitalNo: '',
// 病案号
medicalRecordNo: '',
// 入院途径
admissionRoute: '',
// 入院时间
admitTime: '',
// 入院科室
department: '',
// 病房
ward: '',
// 确诊日期
confirmDate: '',
// 出院时间
dischargeTime: '',
// 出院科室
dischargeDepartment: '',
// 病房
dischargeWard: '',
// 实际住院天数
hospitalDays: '',
},
// 诊断信息
diagnosis: {
// 主要诊断
mainDiagnosis: '',
// 其他诊断
otherDiagnosis: '',
},
// 医疗信息
medicalInfo: {
// 是否输血
bloodTransfusion: '2',
// 血型
bloodType: '',
// rh类型
rhType: '',
// 药物过敏史
drugAllergy: '1',
},
// 医师信息
doctorInfo: {
// 科主任
departmentDirector: '',
// 副主任
chiefPhysician: '',
// 主治医师
attendingPhysician: '',
// 住院医师
residentPhysician: '',
// 责任护士
chargeNurse: '',
// 住院总医师
chiefResident: '',
// 实习医师
intern: '',
// 病案质量
recordQuality: '1',
// 编码员
coder: '',
// 控制日期
qualityControlDate: '',
},
// 病案首页2
medicalSecond: {
// 手术方式
surgeryType: '',
// 离院方式
leaveType: '',
// 是否计划出院
isPlan: '',
// 目的
purpose: '',
//昏迷时间---入院前
comaDurationTime_before: '',
//昏迷时间---入院后
comaDurationTime_after: '',
// 肿瘤分期
tumorStaging: '',
// T
tumor_T: '',
// N
tumor_N: '',
// M
tumor_M: '',
// 判断依据
judgmentBase: '',
// 分化程度
degreeDifferentiation: '',
// 临床路径
enterPath: '',
// 变异
mutation: '',
// 退出路径
outPath: '',
// 特级护理
nursingLevel_spec: '',
// 1级护理
nursingLevel_1: '',
// 2级护理
nursingLevel_2: '',
// 3级护理
nursingLevel_3: '',
// 呼吸机使用
ventilatorUse: '',
// 有创呼吸机使用小时
ventilatorUseTime: '',
// 手术表
tableData_top: [],
},
// 病案首页3
// 住院费用
hospitalization: {
// 总费用
hosCharges: '',
// 自付金额
hosCharges_self: '',
},
// 综合医疗服务类
medicalServices: {
// 一般医疗服务类
medicalServices_1: '',
// 一般治疗操作费
medicalServices_2: '',
// 护理费
medicalServices_3: '',
// 其他费用
medicalServices_4: '',
},
// 诊断类
diagnosisClass: {
// 病理诊断
diagnosis_5: '',
// 实验室诊断
diagnosis_6: '',
// 影像学诊断
diagnosis_7: '',
// 临床诊断
diagnosis_8: '',
},
// 治疗类
treatmentClass: {
// 非手术治疗项目费
treatment_9: '',
// 临床物理治疗
treatment_9_1: '',
// 手术治疗费
treatment_10: '',
// 麻醉费
treatment_10_1: '',
// 手术费
treatment_10_2: '',
},
// 康复类
recoveryClass: {
// 康复费
recovery_11: '',
},
// 中医类
TCMClass: {
// 中医治疗费
TCM_12: '',
},
// 西药类
WesternClass: {
// 西药费
Western_13: '',
// 抗菌药物费
Western_13_1: '',
},
// 中药类
chineseClass: {
//中成药
chinese_14: '',
// 中草药
chinese_15: '',
},
// 血液和血液制品类
bloodClass: {
// 血费
blood_16: '',
// 蛋白类制品费
blood_17: '',
// 球蛋白制品费
blood_18: '',
// 凝血因子制品费
blood_19: '',
// 细胞因子制品费
blood_20: '',
},
// 耗材类
consumablesClass: {
// 检查用一次性医用材料费
consumables_21: '',
// 治疗用一次性医用材料费
consumables_22: '',
// 手术用一次性医用材料费
consumables_23: '',
},
// 其他类
otherClass: {
// 其他费用
other_24: '',
},
// 其他诊断及手术附加页
tableData_sub: [],
// 手术操作数组
tableData_top: [],
});
// Props与事件
const props = defineProps({
patientInfo: {
type: Object,
required: true,
},
});
const activeName = ref('first');
const recordPrintRef = ref();
const isShowprintDom = ref(false);
// 打印表单
const printForm = () => {
drawer.value = true;
// // 创建一个新的打印窗口
// const printWindow = window.open('', '_blank');
// let printContent;
// // 获取模板字符串并替换转义的插值标记
// if (activeName.value == 'first') {
// printContent = medicalRecordFirstPrint.printContent;
// } else if (activeName.value == 'second') {
// printContent = medicalRecordSecondPrint.printContent;
// } else {
// printContent = medicalRecordThirdPrint.printContent;
// }
// // 这里可以进行实际的数据替换操作
// printContent = printContent.replace(/\$\{([^}]+)\}/g, (match, expr) => {
// // 简单示例实际应根据expr内容进行数据提取
// return eval(expr); // 注意实际使用中应避免eval这里仅为示例
// });
// // 将内容写入打印窗口并打印
// printWindow.document.write(printContent);
// printWindow.document.close();
};
function handleClick() {
console.log('112313413');
}
const resetFun = (data) => {
Object.keys(data).forEach((key) => {
if (data[key] instanceof Array) {
data[key].length = 0;
} else {
data[key] = '';
}
});
};
// 重置表单
const resetForm = () => {
if (activeName.value == 'first') {
// resetFun(firstRef.value.formData.hospitalInfo);
// resetFun(firstRef.value.formData.patientInfo);
firstRef.value.formData.patientInfo.napl = ''; //籍贯
firstRef.value.formData.patientInfo.certno = ''; //身份证号
firstRef.value.formData.patientInfo.resd_addr = ''; //户口地址
firstRef.value.formData.patientInfo.empr_addr = ''; //工作单位
firstRef.value.formData.patientInfo.coner_name = ''; //联系人
firstRef.value.formData.patientInfo.coner_rlts_code = ''; //关系
firstRef.value.formData.patientInfo.coner_addr = ''; //联系人地址
firstRef.value.formData.patientInfo.coner_tel = ''; //联系人电话
resetFun(firstRef.value.formData.admission);
resetFun(firstRef.value.formData.diagnosis);
resetFun(firstRef.value.formData.medicalInfo);
resetFun(firstRef.value.formData.doctorInfo);
} else if (activeName.value == 'second') {
resetFun(firstRef.value.formData.medicalSecond);
} else {
resetFun(firstRef.value.formData.hospitalization);
resetFun(firstRef.value.formData.medicalServices);
resetFun(firstRef.value.formData.diagnosisClass);
resetFun(firstRef.value.formData.treatmentClass);
resetFun(firstRef.value.formData.recoveryClass);
resetFun(firstRef.value.formData.TCMClass);
resetFun(firstRef.value.formData.WesternClass);
resetFun(firstRef.value.formData.chineseClass);
resetFun(firstRef.value.formData.bloodClass);
resetFun(firstRef.value.formData.consumablesClass);
resetFun(firstRef.value.formData.otherClass);
firstRef.value.formData.tableData_sub.length = 0;
firstRef.value.formData.tableData_top.length = 0;
}
};
//自定义事件更新主数据
const updateCaseFirstDatas = (newDatas) => {
Object.assign(formData, newDatas);
};
const getList = () => {
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
if (res.code == 200) {
console.log('getEncounterDiagnosis=======>', JSON.stringify(res.data));
formDataJs.diagnosisList = res.data;
}
});
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
if (res.code == 200) {
// if (res.data.illness.length > 0) {
// diagnosisNetDatas.value = res.data.illness;
// res.data.illness.forEach((item, index) => {
// form.value.diagnosisList.push({
// name: item.name + '-' + res.data.symptom[index].name,
// ybNo: item.ybNo,
// medTypeCode: item.medTypeCode,
// });
// });
// }
}
});
};
// 点击历史数据回传布局
const setFormData = (data) => {
if (Object.keys(data).length > 0) {
Object.assign(firstRef.value.formData, data);
} else {
resetForm();
}
getList();
};
//保存数据方法
const submit = () => {
/*
{
"encounterId": "1987758365116919809",
"statusEnum": 5,
"busNo": "ZY202511100001",
"inHospitalTime": "2025-11-10 13:47:08",
"outHospitalTime": null,
"patientId": "1981311362744872962",
"patientName": "王海明",
"genderEnum": 0,
"genderEnum_enumText": "男性",
"birthDate": "1999-06-18 00:00:00",
"age": "26岁",
"wardName": "内科病区1",
"houseName": "内科病房2",
"bedName": "002",
"inOrgTime": "2025-11-10 19:36:28",
"inHospitalDays": 2,
"inHospitalOrgId": "1950367917287616513",
"inHospitalOrgName": "住院内科",
"contractNo": "0000",
"contractName": "自费",
"regDiagnosisName": "感冒",
"accountId": "1987759000528809985"
}
*/
// const isOk = verifyMethod(formDataJs);
if (1) {
const cloneParams = cloneDeep(formDataJs);
// 病例二表
const medicalSecondTable = cloneParams.medicalSecond.surgery_tableData.filter((obj) => {
return obj.isChoose;
});
// 病例三表第一张表
const other_tableData = cloneParams.other_tableData.filter((obj) => {
return obj.isChoose;
});
// 病例三表第二张表
const surgery_tableData = cloneParams.surgery_tableData.filter((obj) => {
return obj.isChoose;
});
// 数据整理
let params = {
...cloneParams,
other_tableData,
surgery_tableData,
};
params.medicalSecond.surgery_tableData = medicalSecondTable;
console.log('cloneParams========>', JSON.stringify(params));
emit('submitOk', params);
}
};
// 公共校验方法
const verifyMethod = (data) => {
let message = '';
if (!data) return false;
if (!data.hospitalInfo.orgCode) {
message = '请填写组织机构代码';
} else if (!data.hospitalInfo.medicalPaymentCode) {
message = '请选择医疗付费方式';
} else if (!data.patientInfo.healthCardNo) {
message = '请填写健康卡号';
} else if (!data.patientInfo.patientName) {
message = '请填患者姓名';
} else if (!data.patientInfo.gender) {
message = '请选择患者性别';
} else if (!data.patientInfo.birthDate) {
message = '请选择出生日期';
} else if (!data.patientInfo.age) {
message = '请填写患者年龄';
} else if (!data.patientInfo.nationality) {
message = '请填写国籍';
} else if (!data.patientInfo.nativePlace) {
message = '请填写籍贯';
} else if (!data.patientInfo.ethnicity) {
message = '请填写民族';
} else if (!data.patientInfo.idCardNo) {
message = '请填写身份证号';
} else if (!data.patientInfo.householdAddress) {
message = '请填写户口地址';
} else if (!data.patientInfo.workUnitAddress) {
message = '请填写工作单位及地址';
} else if (!data.patientInfo.contactName) {
message = '请填写联系人姓名';
} else if (!data.patientInfo.contactRelation) {
message = '请填写与联系人关系';
} else if (!data.patientInfo.contactAddress) {
message = '请填写地址';
} else if (!data.patientInfo.contactPhone) {
message = '请填写电话';
} else if (!data.admission.times) {
message = '请填写第几次住院';
} else if (!data.admission.hospitalNo) {
message = '请填写住院号';
} else if (!data.admission.medicalRecordNo) {
message = '请填写病案号';
} else if (!data.admission.admissionRoute) {
message = '请填写入院途径';
} else if (!data.admission.admitTime) {
message = '请填写入院时间';
} else if (!data.admission.department) {
message = '请填写入院科室';
} else if (!data.admission.ward) {
message = '请填写病房';
} else if (!data.admission.confirmDate) {
message = '请填写确诊日期';
} else if (!data.admission.dischargeTime) {
message = '请填写出院时间';
} else if (!data.admission.dischargeDepartment) {
message = '请填写出院科室';
} else if (!data.admission.dischargeWard) {
message = '请填写病房';
} else if (!data.admission.hospitalDays) {
message = '请填写实际住院天数';
} else if (!data.diagnosis.mainDiagnosis) {
message = '请填写主要诊断';
} else if (!data.diagnosis.otherDiagnosis) {
message = '请填写其他诊断';
} else if (!data.medicalInfo.bloodTransfusion) {
message = '请选择是否输血';
} else if (!data.medicalInfo.bloodType) {
message = '请选择血型';
} else if (!data.medicalInfo.rhType) {
message = '请选择rh类型';
} else if (!data.medicalInfo.drugAllergy) {
message = '请选择药物过敏史';
} else if (!data.doctorInfo.departmentDirector) {
message = '请填写科主任';
} else if (!data.doctorInfo.chiefPhysician) {
message = '请填写主任(副主任)医师';
} else if (!data.doctorInfo.attendingPhysician) {
message = '请填写主治医师';
} else if (!data.doctorInfo.residentPhysician) {
message = '请填写住院医师';
} else if (!data.doctorInfo.chargeNurse) {
message = '请填写责任护士';
} else if (!data.doctorInfo.chiefResident) {
message = '请填写住院总医师';
} else if (!data.doctorInfo.intern) {
message = '请填写实习医师';
} else if (!data.doctorInfo.recordQuality) {
message = '请填写病案质量';
} else if (!data.doctorInfo.coder) {
message = '请填写编码员';
} else if (!data.doctorInfo.qualityControlDate) {
message = '请选择质控日期';
} else if (!data.medicalSecond.tableData_top) {
message = '请添加手术操作表';
} else if (!data.medicalSecond.surgeryType) {
message = '请填写手术方式';
} else if (!data.medicalSecond.leaveType) {
message = '请选择离院方式';
} else if (!data.medicalSecond.isPlan) {
message = '请选择是否有出院31天内再住院计划';
} else if (!data.medicalSecond.purpose) {
message = '请填写目的';
} else if (!data.medicalSecond.comaDurationTime_before) {
message = '请选择颅脑损伤患者昏迷时间-入院前';
} else if (!data.medicalSecond.comaDurationTime_after) {
message = '请选择颅脑损伤患者昏迷时间-入院后';
} else if (!data.medicalSecond.tumorStaging) {
message = '请填写肿瘤分期';
} else if (!data.medicalSecond.tumor_T) {
message = '请填写T';
} else if (!data.medicalSecond.tumor_N) {
message = '请填写N';
} else if (!data.medicalSecond.tumor_M) {
message = '请填写M';
} else if (!data.medicalSecond.judgmentBase) {
message = '请填写判断依据';
} else if (!data.medicalSecond.degreeDifferentiation) {
message = '请选择分化程度';
} else if (!data.medicalSecond.enterPath) {
message = '请填写临床路径-进入路径';
} else if (!data.medicalSecond.mutation) {
message = '请选择是否变异';
} else if (!data.medicalSecond.outPath) {
message = '请选择退出路径';
} else if (!data.medicalSecond.nursingLevel_spec) {
message = '请填写特级护理';
} else if (!data.medicalSecond.nursingLevel_1) {
message = '请填写1级护理';
} else if (!data.medicalSecond.nursingLevel_2) {
message = '请填写2级护理';
} else if (!data.medicalSecond.nursingLevel_3) {
message = '请填写3级护理';
} else if (!data.medicalSecond.ventilatorUse) {
message = '请选择是否使用呼吸机使用';
} else if (!data.medicalSecond.ventilatorUseTime) {
message = '请填写有创呼吸机使用时间(小时)';
}
if (message.length > 0) {
ElMessage({
message,
type: 'error',
});
return false;
}
return true;
};
// 打印方法
const printFun = () => {
isShowprintDom.value = true;
nextTick(() => {
recordPrintRef?.value.setData();
previewPrint(recordPrintRef?.value.getDom());
isShowprintDom.value = false;
});
};
defineExpose({
submit,
commpoentType,
setFormData,
printFun,
});
>>>>>>> v1.3
</script>
<style scoped>
@@ -213,7 +860,13 @@ label {
font-size: 14px;
}
<<<<<<< HEAD
input, select, textarea {
=======
input,
select,
textarea {
>>>>>>> v1.3
width: 100%;
padding: 8px;
border: 1px solid #ccc;
@@ -234,7 +887,12 @@ textarea {
margin-top: 30px;
}
<<<<<<< HEAD
.print-btn, .reset-btn {
=======
.print-btn,
.reset-btn {
>>>>>>> v1.3
padding: 10px 20px;
margin: 0 10px;
border: none;
@@ -244,7 +902,11 @@ textarea {
}
.print-btn {
<<<<<<< HEAD
background-color: #4CAF50;
=======
background-color: #4caf50;
>>>>>>> v1.3
color: white;
}
@@ -275,4 +937,8 @@ textarea {
margin: 2cm;
}
}
</style>
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,289 @@
<template>
<div class="assessment-page">
<div class="page-container">
<!-- 医院头部 -->
<div class="hospital-header">
<h1 class="hospital-name">
<span class="hospital-text">长春市朝阳区中医院</span>
</h1>
</div>
<!-- 页面标题 -->
<h2 class="form-title">住院病人风险评估表</h2>
<!-- 表单卡片 -->
<el-form :model="formData" label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="科室" label-position="top">
<el-input v-model="formData.department" readonly="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="床号" label-position="top" class="comment-padding">
<el-input v-model="formData.bedNo" readonly="true"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="住院号" label-position="top" class="comment-padding">
<el-input v-model="formData.busNo" readonly="true"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="姓名" label-position="top">
<el-input
v-model="formData.patientName"
readonly="true"
class="auto-resize-input"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性别" label-position="top" class="comment-padding">
<el-input
v-model="formData.gender"
readonly="true"
class="auto-resize-input"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="年龄" label-position="top" class="comment-padding">
<el-input v-model="formData.age" readonly="true" class="auto-resize-input"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="病情简介" label-position="top">
<el-input
type="textarea"
v-model="formData.adm_cond"
:autosize="{ minRows: 1, maxRows: 100 }"
class="full-width-textarea"
></el-input>
</el-form-item>
<el-form-item label="可能发生的不良后果及预后" label-position="top">
<el-input
type="textarea"
v-model="formData.effectless"
:autosize="{ minRows: 1, maxRows: 100 }"
class="full-width-textarea"
></el-input>
</el-form-item>
<el-form-item label="评估等级" label-position="top">
<el-radio-group v-model="formData.evalLevel">
<el-radio label="一般">一般</el-radio>
<el-radio label="病重">病重</el-radio>
<el-radio label="病危">病危</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="护理等级" label-position="top">
<el-radio-group v-model="formData.nurseLevel">
<el-radio label="特级护理">特级护理</el-radio>
<el-radio label="一级护理">一级护理</el-radio>
<el-radio label="二级护理">二级护理</el-radio>
<el-radio label="三级护理">三级护理</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="收集资料时间:">
<span class="date-display">{{ currentDate }}</span>
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item label="评估医师签名:">
<el-input
disabled
v-model="formData.sign_doc"
:autosize="{ minRows: 1 }"
class="auto-resize-input"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="主治医师签名:" class="comment-padding">
<el-input
v-model="formData.sign_maindoc"
:autosize="{ minRows: 1 }"
class="auto-resize-input"
></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="科主任签名:" class="comment-padding">
<el-input
v-model="formData.sign_leader"
:autosize="{ minRows: 1 }"
class="auto-resize-input"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<inAssessmentForm v-if="isShowprintDom" ref="recordPrintRef"></inAssessmentForm>
</template>
<script setup>
import { computed, onMounted, nextTick, reactive, ref } from 'vue';
import inAssessmentForm from '../views/hospitalRecord/components/inAssessmentForm.vue';
import useUserStore from '@/store/modules/user';
import { previewPrint } from '../utils/printUtils';
defineOptions({
name: 'InHospitalCaseForm',
});
const isShowprintDom = ref(false);
const recordPrintRef = ref();
const props = defineProps({
patientInfo: {
type: Object,
required: true,
},
});
const patient = props.patientInfo;
const userStore = useUserStore();
// 表单数据 - 修复:将 formData 定义移到 patient 之后
const formData = reactive({
department: patient?.inHospitalOrgName || '',
bedNo: patient?.bedName || '',
busNo: patient?.busNo || '',
patientName: patient?.patientName || '',
gender: patient?.genderEnum_enumText || '',
age: patient?.age || '',
adm_cond: '',
effectless: '',
evalLevel: '',
nurseLevel: '',
sign_doc: userStore.nickName || '',
sign_maindoc: '',
sign_leader: '',
});
// 当前日期YYYY-MM-DD
const currentDate = computed(() => {
const d = new Date();
const yyyy = d.getFullYear();
const mm = String(d.getMonth() + 1).padStart(2, '0');
const dd = String(d.getDate()).padStart(2, '0');
return `${yyyy}-${mm}-${dd}`;
});
//表单引用
const formRef = ref(null);
//提交表单
const submit = () => {
// 如果需要表单验证,可以使用以下代码
// formRef.value.validate((valid) => {
// if (valid) {
// emits('submitOk', formData);
// }
// });
// 简化版本:
emits('submitOk', formData);
};
//表单数据赋值
const setFormData = (data) => {
if (data) {
Object.assign(formData, data);
}
};
// 定义 emits
const emits = defineEmits(['submitOk']);
onMounted(() => {
// 页面加载完成后触发一次 resize 事件,确保输入框高度正确
setTimeout(() => {
window.dispatchEvent(new Event('resize'));
}, 100);
console.log('@@@@@=======>', JSON.stringify(props.patientInfo));
});
// 打印方法
const printFun = () => {
console.log('入院记录打印');
isShowprintDom.value = true;
nextTick(() => {
recordPrintRef?.value.setData(formData);
nextTick(() => {
previewPrint(recordPrintRef?.value.getDom());
isShowprintDom.value = false;
});
});
};
//暴露接口
defineExpose({ formData, submit, setFormData, printFun });
</script>
<style scoped>
/* ===== 页面容器与背景 ===== */
.comment-padding {
padding-left: 10px;
}
.assessment-page {
font-family: 'Microsoft YaHei', 宋体, sans-serif;
width: 100%;
}
.page-container {
width: 100%;
}
/* ===== 医院头部 ===== */
.hospital-header {
display: flex;
align-items: center;
justify-content: center;
margin-top: 40px;
}
.hospital-name {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-size: 1.5rem;
font-weight: 700;
color: #1f2937;
margin: 0;
}
.hospital-text {
line-height: 1;
}
/* ===== 表单标题与操作 ===== */
.form-title {
margin-top: 10px;
font-size: 1.25rem;
font-weight: 600;
text-align: center;
margin: 1.25rem 0;
color: #1f2937;
}
/* ===== 表单卡片 ===== */
.form-card {
border: 1px solid #e5e7eb;
border-radius: 4px;
}
/* ===== Textarea 自动扩展样式 ===== */
.full-width-textarea {
width: 100%;
}
:deep(.full-width-textarea textarea) {
overflow: hidden;
resize: none;
min-height: auto;
}
/* ===== 日期显示 ===== */
.date-display {
font-size: 0.95rem;
color: #666;
}
</style>

View File

@@ -1,7 +1,14 @@
<template>
<div class="medical-form">
<<<<<<< HEAD
<h2 style="text-align: center;">{{ userStore.hospitalName || '长春市朝阳区中医院' }} -入院记录</h2>
=======
<h2 style="text-align: center">
{{ userStore.hospitalName || '长春市朝阳区中医院' }} -入院记录
</h2>
>>>>>>> v1.3
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
<el-form
@@ -16,6 +23,7 @@
<h4 class="section-title">基础信息</h4>
<div class="adaptive-grid form-section">
<el-form-item label="姓名" prop="patientName" class="grid-item required">
<<<<<<< HEAD
<el-input
v-model="formData.patientName"
placeholder="请输入姓名"
@@ -31,21 +39,35 @@
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择" style="width: 100%;">
=======
<el-input v-model="formData.patientName" placeholder="请输入姓名" clearable />
</el-form-item>
<el-form-item label="住院号" prop="hospitalNo" class="grid-item required">
<el-input v-model="formData.hospitalNo" placeholder="请输入住院号" clearable />
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择" style="width: 100%">
>>>>>>> v1.3
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
</el-form-item>
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
<<<<<<< HEAD
<el-input
v-model.number="formData.age"
placeholder="请输入年龄"
clearable
/>
=======
<el-input v-model.number="formData.age" placeholder="请输入年龄" clearable />
>>>>>>> v1.3
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="民族" prop="nation" class="grid-item">
<<<<<<< HEAD
<el-input
v-model="formData.nation"
placeholder="请输入民族"
@@ -61,12 +83,27 @@
</el-form-item>
<el-form-item label="婚姻状况" prop="marriage" class="grid-item">
<el-select v-model="formData.marriage" placeholder="请选择" clearable style="width: 100%;">
=======
<el-input v-model="formData.nation" placeholder="请输入民族" clearable />
</el-form-item>
<el-form-item label="职业" prop="occupation" class="grid-item">
<el-input v-model="formData.occupation" placeholder="请输入职业" clearable />
</el-form-item>
<el-form-item label="婚姻状况" prop="marriage" class="grid-item">
<el-select
v-model="formData.marriage"
placeholder="请选择"
clearable
style="width: 100%"
>
>>>>>>> v1.3
<el-option label="已婚" value="已婚"></el-option>
<el-option label="未婚" value="未婚"></el-option>
<el-option label="离异" value="离异"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出生地" prop="birthplace" class="grid-item">
<<<<<<< HEAD
<el-input
v-model="formData.birthplace"
placeholder="请输入出生地"
@@ -100,6 +137,33 @@
</el-form-item>
<el-form-item label="可靠程度" prop="reliability" class="grid-item">
<el-select v-model="formData.reliability" placeholder="请选择" style="width: 100%;">
=======
<el-input v-model="formData.birthplace" placeholder="请输入出生地" clearable />
</el-form-item>
<el-form-item label="入院时间" prop="admissionTime" class="grid-item required">
<el-date-picker
v-model="formData.admissionTime"
type="datetime"
placeholder="选择入院时间"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="记录时间" prop="recordTime" class="grid-item required">
<el-date-picker
v-model="formData.recordTime"
type="datetime"
placeholder="选择记录时间"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="病史陈述者" prop="historyReporter" class="grid-item">
<el-input v-model="formData.historyReporter" placeholder="请输入陈述者" clearable />
</el-form-item>
<el-form-item label="可靠程度" prop="reliability" class="grid-item">
<el-select v-model="formData.reliability" placeholder="请选择" style="width: 100%">
>>>>>>> v1.3
<el-option label="可靠" value="可靠"></el-option>
<el-option label="基本可靠" value="基本可靠"></el-option>
<el-option label="不可靠" value="不可靠"></el-option>
@@ -111,76 +175,137 @@
<h4 class="section-title">病史信息</h4>
<div class="form-section">
<el-form-item label="主诉" prop="complaint" class="history-item required">
<<<<<<< HEAD
<el-input
v-model="formData.complaint"
type="textarea"
placeholder="请输入主诉"
=======
<el-input
v-model="formData.complaint"
type="textarea"
placeholder="请输入主诉"
>>>>>>> v1.3
autosize
maxlength="200"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="现病史" prop="presentIllness" class="history-item">
<el-input
v-model="formData.presentIllness"
type="textarea"
placeholder="请详细描述现病史"
=======
<el-form-item label="现病史" prop="presentIllness" class="history-item">
<el-input
v-model="formData.presentIllness"
type="textarea"
placeholder="请详细描述现病史"
>>>>>>> v1.3
autosize
maxlength="1000"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="既往史" prop="pastHistory" class="history-item">
<el-input
v-model="formData.pastHistory"
type="textarea"
placeholder="请输入既往史"
=======
<el-form-item label="既往史" prop="pastHistory" class="history-item">
<el-input
v-model="formData.pastHistory"
type="textarea"
placeholder="请输入既往史"
>>>>>>> v1.3
autosize
maxlength="800"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="个人史" prop="personalHistory" class="history-item">
<el-input
v-model="formData.personalHistory"
type="textarea"
placeholder="请输入个人史"
=======
<el-form-item label="个人史" prop="personalHistory" class="history-item">
<el-input
v-model="formData.personalHistory"
type="textarea"
placeholder="请输入个人史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="婚育史" prop="maritalHistory" class="history-item">
<el-input
v-model="formData.maritalHistory"
type="textarea"
placeholder="请输入婚育史"
=======
<el-form-item label="婚育史" prop="maritalHistory" class="history-item">
<el-input
v-model="formData.maritalHistory"
type="textarea"
placeholder="请输入婚育史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="月经史" prop="menstrualHistory" class="history-item">
<el-input
v-model="formData.menstrualHistory"
type="textarea"
placeholder="请输入月经史"
=======
<el-form-item label="月经史" prop="menstrualHistory" class="history-item">
<el-input
v-model="formData.menstrualHistory"
type="textarea"
placeholder="请输入月经史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="家族史" prop="familyHistory" class="history-item">
<el-input
v-model="formData.familyHistory"
type="textarea"
placeholder="请输入家族史"
=======
<el-form-item label="家族史" prop="familyHistory" class="history-item">
<el-input
v-model="formData.familyHistory"
type="textarea"
placeholder="请输入家族史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
@@ -192,10 +317,17 @@
<h4 class="section-title">中医望闻问切</h4>
<div class="form-section">
<el-form-item label="望闻问切" prop="tcmInfo" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.tcmInfo"
type="textarea"
placeholder="请输入中医望闻问切结果"
=======
<el-input
v-model="formData.tcmInfo"
type="textarea"
placeholder="请输入中医望闻问切结果"
>>>>>>> v1.3
autosize
maxlength="600"
show-word-limit
@@ -209,16 +341,25 @@
<div class="adaptive-grid">
<el-form-item label="体温" prop="temp" class="grid-item">
<div class="input-with-unit">
<<<<<<< HEAD
<el-input
v-model.number="formData.temp"
type="number"
step="0.1"
placeholder="如36.0"
=======
<el-input
v-model.number="formData.temp"
type="number"
step="0.1"
placeholder="如36.0"
>>>>>>> v1.3
clearable
/>
<span class="unit"></span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="脉搏" prop="pulse" class="grid-item">
<div class="input-with-unit">
@@ -226,11 +367,21 @@
v-model.number="formData.pulse"
type="number"
placeholder="如76"
=======
<el-form-item label="脉搏" prop="pulse" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.pulse"
type="number"
placeholder="如76"
>>>>>>> v1.3
clearable
/>
<span class="unit">/</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="呼吸" prop="respiration" class="grid-item">
<div class="input-with-unit">
@@ -238,23 +389,42 @@
v-model.number="formData.respiration"
type="number"
placeholder="如16"
=======
<el-form-item label="呼吸" prop="respiration" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.respiration"
type="number"
placeholder="如16"
>>>>>>> v1.3
clearable
/>
<span class="unit">/</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="血压" prop="bp" class="grid-item">
<div class="input-with-unit">
<el-input
v-model="formData.bp"
placeholder="如188/94"
=======
<el-form-item label="血压" prop="bp" class="grid-item">
<div class="input-with-unit">
<el-input
v-model="formData.bp"
placeholder="如188/94"
>>>>>>> v1.3
clearable
@blur="validateBloodPressure"
/>
<span class="unit">mmHg</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="身高" prop="height" class="grid-item">
<div class="input-with-unit">
@@ -262,11 +432,21 @@
v-model.number="formData.height"
type="number"
placeholder="如165"
=======
<el-form-item label="身高" prop="height" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.height"
type="number"
placeholder="如165"
>>>>>>> v1.3
clearable
/>
<span class="unit">cm</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="体重" prop="weight" class="grid-item">
<div class="input-with-unit">
@@ -274,11 +454,21 @@
v-model.number="formData.weight"
type="number"
placeholder="如79"
=======
<el-form-item label="体重" prop="weight" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.weight"
type="number"
placeholder="如79"
>>>>>>> v1.3
clearable
/>
<span class="unit">kg</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="BMI" prop="bmi" class="grid-item">
<div class="input-with-unit">
@@ -287,60 +477,109 @@
placeholder="如29.02"
readonly
/>
=======
<el-form-item label="BMI" prop="bmi" class="grid-item">
<div class="input-with-unit">
<el-input v-model="formData.bmi" placeholder="如29.02" readonly />
>>>>>>> v1.3
<span class="unit">kg/</span>
</div>
</el-form-item>
</div>
<el-form-item label="一般情况" prop="general" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.general"
type="textarea"
placeholder="请输入一般情况"
=======
<el-input
v-model="formData.general"
type="textarea"
placeholder="请输入一般情况"
>>>>>>> v1.3
autosize
maxlength="300"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="皮肤粘膜" prop="skin" class="history-item">
<el-input
v-model="formData.skin"
type="textarea"
placeholder="请输入皮肤粘膜情况"
=======
<el-form-item label="皮肤粘膜" prop="skin" class="history-item">
<el-input
v-model="formData.skin"
type="textarea"
placeholder="请输入皮肤粘膜情况"
>>>>>>> v1.3
autosize
maxlength="300"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="胸部(心、肺)" prop="chest" class="history-item">
<el-input
v-model="formData.chest"
type="textarea"
placeholder="请输入胸部检查结果"
=======
<el-form-item label="胸部(心、肺)" prop="chest" class="history-item">
<el-input
v-model="formData.chest"
type="textarea"
placeholder="请输入胸部检查结果"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="腹部" prop="abdomen" class="history-item">
<el-input
v-model="formData.abdomen"
type="textarea"
placeholder="请输入腹部检查结果"
=======
<el-form-item label="腹部" prop="abdomen" class="history-item">
<el-input
v-model="formData.abdomen"
type="textarea"
placeholder="请输入腹部检查结果"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="四肢/神经系统" prop="limbsNervous" class="history-item">
<el-input
v-model="formData.limbsNervous"
type="textarea"
placeholder="请输入四肢及神经系统检查结果"
=======
<el-form-item label="四肢/神经系统" prop="limbsNervous" class="history-item">
<el-input
v-model="formData.limbsNervous"
type="textarea"
placeholder="请输入四肢及神经系统检查结果"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
@@ -352,10 +591,17 @@
<h4 class="section-title">辅助检查</h4>
<div class="form-section">
<el-form-item label="检查结果" prop="auxExam" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.auxExam"
type="textarea"
placeholder="请输入辅助检查结果"
=======
<el-input
v-model="formData.auxExam"
type="textarea"
placeholder="请输入辅助检查结果"
>>>>>>> v1.3
autosize
maxlength="1000"
show-word-limit
@@ -367,21 +613,37 @@
<h4 class="section-title">初步诊断</h4>
<div class="form-section">
<el-form-item label="中医诊断" prop="tcmDiagnosis" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.tcmDiagnosis"
type="textarea"
placeholder="如:胸痹心痛(气阴两虚证)"
=======
<el-input
v-model="formData.tcmDiagnosis"
type="textarea"
placeholder="如:胸痹心痛(气阴两虚证)"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="西医诊断" prop="westernDiagnosis" class="history-item">
<el-input
v-model="formData.westernDiagnosis"
type="textarea"
placeholder="如1.冠状动脉粥样硬化性心脏病"
=======
<el-form-item label="西医诊断" prop="westernDiagnosis" class="history-item">
<el-input
v-model="formData.westernDiagnosis"
type="textarea"
placeholder="如1.冠状动脉粥样硬化性心脏病"
>>>>>>> v1.3
autosize
maxlength="800"
show-word-limit
@@ -391,6 +653,7 @@
<!-- 7. 签名信息三列布局 -->
<h4 class="section-title">签名信息</h4>
<<<<<<< HEAD
<div class="adaptive-grid form-section" style="grid-template-columns: repeat(3, 1fr);">
<el-form-item label="医师签名" prop="doctorSign" class="grid-item">
<el-input
@@ -415,6 +678,24 @@
placeholder="选择日期"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%;"
=======
<div class="adaptive-grid form-section" style="grid-template-columns: repeat(3, 1fr)">
<el-form-item label="医师签名" prop="doctorSign" class="grid-item">
<el-input v-model="formData.doctorSign" placeholder="请签名" clearable />
</el-form-item>
<el-form-item label="上级医师签名" prop="superiorSign" class="grid-item">
<el-input v-model="formData.superiorSign" placeholder="请签名" clearable />
</el-form-item>
<el-form-item label="记录日期" prop="signDate" class="grid-item">
<el-date-picker
v-model="formData.signDate"
type="datetime"
placeholder="选择日期"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%"
>>>>>>> v1.3
/>
</el-form-item>
</div>
@@ -426,16 +707,42 @@
</el-form>
</div>
</div>
<<<<<<< HEAD
=======
<admissionRecord v-if="isShowprintDom" ref="recordPrintRef"></admissionRecord>
>>>>>>> v1.3
</template>
<script setup>
import { ref, reactive, watch, onMounted } from 'vue';
<<<<<<< HEAD
import { ElInput, ElSelect, ElOption, ElDatePicker, ElButton, ElMessage, ElMessageBox, ElForm, ElFormItem } from 'element-plus';
import useUserStore from '../store/modules/user';
defineOptions({
name: 'InHospitalRecord',
components: { ElInput, ElSelect, ElOption, ElDatePicker, ElButton, ElForm, ElFormItem }
=======
import { previewPrint } from '../utils/printUtils';
import admissionRecord from '../views/hospitalRecord/components/admissionRecord.vue';
import {
ElInput,
ElSelect,
ElOption,
ElDatePicker,
ElButton,
ElMessage,
ElMessageBox,
ElForm,
ElFormItem,
} from 'element-plus';
import useUserStore from '../store/modules/user';
const isShowprintDom = ref(false);
const recordPrintRef = ref();
defineOptions({
name: 'InHospitalRecord',
components: { ElInput, ElSelect, ElOption, ElDatePicker, ElButton, ElForm, ElFormItem },
>>>>>>> v1.3
});
// Props与事件
@@ -461,6 +768,7 @@ const formData = reactive({
gender: patient?.genderEnum_enumText || '',
age: patient?.age || '',
nation: '',
<<<<<<< HEAD
occupation: '',// 职业
marriage: '',// 婚姻状况
birthplace: '',// 出生地
@@ -481,6 +789,28 @@ const formData = reactive({
// 中医信息
tcmInfo: '',
=======
occupation: '', // 职业
marriage: '', // 婚姻状况
birthplace: '', // 出生地
admissionTime: '', // 入院时间
recordTime: '', // 记录时间
historyReporter: '', // 病史陈述者
reliability: '可靠', // 可靠程度
// 病史信息
complaint: '', // 主诉
presentIllness: '', // 现病史
pastIllness: '', // 既往史
personalHistory: '', // 个人史
allergyHistory: '', // 过敏史
pastHistory: '', // 既往史
familyHistory: '', // 家族史
maritalHistory: '', // 婚姻史
menstrualHistory: '', // 月经史
// 中医信息
tcmInfo: '',
>>>>>>> v1.3
// 体格检查
temp: '',
pulse: '',
@@ -494,6 +824,7 @@ const formData = reactive({
chest: '',
abdomen: '',
limbsNervous: '',
<<<<<<< HEAD
// 辅助检查
auxExam: '',
@@ -506,10 +837,25 @@ const formData = reactive({
doctorSign: '',
superiorSign: '',
signDate: ''
=======
// 辅助检查
auxExam: '',
// 诊断信息
tcmDiagnosis: '',
westernDiagnosis: '',
// 签名信息
doctorSign: '',
superiorSign: '',
signDate: '',
>>>>>>> v1.3
});
// 表单校验规则
const rules = reactive({
<<<<<<< HEAD
name: [
{ required: true, message: '请填写姓名', trigger: ['blur', 'submit'] }
],
@@ -532,6 +878,24 @@ const rules = reactive({
chiefComplaint: [
{ required: true, message: '请填写主诉', trigger: ['blur', 'submit'] }
]
=======
name: [{ required: true, message: '请填写姓名', trigger: ['blur', 'submit'] }],
hospitalNo: [{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }],
gender: [{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }],
age: [
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
{
type: 'number',
min: 1,
max: 120,
message: '年龄需在1-120岁之间',
trigger: ['blur', 'submit'],
},
],
admissionTime: [{ required: true, message: '请选择入院时间', trigger: ['change', 'submit'] }],
recordTime: [{ required: true, message: '请选择记录时间', trigger: ['change', 'submit'] }],
chiefComplaint: [{ required: true, message: '请填写主诉', trigger: ['blur', 'submit'] }],
>>>>>>> v1.3
});
// 生命周期
@@ -548,11 +912,19 @@ onMounted(() => {
}
if (!formData.patientName) {
formData.patientName = patient?.patientName || '';
<<<<<<< HEAD
}
if (!formData.gender) {
formData.gender = patient?.genderEnum_enumText || '';
}
if (!formData.age) {
=======
}
if (!formData.gender) {
formData.gender = patient?.genderEnum_enumText || '';
}
if (!formData.age) {
>>>>>>> v1.3
formData.age = patient?.age || '';
}
if (!formData.hospitalNo) {
@@ -571,6 +943,7 @@ watch([() => formData.height, () => formData.weight], ([newHeight, newWeight]) =
});
// 入院时间变化处理
<<<<<<< HEAD
watch(() => formData.admissionTime, (val) => {
if (val && !formData.recordTime) {
ElMessageBox.confirm(
@@ -586,6 +959,24 @@ watch(() => formData.admissionTime, (val) => {
}).catch(() => {});
}
});
=======
watch(
() => formData.admissionTime,
(val) => {
if (val && !formData.recordTime) {
ElMessageBox.confirm('是否将记录时间同步为入院时间?', '时间同步提示', {
confirmButtonText: '同步',
cancelButtonText: '手动设置',
type: 'info',
})
.then(() => {
formData.recordTime = val;
})
.catch(() => {});
}
}
);
>>>>>>> v1.3
// 血压格式校验
const validateBloodPressure = () => {
@@ -607,7 +998,11 @@ const submit = () => {
validateBloodPressure();
if (!formData.bp) return; // 格式错误时终止提交
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
emits('submitOk', formData);
ElMessage.success('记录保存成功!');
}
@@ -616,6 +1011,7 @@ const submit = () => {
// 新增:重置表单方法(带确认提示)
const handleReset = () => {
<<<<<<< HEAD
ElMessageBox.confirm(
'确定要重置表单吗?所有已填写内容将被清空,且不可恢复',
'重置确认',
@@ -645,6 +1041,35 @@ const handleReset = () => {
// 取消重置提示
ElMessage.info('已取消表单重置');
});
=======
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空,且不可恢复', '重置确认', {
confirmButtonText: '确认重置',
cancelButtonText: '取消',
type: 'warning',
center: true,
})
.then(() => {
// 执行表单重置
formRef.value.resetFields();
// 保留患者基础信息和默认值(避免清空关键基础数据)
formData.patientName = patient?.name || '';
formData.hospitalNo = patient?.busNo || '';
formData.gender = patient?.genderEnum_enumText || '';
formData.age = patient?.age || '';
formData.reliability = '可靠';
// 重置时间为当前时间
const today = new Date();
formData.admissionTime = formatDateTime(today);
formData.recordTime = formatDateTime(today);
formData.signDate = formatDateTime(today);
// 重置成功提示
ElMessage.success('表单已成功重置');
})
.catch(() => {
// 取消重置提示
ElMessage.info('已取消表单重置');
});
>>>>>>> v1.3
};
// 表单数据赋值
@@ -664,8 +1089,26 @@ const formatDateTime = (date) => {
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
// 暴露接口
defineExpose({ formData, submit, setFormData, handleReset });
=======
// 打印方法
const printFun = () => {
console.log('入院记录打印');
isShowprintDom.value = true;
nextTick(() => {
recordPrintRef?.value.setData(formData);
nextTick(() => {
previewPrint(recordPrintRef?.value.getDom());
isShowprintDom.value = false;
});
});
};
// 暴露接口
defineExpose({ formData, submit, setFormData, handleReset, printFun });
>>>>>>> v1.3
</script>
<style scoped>
@@ -673,8 +1116,12 @@ defineExpose({ formData, submit, setFormData, handleReset });
.medical-form {
max-width: 1200px;
width: 100%;
<<<<<<< HEAD
height: 700px;
margin: 15px auto;
=======
height: 28000px;
>>>>>>> v1.3
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
@@ -810,7 +1257,12 @@ defineExpose({ formData, submit, setFormData, handleReset });
.adaptive-grid {
grid-template-columns: 1fr; /* 小屏幕下单列显示 */
}
<<<<<<< HEAD
.grid-item, .history-item {
=======
.grid-item,
.history-item {
>>>>>>> v1.3
margin-bottom: 10px;
}
/* 小屏幕按钮居中 */
@@ -825,4 +1277,8 @@ defineExpose({ formData, submit, setFormData, handleReset });
grid-template-columns: repeat(2, 1fr); /* 中等屏幕下两列显示 */
}
}
</style>
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -14,7 +14,11 @@
label-width="120px"
label-align="left"
class="doc-content"
<<<<<<< HEAD
style="height: 60vh; overflow: scroll;"
=======
style="height: 60vh; overflow: scroll"
>>>>>>> v1.3
>
<!-- 患者与手术基础信息 -->
<section class="doc-section">
@@ -23,13 +27,18 @@
<el-form-item label="患者姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择性别">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
@@ -46,6 +55,24 @@
<el-input v-model="formData.bedNo" placeholder="如502-03" clearable />
</el-form-item>
=======
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
<el-input v-model.number="formData.age" placeholder="请输入年龄" />
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="科室" prop="department" class="grid-item required">
<el-input v-model="formData.department" placeholder="如:普外科" clearable />
</el-form-item>
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
<el-input v-model="formData.bedNo" placeholder="如502-03" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="手术日期/时间" prop="operationDateTime" class="grid-item required">
<el-date-picker
v-model="formData.operationDateTime"
@@ -64,6 +91,7 @@
<el-form-item label="手术者" prop="surgeon" class="grid-item required">
<el-input v-model="formData.surgeon" placeholder="主刀医师姓名" clearable />
</el-form-item>
<<<<<<< HEAD
<el-form-item label="第一助手" prop="firstAssistant" class="grid-item required">
<el-input v-model="formData.firstAssistant" placeholder="第一助手姓名" clearable />
@@ -81,6 +109,25 @@
<el-input v-model="formData.circulatingNurse" placeholder="巡回护士姓名" clearable />
</el-form-item>
=======
<el-form-item label="第一助手" prop="firstAssistant" class="grid-item required">
<el-input v-model="formData.firstAssistant" placeholder="第一助手姓名" clearable />
</el-form-item>
<el-form-item label="第二助手" prop="secondAssistant" class="grid-item">
<el-input v-model="formData.secondAssistant" placeholder="第二助手姓名" clearable />
</el-form-item>
<el-form-item label="麻醉医师" prop="anesthesiologist" class="grid-item required">
<el-input v-model="formData.anesthesiologist" placeholder="麻醉医师姓名" clearable />
</el-form-item>
<el-form-item label="巡回护士" prop="circulatingNurse" class="grid-item required">
<el-input v-model="formData.circulatingNurse" placeholder="巡回护士姓名" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="器械护士" prop="scrubNurse" class="grid-item required">
<el-input v-model="formData.scrubNurse" placeholder="器械护士姓名" clearable />
</el-form-item>
@@ -90,11 +137,23 @@
<!-- 手术详情 -->
<section class="doc-section">
<h2 class="section-title">手术详情</h2>
<<<<<<< HEAD
<el-form-item label="手术名称" prop="operationName" class="full-width-item required">
<el-input v-model="formData.operationName" placeholder="规范手术名称(如:腹腔镜下胆囊切除术)" clearable />
</el-form-item>
=======
<el-form-item label="手术名称" prop="operationName" class="full-width-item required">
<el-input
v-model="formData.operationName"
placeholder="规范手术名称(如:腹腔镜下胆囊切除术)"
clearable
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="手术方式" prop="operationMethod" class="full-width-item required">
<el-select v-model="formData.operationMethod" placeholder="选择手术方式">
<el-option label="开放手术" value="开放手术" />
@@ -102,12 +161,29 @@
<el-option label="介入手术" value="介入手术" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="手术入路" prop="surgicalApproach" class="full-width-item required">
<el-input v-model="formData.surgicalApproach" placeholder="如:右上腹经腹直肌切口" clearable />
</el-form-item>
<el-form-item label="术中发现" prop="intraoperativeFindings" class="full-width-item required">
=======
<el-form-item label="手术入路" prop="surgicalApproach" class="full-width-item required">
<el-input
v-model="formData.surgicalApproach"
placeholder="如:右上腹经腹直肌切口"
clearable
/>
</el-form-item>
<el-form-item
label="术中发现"
prop="intraoperativeFindings"
class="full-width-item required"
>
>>>>>>> v1.3
<el-input
v-model="formData.intraoperativeFindings"
type="textarea"
@@ -117,7 +193,11 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="手术过程" prop="operationProcess" class="full-width-item required">
<el-input
v-model="formData.operationProcess"
@@ -136,17 +216,30 @@
<div class="adaptive-grid">
<el-form-item label="术中出血量" prop="bloodLoss" class="grid-item required">
<div class="input-with-unit">
<<<<<<< HEAD
<el-input v-model.number="formData.bloodLoss" type="number" placeholder="请输入出血量" />
<span class="unit">ml</span>
</div>
</el-form-item>
=======
<el-input
v-model.number="formData.bloodLoss"
type="number"
placeholder="请输入出血量"
/>
<span class="unit">ml</span>
</div>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="输血情况" prop="bloodTransfusion" class="grid-item">
<el-select v-model="formData.bloodTransfusion" placeholder="是否输血">
<el-option label="是" value="是" />
<el-option label="否" value="否" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="引流管放置" prop="drainageTube" class="grid-item">
<el-input v-model="formData.drainageTube" placeholder="如腹腔引流管1根" clearable />
@@ -156,6 +249,21 @@
<el-input v-model="formData.specimenDisposal" placeholder="如:胆囊标本送病理检查" clearable />
</el-form-item>
=======
<el-form-item label="引流管放置" prop="drainageTube" class="grid-item">
<el-input v-model="formData.drainageTube" placeholder="如腹腔引流管1根" clearable />
</el-form-item>
<el-form-item label="标本处理" prop="specimenDisposal" class="grid-item required">
<el-input
v-model="formData.specimenDisposal"
placeholder="如:胆囊标本送病理检查"
clearable
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="手术结束时间" prop="operationEndTime" class="grid-item required">
<el-date-picker
v-model="formData.operationEndTime"
@@ -164,7 +272,11 @@
value-format="YYYY-MM-DD HH:mm"
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="患者去向" prop="patientDestination" class="grid-item required">
<el-select v-model="formData.patientDestination" placeholder="选择去向">
<el-option label="ICU" value="ICU" />
@@ -177,24 +289,43 @@
<!-- 签署区域 -->
<section class="doc-section">
<h2 class="section-title">签署确认</h2>
<<<<<<< HEAD
<div class="adaptive-grid signature-area" style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));">
=======
<div
class="adaptive-grid signature-area"
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
>
>>>>>>> v1.3
<el-form-item label="手术者签名" prop="surgeonSignature" class="grid-item required">
<el-input v-model="formData.surgeonSignature" placeholder="主刀医师签字" clearable />
<div class="signature-tip">请手术者亲笔签名</div>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="记录者签名" prop="recorderSignature" class="grid-item required">
<el-input v-model="formData.recorderSignature" placeholder="记录者签字" clearable />
<div class="signature-tip">请记录者如第一助手签字</div>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="记录日期" prop="recordDate" class="grid-item required">
<el-date-picker
v-model="formData.recordDate"
type="date"
placeholder="选择记录日期"
value-format="YYYY-MM-DD"
<<<<<<< HEAD
style="width: 100%;"
=======
style="width: 100%"
>>>>>>> v1.3
/>
</el-form-item>
</div>
@@ -208,16 +339,42 @@
<el-button type="warning" @click="handleReset">重置表单</el-button>
</div>
</div>
<<<<<<< HEAD
=======
<intOperRecordSheet v-if="isShowprintDom" ref="recordPrintRef"></intOperRecordSheet>
>>>>>>> v1.3
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue';
<<<<<<< HEAD
import { ElMessage, ElMessageBox, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElDatePicker, ElButton } from 'element-plus';
// 医院名称
const hospitalName = '长春市朝阳区中医院';
defineOptions({
name: 'iInHospitalSurgicalRecord'
=======
import intOperRecordSheet from '../views/hospitalRecord/components/intOperRecordSheet.vue';
import {
ElMessage,
ElMessageBox,
ElForm,
ElFormItem,
ElInput,
ElSelect,
ElOption,
ElDatePicker,
ElButton,
} from 'element-plus';
import { previewPrint } from '../utils/printUtils';
const isShowprintDom = ref(false);
const recordPrintRef = ref();
// 医院名称
const hospitalName = '长春市朝阳区中医院';
defineOptions({
name: 'iInHospitalSurgicalRecord',
>>>>>>> v1.3
});
// 表单引用
const formRef = ref(null);
@@ -231,6 +388,7 @@ const formData = reactive({
age: '',
department: '',
bedNo: '',
<<<<<<< HEAD
operationDateTime: '',// 手术日期时间
// 手术团队信息
@@ -338,6 +496,95 @@ const rules = reactive({
recordDate: [
{ required: true, message: '请选择记录日期', trigger: ['change', 'submit'] }
]
=======
operationDateTime: '', // 手术日期时间
// 手术团队信息
surgeon: '', // 主刀医师
firstAssistant: '', // 第一助手
secondAssistant: '', // 第二助手
anesthesiologist: '', // 麻醉医师
circulatingNurse: '', // 巡回护士
scrubNurse: '', // 器械护士
// 手术详情
operationName: '', // 规范手术名称
operationMethod: '', // 手术方式
surgicalApproach: '', // 手术入路
intraoperativeFindings: '', // 术中发现
operationProcess: '', // 手术过程
// 术后情况
bloodLoss: '', // 术中出血量
bloodTransfusion: '', // 输血情况
drainageTube: '', // 引流管放置
specimenDisposal: '', // 标本处理
operationEndTime: '', // 手术结束时间
patientDestination: '', // 患者去向
// 签署信息
surgeonSignature: '', // 手术者签名
recorderSignature: '', // 记录者签名
recordDate: '', // 记录日期
});
// Props与事件
const props = defineProps({
patientInfo: {
type: Object,
required: true,
},
});
const patient = props.patientInfo;
// 表单验证规则
const rules = reactive({
busNo: [{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }],
patientName: [{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }],
gender: [{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }],
age: [
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] },
],
department: [{ required: true, message: '请填写科室', trigger: ['blur', 'submit'] }],
bedNo: [{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }],
operationDateTime: [
{ required: true, message: '请选择手术日期时间', trigger: ['change', 'submit'] },
],
surgeon: [{ required: true, message: '请填写手术者姓名', trigger: ['blur', 'submit'] }],
firstAssistant: [{ required: true, message: '请填写第一助手姓名', trigger: ['blur', 'submit'] }],
anesthesiologist: [
{ required: true, message: '请填写麻醉医师姓名', trigger: ['blur', 'submit'] },
],
circulatingNurse: [
{ required: true, message: '请填写巡回护士姓名', trigger: ['blur', 'submit'] },
],
scrubNurse: [{ required: true, message: '请填写器械护士姓名', trigger: ['blur', 'submit'] }],
operationName: [{ required: true, message: '请填写手术名称', trigger: ['blur', 'submit'] }],
operationMethod: [{ required: true, message: '请选择手术方式', trigger: ['change', 'submit'] }],
surgicalApproach: [{ required: true, message: '请填写手术入路', trigger: ['blur', 'submit'] }],
intraoperativeFindings: [
{ required: true, message: '请描述术中发现', trigger: ['blur', 'submit'] },
],
operationProcess: [{ required: true, message: '请描述手术过程', trigger: ['blur', 'submit'] }],
bloodLoss: [
{ required: true, message: '请填写术中出血量', trigger: ['blur', 'submit'] },
{ type: 'number', min: 0, message: '出血量不能为负数', trigger: ['blur', 'submit'] },
],
specimenDisposal: [
{ required: true, message: '请填写标本处理方式', trigger: ['blur', 'submit'] },
],
operationEndTime: [
{ required: true, message: '请选择手术结束时间', trigger: ['change', 'submit'] },
],
patientDestination: [
{ required: true, message: '请选择患者去向', trigger: ['change', 'submit'] },
],
surgeonSignature: [{ required: true, message: '请手术者签名', trigger: ['blur', 'submit'] }],
recorderSignature: [{ required: true, message: '请记录者签名', trigger: ['blur', 'submit'] }],
recordDate: [{ required: true, message: '请选择记录日期', trigger: ['change', 'submit'] }],
>>>>>>> v1.3
});
// 生命周期
@@ -347,18 +594,60 @@ onMounted(() => {
formData.operationDateTime = formatDateTime(today);
formData.operationEndTime = formatDateTime(today);
formData.recordDate = formatDate(today);
<<<<<<< HEAD
});
=======
if (!formData.patientName) {
formData.patientName = patient?.patientName || '';
}
if (!formData.gender) {
formData.gender = patient?.genderEnum_enumText || '';
}
if (!formData.age) {
formData.age = patient?.age || '';
}
if (!formData.department) {
formData.department = patient?.inHospitalOrgName || '';
}
if (!formData.bedNo) {
formData.bedNo = patient?.houseName + '-' + patient?.bedName;
}
if (!formData.busNo) {
formData.busNo = patient?.busNo || '';
}
});
const emits = defineEmits(['submitOk']);
>>>>>>> v1.3
// 提交表单
const submit = () => {
formRef.value.validate((valid) => {
if (valid) {
ElMessage.success('手术记录保存成功');
console.log('手术记录数据:', formData);
<<<<<<< HEAD
=======
emits('submitOk', formData);
>>>>>>> v1.3
}
});
};
<<<<<<< HEAD
=======
// 表单数据赋值
const setFormData = (data) => {
if (data) {
Object.assign(formData, data);
if (!formData.busNo) {
formData.busNo = patient?.busNo || '';
}
}
};
>>>>>>> v1.3
// 打印功能
const handlePrint = () => {
formRef.value.validate((valid) => {
@@ -372,6 +661,7 @@ const handlePrint = () => {
// 重置表单
const handleReset = () => {
<<<<<<< HEAD
ElMessageBox.confirm(
'确定要重置表单吗?所有已填写内容将被清空',
'确认重置',
@@ -381,6 +671,13 @@ const handleReset = () => {
type: 'warning'
}
).then(() => {
=======
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空', '确认重置', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
>>>>>>> v1.3
formRef.value.resetFields();
const today = new Date();
formData.operationDateTime = formatDateTime(today);
@@ -406,17 +703,43 @@ const formatDateTime = (date) => {
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
</script>
<style scoped>
/* 样式与原代码保持一致,无需修改 */
.medical-document {
max-width: 1200px;
=======
const printFun = () => {
console.log('入院记录打印');
isShowprintDom.value = true;
nextTick(() => {
recordPrintRef?.value.setData(formData);
nextTick(() => {
previewPrint(recordPrintRef?.value.getDom());
isShowprintDom.value = false;
});
});
};
defineExpose({ submit, setFormData, printFun });
</script>
<style scoped>
/* 核心容器PC端限制合理最大宽度避免超宽屏内容过散 */
.medical-document {
max-width: 1440px; /* PC端最优宽度兼顾大屏和常规屏 */
width: 98%; /* 占满父容器98%,保留少量边距 */
>>>>>>> v1.3
margin: 20px auto;
padding: 30px;
background: #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
font-family: 'SimSun', '宋体', serif;
<<<<<<< HEAD
=======
box-sizing: border-box; /* 确保内边距不撑大容器 */
>>>>>>> v1.3
}
.doc-header {
@@ -455,11 +778,22 @@ const formatDateTime = (date) => {
font-weight: bold;
}
<<<<<<< HEAD
.adaptive-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 15px 20px;
margin-bottom: 15px;
=======
/* 自适应网格PC端优先展示多列优化列宽比例 */
.adaptive-grid {
display: grid;
/* PC端最小列宽220px保证每列内容不拥挤自动适配列数 */
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 15px 20px;
margin-bottom: 15px;
width: 100%;
>>>>>>> v1.3
}
.grid-item {
@@ -513,6 +847,7 @@ const formatDateTime = (date) => {
margin-right: 4px;
}
<<<<<<< HEAD
@media (max-width: 768px) {
.medical-document {
padding: 15px;
@@ -526,30 +861,83 @@ const formatDateTime = (date) => {
font-size: 18px;
}
=======
/* 仅针对小屏设备做基础适配优先保证PC端体验 */
@media (max-width: 768px) {
.medical-document {
max-width: 100%;
padding: 15px;
}
.adaptive-grid {
grid-template-columns: 1fr; /* 移动端强制单列 */
}
.doc-title {
font-size: 18px;
}
>>>>>>> v1.3
.section-title {
font-size: 16px;
}
}
<<<<<<< HEAD
=======
/* 超宽屏≥1920px优化适度增大间距提升视觉体验 */
@media (min-width: 1920px) {
.medical-document {
max-width: 1600px;
padding: 40px;
}
.adaptive-grid {
gap: 20px 25px;
}
}
/* 打印样式保留 */
>>>>>>> v1.3
@media print {
.btn-group {
display: none;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.medical-document {
box-shadow: none;
margin: 0;
padding: 0;
<<<<<<< HEAD
}
.el-input__inner, .el-select__input, .el-textarea__inner {
=======
max-width: 100%;
}
.el-input__inner,
.el-select__input,
.el-textarea__inner {
>>>>>>> v1.3
border: none !important;
box-shadow: none !important;
background: transparent !important;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.el-form-item__label {
font-weight: bold !important;
}
}
</style>
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -22,13 +22,18 @@
<el-form-item label="姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择性别">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
@@ -45,6 +50,24 @@
<el-input v-model="formData.bedNo" placeholder="如307-12" clearable />
</el-form-item>
=======
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
<el-input v-model.number="formData.age" placeholder="请输入年龄" clearable />
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="科室/病区" prop="department" class="grid-item required">
<el-input v-model="formData.department" placeholder="如:内科疗区" clearable />
</el-form-item>
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
<el-input v-model="formData.bedNo" placeholder="如307-12" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="入院日期" prop="admissionDate" class="grid-item required">
<el-date-picker
v-model="formData.admissionDate"
@@ -63,11 +86,19 @@
<el-form-item label="经治医师" prop="treatingDoctor" class="grid-item required">
<el-input v-model="formData.treatingDoctor" placeholder="请输入医师姓名" clearable />
</el-form-item>
<<<<<<< HEAD
<el-form-item label="主治医师" prop="attendingDoctor" class="grid-item required">
<el-input v-model="formData.attendingDoctor" placeholder="请输入医师姓名" clearable />
</el-form-item>
=======
<el-form-item label="主治医师" prop="attendingDoctor" class="grid-item required">
<el-input v-model="formData.attendingDoctor" placeholder="请输入医师姓名" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="科主任" prop="departmentHead" class="grid-item required">
<el-input v-model="formData.departmentHead" placeholder="请输入主任姓名" clearable />
</el-form-item>
@@ -77,7 +108,11 @@
<!-- 病情与诊断 -->
<section class="doc-section">
<h2 class="section-title">病情与诊断</h2>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="病情状况" prop="condition" class="full-width-item required">
<el-input
v-model="formData.condition"
@@ -88,7 +123,11 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<div class="diagnosis-container">
<el-form-item label="中医诊断" prop="tcmDiagnosis" class="diagnosis-item">
<el-input
@@ -100,7 +139,11 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="西医诊断" prop="westernDiagnosis" class="diagnosis-item">
<el-input
v-model="formData.westernDiagnosis"
@@ -117,7 +160,11 @@
<!-- 治疗与检查计划 -->
<section class="doc-section">
<h2 class="section-title">治疗与检查计划</h2>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="治疗方案" prop="treatmentPlan" class="full-width-item required">
<el-input
v-model="formData.treatmentPlan"
@@ -128,8 +175,17 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="进一步检查项目" prop="examinationItems" class="full-width-item required">
=======
<el-form-item
label="进一步检查项目"
prop="examinationItems"
class="full-width-item required"
>
>>>>>>> v1.3
<el-input
v-model="formData.examinationItems"
type="textarea"
@@ -159,38 +215,72 @@
<!-- 签署区域优化后三列自适应+细节样式 -->
<section class="doc-section">
<h2 class="section-title">签署确认</h2>
<<<<<<< HEAD
<div class="adaptive-grid signature-area" style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));">
=======
<div
class="adaptive-grid signature-area"
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
>
>>>>>>> v1.3
<el-form-item label="患者或家属签字" prop="patientSignature" class="grid-item required">
<el-input v-model="formData.patientSignature" placeholder="请签字" clearable />
<div class="signature-tip">请填写患者或家属签字</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="与患者关系" prop="relationship" class="grid-item">
<el-input v-model="formData.relationship" placeholder="如:本人、配偶、子女" clearable />
</el-form-item>
=======
<el-form-item label="与患者关系" prop="relationship" class="grid-item">
<el-input
v-model="formData.relationship"
placeholder="如:本人、配偶、子女"
clearable
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="签字日期" prop="signatureDate" class="grid-item required">
<el-date-picker
v-model="formData.signatureDate"
type="date"
placeholder="选择签字日期"
value-format="YYYY-MM-DD"
<<<<<<< HEAD
style="width: 100%;"
/>
</el-form-item>
=======
style="width: 100%"
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="沟通医师签字" prop="doctorSignature" class="grid-item required">
<el-input v-model="formData.doctorSignature" placeholder="请签字" clearable />
<div class="signature-tip">请填写沟通医师签字</div>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="沟通日期" prop="communicationDate" class="grid-item required">
<el-date-picker
v-model="formData.communicationDate"
type="datetime"
placeholder="选择沟通日期时间"
value-format="YYYY-MM-DD HH:mm"
<<<<<<< HEAD
style="width: 100%;"
=======
style="width: 100%"
>>>>>>> v1.3
/>
</el-form-item>
</div>
@@ -208,13 +298,62 @@
<script setup>
import { ref, reactive, onMounted } from 'vue';
<<<<<<< HEAD
import { ElMessage, ElMessageBox, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElDatePicker, ElButton } from 'element-plus';
=======
import {
ElMessage,
ElMessageBox,
ElForm,
ElFormItem,
ElInput,
ElSelect,
ElOption,
ElDatePicker,
ElButton,
} from 'element-plus';
>>>>>>> v1.3
// 医院名称
const hospitalName = '长春市朝阳区中医院';
defineOptions({
<<<<<<< HEAD
name: 'InHospitalCommunicate'
});
=======
name: 'InHospitalCommunicate',
});
// Props与事件
const props = defineProps({
patientInfo: {
type: Object,
required: true,
},
});
// 生命周期
onMounted(() => {
if (!formData.patientName) {
formData.patientName = patient?.patientName || '';
}
if (!formData.gender) {
formData.gender = patient?.genderEnum_enumText || '';
}
if (!formData.age) {
formData.age = patient?.age || '';
}
if (!formData.hospitalNo) {
formData.hospitalNo = patient?.busNo || '';
}
if (!formData.department) {
formData.department = patient?.inHospitalOrgName || '';
}
if (!formData.bedNo) {
formData.bedNo = patient?.houseName + '-' + patient?.bedName;
}
});
const patient = props.patientInfo;
console.log('patient1111=======>', JSON.stringify(patient));
>>>>>>> v1.3
// 表单引用
const formRef = ref(null);
@@ -228,16 +367,25 @@ const formData = reactive({
department: '',
bedNo: '',
admissionDate: '',
<<<<<<< HEAD
=======
>>>>>>> v1.3
// 医疗团队
treatingDoctor: '',
attendingDoctor: '',
departmentHead: '',
<<<<<<< HEAD
=======
>>>>>>> v1.3
// 病情诊断
condition: '',
tcmDiagnosis: '',
westernDiagnosis: '',
<<<<<<< HEAD
// 治疗检查
treatmentPlan: '',
@@ -246,16 +394,31 @@ const formData = reactive({
// 风险告知
riskNotification: '',
=======
// 治疗检查
treatmentPlan: '',
examinationItems: '',
// 风险告知
riskNotification: '',
>>>>>>> v1.3
// 签署信息
patientSignature: '',
relationship: '',
signatureDate: '',
doctorSignature: '',
<<<<<<< HEAD
communicationDate: ''
=======
communicationDate: '',
>>>>>>> v1.3
});
// 表单验证规则
const rules = reactive({
<<<<<<< HEAD
hospitalNo: [
{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }
],
@@ -311,6 +474,33 @@ const rules = reactive({
communicationDate: [
{ required: true, message: '请选择沟通日期', trigger: ['change', 'submit'] }
]
=======
hospitalNo: [{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }],
patientName: [{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }],
gender: [{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }],
age: [
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] },
],
department: [{ required: true, message: '请填写科室/病区', trigger: ['blur', 'submit'] }],
bedNo: [{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }],
admissionDate: [{ required: true, message: '请选择入院日期', trigger: ['change', 'submit'] }],
treatingDoctor: [{ required: true, message: '请填写经治医师', trigger: ['blur', 'submit'] }],
attendingDoctor: [{ required: true, message: '请填写主治医师', trigger: ['blur', 'submit'] }],
departmentHead: [{ required: true, message: '请填写科主任', trigger: ['blur', 'submit'] }],
condition: [{ required: true, message: '请描述病情状况', trigger: ['blur', 'submit'] }],
treatmentPlan: [{ required: true, message: '请填写治疗方案', trigger: ['blur', 'submit'] }],
examinationItems: [{ required: true, message: '请填写检查项目', trigger: ['blur', 'submit'] }],
riskNotification: [
{ required: true, message: '请填写风险告知内容', trigger: ['blur', 'submit'] },
],
patientSignature: [
{ required: true, message: '请填写患者或家属签字', trigger: ['blur', 'submit'] },
],
signatureDate: [{ required: true, message: '请选择签字日期', trigger: ['change', 'submit'] }],
doctorSignature: [{ required: true, message: '请填写医师签字', trigger: ['blur', 'submit'] }],
communicationDate: [{ required: true, message: '请选择沟通日期', trigger: ['change', 'submit'] }],
>>>>>>> v1.3
});
// 生命周期
@@ -322,16 +512,35 @@ onMounted(() => {
formData.communicationDate = formatDateTime(today);
});
<<<<<<< HEAD
=======
const emits = defineEmits(['submitOk']);
>>>>>>> v1.3
// 提交表单
const submit = () => {
formRef.value.validate((valid) => {
if (valid) {
ElMessage.success('记录保存成功');
console.log('表单数据:', formData);
<<<<<<< HEAD
=======
emits('submitOk', formData);
>>>>>>> v1.3
}
});
};
<<<<<<< HEAD
=======
// 表单数据赋值
const setFormData = (data) => {
if (data) {
Object.assign(formData, data);
}
};
>>>>>>> v1.3
// 打印功能
const handlePrint = () => {
formRef.value.validate((valid) => {
@@ -345,6 +554,7 @@ const handlePrint = () => {
// 重置表单
const handleReset = () => {
<<<<<<< HEAD
ElMessageBox.confirm(
'确定要重置表单吗?所有已填写内容将被清空',
'确认重置',
@@ -354,6 +564,13 @@ const handleReset = () => {
type: 'warning'
}
).then(() => {
=======
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空', '确认重置', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
>>>>>>> v1.3
formRef.value.resetFields();
const today = new Date();
formData.admissionDate = formatDate(today);
@@ -379,6 +596,11 @@ const formatDateTime = (date) => {
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
=======
defineExpose({ submit, setFormData });
>>>>>>> v1.3
</script>
<style scoped>
@@ -510,6 +732,7 @@ const formatDateTime = (date) => {
.medical-document {
padding: 15px;
}
<<<<<<< HEAD
.diagnosis-container {
grid-template-columns: 1fr;
@@ -523,6 +746,21 @@ const formatDateTime = (date) => {
font-size: 18px;
}
=======
.diagnosis-container {
grid-template-columns: 1fr;
}
.adaptive-grid {
grid-template-columns: 1fr;
}
.doc-title {
font-size: 18px;
}
>>>>>>> v1.3
.section-title {
font-size: 16px;
}
@@ -533,21 +771,40 @@ const formatDateTime = (date) => {
.btn-group {
display: none;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.medical-document {
box-shadow: none;
margin: 0;
padding: 0;
}
<<<<<<< HEAD
.el-input__inner, .el-select__input, .el-textarea__inner {
=======
.el-input__inner,
.el-select__input,
.el-textarea__inner {
>>>>>>> v1.3
border: none !important;
box-shadow: none !important;
background: transparent !important;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.el-form-item__label {
font-weight: bold !important;
}
}
</style>
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -6,7 +6,7 @@
<template>
<div class="container">
<div class="header">
<h2 class="title">乾安县人民医院</h2>
<h2 class="title">长春市朝阳区中医院</h2>
<h3 class="subtitle">患者护理记录单</h3>
</div>

View File

@@ -1,19 +1,29 @@
<template>
<<<<<<< HEAD
<!-- 门诊病历表单主容器 -->
<div class="medical-form">
<!-- 患者基本信息展示区域 -->
=======
<div class="medical-form">
>>>>>>> v1.3
<div class="patient-name">
患者姓名{{ patient?.patientName || '未知' }} &nbsp;&nbsp; 病历号{{
patient?.busNo || '未知'
}}
</div>
<<<<<<< HEAD
<!-- 医院名称和标题 -->
=======
>>>>>>> v1.3
<h2 style="text-align: center">{{ userStore.hospitalName }}</h2>
<h2 style="text-align: center">门诊病历</h2>
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
<<<<<<< HEAD
<!-- Element Plus表单组件 -->
=======
>>>>>>> v1.3
<el-form
ref="formRef"
:model="formData"
@@ -22,40 +32,58 @@
label-align="left"
class="medical-full-form"
>
<<<<<<< HEAD
<!-- 基础信息区域标题 -->
=======
>>>>>>> v1.3
<h4 class="section-title">基础信息</h4>
<!-- 1. 基础信息单行自适应排列 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<<<<<<< HEAD
<!-- 身高输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="身高" prop="height" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.height" type="text" placeholder="请输入" />
<span class="unit">cm</span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 体重输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="体重" prop="weight" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.weight" type="text" placeholder="请输入" />
<span class="unit">kg</span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 体温输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="体温" prop="temperature" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
<span class="unit"></span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 脉搏输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="脉搏" prop="pulse" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.pulse" type="text" placeholder="请输入" />
<span class="unit">/</span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 发病日期选择项 -->
=======
>>>>>>> v1.3
<el-form-item label="发病日期" prop="onsetDate" class="row-item">
<el-date-picker
v-model="formData.onsetDate"
@@ -68,13 +96,19 @@
</el-form-item>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 病史信息区域标题 -->
=======
>>>>>>> v1.3
<h4 class="section-title">病史信息</h4>
<!-- 2. 病史信息单行自适应排列新增调整 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<<<<<<< HEAD
<!-- 现病史输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="现病史" prop="presentIllness" class="row-item history-item">
<el-input
v-model="formData.presentIllness"
@@ -83,11 +117,17 @@
autosize
/>
</el-form-item>
<<<<<<< HEAD
<!-- 既往史输入项 -->
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
</el-form-item>
<!-- 个人史输入项 -->
=======
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="个人史" prop="personalHistory" class="row-item history-item">
<el-input
v-model="formData.personalHistory"
@@ -96,7 +136,10 @@
autosize
/>
</el-form-item>
<<<<<<< HEAD
<!-- 过敏史输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="过敏史" prop="allergyHistory" class="row-item history-item">
<el-input
v-model="formData.allergyHistory"
@@ -105,7 +148,10 @@
autosize
/>
</el-form-item>
<<<<<<< HEAD
<!-- 家族史输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="家族史" prop="familyHistory" class="row-item history-item">
<el-input
v-model="formData.familyHistory"
@@ -116,8 +162,11 @@
</el-form-item>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 主诉查体(治疗)处置辅助检查区域标题 -->
=======
>>>>>>> v1.3
<h4 class="section-title">主诉查体(治疗)处置辅助检查</h4>
<!-- 3. 主诉必填 -->
<el-form-item label="主诉" prop="complaint" class="required form-item-single">
@@ -130,7 +179,10 @@
/>
</el-form-item>
<!-- 4. 查体处理辅助检查 -->
<<<<<<< HEAD
<!-- 查体(治疗)输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="查体(治疗)" prop="physicalExam" class="form-item-single">
<el-input
v-model="formData.physicalExam"
@@ -141,7 +193,10 @@
/>
</el-form-item>
<<<<<<< HEAD
<!-- 处置输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="处置" prop="treatment" class="form-item-single">
<el-input
v-model="formData.treatment"
@@ -152,7 +207,10 @@
/>
</el-form-item>
<<<<<<< HEAD
<!-- 辅助检查输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="辅助检查" prop="auxiliaryExam" class="form-item-single">
<el-input
v-model="formData.auxiliaryExam"
@@ -168,26 +226,37 @@
</template>
<script setup>
<<<<<<< HEAD
// 导入Vue相关功能和组件
=======
>>>>>>> v1.3
import { reactive, ref, onBeforeMount, onMounted, watch } from 'vue';
import useUserStore from '../store/modules/user';
import { ElInput, ElMessage, ElForm, ElFormItem } from 'element-plus';
import { patientInfo } from '../views/doctorstation/components/store/patient';
import { pa } from 'element-plus/es/locales.mjs';
<<<<<<< HEAD
// 定义组件选项
=======
>>>>>>> v1.3
defineOptions({
name: 'OutpatientMedicalRecord',
components: { ElInput, ElMessage, ElForm, ElFormItem },
});
<<<<<<< HEAD
// // Props与事件,去掉props.patientInfo改为直接从store获取
=======
// // Props与事件, 去掉props.patientInfo改为直接从store获取
>>>>>>> v1.3
// const props = defineProps({
// patientInfo: {
// type: Object,
// required: true,
// },
// });
<<<<<<< HEAD
// 定义组件接收的属性(目前为空)
const props = defineProps({});
@@ -212,18 +281,45 @@ const formData = reactive({
pulse: '', // 脉搏(次/分)
onsetDate: '', // 发病日期
complaint: '', // 主诉(必填项)
=======
const props = defineProps({});
const emits = defineEmits(['submitOk']);
// 数据初始化
const userStore = useUserStore();
const patient = ref(null);
const formRef = ref(null);
// 表单数据(全部字符类型)
const formData = reactive({
height: '', // 身高
weight: '', // 体重
temperature: '', // 体温
pulse: '', // 脉搏
onsetDate: '', // 发病日期
complaint: '', // 主诉(必填)
>>>>>>> v1.3
presentIllness: '', // 现病史
pastIllness: '', // 既往史
personalHistory: '', // 个人史
allergyHistory: '', // 过敏史
<<<<<<< HEAD
physicalExam: '', // 查体结果
treatment: '', // 处理方案
auxiliaryExam: '', // 辅助检查结果
=======
physicalExam: '', // 查体
treatment: '', // 处理
auxiliaryExam: '', // 辅助检查
>>>>>>> v1.3
familyHistory: '', // 家族史
});
// 表单校验规则
<<<<<<< HEAD
// 定义表单字段的验证规则,目前仅主诉为必填项
=======
>>>>>>> v1.3
const rules = reactive({
complaint: [
{
@@ -235,6 +331,7 @@ const rules = reactive({
});
// 提交函数
<<<<<<< HEAD
// 用于触发表单验证并提交数据到父组件
const submit = () => {
// 表单验证
@@ -250,6 +347,16 @@ const submit = () => {
// 日期格式化工具函数
// 将Date对象格式化为 YYYY-MM-DD HH:mm 格式的字符串
=======
const submit = () => {
formRef.value.validate((isValid) => {
if (isValid) {
emits('submitOk', formData);
}
});
};
// 日期格式化工具
>>>>>>> v1.3
const formatDateTime = (date) => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
@@ -258,16 +365,23 @@ const formatDateTime = (date) => {
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
// 表单数据赋值函数
// 用于外部组件向表单填充已有数据
const setFormData = (data) => {
if (data) {
// 将传入的数据合并到表单数据中
=======
// 表单数据赋值
const setFormData = (data) => {
if (data) {
>>>>>>> v1.3
Object.assign(formData, data);
}
};
<<<<<<< HEAD
// 生命周期钩子 - 组件挂载前
onBeforeMount(() => {});
@@ -275,6 +389,12 @@ onBeforeMount(() => {});
onMounted(() => {
console.log('当前患者信息:', patientInfo);
// 从store获取患者信息
=======
// 生命周期
onBeforeMount(() => {});
onMounted(() => {
console.log('当前患者信息:', patientInfo);
>>>>>>> v1.3
patient.value = patientInfo.value;
// 初始化发病日期为当前时间
if (!formData.onsetDate) {
@@ -283,7 +403,10 @@ onMounted(() => {
});
// 监听患者信息变化,实现联动显示
<<<<<<< HEAD
// 当patientInfo发生变化时更新本地patient引用
=======
>>>>>>> v1.3
watch(
() => patientInfo.value,
(newPatientInfo) => {
@@ -292,8 +415,12 @@ watch(
{ deep: true }
);
<<<<<<< HEAD
// 暴露接口供父组件调用
// 将formData、submit方法和setFormData方法暴露给父组件使用
=======
// 暴露接口
>>>>>>> v1.3
defineExpose({ formData, submit, setFormData });
</script>
@@ -303,14 +430,23 @@ defineExpose({ formData, submit, setFormData });
max-width: 1200px;
width: 100%;
min-height: 800px;
<<<<<<< HEAD
height: 900px;
=======
height: auto;
>>>>>>> v1.3
margin: 15px auto;
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
font-family: Arial, sans-serif;
box-sizing: border-box;
<<<<<<< HEAD
overflow: visible;
=======
overflow: hidden; /* 防止内部内容溢出 */
position: relative;
>>>>>>> v1.3
}
/* 顶部姓名样式 */
@@ -325,11 +461,19 @@ defineExpose({ formData, submit, setFormData });
/* 滚动内容容器 */
.form-scroll-container {
width: 100%;
<<<<<<< HEAD
max-height: 80vh;
=======
max-height: 55vh;
>>>>>>> v1.3
overflow-y: auto;
overflow-x: hidden;
scrollbar-width: thin;
scrollbar-color: #ccc #f5f5f5;
<<<<<<< HEAD
=======
position: relative;
>>>>>>> v1.3
}
.form-scroll-container::-webkit-scrollbar {
width: 6px;
@@ -345,6 +489,11 @@ defineExpose({ formData, submit, setFormData });
/* 完整表单容器 */
.medical-full-form {
width: 100%;
<<<<<<< HEAD
=======
min-width: 0; /* 防止内容强制拉伸容器 */
box-sizing: border-box;
>>>>>>> v1.3
}
/* 区域通用样式 */
@@ -366,6 +515,11 @@ defineExpose({ formData, submit, setFormData });
flex-wrap: wrap; /* 自动换行 */
align-items: flex-start; /* 顶部对齐,适配文本域高度 */
gap: 15px; /* 统一元素间距 */
<<<<<<< HEAD
=======
width: 100%;
box-sizing: border-box;
>>>>>>> v1.3
}
.row-item {
margin-bottom: 0; /* 取消底部间距,避免换行重叠 */
@@ -436,9 +590,17 @@ defineExpose({ formData, submit, setFormData });
.medical-form {
height: 80vh;
padding: 10px;
<<<<<<< HEAD
}
.form-scroll-container {
height: calc(100% - 35px);
=======
overflow: hidden;
}
.form-scroll-container {
height: calc(100% - 35px);
max-height: none;
>>>>>>> v1.3
}
.el-form {
label-width: 70px !important;
@@ -457,4 +619,8 @@ defineExpose({ formData, submit, setFormData });
--el-input-textarea-min-height: 80px;
}
}
</style>
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -0,0 +1,455 @@
<template>
<div class="medical-form">
<div class="patient-name">
患者姓名{{ patient?.patientName || '未知' }} &nbsp;&nbsp; 病历号{{
patient?.busNo || '未知'
}}
</div>
<h2 style="text-align: center">{{ userStore.hospitalName || '长春市朝阳区中医院' }}</h2>
<h2 style="text-align: center">门诊病历</h2>
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
<el-form
ref="formRef"
:model="formData"
:rules="rules"
label-width="100px"
label-align="left"
class="medical-full-form"
>
<h4 class="section-title">基础信息</h4>
<!-- 1. 基础信息单行自适应排列 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="呼吸" prop="breathe" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.breathe" type="text" placeholder="请输入" />
<span class="unit">/</span>
</div>
</el-form-item>
<!-- <el-form-item label="血压" prop="blood" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.blood" type="text" placeholder="请输入" />
<span class="unit">mmHg</span>
</div>
</el-form-item> -->
<el-form-item label="血压" prop="blood" class="row-item">
<div class="input-with-unit blood-input-group">
<el-input
v-model="formData.bloodHigh"
type="text"
placeholder="高压"
style="width: 80px"
/>
<span class="divider">/</span>
<el-input
v-model="formData.bloodLow"
type="text"
placeholder="低压"
style="width: 80px"
/>
<span class="unit">(/)mmHg</span>
</div>
</el-form-item>
<el-form-item label="体温" prop="temperature" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="脉搏" prop="pulse" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.pulse" type="text" placeholder="请输入" />
<span class="unit">/</span>
</div>
</el-form-item>
<el-form-item label="就诊日期" prop="onsetDate" class="row-item">
<el-date-picker
v-model="formData.onsetDate"
type="date"
placeholder="选择就诊日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
<!-- <el-input v-model="formData.onsetDate" type="date" /> -->
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">病史信息</h4>
<!-- 2. 病史信息单行自适应排列新增调整 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<el-form-item label="现病史" prop="presentIllness" class="row-item history-item">
<el-input
v-model="formData.presentIllness"
type="textarea"
placeholder="无"
autosize
/>
</el-form-item>
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
</el-form-item>
<el-form-item label="个人史" prop="personalHistory" class="row-item history-item">
<el-input
v-model="formData.personalHistory"
type="textarea"
placeholder="无"
autosize
/>
</el-form-item>
<el-form-item label="过敏史" prop="allergyHistory" class="row-item history-item">
<el-input
v-model="formData.allergyHistory"
type="textarea"
placeholder="无"
autosize
/>
</el-form-item>
<el-form-item label="家族史" prop="familyHistory" class="row-item history-item">
<el-input
v-model="formData.familyHistory"
type="textarea"
placeholder="无"
autosize
/>
</el-form-item>
</div>
</el-form-item>
<h4 class="section-title">主诉处置辅助检查</h4>
<!-- 3. 主诉必填 -->
<el-form-item label="主诉" prop="complaint" class="required form-item-single">
<el-input
v-model="formData.complaint"
type="textarea"
placeholder="请输入主诉"
class="tall-textarea"
autosize
/>
</el-form-item>
<!-- 4. 查体处理辅助检查 -->
<!-- <el-form-item label="查体(治疗)" prop="physicalExam" class="form-item-single">
<el-input
v-model="formData.physicalExam"
type="textarea"
placeholder="请输入查体结果"
class="tall-textarea"
autosize
/>
</el-form-item> -->
<el-form-item label="处置" prop="treatment" class="form-item-single">
<el-input
v-model="formData.treatment"
type="textarea"
placeholder="请输入处理方案"
class="tall-textarea"
autosize
/>
</el-form-item>
<el-form-item label="辅助检查" prop="auxiliaryExam" class="form-item-single">
<el-input
v-model="formData.auxiliaryExam"
type="textarea"
placeholder="请输入辅助检查结果"
class="tall-textarea"
autosize
/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { reactive, ref, onBeforeMount, onMounted, watch } from 'vue';
import useUserStore from '../store/modules/user';
import { ElInput, ElMessage, ElForm, ElFormItem } from 'element-plus';
import { patientInfo } from '../views/doctorstation/components/store/patient';
import { pa } from 'element-plus/es/locales.mjs';
defineOptions({
name: 'OutpatientMedicalRecord1.1',
components: { ElInput, ElMessage, ElForm, ElFormItem },
});
// // Props与事件,去掉props.patientInfo改为直接从store获取
// const props = defineProps({
// patientInfo: {
// type: Object,
// required: true,
// },
// });
const props = defineProps({});
const emits = defineEmits(['submitOk']);
// 数据初始化
const userStore = useUserStore();
const patient = ref(null);
const formRef = ref(null);
// 表单数据(全部字符类型)
const formData = reactive({
breathe: '', // 呼吸
bloodHigh: '', //高压
bloodLow: '', //低压
temperature: '', // 体温
pulse: '', // 脉搏
onsetDate: '', // 就诊日期
complaint: '', // 主诉(必填)
presentIllness: '', // 现病史
pastIllness: '', // 既往史
personalHistory: '', // 个人史
allergyHistory: '', // 过敏史
physicalExam: '', // 查体
treatment: '', // 处理
auxiliaryExam: '', // 辅助检查
familyHistory: '', // 家族史
});
// 表单校验规则
const rules = reactive({
complaint: [
{
required: true,
message: '请填写主诉',
trigger: ['blur', 'submit'],
},
],
});
// 提交函数
const submit = () => {
formRef.value.validate((isValid) => {
if (isValid) {
emits('submitOk', formData);
}
});
};
// 日期格式化工具
const formatDateTime = (date) => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hour = String(date.getHours()).padStart(2, '0');
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
};
// 表单数据赋值
const setFormData = (data) => {
if (data) {
Object.assign(formData, data);
}
};
// 生命周期
onBeforeMount(() => {});
onMounted(() => {
console.log('当前患者信息:', patientInfo);
patient.value = patientInfo.value;
// 初始化发病日期为当前时间
if (!formData.onsetDate) {
formData.onsetDate = formatDateTime(new Date());
}
});
// 监听患者信息变化,实现联动显示
watch(
() => patientInfo.value,
(newPatientInfo) => {
patient.value = newPatientInfo;
},
{ deep: true }
);
// 暴露接口
defineExpose({ formData, submit, setFormData });
</script>
<style scoped>
/* 表单外层容器 */
.medical-form {
max-width: 1200px;
width: 100%;
min-height: 800px;
height: 900px;
margin: 15px auto;
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
font-family: Arial, sans-serif;
box-sizing: border-box;
overflow: visible;
}
/* 顶部姓名样式 */
.patient-name {
display: inline-block;
margin-bottom: 15px;
font-size: 14px;
color: #333;
font-weight: 500;
}
/* 滚动内容容器 */
.form-scroll-container {
width: 100%;
max-height: 80vh;
overflow-y: auto;
overflow-x: hidden;
scrollbar-width: thin;
scrollbar-color: #ccc #f5f5f5;
}
.form-scroll-container::-webkit-scrollbar {
width: 6px;
}
.form-scroll-container::-webkit-scrollbar-thumb {
background-color: #ccc;
border-radius: 3px;
}
.form-scroll-container::-webkit-scrollbar-track {
background-color: #f5f5f5;
}
/* 完整表单容器 */
.medical-full-form {
width: 100%;
}
/* 区域通用样式 */
.form-section {
margin-bottom: 20px;
}
.section-title {
margin: 0 0 12px;
padding-bottom: 6px;
border-bottom: 1px solid #f0f0f0;
color: #333;
font-size: 16px;
font-weight: bold;
}
/* 通用单行自适应布局(基础信息+病史信息共用) */
.single-row-layout {
display: flex;
flex-wrap: wrap; /* 自动换行 */
align-items: flex-start; /* 顶部对齐,适配文本域高度 */
gap: 15px; /* 统一元素间距 */
}
.row-item {
margin-bottom: 0; /* 取消底部间距,避免换行重叠 */
display: flex;
flex-direction: column;
}
.blood-input-group {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
}
.blood-input-group .el-input {
flex: none;
}
.divider {
font-weight: bold;
color: #333;
font-size: 14px;
}
.unit {
font-weight: 500;
color: #333;
white-space: nowrap;
font-size: 14px;
}
/* 基础信息项:适配短输入框 */
.row-item:not(.history-item) {
min-width: 160px; /* 基础信息项最小宽度 */
}
/* 病史信息项:适配文本域,设置更大最小宽度 */
.history-item {
min-width: 220px; /* 确保文本域有足够宽度 */
}
/* 带单位的输入框样式 */
.input-with-unit {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
}
.input-with-unit .el-input {
flex: 1;
}
.unit {
font-weight: 500;
color: #333;
white-space: nowrap;
font-size: 14px;
}
/* 单行表单项样式(主诉、查体等) */
.form-item-single {
margin-bottom: 18px;
}
/* 文本域高度控制 */
.tall-textarea {
--el-input-textarea-min-height: 100px;
}
/* 病史信息文本域:适当降低高度,适配单行布局 */
.history-item .el-input__inner {
--el-input-textarea-min-height: 60px;
}
/* 必填项红色星号 */
.required .el-form-item__label::before {
content: '* ';
color: #ff4d4f;
}
/* 输入框统一样式 */
.el-form-item .el-input,
.el-form-item .el-input__wrapper {
width: 100%;
box-sizing: border-box;
}
.el-form-item .el-input__inner {
font-size: 14px;
padding: 8px 12px;
}
/* 响应式调整 */
@media (max-width: 768px) {
.medical-form {
height: 80vh;
padding: 10px;
}
.form-scroll-container {
height: calc(100% - 35px);
}
.el-form {
label-width: 70px !important;
}
.row-item:not(.history-item) {
min-width: 130px;
}
.history-item {
min-width: 100%; /* 移动端病史信息全屏宽度,单行显示 */
}
.form-item-single,
.form-section {
margin-bottom: 15px;
}
.tall-textarea {
--el-input-textarea-min-height: 80px;
}
}
</style>

View File

@@ -7,7 +7,7 @@
<div class="surgicalPatientHandover-container">
<div class="handover-form">
<div class="form-header">
<h1 class="hospital-name">**医院</h1>
<h1 class="hospital-name">长春市朝阳区中医院</h1>
<h2 class="form-title">手术患者交接单</h2>
</div>