ecg的相关功能

This commit is contained in:
旺仔 2024-12-30 15:44:00 +08:00
parent b1988882cb
commit ebe935974c
4 changed files with 197 additions and 84 deletions

View File

@ -35,10 +35,10 @@ export interface EcganalysisparasVO {
ecgJsonDataFilePath: string // 心电数据json格式的数据文件路径路径或URL
createDate: Date // 分析参数的创建时间
regId: String//患者ID
name:String
gender:String
age:String
diagtime:undefined
name: String
gender: String
age: String
diagtime: undefined
}
// 心电分析数据 API
@ -93,9 +93,15 @@ export const EcganalysisparasApi = {
exportWorkloadExcel: async (doctorName: string, startTime: string, endTime: string) => {
return await request.download({ url: `/tblist/ecganalysisparas/export-workload-excel?doctorName=${doctorName}&startTime=${startTime}&endTime=${endTime} ` })
},
// 获取心电分析数据对应的pdf图像
getEcgPdfImage: async (data: any) => {
return await request.post({ url: `/tblist/ecganalysisparas/getEcgPdfImage`, data })
},
// 调用打印服务生成pdf
SaveEcgPdf: async (data: EcganalysisparasVO) => {
return await request.put({ url: `/tblist/ecganalysisparas/SaveEcgPdf`, data })
},
getDoctorBydoctorID: async (doctorID: any) => {
return await request.get({ url: `/doctor/getBydoctorID?doctorID=` + doctorID })
}
}

View File

@ -8,6 +8,11 @@
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
@close="
() => {
isChildVisible = false
}
"
>
<div class="mycontainer">
<div class="myleft-box">
@ -28,22 +33,20 @@
<!--头部 功能按钮-->
<el-header style="height: 40px; padding: 0px">
<el-button-group class="ml-4" style="margin-top: 4px; margin-left: 0px">
<el-popover
placement="bottom"
:width="250"
trigger="click"
:disabled="isshare"
>
<div style="display: flex; flex-direction: column; align-items: center;">
<el-popover placement="bottom" :width="250" trigger="click" :disabled="isshare">
<div style="display: flex; flex-direction: column; align-items: center">
<canvas ref="qrcodeRef" width="200" height="200"></canvas>
<el-button
type="primary"
style="margin-top: 10px; width: 120px;"
<el-button
type="primary"
style="margin-top: 10px; width: 120px"
@click="touchCopy"
>复制链接</el-button>
>复制链接</el-button
>
</div>
<template #reference>
<el-button type="primary" plain :icon="Share" @click="shareclick()">分享</el-button>
<el-button type="primary" plain :icon="Share" @click="shareclick()"
>分享</el-button
>
</template>
</el-popover>
<el-button
@ -490,9 +493,8 @@
:fullscreen="true"
append-to-body
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
@close="printclose"
@closed="printclose"
>
<template #title>
<div
@ -501,7 +503,7 @@
text-align: center;
font-family: Arial, sans-serif;
color: #6e6666;
font-size: 22px;
font-size: 24px;
"
>
打印预览
@ -509,15 +511,22 @@
</template>
<div>
<div style="text-align: right">
<el-button type="primary" style="width: 90px" v-print="{ id: 'printMe_ecg' }">
<el-button
v-if="false"
type="primary"
style="width: 90px"
v-print="{ id: 'printMe_ecg' }"
:loading="!imagebase64_new"
>
<span>打印</span>
</el-button>
</div>
<el-divider style="margin-top: 8px; margin-bottom: 10px" />
<el-divider style="margin-top: 8px; margin-bottom: 1px" />
</div>
<div id="printMe_ecg">
<div class="page-item-ecg">
<ReportInfoECG
v-if="false"
style="height: 99.888%"
:extraInfo="queryParams"
:jsonurl="queryParams.ecgJsonDataFilePath"
@ -531,6 +540,36 @@
:pname="rowinfo.pname"
:gender="rowinfo.gender"
/>
<el-image
v-if="false"
alt=""
fit="fill"
loading="eager"
:style="{
width: '100%',
imageRendering: 'high-quality',
minHeight: imagebase64_new ? '0' : '68vh'
}"
:src="imagebase64_new"
crossorigin="anonymous"
v-loading="!imagebase64_new"
>
<template #error>
<div style="text-align: center; font-size: 20px; margin-top: 6vh">加载中...</div>
</template>
</el-image>
<div v-loading="!imagebase64_new" element-loading-text="加载中...">
<iframe
v-if="true"
id="pdf_view"
name="pdf_view"
:src="imagebase64_new ? imagebase64_new + '#view=Fit&navpanes=0' : 'about:blank'"
frameborder="0"
class="pdf_view"
width="100%"
height="960px"
></iframe>
</div>
</div>
</div>
</el-dialog>
@ -580,8 +619,8 @@ import ECGReport from '@/views/ECG/ECGWaring/ECGReport.vue'
import { WarningApi, WarningVO } from '@/api/system/warning'
import ECGCopmareDialog from '@/views/ECG/ECGCompare.vue'
import ECGApplyforRepair from '@/views/ECG/ECGModify/ECGApplyforRepair.vue'
import useClipboard from "vue-clipboard3";//
const { toClipboard } = useClipboard();
import useClipboard from 'vue-clipboard3' //
const { toClipboard } = useClipboard()
import ECGSB from '@/views/ECG/ECGSB.vue'
/** 提交表单 */
const emit = defineEmits(['success']) // success
@ -591,7 +630,7 @@ const dialogTitle = ref('') // 弹窗的标题
const id = ref() //ID
const orgid = ref() //
const Primarykey = ref() //ID
const rowinfo = ref() //
const rowinfo = ref<any>({}) //
const snapshotTime = ref() //
//
const isChildVisible = ref(false)
@ -616,6 +655,7 @@ const isshare = ref(true) //是否展示分享二维码
const qrcodeRef = ref(null)
const isdiagshow = ref(false) //
const imagebase64 = ref('')
const imagebase64_new = ref<any>('')
const isprintimage = ref(false) //base64
const ECGDialog = ref() //
const isshowwjz = ref(false)
@ -672,7 +712,7 @@ const open = async (row: any) => {
const warningdata = await WarningApi.getexmidororgiddata(row.examId, row.orgId)
//
isshowwjz.value = Profilevo.value.orgId === row.highLevelOrgId ? true : false
if (warningdata.reportDate) {
if (warningdata && warningdata.reportDate) {
isshowysb.value = Profilevo.value.orgId === row.orgId ? true : false
}
//
@ -841,17 +881,74 @@ function resetForm() {
function printclose() {
isprintimage.value = false
imagebase64.value = ''
imagebase64_new.value = ''
isdiagshow.value = false
}
//
function print() {
if (!queryParams.value.autoDiagTime) {
isdiagshow.value = false
//isprintimage.value = false
//isprintimage.value = false
isdiagshow.value = false
if (false && !queryParams.value.autoDiagTime) {
message.alertError('请保存后再进行打印')
} else if (rowinfo.value && rowinfo.value.reportstatus != '已审核') {
message.alertError('请审核后再进行打印')
} else {
isdiagshow.value = true
//isprintimage.value = true
isdiagshow.value = true
nextTick(() => {
setTimeout(async () => {
if (applyFormVO.value.pdfurl) {
imagebase64_new.value = applyFormVO.value.pdfurl.trim()
} else {
let doctorEcgDiagInfo: any = null
if (queryParams.value && queryParams.value.doctorId) {
doctorEcgDiagInfo = await EcganalysisparasApi.getDoctorBydoctorID(
queryParams.value.doctorId.trim()
)
}
let mapRes = await EcganalysisparasApi.getEcgPdfImage({
type: 2,
regid: id.value,
examid: queryParams.value.examId,
name: rowinfo.value.pname,
gender: rowinfo.value.gender,
age: age.value,
ward: '',
hr: queryParams.value.hr,
pr: queryParams.value.pr,
qrs: queryParams.value.qrsAxle,
qtqtc: queryParams.value.qt + '/' + queryParams.value.qtc,
rv5sv1: queryParams.value.rv5 + '/' + queryParams.value.sv1,
rv5sv1plus: (
Number(queryParams.value.rv5 ? queryParams.value.rv5 : '') +
Number(queryParams.value.sv1 ? queryParams.value.sv1 : '')
).toString(),
pt:
queryParams.value.paxle +
'/' +
queryParams.value.taxle +
'/' +
queryParams.value.qrsAxle,
ptimelimit: queryParams.value.ptimeLimit,
diagnosisHint: '',
department: rowinfo.value.billDoctorDepartment,
doctorDiagTime: formatDate(
queryParams.value.doctorDiagTime as any,
'YYYY-MM-DD HH:mm:ss'
),
diagContent: queryParams.value.doctorDiagResult,
DepartName: queryParams.value.departName,
doctorName: queryParams.value.doctorName,
image: doctorEcgDiagInfo ? doctorEcgDiagInfo.esignatureUrl : '',
filepath: queryParams.value.ecgJsonDataFilePath,
orgname: rowinfo.value.orgName
})
if (mapRes && mapRes.code == '200') {
imagebase64_new.value = mapRes.dataImage
}
}
}, 100)
})
}
}
//
@ -891,7 +988,7 @@ function Refresh() {
isrefresh.value = isrefresh.value ? false : true
}
//
function touchCopy () {
function touchCopy() {
//
if (applyFormVO.value.pdfurl) {
toClipboard(applyFormVO.value.pdfurl)
@ -966,7 +1063,7 @@ function FD() {
const value = IsFD.value === false ? true : false
IsFD.value = value
if (value) {
message.alertSuccess('开启放大')
message.alertSuccess('开启放大')
} else {
message.alertSuccess('关闭放大')
}
@ -1088,9 +1185,9 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/* 打印(报告单) */
.page-item-ecg {
padding: 1mm 0.8mm 1mm 0.6mm;
max-width: 1184px;
margin: 3vh auto 0 auto;
padding: 1mm 1mm 0.12mm 1mm;
max-width: 1200px;
margin: 1.2vh auto 0 auto;
border: 2px solid #ccc;
border-radius: 8px;
}
@ -1110,12 +1207,12 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
.page-item-ecg {
border-width: 0;
height: 206mm;
height: 204.6mm;
page-break-after: always;
padding: 0;
max-width: none;
width: calc(100% - 3mm);
margin: 0 0 0 1.2mm;
width: calc(100% - 2mm);
margin: 1.4mm 0 0 1mm;
}
}
</style>

View File

@ -119,7 +119,7 @@
:formatter="dateFormatter2"
width="110px"
/>
<el-table-column label="患者姓名" align="center" prop="pname" width="130px" />
<el-table-column label="患者姓名" align="center" prop="pName" width="130px" />
<el-table-column label="性别" align="center" prop="gender" width="54px" />
<el-table-column
label="出生日期"
@ -240,7 +240,7 @@ const infoParams = ref({
examId: '',
regId: '',
orgId: '',
pname: '',
pName: '',
gender: '',
birthday: '',
billDoctorDepartment: '',
@ -286,7 +286,7 @@ const resetDiagnosisInfo = async () => {
examId: '',
regId: '',
orgId: '',
pname: '',
pName: '',
gender: '',
birthday: '',
billDoctorDepartment: '',

View File

@ -11,14 +11,31 @@
class="-mb-15px"
>
<el-row>
<el-col :span="8">
<el-form-item label="审核状态" prop="processstats" class="item-style">
<el-radio-group v-model="queryParams.processstats" class="item-width radio-group">
<el-radio value="" style="margin-left: 12px; margin-right: 18px"> 全部 </el-radio>
<el-radio value="0" style="margin-right: 18px"> 申请 </el-radio>
<el-radio value="1" style="margin-right: 6px"> 审核 </el-radio>
<el-radio value="2" style="margin-left: 12px; margin-right: 4px"> 拒绝 </el-radio>
</el-radio-group>
<el-col :span="5">
<el-form-item label="申请日期" prop="applyDateTime_ge" class="item-style date-picker">
<el-date-picker
v-model="queryParams.applyDateTime_ge"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="开始日期"
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item
label=""
label-width="0px"
prop="applyDateTime_le"
class="item-style date-picker"
>
<el-date-picker
v-model="queryParams.applyDateTime_le"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="结束日期"
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="5">
@ -48,31 +65,22 @@
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="申请日期" prop="applyDateTime_ge" class="item-style date-picker">
<el-date-picker
v-model="queryParams.applyDateTime_ge"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="开始日期"
class="item-width"
/>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item
label=""
label-width="0px"
prop="applyDateTime_le"
class="item-style date-picker"
>
<el-date-picker
v-model="queryParams.applyDateTime_le"
type="date"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="结束日期"
class="item-width"
/>
<el-col :span="8">
<el-form-item label="审核状态" prop="processstats" class="item-style">
<el-radio-group
v-model="queryParams.processstats"
@change="
() => {
handleQuery()
}
"
class="item-width radio-group"
>
<el-radio value="" style="margin-left: 12px; margin-right: 18px"> 全部 </el-radio>
<el-radio value="0" style="margin-right: 18px"> 申请 </el-radio>
<el-radio value="1" style="margin-right: 6px"> 审核 </el-radio>
<el-radio value="2" style="margin-left: 12px; margin-right: 4px"> 拒绝 </el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
@ -83,6 +91,7 @@
v-model="queryParams.regId"
placeholder="请输入登记号"
clearable
@keyup.enter="handleQuery"
class="item-width"
/>
</el-form-item>
@ -93,6 +102,7 @@
v-model="queryParams.pname"
placeholder="请输入患者姓名"
clearable
@keyup.enter="handleQuery"
class="item-width"
/>
</el-form-item>
@ -136,15 +146,6 @@
<el-table-column label="检查号" align="center" prop="examId" width="240px" />
<el-table-column label="患者姓名" align="center" prop="pname" width="130px" />
<el-table-column label="机构" align="center" prop="orgId_name" min-width="260px" />
<el-table-column
label="审核时间"
align="center"
prop="processDate"
:formatter="dateFormatter2"
width="150px"
/>
<el-table-column label="审核医生" align="center" prop="processDoctor" width="130px" />
<el-table-column label="审核机构" align="center" prop="processorgName" width="260px" />
<el-table-column
label="申请时间"
align="center"
@ -154,6 +155,15 @@
/>
<el-table-column label="申请医生" align="center" prop="applyDoctor" min-width="130px" />
<el-table-column label="申请原因" align="center" prop="processContent" min-width="280px" />
<el-table-column
label="审核时间"
align="center"
prop="processDate"
:formatter="dateFormatter2"
width="150px"
/>
<el-table-column label="审核医生" align="center" prop="processDoctor" width="130px" />
<el-table-column label="审核机构" align="center" prop="processorgName" width="260px" />
<el-table-column label="拒绝原因" align="center" prop="refuseremark" min-width="280px" />
<el-table-column label="备注" align="center" prop="remark" min-width="280px" />
<el-table-column
@ -166,7 +176,7 @@
<template #default="scope">
<el-tag v-if="scope.row.processstats == '0'" effect="plain">申请</el-tag>
<el-tag v-else-if="scope.row.processstats == '1'" effect="plain" type="success"
>审核</el-tag
>通过</el-tag
>
<el-tag v-else-if="scope.row.processstats == '2'" effect="plain" type="danger"
>拒绝</el-tag