Files
his/openhis-ui-vue3/src/components/Auto/printBills/exeOrderSheet.vue
zhangfei 9c3e603b94 Fix Bug #443: 手术计费:点击签发耗材时异常报错
当手术计费弹窗中点击"签发"耗材时,因耗材的locationId(发放库房)为空导致后端异常。
在DoctorStationAdviceAppServiceImpl.handDevice方法中,当locationId为null时,使用登录用户的科室ID作为默认值,
与NurseBillingAppService中的处理方式保持一致。
2026-05-08 09:14:18 +08:00

171 lines
6.2 KiB
Vue
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="recordBill">
<div :id="'exeSheetTitle' + printData.id" class="printView_header">
<div style="text-align: center; height: 60px">
{{ userStore.hospitalName }}医嘱执行单
</div>
<div>
<span style="display: inline-block; width: 100px">床号{{ printData.patientInfo.encounterLocationName }}</span>
<span style="display: inline-block; width: 180px">姓名{{ printData.patientInfo.name }}</span>
<span style="display: inline-block; width: 140px">年龄{{ printData.patientInfo.patientAge }}</span>
<span style="display: inline-block; width: 280px">诊断{{ printData.patientInfo.diag }}</span>
</div>
<!-- <div>
<span style="display: inline-block; width: 200px">档案号{{printData.patientInfo.hisNo}}</span>
<span style="display: inline-block; width: 260px">入室时间{{printData.patientInfo.checkInTime}}</span>
<span style="display: inline-block; width: 140px">性别{{!printData.patientInfo.gender? '':printData.patientInfo.gender.display}}</span>
</div>-->
</div>
<div :id="'exeSheet' + printData.id" class="printView_content">
<table border="1" cellSpacing="0" width="97%" cellPadding="1" style=" border-collapse:collapse; font-size: 13px" bordercolor="#333333">
<thead>
<TR>
<TD rowspan="1">
<DIV style="width: 65px;text-align: center">医嘱日期</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 120px" align="center">医嘱</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 10px" align="center" />
</TD>
<TD colspan="1">
<DIV style="width: 70px" align="center">嘱托</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 60px" align="center">用量</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 40px" align="center">用法</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 40px" align="center">频次</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 65px" align="center">开立医生</DIV>
</TD>
<TD rowspan="1">
<DIV style="width: 65px" align="center">执行时间</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 65px" align="center">执行护士</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">终止时间</DIV>
</TD>
<TD colspan="1">
<DIV style="width: 55px" align="center">终止人</DIV>
</TD>
</TR>
</thead>
<tbody>
<tr v-for="item in printData.recordData" :key="item.id">
<td v-html="item.moTime" />
<td v-html="item.orderName" />
<td v-html="item.flag" />
<td v-html="item.remark" />
<td v-html="item.doseOnce<=0?'':(item.doseOnce+ item.doseUnit)" />
<td v-html="item.usageName" />
<td v-html="item.frequency" />
<td :id="item.id">
<span v-if="(item.docSignImage === ''||item.docSignImage === null)">{{ item.moDocName }}</span>
<img v-if="(item.docSignImage !== ''&&item.docSignImage !== null)" :src="'data:image/png;base64,'+ item.docSignImage" style="height: 100%; width: 100%;object-fit: cover;">
</td>
<td v-html="item.occurrence" />
<td :id="item.id">
<span v-if="(item.perNurserSignImage === ''||item.perNurserSignImage === null)">{{ item.performName }}</span>
<img v-if="(item.perNurserSignImage !== ''&&item.perNurserSignImage !== null)" :src="'data:image/png;base64,'+ item.perNurserSignImage" style="height: 100%; width: 100%;object-fit: cover;">
</td>
<td />
<td />
</tr>
</tbody>
</table>
</div>
</div>
</template>
<script>
// 迁移到 hiprint
import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js'
import useUserStore from '@/store/modules/user'
export default {
setup() {
const userStore = useUserStore();
return { userStore };
},
props: {
printData: {
type: Object,
default() {
return {}
}
}
},
data() {
return {}
},
mounted() {},
methods: {
/**
* 使用 hiprint 执行打印
*/
async printTest() {
try {
// 构建打印数据
const recordData = (this.printData.recordData || []).map(item => ({
moTime: item.moTime || '',
orderName: item.orderName || '',
flag: item.flag || '',
remark: item.remark || '',
doseOnceUnit: item.doseOnce <= 0 ? '' : (item.doseOnce + item.doseUnit),
usageName: item.usageName || '',
frequency: item.frequency || '',
moDocName: item.moDocName || '',
occurrence: item.occurrence || '',
performName: item.performName || ''
}))
const printData = {
hospitalName: this.userStore.hospitalName,
bedName: this.printData.patientInfo ? this.printData.patientInfo.encounterLocationName : '',
patientName: this.printData.patientInfo ? this.printData.patientInfo.name : '',
patientAge: this.printData.patientInfo ? this.printData.patientInfo.patientAge : '',
diag: this.printData.patientInfo ? this.printData.patientInfo.diag : '',
recordData: recordData
}
// 使用 hiprint 打印
await simplePrint(PRINT_TEMPLATE.EXE_ORDER_SHEET, printData)
} catch (error) {
console.error('医嘱执行单打印失败:', error)
}
}
}
}
</script>
<style scoped lang="less">
.recordBill {
display: grid;
grid-template-rows: 90px 1fr;
height: 500px !important;
width: 680px;
/deep/ .el-table .cell {
font-size: 10px !important;
}
.printView_header {
grid-template-rows: 40px 30px 30px;
height: 200px !important;
h4{
text-align: center;
margin: 15px;
}
}
.printView_content{
}
}
</style>