2026-06-16 17:50:04 +08:00

380 lines
14 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.

/**
* @file index.vue
* @description: 输血输注
* @author: w
* @since: 2026-06-15
*/
<template>
<div class="app-container">
<div class="form-card">
<el-button type="primary" plain>检索</el-button>
<el-button type="primary" plain>新增单据</el-button>
<el-button type="danger" plain>删除单据</el-button>
<el-button type="success" plain>保存</el-button>
<el-button type="warning" plain>打印护理记录</el-button>
</div>
<!-- 顶部搜索栏卡片 -->
<div class="search-card">
<el-form inline :model="searchForm">
<el-form-item label="发血单号:">
<el-input v-model="searchForm.fhNo" placeholder="" />
<el-button type="primary" @click="queryByFh" class="ml10">查询</el-button>
</el-form-item>
<el-form-item label="用住院号查找:">
<el-input v-model="searchForm.inNo" placeholder="" />
<el-button type="primary" @click="queryByIn" class="ml10">查找</el-button>
</el-form-item>
</el-form>
</div>
<!-- 上方表格卡片 -->
<div class="table-top-card">
<el-table :data="topTableData" border @selection-change="handleSelect" highlight-current-row height="150px">
<el-table-column type="index" width="50" label="序号" align="center" />
<el-table-column label="血液流水号" prop="bloodSn" align="center" />
<el-table-column label="产品码" prop="productCode" align="center" />
<el-table-column label="血液品种" prop="bloodName" align="center" />
<el-table-column label="ABO血型" prop="abo" align="center" />
<el-table-column label="RH血型" prop="rh" align="center" />
<el-table-column label="容量" prop="vol" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="发血单号" prop="fhNo" align="center" />
<el-table-column label="特殊处理" prop="deal" align="center" />
</el-table>
</div>
<!-- 下方tab表单卡片 -->
<div class="form-card">
<el-tabs v-model="activeTab">
<el-tab-pane label="输血输注及护理登记" name="tab1">
<el-form :model="formData" label-width="auto" class="form-top-label">
<!-- 第一行 -->
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="血液流水号:">
<el-input v-model="formData.bloodSn" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发血日期:">
<el-date-picker v-model="formData.fhDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="科 室:">
<el-select v-model="formData.department" placeholder="">
<el-option label="科室1" value="科室1"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="血型:">
<el-input v-model="formData.aboBlood" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span='6'>
<el-form-item label="申请单号:">
<el-input v-model="formData.applyNo" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span='6'>
<el-form-item label="申请日期:">
<el-date-picker v-model="formData.applyDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span='6'>
<el-form-item label="发血品种:">
<el-input v-model="formData.bloodType" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span='6'>
<el-form-item label="Rh(D):">
<el-input v-model="formData.rhD" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span='6'>
<el-form-item label="患者姓名:">
<el-input v-model="formData.patientName" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span='6'>
<el-form-item label="住院号/ID号:">
<el-input v-model="formData.inId" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span='6'>
<el-form-item label="血量:">
<div class="two-input-wrap">
<el-input v-model="formData.vol1" style="width:65%" />
<el-input v-model="formData.vol2" style="width:35%" />
</div>
</el-form-item>
</el-col>
</el-row>
<div class="split-line">输血输注及护理信息</div>
<!-- 第四行 -->
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="登记日期:">
<el-date-picker v-model="formData.regDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="输血医师:">
<el-input v-model="formData.docName" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="责任护士:">
<el-select v-model="formData.nurse" placeholder="">
<el-option label="张三" value="张三"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="滴速:">
<el-input v-model="formData.speed">
<template #suffix> 滴/分 </template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 复选+右侧表单 -->
<el-row :gutter="20">
<el-col :span="6">
<div class="form-row-check">
<el-checkbox v-model="formData.check1">患者信息是否核对</el-checkbox>
<el-checkbox v-model="formData.check2">交叉配血结果是否相符</el-checkbox>
<el-checkbox v-model="formData.check3">血液是否未过期</el-checkbox>
<el-checkbox v-model="formData.check4">血袋外观是否合格</el-checkbox>
<el-checkbox v-model="formData.check5">血液流水号是否相符</el-checkbox>
</div>
</el-col>
<el-col :span="18">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="输血开始时间:">
<el-date-picker v-model="formData.startTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="输血结束时间:">
<el-date-picker v-model="formData.endTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8"></el-col>
<el-col :span="8">
<el-form-item label="一刻钟观察时间:">
<el-date-picker v-model="formData.q1Time" type="datetime" format="YYYY-MM-DD HH:mm:ss"
style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="一刻钟观察护士:">
<el-select v-model="formData.q1Nurse" placeholder="">
<el-option label="张三" value="张三"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8"></el-col>
<el-col :span="8">
<el-form-item label="一小时观察时间:">
<el-date-picker v-model="formData.qhTime" type="datetime" format="YYYY-MM-DD HH:mm:ss"
style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="一小时观察护士:">
<el-select v-model="formData.qhNurse" placeholder="">
<el-option label="张三" value="张三"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8"></el-col>
<el-col :span="8">
<el-form-item label="输血后血袋处理:">
<el-input v-model="formData.bagDeal" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="审阅者:" class="red-label">
<el-select v-model="formData.checkUser" placeholder="">
<el-option label="张三" value="张三"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8"></el-col>
<el-col :span="16">
<el-form-item label="输血情况记录:">
<el-input v-model="formData.record" />
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
<el-tab-pane label="临床监护记录" name="tab2">
<div>临床监护录入区域</div>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script setup lang="ts">
// 顶部搜索
const searchForm = ref({
fhNo: '',
inNo: ''
})
// 表格选中
const selectedRow = ref<any>(null)
const handleSelect = (row: any[]) => {
selectedRow.value = row[0] || null
}
// 上方表格数据
const topTableData = ref([
{ bloodSn: 'XS20260604001', productCode: 'P20260529001', bloodName: '悬浮红细胞', abo: 'A', rh: '阳性', vol: '2.0', unit: 'U', fhNo: 'FX2026060401', deal: '' },
{ bloodSn: 'XS20260604001', productCode: 'P20260529001', bloodName: '悬浮红细胞', abo: 'A', rh: '阳性', vol: '2.0', unit: 'U', fhNo: 'FX2026060401', deal: '' },
{ bloodSn: 'XS20260604001', productCode: 'P20260529001', bloodName: '悬浮红细胞', abo: 'A', rh: '阳性', vol: '2.0', unit: 'U', fhNo: 'FX2026060401', deal: '' },
])
// tab激活
const activeTab = ref('tab1')
// 表单数据
const formData = reactive({
bloodSn: '',
fhDate: '0000-00-00 00:00',
department: '',
aboBlood: '',
applyNo: '',
applyDate: '0000-00-00 00:00',
bloodType: '',
rhD: '',
patientName: '',
inId: '',
vol1: '',
vol2: '',
regDate: '2026-06-04 15:27',
docName: '',
nurse: '管理员',
speed: '',
check1: true,
check2: true,
check3: true,
check4: true,
check5: true,
startTime: '',
endTime: '',
q1Time: '',
q1Nurse: '管理员',
qhTime: '',
qhNurse: '管理员',
bagDeal: '置入双层黄色垃圾袋',
checkUser: '',
record: '无输血不良反应'
})
const queryByFh = () => { console.log('按发血单号查询', searchForm.value.fhNo) }
const queryByIn = () => { console.log('按住院号查找', searchForm.value.inNo) }
</script>
<style scoped lang="scss">
.app-container {
padding: 14px;
display: flex;
flex-direction: column;
gap: 10px;
overflow-y: auto;
// 搜索卡片
.search-card {
background: #fff;
padding: 12px;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
:deep(.el-form-item) {
margin-bottom: 0;
}
}
// 上部表格卡片
.table-top-card {
background: #fff;
padding: 16px;
border-radius: 6px;
box-shadow: 0 1px 12px rgba(0, 0, 0, 0.065);
:deep(.el-table__header th) {
background: #f5f7fa;
}
}
:deep(.el-tabs__header) {
margin-bottom: 10px;
}
// 下方表单卡片
.form-card {
background: #fff;
padding: 12px;
border-radius: 6px;
box-shadow: 0 1px 12px rgba(0, 0, 0, 0.065);
.form-top-label {
:deep(.el-form-item) {
margin-bottom: 6px;
}
}
.split-line {
font-size: 15px;
font-weight: 600;
color: #303133;
margin: 8px 0;
display: flex;
align-items: center;
&::before {
content: '';
display: inline-block;
width: 4px;
height: 14px;
background-color: #409eff;
margin-right: 8px;
border-radius: 0 4px 4px 0;
}
}
.form-row-check {
display: flex;
flex-direction: column;
padding-left: 30px;
}
:deep(.red-label) {
.el-form-item__label {
color: #f53f3f;
font-weight: bold;
}
}
}
}
</style>