阅片页面增加章程和阅片手册的入口
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
7d57f6b5f6
commit
29e785243e
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1762494352859" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22987" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M896 832a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V192a128 128 0 0 1 128-128h512a128 128 0 0 1 128 128v640zM192 768v64a64 64 0 0 0 56.512 63.552L256 896h512a64 64 0 0 0 63.552-56.512L832 832v-64H192z m448-640H512v206.912l64-38.4 64 38.464V128z m-448 576h640V192a64 64 0 0 0-56.512-63.552L768 128h-64v263.488a32 32 0 0 1-48.448 27.456L576 371.2l-79.552 47.744A32 32 0 0 1 448 391.424V128H256a64 64 0 0 0-63.552 56.512L192 192v512z" fill="#e6e6e6" p-id="22988"></path></svg>
|
||||
|
After Width: | Height: | Size: 812 B |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 418 B After Width: | Height: | Size: 5.2 KiB |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1762485648235" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10985" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M543.378286 515.949714V104.521143a31.451429 31.451429 0 0 0-62.976 0v411.501714a125.44 125.44 0 0 0 0.292571 242.834286 31.670857 31.670857 0 0 0-0.292571 3.949714v156.745143a31.451429 31.451429 0 0 0 62.902857 0v-156.745143a31.597714 31.597714 0 0 0-0.219429-3.876571 125.513143 125.513143 0 0 0 0.292572-242.980572z m12.946285 165.814857a62.683429 62.683429 0 1 1-88.649142-88.722285 62.683429 62.683429 0 0 1 88.649142 88.722285zM229.522286 202.459429a31.597714 31.597714 0 0 0 0.292571-3.949715V104.594286a31.305143 31.305143 0 1 0-62.610286 0v93.988571c0 1.389714 0 2.706286 0.146286 4.022857a125.44 125.44 0 0 0 0 242.907429 31.670857 31.670857 0 0 0-0.146286 3.876571v470.235429a31.305143 31.305143 0 1 0 62.610286 0V449.316571a31.597714 31.597714 0 0 0-0.292571-3.803428 125.44 125.44 0 0 0 0-243.053714z m13.312 165.888a62.683429 62.683429 0 1 1-88.649143-88.722286 62.683429 62.683429 0 0 1 88.649143 88.722286zM950.857143 324.022857c0-58.587429-40.228571-107.739429-94.500572-121.563428a31.670857 31.670857 0 0 0 0.146286-3.949715V104.594286a31.305143 31.305143 0 0 0-62.610286 0v93.988571c0 1.389714 0.146286 2.706286 0.292572 4.022857a125.44 125.44 0 0 0 0 242.907429 31.670857 31.670857 0 0 0-0.292572 3.949714v470.162286a31.305143 31.305143 0 1 0 62.610286 0V449.389714c0-1.316571 0-2.56-0.146286-3.876571A125.513143 125.513143 0 0 0 950.857143 324.022857z m-81.042286 44.324572a62.683429 62.683429 0 1 1-88.649143-88.722286 62.683429 62.683429 0 0 1 88.649143 88.722286z" p-id="10986" fill="#e6e6e6"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
|
@ -396,15 +396,36 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
<div style="margin-left:auto;">
|
||||
<div style="padding:5px">
|
||||
<div style="padding:5px;display: flex;">
|
||||
<!-- 手册 -->
|
||||
<el-button v-if="isExistsManual" type="text" @click="previewManuals">{{
|
||||
$t('trials:reading:button:handbooks') }}</el-button>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:handbooks')" placement="bottom"
|
||||
v-if="isExistsManual">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="previewManuals">
|
||||
<svg-icon icon-class="constitution" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">{{ $t('trials:reading:button:handbooks') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 临床数据 -->
|
||||
<el-button v-if="isExistsClinicalData" type="text" @click="previewCD">{{
|
||||
$t('trials:reading:button:clinicalData') }}</el-button>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:clinicalData')"
|
||||
placement="bottom" v-if="isExistsClinicalData">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="previewCD">
|
||||
<svg-icon icon-class="documentation" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">{{ $t('trials:reading:button:clinicalData') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 个性化配置 -->
|
||||
<el-button type="text" @click="previewConfig">{{ $t('trials:reading:button:customCfg') }}</el-button>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:customCfg')" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="previewConfig">
|
||||
<svg-icon icon-class="individuation" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">{{ $t('trials:reading:button:customCfg') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -2,17 +2,8 @@
|
|||
<div class="dicom-viewer-wrapper">
|
||||
<div class="dicom-viewer-container">
|
||||
<div class="dicom-tools">
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:layout')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<div
|
||||
class="tool-wrapper"
|
||||
@click.stop="showPanel($event)"
|
||||
@mouseleave="handleMouseout"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:layout')}`" placement="bottom">
|
||||
<div class="tool-wrapper" @click.stop="showPanel($event)" @mouseleave="handleMouseout">
|
||||
<div class="dropdown">
|
||||
<div class="icon">
|
||||
<svg-icon icon-class="layout" class="svg-icon" />
|
||||
|
|
@ -29,11 +20,7 @@
|
|||
<div class="layout_box_1_1">A</div>
|
||||
<div class="layout_box_1_1">A</div>
|
||||
</li>
|
||||
<li
|
||||
v-if="isReadingTaskViewInOrder === 1"
|
||||
class="flex_row"
|
||||
@click.stop="changeLayout('A|B')"
|
||||
>
|
||||
<li v-if="isReadingTaskViewInOrder === 1" class="flex_row" @click.stop="changeLayout('A|B')">
|
||||
<div class="layout_box_1_1">A</div>
|
||||
<div class="layout_box_1_1">B</div>
|
||||
</li>
|
||||
|
|
@ -54,24 +41,11 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:wwwc')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<div
|
||||
class="tool-wrapper"
|
||||
@click.stop="showPanel($event)"
|
||||
@mouseleave="handleMouseout"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:wwwc')}`" placement="bottom">
|
||||
<div class="tool-wrapper" @click.stop="showPanel($event)" @mouseleave="handleMouseout">
|
||||
<div class="dropdown">
|
||||
<div
|
||||
class="icon"
|
||||
data-tool="Wwwc"
|
||||
:class="[activeTool === 'Wwwc' ? 'tool_active' : '']"
|
||||
@click.prevent="setToolActive('Wwwc', false)"
|
||||
>
|
||||
<div class="icon" data-tool="Wwwc" :class="[activeTool === 'Wwwc' ? 'tool_active' : '']"
|
||||
@click.prevent="setToolActive('Wwwc', false)">
|
||||
<svg-icon icon-class="reverse" class="svg-icon" />
|
||||
<i class="el-icon-arrow-down" style="color: #fff" />
|
||||
</div>
|
||||
|
|
@ -81,14 +55,11 @@
|
|||
<ul style="width: 165px; padding: 0 10px">
|
||||
<li v-for="item in wwwcArr" :key="item.label">
|
||||
<a href="#" @click.prevent="setDicomCanvasWwwc(item)">
|
||||
<div
|
||||
v-if="item.wc"
|
||||
style="
|
||||
<div v-if="item.wc" style="
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
"
|
||||
>
|
||||
">
|
||||
<div>{{ item.label }}</div>
|
||||
<div>{{ item.ww }}/{{ item.wc }}</div>
|
||||
</div>
|
||||
|
|
@ -102,12 +73,8 @@
|
|||
>
|
||||
W/L {{ $t('trials:reading:title:preset') }}
|
||||
</div> -->
|
||||
<el-divider
|
||||
v-if="item.val === 1"
|
||||
class="divider"
|
||||
content-position="center"
|
||||
>{{ ` ${$t('trials:reading:title:preset')}` }}</el-divider
|
||||
>
|
||||
<el-divider v-if="item.val === 1" class="divider" content-position="center">{{ `
|
||||
${$t('trials:reading:title:preset')}` }}</el-divider>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -129,18 +96,11 @@
|
|||
<div class="text">区域调窗</div>
|
||||
|
||||
</div> -->
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:reverseColor')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:reverseColor')}`"
|
||||
placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div
|
||||
class="icon"
|
||||
:class="[activeTool === 'reversecolor' ? 'tool_active' : '']"
|
||||
@click.prevent="toggleInvert"
|
||||
>
|
||||
<div class="icon" :class="[activeTool === 'reversecolor' ? 'tool_active' : '']"
|
||||
@click.prevent="toggleInvert">
|
||||
<svg-icon icon-class="reversecolor" class="svg-icon" />
|
||||
</div>
|
||||
<!-- 反色 -->
|
||||
|
|
@ -148,19 +108,10 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:zoom')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:zoom')}`" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div
|
||||
class="icon"
|
||||
:class="[activeTool === 'Zoom' ? 'tool_active' : '']"
|
||||
data-tool="Zoom"
|
||||
@click.prevent="setToolActive('Zoom', false)"
|
||||
>
|
||||
<div class="icon" :class="[activeTool === 'Zoom' ? 'tool_active' : '']" data-tool="Zoom"
|
||||
@click.prevent="setToolActive('Zoom', false)">
|
||||
<svg-icon icon-class="magnifier" class="svg-icon" />
|
||||
</div>
|
||||
<!-- 缩放 -->
|
||||
|
|
@ -168,19 +119,10 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:move')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:move')}`" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div
|
||||
class="icon"
|
||||
:class="[activeTool === 'Pan' ? 'tool_active' : '']"
|
||||
data-tool="Pan"
|
||||
@click.prevent="setToolActive('Pan', false)"
|
||||
>
|
||||
<div class="icon" :class="[activeTool === 'Pan' ? 'tool_active' : '']" data-tool="Pan"
|
||||
@click.prevent="setToolActive('Pan', false)">
|
||||
<svg-icon icon-class="move" class="svg-icon" />
|
||||
</div>
|
||||
<!-- 移动 -->
|
||||
|
|
@ -188,24 +130,11 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:rotate')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<div
|
||||
class="tool-wrapper"
|
||||
@click.stop="showPanel($event)"
|
||||
@mouseleave="handleMouseout"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:rotate')}`" placement="bottom">
|
||||
<div class="tool-wrapper" @click.stop="showPanel($event)" @mouseleave="handleMouseout">
|
||||
<!-- @click.prevent="setToolActive('Rotate',false)" -->
|
||||
<div class="dropdown">
|
||||
<div
|
||||
class="icon"
|
||||
data-tool="Rotate"
|
||||
:class="[activeTool === 'Rotate' ? 'tool_active' : '']"
|
||||
>
|
||||
<div class="icon" data-tool="Rotate" :class="[activeTool === 'Rotate' ? 'tool_active' : '']">
|
||||
<svg-icon icon-class="rotate" class="svg-icon" />
|
||||
<i class="el-icon-arrow-down" style="color: #fff" />
|
||||
</div>
|
||||
|
|
@ -216,16 +145,8 @@
|
|||
</div>
|
||||
<div class="dropdown-content">
|
||||
<ul style="width: 100px; padding: 0 10px">
|
||||
<li
|
||||
v-for="rotate in rotateArr"
|
||||
:key="rotate.label"
|
||||
style="text-align: left"
|
||||
>
|
||||
<a
|
||||
href="#"
|
||||
@click.prevent="setDicomCanvasRotate(rotate.val)"
|
||||
>{{ rotate.label }}</a
|
||||
>
|
||||
<li v-for="rotate in rotateArr" :key="rotate.label" style="text-align: left">
|
||||
<a href="#" @click.prevent="setDicomCanvasRotate(rotate.val)">{{ rotate.label }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -233,28 +154,15 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="
|
||||
fitType === 1
|
||||
? `${$t('trials:reading:button:fitWindow')}`
|
||||
: `${$t('trials:reading:button:fitImage')}`
|
||||
"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="fitType === 1
|
||||
? `${$t('trials:reading:button:fitWindow')}`
|
||||
: `${$t('trials:reading:button:fitImage')}`
|
||||
" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div
|
||||
class="icon"
|
||||
@click.prevent="
|
||||
fitToType(fitType === 1 ? 'fitToWindow' : 'fitToImage')
|
||||
"
|
||||
>
|
||||
<svg-icon
|
||||
v-if="fitType === 1"
|
||||
icon-class="fitToWindow"
|
||||
class="svg-icon"
|
||||
/>
|
||||
<div class="icon" @click.prevent="
|
||||
fitToType(fitType === 1 ? 'fitToWindow' : 'fitToImage')
|
||||
">
|
||||
<svg-icon v-if="fitType === 1" icon-class="fitToWindow" class="svg-icon" />
|
||||
<svg-icon v-else icon-class="fitToImage" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">
|
||||
|
|
@ -267,18 +175,10 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:imageIndexSync')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:imageIndexSync')}`"
|
||||
placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div
|
||||
class="icon"
|
||||
:class="[isScrollSync ? 'tool_active' : '']"
|
||||
@click.prevent="setImageIndexSync"
|
||||
>
|
||||
<div class="icon" :class="[isScrollSync ? 'tool_active' : '']" @click.prevent="setImageIndexSync">
|
||||
<i v-if="isScrollSync" class="el-icon-lock svg-icon" />
|
||||
<i v-else class="el-icon-unlock svg-icon" />
|
||||
</div>
|
||||
|
|
@ -298,12 +198,8 @@
|
|||
</div>
|
||||
<div class="text">适应图像</div>
|
||||
</div> -->
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:reading:button:screenShot')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:reading:button:screenShot')}`"
|
||||
placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="saveImage">
|
||||
<svg-icon icon-class="image" class="svg-icon" />
|
||||
|
|
@ -323,14 +219,9 @@
|
|||
<div v-else>{{ tool.text }}</div>
|
||||
</div>
|
||||
<div class="tool-wrapper">
|
||||
<div
|
||||
class="icon"
|
||||
:class="[activeTool === tool.toolName ? 'tool_active' : '']"
|
||||
:style="{ cursor: tool.isDisabled ? 'not-allowed' : 'pointer' }"
|
||||
:data-tool="tool.toolName"
|
||||
@click.prevent="setToolActive(tool.toolName, true, $event)"
|
||||
@mouseenter="enter($event, tool.toolName)"
|
||||
>
|
||||
<div class="icon" :class="[activeTool === tool.toolName ? 'tool_active' : '']"
|
||||
:style="{ cursor: tool.isDisabled ? 'not-allowed' : 'pointer' }" :data-tool="tool.toolName"
|
||||
@click.prevent="setToolActive(tool.toolName, true, $event)" @mouseenter="enter($event, tool.toolName)">
|
||||
<svg-icon :icon-class="tool.icon" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">{{ tool.text }}</div>
|
||||
|
|
@ -351,19 +242,10 @@
|
|||
</div> -->
|
||||
</div>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="`${$t('trials:dicom-show:Eraser')}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="`${$t('trials:dicom-show:Eraser')}`" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div
|
||||
class="icon"
|
||||
:class="[activeTool === 'Eraser' ? 'tool_active' : '']"
|
||||
data-tool="Zoom"
|
||||
@click.prevent="setToolActive('Eraser', false)"
|
||||
>
|
||||
<div class="icon" :class="[activeTool === 'Eraser' ? 'tool_active' : '']" data-tool="Zoom"
|
||||
@click.prevent="setToolActive('Eraser', false)">
|
||||
<svg-icon icon-class="clear" class="svg-icon" />
|
||||
</div>
|
||||
<!-- 缩放 -->
|
||||
|
|
@ -372,43 +254,23 @@
|
|||
</el-tooltip>
|
||||
<div class="tool-frame">
|
||||
<!-- 第一帧 -->
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:dicom-show:firstframe')"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicom-show:firstframe')" placement="bottom">
|
||||
<div class="icon" @click.prevent="scrollPage(-99999)">
|
||||
<svg-icon icon-class="firstframe" class="svg-icon" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 上一帧 -->
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:dicom-show:previousframe')"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicom-show:previousframe')" placement="bottom">
|
||||
<div class="icon" @click.prevent="scrollPage(-1)">
|
||||
<svg-icon icon-class="previousframe" class="svg-icon" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 播放/暂停 -->
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="
|
||||
clipPlaying
|
||||
? $t('trials:dicom-show:stop')
|
||||
: $t('trials:dicom-show:play')
|
||||
"
|
||||
placement="bottom"
|
||||
>
|
||||
<div
|
||||
v-if="clipPlaying"
|
||||
class="icon"
|
||||
@click.prevent="toggleClipPlay(false)"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="clipPlaying
|
||||
? $t('trials:dicom-show:stop')
|
||||
: $t('trials:dicom-show:play')
|
||||
" placement="bottom">
|
||||
<div v-if="clipPlaying" class="icon" @click.prevent="toggleClipPlay(false)">
|
||||
<svg-icon icon-class="stop" class="svg-icon" />
|
||||
</div>
|
||||
<div v-else class="icon" @click.prevent="toggleClipPlay(true)">
|
||||
|
|
@ -416,40 +278,20 @@
|
|||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 下一帧 -->
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:dicom-show:nextframe')"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicom-show:nextframe')" placement="bottom">
|
||||
<div class="icon" @click.prevent="scrollPage(1)">
|
||||
<svg-icon icon-class="nextframe" class="svg-icon" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 最后一帧 -->
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:dicom-show:lastframe')"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicom-show:lastframe')" placement="bottom">
|
||||
<div class="icon" @click.prevent="scrollPage(99999)">
|
||||
<svg-icon icon-class="lastframe" class="svg-icon" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:dicom-show:speed')"
|
||||
placement="bottom"
|
||||
>
|
||||
<select
|
||||
v-model="fps"
|
||||
class="select-wrapper"
|
||||
:disabled="clipPlaying"
|
||||
@change="setDicomCanvasfps($event)"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicom-show:speed')" placement="bottom">
|
||||
<select v-model="fps" class="select-wrapper" :disabled="clipPlaying" @change="setDicomCanvasfps($event)">
|
||||
<option :value="5">5</option>
|
||||
<option :value="10">10</option>
|
||||
<option :value="15">15</option>
|
||||
|
|
@ -459,12 +301,7 @@
|
|||
</select>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:reading:button:reset')"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:reset')" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="resetViewport">
|
||||
<svg-icon icon-class="refresh" class="svg-icon" />
|
||||
|
|
@ -472,16 +309,10 @@
|
|||
<div class="text">{{ $t('trials:reading:button:reset') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<el-tooltip
|
||||
v-if="
|
||||
trialCriterion.ImageUploadEnum > 0 && currentReadingTaskState < 2
|
||||
"
|
||||
v-hasPermi="['role:ir']"
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:reading:button:upload')"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip v-if="
|
||||
trialCriterion.ImageUploadEnum > 0 && currentReadingTaskState < 2
|
||||
" v-hasPermi="['role:ir']" class="item" effect="dark" :content="$t('trials:reading:button:upload')"
|
||||
placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="openUploadImage('upload')">
|
||||
<i class="el-icon-upload2 svg-icon" />
|
||||
|
|
@ -489,22 +320,15 @@
|
|||
<div class="text">{{ $t('trials:reading:button:upload') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<el-tooltip
|
||||
v-if="trialCriterion.ImageDownloadEnum > 0"
|
||||
v-hasPermi="[
|
||||
'role:ir',
|
||||
'role:mim',
|
||||
'role:mc',
|
||||
'role:pm',
|
||||
'role:apm',
|
||||
'role:ea',
|
||||
'role:qa',
|
||||
]"
|
||||
class="item"
|
||||
effect="dark"
|
||||
:content="$t('trials:reading:button:download')"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip v-if="trialCriterion.ImageDownloadEnum > 0" v-hasPermi="[
|
||||
'role:ir',
|
||||
'role:mim',
|
||||
'role:mc',
|
||||
'role:pm',
|
||||
'role:apm',
|
||||
'role:ea',
|
||||
'role:qa',
|
||||
]" class="item" effect="dark" :content="$t('trials:reading:button:download')" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="openUploadImage('download')">
|
||||
<i class="el-icon-download svg-icon" />
|
||||
|
|
@ -515,100 +339,73 @@
|
|||
|
||||
<div style="margin-left: auto">
|
||||
<div style="padding: 5px">
|
||||
<el-button
|
||||
v-if="isExistsManual"
|
||||
type="text"
|
||||
@click="previewManuals"
|
||||
>{{ $t('trials:reading:button:handbooks') }}</el-button
|
||||
>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:handbooks')" placement="bottom"
|
||||
v-if="isExistsManual">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="previewManuals">
|
||||
<svg-icon icon-class="constitution" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">{{ $t('trials:reading:button:handbooks') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 临床数据 -->
|
||||
<el-button
|
||||
v-if="isExistsClinicalData"
|
||||
type="text"
|
||||
@click="previewCD"
|
||||
>{{ $t('trials:reading:button:clinicalData') }}</el-button
|
||||
>
|
||||
<!-- <el-button v-if="isExistsNoDicomFile" type="text" @click="previewNoneDicoms">非Dicom文件</el-button> -->
|
||||
|
||||
<el-button type="text" @click="previewConfig">{{
|
||||
$t('trials:reading:button:customCfg')
|
||||
}}</el-button>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:clinicalData')"
|
||||
placement="bottom" v-if="isExistsClinicalData">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="previewCD">
|
||||
<svg-icon icon-class="documentation" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">{{ $t('trials:reading:button:clinicalData') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<!-- 个性化配置 -->
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:customCfg')" placement="bottom">
|
||||
<div class="tool-wrapper">
|
||||
<div class="icon" @click.prevent="previewConfig">
|
||||
<svg-icon icon-class="individuation" class="svg-icon" />
|
||||
</div>
|
||||
<div class="text">{{ $t('trials:reading:button:customCfg') }}</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dicom-viewers">
|
||||
<div
|
||||
ref="container"
|
||||
class="viewer-container"
|
||||
:class="['box', `box_${layoutRow}_${layoutCol}`]"
|
||||
>
|
||||
<div
|
||||
v-for="i in maxCanvas"
|
||||
:key="i"
|
||||
:class="[
|
||||
'item',
|
||||
i - 1 === currentDicomCanvasIndex ? 'item_active' : '',
|
||||
]"
|
||||
:data-index="i - 1"
|
||||
:style="i - 1 === currentDicomCanvasIndex ? cornerstoneStyle : {}"
|
||||
@click="activateDicomCanvas(i - 1)"
|
||||
>
|
||||
<dicom-canvas
|
||||
v-if="canvasW"
|
||||
:ref="`dicomCanvas${i - 1}`"
|
||||
:style="{width: fullScreenIndex === i-1 ? fullScreenWidth : canvasW,height: fullScreenIndex === i-1 ? fullScreenHeight : canvasH}"
|
||||
:canvas-index="i - 1"
|
||||
:is-active="i - 1 === currentDicomCanvasIndex"
|
||||
:is-scroll-sync="isScrollSync"
|
||||
<div ref="container" class="viewer-container" :class="['box', `box_${layoutRow}_${layoutCol}`]">
|
||||
<div v-for="i in maxCanvas" :key="i" :class="[
|
||||
'item',
|
||||
i - 1 === currentDicomCanvasIndex ? 'item_active' : '',
|
||||
]" :data-index="i - 1" :style="i - 1 === currentDicomCanvasIndex ? cornerstoneStyle : {}"
|
||||
@click="activateDicomCanvas(i - 1)">
|
||||
<dicom-canvas v-if="canvasW" :ref="`dicomCanvas${i - 1}`"
|
||||
:style="{ width: fullScreenIndex === i - 1 ? fullScreenWidth : canvasW, height: fullScreenIndex === i - 1 ? fullScreenHeight : canvasH }"
|
||||
:canvas-index="i - 1" :is-active="i - 1 === currentDicomCanvasIndex" :is-scroll-sync="isScrollSync"
|
||||
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
:is-reading-task-view-in-order="isReadingTaskViewInOrder"
|
||||
:current-dicom-canvas-index="currentDicomCanvasIndex"
|
||||
:custom-wwc-tpl="customWwcTpl"
|
||||
@setMeasureData="setMeasureData"
|
||||
@modifyMeasureData="modifyMeasureData"
|
||||
@scrollSync="scrollSync"
|
||||
@selectViewCanvas="selectViewCanvas"
|
||||
@setCornerstoneStyle="setCornerstoneStyle(i - 1)"
|
||||
@moveMeasureData="moveMeasureData"
|
||||
/>
|
||||
:current-dicom-canvas-index="currentDicomCanvasIndex" :custom-wwc-tpl="customWwcTpl"
|
||||
@setMeasureData="setMeasureData" @modifyMeasureData="modifyMeasureData" @scrollSync="scrollSync"
|
||||
@selectViewCanvas="selectViewCanvas" @setCornerstoneStyle="setCornerstoneStyle(i - 1)"
|
||||
@moveMeasureData="moveMeasureData" />
|
||||
</div>
|
||||
</div>
|
||||
<div ref="form-container" class="form-container">
|
||||
<!-- 激活canvas测量数据 -->
|
||||
<MeasurementList
|
||||
ref="measurementList"
|
||||
:ise-c-r-f-show-in-dicom-reading="IseCRFShowInDicomReading"
|
||||
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
/>
|
||||
<MeasurementList ref="measurementList" :ise-c-r-f-show-in-dicom-reading="IseCRFShowInDicomReading"
|
||||
:is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-dialog
|
||||
v-if="customWwc.visible"
|
||||
:visible.sync="customWwc.visible"
|
||||
:close-on-click-modal="false"
|
||||
:title="customWwc.title"
|
||||
width="400px"
|
||||
custom-class="base-dialog-wrapper"
|
||||
>
|
||||
<el-dialog v-if="customWwc.visible" :visible.sync="customWwc.visible" :close-on-click-modal="false"
|
||||
:title="customWwc.title" width="400px" custom-class="base-dialog-wrapper">
|
||||
<CustomWwwcForm @close="customWwc.visible = false" @setWwwc="setWwwc" />
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-if="personalConfigDialog.visible"
|
||||
:visible.sync="personalConfigDialog.visible"
|
||||
:close-on-click-modal="false"
|
||||
:title="personalConfigDialog.title"
|
||||
width="600px"
|
||||
>
|
||||
<el-dialog v-if="personalConfigDialog.visible" :visible.sync="personalConfigDialog.visible"
|
||||
:close-on-click-modal="false" :title="personalConfigDialog.title" width="600px">
|
||||
<el-tabs v-model="activeName" class="personal_config">
|
||||
<el-tab-pane :label="$t('trials:reading:tab:hotkeys')" name="1">
|
||||
<Hotkeys
|
||||
v-if="activeName === '1'"
|
||||
:reading-tool="0"
|
||||
@reset="resetHotkeyList"
|
||||
/>
|
||||
<Hotkeys v-if="activeName === '1'" :reading-tool="0" @reset="resetHotkeyList" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="$t('trials:reading:tab:wlTemplate')" name="2">
|
||||
<WL v-if="activeName === '2'" @getWwcTpl="getWwcTpl" />
|
||||
|
|
@ -618,31 +415,16 @@
|
|||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
v-if="manualsDialog.visible"
|
||||
:visible.sync="manualsDialog.visible"
|
||||
:custom-class="
|
||||
isFullscreen
|
||||
? 'manuals-full-dialog-container'
|
||||
: 'manuals-dialog-container'
|
||||
"
|
||||
:show-close="false"
|
||||
:close-on-click-modal="false"
|
||||
:fullscreen="isFullscreen"
|
||||
>
|
||||
<el-dialog v-if="manualsDialog.visible" :visible.sync="manualsDialog.visible" :custom-class="isFullscreen
|
||||
? 'manuals-full-dialog-container'
|
||||
: 'manuals-dialog-container'
|
||||
" :show-close="false" :close-on-click-modal="false" :fullscreen="isFullscreen">
|
||||
<span slot="title" class="dialog-footer">
|
||||
<span>{{ $t('trials:reading:button:handbooks') }}</span>
|
||||
<span style="position: absolute; right: 20px; font-size: 20px">
|
||||
<svg-icon
|
||||
:icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
|
||||
style="margin-right: 10px; cursor: pointer"
|
||||
@click="isFullscreen = !isFullscreen"
|
||||
/>
|
||||
<svg-icon
|
||||
icon-class="close"
|
||||
style="cursor: pointer"
|
||||
@click="manualsDialog.visible = false"
|
||||
/>
|
||||
<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
|
||||
style="margin-right: 10px; cursor: pointer" @click="isFullscreen = !isFullscreen" />
|
||||
<svg-icon icon-class="close" style="cursor: pointer" @click="manualsDialog.visible = false" />
|
||||
</span>
|
||||
</span>
|
||||
<div style="height: 100%; margin: 0">
|
||||
|
|
@ -659,23 +441,12 @@
|
|||
:criterion="trialCriterion"
|
||||
:status="uploadStatus"
|
||||
/> -->
|
||||
<upload-dicom-and-nonedicom
|
||||
v-if="uploadImageVisible"
|
||||
:SubjectId="uploadSubjectId"
|
||||
:SubjectCode="uploadSubjectCode"
|
||||
:Criterion="uploadTrialCriterion"
|
||||
:visible.sync="uploadImageVisible"
|
||||
:VisitTaskId="taskId"
|
||||
:isReadingTaskViewInOrder="isReadingTaskViewInOrder"
|
||||
/>
|
||||
<download-dicom-and-nonedicom
|
||||
v-if="downloadImageVisible"
|
||||
:SubjectId="uploadSubjectId"
|
||||
:SubjectCode="uploadSubjectCode"
|
||||
:Criterion="uploadTrialCriterion"
|
||||
:TaskId="taskId"
|
||||
:visible.sync="downloadImageVisible"
|
||||
/>
|
||||
<upload-dicom-and-nonedicom v-if="uploadImageVisible" :SubjectId="uploadSubjectId" :SubjectCode="uploadSubjectCode"
|
||||
:Criterion="uploadTrialCriterion" :visible.sync="uploadImageVisible" :VisitTaskId="taskId"
|
||||
:isReadingTaskViewInOrder="isReadingTaskViewInOrder" />
|
||||
<download-dicom-and-nonedicom v-if="downloadImageVisible" :SubjectId="uploadSubjectId"
|
||||
:SubjectCode="uploadSubjectCode" :Criterion="uploadTrialCriterion" :TaskId="taskId"
|
||||
:visible.sync="downloadImageVisible" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -1079,7 +850,7 @@ export default {
|
|||
.then((res) => {
|
||||
this.trialCriterion = res.Result
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
},
|
||||
openUploadImage(status) {
|
||||
const idx = this.visitTaskList.findIndex((i) => i.IsCurrentTask)
|
||||
|
|
@ -1746,7 +1517,7 @@ export default {
|
|||
// ? `frame=${frame}&instanceId=${instanceId}`
|
||||
// : `instanceId=${instanceId}`
|
||||
let filterStr = ''
|
||||
let n = series.instanceInfoList.findIndex(k=>k.Id === instanceId)
|
||||
let n = series.instanceInfoList.findIndex(k => k.Id === instanceId)
|
||||
if (n > -1 && series.isExistMutiFrames) {
|
||||
if (series.instanceInfoList[n].NumberOfFrames > 0) {
|
||||
filterStr = `frame=${frame}&instanceId=${instanceId}`
|
||||
|
|
@ -1812,7 +1583,7 @@ export default {
|
|||
if (obj) {
|
||||
const index = Math.floor(
|
||||
obj.imageIds.length *
|
||||
((baseSeries.imageIdIndex + 1) / baseSeries.instanceCount)
|
||||
((baseSeries.imageIdIndex + 1) / baseSeries.instanceCount)
|
||||
)
|
||||
obj.imageIdIndex = index > 0 ? index - 1 : 0
|
||||
}
|
||||
|
|
@ -1920,7 +1691,7 @@ export default {
|
|||
if (obj) {
|
||||
const index = Math.floor(
|
||||
obj.imageIds.length *
|
||||
((baseSeries.imageIdIndex + 1) / baseSeries.instanceCount)
|
||||
((baseSeries.imageIdIndex + 1) / baseSeries.instanceCount)
|
||||
)
|
||||
obj.imageIdIndex = index > 0 ? index - 1 : 0
|
||||
}
|
||||
|
|
@ -2263,8 +2034,8 @@ export default {
|
|||
moveMeasureData(data) {
|
||||
this.$confirm(
|
||||
this.$t('trials:trials-list:table:isDeleted') +
|
||||
data.questionInfo.MeasureData.data.remark +
|
||||
'?'
|
||||
data.questionInfo.MeasureData.data.remark +
|
||||
'?'
|
||||
).then(() => {
|
||||
this.$refs['measurementList'].moveMeasureData(data)
|
||||
})
|
||||
|
|
@ -2354,6 +2125,7 @@ export default {
|
|||
height: 100%;
|
||||
padding: 5px 0px 5px 5px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.divider {
|
||||
display: block;
|
||||
height: 1px;
|
||||
|
|
@ -2363,6 +2135,7 @@ export default {
|
|||
// color: #fff;
|
||||
// background-color: #DCDFE6;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
padding: 0 10px;
|
||||
color: #fff;
|
||||
|
|
@ -2370,19 +2143,23 @@ export default {
|
|||
font-size: 12px;
|
||||
width: 80px;
|
||||
}
|
||||
|
||||
.dicom-viewer-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 10px;
|
||||
background: #d0d0d0;
|
||||
}
|
||||
|
||||
.dicom-tools {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
|
|
@ -2393,22 +2170,26 @@ export default {
|
|||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
|
||||
.tool-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-right: 20px;
|
||||
|
||||
.icon {
|
||||
padding: 5px;
|
||||
border: 1px solid #404040;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
|
||||
.svg-icon {
|
||||
font-size: 20px;
|
||||
color: #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
.text {
|
||||
position: relative;
|
||||
font-size: 12px;
|
||||
|
|
@ -2417,6 +2198,7 @@ export default {
|
|||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.tool-frame {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
|
@ -2424,16 +2206,19 @@ export default {
|
|||
align-items: center;
|
||||
margin-right: 20px;
|
||||
border: 1px solid #404040;
|
||||
|
||||
.icon {
|
||||
padding: 5px;
|
||||
border-right: 1px solid #404040;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
|
||||
.svg-icon {
|
||||
font-size: 20px;
|
||||
color: #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
.select-wrapper {
|
||||
width: 60px;
|
||||
background-color: black;
|
||||
|
|
@ -2442,6 +2227,7 @@ export default {
|
|||
font-size: 13px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.text {
|
||||
position: relative;
|
||||
font-size: 12px;
|
||||
|
|
@ -2450,18 +2236,23 @@ export default {
|
|||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.tool_active {
|
||||
background-color: #607d8b;
|
||||
}
|
||||
|
||||
.tool_disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.icon:hover {
|
||||
background-color: #607d8b;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
|
||||
.text {
|
||||
text-align: center;
|
||||
}
|
||||
|
|
@ -2475,11 +2266,13 @@ export default {
|
|||
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
|
||||
z-index: 9999;
|
||||
font-size: 12px;
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
|
||||
li {
|
||||
a {
|
||||
display: block;
|
||||
|
|
@ -2487,6 +2280,7 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
ul li:hover a {
|
||||
background-color: #727272;
|
||||
}
|
||||
|
|
@ -2500,6 +2294,7 @@ export default {
|
|||
border-top: 1px solid #ddd;
|
||||
border-left: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.layout-content ul .flex_row {
|
||||
// border: 1px solid #ddd;
|
||||
display: flex;
|
||||
|
|
@ -2509,6 +2304,7 @@ export default {
|
|||
// padding: 2px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.layout-content ul .flex_column {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
|
@ -2516,6 +2312,7 @@ export default {
|
|||
align-items: center;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.layout_box_1_1 {
|
||||
flex: 1;
|
||||
// border: 1px solid #ddd;
|
||||
|
|
@ -2526,6 +2323,7 @@ export default {
|
|||
border-right: 1px solid #ddd;
|
||||
// padding: 0 5px;
|
||||
}
|
||||
|
||||
.layout_box_1_2 {
|
||||
flex: 1;
|
||||
// border: 1px solid #ddd;
|
||||
|
|
@ -2536,9 +2334,11 @@ export default {
|
|||
border-right: 1px solid #ddd;
|
||||
// padding: 0 5px;
|
||||
}
|
||||
|
||||
.layout-content li .layout_box_1_1 :last-child {
|
||||
color: red;
|
||||
}
|
||||
|
||||
// .layout_li:last-child{
|
||||
// .layout_box{
|
||||
// border-bottom: none;
|
||||
|
|
@ -2549,6 +2349,7 @@ export default {
|
|||
background-color: #727272;
|
||||
}
|
||||
}
|
||||
|
||||
.dicom-viewers {
|
||||
box-sizing: border-box;
|
||||
flex: 1;
|
||||
|
|
@ -2558,6 +2359,7 @@ export default {
|
|||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
|
||||
.form-container {
|
||||
// box-sizing: border-box;
|
||||
width: 350px;
|
||||
|
|
@ -2565,6 +2367,7 @@ export default {
|
|||
border: 1px solid #727272;
|
||||
// overflow-y: auto;
|
||||
}
|
||||
|
||||
.viewer-container {
|
||||
box-sizing: border-box;
|
||||
flex: 1;
|
||||
|
|
@ -2576,34 +2379,41 @@ export default {
|
|||
// height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.box {
|
||||
display: grid;
|
||||
box-sizing: border-box;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
|
||||
.item {
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
border: 1px solid rgba(255, 255, 255, 0.21);
|
||||
position: relative;
|
||||
|
||||
&_active {
|
||||
// border: 2px solid #ffeb3b;
|
||||
border: 1px dashed #428bca;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.box_1_1 {
|
||||
grid-template-columns: repeat(1, 100%); //1列,占100%
|
||||
grid-template-rows: repeat(1, 100%); //1行,占100%
|
||||
}
|
||||
|
||||
.box_1_2 {
|
||||
grid-template-columns: repeat(2, 50%); //1列,占50%
|
||||
grid-template-rows: repeat(1, 100%); //1行,占100%
|
||||
}
|
||||
|
||||
.box_2_1 {
|
||||
grid-template-columns: repeat(1, 100%); //1列,占100%
|
||||
grid-template-rows: repeat(2, 50%); //1行,占50%
|
||||
}
|
||||
|
||||
.box_2_2 {
|
||||
grid-template-columns: repeat(2, 50%); //1列,占50%
|
||||
grid-template-rows: repeat(2, 50%); //1行,占50%
|
||||
|
|
@ -2622,29 +2432,35 @@ export default {
|
|||
// grid-template-rows: repeat(3, 33.33%); //1行,占100%
|
||||
// }
|
||||
}
|
||||
|
||||
.personal_config {
|
||||
::v-deep .el-tabs__content {
|
||||
height: 450px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .manuals-dialog-container {
|
||||
margin-top: 50px !important;
|
||||
width: 75%;
|
||||
height: 80%;
|
||||
|
||||
.el-dialog__body {
|
||||
padding: 10px;
|
||||
height: calc(100% - 50px) !important;
|
||||
}
|
||||
|
||||
.el-dialog__header {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .manuals-full-dialog-container {
|
||||
.el-dialog__body {
|
||||
padding: 10px;
|
||||
height: calc(100% - 50px) !important;
|
||||
}
|
||||
|
||||
.el-dialog__header {
|
||||
position: relative;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -267,20 +267,21 @@
|
|||
</template>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div style="display: flex;">
|
||||
<!-- 手册 -->
|
||||
<el-button v-if="taskInfo && taskInfo.ExistsManual" type="text" @click="previewManuals">
|
||||
{{ $t('trials:reading:button:handbooks') }}
|
||||
</el-button>
|
||||
<div class="tool-item" :title="$t('trials:reading:button:handbooks')"
|
||||
v-if="taskInfo && taskInfo.ExistsManual" @click.prevent="previewManuals">
|
||||
<svg-icon icon-class="constitution" class="svg-icon" />
|
||||
</div>
|
||||
<!-- 临床数据 -->
|
||||
<el-button v-if="taskInfo && taskInfo.IsExistsClinicalData" type="text"
|
||||
@click="previewCD(taskInfo.VisitTaskId)">
|
||||
{{ $t('trials:reading:button:clinicalData') }}
|
||||
</el-button>
|
||||
<div class="tool-item" :title="$t('trials:reading:button:clinicalData')"
|
||||
v-if="taskInfo && taskInfo.IsExistsClinicalData" @click.prevent="previewCD">
|
||||
<svg-icon icon-class="documentation" class="svg-icon" />
|
||||
</div>
|
||||
<!-- 个性化配置 -->
|
||||
<el-button type="text" @click="previewConfig">
|
||||
{{ $t('trials:reading:button:customCfg') }}
|
||||
</el-button>
|
||||
<div class="tool-item" :title="$t('trials:reading:button:customCfg')" @click.prevent="previewConfig">
|
||||
<svg-icon icon-class="individuation" class="svg-icon" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-wrapper">
|
||||
|
|
|
|||
|
|
@ -114,8 +114,16 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<el-button type="text" @click="previewConfig">{{ $t('trials:reading:button:customCfg') }}</el-button>
|
||||
<div style="display: flex;">
|
||||
<!-- 手册 -->
|
||||
<div class="tool-item" :title="$t('trials:reading:button:handbooks')" v-if="taskInfo && taskInfo.ExistsManual"
|
||||
@click.prevent="previewManuals">
|
||||
<svg-icon icon-class="constitution" class="svg-icon" />
|
||||
</div>
|
||||
<!-- 个性化配置 -->
|
||||
<div class="tool-item" :title="$t('trials:reading:button:customCfg')" @click.prevent="previewConfig">
|
||||
<svg-icon icon-class="individuation" class="svg-icon" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- viewports -->
|
||||
|
|
@ -231,6 +239,24 @@
|
|||
<download-dicom-and-nonedicom v-if="downloadImageVisible" :subject-id="uploadSubjectId"
|
||||
:subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :task-id="taskId"
|
||||
:visible.sync="downloadImageVisible" />
|
||||
<!-- 手册 -->
|
||||
<el-dialog v-if="manualsDialog.visible" :visible.sync="manualsDialog.visible"
|
||||
:custom-class="manualsDialog.isFullscreen ? 'manuals-full-dialog-container' : 'manuals-dialog-container'"
|
||||
:show-close="false" :close-on-click-modal="false" :fullscreen="manualsDialog.isFullscreen">
|
||||
<span slot="title" class="dialog-footer">
|
||||
<!-- 手册 -->
|
||||
<span>{{ $t('trials:reading:button:handbooks') }}</span>
|
||||
<span style="position: absolute;right: 20px;font-size: 20px;">
|
||||
<svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
|
||||
style="margin-right:10px;cursor: pointer;"
|
||||
@click="manualsDialog.isFullscreen = !manualsDialog.isFullscreen" />
|
||||
<svg-icon icon-class="close" style="cursor: pointer;" @click="manualsDialog.visible = false" />
|
||||
</span>
|
||||
</span>
|
||||
<div style="height: 100%;margin:0;">
|
||||
<Manuals :trial-id="trialId" />
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -254,6 +280,7 @@ import registerWebImageLoader from './../js/registerWebImageLoader'
|
|||
import { mapGetters } from 'vuex'
|
||||
import store from '@/store'
|
||||
import Others from '@/views/trials/trials-panel/reading/dicoms/components/Others'
|
||||
import Manuals from '@/views/trials/trials-panel/reading/dicoms/components/Manuals'
|
||||
const { ViewportType } = Enums
|
||||
const renderingEngineId = 'myRenderingEngine'
|
||||
import LengthscaleTool from "../tools/LengthscaleTool"
|
||||
|
|
@ -285,6 +312,7 @@ export default {
|
|||
Others,
|
||||
downloadDicomAndNonedicom,
|
||||
uploadDicomAndNonedicom,
|
||||
Manuals
|
||||
},
|
||||
props: {
|
||||
relatedStudyInfo: {
|
||||
|
|
@ -356,7 +384,9 @@ export default {
|
|||
type: '',
|
||||
annotation: null
|
||||
},
|
||||
loading: false
|
||||
loading: false,
|
||||
manualsDialog: { visible: false, isFullscreen: false },
|
||||
trialId: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
|
@ -406,6 +436,7 @@ export default {
|
|||
}
|
||||
},
|
||||
mounted() {
|
||||
this.trialId = this.$route.query.trialId
|
||||
this.taskInfo = JSON.parse(localStorage.getItem('taskInfo'))
|
||||
this.readingTaskState = this.taskInfo.ReadingTaskState
|
||||
this.criterionType = this.taskInfo.CriterionType
|
||||
|
|
@ -446,6 +477,11 @@ export default {
|
|||
window.removeEventListener('message', this.handleIframeMessage)
|
||||
},
|
||||
methods: {
|
||||
// 手册
|
||||
previewManuals() {
|
||||
this.manualsDialog.isFullscreen = false
|
||||
this.manualsDialog.visible = true
|
||||
},
|
||||
getTrialCriterion() {
|
||||
getCriterionReadingInfo({
|
||||
TrialId: this.$route.query.trialId,
|
||||
|
|
@ -1791,6 +1827,32 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .manuals-dialog-container {
|
||||
margin-top: 50px !important;
|
||||
width: 75%;
|
||||
height: 80%;
|
||||
|
||||
.el-dialog__body {
|
||||
padding: 10px;
|
||||
height: calc(100% - 50px) !important;
|
||||
}
|
||||
|
||||
.el-dialog__header {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .manuals-full-dialog-container {
|
||||
.el-dialog__body {
|
||||
padding: 10px;
|
||||
height: calc(100% - 50px) !important;
|
||||
}
|
||||
|
||||
.el-dialog__header {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
cursor: default !important;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue