ecg修改
This commit is contained in:
parent
98d140e8fd
commit
a7a65d1644
@ -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">
|
||||
@ -77,7 +79,7 @@
|
||||
<el-container>
|
||||
<!--左侧 心电图区域-->
|
||||
<el-aside width="96%" style="height: 81vh">
|
||||
<el-tabs type="border-card" style="height: 99%">
|
||||
<el-tabs type="card" style="height: 99%">
|
||||
<el-tab-pane :label="snapshotTime">
|
||||
<!--心电图-->
|
||||
<ECGhtml
|
||||
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 () => {
|
||||
|
@ -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
|
||||
|
@ -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') {
|
||||
@ -240,7 +248,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)) {
|
||||
@ -252,7 +260,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()
|
||||
})
|
||||
@ -309,11 +317,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) {
|
||||
@ -341,9 +357,8 @@ watch(
|
||||
if (newiniscorrect !== oldiscorrect) {
|
||||
isdialog.value = newiniscorrect
|
||||
}
|
||||
if(newfd!==oldds)
|
||||
{
|
||||
FD.value=newfd
|
||||
if (newfd !== oldds) {
|
||||
FD.value = newfd
|
||||
console.log(FD.value)
|
||||
}
|
||||
}
|
||||
@ -465,7 +480,7 @@ function handleFileChange() {
|
||||
|
||||
leads.forEach((lead, index) => {
|
||||
const value = json[lead]
|
||||
|
||||
|
||||
beatArray1.value.push(value)
|
||||
})
|
||||
// leads.forEach((lead, index) => {
|
||||
@ -589,16 +604,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()
|
||||
@ -693,11 +708,11 @@ function drawLine1(c_canvas, beatArray, offset, index) {
|
||||
if (index <= 5) {
|
||||
if (beatArray.length > 0) {
|
||||
const firstX = 0
|
||||
const firstY = (heightoff.value-50) - beatArray[0] * infoParams.lineratio + offset
|
||||
const firstY = heightoff.value - 50 - beatArray[0] * infoParams.lineratio + offset
|
||||
ctx.moveTo(firstX, firstY)
|
||||
for (let i = 0; i < beatArray.length - 1; i++) {
|
||||
const x2 = (0 + (i + 1) / 10) * infoParams.suduratio
|
||||
const y2 = (heightoff.value-50) - beatArray[i + 1] * infoParams.lineratio + offset
|
||||
const y2 = heightoff.value - 50 - beatArray[i + 1] * infoParams.lineratio + offset
|
||||
ctx.lineTo(x2, y2)
|
||||
}
|
||||
ctx.stroke()
|
||||
@ -707,11 +722,11 @@ function drawLine1(c_canvas, beatArray, offset, index) {
|
||||
if (index > 5) {
|
||||
if (beatArray.length > 0) {
|
||||
const firstX = 0
|
||||
const firstY = (heightoff.value-50) - beatArray[0] * infoParams.lineratio + offset
|
||||
const firstY = heightoff.value - 50 - beatArray[0] * infoParams.lineratio + offset
|
||||
ctx.moveTo(firstX, firstY)
|
||||
for (let i = 0; i < beatArray.length - 1; i++) {
|
||||
const x2 = (0 + (i + 1) / 10) * infoParams.suduratio
|
||||
const y2 = (heightoff.value-50) - beatArray[i + 1] * infoParams.lineratio + offset
|
||||
const y2 = heightoff.value - 50 - beatArray[i + 1] * infoParams.lineratio + offset
|
||||
ctx.lineTo(x2, y2)
|
||||
}
|
||||
ctx.stroke()
|
||||
|
Loading…
Reference in New Issue
Block a user