交叉配血、优化其他页面

This commit is contained in:
wuyy 2026-08-12 18:04:04 +08:00
parent 82212c00c6
commit 57af215001
15 changed files with 685 additions and 197 deletions

View File

@ -128,4 +128,76 @@ export function queryOneInfo(query?: Object) {
params: query
})
}
// 获取交叉配血列表
export function queryMatchBloodList(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/queryMatchBloodList',
method: 'get',
params: query
})
}
// 获取待处理单据
export function queryWaitInfo(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/queryWaitInfo',
method: 'get',
params: query
})
}
// 获取申请单数据
export function queryMatchOne(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/queryOne',
method: 'get',
params: query
})
}
// 校验该血液是否已经存在配血数据
export function checkBloodMatched(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/checkBloodMatched',
method: 'get',
params: query
})
}
// 获取血液信息
export function getBloodInfoMatch(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/getBloodInfoMatch',
method: 'get',
params: query
})
}
// 保存交叉配血数据
export function saveBloodData(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/saveData',
method: 'post',
data: query
})
}
// 查询单条数据
export function queryMatchApplyInfo(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/queryApplyInfo',
method: 'get',
params: query
})
}
// 取消血液配血
export function cancelBloodInfoMatch(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/cancelBloodInfoMatch',
method: 'get',
params: query
})
}
// 作废配血单
export function deleteBloodInfoMatch(query?: Object) {
return request({
url: '/bus/bloodbank/matchBlood/deleteBloodInfoMatch',
method: 'get',
params: query
})
}

View File

@ -80,4 +80,12 @@ export function queryOperation(query?: Object) {
method: 'get',
params: query
})
}
// 根据血液流水号获取血液信息 bloodNo
export function queryBloodInfoByBloodNo(query?: Object) {
return request({
url: '/bus/common/queryBloodInfoByBloodNo',
method: 'get',
params: query
})
}

View File

@ -3,7 +3,7 @@
<el-dropdown ref="dropdownRef" trigger="manual" placement="bottom-start" style="width:100%" :teleported="false"
:popper-style="{ width: realtableWidth }">
<div class="input-wrap" style="width:100%">
<el-input v-model="inputText" :placeholder="placeholder" :readonly="readonly"
<el-input v-model="inputText" :placeholder="placeholder" :disabled="disabled"
@keydown.enter.prevent="handleInputEnter" />
<span class="arrow-icon" @click.stop="toggleDropdown">
<el-icon>
@ -106,8 +106,9 @@ const props = defineProps({
type: Boolean,
default: true
},
// 是否只读
readonly: {
//禁用下拉箭头事件
disabled: {
type: Boolean,
default: false
}
@ -258,6 +259,7 @@ const handleInputEnter = (e: KeyboardEvent) => {
// 切换下拉框
const toggleDropdown = () => {
if (props.disabled) return
if (!dropdownRef.value) return
showPanel.value = !showPanel.value
if (showPanel.value) {

View File

@ -79,9 +79,9 @@ export function comDict(...args: string[]): Promise<DictResult> {
dictType: dictType
}).then((resp: any) => {
const dictList = resp.data.map((p: any) => ({
...p,
label: p.wordbook_name,
value: p.wordbook_code,
remark: p.remark,
}));
res.value[dictType] = dictList;

View File

@ -163,16 +163,16 @@
</template>
<template #pickNurse="{ row }">
{{userList.find(item => item.value == row.Pick_Nurse)?.label}}
{{userList.find(item => item.value == row.Pick_Nurse)?.label || row.Pick_Nurse}}
</template>
<template #sendNurse="{ row }">
{{userList.find(item => item.value == row.Send_Nurse)?.label}}
{{userList.find(item => item.value == row.Send_Nurse)?.label || row.Send_Nurse}}
</template>
<template #takeOverMan="{ row }">
{{userList.find(item => item.value == row.TakeOver_Man)?.label}}
{{userList.find(item => item.value == row.TakeOver_Man)?.label || row.TakeOver_Man}}
</template>
<template #sendperson="{ row }">
{{userList.find(item => item.value == row.sendperson)?.label}}
{{userList.find(item => item.value == row.sendperson)?.label || row.sendperson}}
</template>
<template #status="{ row }">

View File

@ -9,73 +9,79 @@
<!-- 顶部操作按钮栏 -->
<div class="card-box">
<el-button type="primary" plain @click="openJsHandle">检索</el-button>
<el-button type="primary" plain>新增单据</el-button>
<el-button type="danger" plain>删除单据</el-button>
<el-button type="danger" plain>作废整单</el-button>
<el-button type="primary" plain @click="addMatch">新增单据</el-button>
<el-button type="danger" plain @click="cancelApply">作废整单</el-button>
<el-button type="primary" plain>血液库存</el-button>
<el-button type="primary" plain>检验结果</el-button>
<el-button type="success" plain>保存</el-button>
<el-button type="success" plain :disabled="bloodInfo.bill_status && bloodInfo.bill_status != 'A'"
@click="saveBloodApply" :loading="saveLoading">保存</el-button>
<el-button type="warning" plain>打印</el-button>
</div>
<!-- 主体左右分栏容器 -->
<div class="main-wrap">
<!-- 左侧主表单区域 -->
<el-row :gutter="10">
<el-col :span="15">
<!-- 申请单信息卡片 -->
<div class="card-box">
<div class="section-title">申请单信息</div>
<el-form :model="formData" label-width="auto">
<!-- 使用el-row实现一行四个表单项 -->
<el-row :gutter="10" class="left-row">
<el-col :span="15" class="left-col">
<el-form :model="formData" label-width="auto" class="form_box"
:disabled="bloodInfo.bill_status && bloodInfo.bill_status != 'A'">
<div class="card-box">
<div class="section-title">
<div> 申请单信息 </div>
<div v-show="bloodInfo.bill_no">
配血单号:{{ bloodInfo.bill_no || '' }}
</div>
</div>
<el-row :gutter="10">
<el-col :span="6">
<el-form-item label="申请单号">
<DropdownTableSelect v-model="formData.applyBillNo" :column-list="applyColumns"
labelField="applyBillNo" :table-data="applyTableData" @open="loadApplyData"
@search="handleSearch" />
<DropdownTableSelect v-model="formData.bill_no" :column-list="applyColumns" tableWidth="800px"
:showSearch="false" labelField="bill_no" :table-data="applyTableData" @open="loadApplyData"
@search="searchApply" @change="searchApply" :disabled="!!(bloodInfo.bill_no)">
<template #dept_id="{ row }">
{{ formatDict(row.dept_id, 'ks') }}
</template>
<template #blood_breed="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
</DropdownTableSelect>
</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" placeholder="0000-00-00 00:00" style="width: 100%;" />
<el-input v-model="formData.apply_date" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="姓 名">
<el-input v-model="formData.patientName" placeholder="" style="width: 100%;" />
<el-input v-model="formData.patient_name" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="血型">
<el-input v-model="formData.bloodType" placeholder="" style="width: 100%;" />
</el-form-item>
<div class="status" v-show="formData.bill_stasus"
:style="{ borderColor: getBillStatusInfo(formData.bill_stasus).color, color: getBillStatusInfo(formData.bill_stasus).color }">
{{ getBillStatusInfo(formData.bill_stasus).label }}
</div>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="6">
<el-form-item label="性 别">
<el-select v-model="formData.gender" placeholder="请选择">
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
<el-input v-model="formData.patient_sex" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="年 龄">
<el-input v-model="formData.age" placeholder="" style="width: 100%;" />
<el-input v-model="formData.age" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="住院号/ID号">
<el-input v-model="formData.hospitalId" placeholder="" style="width: 100%;" />
<el-input v-model="formData.beinhos_id" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="Rh(D)">
<el-input v-model="formData.rhD" placeholder="" style="width: 100%;" />
<el-form-item label="血型">
<el-input v-model="formData.abo_type" placeholder="" disabled />
</el-form-item>
</el-col>
</el-row>
@ -83,27 +89,32 @@
<el-row :gutter="10">
<el-col :span="6">
<el-form-item label="病 区">
<el-input v-model="formData.ward" placeholder="" style="width: 100%;" />
<SelectTable v-model:data="formData.zone_id" :tableData="dictData.bq" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="科 室">
<el-input v-model="formData.department" placeholder="" style="width: 100%;" />
<SelectTable v-model:data="formData.dept_id" :tableData="dictData.ks" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="床位号">
<el-input v-model="formData.bedNo" placeholder="" style="width: 100%;" />
<el-input v-model="formData.patient_bed" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="Rh(D)">
<el-input v-model="formData.rh_type" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="临床诊断">
<el-input v-model="formData.diagnosis" placeholder="" style="width: 100%;" />
<el-input v-model="formData.diagnoses" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="输血目的">
<el-input v-model="formData.transPurpose" placeholder="" style="width: 100%;" />
<SelectTable v-model:data="formData.intent" :tableData="dictData.sxmd" placeholder="" disabled />
</el-form-item>
</el-col>
</el-row>
@ -111,27 +122,29 @@
<el-row :gutter="10">
<el-col :span="5">
<el-form-item label="申请血型">
<el-input v-model="formData.applyBloodType" placeholder="" style="width: 100%;" />
<el-input v-model="formData.apply_bloodtype" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="ABO复核">
<el-input v-model="formData.aboCheck" placeholder="" style="width: 100%;" />
<el-input v-model="formData.affirm_abo" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="亚型">
<el-input v-model="formData.subType" placeholder="" style="width: 100%;" />
<SelectTable v-model:data="formData.Sub_Blood" :tableData="dictData.subgroup" placeholder=""
disabled />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="Rh(D)复核">
<el-input v-model="formData.rhDCheck" placeholder="" style="width: 100%;" />
<el-input v-model="formData.check_rh" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="抗体筛选">
<el-input v-model="formData.antibodyScreen" placeholder="" style="width: 100%;" />
<SelectTable v-model:data="formData.affirm_antibody" :tableData="dictData.ktsx" placeholder=""
disabled />
</el-form-item>
</el-col>
</el-row>
@ -140,81 +153,151 @@
<el-col :span="15">
<el-form-item label=" ">
<div class="checkbox-group">
<el-checkbox v-model="formData.transReactionHis">输血反应史</el-checkbox>
<el-checkbox v-model="formData.transHistory">输血史</el-checkbox>
<el-checkbox v-model="formData.deliverHistory">分娩史</el-checkbox>
<el-checkbox v-model="formData.pregnancyHistory">妊娠史</el-checkbox>
<el-checkbox v-model="formData.matchHistory">配型史</el-checkbox>
<el-checkbox :model-value="formData.reaction_history == 'Y'">输血反应史</el-checkbox>
<el-checkbox :model-value="formData.transfuse_history == 'Y'">输血史</el-checkbox>
<el-checkbox :model-value="formData.parturition_history == 'Y'">分娩史</el-checkbox>
<el-checkbox :model-value="formData.gestation_history == 'Y'">妊娠史</el-checkbox>
<el-checkbox :model-value="formData.match_history == 'Y'">配型史</el-checkbox>
</div>
</el-form-item>
</el-col>
<el-col :span="7">
<el-col :span="9">
<el-form-item label="预定输血日期">
<el-date-picker v-model="formData.preTransDate" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="0000-00-00 00:00" style="width: 100%;" />
<el-date-picker v-model="formData.use1_date" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 血液申请表格 - 固定高度确保一屏展示 -->
<el-table :data="bloodApplyTable" border height="160">
<el-table-column label="血液品种" prop="bloodKind" align="center" />
<el-table-column label="申请血量" prop="applyNum" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
<el-table-column label="申请血型" prop="applyBlood" align="center" />
<el-table-column label="替代血液品种" prop="replaceBlood" align="center" />
<el-table-column label="输血目的" prop="transGoal" align="center" />
<el-table-column label="输血指征" prop="transIndex" align="center" />
</el-table>
</div>
<!-- 配血记录卡片 - 固定高度确保一屏展示 -->
<div class="card-box" style="margin-bottom: 0px;">
<div class="section-title">配血记录</div>
<div class="mb10">
<el-select v-model="matchSelect" placeholder="请选择" style="width: 150px">
<el-option label="增加配血血液" value="add" />
<el-option label="取消配血血液" value="cancel" />
</el-select>
<el-input v-model="searchText" placeholder="" style="width: 250px;margin-left: 20px;" />
<el-table :data="bloodApplyTable" border height="150">
<el-table-column prop="blood_breed" label="血液品种" align="center" width="150">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
</el-table-column>
<el-table-column prop="blood_num" label="申请血量" align="center" />
<el-table-column prop="unit" label="单位" align="center" width="60" />
<el-table-column prop="apply_bloodtype" label="申请血型" align="center">
<template #default="{ row }">
{{ formatDict(row.apply_bloodtype, 'abotype') }}
</template>
</el-table-column>
<el-table-column prop="replace_bloodbreed" label="替代血液品种" align="center" width="120">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.replace_bloodbreed)?.label || row.replace_bloodbreed}}
</template>
</el-table-column>
<el-table-column prop="intent" label="输血目的" align="center" width="200">
<template #default="{ row }">
{{ formatDict(row.intent, 'sxmd') }}
</template>
</el-table-column>
<el-table-column prop="causalis" label="输血指征" align="center" width="200">
<template #default="{ row }">
{{ formatDict(row.causalis, 'sxzz') }}
</template>
</el-table-column>
<el-table-column label="实际用血量" prop="ops_fact_use" align="center" />
</el-table>
</div>
<el-table :data="matchTable" border height="200" stripe>
<el-table-column label="序号" prop="index" align="center" width="60" />
<el-table-column label="复核者" prop="checkUser" align="center" />
<el-table-column label="血液流水号" prop="bloodSerial" align="center" width="120" />
<el-table-column label="产品码" prop="productCode" align="center" />
<el-table-column label="血液品种" prop="bloodType" align="center" />
<el-table-column label="血型" prop="abo" align="center" />
<el-table-column label="Rh(D)" prop="rh" align="center" />
<el-table-column label="容量" prop="capacity" align="center" />
<el-table-column label="供者血型复核" prop="donorAbo" align="center" width="120" />
<el-table-column label="供者Rh(D)复核" prop="donorRh" align="center" width="120" />
<el-table-column label="配血方法" prop="donorRh" align="center" />
<el-table-column label="复核配血方法" prop="donorRh" align="center" width="120" />
<el-table-column label="主侧" prop="donorRh" align="center" />
<el-table-column label="次侧" prop="donorRh" align="center" />
<el-table-column label="结果" prop="donorRh" align="center" />
<el-table-column label="配血日期" prop="donorRh" align="center" />
<el-table-column label="配血者" prop="donorRh" align="center" />
<el-table-column label="血液存放位子" prop="donorRh" align="center" width="120" />
<el-table-column label="标本存放位子" prop="donorRh" align="center" width="120" />
</el-table>
</div>
<div class="card-box pxBox" style="margin-bottom: 0px;">
<div class="section-title">配血记录</div>
<div class="mb10">
<el-select v-model="matchSelect" placeholder="请选择" style="width: 150px">
<el-option label="增加配血血液" value="add" />
<el-option label="取消配血血液" value="del" />
</el-select>
<el-input v-model="bloodNo" placeholder="" @keyup.enter="bloodEnter"
style="width: 250px;margin-left: 20px;" />
</div>
<div class="table-box">
<CustomTable :data="matchTable" :columns="matchColumns" :config="config">
<template #second_match_medic_name="{ row }">
<SelectTable v-model:data="row.second_match_medic" :tableData="userList" placeholder=""
class="full-width-input" clearable />
</template>
<template #blood_breed="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
<template #offer_affirm_abo="{ row }">
<el-select v-model="row.offer_affirm_abo" placeholder="" class="full-width-input">
<el-option v-for="option in dictData.abotype" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</template>
<template #check_offer_rh="{ row }">
<el-select v-model="row.check_offer_rh" placeholder="" class="full-width-input">
<el-option v-for="option in dictData.rhtype" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</template>
<template #match_method="{ row }">
<el-select v-model="row.match_method" placeholder="" class="full-width-input">
<el-option v-for="option in dictData.pxff" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</template>
<template #second_match_method="{ row }">
<el-select v-model="row.second_match_method" placeholder="" class="full-width-input">
<el-option v-for="option in dictData.pxff" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</template>
<template #first_side="{ row }">
<el-select v-model="row.first_side" placeholder="" class="full-width-input">
<el-option v-for="option in dictData.zccc" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</template>
<template #second_side="{ row }">
<el-select v-model="row.second_side" placeholder="" class="full-width-input">
<el-option v-for="option in dictData.zccc" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</template>
<template #result="{ row }">
<el-select v-model="row.result" placeholder="" class="full-width-input">
<el-option v-for="option in dictData.pxjg" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</template>
<template #match_date="{ row }">
<el-date-picker v-model="row.match_date" type="datetime" format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="" class="full-width-input" />
</template>
<template #match_medic="{ row }">
<SelectTable v-model:data="row.match_medic" :tableData="userList" placeholder=""
class="full-width-input" clearable />
</template>
<template #position_blood="{ row }">
<el-input v-model="row.position_blood" placeholder="" class="full-width-input" />
</template>
<template #position_barcode="{ row }">
<el-input v-model="row.position_barcode" placeholder="" class="full-width-input" />
</template>
<template #action="{ row, $index }">
<el-button type="primary" text @click="removeRow($index)">删除</el-button>
</template>
</CustomTable>
</div>
</div>
</el-form>
</el-col>
<!-- 右侧筛选+结果表格区域 -->
<el-col :span="9">
<div class="card-box" style="margin-bottom: 0px;">
<el-col :span="9" class="right-col">
<div class="card-box pxBox" style="margin-bottom: 0px;">
<el-form :model="filterForm" inline>
<div>
<el-form-item label="姓名:">
<el-input v-model="filterForm.name" placeholder="" style="width: 120px" />
<el-input v-model="filterForm.patientName" placeholder="" style="width: 120px" clearable />
</el-form-item>
<el-form-item label="状态:">
<el-select v-model="filterForm.status" placeholder="全部" style="width: 150px">
<el-option label="全部" value="" />
<el-select v-model="filterForm.status" placeholder="全部" style="width: 150px" clearable>
<el-option v-for="option in billStatus" :key="option.value" :label="option.label"
:value="option.value" />
</el-select>
</el-form-item>
<el-form-item label="">
@ -224,25 +307,33 @@
<div>
<el-form-item label="时间:">
<el-date-picker v-model="filterForm.startTime" type="date" format="YYYY-MM-DD"
<el-date-picker v-model="filterForm.stime" type="date" format="YYYY-MM-DD" style="width: 150px"
value-format="YYYY-MM-DD" />
<span class="timesplit">-</span>
<el-date-picker v-model="filterForm.endTime" type="date" format="YYYY-MM-DD"
<el-date-picker v-model="filterForm.etime" type="date" format="YYYY-MM-DD" style="width: 150px"
value-format="YYYY-MM-DD" />
</el-form-item>
</div>
</el-form>
<div class="result-table-card">
<el-table :data="resultTable" border height="645px">
<el-table-column label="配血日期" prop="matchDate" align="center" />
<el-table-column label="患者姓名" prop="patName" align="center" />
<el-table-column label="单据状态" prop="billStatus" align="center" />
<el-table-column label="配血单号" prop="matchNo" align="center" />
<el-table-column label="申请单号" prop="applyBillNo" align="center" />
<el-table-column label="科室" prop="dept" align="center" />
<el-table-column label="ABO复核" prop="aboResult" align="center" />
<el-table-column label="Rh(D)复核" prop="rhResult" align="center" />
<div class="table-box">
<el-table :data="resultTable" border height="100%" highlight-current-row @row-click="handleRowClick">
<el-table-column label="配血日期" prop="test_date" align="center" width="150" />
<el-table-column label="患者姓名" prop="patient_name" align="center" />
<el-table-column label="单据状态" prop="bill_status" align="center">
<template #default="{ row }">
{{billStatus.find(v => v.value == row.bill_status)?.label || row.bill_status}}
</template>
</el-table-column>
<el-table-column label="配血单号" prop="bill_no" align="center" width="150" />
<el-table-column label="申请单号" prop="apply_no" align="center" width="150" />
<el-table-column label="科室" prop="dept_id" align="center">
<template #default="{ row }">
{{ formatDict(row.dept_id, 'ks') }}
</template>
</el-table-column>
<el-table-column label="ABO复核" prop="affirm_abo" align="center" />
<el-table-column label="Rh(D)复核" prop="check_rh" align="center" />
</el-table>
</div>
</div>
@ -271,20 +362,19 @@
</el-col>
<el-col :span="7">
<el-form-item label="配血单号">
<el-input v-model="searchForm.bill_no" placeholder="" />
<el-input v-model="searchForm.billNo" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="科室">
<!-- <el-input v-model="searchForm.ks" placeholder="" /> -->
<SelectTable v-model:data="searchForm.ks" :tableData="dictData.ks" placeholder="" />
<SelectTable v-model:data="searchForm.dept" :tableData="dictData.ks" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="10">
<el-form-item label="申请单号">
<el-input v-model="searchForm.bill_no" placeholder="" />
<el-input v-model="searchForm.applyNo" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="7">
@ -296,76 +386,243 @@
</el-form>
<!-- 结果表格区 -->
<el-table :data="tableData" border height="350" @row-click="handleRowClick" highlight-current-row>
<el-table :data="tableData" border height="450" @row-click="jsRowclick" highlight-current-row>
<el-table-column prop="patient_name" label="患者姓名" align="center" />
<el-table-column prop="patient_name" label="单据状态" align="center" />
<el-table-column prop="bill_status" label="单据状态" align="center">
<template #default="{ row }">
{{billStatus.find(v => v.value == row.bill_status)?.label || row.bill_status}}
</template>
</el-table-column>
<el-table-column prop="bill_no" label="配血单号" align="center" width="150" />
<el-table-column prop="bill_no" label="申请单号" align="center" width="150" />
<el-table-column prop="bill_no" label="住院号/ID号" align="center" width="150" />
<el-table-column prop="apply_no" label="申请单号" align="center" width="150" />
<el-table-column prop="beinhos_id" label="住院号/ID号" align="center" width="150" />
<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="assess_data" label="配血日期" width="150" align="center" />
<el-table-column prop="beinhos_id" label="ABO复核" align="center" />
<el-table-column prop="assess_person" label="Rh(D)复核" align="center" />
<el-table-column prop="test_date" label="配血日期" width="150" align="center" />
<el-table-column prop="affirm_abo" label="ABO复核" align="center" />
<el-table-column prop="check_rh" label="Rh(D)复核" align="center" />
</el-table>
</el-dialog>
<el-dialog title="血液库存预览" v-model="kcvisible" width="1200px" :close-on-click-modal="false" @closed="">
<el-table :data="kcTableData" border height="100%">
<el-table-column label="血液流水号" prop="matchDate" align="center" />
<el-table-column label="产品码" prop="patName" align="center" />
<el-table-column label="血型" prop="billStatus" align="center" />
<el-table-column label="Rh血型" prop="matchNo" align="center" />
<el-table-column label="有效日期" prop="bill_no" align="center" />
<el-table-column label="血液状态" prop="dept" align="center" />
<el-table-column label="血液品种" prop="aboResult" align="center" />
<el-table-column label="容量" prop="rhResult" align="center" />
<el-table-column label="单位" prop="unit" align="center" />
</el-table>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import DropdownTableSelect, { type TableColumnItem, type TableRowItem } from '@/components/DropdownTableSelect/index.vue'
import dayjs from 'dayjs'
import { getDictData, formatDict, dictData } from '@/hooks'
import { getDictData, formatDict, dictData, useCommonDict } from '@/hooks'
import { queryMatchBloodList, queryMatchOne, queryWaitInfo, getBloodInfoMatch, checkBloodMatched, saveBloodData, queryMatchApplyInfo, cancelBloodInfoMatch, deleteBloodInfoMatch } from '@/api/blood'
import { queryBloodInfoByBloodNo } from '@/api/common'
import { ElMessageBox, ElMessage } from 'element-plus'
import useUserStore from '@/store/modules/user'
const userInfo = useUserStore()
const { userList, getUserData, getServerTime, bloodBreed, getBloodList, } = useCommonDict()
const visible = ref(false)
const kcvisible = ref(false)
const kcTableData = ref([])
const bloodInfo = ref({})
const saveLoading = ref(false)
const billStatus = ref([
{ label: '未发血', value: 'A' },
{ label: '已发血', value: 'B' },
{ label: '已作废', value: 'ZF' },
])
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 applyColumns = ref<TableColumnItem[]>([
{ label: '申请单号', prop: 'applyBillNo' },
{ label: '患者姓名', prop: 'patientName' },
{ label: '科室', prop: 'dept' },
{ label: '申请品种', prop: 'bloodKind' }
{ label: '申请单号', prop: 'bill_no' },
{ label: '患者姓名', prop: 'patient_name' },
{ label: '科室', prop: 'dept_id', slotName: 'dept_id' },
{ label: '申请时间', prop: 'apply_date' },
{ label: '申请品种', prop: 'blood_breed', slotName: 'blood_breed' }
])
const applyTableData = ref<TableRowItem[]>([])
const searchText = ref('')
const matchSelect = ref('add')
// 主表单数据
const formData = ref({})
// 右侧筛选表单
const filterForm = reactive({
const filterForm = ref({
name: '',
status: '',
startTime: dayjs().format('YYYY-MM-DD'),
endTime: dayjs().format('YYYY-MM-DD'),
stime: dayjs().format('YYYY-MM-DD'),
etime: dayjs().format('YYYY-MM-DD'),
})
const bloodNo = ref('000011112235')
// 配血操作单选
const matchRadio = ref('add')
const matchSelect = ref('add')
// 血液申请表格
const bloodApplyTable = ref([])
// 配血记录表格
const matchTable = ref([])
const matchColumns = ref([
{ label: '序号', type: 'index', width: 40, visible: true, align: 'center' },
{ label: '复核者', prop: 'second_match_medic_name', align: 'center', visible: true, width: 100, slot: 'second_match_medic_name', showOverflowTooltip: false },
{ label: '血液流水号', prop: 'blood_no', align: 'center', width: 120, visible: true, },
{ label: '产品码', prop: 'product_no', align: 'center', visible: true, },
{ label: '血液品种', prop: 'blood_breed', align: 'center', visible: true, slot: 'blood_breed', },
{ label: '血型', prop: 'blood_type', align: 'center', visible: true, },
{ label: 'Rh(D)', prop: 'rh_blood_type', align: 'center', visible: true, },
{ label: '容量', prop: 'capacity', align: 'center', visible: true, },
{ label: '供者血型复核', prop: 'offer_affirm_abo', align: 'center', visible: true, width: 120, slot: 'offer_affirm_abo', showOverflowTooltip: false },
{ label: '供者Rh(D)复核', prop: 'check_offer_rh', align: 'center', visible: true, width: 120, slot: 'check_offer_rh', showOverflowTooltip: false },
{ label: '配血方法', prop: 'match_method', align: 'center', visible: true, width: 150, slot: 'match_method', showOverflowTooltip: false },
{ label: '复核配血方法', prop: 'second_match_method', align: 'center', visible: true, width: 150, slot: 'second_match_method', showOverflowTooltip: false },
{ label: '主侧', prop: 'first_side', align: 'center', visible: true, width: 150, slot: 'first_side', showOverflowTooltip: false },
{ label: '次侧', prop: 'second_side', align: 'center', visible: true, width: 150, slot: 'second_side', showOverflowTooltip: false },
{ label: '结果', prop: 'result', align: 'center', visible: true, width: 150, slot: 'result', showOverflowTooltip: false },
{ label: '配血日期', prop: 'match_date', align: 'center', visible: true, width: 150, slot: 'match_date', showOverflowTooltip: false },
{ label: '配血者', prop: 'match_medic', align: 'center', visible: true, width: 100, slot: 'match_medic', showOverflowTooltip: false },
{ label: '血液存放位子', prop: 'position_blood', align: 'center', visible: true, width: 150, slot: 'position_blood', showOverflowTooltip: false },
{ label: '标本存放位子', prop: 'position_barcode', align: 'center', visible: true, width: 150, slot: 'position_barcode', showOverflowTooltip: false },
])
const config = {
height: '100%',
border: true,
highlightCurrentRow: true,
actionFixed: 'right',
}
// 右侧结果列表
const resultTable = ref([])
const getBillStatusInfo = (code: string) => {
const statusList = dictData.value?.billApplyStatus ?? []
const target = statusList.find(item => item.value == code)
if (target) {
return { label: target.label, color: target.remark }
}
return { label: '未审核', color: '#909399' }
}
// 血液流水号获取血液信息
const bloodEnter = () => {
if (!formData.value.bill_no) return ElMessage.warning('请选择输血申请单!')
const index = matchTable.value.findIndex(item => item.blood_no == bloodNo.value)
if (matchSelect.value == 'del') {
if (index > -1) {
ElMessageBox.confirm(`确定取消血液${matchTable.value[index].blood_no}数据吗?`, '提示', { type: 'warning' }).then(() => {
cancelBloodInfoMatch({ bloodNo: matchTable.value[index].blood_no, productNo: matchTable.value[index].product_no }).then(res => {
matchTable.value.splice(index, 1)
})
})
} else {
ElMessage.warning('该血液流水号不存在,请检查!')
}
} else {
if (index > -1) return ElMessage.warning('该血液流水号已存在,请检查!')
queryBloodInfoByBloodNo({ bloodNo: bloodNo.value }).then(res => {
if (res.data.length == 1) {
const row = res.data[0]
checkBloodMatched({ bloodNo: row.blood_no, productNo: row.product_no, billNo: formData.value.bill_no }).then(res => {
if (res.code == 0) {
getBloodInfo(row)
}
if (res.code == 2) {
ElMessageBox.alert(`${res.msg}`, '提示', { type: 'warning' }).then(() => {
getBloodInfo(row)
})
}
})
}
})
}
}
const removeRow = (index) => {
ElMessageBox.confirm(`确定删除血液${matchTable.value[index].blood_no}数据吗?`, '提示', { type: 'warning' }).then(() => {
cancelBloodInfoMatch({ bloodNo: matchTable.value[index].blood_no, productNo: matchTable.value[index].product_no }).then(res => {
matchTable.value.splice(index, 1)
})
})
}
// 获取血液信息
const getBloodInfo = (row) => {
getBloodInfoMatch({ bloodNo: row.blood_no, productNo: row.product_no }).then(res => {
const row = res.data || {}
const msgArr: string[] = []
// ABO不匹配提示
if (row.blood_type != formData.value.abo_type) {
msgArr.push(`该血液流水号的血型与患者复核的血型结果不一致,请注意!`)
}
// Rh不匹配提示
if (row.rh_blood_type != formData.value.rh_type) {
msgArr.push(`患者Rh血型:Rh(D)阴性该血液的Rh血型与患者的Rh血型不符,请注意!`)
}
//血液品种不同
if (row.blood_breed != formData.value.blood_breed) {
msgArr.push(`该血液的血液品种与患者申请的血液品种不符,请注意!`)
}
// 存在任意不匹配统一弹窗
if (msgArr.length) {
ElMessageBox.alert(msgArr.join('<br/>'), '提示', { type: 'warning', dangerouslyUseHTMLString: true }).then(() => {
// 弹窗关闭后逻辑
setMatchTable(row)
})
} else {
setMatchTable(row)
}
})
}
const setMatchTable = (row) => {
matchTable.value.push({
...row,
second_match_medic: '',
offer_affirm_abo: row.blood_type,
check_offer_rh: row.rh_blood_type,
match_method: '006',
second_match_method: '002',
first_side: 'N',
second_side: 'N',
result: '001',
match_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
match_medic: userInfo.name,
position_blood: '',
position_barcode: '',
})
matchTable.value.forEach((item, index) => {
item.sid = index + 1
})
// bloodNo.value = ''
}
const selectRow = ref({})
const openJsHandle = () => {
visible.value = true
handleSearch()
}
const handleClose = () => {
@ -373,46 +630,176 @@ const handleClose = () => {
searchForm.value = {
stime: dayjs().format('YYYY-MM-DD'),
etime: dayjs().format('YYYY-MM-DD'),
patient_name: '',
bill_no: '',
beinhos_id: ''
}
selectRow.value = {}
}
const handleConfirm = () => {
if (!selectRow.value.bill_no) return ElMessage.warning('请选择配血单!')
getBloodMatchInfo()
visible.value = false
}
const jsRowclick = (row) => {
selectRow.value = row
}
const handleRowClick = (row: any) => {
console.log('点击行', row)
selectRow.value = row
getBloodMatchInfo()
}
const getBloodMatchInfo = () => {
queryMatchApplyInfo({ billNo: selectRow.value.bill_no, applyNo: selectRow.value.apply_no }).then(res => {
formData.value = res.data.matchMainInfoList[0] || {}
bloodApplyTable.value = res.data.xkTransfuseApplyBloodbreedList || []
matchTable.value = res.data.matchDetailInfoList || []
bloodInfo.value = res.data.matchDetailInfoList[0] || {}
})
}
const handleSearch = () => {
searchForm.value.stime = dayjs(searchForm.value.stime).format('YYYY-MM-DD') + ' 00:00:00'
searchForm.value.etime = dayjs(searchForm.value.etime).format('YYYY-MM-DD') + ' 23:59:59'
queryMatchBloodList(searchForm.value).then(res => {
tableData.value = res.data || []
})
}
const saveBloodApply = () => {
if (!formData.value.bill_no) return ElMessage.warning('请选择输血申请单!')
if (matchTable.value.length == 0) return ElMessage.warning('请添加配血血液!')
const allValid = matchTable.value.every(item => item.second_match_medic?.trim())
if (!allValid) return ElMessage.warning('请填写复核者!')
saveLoading.value = true
const params = {
xkMatchMain: {
apply_no: formData.value.bill_no,
input_person: userInfo.name,
bill_status: 'A',
dept_id: formData.value.dept_id,
patient_name: formData.value.patient_name,
beinhos_id: formData.value.beinhos_id,
test_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
input_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
bill_no: bloodInfo.value.bill_no || '',
},
xkMatchDetailList: matchTable.value.map(item => ({
...item,
bill_no: bloodInfo.value.bill_no || '',
}))
}
saveLoading.value = true
saveBloodData(params).then(res => {
saveLoading.value = false
if (res.code == 0) {
handleRefresh()
ElMessage.success(res.msg)
}
}).catch(() => {
saveLoading.value = false
})
}
const addMatch = () => {
formData.value = {}
bloodApplyTable.value = []
matchTable.value = []
selectRow.value = {}
bloodInfo.value = {}
}
const cancelApply = () => {
if (!bloodInfo.value.bill_no) return ElMessage.warning('请选择交叉配血单!')
deleteBloodInfoMatch({ billNo: bloodInfo.value.bill_no }).then(res => {
handleRefresh()
ElMessage.success(res.msg)
})
}
// 刷新右侧列表
const handleRefresh = () => {
console.log('刷新右侧配血列表', filterForm)
filterForm.value.stime = dayjs().format('YYYY-MM-DD') + ' 00:00:00'
filterForm.value.etime = dayjs().format('YYYY-MM-DD') + ' 23:59:59'
queryMatchBloodList(filterForm.value).then(res => {
resultTable.value = res.data || []
})
}
const loadApplyData = () => {
queryWaitInfo().then(res => {
applyTableData.value = res.data || []
})
}
const handleSearch = () => {
const searchApply = () => {
queryMatchOne({ billNo: formData.value.bill_no }).then(res => {
formData.value = res.data.matchMainInfoList[0] || {}
bloodApplyTable.value = res.data.xkTransfuseApplyBloodbreedList
if (formData.value.rh_type == '-') {
// 阴性弹出框提示
ElMessageBox.alert(`患者为Rh(D)阴性血型,请注意!`, '提示', { type: 'warning' })
}
})
}
onMounted(() => {
getDictData('ks')
getDictData('ks', 'bq', 'sxmd', 'billApplyStatus', 'ktsx', 'abotype', 'subgroup', 'sxzz', 'rhtype', 'pxff', 'pxjg', 'zccc')
getBloodList()
getUserData()
handleRefresh()
})
</script>
<style scoped lang="scss">
.box-container {
overflow-y: auto;
display: flex;
flex-direction: column;
// 主体左右容器
.main-wrap {
height: calc(100% - 70px);
flex: 1;
min-height: 0;
.timesplit {
margin: 0 5px;
color: #999;
}
.left-row {
height: 100%;
.left-col {
height: 100%;
}
.form_box {
height: 100%;
display: flex;
flex-direction: column;
}
.right-col {
height: 100%;
display: flex;
flex-direction: column;
}
.pxBox {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
.table-box {
flex: 1;
min-height: 0;
}
}
}
}
// 通用卡片样式(对齐规范)
@ -427,4 +814,11 @@ onMounted(() => {
}
}
.status {
color: #409eff;
font-size: 18px;
font-weight: 700;
text-align: center;
}
</style>

View File

@ -12,12 +12,12 @@
<el-button type="primary" plain @click="openJsHandle">检索</el-button>
<el-button type="primary" plain @click="clearInfo">新增</el-button>
<el-button type="danger" plain :disabled="!xkCheckBloodtype.bill_no" @click="delApply">删除</el-button>
<el-button type="success" plain :disabled="form.bill_stasus && form.bill_stasus == 'F'" :loading="saveLoading"
<el-button type="success" plain :disabled="xkCheckBloodtype.bill_no" :loading="saveLoading"
@click="saveApplyInfo">保存</el-button>
<el-button type="warning" plain>打印</el-button>
<el-button plain @click="openHistoryHandle">血型复核历史查询</el-button>
</div>
<el-form label-width="auto" :disabled="form.bill_stasus && form.bill_stasus == 'F'">
<el-form label-width="auto" :disabled="xkCheckBloodtype.bill_no">
<!-- 主卡片面板 -->
<div class="card-box">
<div class="status" v-show="form.bill_stasus"
@ -44,12 +44,12 @@
<el-form-item label="申请单号">
<DropdownTableSelect v-model="form.bill_no" :column-list="applyColumns" labelField="bill_no"
:showSearch="false" tableWidth="550px" :table-data="applyTableData" @open="loadApplyData"
@search="onSearch" @change="onSearch">
@search="onSearch" @change="onSearch" :disabled="!!(xkCheckBloodtype.bill_no)">
<template #dept_id="{ row }">
{{ formatDict(row.dept_id, 'ks') }}
</template>
<template #blood_breed="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label}}
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
</DropdownTableSelect>
</el-form-item>
@ -98,7 +98,7 @@
<el-row :gutter="10">
<el-col :span="6">
<el-form-item label="病 区">
<SelectTable v-model:data="form.zone_id" :tableData="dictData.bq" placeholder="" disabled />
<SelectTable v-model:data="form.zone_id" :tableData="dictData.bq" placeholder="" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="6">
@ -108,7 +108,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="科 室">
<SelectTable v-model:data="form.dept_id" :tableData="dictData.ks" placeholder="" disabled />
<SelectTable v-model:data="form.dept_id" :tableData="dictData.ks" placeholder="" :disabled="true" />
</el-form-item>
</el-col>
</el-row>
@ -143,7 +143,7 @@
<el-table :data="bloodTableData" border height="150">
<el-table-column prop="blood_breed" label="血液品种" align="center" width="150">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label}}
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
</el-table-column>
<el-table-column prop="blood_num" label="申请血量" align="center" />
@ -155,7 +155,7 @@
</el-table-column>
<el-table-column prop="replace_bloodbreed" label="替代血液品种" align="center">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.replace_bloodbreed)?.label}}
{{bloodBreed.find(v => v.value == row.replace_bloodbreed)?.label || row.replace_bloodbreed}}
</template>
</el-table-column>
<el-table-column prop="intent" label="输血目的" align="center" width="300">
@ -243,7 +243,7 @@
<el-col :span="6">
<el-form-item label="复检人">
<SelectTable v-model:data="xkCheckBloodtype.check_person" :tableData="userList" placeholder=""
:disabled="form.bill_stasus && form.bill_stasus == 'F'" />
:disabled="!!(xkCheckBloodtype.bill_no)" />
</el-form-item>
</el-col>
</el-row>
@ -273,7 +273,7 @@
<el-col :span="6">
<el-form-item label="检验人">
<SelectTable v-model:data="xkCheckBloodtype.test_person" :tableData="userList" placeholder=""
:disabled="form.bill_stasus && form.bill_stasus == 'F'" />
:disabled="!!(xkCheckBloodtype.bill_no)" />
</el-form-item>
</el-col>
</el-row>
@ -357,7 +357,7 @@
</el-table-column>
<el-table-column prop="test_person" label="检验人" align="center">
<template #default="scope">
{{userList.find(item => item.value == scope.row.test_person)?.label}}
{{userList.find(item => item.value == scope.row.test_person)?.label || scope.row.test_person}}
</template>
</el-table-column>
<el-table-column prop="test_date" label="检验日期" width="150" align="center" />
@ -422,7 +422,7 @@
</el-table-column>
<el-table-column prop="test_person" label="检验人" align="center">
<template #default="scope">
{{userList.find(item => item.value == scope.row.test_person)?.label}}
{{userList.find(item => item.value == scope.row.test_person)?.label || scope.row.test_person}}
</template>
</el-table-column>
<el-table-column prop="test_date" label="检验日期" width="150" align="center" />
@ -443,8 +443,7 @@ import { queryBloodOne, queryCheckBloodTypeInfo, saveData, jsqueryList, delCheck
const { userList, getUserData, getServerTime, bloodBreed, getBloodList, } = useCommonDict()
import useUserStore from '@/store/modules/user'
import { ElMessage } from 'element-plus'
import { ElMessageBox } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
const userInfo = useUserStore()
const xkCheckBloodtype = ref({
test_person: userInfo.name,
@ -608,8 +607,8 @@ const delApply = () => {
}
// 保存信息
const saveApplyInfo = () => {
saveLoading.value = true
if (!form.value.bill_no) return ElMessage.error('请选择申请单信息')
saveLoading.value = true
const flag = form.value.abo_type == xkCheckBloodtype.value.affirm_abo && form.value.rh_type == xkCheckBloodtype.value.check_rh
const data = {
flag: flag ? 1 : 0,
@ -620,6 +619,8 @@ const saveApplyInfo = () => {
patient_name: form.value.patient_name,
dept_id: form.value.dept_id,
input_person: userInfo.name,
input_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
test_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
bill_sort: 'C',
bill_status: 'A'
},

View File

@ -166,10 +166,10 @@
{{ row.hgbz == 1 ? '合格' : '不合格' }}
</template>
<template #input_person="{ row }">
{{userList.find(item => item.value == row.input_person)?.label}}
{{userList.find(item => item.value == row.input_person)?.label || row.input_person}}
</template>
<template #apply_medic="{ row }">
{{userList.find(item => item.value == row.apply_medic)?.label}}
{{userList.find(item => item.value == row.apply_medic)?.label || row.apply_medic}}
</template>
<template #blood_breed="{ row }">
{{ formatDict(row.blood_breed, 'xylx') }}

View File

@ -36,7 +36,7 @@
</el-form>
<template #footer>
<el-button type="primary" @click="handleSubmit">确定</el-button>
<el-button type="primary" :loading="submitLoading" @click="handleSubmit">确定</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</template>
</el-dialog>
@ -58,7 +58,7 @@ const rules = {
}
// 表格数据源
const tableData = ref<{ indicateName: string; remark: string }[]>([])
const submitLoading = ref(false)
// 表单变量
const indicationForm = ref({
checkExplain: '',
@ -80,6 +80,7 @@ const handleSelectionChange = (val: any[]) => {
// 提交逻辑
const handleSubmit = async () => {
if (!indicationForm.value.checkResult) return ElMessage.error('请选择审核意见')
submitLoading.value = true
if (indicationForm.value.checkResult == '001' && indicationForm.value.validFlag == 'N') {
ElMessageBox.confirm(
`审核意见:【同意】,输血合理性为【不合理】确定继续吗?`,
@ -100,6 +101,8 @@ const comfirm = () => {
emit('success')
dialogVisible.value = false
}
}).finally(() => {
submitLoading.value = false
})
}

View File

@ -318,7 +318,7 @@
<el-table :data="bloodList" border height="143" show-overflow-tooltip>
<el-table-column prop="blood_breed" label="血液品种" align="center">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label}}
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
</el-table-column>
<el-table-column prop="blood_num" label="申请血量" align="center" />
@ -346,7 +346,7 @@
</el-table-column>
<el-table-column prop="replace_bloodbreed" label="替代血液品种" align="center" width="120">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.replace_bloodbreed)?.label}}
{{bloodBreed.find(v => v.value == row.replace_bloodbreed)?.label || row.replace_bloodbreed}}
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" />

View File

@ -104,7 +104,7 @@
:tableData="pgList" tableWidth="700px" labelField="bill_no" :showSearch="false" @open="getPgList"
:readonly="true" @change="getPgInfo">
<template #assess_person="{ row }">
{{userList.find(v => v.value == row.assess_person)?.label}}
{{userList.find(v => v.value == row.assess_person)?.label || row.assess_person}}
</template>
</DropdownTableSelect>
</el-form-item>
@ -277,7 +277,7 @@
<el-table :data="bloodList" border height="120" show-overflow-tooltip>
<el-table-column prop="blood_breed" label="血液品种" align="center" width="150">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label}}
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
</el-table-column>
<el-table-column prop="blood_num" label="申请血量" align="center" />
@ -305,7 +305,7 @@
</el-table-column>
<el-table-column prop="replace_bloodbreed" label="替代血液品种" align="center" width="120">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.replace_bloodbreed)?.label}}
{{bloodBreed.find(v => v.value == row.replace_bloodbreed)?.label || row.replace_bloodbreed}}
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" />

View File

@ -243,7 +243,11 @@
<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-column prop="assess_person" label="评估人" align="center">
<template #default="scope">
{{userList.find(item => item.value == scope.row.assess_person)?.label || scope.row.assess_person}}
</template>
</el-table-column>
</el-table>
</el-dialog>
</div>
@ -253,7 +257,7 @@
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 { getDictData, formatDict, dictData, useCommonDict } from '@/hooks'
import router from '@/router'
import { ElMessage, ElMessageBox } from 'element-plus'
import PatientLisTable from '../components/PatientLisTable.vue'
@ -261,7 +265,7 @@ import { printBase64PDF } from '@/utils/classCom'
import useUserStore from '@/store/modules/user'
import { useSysParam } from '@/hooks/useSysParam'
const { getParam } = useSysParam()
const { userList, getUserData, getServerTime, } = useCommonDict()
const userInfo = useUserStore()
const visible = ref(false)
@ -283,7 +287,7 @@ const saveLoading = ref(false)
const tableData = ref([])
const evaluationInfo = ref({
assessmentDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
assessmentDate: '',
billNo: '',
assess_person: userInfo.nickName,
})
@ -433,7 +437,7 @@ const getList = () => {
// 关闭弹窗
const handleAdd = () => {
evaluationInfo.value.assessmentDate = dayjs().format('YYYY-MM-DD HH:mm:ss')
gettime()
evaluationInfo.value.billNo = ''
baseInfo.value = { beinhos_id: '', nldw: '岁' }
bloodInfo.value = { agreement_ink: 'Y', assess_person: userInfo.name }
@ -479,7 +483,7 @@ const handleSubmit = () => {
//判断病情概要是否填写
if (getParam('HZBQGY') == 'Y' && !bloodInfo.value.bqgy) return ElMessage.warning('请务必填写病情概要,以便输血科评估用血合理性!')
if (!baseInfo.value.beinhos_id) return ElMessage.warning('请填写患者住院号/ID号')
gettime()
const tempPatient = { ...baseInfo.value }
if (baseInfo.value.age) {
@ -516,8 +520,6 @@ const handleSubmit = () => {
saveLoading.value = false
})
}
}
const goSxPath = () => {
@ -545,11 +547,17 @@ const getProject = () => {
})
}
const gettime = () => {
getServerTime().then(time => {
evaluationInfo.value.assessmentDate = time
})
}
onMounted(() => {
getDictData('ks', 'test_result', 'nldw', 'anemia', 'rhtype', 'abotype',)
getProject()
getUserData()
gettime()
// SQDSFKRLXGXX 参数说明如下:
// 输血申请时是否可从HIS系统中调出患者信息,是否可以录入修改患者血型?
// 以"/"分隔,"/"前指可以调出患者信息时是否可以修改患者血型(Y可以修改N不可以修改),

View File

@ -45,7 +45,7 @@
</el-table-column>
<el-table-column prop="blood_breed" label="血液品种" align="center">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed)?.label}}
{{bloodBreed.find(v => v.value == row.blood_breed)?.label || row.blood_breed}}
</template>
</el-table-column>
<el-table-column prop="ds" label="袋数" align="center" />

View File

@ -50,22 +50,22 @@
{{ formatDict(row.dept_id, 'ks') }}
</template>
<template #blood_breed="{ row }">
{{bloodBreed.find(item => item.value == row.blood_breed)?.label}}
{{bloodBreed.find(item => item.value == row.blood_breed)?.label || row.blood_breed}}
</template>
<template #Archiater="{ row }">
{{userList.find(item => item.value == row.Archiater)?.label}}
{{userList.find(item => item.value == row.Archiater)?.label || row.Archiater}}
</template>
<template #Medical_Dept="{ row }">
{{userList.find(item => item.value == row.Medical_Dept)?.label}}
{{userList.find(item => item.value == row.Medical_Dept)?.label || row.Medical_Dept}}
</template>
<template #apply_medic="{ row }">
{{userList.find(item => item.value == row.apply_medic)?.label}}
{{userList.find(item => item.value == row.apply_medic)?.label || row.apply_medic}}
</template>
<template #attending_medic="{ row }">
{{userList.find(item => item.value == row.attending_medic)?.label}}
{{userList.find(item => item.value == row.attending_medic)?.label || row.attending_medic}}
</template>
<template #treat_medic="{ row }">
{{userList.find(item => item.value == row.treat_medic)?.label}}
{{userList.find(item => item.value == row.treat_medic)?.label || row.treat_medic}}
</template>
<template #flag="{ row }">
{{ row.flag == 'Y' ? '已审核' : '未审核' }}

View File

@ -154,16 +154,16 @@
</template>
<template #pickNurse="{ row }">
{{userList.find(item => item.value == row.Pick_Nurse)?.label}}
{{userList.find(item => item.value == row.Pick_Nurse)?.label || row.Pick_Nurse}}
</template>
<template #sendNurse="{ row }">
{{userList.find(item => item.value == row.Send_Nurse)?.label}}
{{userList.find(item => item.value == row.Send_Nurse)?.label || row.Send_Nurse}}
</template>
<template #takeOverMan="{ row }">
{{userList.find(item => item.value == row.TakeOver_Man)?.label}}
{{userList.find(item => item.value == row.TakeOver_Man)?.label || row.TakeOver_Man}}
</template>
<template #sendperson="{ row }">
{{userList.find(item => item.value == row.sendperson)?.label}}
{{userList.find(item => item.value == row.sendperson)?.label || row.sendperson}}
</template>
<template #status="{ row }">