Files
his/openhis-ui-vue3/src/template/nursingRecordSheet.vue
2025-10-16 17:38:49 +08:00

393 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
* @Author: sjjh
* @Date: 2025-10-08 23:33:29
* @Description: 护理记录单
-->
<template>
<div class="container">
<div class="header">
<h2 class="title">乾安县人民医院</h2>
<h3 class="subtitle">患者护理记录单</h3>
</div>
<el-form :model="state.formData" label-position="top" class="nursing-form">
<!-- 患者基本信息 -->
<div class="patient-info">
<el-row :gutter="20">
<el-col :span="2">
<el-form-item label="姓名">
<el-input v-model="state.formData.name" placeholder="请输入姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label="年龄">
<el-input v-model="state.formData.age" placeholder="请输入年龄"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
<el-select v-model="state.formData.gender" placeholder="请选择性别">
<el-option label="男" value="male"></el-option>
<el-option label="女" value="female"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="病区">
<el-input v-model="state.formData.ward" placeholder="请输入病区"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="床号">
<el-input v-model="state.formData.bedNumber" placeholder="请输入床号"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="住院号">
<el-input
v-model="state.formData.hospitalNumber"
placeholder="请输入住院号"
></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="入院诊断">
<el-input v-model="state.formData.diagnosis" placeholder="请输入入院诊断"></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
<!-- 基本信息记录表格 -->
<div class="vital-signs-table">
<el-table :data="state.vitalSigns" border style="width: 100%">
<el-table-column label="日期" width="100">
<template #default="scope">
<el-date-picker
v-model="scope.row.date"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
></el-date-picker>
</template>
</el-table-column>
<el-table-column label="时间" width="100">
<template #default="scope">
<el-time-picker
v-model="scope.row.time"
placeholder="选择时间"
format="HH:mm"
value-format="HH:mm"
style="width: 100%"
></el-time-picker>
</template>
</el-table-column>
<el-table-column label="基本信息">
<el-table-column label="意识" width="80">
<template #default="scope">
<el-select v-model="scope.row.consciousness" placeholder="选择">
<el-option label="清醒" value="清醒"></el-option>
<el-option label="嗜睡" value="嗜睡"></el-option>
<el-option label="昏迷" value="昏迷"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="体温℃" width="80">
<template #default="scope">
<el-input v-model="scope.row.temperature" placeholder="体温"></el-input>
</template>
</el-table-column>
<el-table-column label="心率次/分" width="100">
<template #default="scope">
<el-input v-model="scope.row.heartRate" placeholder="心率"></el-input>
</template>
</el-table-column>
<el-table-column label="脉搏次/分" width="100">
<template #default="scope">
<el-input v-model="scope.row.heartRate" placeholder="心率"></el-input>
</template>
</el-table-column>
<el-table-column label="呼吸次/分" width="100">
<template #default="scope">
<el-input v-model="scope.row.respiratoryRate" placeholder="呼吸"></el-input>
</template>
</el-table-column>
<el-table-column label="血压mmHg" width="120">
<template #default="scope">
<el-input v-model="scope.row.bloodPressure" placeholder="血压"></el-input>
</template>
</el-table-column>
<el-table-column label="血氧饱和度" width="120">
<template #default="scope">
<el-input v-model="scope.row.bloodPressure" placeholder="血压"></el-input>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="氧疗L/min" width="200">
<el-table-column label="方式" >
<template #default="scope">
<el-select v-model="scope.row.oxygenMethod" placeholder="选择">
<el-option label="鼻导管" value="鼻导管"></el-option>
<el-option label="面罩" value="面罩"></el-option>
<el-option label="无" value="无"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="流量" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="入量" width="200">
<el-table-column label="名称" >
<template #default="scope">
<el-select v-model="scope.row.oxygenMethod" placeholder="选择">
<el-option label="鼻导管" value="鼻导管"></el-option>
<el-option label="面罩" value="面罩"></el-option>
<el-option label="无" value="无"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="ml" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="途径" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="出量" width="200">
<el-table-column label="名称" >
<template #default="scope">
<el-select v-model="scope.row.oxygenMethod" placeholder="选择">
<el-option label="鼻导管" value="鼻导管"></el-option>
<el-option label="面罩" value="面罩"></el-option>
<el-option label="无" value="无"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="ml" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="皮肤情况" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="管路护理" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="病情与措施" width="80">
<template #default="scope">
<el-input v-model="scope.row.flowRate" placeholder="流量"></el-input>
</template>
</el-table-column>
<el-table-column label="护士签名" width="100">
<template #default="scope">
<el-input v-model="scope.row.nurseSignature" placeholder="签名"></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="scope">
<el-button type="danger" size="small" @click="removeVitalSign(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<div class="add-row">
<el-button type="primary" @click="addVitalSign">添加记录</el-button>
</div>
</div>
<!-- 表单底部按钮 -->
<div class="form-actions">
<div>
意识:①清醒②嗜睡③意识模糊④昏睡⑤谗妄⑥浅昏迷⑦中度昏迷⑧深昏迷⑨全麻未醒⑩镇静
</div>
<div>
氧疗方式:①鼻导管②面罩③HFNC④HIPPV⑤IMV
</div>
<div>
皮肤情况:①完好②压疮③出血点④破损⑤水肿⑥瘀斑⑦过敏⑧其他
</div>
<div>
管路护理:①胃管②尿导管③静脉置管④吸氧管T⑥胸腔引流管⑦腹腔引流管⑧伤口引流管⑨脑室引流管⑩其他
</div>
</div>
</el-form>
</div>
</template>
<script setup>
defineOptions({
name: 'NursingRecordSheet',
});
import { getCurrentInstance, onBeforeMount, onMounted, reactive } from 'vue';
const { proxy } = getCurrentInstance();
const emits = defineEmits([]);
const props = defineProps({
patientId: {
type: String,
default: '',
},
});
// 表单数据
const state = reactive({
formData: {
name: '',
age: '',
gender: '',
ward: '',
bedNumber: '',
hospitalNumber: '',
diagnosis: '',
},
vitalSigns: [
{
date: new Date().toISOString().split('T')[0],
time: new Date().toTimeString().slice(0, 5),
consciousness: '清醒',
temperature: '',
heartRate: '',
respiratoryRate: '',
bloodPressure: '',
oxygenMethod: '无',
flowRate: '',
nurseSignature: '',
},
],
});
// 添加生命体征记录
const addVitalSign = () => {
state.vitalSigns.push({
date: new Date().toISOString().split('T')[0],
time: new Date().toTimeString().slice(0, 5),
consciousness: '清醒',
temperature: '',
heartRate: '',
respiratoryRate: '',
bloodPressure: '',
oxygenMethod: '无',
flowRate: '',
nurseSignature: '',
});
};
// 删除生命体征记录
const removeVitalSign = (index) => {
state.vitalSigns.splice(index, 1);
if (state.vitalSigns.length === 0) {
addVitalSign();
}
};
// 重置表单
const resetForm = () => {
state.formData = {
name: '',
age: '',
gender: '',
ward: '',
bedNumber: '',
hospitalNumber: '',
diagnosis: '',
};
state.vitalSigns = [
{
date: new Date().toISOString().split('T')[0],
time: new Date().toTimeString().slice(0, 5),
consciousness: '清醒',
temperature: '',
heartRate: '',
respiratoryRate: '',
bloodPressure: '',
oxygenMethod: '无',
flowRate: '',
nurseSignature: '',
},
];
};
onBeforeMount(() => {
// 如果有patientId可以在这里加载患者数据
if (props.patientId) {
// 加载患者数据的逻辑
}
});
onMounted(() => {
// 组件挂载后的逻辑
});
defineExpose({ state });
</script>
<style lang="scss" scoped>
.container {
padding: 20px;
background-color: #fff;
}
.header {
text-align: center;
margin-bottom: 20px;
.title {
font-size: 24px;
font-weight: bold;
margin-bottom: 5px;
}
.subtitle {
font-size: 20px;
font-weight: bold;
}
}
.nursing-form {
.patient-info {
padding: 15px;
border: 1px solid #dcdfe6;
border-radius: 4px;
}
.vital-signs-table
{
margin-bottom: 20px;
h4 {
margin-bottom: 10px;
font-size: 16px;
font-weight: bold;
}
.add-row {
margin-top: 10px;
text-align: center;
}
}
.form-actions {
margin-top: 30px;
text-align: left;
}
}
</style>