|  |  |  | 
|---|
|  |  |  | v-loading="formLoading" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <el-form-item label="检查项目" prop=""> | 
|---|
|  |  |  | {{formData.checkType && checkTypeStore.getCheckTypeName(formData.checkType)}} | 
|---|
|  |  |  | {{formData?.checkType && getCheckTypeName(formData?.checkType)}} | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="患者编号" prop="patId"> | 
|---|
|  |  |  | <el-input v-model="formData.patId" placeholder="请输入患者编号" @input="getRentInfoByPatId" /> | 
|---|
|  |  |  | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <el-form-item label="患者描述" prop="patDeptDesc"> | 
|---|
|  |  |  | <dict-tag v-if="formData.patSrc" :type="DICT_TYPE.ECG_PAT_SOURCE" :value="formData.patSrc" /> | 
|---|
|  |  |  | {{formData.patDetails?.deptDesc}} {{formData.patDetails?.wardDesc}} {{formData.patDetails?.bedNo}} | 
|---|
|  |  |  | <dict-tag v-if="formData.patDetails?.source" :type="DICT_TYPE.ECG_PAT_SOURCE" :value="formData.patDetails?.source" /> | 
|---|
|  |  |  | {{formData?.patDetails?.deptDesc}} {{formData?.patDetails?.wardDesc}} {{formData?.patDetails?.bedNo}} | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="设备编号" prop="devId"> | 
|---|
|  |  |  | <el-input v-model="formData.devId" placeholder="请输入设备编号" @input="getDevInfo"/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="设备描述" prop=""> | 
|---|
|  |  |  | {{deviceInfo.brand + "  " + deviceInfo.model + " " + deviceInfo.state}} | 
|---|
|  |  |  | {{ devInfo?.brand||'-' }} {{ devInfo?.model||'-' }} {{ tranlateDevState(devInfo?.state) }} | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="领用时间" prop="rentTime"> | 
|---|
|  |  |  | <el-date-picker | 
|---|
|  |  |  | 
|---|
|  |  |  | <el-button @click="submitForm" type="primary" :disabled="formLoading">领用完成</el-button> | 
|---|
|  |  |  | <el-checkbox style="margin-left:10px" label="自动 " v-model="autoPrint" /> | 
|---|
|  |  |  | <el-button @click="printBill(formData.patId!, formData.checkType!)">打印小票</el-button> | 
|---|
|  |  |  | <el-button @click="printBill(formData.patId!, formData.checkType!, 8)">打印小票2</el-button> | 
|---|
|  |  |  | <el-button @click="cancelReady"  :disabled="formLoading">放弃领用</el-button> | 
|---|
|  |  |  | <el-button @click="resetForm()">重 置</el-button> | 
|---|
|  |  |  | <el-button v-if="formData.checkType && checkTypeStore.getExpenseRecognition(formData.checkType)" @click="feeConfirm"  :disabled="formLoading">确费</el-button> | 
|---|
|  |  |  | <el-button v-if="formData.checkType && checkTypeStore.getExpenseRecognition(formData.checkType)" @click="feeCancel"  :disabled="formLoading">取消确费</el-button> | 
|---|
|  |  |  | <el-button v-if="needAutoFeeConfirm(formData.checkType)" @click="feeConfirm"  :disabled="formLoading">确费</el-button> | 
|---|
|  |  |  | <el-button v-if="needAutoFeeConfirm(formData.checkType)" @click="feeCancel"  :disabled="formLoading">取消确费</el-button> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!-- 医生装机列表 --> | 
|---|
|  |  |  | <ContentWrap> | 
|---|
|  |  |  | 
|---|
|  |  |  | import {AppointmentApi, AppointmentVO} from "@/api/ecg/appointment"; | 
|---|
|  |  |  | import {useCheckTypeStore} from '@/store/modules/checkType' | 
|---|
|  |  |  | import {calGender, getBookBeginTime} from "@/utils"; | 
|---|
|  |  |  | import form from "@/components/Form/src/Form.vue"; | 
|---|
|  |  |  | import {DICT_TYPE} from "@/utils/dict"; | 
|---|
|  |  |  | import {tranlateDevState} from "@/utils/statusFormatter"; | 
|---|
|  |  |  | import {getCheckTypeName, needAutoFeeConfirm} from "../../../../utils/checkTypeFormatter"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** 设备领用 表单 */ | 
|---|
|  |  |  | defineComponent({ name: 'DevReadyPanel' }) | 
|---|
|  |  |  | 
|---|
|  |  |  | const { t } = useI18n() // 国际化 | 
|---|
|  |  |  | const message = useMessage() // 消息弹窗 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const dialogVisible = ref(false) // 弹窗的是否展示 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const autoPrint = ref<boolean>(true); | 
|---|
|  |  |  | 
|---|
|  |  |  | checkType: undefined, | 
|---|
|  |  |  | rentTime: new Date().getTime(), | 
|---|
|  |  |  | returnTime: undefined, | 
|---|
|  |  |  | interference: undefined, | 
|---|
|  |  |  | baseline: undefined, | 
|---|
|  |  |  | detachment: undefined, | 
|---|
|  |  |  | remark: undefined, | 
|---|
|  |  |  | paid: undefined, | 
|---|
|  |  |  | roomId: props.room.roomId, | 
|---|
|  |  |  | bedNo: props.room.bedNo | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const formRules = reactive({ | 
|---|
|  |  |  | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | const formRef = ref() // 表单 Ref | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const deviceInfo = ref<DeviceVO> ({ | 
|---|
|  |  |  | id: 0, | 
|---|
|  |  |  | devId: '', | 
|---|
|  |  |  | category: '', | 
|---|
|  |  |  | brand: '', | 
|---|
|  |  |  | model: '', | 
|---|
|  |  |  | purchaseDate: 0, | 
|---|
|  |  |  | state: 0, | 
|---|
|  |  |  | const devInfo = ref<Partial<DeviceVO>>({ | 
|---|
|  |  |  | category: undefined, | 
|---|
|  |  |  | brand: undefined, | 
|---|
|  |  |  | model: undefined, | 
|---|
|  |  |  | state: undefined, | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const displayBarCode = ref<string> () | 
|---|
|  |  |  | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // formDate 对应  DevRent | 
|---|
|  |  |  | // formData.value = data  //不能整个赋值, 默认领用时间被清空 | 
|---|
|  |  |  | formData.value.id = data.id;   //rent id | 
|---|
|  |  |  | formData.value.applyNo = data.applyNo; | 
|---|
|  |  |  | formData.value.episodeId = data.episodeId; | 
|---|
|  |  |  | formData.value.patDetails = data.patDetails | 
|---|
|  |  |  | formData.value = data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 领用时间  采用当前时间 | 
|---|
|  |  |  | formData.value.rentTime = new Date().getTime() | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** 提交表单 */ | 
|---|
|  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | formData.value.roomId = props.room.roomId | 
|---|
|  |  |  | formData.value.bedNo = props.room.bedNo | 
|---|
|  |  |  | const data = formData.value | 
|---|
|  |  |  | console.info( data ) | 
|---|
|  |  |  | await DevRentApi.devReady(formData.value) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | await DevRentApi.devReady(data) | 
|---|
|  |  |  | if (autoPrint.value && formData.value.patId && formData.value.checkType) { | 
|---|
|  |  |  | printBill(formData.value.patId, formData.value.checkType) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (autoPrint.value) | 
|---|
|  |  |  | printBill( data.patId, data.checkType) | 
|---|
|  |  |  | // 自动确费 | 
|---|
|  |  |  | if (needAutoFeeConfirm(formData.value.checkType)) { | 
|---|
|  |  |  | feeConfirm() | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | dialogVisible.value = false | 
|---|
|  |  |  | // 发送操作成功的事件 | 
|---|
|  |  |  | emit('event_dev_ready') | 
|---|
|  |  |  | resetForm() | 
|---|
|  |  |  | getList() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 发送操作成功的事件 | 
|---|
|  |  |  | emit('event_dev_ready') | 
|---|
|  |  |  | message.success(t('操作完成')) | 
|---|
|  |  |  | } finally { | 
|---|
|  |  |  | formLoading.value = false | 
|---|
|  |  |  | 
|---|
|  |  |  | /** 重置表单 */ | 
|---|
|  |  |  | const resetForm = () => { | 
|---|
|  |  |  | formData.value = { | 
|---|
|  |  |  | id: undefined, | 
|---|
|  |  |  | devId: undefined, | 
|---|
|  |  |  | patId: undefined, | 
|---|
|  |  |  | patName: undefined, | 
|---|
|  |  |  | checkType: undefined, | 
|---|
|  |  |  | rentTime: new Date().getTime(), | 
|---|
|  |  |  | returnTime: undefined, | 
|---|
|  |  |  | interference: undefined, | 
|---|
|  |  |  | baseline: undefined, | 
|---|
|  |  |  | detachment: undefined, | 
|---|
|  |  |  | remark: undefined, | 
|---|
|  |  |  | patDeptCode: undefined, | 
|---|
|  |  |  | patDeptDesc: undefined, | 
|---|
|  |  |  | patWardCode: undefined, | 
|---|
|  |  |  | patWardDesc: undefined, | 
|---|
|  |  |  | patBedNo: undefined, | 
|---|
|  |  |  | patDetails: undefined, | 
|---|
|  |  |  | paid: undefined, | 
|---|
|  |  |  | roomId: props.room.roomId, | 
|---|
|  |  |  | bedNo: props.room.bedNo | 
|---|
|  |  |  | } | 
|---|
|  |  |  | formRef.value?.resetFields() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | deviceInfo.value.category = '' | 
|---|
|  |  |  | deviceInfo.value.brand = '' | 
|---|
|  |  |  | deviceInfo.value.model = '' | 
|---|
|  |  |  | deviceInfo.value.state = 0 | 
|---|
|  |  |  | devInfo.value = { | 
|---|
|  |  |  | category: undefined, | 
|---|
|  |  |  | brand: undefined, | 
|---|
|  |  |  | model: undefined, | 
|---|
|  |  |  | state: undefined, | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const setPatient = (queueVO: QueueVO | undefined) => { | 
|---|
|  |  |  | 
|---|
|  |  |  | formData.value.patId = queueVO?.patId | 
|---|
|  |  |  | formData.value.patName = queueVO?.patName | 
|---|
|  |  |  | formData.value.checkType = queueVO?.bookCheckType | 
|---|
|  |  |  | formData.value.patSrc = queueVO?.patDetails.source | 
|---|
|  |  |  | getFreeRentInfo(formData.value) | 
|---|
|  |  |  | getFreeRentInfo(formData.value)  // 待检查的信息  @ dev_rent 表 | 
|---|
|  |  |  | copyBarcode() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | defineExpose({ setPatient }) // 提供 setPatient 方法,用于设置患者 | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const getSelectedRent = async (rentId) => { | 
|---|
|  |  |  | formData.value = await DevRentApi.getDevRent(rentId) | 
|---|
|  |  |  | const data = await DevRentApi.getDevRent(rentId) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | formData.value = data | 
|---|
|  |  |  |  | 
|---|
|  |  |  | devInfo.value.category = data.category | 
|---|
|  |  |  | devInfo.value.brand = data.brand | 
|---|
|  |  |  | devInfo.value.model = data.model | 
|---|
|  |  |  | devInfo.value.state = data.devState | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const printBill = async (patId: string, checkType: number, printMode?: number) => { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const curAppointment: AppointmentVO = await AppointmentApi.getCurAppointmentByPatIdAndCheckType( patId, checkType ) | 
|---|
|  |  |  | console.info( curAppointment ) | 
|---|
|  |  |  | //console.info( curAppointment ) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 引入后使用示例 | 
|---|
|  |  |  | hiprint.init({ | 
|---|
|  |  |  | 
|---|
|  |  |  | //var panel = hiprintTemplate.addPrintPanel({ width: 100, height: 130, paperFooter: 340, paperHeader: 10 }); 导致走三页 | 
|---|
|  |  |  | var panel = hiprintTemplate.addPrintPanel({ width: 140, height: 130, paperNumberDisabled:true}); | 
|---|
|  |  |  | //文本 | 
|---|
|  |  |  | const checkTypeName = checkTypeStore.getCheckTypeName(curAppointment.bookCheckType) | 
|---|
|  |  |  | const checkTypeName = getCheckTypeName(curAppointment.bookCheckType) | 
|---|
|  |  |  | panel.addPrintText({ options: { width: 140, height: 12, top: 2, left: 20, title: checkTypeName, textAlign: 'center', fontSize: 10, fontFamily: '微软雅黑',  fontWeight: '700', } }); | 
|---|
|  |  |  | const patientBaisc = curAppointment.patName + "  " + calGender(curAppointment.patGender) + "  " + calculateAge(curAppointment.patBirthday) + "岁" | 
|---|
|  |  |  | panel.addPrintText({ options: { width: 140, height: 12, top: 16, left: 20, title: patientBaisc, textAlign: 'center' , fontSize: 10, fontFamily: '微软雅黑',  fontWeight: '700', } }); | 
|---|
|  |  |  | 
|---|
|  |  |  | panel.addPrintText({ options: { width: 140, height: 22, top: 86, left: 20, title: curAppointment.episodeId, textType: 'barcode' } }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //打印 | 
|---|
|  |  |  | if (undefined === printMode) | 
|---|
|  |  |  | hiprintTemplate.print2([{},{},{}]); // 可以传 [定位参数]  http://https://ccsimple.github.io/sv-print-docs/config/template.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AE%BE%E8%AE%A1%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B | 
|---|
|  |  |  | if (printMode == null) | 
|---|
|  |  |  | hiprintTemplate.print2([{},{},{}]); // 预览方式 可以传 [定位参数]  http://https://ccsimple.github.io/sv-print-docs/config/template.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AE%BE%E8%AE%A1%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B | 
|---|
|  |  |  | else | 
|---|
|  |  |  | hiprintTemplate.print([{},{},{}]); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const getDevInfo = async () => { | 
|---|
|  |  |  | deviceInfo.value.category = '' | 
|---|
|  |  |  | deviceInfo.value.brand = '' | 
|---|
|  |  |  | deviceInfo.value.model = '' | 
|---|
|  |  |  | deviceInfo.value.state = 0 | 
|---|
|  |  |  | if (isStringEmpty(formData.value.devId)) | 
|---|
|  |  |  | if (formData.value?.devId == null) { | 
|---|
|  |  |  | devInfo.value.brand = undefined | 
|---|
|  |  |  | devInfo.value.model = undefined | 
|---|
|  |  |  | devInfo.value.state = undefined | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const data = await DeviceApi.getDeviceByDevId(formData.value.devId!) | 
|---|
|  |  |  | console.info( data ) | 
|---|
|  |  |  | if ( null !== data) | 
|---|
|  |  |  | deviceInfo.value = data | 
|---|
|  |  |  | devInfo.value = data | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const feeConfirm = async () => { | 
|---|
|  |  |  | if (formData.value.id == null) { | 
|---|
|  |  |  | message.error(t('请先领用')) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const result = await DevRentApi.feeConfirm(formData.value.id) | 
|---|
|  |  |  | if (0 == result) | 
|---|
|  |  |  | message.success(t('操作成功')) | 
|---|
|  |  |  | if (0 === result) | 
|---|
|  |  |  | message.success(t('确费操作成功')) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const feeCancel = async () => { | 
|---|
|  |  |  | if (formData.value.id == null) { | 
|---|
|  |  |  | message.error(t('请先领用')) | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const result = await DevRentApi.feeCancel(formData.value.id) | 
|---|
|  |  |  | if (0 == result) | 
|---|
|  |  |  | if (0 === result) | 
|---|
|  |  |  | message.success(t('操作成功')) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const getDisplayBarcode = (): string => { | 
|---|
|  |  |  | if (!formData.value.checkType) | 
|---|
|  |  |  | if (formData.value.checkType == null) | 
|---|
|  |  |  | return "" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const displayBarcode: number[] = checkTypeStore.getCheckTypeDispBarCode(formData.value.checkType!) | 
|---|
|  |  |  | if (!displayBarcode.includes( formData.value.patSrc )) | 
|---|
|  |  |  | if (formData.value.patDetails == null || formData.value.patDetails.source == null || | 
|---|
|  |  |  | !displayBarcode.includes( formData.value.patDetails.source )) | 
|---|
|  |  |  | return "" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return getBarcode() | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const getBarcode = (): string => { | 
|---|
|  |  |  | if (!formData.value.checkType) | 
|---|
|  |  |  | if (formData.value.checkType == null) | 
|---|
|  |  |  | return "" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (1 === formData.value.patSrc || 2 === formData.value.patSrc) | 
|---|
|  |  |  | const patSource = formData.value.patDetails?.source | 
|---|
|  |  |  | if (patSource == null) | 
|---|
|  |  |  | return "" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (1 === patSource || 2 === patSource) | 
|---|
|  |  |  | return formData.value.applyNo??"" | 
|---|
|  |  |  | else if (3 === formData.value.patSrc || 4 === formData.value.patSrc) | 
|---|
|  |  |  | else if (3 === patSource || 4 === patSource) | 
|---|
|  |  |  | return formData.value.episodeId??"" | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return "" | 
|---|