输血申请改造

This commit is contained in:
wuyy 2026-07-14 18:05:18 +08:00
parent e35a900f36
commit 8959eb8c1f
11 changed files with 2352 additions and 614 deletions

View File

@ -127,4 +127,20 @@ export function cancelApply(query?: Object) {
method: 'get',
params: query
})
}
// 电子病历
export function invokeEMR(query?: Object) {
return request({
url: '/bus/doctor/apply/invokeEMR',
method: 'get',
params: query
})
}
// 查询输血申请历史列表
export function queryhistoryList(query?: Object) {
return request({
url: '/bus/doctor/history/queryList',
method: 'get',
params: query
})
}

View File

@ -142,6 +142,10 @@ aside {
padding: 10px;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
.section-title {
position: relative;
padding-left: 12px;
@ -434,18 +438,15 @@ aside {
}
.el-form .el-form-item__label {
font-weight: 700;
}
.el-form--inline .el-form-item {
margin-right: .9375rem;
}
.el-form-item__label {
font-weight: 400;
font-size: .875rem;
color: #81878d;
font-weight: 600 !important;
font-size: 14px;
color: #333;
}
.el-dialog:not(.is-fullscreen) {
@ -517,7 +518,7 @@ aside {
th {
word-break: break-word;
background-color: #eff6fa !important;
color: #3c526f;
color: #000;
height: 1.875rem !important;
font-size: 15px;
font-weight: 700;
@ -579,7 +580,7 @@ aside {
padding: 0 !important;
height: 1.8125rem;
line-height: 1.8125rem;
color: #3c526f;
color: #333;
font-size: 14px;
}
@ -843,4 +844,18 @@ aside {
.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
background: #00a5ff;
&::after {
border-color: #fff;
}
}
// 一行省略
.ellipsis-one-line {
white-space: nowrap;
/* 强制不换行 */
overflow: hidden;
/* 隐藏超出 */
text-overflow: ellipsis;
/* 省略号 */
}

View File

@ -3,7 +3,8 @@
<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" @keydown.enter.prevent="handleInputEnter" />
<el-input v-model="inputText" :placeholder="placeholder" :readonly="readonly"
@keydown.enter.prevent="handleInputEnter" />
<span class="arrow-icon" @click.stop="toggleDropdown">
<el-icon>
<ArrowDown />
@ -99,6 +100,11 @@ const props = defineProps({
showSearch: {
type: Boolean,
default: true
},
// 是否只读
readonly: {
type: Boolean,
default: false
}
})
@ -242,6 +248,7 @@ watch(inputText, (val) => {
// 输入框回车(原有逻辑)
const handleInputEnter = (e: KeyboardEvent) => {
e.stopPropagation()
emit('update:modelValue', inputText.value)
emit('search', inputText.value)
}

View File

@ -61,7 +61,7 @@ export function useCommonDict() {
item_name: item.pro_name,
item_result: '',
item_unit: item.unit,
test_date: dayjs().format('YYYY-MM-DD HH:mm:ss'),
test_date: item.validTime,
sid: item.sid
}))
return lisProject.value

File diff suppressed because it is too large Load Diff

View File

@ -12,242 +12,125 @@
<el-button type="primary" plain @click="openJsDialog">检索</el-button>
<el-button type="primary" plain @click="addHandle">新增</el-button>
<el-button type="success" plain @click="handleSubmit" :loading="saveLoading">保存</el-button>
<el-button>电子病历</el-button>
<el-button @click="blHandle">电子病历</el-button>
<el-button :loading="shLoading" @click="reviewHandle">审核</el-button>
<el-button type="danger" plain @click="cancelreviewHandle">取消审核</el-button>
<el-button type="info" plain @click="invalidateHandle">作废</el-button>
<el-button type="warning" plain>打印输血申请单</el-button>
<el-button>患者输血历史</el-button>
<el-button @click="goHistoryBlood">患者输血历史</el-button>
<el-button type="warning" plain>打印大量输血审批单</el-button>
<el-button type="warning" plain>打印输血知情同意书</el-button>
</div>
<!-- 主体区域 左2 : 右1 -->
<div class="main-content">
<!-- 左侧区域 占2份 -->
<!-- 左侧区域 占2份left-wrap -->
<div class="left-wrap">
<!-- 包裹整个表单内容 -->
<el-form ref="formRef" label-width="auto" size="small" class="blood-transfusion-form"
:disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'">
<!-- 申请信息 -->
<div class="box-item">
<el-row>
<div class="card-box base-info-card">
<div class="section-title">
<div>患者信息</div>
</div>
<div class="base-info-content">
<div class="base-info">
<div class="info-row">
<div class="info-item">
<span class="label">住院号:</span>
<span class="value">{{ xkTransfuseApply.beinhos_id }}</span>
</div>
<div class="info-item">
<span class="label">姓名:</span>
<span class="value">{{ xkPatientInfo.patient_name }}</span>
</div>
<div class="info-item">
<span class="label">性别:</span>
<span class="value">{{ xkPatientInfo.patient_sex }}</span>
</div>
<div class="info-item">
<span class="label">年龄:</span>
<span class="value">{{ xkPatientInfo.age }}</span>
</div>
<div class="info-item">
<span class="label">属地:</span>
<span class="value">{{ formatDict(xkPatientInfo.apanage, 'sd') }}</span>
</div>
<div class="info-item">
<span class="label">病区:</span>
<span class="value ellipsis-one-line" :title="formatDict(xkTransfuseApply.zone_id, 'bq')">
{{ formatDict(xkTransfuseApply.zone_id, 'bq') }}</span>
</div>
<div class="info-item">
<span class="label">科室:</span>
<span class="value ellipsis-one-line" :title="formatDict(xkTransfuseApply.dept_id, 'ks')">
{{ formatDict(xkTransfuseApply.dept_id, 'ks') }}</span>
</div>
<div class="info-item">
<span class="label">床位号:</span>
<span class="value">{{ xkTransfuseApply.patient_bed }}</span>
</div>
<div class="info-item">
<span class="label">临床诊断:</span>
<span class="value ellipsis-one-line" :title="xkTransfuseApply.diagnoses">
{{ xkTransfuseApply.diagnoses }}</span>
</div>
</div>
<div class="blood-type-group">
<div class="blood-type-tag ab"><span class="x_type">{{ xkPatientInfo.abo || '-' }}</span> 型</div>
<div :class="['blood-type-tag', 'rh',]">
<span :class="[xkPatientInfo.rh ? (xkPatientInfo.rh == '+' ? '' : 'red') : '']">
{{ xkPatientInfo.rh ? (xkPatientInfo.rh == '+' ? '阳性' : '阴性') : '-' }}</span> RH
</div>
</div>
</div>
</div>
</div>
<div class="card-box">
<div class="section-title">
<div>开单信息</div>
<div style="width: 200px">
申请单号: {{ xkTransfuseApply.bill_no }}
</div>
</div>
<el-row :gutter="10">
<el-col :span="6">
<el-form-item label="申请单号" prop="assess_bill_no">
<el-input v-model="xkTransfuseApply.bill_no" disabled />
<el-form-item label="评估单" prop="assess_bill_no">
<DropdownTableSelect v-model="xkTransfuseApply.assess_bill_no" :columnList="pgcolumnList"
:tableData="pgList" tableWidth="700px" labelField="bill_no" :showSearch="false" @open="getPgList"
:readonly="true" @change="getPgInfo" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="申请日期" prop="apply_date">
<el-date-picker v-model="formData.apply_date" type="datetime" style="width:100%"
value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="5">
<el-form-item label="申请医师" prop="apply_medic">
<SelectTable v-model:data="xkTransfuseApply.apply_medic" :tableData="userList" size="small"
placeholder="" :disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-col :span="5">
<el-form-item label="主治医师" prop="attending_medic">
<SelectTable v-model:data="xkTransfuseApply.attending_medic" :tableData="userList" size="small"
placeholder="" :disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="上级医师" prop="check_medic">
<SelectTable v-model:data="xkTransfuseApply.check_medic" :tableData="userList" size="small"
placeholder="" :disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'" />
</el-form-item>
</el-col>
</el-row>
</div>
<!-- 患者信息 -->
<div class="box-item">
<div class="box-title">患者信息</div>
<el-row :gutter="10">
<el-col :span="5">
<el-form-item label="住院号/ID号" prop="beinhos_id">
<DropdownTableSelect v-model="xkTransfuseApply.beinhos_id" :columnList="pgcolumnList"
:tableData="pgList" tableWidth="700px" labelField="beinhos_id" :showSearch="false" @open="getPgList"
@change="getPgInfo" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="姓名" prop="patient_name">
<el-input v-model="xkPatientInfo.patient_name" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="性别" prop="patient_sex">
<el-select v-model="xkPatientInfo.patient_sex" style="width:100%" @change="sexChange">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
<el-option label="未知" value="未知" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="血型" prop="abo">
<el-select v-model="xkPatientInfo.abo" placeholder="">
<el-option v-for="v in dictData.abotype" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="年龄" prop="age">
<el-input v-model="xkPatientInfo.age" style="width:60%" />
<div style="width: 40%">
<el-select v-model="xkPatientInfo.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="5">
<el-form-item label="科室" prop="dept_id">
<SelectTable v-model:data="xkTransfuseApply.dept_id" :tableData="dictData.ks" size="small"
placeholder="" :disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="病区" prop="zone_id">
<SelectTable v-model:data="xkTransfuseApply.zone_id" :tableData="dictData.bq" size="small"
placeholder="" :disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="Rh(D)" prop="rh">
<el-select v-model="xkPatientInfo.rh" placeholder="">
<el-option v-for="v in dictData.rhtype" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="属地" prop="apanage">
<el-select v-model="xkPatientInfo.apanage" placeholder="">
<el-option v-for="v in dictData.sd" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="床位号" prop="patient_bed">
<el-input v-model="xkTransfuseApply.patient_bed" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="科室类型" prop="dept_Type">
<el-select v-model="xkTransfuseApply.dept_Type" placeholder="" style="width:50%" clearable
@change="xkTransfuseApply.use_type = ''">
<el-option v-for="v in dictData.depttype" :label="v.label" :value="v.value" />
</el-select>
<el-select v-model="xkTransfuseApply.use_type" placeholder="" style="width:50%" clearable
v-if="xkTransfuseApply.dept_Type == 'A'">
<el-option v-for="v in dictData.operatype" :label="v.label" :value="v.value" />
</el-select>
<el-select v-model="xkTransfuseApply.use_type" placeholder="" style="width:50%" clearable
v-if="xkTransfuseApply.dept_Type == 'B'">
<el-option v-for="v in dictData.nooperatype" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单病种" prop="ill_Code">
<SelectTable v-model:data="xkTransfuseApply.ill_Code" :tableData="diaList" size="small" placeholder=""
:disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="临床诊断" prop="diagnoses">
<DropdownTableSelect v-model="xkTransfuseApply.diagnoses" :columnList="dictList"
:tableData="dictData.lczd" labelField="label" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="输血目的" prop="intent">
<el-select v-model="xkTransfuseApply.intent" style="width:100%" filterable placeholder="">
<el-option v-for="v in dictData.sxmd" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="输血指征" prop="causalis">
<DropdownTableSelect v-model="xkTransfuseApply.causalis" :columnList="dictList"
:tableData="dictData.sxzz" labelField="label" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="手术名称" prop="operation_name">
<DropdownTableSelect v-model="xkTransfuseApply.operation_name" :columnList="operationColumn"
:tableData="operationList" tableWidth="350px" labelField="oper_name" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="手术级别" prop="operation_level">
<el-select v-model="xkTransfuseApply.operation_level" placeholder="">
<el-option label="一级手术" value="1" />
<el-option label="二级手术" value="2" />
<el-option label="三级手术" value="3" />
<el-option label="四级手术" value="4" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8"></el-col>
<el-col :span="5">
<el-form-item label="输血史" prop="transfuse_history" label-width="95px">
<el-radio-group v-model="xkPatientInfo.transfuse_history">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="反应史" prop="reaction_history" label-width="80px">
<el-radio-group v-model="xkPatientInfo.reaction_history">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="移植配型史" prop="match_history" label-width="100px">
<el-radio-group v-model="xkPatientInfo.match_history">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="妊娠史" prop="gestation_history" label-width="80px">
<el-radio-group v-model="xkPatientInfo.gestation_history"
:disabled="xkPatientInfo.patient_sex == '男' || (xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A')">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="分娩史" prop="parturition_history" label-width="80px">
<el-radio-group v-model="xkPatientInfo.parturition_history"
:disabled="xkPatientInfo.patient_sex == '男' || (xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A')">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="17">
<el-form-item label="申请类型" prop="apply_type">
<el-radio-group v-model="xkTransfuseApply.apply_type">
<el-radio v-for="v in dictData.sqlx" :value="v.value">{{ v.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-checkbox v-model="xkTransfuseApply.agreement_ink" true-value="Y"
false-value="N">病人/病人家属是否签署输血同意书</el-checkbox>
</el-col>
<el-col :span="5">
<el-form-item label="单据类型" prop="bill_type">
@ -257,33 +140,111 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="18">
<el-col :span="6">
<el-form-item label="预定输血日期" prop="use1_date">
<el-date-picker v-model="xkTransfuseApply.use1_date" type="datetime" placeholder="选择日期"
value-format="YYYY-MM-DD HH:mm:ss" style="width:200px" />
value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-row :gutter="10">
<el-col :span="5">
<el-form-item label="上级医师" prop="check_medic">
<SelectTable v-model:data="xkTransfuseApply.check_medic" :tableData="userList" placeholder=""
disabled size="small" />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="审核时间" prop="medic_check_date">
<el-date-picker v-model="xkTransfuseApply.medic_check_date" type="datetime" placeholder="选择日期"
value-format="YYYY-MM-DD HH:mm:ss" style="width:200px" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-checkbox v-model="xkTransfuseApply.agreement_ink" true-value="Y" class="text-danger"
false-value="N">病人/病人家属是否签署输血同意书</el-checkbox>
</el-col>
</el-row>
<el-col :span="6">
<el-form-item label="科室类型" prop="dept_Type">
<el-select v-model="xkTransfuseApply.dept_Type" placeholder="" style="width:50%" clearable
@change="xkTransfuseApply.use_type = ''">
<el-option v-for="v in dictData.depttype" :label="v.label" :value="v.value" />
</el-select>
<el-select v-model="xkTransfuseApply.use_type" placeholder="" style="width:50%" clearable
v-if="!xkTransfuseApply.dept_Type">
</el-select>
<el-select v-model="xkTransfuseApply.use_type" placeholder="" style="width:50%" clearable
v-if="xkTransfuseApply.dept_Type == 'A'">
<el-option v-for="v in dictData.operatype" :label="v.label" :value="v.value" />
</el-select>
<el-select v-model="xkTransfuseApply.use_type" placeholder="" style="width:50%" clearable
v-if="xkTransfuseApply.dept_Type == 'B'">
<el-option v-for="v in dictData.nooperatype" :label="v.label" :value="v.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6"></el-col>
<el-col :span="6">
<el-form-item label="手术名称" prop="operation_name">
<DropdownTableSelect v-model="xkTransfuseApply.operation_name" :columnList="operationColumn"
:tableData="operationList" tableWidth="350px" labelField="oper_name" @change="getOperationInfo" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="手术级别" prop="operation_level">
<el-select v-model="xkTransfuseApply.operation_level" placeholder="" clearable>
<el-option label="一级手术" value="1" />
<el-option label="二级手术" value="2" />
<el-option label="三级手术" value="3" />
<el-option label="四级手术" value="4" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单病种" prop="ill_Code">
<SelectTable v-model:data="xkTransfuseApply.ill_Code" :tableData="diaList" size="small" placeholder=""
:disabled="xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A'" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-form-item label="输血史:" prop="transfuse_history">
<el-radio-group v-model="xkPatientInfo.transfuse_history">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="反应史:" prop="reaction_history" label-width="80px">
<el-radio-group v-model="xkPatientInfo.reaction_history">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="移植配型史:" prop="match_history" label-width="100px">
<el-radio-group v-model="xkPatientInfo.match_history">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="妊娠史:" prop="gestation_history" label-width="80px">
<el-radio-group v-model="xkPatientInfo.gestation_history"
:disabled="xkPatientInfo.patient_sex == '男' || (xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A')">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="分娩史:" prop="parturition_history" label-width="80px">
<el-radio-group v-model="xkPatientInfo.parturition_history"
:disabled="xkPatientInfo.patient_sex == '男' || (xkTransfuseApply.bill_stasus && xkTransfuseApply.bill_stasus != 'A')">
<el-radio value="Y">有</el-radio>
<el-radio value="N">无</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
<div class="line"></div>
<el-row :gutter="10">
<el-col :span="4">
<el-form-item label="上级医师:" prop="check_medic">
{{userList.find(item => item.value == xkTransfuseApply.check_medic)?.label}}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="审核时间:" prop="medic_check_date">
{{ xkTransfuseApply.medic_check_date }}
</el-form-item>
</el-col>
</el-row>
<div class="status"
@ -292,31 +253,16 @@
</div>
</div>
<!-- 检查结果(添加单位后缀) -->
<div class="box-item">
<div class="box-title">病人最近检查结果</div>
<el-row :gutter="20" style="padding-right: 30px;">
<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>
</div>
<!-- 血液品种 -->
<div class="box-item" style="margin-bottom: 0;">
<div class="box-title">
<span>血液品种</span>
<div class="title-btn">
<div class="card-box">
<div class="section-title">
<div>血液品种</div>
<div>
<el-button type="primary" @click="openBloodDialog">增加</el-button>
</div>
</div>
<el-table :data="bloodList" border height="145" show-overflow-tooltip>
<el-table-column prop="blood_breed" label="血液品种" align="center">
<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}}
</template>
@ -329,12 +275,12 @@
{{ formatDict(row.apply_bloodtype, 'abotype') }}
</template>
</el-table-column>
<el-table-column prop="intent" label="输血目的" align="center" width="150">
<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">
<el-table-column prop="causalis" label="输血指征" align="center" width="200">
<template #default="{ row }">
{{ formatDict(row.causalis, 'sxzz') }}
</template>
@ -346,7 +292,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}}
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" />
@ -358,9 +304,48 @@
</el-table-column>
</el-table>
</div>
<div class="card-box jcBox">
<div class="section-title">
<div>病人最近检查结果</div>
</div>
<div class="tableBox">
<el-table :data="firstGroup" border height="100%">
<el-table-column label="项目名" prop="item_name" align="center" />
<el-table-column label="结果" prop="item_result" align="center">
<template #default="{ row }">
<el-select v-model="row.item_result" placeholder="" class="full-width-input" allow-create filterable
default-first-option>
<el-option v-for="item in dictData.test_result" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="单位" prop="item_unit" align="center" width="80" />
<el-table-column label="检验时间" prop="validTime" align="center" width="150" />
</el-table>
<el-table :data="secondGroup" border height="100%">
<el-table-column label="项目名" prop="item_name" align="center" />
<el-table-column label="结果" prop="item_result" align="center">
<template #default="{ row }">
<el-select v-model="row.item_result" placeholder="" class="full-width-input" allow-create filterable
default-first-option>
<el-option v-for="item in dictData.test_result" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="单位" prop="item_unit" align="center" width="80" />
<el-table-column label="检验时间" prop="validTime" align="center" width="150" />
</el-table>
</div>
</div>
</el-form>
</div>
<!-- 右侧列表 占1份 -->
<div class="right-wrap">
<div class="box-title">申请单列表</div>
@ -601,13 +586,14 @@ import { getDictData, formatDict, dictData, useCommonDict, useSysParam } from '@
import DropdownTableSelect from '@/components/DropdownTableSelect/index.vue'
import dayjs from 'dayjs'
import {
querysqList, getPatInfo, checkSelfBlood, checkCausalis, savePreApplyInfo, saveApplyInfo, queryApplyOne,
queryApplyBeforeList, applyCheck, applyMedicCheck, cancelApplyMedicCheck, cancelApplyCheck, cancelApply
querysqList, getPatInfo, checkSelfBlood, checkCausalis, savePreApplyInfo, saveApplyInfo, queryApplyOne, queryApplyBeforeList, applyCheck, applyMedicCheck,
cancelApplyMedicCheck, cancelApplyCheck, cancelApply, invokeEMR
} from '@/api/doctor/application'
import { queryOperation, getDeptType, checkLoginAffirm } from '@/api/common'
import ReviewComments from './component/reviewComments.vue'
import CheckUser from '@/components/CheckUser/index.vue'
import useUserStore from '@/store/modules/user'
import router from '@/router/index.js'
const userInfo = useUserStore()
// 解构全部公共变量与方法
@ -627,6 +613,8 @@ const {
} = useCommonDict()
const route = useRoute()
const aboFlag = ref('')
const saveLoading = ref(false)
const bloodFormRef = ref<InstanceType<typeof ElForm>>()
const queryForm = reactive({
@ -663,11 +651,11 @@ const radioChange = (val: string) => {
}
const pgcolumnList = ref([
{ label: '评估单号', prop: 'bill_no' },
{ label: '住院号', prop: 'beinhos_id' },
{ label: '姓名', prop: 'patient_name', width: 100 },
{ label: '评估日期(24h内有效)', prop: 'assess_data', width: 200 },
{ label: '评估人', prop: 'assess_person', width: 100 },
{ label: '评估单号', prop: 'bill_no' },
])
const tableData = ref([])
@ -705,8 +693,6 @@ const sexChange = (val: string) => {
// 根据单据状态获取单元格样式(背景色+白色文字)
const cellStyle = ({ row, column, rowIndex, columnIndex }) => {
console.log(row, column);
if (column.label == '单据状态') {
return {
background: `${getBillStatusInfo(row.bill_stasus).color} !important`,
@ -976,6 +962,17 @@ const shClose = () => {
}
}
//患者历史
const goHistoryBlood = () => {
router.push({
path: '/doctor/historyBlood',
query: {
patientName: xkPatientInfo.value.patient_name,
}
})
}
// 打开新增弹窗
const openBloodDialog = () => {
editIndex.value = -1
@ -1036,10 +1033,20 @@ const saveBloodForm = async () => {
ElMessage.error('请完善必填信息')
}
}
//电子病历
const blHandle = () => {
if (!xkTransfuseApply.value.beinhos_id) return ElMessage.warning('请选择患者')
invokeEMR({ beinhos_id: xkTransfuseApply.value.beinhos_id }).then(res => {
if (res.code == 0) {
ElMessage.success(res.msg)
}
})
}
//保存申请单
const handleSubmit = async () => {
if (!bloodList.value.length) return ElMessage.error('请添加血液品种')
// 申请类型 003 || 002 手术信息必填校验
if (xkTransfuseApply.value.apply_type === '003' || xkTransfuseApply.value.apply_type === '002') {
if (!xkTransfuseApply.value.operation_name || !xkTransfuseApply.value.operation_level) {
return ElMessage.error('请完善手术名称、级别信息')
@ -1048,9 +1055,6 @@ const handleSubmit = async () => {
saveLoading.value = true
const tempPatient = { ...xkPatientInfo.value, beinhos_id: xkTransfuseApply.value.beinhos_id }
if (xkPatientInfo.value.age) {
tempPatient.age = xkPatientInfo.value.age + xkPatientInfo.value.nldw
}
const data = {
transfuseApplyInfoOne: {
xkPatientInfo: tempPatient,
@ -1106,7 +1110,7 @@ const handleSubmit = async () => {
})
}
//获取申请单信息
const getQueryOneInfo = (bill_no: string) => {
queryApplyOne({ billNo: bill_no }).then((res) => {
xkPatientInfo.value = res.data.transfuseApplyInfoOne.xkPatientInfo
@ -1123,17 +1127,16 @@ const getQueryOneInfo = (bill_no: string) => {
sid: item.sid
}
})
splitAge(xkPatientInfo.value.age)
})
}
//获取患者信息
const getInfo = (billNo) => {
//PJD2026061623
getPatInfo({ bill_no: billNo }).then((res) => {
xkPatientInfo.value = res.data.transfuseApplyInfoOne.xkPatientInfo
xkTransfuseApply.value = res.data.transfuseApplyInfoOne.xkTransfuseApply
bloodList.value = res.data.xkTransfuseApplyBloodbreedList || []
formData.value = res.data.transfuseApplyInfoOne.xkTransfuseApply
lisProject.value = res.data.xkTransfuseApplyTestitemList.map(item => {
return {
@ -1145,8 +1148,6 @@ const getInfo = (billNo) => {
sid: item.sid
}
})
splitAge(xkPatientInfo.value.age)
})
}
@ -1199,19 +1200,56 @@ const operationColumn = [
// { label: '手术级别', prop: 'oper_level' },
]
const getOperationInfo = (row) => {
if (row.oper_level) {
switch (row.oper_level) {
case '一级':
xkTransfuseApply.value.operation_level = '1'
break;
case '二级':
xkTransfuseApply.value.operation_level = '2'
break;
case '三级':
xkTransfuseApply.value.operation_level = '3'
break;
case '四级':
xkTransfuseApply.value.operation_level = '4'
break;
default:
break;
}
}
}
//手术名称
const getSxList = () => {
queryOperation({ pageNum: 1, pageSize: 99999 }).then(res => {
operationList.value = res.rows
})
}
// 计算属性:自动平分数组,分成两组
const splitList = computed(() => {
const list = lisProject.value
console.log("🚀 ~ lisProject.value:", lisProject.value)
const midIndex = Math.ceil(list.length / 2)
const firstGroup = list.slice(0, midIndex)
const secondGroup = list.slice(midIndex)
console.log("🚀 ~ firstGroup, secondGroup:", firstGroup, secondGroup)
return { firstGroup, secondGroup }
})
// 拆分后两组数据
const firstGroup = computed(() => splitList.value.firstGroup)
const secondGroup = computed(() => splitList.value.secondGroup)
onMounted(() => {
loadAllDict()
getServerTime().then(time => {
formData.value.apply_date = time
})
getSxList()
getDictData('sqdzfyy', 'rhtype', 'abotype', 'nldw', 'billApplyStatus', 'sd', 'ks', 'depttype', 'bq', 'sxmd', 'sxzz', 'sxqjcxmmrz', 'sqlx', 'lczd', 'xylx', 'operatype', 'nooperatype')
getDictData('sqdzfyy', 'rhtype', 'abotype', 'nldw', 'billApplyStatus', 'sd', 'ks', 'depttype', 'bq', 'sxmd', 'sxzz', 'test_result', 'sqlx', 'lczd', 'xylx', 'operatype', 'nooperatype')
getSqdList()
loadBillInfo()
@ -1219,7 +1257,14 @@ onMounted(() => {
// 输血申请时是否可从HIS系统中调出患者信息,是否可以录入修改患者血型?
// 以"/"分隔,"/"前指可以调出患者信息时是否可以修改患者血型(Y可以修改N不可以修改),
// "/"后指不可以调出患者信息时是否可以录入全部和只能录入"未知"患者血型(Y可以录入全部N只能录入"未知")
getParam('SQDSFKRLXGXX') //
if (getParam('SQDSFKRLXGXX')) {
const [a, b] = getParam('SQDSFKRLXGXX').split('/')
aboFlag.value = b
}
})
// 监听路由变化
@ -1245,7 +1290,7 @@ onBeforeUnmount(() => {
background: #fff;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border-radius: 4px;
margin-bottom: 8px;
margin-bottom: 10px;
}
.main-content {
@ -1289,24 +1334,32 @@ onBeforeUnmount(() => {
flex: 1;
display: flex;
flex-direction: column;
gap: 6px;
overflow-y: auto;
overflow: hidden;
.blood-transfusion-form {
width: 100%;
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.el-radio {
margin-right: 10px !important;
}
.jcBox {
flex: 1;
min-height: 0;
.tableBox {
height: calc(100% - 30px);
display: flex;
gap: 10px;
overflow: auto;
}
}
}
.box-item {
background: #fff;
border-radius: 4px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
padding: 10px;
margin-bottom: 10px;
.card-box {
position: relative;
:deep(.el-form-item) {
@ -1330,7 +1383,7 @@ onBeforeUnmount(() => {
.status {
position: absolute;
right: 20px;
top: 36px;
top: 100px;
color: #409eff;
font-size: 18px;
font-weight: 700;
@ -1381,4 +1434,87 @@ onBeforeUnmount(() => {
color: #f00 !important;
}
}
.base-info-card {
.base-info-content {
display: flex;
flex-wrap: wrap;
box-sizing: border-box;
.base-info {
display: flex;
width: 100%;
}
.info-row {
display: flex;
width: 100%;
flex-wrap: wrap;
.info-item {
width: 20%;
display: flex;
font-size: 14px;
// font-weight: 600;
.label {
color: #000;
min-width: 70px;
text-align: right;
margin-right: 8px;
}
.value {
color: #1d2d42;
flex: 1;
font-size: 15px;
}
}
}
.blood-type-group {
display: flex;
gap: 16px;
margin-left: 20px;
.blood-type-tag {
width: 150px;
height: 50px;
line-height: 50px;
border-radius: 4px;
color: #fff;
font-size: 30px;
font-weight: 600;
padding-left: 20px;
&.ab {
background: url('@/assets/images/blood_zero.png');
background-size: 100% 100%;
color: #3594c7;
.x_type {
color: #ff3b62;
}
}
&.rh {
background-color: #e8f7ff;
color: #3594c7;
}
.red {
color: #f00 !important;
}
}
}
}
}
.line {
height: 1px;
background-color: #ccc;
}
</style>

View File

@ -21,7 +21,7 @@
<el-form label-width="auto">
<div class="section">
<div class="section pginfo">
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="评估单号">
@ -109,18 +109,24 @@
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="临床诊断">
<el-input v-model="bloodInfo.diagnoses" />
<el-form-item label="属 地">
<SelectTable v-model:data="baseInfo.apanage" dict-type="sd" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-col :span="4">
<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_num" type="number" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="出血量">
<el-input v-model="bloodInfo.blood_loss" type="number" />
@ -134,22 +140,20 @@
</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-col :span="8">
<el-form-item label="临床诊断">
<el-input v-model="bloodInfo.diagnoses" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label=" ">
<el-col :span="4">
<el-form-item label="">
<el-checkbox v-model="bloodInfo.agreement_ink" class="text-danger" true-value="Y" false-value="N">
病人/病人家属是否签署输血同意书
</el-checkbox>
@ -177,7 +181,7 @@
<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-option v-for="v in dictData.test_result" :label="v.label" :value="v.value" />
</el-select>
<span class="unit">{{ item.item_unit }}</span>
</el-form-item>
@ -424,6 +428,8 @@ 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('请务必填写病情概要,以便输血科评估用血合理性!')
if (!baseInfo.value.beinhos_id) return ElMessage.warning('请填写患者住院号/ID号')
const tempPatient = { ...baseInfo.value }
if (baseInfo.value.age) {
@ -489,7 +495,7 @@ const getProject = () => {
}
onMounted(() => {
getDictData('ks', 'sxqjcxmmrz', 'nldw', 'anemia')
getDictData('ks', 'test_result', 'nldw', 'anemia')
getProject()
@ -571,6 +577,12 @@ onMounted(() => {
}
.pginfo {
.el-form-item {
margin-bottom: 0;
}
}
.tips-label {

View File

@ -84,7 +84,7 @@
<div class="info-item">
<span class="label">病 区</span>
<span class="value">段立方</span>
<span class="value">输血</span>
</div>
<div class="info-item">
<span class="label">性 别</span>

View File

@ -0,0 +1,147 @@
<template>
<div class="box-container">
<div class="top-search-card">
<el-form inline :model="queryParams">
<el-form-item label="住院号/ID号:">
<el-input v-model="queryParams.beinhos_id" placeholder="" clearable @keyup.enter="onSearch" />
</el-form-item>
<el-form-item label="患者姓名:">
<el-input v-model="queryParams.patient_name" placeholder="" clearable @keyup.enter="onSearch" />
</el-form-item>
<el-form-item label="科室:">
<SelectTable v-model:data="queryParams.dept" :tableData="dictData.ks" placeholder="请选择" width="200"
clearable />
</el-form-item>
</el-form>
</div>
<div class="table-card">
<div class="toolbar mb10">
<el-button type="primary" plain @click="onSearch">检索</el-button>
<el-button type="warning" plain @click="onPrint">打印</el-button>
</div>
<div class="tableBox">
<el-table :data="tableData" border show-overflow-tooltip highlight-current-row height="100%">
<el-table-column label="序号" type="index" width="60" align="center" />
<el-table-column prop="beinhos_id" label="住院号/ID号" align="center" />
<el-table-column prop="patient_name" label="姓名" align="center" />
<el-table-column prop="patient_sex" label="性别" align="center" width="50" />
<el-table-column prop="age" label="年龄" align="center" />
<el-table-column prop="abo_type" label="血型" align="center" />
<el-table-column prop="dept_id" label="科室" align="center" width="200">
<template #default="{ row }">
{{ formatDict(row.dept_id, 'ks') }}
</template>
</el-table-column>
<el-table-column prop="reaction_history" label="输血反应史" align="center">
<template #default="{ row }">
{{ row.reaction_history ? (row.reaction_history == "Y" ? '有' : '无') : '' }}
</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="blood_breed" label="血液品种" align="center">
<template #default="{ row }">
{{bloodBreed.find(v => v.value == row.blood_breed).label}}
</template>
</el-table-column>
<el-table-column prop="ds" label="袋数" align="center" />
<el-table-column prop="capacity" label="容量" align="center" />
<el-table-column prop="unit" label="单位" align="center" width="80" />
<el-table-column prop="occur_date" label="出库日期" align="center" width="180" />
</el-table>
</div>
<div class="page-box">
<pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { getDictData, formatDict, dictData, useCommonDict } from '@/hooks'
import { queryhistoryList } from '@/api/doctor/application'
import router from '@/router/index.js'
const route = useRoute()
const { bloodBreed, getBloodList, loadAllDict } = useCommonDict()
const queryParams = ref({
pageNum: 1,
pageSize: 30,
beinhos_id: '',
patient_name: '',
dept: '',
})
const total = ref(0)
const tableData = ref([])
const onSearch = () => {
queryParams.value.pageNum = 1
getList()
}
const getList = () => {
queryhistoryList(queryParams.value).then((res) => {
tableData.value = res.rows
total.value = res.total
})
}
const onPrint = () => {
console.log('打印')
}
onMounted(() => {
getDictData('ks', 'sxmd')
getBloodList()
if (route.query.patientName) {
queryParams.value.patient_name = route.query.patientName
}
onSearch()
})
</script>
<style scoped lang="scss">
.box-container {
padding: 12px;
display: flex;
flex-direction: column;
gap: 10px;
.top-search-card {
background: #ffffff;
border-radius: 6px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07);
padding: 10px;
:deep(.el-form-item) {
margin-bottom: 0;
}
}
.table-card {
background: #fff;
border-radius: 6px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07);
padding: 12px;
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.tableBox {
flex: 1;
overflow: hidden;
}
}
}
</style>

View File

@ -1,313 +0,0 @@
/**
* @file index.vue
* @description: 输血治疗登记
* @author: w
* @since: 2026-07-08
*/
<template>
<div class="box-container">
<div class="toolbar">
<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>
<el-button type="warning" plain>打印</el-button>
<el-button type="info" plain>标签重打</el-button>
</div>
<el-form label-width="auto">
<div class="section">
<div class="section-title">申请信息</div>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="申请单号">
<DropdownTableSelect v-model="form.beinhos_id" :columnList="sqcolumnList" :tableData="sqList"
tableWidth="300px" labelField="beinhos_id" :showSearch="false" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="住院号/ID号">
<el-input v-model="form.patientId" readonly />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="姓 名">
<el-input v-model="form.patientName" readonly />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性 别">
<el-select v-model="form.sex" placeholder="" readonly>
<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="血 型">
<el-input v-model="form.bloodType" readonly />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="科 室">
<SelectTable v-model:data="form.deptId" :tableData="dictData.ks" placeholder="" readonly />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请日期">
<el-date-picker v-model="form.applyDate" type="datetime" style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss" readonly />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="治疗日期">
<el-date-picker v-model="form.treatDate" type="datetime" style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss" readonly />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="年 龄">
<div>
<el-input v-model="form.age" readonly />
<!-- <el-select v-model="form.nldw" placeholder="" style="width: 45%">
<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="Rh(D)">
<el-input v-model="form.rh" readonly />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="是否采血">
<el-checkbox v-model="form.collectBlood" true-value="Y" false-value="N" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="输血史">
<el-checkbox v-model="form.transfusionHistory" true-value="Y" false-value="N" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="输血反应史">
<el-checkbox v-model="form.transfusionReactionHistory" true-value="Y" false-value="N" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="妊娠史">
<el-checkbox v-model="form.pregnancyHistory" true-value="Y" false-value="N" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="分娩史">
<el-checkbox v-model="form.deliveryHistory" true-value="Y" false-value="N" />
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<el-row :gutter="10">
<el-col :span="12">
<div class="box-item">
<div class="box-title">治疗项目</div>
<div class="table-box">
<el-table :data="treatmentItems" border height="150" style="width: 100%" show-overflow-tooltip
highlight-current-row>
<el-table-column prop="project" label="治疗项目" align="center" />
<el-table-column prop="quantity" label="数量" align="center" />
<el-table-column prop="unit" label="单位" align="center" />
<el-table-column prop="remark" label="备注" align="center" />
</el-table>
</div>
</div>
</el-col>
<el-col :span="12">
<div class="box-item">
<div class="box-title">采血血液</div>
<div class="table-box">
<el-table :data="bloodItems" border height="150" style="width: 100%" show-overflow-tooltip
highlight-current-row>
<el-table-column prop="bloodBreed" label="血液品种" align="center" />
<el-table-column prop="volume" label="容量" align="center" />
<el-table-column prop="unit" label="单位" align="center" />
<el-table-column prop="remark" label="备注" align="center" />
</el-table>
</div>
</div>
</el-col>
</el-row>
<div class="section">
<div class="section-title">登记信息</div>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="治 疗 人">
<SelectTable v-model:data="registerInfo.apply_medic" :tableData="userList" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="治疗日期">
<el-date-picker v-model="registerInfo.treatDate" type="datetime" style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="治疗不良反应">
<el-input v-model="registerInfo.adverseReaction" placeholder="双击选择" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="不良反应处理">
<el-input v-model="registerInfo.adverseHandle" placeholder="双击选择" />
</el-form-item>
</el-col>
</el-row>
</div>
<div class="section">
<div class="section-title">采血信息</div>
<div class="table-box">
<el-button type="primary" plain class="mb10">新增血液</el-button>
<el-table :data="bloodRecords" border height="220" style="width: 100%">
<el-table-column prop="bloodBreed" label="血液品种" align="center" />
<el-table-column prop="bloodType" label="血型" align="center" />
<el-table-column prop="rh" label="Rh(D)" align="center" />
<el-table-column prop="volume" label="容量" align="center" />
<el-table-column prop="unit" label="单位" align="center" />
<el-table-column label="操作" align="center">
<template #default="{ row }">
<el-button type="primary" text plain>删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import DropdownTableSelect from '@/components/DropdownTableSelect/index.vue'
import { getDictData, formatDict, dictData, useCommonDict, useSysParam } from '@/hooks'
const { userList, getUserData } = useCommonDict()
const form = reactive({})
const sqcolumnList = ref([
{ label: '申请单编号', prop: 'sqbh' },
{ label: '姓名', prop: 'name' },
])
const sqList = ref([])
const treatmentItems = ref([])
const bloodItems = ref([])
const registerInfo = reactive({
treatPerson: '',
treatDate: '',
adverseReaction: '',
adverseHandle: ''
})
const bloodRecords = ref([])
onMounted(() => {
getUserData()
getDictData('ks', 'nldw')
})
</script>
<style scoped lang="scss">
.box-container {
display: flex;
flex-direction: column;
box-sizing: border-box;
gap: 10px;
overflow-y: auto;
}
.toolbar {
padding: 8px;
background: #fff;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border-radius: 4px;
}
.section {
background: #fff;
border-radius: 4px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
padding: 10px;
}
.el-form-item {
margin-bottom: 6px;
:deep(.el-form-item__label) {
font-weight: 700;
}
}
.section-title {
font-size: 15px;
font-weight: 700;
position: relative;
padding-left: 14px;
padding-bottom: 6px;
}
.section-title::before {
content: '';
position: absolute;
left: 0;
top: 4px;
width: 4px;
height: 16px;
border-radius: 0 4px 4px 0;
background-color: #409eff;
}
.box-item {
background: #fff;
border-radius: 4px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
padding: 12px;
}
.box-title {
font-size: 15px;
font-weight: 700;
margin-bottom: 12px;
position: relative;
padding-left: 14px;
}
.box-title::before {
content: '';
position: absolute;
left: 0;
top: 4px;
width: 4px;
height: 16px;
border-radius: 0 4px 4px 0;
background-color: #409eff;
}
.age-input {
display: flex;
align-items: center;
gap: 8px;
}
.text-danger {
color: #f00 !important;
}
</style>

View File

@ -1,11 +1,315 @@
<template>
<div>
输血治疗登记
/**
* @file index.vue
* @description: 输血治疗登记
* @author: w
* @since: 2026-07-08
*/
<template>
<div class="box-container">
<div class="toolbar">
<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>
<el-button type="warning" plain>打印</el-button>
<el-button type="info" plain>标签重打</el-button>
</div>
<el-form label-width="auto">
<div class="section">
<div class="section-title">申请信息</div>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="申请单号">
<DropdownTableSelect v-model="form.beinhos_id" :columnList="sqcolumnList" :tableData="sqList"
tableWidth="300px" labelField="beinhos_id" :showSearch="false" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="住院号/ID号">
<el-input v-model="form.patientId" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="姓 名">
<el-input v-model="form.patientName" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性 别">
<el-select v-model="form.sex" placeholder="" disabled>
<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="血 型">
<el-input v-model="form.bloodType" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="科 室">
<SelectTable v-model:data="form.deptId" :tableData="dictData.ks" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="申请日期">
<el-date-picker v-model="form.applyDate" type="datetime" style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="治疗日期">
<el-date-picker v-model="form.treatDate" type="datetime" style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="年 龄">
<div>
<el-input v-model="form.age" disabled />
<!-- <el-select v-model="form.nldw" placeholder="" style="width: 45%">
<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="Rh(D)">
<el-input v-model="form.rh" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="是否采血">
<el-checkbox v-model="form.collectBlood" true-value="Y" false-value="N" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="输血史">
<el-checkbox v-model="form.transfusionHistory" true-value="Y" false-value="N" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="输血反应史">
<el-checkbox v-model="form.transfusionReactionHistory" true-value="Y" false-value="N" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="妊娠史">
<el-checkbox v-model="form.pregnancyHistory" true-value="Y" false-value="N" disabled />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="分娩史">
<el-checkbox v-model="form.deliveryHistory" true-value="Y" false-value="N" disabled />
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<el-row :gutter="10">
<el-col :span="12">
<div class="box-item">
<div class="box-title">治疗项目</div>
<div class="table-box">
<el-table :data="treatmentItems" border height="150" style="width: 100%" show-overflow-tooltip
highlight-current-row>
<el-table-column prop="project" label="治疗项目" align="center" />
<el-table-column prop="quantity" label="数量" align="center" />
<el-table-column prop="unit" label="单位" align="center" />
<el-table-column prop="remark" label="备注" align="center" />
</el-table>
</div>
</div>
</el-col>
<el-col :span="12">
<div class="box-item">
<div class="box-title">采血血液</div>
<div class="table-box">
<el-table :data="bloodItems" border height="150" style="width: 100%" show-overflow-tooltip
highlight-current-row>
<el-table-column prop="bloodBreed" label="血液品种" align="center" />
<el-table-column prop="volume" label="容量" align="center" />
<el-table-column prop="unit" label="单位" align="center" />
<el-table-column prop="remark" label="备注" align="center" />
</el-table>
</div>
</div>
</el-col>
</el-row>
<div class="section">
<div class="section-title">登记信息</div>
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="治 疗 人">
<SelectTable v-model:data="registerInfo.apply_medic" :tableData="userList" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="治疗日期">
<el-date-picker v-model="registerInfo.treatDate" type="datetime" style="width: 100%"
value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="治疗不良反应">
<el-input v-model="registerInfo.adverseReaction" placeholder="双击选择" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="不良反应处理">
<el-input v-model="registerInfo.adverseHandle" placeholder="双击选择" />
</el-form-item>
</el-col>
</el-row>
</div>
<div class="card-box" style="margin-bottom: 0;">
<div class="section-title">
<div> 采血信息 </div>
<el-button type="primary" plain class="mb10">新增血液</el-button>
</div>
<div class="table-box">
<el-table :data="bloodRecords" border height="200" style="width: 100%">
<el-table-column prop="bloodBreed" label="血液品种" align="center" />
<el-table-column prop="bloodType" label="血型" align="center" />
<el-table-column prop="rh" label="Rh(D)" align="center" />
<el-table-column prop="volume" label="容量" align="center" />
<el-table-column prop="unit" label="单位" align="center" />
<el-table-column label="操作" align="center">
<template #default="{ row }">
<el-button type="primary" text plain>删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import DropdownTableSelect from '@/components/DropdownTableSelect/index.vue'
import { getDictData, formatDict, dictData, useCommonDict, useSysParam } from '@/hooks'
const { userList, getUserData } = useCommonDict()
const form = reactive({ deliveryHistory: 'Y' })
const sqcolumnList = ref([
{ label: '申请单编号', prop: 'sqbh' },
{ label: '姓名', prop: 'name' },
])
const sqList = ref([])
const treatmentItems = ref([])
const bloodItems = ref([])
const registerInfo = reactive({
treatPerson: '',
treatDate: '',
adverseReaction: '',
adverseHandle: ''
})
const bloodRecords = ref([])
onMounted(() => {
getUserData()
getDictData('ks', 'nldw')
})
</script>
<style scoped></style>
<style scoped lang="scss">
.box-container {
display: flex;
flex-direction: column;
box-sizing: border-box;
gap: 10px;
overflow-y: auto;
}
.toolbar {
padding: 8px;
background: #fff;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
border-radius: 4px;
}
.section {
background: #fff;
border-radius: 4px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
padding: 10px;
}
.el-form-item {
margin-bottom: 6px;
:deep(.el-form-item__label) {
font-weight: 700;
}
}
.section-title {
font-size: 15px;
font-weight: 700;
position: relative;
padding-left: 14px;
padding-bottom: 6px;
}
.section-title::before {
content: '';
position: absolute;
left: 0;
top: 4px;
width: 4px;
height: 16px;
border-radius: 0 4px 4px 0;
background-color: #409eff;
}
.box-item {
background: #fff;
border-radius: 4px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
padding: 12px;
}
.box-title {
font-size: 15px;
font-weight: 700;
margin-bottom: 12px;
position: relative;
padding-left: 14px;
}
.box-title::before {
content: '';
position: absolute;
left: 0;
top: 4px;
width: 4px;
height: 16px;
border-radius: 0 4px 4px 0;
background-color: #409eff;
}
.age-input {
display: flex;
align-items: center;
gap: 8px;
}
.text-danger {
color: #f00 !important;
}
</style>