581 lines
17 KiB
Vue
581 lines
17 KiB
Vue
/**
|
|
* @file bloodTransfusionAssessment.vue
|
|
* @description: 输血评估
|
|
* @author: w
|
|
* @since: 2026-06-04
|
|
*/
|
|
|
|
<template>
|
|
<div class="app-container">
|
|
<div class="section">
|
|
<el-button type="primary" plain @click="openJsDialog">检索</el-button>
|
|
<el-button type="primary" plain @click="handleAdd">新增</el-button>
|
|
<el-button type="danger" plain :disabled="!evaluationInfo.billNo" @click="handleDel">删除</el-button>
|
|
<el-button type="success" plain @click="handleSubmit">保存</el-button>
|
|
<el-button type="primary" plain @click="goSxPath">输血申请</el-button>
|
|
<el-button type="warning" plain :disabled="!evaluationInfo.billNo"
|
|
@click="printPg('ASSESS_BEFORE')">打印输血前评估单</el-button>
|
|
<el-button type="warning" plain :disabled="!evaluationInfo.billNo"
|
|
@click="printPg('INFORMED_CONSENT')">打印输血知情同意书</el-button>
|
|
</div>
|
|
|
|
|
|
<el-form label-width="auto">
|
|
<div class="section">
|
|
<el-row :gutter="20">
|
|
<el-col :span="4">
|
|
<el-form-item label="评估单号">
|
|
<el-input v-model="evaluationInfo.billNo" disabled />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="评估日期">
|
|
<el-input v-model="evaluationInfo.assessmentDate" disabled />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="评估医师">
|
|
<el-input v-model="evaluationInfo.assess_person" disabled />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</div>
|
|
<!-- 基础信息 -->
|
|
<div class="section">
|
|
<div class="title">基础信息</div>
|
|
<el-row :gutter="20">
|
|
<el-col :span="4">
|
|
<el-form-item label="住院号/ID号">
|
|
<el-input v-model="baseInfo.beinhos_id" @keyup.enter="handleChange"
|
|
:disabled="evaluationInfo.billNo !== ''" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="姓 名">
|
|
<el-input v-model="baseInfo.patient_name" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="血 型">
|
|
<el-input v-model="baseInfo.abo" disabled :value="baseInfo.abo" />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="4">
|
|
<el-form-item label="床位号">
|
|
<el-input v-model="bloodInfo.patient_bed" />
|
|
</el-form-item>
|
|
</el-col>
|
|
|
|
<el-col :span="4">
|
|
<el-form-item label="性别">
|
|
<el-select v-model="baseInfo.patient_sex" placeholder="">
|
|
<el-option label="男" value="男" />
|
|
<el-option label="女" value="女" />
|
|
<el-option label="未知" value="未知" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
|
|
<el-col :span="4">
|
|
<el-form-item label="Rh(D)">
|
|
<el-input v-model="baseInfo.rh" disabled :value="baseInfo.rh" />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="4">
|
|
<el-form-item label="科 室">
|
|
<SelectTable v-model:data="bloodInfo.dept_id" :tableData="dictData.ks" placeholder="" />
|
|
</el-form-item>
|
|
</el-col>
|
|
|
|
<el-col :span="4">
|
|
<el-form-item label="年 龄">
|
|
<el-input v-model="baseInfo.age" style="width:60%" />
|
|
<div style="width: 40%">
|
|
<el-select v-model="baseInfo.nldw" placeholder="">
|
|
<el-option v-for="v in dictData.nldw" :label="v.label" :value="v.value" />
|
|
</el-select>
|
|
</div>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="病 区">
|
|
<SelectTable v-model:data="bloodInfo.zone_id" dict-type="bq" placeholder="" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="临床诊断">
|
|
<el-input v-model="bloodInfo.diagnoses" />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="8">
|
|
<el-form-item label="输血目的">
|
|
<SelectTable v-model:data="bloodInfo.intent" dict-type="sxmd" placeholder="" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="出血量">
|
|
<el-input v-model="bloodInfo.blood_loss" type="number" />
|
|
</el-form-item>
|
|
</el-col>
|
|
|
|
<el-col :span="4">
|
|
<el-form-item label="贫血程度">
|
|
<el-select v-model="bloodInfo.anemia" placeholder="">
|
|
<el-option v-for="v in dictData.anemia" :label="v.label" :value="v.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
|
|
</el-row>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="4">
|
|
<el-form-item label="血液品种">
|
|
<SelectTable v-model:data="bloodInfo.blood_breed" dict-type="xylx" placeholder="" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="血量">
|
|
<el-input v-model="bloodInfo.blood_num" type="number" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="8">
|
|
<el-form-item label=" ">
|
|
<el-checkbox v-model="bloodInfo.agreement_ink" class="text-danger" true-value="Y" false-value="N">
|
|
病人/病人家属是否签署输血同意书
|
|
</el-checkbox>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<el-form-item label="病情概要" class="tips-label">
|
|
<span class="tips">
|
|
(病人基本情况、贫血程度、凝血障碍、有无创面弥漫性渗血、心肺代偿功能、有无代谢率增高、年龄因素、输血目的等。)
|
|
</span>
|
|
<el-input v-model="bloodInfo.bqgy" type="textarea" :rows="3" style="margin-top: 8px" />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</div>
|
|
<div class="section">
|
|
<div class="title">病人最近检查结果</div>
|
|
|
|
<el-row :gutter="20">
|
|
<el-col :span="18">
|
|
<el-row :gutter="50">
|
|
<el-col :span="6" v-for="item in lisProject" class="col-project">
|
|
<el-form-item :label="item.item_name">
|
|
<el-select v-model="item.item_result" placeholder="">
|
|
<el-option v-for="v in dictData.sxqjcxmmrz" :label="v.label" :value="v.value" />
|
|
</el-select>
|
|
<span class="unit">{{ item.item_unit }}</span>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-col>
|
|
</el-row>
|
|
</div>
|
|
</el-form>
|
|
|
|
<el-dialog title="输血申请检索" v-model="visible" width="800px" :close-on-click-modal="false" @closed="handleClose">
|
|
<div class="mb10">
|
|
<el-button type="primary" @click="handleSearch">检索</el-button>
|
|
<el-button type="success" @click="handleConfirm">确认</el-button>
|
|
</div>
|
|
<!-- 检索条件区 -->
|
|
<el-form :model="searchForm" label-width="auto" class="search-form">
|
|
<el-row :gutter="30">
|
|
<el-col :span="14">
|
|
<el-form-item label="评估日期">
|
|
<div class="date-range">
|
|
<el-date-picker v-model="searchForm.stime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
|
style="width: 47%" />
|
|
<span class="separator" style="width: 6%;display: inline-block;text-align: center;">-</span>
|
|
<el-date-picker v-model="searchForm.etime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
|
style="width: 47%" />
|
|
</div>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="10">
|
|
<el-form-item label="患者姓名">
|
|
<el-input v-model="searchForm.patient_name" placeholder="" />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row :gutter="30">
|
|
<el-col :span="14">
|
|
<el-form-item label="评估单号">
|
|
<el-input v-model="searchForm.bill_no" placeholder="" />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="10">
|
|
<el-form-item label="住院号/ID号">
|
|
<el-input v-model="searchForm.beinhos_id" placeholder="" />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
|
|
<!-- 结果表格区 -->
|
|
<el-table :data="tableData" border style="width: 100%; margin-top: 10px" height="350" @row-click="handleRowClick"
|
|
highlight-current-row>
|
|
<el-table-column prop="bill_no" label="评估单号" align="center" width="180" />
|
|
<el-table-column prop="dept_id" label="科室" align="center">
|
|
<template #default="scope">
|
|
{{ formatDict(scope.row.dept_id, 'ks') }}
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="beinhos_id" label="住院号" align="center" />
|
|
<el-table-column prop="patient_name" label="姓名" align="center" />
|
|
<el-table-column prop="assess_data" label="评估日期" width="180" align="center" />
|
|
<el-table-column prop="assess_person" label="评估人" align="center" />
|
|
</el-table>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import dayjs from 'dayjs'
|
|
import { printPat, queryPatInfo, queryPatList, savePat, queryPatOne, updatePat, delPat } from '@/api/doctor/assessment'
|
|
import { queryLisProject, getParameterOne } from '@/api/common'
|
|
import { getDictData, formatDict, dictData } from '@/hooks'
|
|
import router from '@/router'
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
import { printBase64PDF } from '@/utils/classCom'
|
|
import useUserStore from '@/store/modules/user'
|
|
import { useSysParam } from '@/hooks/useSysParam'
|
|
const { getParam } = useSysParam()
|
|
|
|
|
|
const userInfo = useUserStore()
|
|
const visible = ref(false)
|
|
// 表单数据
|
|
const searchForm = ref({
|
|
stime: dayjs().format('YYYY-MM-DD'),
|
|
etime: dayjs().format('YYYY-MM-DD'),
|
|
patient_name: '',
|
|
bill_no: '',
|
|
beinhos_id: ''
|
|
})
|
|
|
|
const tableData = ref([])
|
|
|
|
const evaluationInfo = ref({
|
|
assessmentDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
|
billNo: '',
|
|
assess_person: userInfo.nickName,
|
|
})
|
|
|
|
// 基础信息数据
|
|
const baseInfo = ref({
|
|
beinhos_id: '',
|
|
nldw: '岁',
|
|
})
|
|
// 输血数据
|
|
const bloodInfo = ref({
|
|
agreement_ink: 'Y',
|
|
assess_person: userInfo.name,//申请人
|
|
})
|
|
|
|
// 检查结果
|
|
const lisProject = ref([])
|
|
|
|
|
|
// 检索
|
|
const openJsDialog = () => {
|
|
getList()
|
|
visible.value = true
|
|
}
|
|
const handleSearch = () => {
|
|
getList()
|
|
}
|
|
const handleConfirm = () => {
|
|
if (!seelctRow.value.bill_no) return ElMessage.warning('请选择评估单')
|
|
evaluationInfo.value.billNo = seelctRow.value.bill_no
|
|
getBillInfo()
|
|
visible.value = false
|
|
seelctRow.value = {}
|
|
}
|
|
|
|
const handleClose = () => {
|
|
visible.value = false
|
|
searchForm.value = {
|
|
stime: dayjs().format('YYYY-MM-DD'),
|
|
etime: dayjs().format('YYYY-MM-DD'),
|
|
patient_name: '',
|
|
bill_no: '',
|
|
beinhos_id: ''
|
|
}
|
|
seelctRow.value = {}
|
|
}
|
|
|
|
//获取评估单信息
|
|
const getBillInfo = () => {
|
|
queryPatOne({ billNo: evaluationInfo.value.billNo }).then((res) => {
|
|
if (res.code == 0) {
|
|
evaluationInfo.value.assessmentDate = res.data.xkTransfuseApplyBeforeList[0].assess_data
|
|
baseInfo.value = res.data.xkPatientInfo
|
|
bloodInfo.value = res.data.xkTransfuseApplyBeforeList[0]
|
|
lisProject.value = res.data.xkTransfuseApplyTestitemList.map(item => {
|
|
return {
|
|
bill_no: item.bill_no,
|
|
item_name: item.pro_name,
|
|
item_result: item.item_result,
|
|
item_unit: item.item_unit,
|
|
test_date: item.test_date,
|
|
sid: item.sid
|
|
}
|
|
})
|
|
splitAge(baseInfo.value.age)
|
|
}
|
|
})
|
|
}
|
|
|
|
// 回显时拆分 年龄 + 单位
|
|
const splitAge = (ageStr: string) => {
|
|
const unitList = dictData.value.nldw.map(item => item.value)
|
|
let age = ageStr
|
|
let unit = '岁'
|
|
for (const u of unitList) {
|
|
if (ageStr.includes(u)) {
|
|
age = ageStr.replace(u, '')
|
|
unit = u
|
|
break
|
|
}
|
|
}
|
|
baseInfo.value.age = age
|
|
baseInfo.value.nldw = unit
|
|
}
|
|
|
|
const seelctRow = ref({})
|
|
const handleRowClick = (row) => {
|
|
seelctRow.value = row
|
|
}
|
|
//查询单据信息
|
|
const getList = () => {
|
|
const data = {
|
|
...searchForm.value,
|
|
stime: dayjs(searchForm.value.stime).format('YYYY-MM-DD') + ' 00:00:00',
|
|
etime: dayjs(searchForm.value.etime).format('YYYY-MM-DD') + ' 23:59:59',
|
|
}
|
|
queryPatList(data).then((res) => {
|
|
tableData.value = res.data || []
|
|
})
|
|
}
|
|
|
|
// 关闭弹窗
|
|
const handleAdd = () => {
|
|
evaluationInfo.value.assessmentDate = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
|
evaluationInfo.value.billNo = ''
|
|
baseInfo.value = { beinhos_id: '', nldw: '岁' }
|
|
bloodInfo.value = { agreement_ink: 'Y', assess_person: userInfo.name }
|
|
getProject()
|
|
}
|
|
|
|
//删除单据
|
|
const handleDel = () => {
|
|
ElMessageBox.confirm('确定删除当前评估单吗?', '提示', {
|
|
type: 'warning'
|
|
}).then(() => {
|
|
delPat({ billNo: evaluationInfo.value.billNo }).then(() => {
|
|
ElMessage.success('删除成功')
|
|
handleAdd()
|
|
})
|
|
})
|
|
}
|
|
|
|
//打印输血评估单
|
|
const printPg = (name: string) => {
|
|
printPat({ billNo: evaluationInfo.value.billNo, templateName: name }).then((res) => {
|
|
if (res.data) {
|
|
printBase64PDF(res.data)
|
|
}
|
|
})
|
|
}
|
|
|
|
const handleChange = () => {
|
|
queryPatInfo({ patNo: baseInfo.value.beinhos_id }).then((res) => {
|
|
baseInfo.value = res.data.xkPatientInfo
|
|
// bloodInfo.value = res.data.xkTransfuseApplyBeforeList[0] || {}
|
|
// lisProject.value = res.data.xkTransfuseApplyTestitemList || []
|
|
|
|
splitAge(baseInfo.value.age)
|
|
})
|
|
}
|
|
|
|
// 提交
|
|
const handleSubmit = () => {
|
|
if (bloodInfo.value.bill_status && bloodInfo.value.bill_status == '2') return ElMessage.warning('该评估单已审核,不允许修改!')
|
|
//判断病情概要是否填写
|
|
if (getParam('HZBQGY') == 'Y' && !bloodInfo.value.bqgy) return ElMessage.warning('请务必填写病情概要,以便输血科评估用血合理性!')
|
|
const tempPatient = { ...baseInfo.value }
|
|
|
|
if (baseInfo.value.age) {
|
|
tempPatient.age = baseInfo.value.age + baseInfo.value.nldw
|
|
}
|
|
|
|
const data = {
|
|
xkPatientInfo: tempPatient,
|
|
xkTransfuseApplyBeforeList: [{
|
|
...bloodInfo.value,
|
|
beinhos_id: baseInfo.value.beinhos_id,
|
|
assess_data: evaluationInfo.value.assessmentDate
|
|
}],
|
|
xkTransfuseApplyTestitemList: lisProject.value
|
|
}
|
|
if (bloodInfo.value.bill_status && bloodInfo.value.bill_status == '1') {
|
|
updatePat(data).then((res) => {
|
|
if (res.code == 0) {
|
|
ElMessage.success('保存成功')
|
|
}
|
|
})
|
|
} else {
|
|
savePat(data).then((res) => {
|
|
if (res.code == 0) {
|
|
ElMessage.success('保存成功')
|
|
evaluationInfo.value.billNo = res.data
|
|
|
|
//获取到评估单号后请求最新评估单信息
|
|
getBillInfo()
|
|
}
|
|
})
|
|
}
|
|
|
|
|
|
}
|
|
|
|
const goSxPath = () => {
|
|
router.push({ path: `/doctor/application` })
|
|
}
|
|
|
|
const getProject = () => {
|
|
queryLisProject({ need: 'Y' }).then((res) => {
|
|
lisProject.value = res.data.map(item => {
|
|
return {
|
|
bill_no: '',
|
|
item_name: item.pro_name,
|
|
item_result: '',
|
|
item_unit: item.unit,
|
|
test_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
|
sid: item.sid
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
onMounted(() => {
|
|
getDictData('ks', 'sxqjcxmmrz', 'nldw', 'anemia')
|
|
getProject()
|
|
|
|
|
|
const tipText = `<strong>输血报销适用限制范围如下:</strong><br />
|
|
诊疗少白细胞红细胞限特殊适应症与急救、抢救请根据限制范围,结合当前病人情况,判断是否适用医保如为自费患者。<br />
|
|
请到HIS-医保管理菜单-医保费用审核里`
|
|
//判断是否显示医保提示
|
|
if (getParam('YBZFXMTSXX') == 'Y') {
|
|
ElMessageBox.alert(
|
|
tipText,
|
|
'提示',
|
|
{
|
|
dangerouslyUseHTMLString: true,
|
|
}
|
|
)
|
|
}
|
|
})
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.app-container {
|
|
overflow-y: auto;
|
|
font-size: 14px;
|
|
padding: 10px;
|
|
}
|
|
|
|
.section {
|
|
background: #fff;
|
|
border-radius: 4px;
|
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
|
|
padding: 12px;
|
|
margin-bottom: 10px;
|
|
|
|
.title {
|
|
position: relative;
|
|
padding-left: 12px;
|
|
padding-bottom: 6px;
|
|
font-size: 15px;
|
|
font-weight: 600;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
// align-items: center;
|
|
|
|
/* 左侧蓝色小竖线 */
|
|
&::before {
|
|
content: '';
|
|
position: absolute;
|
|
left: 0;
|
|
top: 2px;
|
|
bottom: 2px;
|
|
width: 4px;
|
|
height: 14px;
|
|
background-color: #409eff;
|
|
margin-right: 8px;
|
|
border-radius: 0 4px 4px 0;
|
|
}
|
|
}
|
|
|
|
.el-form-item {
|
|
margin-bottom: 6px;
|
|
|
|
:deep(.el-form-item__label) {
|
|
font-weight: 700;
|
|
}
|
|
}
|
|
|
|
.col-project {
|
|
position: relative;
|
|
|
|
}
|
|
|
|
.unit {
|
|
position: absolute;
|
|
left: 100%;
|
|
top: 0;
|
|
color: #aeb1b7;
|
|
margin-left: 5px;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
.tips-label {
|
|
label {
|
|
display: none !important;
|
|
}
|
|
}
|
|
|
|
.tips {
|
|
color: #f00;
|
|
font-size: 12px;
|
|
display: block;
|
|
}
|
|
|
|
.text-danger {
|
|
color: #f00 !important;
|
|
|
|
:deep(.el-checkbox__label) {
|
|
color: #f00 !important;
|
|
}
|
|
}
|
|
</style> |