This commit is contained in:
Euni4U 2025-01-03 16:36:57 +08:00
commit dbacfdaa16
6 changed files with 372 additions and 186 deletions

View File

@ -19,8 +19,10 @@
<div class="myleft-box">
<el-container>
<!--头部 患者信息-->
<el-header style="background-color: rgb(79, 138, 240); height: 40px">
<div style="font-size: 20px; color: aliceblue; margin-top: 5px">
<el-header
style="background-color: rgb(79, 138, 240); border-radius: 8px 0 0 0; height: 40px"
>
<div style="font-size: 20px; color: aliceblue; margin-top: 6px; margin-left: -10px">
<span>{{ rowinfo.pname }}</span>
<span style="margin-left: 10px"> {{ rowinfo.gender }}</span>
<span style="margin-left: 10px"> {{ age + '岁' }}</span>
@ -32,7 +34,7 @@
</div>
</el-header>
<!--头部 功能按钮-->
<el-header style="height: 40px; padding: 0px">
<el-header style="height: 40px; padding: 0px; margin: 2px 5.2px">
<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">
@ -218,7 +220,14 @@
id="elform"
:model="queryParams"
label-width="63.4px"
style="max-width: 600px; margin-top: 10px; margin-left: 10px; height: 89vh"
style="
max-width: 600px;
margin-top: 6px;
margin-left: 5px;
margin-right: 5px;
margin-bottom: 9px;
min-height: 88vh;
"
>
<!-- 第一行 -->
<el-row style="margin-right: 1px; height: 35px">
@ -331,7 +340,7 @@
</el-row>
<!-- 第六行 -->
<el-row style="margin-right: 1px; height: 35px">
<el-row style="margin-right: 1px; margin-bottom: 5.2px; height: 35px">
<el-col :span="12" class="-ml-1px pr-9px">
<el-form-item label="SV1">
<el-input v-model="queryParams.sv1" class="w-100%">
@ -352,8 +361,11 @@
</el-col>
</el-row>
<el-tag type="info" style="font-size: 16px; width: 100%; color: black">
心电事件快照
<el-tag
type="info"
style="justify-content: left; font-size: 16px; width: 100%; color: black"
>
<span class="ml-2px">心电事件快照</span>
</el-tag>
<el-input
v-model="snapshotTime"
@ -362,7 +374,12 @@
type="textarea"
placeholder=""
/>
<el-tag type="info" style="font-size: 16px; width: 100%; color: black"> 智能词库 </el-tag>
<el-tag
type="info"
style="justify-content: left; font-size: 16px; width: 100%; color: black"
>
<span class="ml-2px">智能词库</span>
</el-tag>
<el-input
v-model="queryParams.autoDiagResult"
style="width: 100%"
@ -370,9 +387,14 @@
type="textarea"
placeholder=""
/>
<el-tag type="info" style="font-size: 16px; width: 100%; color: black">
医生诊断结论
<el-button @click="zdmodle" type="primary" text> 诊断模版 </el-button>
<el-tag
type="info"
style="justify-content: left; font-size: 16px; width: 100%; color: black"
>
<span class="ml-2px">
<span style="vertical-align: middle">医生诊断结论</span>
<el-button @click="zdmodle" type="text" class="ml-18px">诊断模版</el-button>
</span>
</el-tag>
<el-input
class="your-component"
@ -441,23 +463,32 @@
</div>
</el-dialog>
<el-drawer v-model="drawer" :with-header="false" :modal="true" size="20%">
<el-drawer v-model="drawer" :with-header="false" :modal="true" size="23.02%">
<div style="position: relative; z-index: 100">
<el-button link @click="drawer = false" style="position: absolute; top: -6px; right: -2px">
<Icon icon="ep:close" />
</el-button>
</div>
<span>诊断数据模版</span>
<el-tree
style="padding-top: 15px; padding-bottom: 20px; min-width: 195px; font-size: 20px"
class="treeStyle"
:check-on-click-node="true"
:highlight-current="true"
:default-expand-all="true"
:data="treeData"
:props="treeDefaultProps"
node-key="id"
:show-checkbox="false"
:check-strictly="true"
@check="handleTreeNodeClick"
ref="selectTree"
:expand-on-click-node="false"
/>
<div class="h-90.78vh">
<el-scrollbar>
<el-tree
style="padding-top: 15px; padding-bottom: 20px; min-width: 195px; font-size: 20px"
class="treeStyle"
:check-on-click-node="true"
:highlight-current="true"
:default-expand-all="true"
:data="treeData"
:props="treeDefaultProps"
node-key="id"
:show-checkbox="false"
:check-strictly="true"
@check="handleTreeNodeClick"
ref="selectTree"
:expand-on-click-node="false"
/>
</el-scrollbar>
</div>
</el-drawer>
<el-dialog
@ -636,6 +667,7 @@ import ECGCopmareDialog from '@/views/ECG/ECGCompare.vue'
import ECGApplyforRepair from '@/views/ECG/ECGModify/ECGApplyforRepair.vue'
import useClipboard from 'vue-clipboard3' //
import ECGSB from '@/views/ECG/ECGSB.vue'
import { ElLoading } from 'element-plus'
const { toClipboard } = useClipboard()
const emit = defineEmits(['success']) // success
@ -872,12 +904,14 @@ const save = async () => {
saveFormVO.value.ecgJsonDataFilePath = queryParams.value.ecgJsonDataFilePath
if (
queryParams.value.ecgJsonDataFilePath &&
!(queryParams.value.ecgJsonDataFilePath.toUpperCase().endsWith('.BMP') ||
!(
queryParams.value.ecgJsonDataFilePath.toUpperCase().endsWith('.BMP') ||
queryParams.value.ecgJsonDataFilePath.toUpperCase().endsWith('.JPG') ||
queryParams.value.ecgJsonDataFilePath.toUpperCase().endsWith('.PNG'))
queryParams.value.ecgJsonDataFilePath.toUpperCase().endsWith('.PNG')
)
) {
await EcganalysisparasApi.SaveEcgPdf(saveFormVO.value)
}
}
//
await getPatientexamlist(keyid.value)
loading.close()
@ -1211,7 +1245,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
.mycontainer {
display: flex;
width: 100%;
height: 90vh;
min-height: 90vh;
}
.myleft-box {
@ -1219,7 +1253,8 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
border-style: solid; /* 设置边框样式为实线 */
border-width: 1px; /* 设置边框宽度为2像素 */
border-color: #cccccc; /* 设置边框颜色为黑色 */
height: 90vh;
border-radius: 8px 0 0 8px;
min-height: 90vh;
}
.myright-box {
@ -1227,8 +1262,9 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
border-style: solid solid solid; /* 上、右、下边框为实线 */
border-width: 1px; /* 设置边框宽度为1像素 */
border-color: #cccccc; /* 设置边框颜色为灰色 */
height: 90vh;
border-left-style: none; /* 移除左边边框 */
border-radius: 0 8px 8px 0;
min-height: 90vh;
}
.mybutwidth {
margin-left: 10px;

View File

@ -1,45 +1,50 @@
<template>
<el-dialog
v-model="dialogVisible"
<el-dialog
v-model="dialogVisible"
title="申请返修"
width="720px"
width="720px"
:modal="false"
:close-on-press-escape="false"
:close-on-click-modal="false"
:draggable="true"
top="22.4vh"
style="height: 490px"
>
>
<div class="ApplyforRepair">
<!-- 患者基础信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;" >患者基础信息</span></div>
<el-form label-width="80px">
<el-row :gutter="24">
<el-col :span="9">
<el-form-item label="检查日期:" label-width="80">
<div class="section-title"><span style="margin-left: 5px">患者基础信息</span></div>
<el-form label-position="right" label-width="80px">
<el-row>
<el-col :span="10">
<el-form-item label="检查日期:">
<el-input
style="width: 160px"
style="width: 100%"
:value="formatDate(rowinfo.examDate, 'YYYY-MM-DD')"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="姓名:" label-width="60">
<el-input :value="rowinfo.pname" style="width: 100px" disabled />
<el-form-item label="姓名:">
<el-input :value="rowinfo.pname" style="width: 100%" disabled />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="性别:" label-width="50">
<el-input :value="rowinfo.gender" style="width: 100px" disabled />
<el-form-item label="性别:">
<el-input :value="rowinfo.gender" style="width: 100%" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-row>
<el-col :span="10">
<el-form-item label="检查编号:">
<el-input :value="rowinfo.examId" style="width: 140px" disabled />
<el-input :value="rowinfo.examId" style="width: 100%" disabled />
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="检查机构:" label-width="30">
<el-input :value="rowinfo.orgName" style="width: 180px" disabled />
<el-form-item label="检查机构:">
<el-input :value="rowinfo.orgName" style="width: 100%" disabled />
</el-form-item>
</el-col>
</el-row>
@ -47,39 +52,39 @@
</div>
<!-- 申请返修信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;">申请返修信息</span></div>
<div class="section-title"><span style="margin-left: 5px">申请返修信息</span></div>
<el-form label-width="100px" :model="formData" :rules="rules" ref="formRef">
<el-row :gutter="20">
<el-col :span="12">
<el-row>
<el-col :span="11">
<el-form-item label="申请医生:" prop="applyDoctor">
<el-input v-model="formData.applyDoctor" style="width: 180px" />
<el-input v-model="formData.applyDoctor" style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :offset="2" :span="11">
<el-form-item label="申请时间:" prop="applyDateTime">
<el-date-picker
v-model="formData.applyDateTime"
type="datetime"
placeholder="请选择申请时间"
style="width: 180px"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="申请原因:" prop="processContent">
<el-input
v-model="formData.processContent"
type="textarea"
<el-input
v-model="formData.processContent"
type="textarea"
rows="4"
placeholder="请输入申请原因"
/>
</el-form-item>
</el-form>
</div>
<el-form-item>
<div style="text-align: right">
<el-button type="primary" @click="save" :disabled="issaveshow">确认</el-button>
<el-button @click="() => (dialogVisible = false)">取消</el-button>
</el-form-item>
</div>
</div>
</el-dialog>
</template>
@ -87,7 +92,7 @@
<script setup lang="ts">
import { ref } from 'vue'
import { formatDate } from '@/utils/formatTime'
import { ProcessManageApi,ProcessManageVO } from '@/api/ECG/processManage'
import { ProcessManageApi, ProcessManageVO } from '@/api/ECG/processManage'
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
@ -108,19 +113,15 @@ const formData = ref({
applyDoctor: '',
applyDateTime: '',
remark: '',
processstats:'',
processstats: '',
refuseremark: '',
pname: '',
reviewStatus:''
reviewStatus: ''
})
const formRef = ref()
const rules = {
applyDateTime: [
{ required: true, message: '请选择申请时间', trigger: 'change' }
],
processContent: [
{ required: true, message: '请输入申请原因', trigger: 'blur' }
]
applyDateTime: [{ required: true, message: '请选择申请时间', trigger: 'change' }],
processContent: [{ required: true, message: '请输入申请原因', trigger: 'blur' }]
}
const resetForm = () => {
@ -138,33 +139,38 @@ const resetForm = () => {
applyDoctor: '',
applyDateTime: '',
remark: '',
processstats:'',
processstats: '',
refuseremark: '',
pname: '',
reviewStatus:''
reviewStatus: ''
}
}
const opendiag = async (type: string, row: any, orgId: string, doctorname: string,id:string,reviewStatus:string) => {
const opendiag = async (
type: string,
row: any,
orgId: string,
doctorname: string,
id: string,
reviewStatus: string
) => {
resetForm()
const data = await ProcessManageApi.getPage({
examId: row.examId
})
// processstats === 0
if (data?.list?.[0]?.processstats === 0) {
dialogVisible.value = false
message.alertError('已申请')
return
}
if(reviewStatus !== '已审核'){
if (reviewStatus !== '已审核') {
dialogVisible.value = false
message.alertError('未审核无法进行申请返修')
return
}
rowinfo.value = row
//
formData.value.examId = row.examId
@ -175,18 +181,16 @@ const opendiag = async (type: string, row: any, orgId: string, doctorname: strin
formData.value.userId = id
formData.value.reviewStatus = reviewStatus
dialogTitle.value = t('action.' + type)
if(data?.list?.[0]?.processstats === 0){
if (data?.list?.[0]?.processstats === 0) {
dialogVisible.value = false
message.alertError('已申请')
return
}
else{
} else {
dialogVisible.value = true
}
}
async function save() {
if (!formRef.value)
return
if (!formRef.value) return
await formRef.value.validate((valid: boolean) => {
if (valid) {
formData.value.id = rowinfo.value.id
@ -196,7 +200,7 @@ async function save() {
formData.value.orgId = formData.value.orgId
formData.value.applyDoctor = formData.value.applyDoctor
formData.value.pname = rowinfo.value.pname
formData.value.applyDateTime = formData.value.applyDateTime
formData.value.applyDateTime = formData.value.applyDateTime
? formData.value.applyDateTime.toLocaleString().replace(/\//g, '-')
: new Date().toLocaleString().replace(/\//g, '-')
const savedata = formData.value as unknown as ProcessManageVO
@ -215,7 +219,6 @@ async function save() {
defineExpose({ opendiag }) // open
const emit = defineEmits(['success']) // success
defineOptions({ name: 'ECGApplyforRepair' })
</script>
<style lang="css" scoped>
.ApplyforRepair {

View File

@ -33,65 +33,149 @@ const zoomedPosition = reactive({
//
function drawMagnifiedArea(x, y, container) {
if (!magnifierCanvas.value) return
const ctx = magnifierCanvas.value.getContext('2d', { willReadFrequently: true })
const container1 = document.querySelector('#canvas-container')
const container2 = document.querySelector('#canvas-container1')
const rect1 = container1.getBoundingClientRect()
const rect2 = container2.getBoundingClientRect()
//
const transitionZone = 20 //
const isInTransition = Math.abs(x - rect2.left) < transitionZone
ctx.clearRect(0, 0, 300, 200)
ctx.imageSmoothingEnabled = true
ctx.imageSmoothingQuality = 'high'
if (isInTransition) {
//
const weight2 = (x - (rect2.left - transitionZone)) / (transitionZone * 2)
const weight1 = 1 - weight2
//
drawContainerContent(ctx, container1, x, y, rect1, weight1)
//
drawContainerContent(ctx, container2, x, y, rect2, weight2)
if (false) {
if (isInTransition) {
//
const weight2 = (x - (rect2.left - transitionZone)) / (transitionZone * 2)
const weight1 = 1 - weight2
//
drawContainerContent(ctx, container1, x, y, rect1, weight1)
//
drawContainerContent(ctx, container2, x, y, rect2, weight2)
} else {
//
const currentContainer = x < rect2.left ? container1 : container2
const currentRect = x < rect2.left ? rect1 : rect2
drawContainerContent(ctx, currentContainer, x, y, currentRect, 1)
}
} else {
//
const currentContainer = x < rect2.left ? container1 : container2
const currentRect = x < rect2.left ? rect1 : rect2
drawContainerContent(ctx, currentContainer, x, y, currentRect, 1)
drawContainerContent(ctx, container1, x, y, rect1, 1)
drawContainerContent(ctx, container2, x, y, rect2, 1)
}
}
//
function drawContainerContent(ctx, container, x, y, rect, alpha) {
function drawContainerContent_old(ctx, container, x, y, rect, alpha) {
if (alpha === 0) return
ctx.globalAlpha = alpha
const layers = [
container.querySelector('#bottomCanvas, #bottomCanvas1'),
container.querySelector('#leftCanvas, #rightCanvas'),
container.querySelector('#topCanvas, #topCanvas1')
].filter(canvas => canvas)
layers.forEach(canvas => {
].filter((canvas) => canvas)
layers.forEach((canvas) => {
const canvasRect = canvas.getBoundingClientRect()
const canvasX = x - canvasRect.left
const canvasY = y - canvasRect.top
ctx.drawImage(
canvas,
canvasX - 75,
canvasY - 50,
150,
100,
0,
0,
300,
200
)
ctx.drawImage(canvas, canvasX - 75, canvasY - 50, 150, 100, 0, 0, 300, 200)
})
ctx.globalAlpha = 1
}
function drawContainerContent(ctx, container, x, y, rect, alpha) {
if (alpha === 0) return
ctx.globalAlpha = alpha
const layers = [
container.querySelector('#bottomCanvas, #bottomCanvas1'),
container.querySelector('#leftCanvas, #rightCanvas'),
container.querySelector('#topCanvas, #topCanvas1')
].filter((canvas) => canvas)
layers.forEach((canvas) => {
const canvasRect = canvas.getBoundingClientRect()
const canvasX = x - canvasRect.left
const canvasY = y - canvasRect.top
const canvasY_max = y + 50 >= rect.bottom ? rect.bottom : y + 50
if (['topCanvas', 'topCanvas1'].includes(canvas.id)) {
const leftCanvas = container.querySelector('#leftCanvas, #rightCanvas')
if (canvasRect.right > leftCanvas.getBoundingClientRect().right) {
let borderLeft =
x - leftCanvas.getBoundingClientRect().right > 75
? x - 75
: leftCanvas.getBoundingClientRect().right
let borderLeft_span =
x <= leftCanvas.getBoundingClientRect().right
? 75 + leftCanvas.getBoundingClientRect().right - x
: x - leftCanvas.getBoundingClientRect().right >= 75
? 0
: 75 - x + leftCanvas.getBoundingClientRect().right
let canvasRectRight_effective =
rect.right > canvasRect.right ? canvasRect.right : rect.right
if (
borderLeft_span < 150 &&
borderLeft >= leftCanvas.getBoundingClientRect().right &&
borderLeft <= canvasRectRight_effective
) {
let borderRight =
borderLeft_span > 75
? leftCanvas.getBoundingClientRect().right + 150 - borderLeft_span
: x + 75
if (borderRight >= canvasRectRight_effective) borderRight = canvasRectRight_effective
let swidth = borderRight - borderLeft
ctx.drawImage(
canvas,
borderLeft - canvasRect.left,
canvasY - 50,
swidth,
canvasY_max - (y - 50),
borderLeft_span * 2,
0,
swidth * 2,
(canvasY_max - (y - 50)) * 2
)
}
}
} else if (['bottomCanvas', 'bottomCanvas1'].includes(canvas.id)) {
const leftCanvas = container.querySelector('#leftCanvas, #rightCanvas')
let canvasRectRight_effective = rect.right > canvasRect.right ? canvasRect.right : rect.right
if (x + 75 > leftCanvas.getBoundingClientRect().right && x - 75 < canvasRectRight_effective) {
let swidth = x + 75 <= canvasRectRight_effective ? 150 : 75 + canvasRectRight_effective - x
ctx.drawImage(
canvas,
canvasX - 75,
canvasY - 50,
swidth,
canvasY_max - (y - 50),
0,
0,
swidth * 2,
(canvasY_max - (y - 50)) * 2
)
}
} else {
ctx.drawImage(
canvas,
canvasX - 75,
canvasY - 50,
150,
canvasY_max - (y - 50),
0,
0,
300,
(canvasY_max - (y - 50)) * 2
)
}
})
ctx.globalAlpha = 1
}
@ -99,25 +183,31 @@ function drawContainerContent(ctx, container, x, y, rect, alpha) {
//
function handleMouseMove(e) {
if (!isZoomed.value) return
const container1 = document.querySelector('#canvas-container')
const container2 = document.querySelector('#canvas-container1')
const rect1 = container1.getBoundingClientRect()
const rect2 = container2.getBoundingClientRect()
//
const isInContainer1 = e.clientX >= rect1.left && e.clientX <= rect1.right &&
e.clientY >= rect1.top && e.clientY <= rect1.bottom
const isInContainer2 = e.clientX >= rect2.left && e.clientX <= rect2.right &&
e.clientY >= rect2.top && e.clientY <= rect2.bottom
const isInContainer1 =
e.clientX >= rect1.left &&
e.clientX <= rect1.right &&
e.clientY >= rect1.top &&
e.clientY <= rect1.bottom
const isInContainer2 =
e.clientX >= rect2.left &&
e.clientX <= rect2.right &&
e.clientY >= rect2.top &&
e.clientY <= rect2.bottom
if (!isInContainer1 && !isInContainer2) {
isZoomed.value = false
document.removeEventListener('mousemove', handleMouseMove)
return
}
zoomedPosition.x = e.clientX
zoomedPosition.y = e.clientY
@ -130,22 +220,27 @@ function handleMouseMove(e) {
function handleMouseDown(e) {
const container = e.target.closest('#canvas-container, #canvas-container1')
if (!container || e.button !== 0) return
const rect = container.getBoundingClientRect()
const isInContainer = e.clientX >= rect.left && e.clientX <= rect.right &&
e.clientY >= rect.top && e.clientY <= rect.bottom
const isInContainer =
e.clientX >= rect.left &&
e.clientX <= rect.right &&
e.clientY >= rect.top &&
e.clientY <= rect.bottom
if (!isInContainer) return
if (isZoomed.value) {
isZoomed.value = false
document.removeEventListener('mousemove', handleMouseMove)
} else {
isZoomed.value = true
zoomedPosition.x = e.clientX
zoomedPosition.y = e.clientY
drawMagnifiedArea(e.clientX, e.clientY, container)
document.addEventListener('mousemove', handleMouseMove)
nextTick(() => {
zoomedPosition.x = e.clientX
zoomedPosition.y = e.clientY
drawMagnifiedArea(e.clientX, e.clientY, container)
document.addEventListener('mousemove', handleMouseMove)
})
}
}

View File

@ -1,5 +1,15 @@
<template>
<el-dialog v-model="dialogVisible" title="危急值上报详情" width="1000px" style="height: 720px">
<el-dialog
v-model="dialogVisible"
title="危急值上报详情"
width="1000px"
:modal="false"
:close-on-press-escape="false"
:close-on-click-modal="false"
:draggable="true"
top="30vh"
style="height: 720px"
>
<div class="modal">
<div class="modal-content">
<div class="left-side">
@ -11,7 +21,7 @@
type="primary"
:hollow="true"
>
<span style="font-size: 18px;">危急值上报</span>
<span style="font-size: 18px">危急值上报</span>
</el-timeline-item>
<el-timeline-item
:timestamp="new Date(conreadDateTime).toLocaleString().replace(/\//g, '-')"
@ -19,7 +29,7 @@
type="primary"
:hollow="true"
>
<span style="font-size: 18px;">检查端收到提醒</span>
<span style="font-size: 18px">检查端收到提醒</span>
</el-timeline-item>
<el-timeline-item
:timestamp="formData.checkDateTime"
@ -28,7 +38,7 @@
:hollow="true"
v-if="isshowwjztime"
>
<span style="font-size: 18px;">检查端确认危急值</span>
<span style="font-size: 18px">检查端确认危急值</span>
</el-timeline-item>
<el-timeline-item
:timestamp="formData.checkDateTime"
@ -37,14 +47,14 @@
:hollow="true"
v-if="isshowwjztime"
>
<span style="font-size: 18px;">检查端发送确认回执</span>
<span style="font-size: 18px">检查端发送确认回执</span>
</el-timeline-item>
</el-timeline>
</div>
<div class="right-side">
<!-- 基础信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;" >基础信息</span></div>
<div class="section-title"><span style="margin-left: 5px">基础信息</span></div>
<el-form label-width="80px">
<el-row :gutter="24">
<el-col :span="9">
@ -84,7 +94,7 @@
<!-- 上报信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;" >上报信息</span></div>
<div class="section-title"><span style="margin-left: 5px">上报信息</span></div>
<el-form label-width="80px">
<el-row :gutter="24">
<el-col :span="9">
@ -108,17 +118,27 @@
</el-col>
</el-row>
<el-form-item label="危急值内容:" label-width="100px">
<el-input v-model="warintinfo.warningContent" type="textarea" rows="3" :readonly="isreadonly"/>
<el-input
v-model="warintinfo.warningContent"
type="textarea"
rows="3"
:readonly="isreadonly"
/>
</el-form-item>
<el-form-item label="备注:" label-width="100px">
<el-input v-model="warintinfo.remark" type="textarea" rows="2" :readonly="isreadonly"/>
<el-input
v-model="warintinfo.remark"
type="textarea"
rows="2"
:readonly="isreadonly"
/>
</el-form-item>
</el-form>
</div>
<!-- 处理信息 -->
<div class="info-section">
<div class="section-title"><span style="margin-left: 5px;" >处理信息</span></div>
<div class="section-title"><span style="margin-left: 5px">处理信息</span></div>
<el-form label-width="80px">
<el-row :gutter="24">
<el-col :span="7">
@ -128,7 +148,7 @@
</el-col>
<el-col :span="7">
<el-form-item label="处理医生:">
<el-input v-model="dealname" :readonly="isreadonly"/>
<el-input v-model="dealname" :readonly="isreadonly" />
</el-form-item>
</el-col>
<el-col :span="10">
@ -144,14 +164,20 @@
</el-col>
</el-row>
<el-form-item label="备注:">
<el-input v-model="warintinfo.readremark" type="textarea" rows="2" disabledz :readonly="isreadonly"/>
<el-input
v-model="warintinfo.readremark"
type="textarea"
rows="2"
disabledz
:readonly="isreadonly"
/>
</el-form-item>
</el-form>
</div>
<el-form-item>
<div style="text-align: right">
<el-button type="primary" @click="save" :disabled="issaveshow">确认</el-button>
<el-button @click="() => (dialogVisible = false)">取消</el-button>
</el-form-item>
</div>
</div>
</div>
</div>
@ -175,7 +201,7 @@ const issaveshow = ref(false) //是否显示保存按钮
const receivename = ref() //
const dealname = ref() //
const isshowwjztime = ref(false) //
const isreadonly=ref<any>(false)//
const isreadonly = ref<any>(false) //
const opendiag = async (row) => {
//
rowinfo.value = row
@ -204,7 +230,7 @@ const opendiag = async (row) => {
receivename.value = Profilevo.value.nickname
dealname.value = Profilevo.value.nickname
dialogVisible.value = true
isreadonly.value= issaveshow.value?true:false
isreadonly.value = issaveshow.value ? true : false
}
//
async function save() {
@ -217,16 +243,16 @@ async function save() {
if (data) {
isshowwjztime.value = true
issaveshow.value = true
await WarningApi.sendMessage('144',rowinfo.value.pname)
await WarningApi.sendMessage('144', rowinfo.value.pname)
message.alertSuccess('确认成功')
isreadonly.value=true
isreadonly.value = true
}
}
//
async function updatereadDateTime(id) {
conreadDateTime.value = new Date().toLocaleString().replace(/\//g, '-')
await WarningApi.updateWarningdate(id, conreadDateTime.value, '',rowinfo.value.orgId)
await WarningApi.updateWarningdate(id, conreadDateTime.value, '', rowinfo.value.orgId)
}
//
const getlogininfo = async () => {

View File

@ -3,10 +3,20 @@
v-model="dialogVisible"
title="危急值上报"
width="600"
:modal="false"
:close-on-press-escape="false"
:close-on-click-modal="false"
:draggable="true"
top="20vh"
style="height: 600px"
:before-close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="100px" v-loading="formLoading">
<el-form
ref="formRef"
:model="formData"
label-width="100px"
v-loading="formLoading"
class="-ml-14px"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="受检者" prop="pname">
@ -50,10 +60,10 @@
<el-form-item label="备注">
<el-input v-model="formData.remark" type="textarea" :rows="5" />
</el-form-item>
<el-form-item>
<div style="text-align: right">
<el-button type="primary" @click="report" :disabled="isreportshow">上报</el-button>
<el-button @click="() => (dialogVisible = false)">取消</el-button>
</el-form-item>
</div>
</el-form>
</el-dialog>
</template>
@ -102,7 +112,8 @@ const opendiag = async (type, row) => {
isreportshow.value = false
formData.value.receiveDoctor = rowinfo.value.applyhighLevelname
//
formData.value.reportDoctor = Profilevo.value.nickname
if (Profilevo.value.doctorname) formData.value.reportDoctor = Profilevo.value.doctorname
else formData.value.reportDoctor = Profilevo.value.nickname
}
formLoading.value = false

View File

@ -2,7 +2,7 @@
<div>
<!-- <button @click="moveCanvas('left')">左边-左移</button>
<button @click="moveCanvas('right')">左边-右移</button>-->
<sb :-isfd="FD"/>
<sb :-isfd="FD" />
<div class="container">
<div id="canvas-container">
<canvas ref="leftCanvas" id="leftCanvas" width="21" height="1140"></canvas>
@ -40,13 +40,22 @@
:step="1"
@input="handleSliderChange"
:show-tooltip="false"
style="margin-left: 30px; width: 96%;"
style="margin-left: 30px; width: 96%"
/>
</div>
</div>
<!--纠错功能-->
<el-dialog v-model="isdialog" title="导联纠错" width="600" @close="close">
<el-dialog
v-model="isdialog"
title="导联纠错"
width="600"
:modal="false"
:close-on-press-escape="false"
:close-on-click-modal="false"
top="28vh"
:draggable="true"
@close="close"
>
<div>
<el-checkbox-group v-model="transfer" :min="0" :max="2" class="mycheckbox-group">
<el-checkbox
@ -61,7 +70,7 @@
</el-checkbox>
</el-checkbox-group>
</div>
<div style="margin-top: 10px">
<div style="margin-top: 10px; text-align: right">
<el-button type="primary" @click="clickdl" :disabled="checkes">交换导联</el-button>
<el-button type="primary" @click="recovery()">恢复正常</el-button>
</div>
@ -73,7 +82,6 @@ import { ref, reactive, onMounted } from 'vue'
import { number } from 'vue-types'
import sb from './ECGSB.vue'
//json
const text = ref()
const sliderValue = ref(0) //
@ -105,8 +113,8 @@ const beatArray2 = ref([]) //备份数据
let offset = 0
const spacing = 20
const heightoff=ref(0)//
const FD=ref(false)
const heightoff = ref(0) //
const FD = ref(false)
function handleMouseDown(event, type) {
if (type === 'L') {
@ -249,7 +257,7 @@ nextTick(async () => {
const integer = Math.round(adjustedWidth)
const awidth = integer * 20
canvasContainer.style.width = awidth - 20 + 'px'
canvasContainer1.style.width = (awidth+41) - 20 + 'px' //61 3
canvasContainer1.style.width = awidth + 41 - 20 + 'px' //61 3
console.log('adjustedWidth 不是整数')
}
if (Number.isInteger(adjustedheight)) {
@ -261,7 +269,7 @@ nextTick(async () => {
canvasContainer.style.height = ahe - 118 + 'px'
canvasContainer1.style.height = ahe - 118 + 'px'
leftCanvas.height = ahe - 118
heightoff.value=(ahe -118)/6
heightoff.value = (ahe - 118) / 6
}
await fetchData()
})
@ -318,11 +326,19 @@ watch(
() => infoParams.suduratio,
() => infoParams.isrefresh,
() => infoParams.iscorrect,
()=>infoParams.Isfd
() => infoParams.Isfd
],
(
[newIsGridValue, newAnotherValue, newlineratio, newsuduratio, newisrefresh, newiniscorrect,newfd],
[oldIsGridView, oldAnotherValue, oldlineratio, oldsuduratio, oldisrefresh, oldiscorrect,oldds]
[
newIsGridValue,
newAnotherValue,
newlineratio,
newsuduratio,
newisrefresh,
newiniscorrect,
newfd
],
[oldIsGridView, oldAnotherValue, oldlineratio, oldsuduratio, oldisrefresh, oldiscorrect, oldds]
) => {
// isGrid
if (newIsGridValue !== oldIsGridView) {
@ -350,9 +366,8 @@ watch(
if (newiniscorrect !== oldiscorrect) {
isdialog.value = newiniscorrect
}
if(newfd!==oldds)
{
FD.value=newfd
if (newfd !== oldds) {
FD.value = newfd
console.log(FD.value)
}
}
@ -474,7 +489,7 @@ function handleFileChange() {
leads.forEach((lead, index) => {
const value = json[lead]
beatArray1.value.push(value)
})
// leads.forEach((lead, index) => {
@ -601,16 +616,16 @@ function begin(c_canvas, beatArray) {
beatArray.forEach((dataArray, index) => {
if (index <= 6) {
const x = 0
const y = (offset - dataArray[index - 1] * 0.025)
const y = offset - dataArray[index - 1] * 0.025
ctx.beginPath()
ctx.moveTo(x, y)
ctx.lineTo(x + 5, y)
ctx.moveTo(x + 5, (y - dyMap[infoParams.lineratio]))//线
ctx.lineTo(x + 15, (y - dyMap[infoParams.lineratio]))//线
ctx.moveTo(x + 5, (y - dyMap[infoParams.lineratio]))//线
ctx.lineTo(x + 5, y)//线
ctx.moveTo(x + 15, y - dyMap[infoParams.lineratio])//线
ctx.lineTo(x + 15, y)//线
ctx.moveTo(x + 5, y - dyMap[infoParams.lineratio]) //线
ctx.lineTo(x + 15, y - dyMap[infoParams.lineratio]) //线
ctx.moveTo(x + 5, y - dyMap[infoParams.lineratio]) //线
ctx.lineTo(x + 5, y) //线
ctx.moveTo(x + 15, y - dyMap[infoParams.lineratio]) //线
ctx.lineTo(x + 15, y) //线
ctx.moveTo(x + 15, y)
ctx.lineTo(x + 20, y)
ctx.stroke()