版本更新
This commit is contained in:
@@ -0,0 +1,534 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
top="6vh"
|
||||
:width="width"
|
||||
title="入科选床"
|
||||
@open="openAct"
|
||||
@closed="closedAct"
|
||||
:z-index="20"
|
||||
destroy-on-close
|
||||
>
|
||||
<div class="transferIn-container">
|
||||
<el-form :model="interventionForm" :rules="rules" ref="interventionFormRef">
|
||||
<div class="admission-information">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<div class="patient-info">
|
||||
<div style="display: flex;align-items: center;margin-bottom: 16px;">
|
||||
<div style="margin-right: 36px;font-size: 18px;font-weight: 700;">{{ props.pendingInfo.houseName + '-' + props.pendingInfo.bedName }}</div>
|
||||
<div style="border-radius: 50px;border: 2px solid slategray;padding: 4px 12px;">{{ props.pendingInfo.contractName }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<div style="margin-bottom: 12px;">
|
||||
{{ props.pendingInfo.patientName}}
|
||||
<span style="color: #9f9f9f;">{{ props.pendingInfo.genderEnum_enumText}}/</span>
|
||||
<span style="color: #9f9f9f;">{{ props.pendingInfo.age}}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div>
|
||||
电话:{{ pendingInfo.phone }}
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div>
|
||||
住院诊断:{{ pendingInfo.conditionNames }}
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">{{ props.pendingInfo.patientId }}</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<div class="info-title">
|
||||
入院体征
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="身高" label-width="50px">
|
||||
<el-input-number :controls="false" style="width: 160px" clearable v-model="interventionForm.height" placeholder="请输入" :min="0"
|
||||
:max="999"></el-input-number><span class="unit">cm</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="体重" label-width="50px">
|
||||
<el-input-number :controls="false" style="width: 160px" v-model="interventionForm.weight" clearable placeholder="请输入" :min="0"
|
||||
:max="999"></el-input-number>
|
||||
<span class="unit">kg</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="体温" label-width="50px">
|
||||
<el-input-number :controls="false" style="width: 160px" v-model="interventionForm.temperature" clearable placeholder="请输入"
|
||||
:min="0" :max="99"></el-input-number>
|
||||
<span class="unit">℃</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="心率" label-width="50px">
|
||||
<el-input-number :controls="false" style="width: 160px" v-model="interventionForm.hertRate" clearable placeholder="请输入" :min="0"
|
||||
:max="999"></el-input-number>
|
||||
<span class="unit">BPM</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="脉搏" label-width="50px">
|
||||
<el-input-number :controls="false" style="width: 160px" v-model="interventionForm.pulse" clearable placeholder="请输入" :min="0"
|
||||
:max="999"></el-input-number><span class="unit">P</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="血压" label-width="50px">
|
||||
<el-input-number :controls="false" style="width: 72px" v-model="interventionForm.endBloodPressure" clearable placeholder="请输入"
|
||||
:min="0" :max="999"></el-input-number>
|
||||
<span style="display: inline-block; width: 8px; margin: 0 4px"> ~ </span>
|
||||
|
||||
<el-input-number :controls="false" style="width: 72px" v-model="interventionForm.highBloodPressure" clearable placeholder="请输入"
|
||||
:min="0" :max="999"></el-input-number>
|
||||
<span class="unit">mmHg</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<div class="info-title">
|
||||
入院信息
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="入院科室" label-width="100px">
|
||||
<el-input
|
||||
class="w-p100"
|
||||
clearable
|
||||
disabled
|
||||
v-model="interventionForm.organizationName"
|
||||
placeholder="请输入"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="入院病区" label-width="100px">
|
||||
<el-input
|
||||
class="w-p100"
|
||||
v-model="interventionForm.wardName"
|
||||
disabled
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="入住床位" label-width="100px">
|
||||
<el-input
|
||||
class="w-p100"
|
||||
v-model="interventionForm.bedName"
|
||||
disabled
|
||||
clearable
|
||||
placeholder="请输入"
|
||||
></el-input>
|
||||
<!-- <el-select v-model="interventionForm.bedLocationId" placeholder="请选择入住床位" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in bedInfoOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select> -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="住院医生" label-width="100px" prop="admittingDoctorId">
|
||||
<el-select
|
||||
v-model="interventionForm.admittingDoctorId"
|
||||
placeholder="请选择住院医生"
|
||||
style="width: 240px"
|
||||
:disabled="props.pendingInfo.encounterStatus == 5 && props.pendingInfo.entranceType == 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in doctorInfoOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="主治医生" label-width="100px">
|
||||
<el-select
|
||||
v-model="interventionForm.attendingDoctorId"
|
||||
placeholder="请选择主治医生"
|
||||
style="width: 240px"
|
||||
:disabled="props.pendingInfo.encounterStatus == 5 && props.pendingInfo.entranceType == 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in doctorInfoOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="主任医生" label-width="100px">
|
||||
<el-select
|
||||
v-model="interventionForm.chiefDoctorId"
|
||||
placeholder="请选择主任医生"
|
||||
style="width: 240px"
|
||||
:disabled="props.pendingInfo.encounterStatus == 5 && props.pendingInfo.entranceType == 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in doctorInfoOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="入科时间" label-width="100px">
|
||||
<el-date-picker
|
||||
class="w-p100"
|
||||
v-model="interventionForm.startTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请输入"
|
||||
:disabled="props.pendingInfo.encounterStatus == 5"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="责任护士" label-width="100px" prop="primaryNurseId">
|
||||
<el-select
|
||||
v-model="interventionForm.primaryNurseId"
|
||||
placeholder="请选择责任护士"
|
||||
style="width: 240px"
|
||||
:disabled="props.pendingInfo.encounterStatus == 5 && props.pendingInfo.entranceType == 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in nurseInfoOptions"
|
||||
:key="item.practitionerId"
|
||||
:label="item.name"
|
||||
:value="item.practitionerId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="患者病情" label-width="100px">
|
||||
<el-select
|
||||
v-model="interventionForm.priorityEnum"
|
||||
placeholder="请选择患者病情"
|
||||
style="width: 240px"
|
||||
:disabled="props.pendingInfo.encounterStatus == 5 && props.pendingInfo.entranceType == 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in props.priorityOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<template #footer>
|
||||
<!-- <div class="transferInDialog-footer"> -->
|
||||
<div class="isPrintWristband">
|
||||
<el-checkbox v-model="printWristband">打印腕带</el-checkbox>
|
||||
</div>
|
||||
<el-button class="margin-left-auto" @click="cancelAct">取消 </el-button>
|
||||
<el-button type="primary" @click="handleSubmit">入科</el-button>
|
||||
<!-- </div> -->
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref, onMounted, inject, type Ref, watch } from 'vue'
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
import { dayjs, ElMessage } from 'element-plus'
|
||||
// import type { IInPatient } from '@/model/IInPatient'
|
||||
import { getBedInfo, getDoctorInfo, getNurseInfo, getInit, bedAssignment, getPatientInfo } from './api'
|
||||
|
||||
const props = defineProps({
|
||||
pendingInfo: {
|
||||
type: Object,
|
||||
require: true,
|
||||
default: () => ({})
|
||||
},
|
||||
priorityOptions: {
|
||||
type: Object,
|
||||
require: true,
|
||||
default: () => ({})
|
||||
},
|
||||
})
|
||||
|
||||
const currentInPatient = ref<Partial<IInPatient>>({})
|
||||
const bedInfoOptions = ref<{ label: string; value: string }[]>([])
|
||||
const doctorInfoOptions = ref<{ name: string; id: string }[]>([])
|
||||
const nurseInfoOptions = ref<{ name: string; practitionerId: string }[]>([])
|
||||
const InitInfoOptions = ref<any>({})
|
||||
const priorityListOptions = ref<{ info: string; value: string }[]>([])
|
||||
const pendingInfo = ref<any>({})
|
||||
|
||||
const initCurrentInPatient = () => {
|
||||
currentInPatient.value = {
|
||||
feeType: '08',
|
||||
sexName: '男',
|
||||
age: '0',
|
||||
}
|
||||
}
|
||||
|
||||
/* 入科 */
|
||||
const interventionForm = ref({
|
||||
height: undefined,
|
||||
weight: undefined,
|
||||
temperature: undefined,
|
||||
hertRate: undefined,
|
||||
pulse: undefined,
|
||||
endBloodPressure: undefined,
|
||||
highBloodPressure: undefined,
|
||||
bedLocationId: '', // 床号
|
||||
admittingDoctorId: '', // 住院医师
|
||||
attendingDoctorId: '', // 主治医师
|
||||
chiefDoctorId: '', // 主任医师
|
||||
primaryNurseId: '', // 责任护士
|
||||
priorityEnum: '', //患者病情
|
||||
organizationName: '',
|
||||
wardName: '',
|
||||
bedName: '',
|
||||
attendingDocUpdateId: '',
|
||||
startTime: '', //入院时间
|
||||
})
|
||||
|
||||
watch(() => props.pendingInfo, (newVal, oldVal) => {
|
||||
console.log(newVal)
|
||||
if(newVal) {
|
||||
getPatientInfo({encounterId: newVal.encounterId}).then(res => {
|
||||
pendingInfo.value = res.data
|
||||
interventionForm.value.admittingDoctorId = res.data.admittingDoctorId
|
||||
interventionForm.value.attendingDoctorId = res.data.attendingDoctorId
|
||||
interventionForm.value.chiefDoctorId = res.data.chiefDoctorId
|
||||
interventionForm.value.primaryNurseId = res.data.primaryNurseId
|
||||
if(res.data.startTime) {
|
||||
interventionForm.value.startTime = dayjs(res.data.startTime).format('YYYY-MM-DD HH:mm:ss')
|
||||
}else {
|
||||
interventionForm.value.startTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss')
|
||||
}
|
||||
})
|
||||
interventionForm.value.priorityEnum = newVal.priorityEnum
|
||||
interventionForm.value.organizationName = newVal.organizationName
|
||||
interventionForm.value.wardName = newVal.wardName
|
||||
interventionForm.value.bedName = newVal.bedName
|
||||
}
|
||||
},{ deep: true })
|
||||
|
||||
/* 初始化数据 */
|
||||
const init = () => {
|
||||
initCurrentInPatient()
|
||||
getInit().then(res => {
|
||||
InitInfoOptions.value = res.data
|
||||
// 安全地设置priorityListOptions
|
||||
if (res.data && res.data.priorityListOptions) {
|
||||
priorityListOptions.value = res.data.priorityListOptions
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取初始化数据失败:', error)
|
||||
})
|
||||
|
||||
if (props.pendingInfo.wardLocationId) {
|
||||
getBedInfo({wardLocationId: props.pendingInfo.wardLocationId}).then(res => {
|
||||
bedInfoOptions.value = res.data || []
|
||||
}).catch(error => {
|
||||
console.error('获取床位信息失败:', error)
|
||||
bedInfoOptions.value = []
|
||||
})
|
||||
}
|
||||
|
||||
if (props.pendingInfo.organizationId) {
|
||||
getDoctorInfo({organizationId: props.pendingInfo.organizationId}).then(res => {
|
||||
doctorInfoOptions.value = res.data.records || []
|
||||
}).catch(error => {
|
||||
console.error('获取医生信息失败:', error)
|
||||
doctorInfoOptions.value = []
|
||||
})
|
||||
|
||||
getNurseInfo({organizationId: props.pendingInfo.organizationId}).then(res => {
|
||||
nurseInfoOptions.value = res.data || []
|
||||
}).catch(error => {
|
||||
console.error('获取护士信息失败:', error)
|
||||
nurseInfoOptions.value = []
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const rules = reactive<FormRules>({
|
||||
admittingDoctorId: [{ required: true, message: '请选择住院医生', trigger: ['blur', 'change'] }],
|
||||
primaryNurseId: [{ required: true, message: '请选择责任护士', trigger: ['blur', 'change'] }],
|
||||
bedLocationId: [{ required: true, message: '请选择入住床位', trigger: ['blur', 'change'] }],
|
||||
})
|
||||
|
||||
const printWristband = ref(false)
|
||||
const emits = defineEmits(['okAct'])
|
||||
const visible = defineModel('visible')
|
||||
const width = '950px'
|
||||
|
||||
/* 取消 */
|
||||
const cancelAct = () => {
|
||||
resetForm()
|
||||
visible.value = false
|
||||
}
|
||||
|
||||
const resetForm = () => {
|
||||
// interventionForm.value = {
|
||||
// height: undefined,
|
||||
// weight: undefined,
|
||||
// temperature: undefined,
|
||||
// hertRate: undefined,
|
||||
// pulse: undefined,
|
||||
// endBloodPressure: undefined,
|
||||
// highBloodPressure: undefined,
|
||||
// bedLocationId: '', // 床号
|
||||
// admittingDoctorId: '', // 住院医师
|
||||
// attendingDoctorId: '', // 主治医师
|
||||
// chiefDoctorId: '', // 主任医师
|
||||
// primaryNurseId: '', // 责任护士
|
||||
// priorityEnum: '', //患者病情
|
||||
// organizationName: '',
|
||||
// wardName: '',
|
||||
// attendingDocUpdateId: '',
|
||||
// startTime: '', //入院时间
|
||||
// }
|
||||
|
||||
// 可选:清空校验状态
|
||||
if (interventionFormRef.value) {
|
||||
interventionFormRef.value.resetFields()
|
||||
}
|
||||
}
|
||||
|
||||
/* 入科 */
|
||||
const interventionFormRef = ref<FormInstance | null>(null)
|
||||
const handleSubmit = async () => {
|
||||
// TODO 登记入科
|
||||
if (!interventionFormRef.value) {
|
||||
console.error('表单引用不存在')
|
||||
return
|
||||
}
|
||||
try {
|
||||
const valid = await interventionFormRef.value.validate()
|
||||
if (valid) {
|
||||
const params = {
|
||||
...pendingInfo.value,
|
||||
...interventionForm.value,
|
||||
targetBedId: props.pendingInfo.bedId,
|
||||
busNo: props.pendingInfo.busNo,
|
||||
inHosTime: props.pendingInfo.inHosTime,
|
||||
targetHouseId : props.pendingInfo.targetHouseId,
|
||||
targetEncounterId: props.pendingInfo.targetEncounterId,
|
||||
editFlag: props.pendingInfo.entranceType == 1 ? 1 : 0
|
||||
}
|
||||
|
||||
bedAssignment(params).then((res: any) => {
|
||||
ElMessage({
|
||||
message: '登记成功!',
|
||||
type: 'success',
|
||||
grouping: true,
|
||||
showClose: true,
|
||||
})
|
||||
resetForm()
|
||||
emits('okAct')
|
||||
visible.value = false // 关闭对话框
|
||||
}).catch((error: any) => {
|
||||
console.error('登记失败:', error)
|
||||
ElMessage({
|
||||
message: '登记失败!',
|
||||
type: 'error',
|
||||
grouping: true,
|
||||
showClose: true,
|
||||
})
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('表单验证失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
const openAct = () => {
|
||||
init()
|
||||
if (props.pendingInfo) {
|
||||
interventionForm.value.priorityEnum = props.pendingInfo.priorityEnum || ''
|
||||
interventionForm.value.admittingDoctorId = props.pendingInfo.practitionerId || ''
|
||||
interventionForm.value.organizationName = props.pendingInfo.organizationName || ''
|
||||
interventionForm.value.wardName = props.pendingInfo.wardName || ''
|
||||
interventionForm.value.attendingDocUpdateId = props.pendingInfo.admittingDoctorId || ''
|
||||
}
|
||||
}
|
||||
|
||||
const closedAct = () => {
|
||||
resetForm()
|
||||
visible.value = false
|
||||
}
|
||||
|
||||
onMounted(() => {})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.transferIn-container {
|
||||
width: 100%;
|
||||
|
||||
.admission-information {
|
||||
width: 896px;
|
||||
.unit {
|
||||
display: inline-block;
|
||||
margin-left: 10px;
|
||||
color: #bbb;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
font-family: '思源黑体 CN';
|
||||
}
|
||||
}
|
||||
.beds {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.patient-info {
|
||||
padding: 16px;
|
||||
margin: 10px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 2px 0 rgba(58, 69, 86, 0.2);
|
||||
position: relative;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.isPrintWristband {
|
||||
float: left;
|
||||
display: inline-block;
|
||||
}
|
||||
.w-p100 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.w-80 {
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
.info-title {
|
||||
background: #f6f7f9;
|
||||
color: #4f6877;
|
||||
padding: 5px 10px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user