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

View File

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

View File

@ -48,24 +48,49 @@ function drawMagnifiedArea(x, y, container) {
ctx.imageSmoothingEnabled = true ctx.imageSmoothingEnabled = true
ctx.imageSmoothingQuality = 'high' ctx.imageSmoothingQuality = 'high'
if (isInTransition) { if (false) {
// if (isInTransition) {
const weight2 = (x - (rect2.left - transitionZone)) / (transitionZone * 2) //
const weight1 = 1 - weight2 const weight2 = (x - (rect2.left - transitionZone)) / (transitionZone * 2)
const weight1 = 1 - weight2
// //
drawContainerContent(ctx, container1, x, y, rect1, weight1) drawContainerContent(ctx, container1, x, y, rect1, weight1)
// //
drawContainerContent(ctx, container2, x, y, rect2, weight2) 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 { } else {
// drawContainerContent(ctx, container1, x, y, rect1, 1)
const currentContainer = x < rect2.left ? container1 : container2 drawContainerContent(ctx, container2, x, y, rect2, 1)
const currentRect = x < rect2.left ? rect1 : rect2
drawContainerContent(ctx, currentContainer, x, y, currentRect, 1)
} }
} }
// //
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) => {
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.globalAlpha = 1
}
function drawContainerContent(ctx, container, x, y, rect, alpha) { function drawContainerContent(ctx, container, x, y, rect, alpha) {
if (alpha === 0) return if (alpha === 0) return
@ -74,24 +99,83 @@ function drawContainerContent(ctx, container, x, y, rect, alpha) {
container.querySelector('#bottomCanvas, #bottomCanvas1'), container.querySelector('#bottomCanvas, #bottomCanvas1'),
container.querySelector('#leftCanvas, #rightCanvas'), container.querySelector('#leftCanvas, #rightCanvas'),
container.querySelector('#topCanvas, #topCanvas1') container.querySelector('#topCanvas, #topCanvas1')
].filter(canvas => canvas) ].filter((canvas) => canvas)
layers.forEach(canvas => { layers.forEach((canvas) => {
const canvasRect = canvas.getBoundingClientRect() const canvasRect = canvas.getBoundingClientRect()
const canvasX = x - canvasRect.left const canvasX = x - canvasRect.left
const canvasY = y - canvasRect.top const canvasY = y - canvasRect.top
const canvasY_max = y + 50 >= rect.bottom ? rect.bottom : y + 50
ctx.drawImage( if (['topCanvas', 'topCanvas1'].includes(canvas.id)) {
canvas, const leftCanvas = container.querySelector('#leftCanvas, #rightCanvas')
canvasX - 75, if (canvasRect.right > leftCanvas.getBoundingClientRect().right) {
canvasY - 50, let borderLeft =
150, x - leftCanvas.getBoundingClientRect().right > 75
100, ? x - 75
0, : leftCanvas.getBoundingClientRect().right
0, let borderLeft_span =
300, x <= leftCanvas.getBoundingClientRect().right
200 ? 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 ctx.globalAlpha = 1
} }
@ -107,10 +191,16 @@ function handleMouseMove(e) {
const rect2 = container2.getBoundingClientRect() const rect2 = container2.getBoundingClientRect()
// //
const isInContainer1 = e.clientX >= rect1.left && e.clientX <= rect1.right && const isInContainer1 =
e.clientY >= rect1.top && e.clientY <= rect1.bottom e.clientX >= rect1.left &&
const isInContainer2 = e.clientX >= rect2.left && e.clientX <= rect2.right && e.clientX <= rect1.right &&
e.clientY >= rect2.top && e.clientY <= rect2.bottom 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) { if (!isInContainer1 && !isInContainer2) {
isZoomed.value = false isZoomed.value = false
@ -132,8 +222,11 @@ function handleMouseDown(e) {
if (!container || e.button !== 0) return if (!container || e.button !== 0) return
const rect = container.getBoundingClientRect() const rect = container.getBoundingClientRect()
const isInContainer = e.clientX >= rect.left && e.clientX <= rect.right && const isInContainer =
e.clientY >= rect.top && e.clientY <= rect.bottom e.clientX >= rect.left &&
e.clientX <= rect.right &&
e.clientY >= rect.top &&
e.clientY <= rect.bottom
if (!isInContainer) return if (!isInContainer) return
@ -142,10 +235,12 @@ function handleMouseDown(e) {
document.removeEventListener('mousemove', handleMouseMove) document.removeEventListener('mousemove', handleMouseMove)
} else { } else {
isZoomed.value = true isZoomed.value = true
zoomedPosition.x = e.clientX nextTick(() => {
zoomedPosition.y = e.clientY zoomedPosition.x = e.clientX
drawMagnifiedArea(e.clientX, e.clientY, container) zoomedPosition.y = e.clientY
document.addEventListener('mousemove', handleMouseMove) drawMagnifiedArea(e.clientX, e.clientY, container)
document.addEventListener('mousemove', handleMouseMove)
})
} }
} }

View File

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

View File

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

View File

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