部分问题修复
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-12-02 17:12:49 +08:00
parent cc5ac4c2a9
commit c2cb5b1999
14 changed files with 630 additions and 839 deletions

View File

@ -214,56 +214,25 @@
<!-- @dblclick.native="reloadViewport('CT_AXIAL')" -->
<div ref="dicomContainer" class="dicom-container box box_2_2" style="position: relative;"
@dblclick="reloadViewport">
<Viewport
ref="CT_AXIAL"
:index="1"
:active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo"
:series-info="ctSeries"
:rendering-engine-id="renderingEngineId"
viewport-id="CT_AXIAL" :volume="ctVolume"
:measure-datas="measureDatas"
:style="1 === activeIndex ? viewportStyle : {}"
@upperRangeChange="upperRangeChange"
/>
<Viewport
ref="PT_AXIAL"
:index="2"
:active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo"
:series-info="petSeries"
:rendering-engine-id="renderingEngineId"
viewport-id="PT_AXIAL"
:volume="ptVolume"
:measure-datas="measureDatas"
:style="2 === activeIndex ? viewportStyle : {}"
@upperRangeChange="upperRangeChange"
/>
<Viewport
ref="FUSION_AXIAL"
:index="3"
:active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo"
:series-info="petSeries"
:rendering-engine-id="renderingEngineId"
viewport-id="FUSION_AXIAL"
:volume="ptVolume"
:measure-datas="measureDatas"
:rgb-preset-name="rgbPresetName"
:style="3 === activeIndex ? viewportStyle : {}"
@upperRangeChange="upperRangeChange"
/>
<Viewport
ref="PET_MIP_CORONAL"
:index="4"
:active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo"
:series-info="petSeries"
:rendering-engine-id="renderingEngineId"
viewport-id="PET_MIP_CORONAL" :measure-datas="measureDatas"
:style="4 === activeIndex ? viewportStyle : {}"
@upperRangeChange="upperRangeChange"
/>
<Viewport ref="CT_AXIAL" :index="1" :active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="ctSeries"
:rendering-engine-id="renderingEngineId" viewport-id="CT_AXIAL" :volume="ctVolume"
:measure-datas="measureDatas" :style="1 === activeIndex ? viewportStyle : {}"
@upperRangeChange="upperRangeChange" />
<Viewport ref="PT_AXIAL" :index="2" :active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries"
:rendering-engine-id="renderingEngineId" viewport-id="PT_AXIAL" :volume="ptVolume"
:measure-datas="measureDatas" :style="2 === activeIndex ? viewportStyle : {}"
@upperRangeChange="upperRangeChange" />
<Viewport ref="FUSION_AXIAL" :index="3" :active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries"
:rendering-engine-id="renderingEngineId" viewport-id="FUSION_AXIAL" :volume="ptVolume"
:measure-datas="measureDatas" :rgb-preset-name="rgbPresetName" :style="3 === activeIndex ? viewportStyle : {}"
@upperRangeChange="upperRangeChange" />
<Viewport ref="PET_MIP_CORONAL" :index="4" :active-index="activeIndex"
:is-reading-show-subject-info="isReadingShowSubjectInfo" :series-info="petSeries"
:rendering-engine-id="renderingEngineId" viewport-id="PET_MIP_CORONAL" :measure-datas="measureDatas"
:style="4 === activeIndex ? viewportStyle : {}" @upperRangeChange="upperRangeChange" />
</div>
<!-- 表单 -->
<div class="form-container" style="overflow-y: auto;">
@ -273,19 +242,22 @@
<span style="margin-left:5px;">{{ taskBlindName }}</span>
</h3>
<TableQuestions ref="tableQuestions" />
<Questions ref="questions" @setNonTargetMeasurementStatus="setNonTargetMeasurementStatus" />
<TableQuestions ref="tableQuestions" @handleReadingChart="handleReadingChart" />
<Questions ref="questions" @setNonTargetMeasurementStatus="setNonTargetMeasurementStatus"
@handleReadingChart="handleReadingChart" />
</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">
<custom-wwwc-form :ww="activeCanvasWW" :wc="activeCanvasWC" @close="customWwc.visible = false" @setWwwc="setWwwc" />
<custom-wwwc-form :ww="activeCanvasWW" :wc="activeCanvasWC" @close="customWwc.visible = false"
@setWwwc="setWwwc" />
</el-dialog>
<el-dialog :visible.sync="fusion.visible" :close-on-click-modal="false" :title="$t('trials:lugano:button:record')"
width="850px">
<fusion-form @close="fusion.visible = false" />
</el-dialog>
<readingChart ref="readingChart" />
</div>
</template>
<script>
@ -333,6 +305,7 @@ import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunc
// import vtkOrientationMarkerWidget from '@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget'
import { mat4, vec3 } from 'gl-matrix'
import html2canvas from 'html2canvas'
import readingChart from '@/components/readingChart'
// import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'
// import vtkMath from '@kitware/vtk.js/Common/Core/Math'
// import CircleROITool from './tools/CircleROITool'
@ -420,7 +393,8 @@ export default {
Questions,
TableQuestions,
CustomWwwcForm,
FusionForm
FusionForm,
readingChart
},
data() {
return {
@ -582,6 +556,7 @@ export default {
this.screenshotWindow = window.open(routeData.href, '_blank')
})
window.addEventListener('beforeunload', e => { this.beforeUnloadHandler(e) })
document.addEventListener("click", this.foo);
},
beforeDestroy() {
if (this.screenshotWindow) {
@ -604,7 +579,21 @@ export default {
window.removeEventListener('beforeunload', e => { this.beforeUnloadHandler(e) })
},
methods: {
handleReadingChart(row) {
let { e, data } = row
let obj = Object.assign({}, data)
obj.TrialId = this.$route.query.trialId
obj.VisitTaskId = this.$route.query.visitTaskId
let zIndex = 9
if (obj.RowIndex) {
zIndex = 9999
}
this.$refs.readingChart.init(e, obj, zIndex)
},
foo() {
if (!this.$refs.readingChart) return false
this.$refs.readingChart.foo()
},
initPage() {
const resizeObserver = new ResizeObserver(() => {
if (element_ct.style.width) {
@ -1715,7 +1704,7 @@ export default {
},
voiChange(v) {
let viewportIds = ['FUSION_AXIAL', 'PT_AXIAL', 'PET_MIP_CORONAL']
viewportIds.map(viewportId=>{
viewportIds.map(viewportId => {
// const volumeId = viewportId === 'viewportId' ? ptVolumeId : ctVolumeId
const volumeId = ptVolumeId
const voiRange = { lower: 0, upper: v }
@ -1743,7 +1732,7 @@ export default {
async setColorMap(rgbPresetName) {
this.rgbPresetName = rgbPresetName
let viewports = ['FUSION_AXIAL', 'PT_AXIAL', 'PET_MIP_CORONAL']
viewports.map(v=>{
viewports.map(v => {
this.$refs[v].setPreset(this.rgbPresetName)
this.$refs[v].renderColorBar(this.rgbPresetName)
this.createColorBar(this.rgbPresetName, 'colorBarCanvas', 256, 15)
@ -1862,8 +1851,8 @@ export default {
const renderingEngine = getRenderingEngine(renderingEngineId)
const viewport = renderingEngine.getViewport(viewporId)
const { invert } = viewport.getProperties()
if ( this.isFusion ) {
viewport.setProperties({ invert: !invert }, volumeId )
if (this.isFusion) {
viewport.setProperties({ invert: !invert }, volumeId)
}
viewport.setProperties({ invert: !invert })
viewport.render()
@ -1987,7 +1976,7 @@ export default {
const viewport = renderingEngine.getViewport(viewportId)
const lower = v.wc - v.ww / 2
const upper = v.wc + v.ww / 2 - 1
viewport.setProperties({ voiRange: { upper: upper, lower: lower }})
viewport.setProperties({ voiRange: { upper: upper, lower: lower } })
viewport.render()
this.customWwc.visible = false
},

View File

@ -1,305 +1,219 @@
<template>
<div>
<div
v-if="!!question.GroupName && question.Type==='group'"
>
<div v-if="!!question.GroupName && question.Type === 'group'">
<h4 style="color: #ddd;padding: 5px 0px;margin: 0;">
{{ language==='en'?question.GroupEnName:question.GroupName }}
{{ language === 'en' ? question.GroupEnName : question.GroupName }}
</h4>
</div>
<template v-else-if="((question.QuestionType === 56) && question.IsBaseLineTask)" />
<template v-else>
<el-form-item
v-if="(question.ShowQuestion===1 && question.ParentTriggerValueList.includes(String(questionForm[question.ParentId]))) || question.ShowQuestion===0"
:label="`${question.QuestionName}`"
:prop="question.Id"
:rules="[
{ required: (question.IsRequired === 0 || (question.IsRequired ===1 && question.RelevanceId && (questionForm[question.RelevanceId] === question.RelevanceValue))) && question.Type!=='group' && question.Type!=='summary',
message: ['radio', 'select', 'checkbox'].includes(question.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']},
]"
:class="[question.Type==='group'?'mb':question.Type==='upload'?'uploadWrapper':'']"
>
v-if="(question.ShowQuestion === 1 && question.ParentTriggerValueList.includes(String(questionForm[question.ParentId]))) || question.ShowQuestion === 0"
:label="`${question.QuestionName}`" :prop="question.Id" :rules="[
{
required: (question.IsRequired === 0 || (question.IsRequired === 1 && question.RelevanceId && (questionForm[question.RelevanceId] === question.RelevanceValue))) && question.Type !== 'group' && question.Type !== 'summary',
message: ['radio', 'select', 'checkbox'].includes(question.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
},
]" :class="[question.Type === 'group' ? 'mb' : question.Type === 'upload' ? 'uploadWrapper' : '']">
<template v-if="question.QuestionType === 51 || question.QuestionType === 52">
<!-- question.QuestionType === 51 || question.QuestionType === 52 -->
<div style="display: flex;flex-direction: row;justify-content: flex-start;">
<el-input
v-if="question.Type==='calculation'"
v-model="questionForm[question.Id]"
disabled
style="width: 120px;"
>
<div style="display: flex;justify-content: space-between;" v-if="question.Type === 'calculation'">
<el-input v-model="questionForm[question.Id]" disabled style="width: 120px;">
<template v-if="question.Unit" slot="append">
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
</template>
<svg-icon v-if="question.ShowChartTypeEnum > 0" icon-class="readingChart"
class="svg-icon svg-readingChart" @click.stop="(e) => handleReadingChart({
e,
data: {
QuestionId: question.Id,
RowIndex: questionForm.RowIndex,
QuestionName: question.QuestionName
}
})" />
</el-input>
</div>
<!-- 测量 -->
<el-button v-if="(!questionForm[question.Id] && ((question.QuestionType === 51 && liverIsInsideVolume) || (question.QuestionType === 52 && lungIsInsideVolume)) && readingTaskState!== 2)" size="mini" type="text" @click="addAnnotation(question)">{{ $t('trials:lugano:button:addAnnotation') }}</el-button>
<el-button
v-if="(!questionForm[question.Id] && ((question.QuestionType === 51 && liverIsInsideVolume) || (question.QuestionType === 52 && lungIsInsideVolume)) && readingTaskState !== 2)"
size="mini" type="text" @click="addAnnotation(question)">{{ $t('trials:lugano:button:addAnnotation')
}}</el-button>
<!-- 清除标记 -->
<el-button v-if="(questionForm[question.Id] || (question.QuestionType === 51 && !liverIsInsideVolume) || (question.QuestionType === 52 && !lungIsInsideVolume)) && readingTaskState!== 2" size="mini" type="text" style="padding: 7px 5px;margin-left:5px;" @click="removeAnnotation(question)">{{ $t('trials:lugano:button:clearAnnotation') }}</el-button>
<el-button
v-if="(questionForm[question.Id] || (question.QuestionType === 51 && !liverIsInsideVolume) || (question.QuestionType === 52 && !lungIsInsideVolume)) && readingTaskState !== 2"
size="mini" type="text" style="padding: 7px 5px;margin-left:5px;" @click="removeAnnotation(question)">{{
$t('trials:lugano:button:clearAnnotation') }}</el-button>
<!-- 定位 -->
<el-button
v-if="(questionForm[question.Id] || (question.QuestionType === 51 && !liverIsInsideVolume) || (question.QuestionType === 52 && !lungIsInsideVolume))"
size="mini"
type="text"
style="padding: '7px 5px';margin-left:-5px;"
@click="locateAnnotation(question)"
>{{ $t('trials:lugano:button:locateAnnotation') }}</el-button>
size="mini" type="text" style="padding: '7px 5px';margin-left:-5px;"
@click="locateAnnotation(question)">{{
$t('trials:lugano:button:locateAnnotation') }}</el-button>
<!-- 保存 -->
<el-button v-if="readingTaskState!== 2 && question.SaveEnum === 1" size="mini" type="text" style="padding: '7px 5px';margin-left:-5px;" @click="saveAnnotation(question)">
<el-button v-if="readingTaskState !== 2 && question.SaveEnum === 1" size="mini" type="text"
style="padding: '7px 5px';margin-left:-5px;" @click="saveAnnotation(question)">
<!-- 未保存 -->
<el-tooltip class="item" effect="dark" :content="$t('trials:reading:button:unsaved')" placement="bottom">
<i class="el-icon-warning" style="color:red" />
</el-tooltip>
{{ $t('common:button:save') }}
</el-button>
<el-button v-if="!question.IsBaseLineTask" size="mini" type="text" style="padding: '7px 5px';margin-left:-5px;" @click="viewAnnotations(question)">{{ $t('trials:lugano:button:suvscreenshot') }}</el-button>
<el-button v-if="!question.IsBaseLineTask" size="mini" type="text"
style="padding: '7px 5px';margin-left:-5px;" @click="viewAnnotations(question)">{{
$t('trials:lugano:button:suvscreenshot') }}</el-button>
</div>
</template>
<template v-else-if="question.QuestionType === 53">
<el-input
v-if="question.Type==='calculation'"
v-model="questionForm[question.Id]"
disabled
>
<div style="display: flex;justify-content: space-between;" v-if="question.Type === 'calculation'">
<el-input v-model="questionForm[question.Id]" disabled>
<template v-if="question.Unit" slot="append">
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
</template>
</el-input>
<svg-icon v-if="question.ShowChartTypeEnum > 0" icon-class="readingChart" class="svg-icon svg-readingChart"
@click.stop="(e) => handleReadingChart({
e,
data: {
QuestionId: question.Id,
RowIndex: questionForm.RowIndex,
QuestionName: question.QuestionName
}
})" />
</div>
</template>
<template v-else-if="question.QuestionType === 55">
<el-select
v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 "
clearable
@change="((val)=>{formItemChange(val, question)})"
>
<el-select v-model="questionForm[question.Id]" :disabled="readingTaskState >= 2" clearable
@change="((val) => { formItemChange(val, question) })">
<el-option-group
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(question.DictionaryCode,parseFloat(question.LastTaskAnswer))}` : ''"
>
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(question.DictionaryCode, parseFloat(question.LastTaskAnswer))}` : ''">
<template>
<el-option
v-for="item of $d[question.DictionaryCode]"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
<el-option v-for="item of $d[question.DictionaryCode]" :key="item.id" :value="String(item.value)"
:label="item.label" />
</template>
</el-option-group>
</el-select>
</template>
<template v-else-if="question.QuestionType === 56">
<el-select
v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 "
clearable
@change="((val)=>{formItemChange(val, question)})"
>
<el-select v-model="questionForm[question.Id]" :disabled="readingTaskState >= 2" clearable
@change="((val) => { formItemChange(val, question) })">
<el-option-group
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${parseFloat(question.LastTaskAnswer) === 5 ? 'NA' : $fd(question.DictionaryCode,parseFloat(question.LastTaskAnswer))}` : ''"
>
<template v-if="pet5PS*1=== -1">
<el-option
v-for="item of $d[question.DictionaryCode]"
v-show="item.value !== 4"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${parseFloat(question.LastTaskAnswer) === 5 ? 'NA' : $fd(question.DictionaryCode, parseFloat(question.LastTaskAnswer))}` : ''">
<template v-if="pet5PS * 1 === -1">
<el-option v-for="item of $d[question.DictionaryCode]" v-show="item.value !== 4" :key="item.id"
:value="String(item.value)" :label="item.label" />
</template>
<template v-else>
<el-option
v-for="item of $d[question.DictionaryCode]"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
<el-option v-for="item of $d[question.DictionaryCode]" :key="item.id" :value="String(item.value)"
:label="item.label" />
</template>
</el-option-group>
</el-select>
</template>
<template v-else-if="question.QuestionType === 57">
<el-select
v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 "
clearable
@change="((val)=>{formItemChange(val, question)})"
>
<el-select v-model="questionForm[question.Id]" :disabled="readingTaskState >= 2" clearable
@change="((val) => { formItemChange(val, question) })">
<el-option-group
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(question.DictionaryCode,parseFloat(question.LastTaskAnswer))}` : ''"
>
<template v-if="pet5PS*1=== -1">
<el-option
v-for="item of $d[question.DictionaryCode]"
v-show="item.value !== 1"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(question.DictionaryCode, parseFloat(question.LastTaskAnswer))}` : ''">
<template v-if="pet5PS * 1 === -1">
<el-option v-for="item of $d[question.DictionaryCode]" v-show="item.value !== 1" :key="item.id"
:value="String(item.value)" :label="item.label" />
</template>
<template v-else>
<el-option
v-for="item of $d[question.DictionaryCode]"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
<el-option v-for="item of $d[question.DictionaryCode]" :key="item.id" :value="String(item.value)"
:label="item.label" />
</template>
</el-option-group>
</el-select>
</template>
<!-- 输入框 -->
<el-input
v-else-if="question.Type==='input'"
v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2"
/>
<el-input v-else-if="question.Type === 'input'" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2" />
<!-- 多行文本输入框 -->
<el-input
v-else-if="question.Type==='textarea'"
v-model="questionForm[question.Id]"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
maxlength="500"
:disabled="readingTaskState >= 2"
/>
<el-input v-else-if="question.Type === 'textarea'" v-model="questionForm[question.Id]" type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }" maxlength="500" :disabled="readingTaskState >= 2" />
<!-- 下拉框 -->
<el-select
v-else-if="question.Type==='select'"
v-model="questionForm[question.Id]"
<el-select v-else-if="question.Type === 'select'" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 || ((question.TableQuestionType === 2 || question.QuestionGenre === 2) && !!question.DictionaryCode) || question.QuestionType === 50"
clearable
@change="((val)=>{formItemChange(val, question)})"
>
clearable @change="((val) => { formItemChange(val, question) })">
<template v-if="question.TableQuestionType === 1">
<el-option
v-for="item in organList"
:key="item.Id"
:label="item[question.DataTableColumn]"
:value="item[question.DataTableColumn]"
/>
<el-option v-for="item in organList" :key="item.Id" :label="item[question.DataTableColumn]"
:value="item[question.DataTableColumn]" />
</template>
<template v-else-if="question.TableQuestionType === 3 || question.QuestionGenre === 3">
<el-option
v-for="item of $d[question.DictionaryCode]"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
<el-option v-for="item of $d[question.DictionaryCode]" :key="item.id" :value="String(item.value)"
:label="item.label" />
</template>
<template v-else-if="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && question.DictionaryCode">
<el-option
v-for="item of $d[question.DictionaryCode]"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
<template
v-else-if="(question.TableQuestionType === 2 || question.QuestionGenre === 2) && question.DictionaryCode">
<el-option v-for="item of $d[question.DictionaryCode]" :key="item.id" :value="String(item.value)"
:label="item.label" />
</template>
<template v-else>
<el-option
v-for="val in question.TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
/>
<el-option v-for="val in question.TypeValue.split('|')" :key="val" :label="val" :value="val" />
</template>
</el-select>
<!-- 单选 -->
<el-radio-group
v-else-if="question.Type==='radio'"
v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2"
@change="((val)=>{formItemChange(val, question)})"
>
<el-radio-group v-else-if="question.Type === 'radio'" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2" @change="((val) => { formItemChange(val, question) })">
<template v-if="question.DictionaryCode">
<el-radio
v-for="item of $d[question.DictionaryCode]"
:key="item.id"
:label="String(item.value)"
>
<el-radio v-for="item of $d[question.DictionaryCode]" :key="item.id" :label="String(item.value)">
{{ item.label }}
</el-radio>
</template>
<template v-else-if="question.TypeValue">
<el-radio
v-for="val in question.TypeValue.split('|')"
:key="val"
:label="val"
>
<el-radio v-for="val in question.TypeValue.split('|')" :key="val" :label="val">
{{ val }}
</el-radio>
</template>
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group
v-else-if="question.Type==='checkbox'"
v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2"
>
<el-checkbox
v-for="val in question.TypeValue.split('|')"
:key="val"
:label="val"
>
<el-checkbox-group v-else-if="question.Type === 'checkbox'" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2">
<el-checkbox v-for="val in question.TypeValue.split('|')" :key="val" :label="val">
{{ val }}
</el-checkbox>
</el-checkbox-group>
<!-- 数值 -->
<el-input-number
v-else-if="question.Type==='number'"
v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2"
/>
<el-input
v-else-if="question.Type==='calculation'"
v-model="questionForm[question.Id]"
disabled
/>
<div style="display: flex;justify-content: space-between;"
v-else-if="question.Type === 'calculation' || question.Type === 'number'">
<el-input-number v-if="question.Type === 'number'" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2" />
<el-input v-model="questionForm[question.Id]" disabled v-else />
<svg-icon v-if="question.ShowChartTypeEnum > 0" icon-class="readingChart" class="svg-icon svg-readingChart"
@click.stop="(e) => handleReadingChart({
e,
data: {
QuestionId: question.Id,
RowIndex: questionForm.RowIndex,
QuestionName: question.QuestionName
}
})" />
</div>
<!-- 上传图像 -->
<el-upload
v-if="question.Type==='upload'"
action
:accept="accept"
:limit="question.ImageCount"
:on-preview="handlePictureCardPreview"
:before-upload="handleBeforeUpload"
:http-request="uploadScreenshot"
list-type="picture-card"
:on-remove="handleRemove"
:file-list="fileList"
:class="{disabled:fileList.length >= question.ImageCount}"
:disabled="readingTaskState >= 2"
>
<el-upload v-if="question.Type === 'upload'" action :accept="accept" :limit="question.ImageCount"
:on-preview="handlePictureCardPreview" :before-upload="handleBeforeUpload" :http-request="uploadScreenshot"
list-type="picture-card" :on-remove="handleRemove" :file-list="fileList"
:class="{ disabled: fileList.length >= question.ImageCount }" :disabled="readingTaskState >= 2">
<i slot="default" class="el-icon-plus" />
<div slot="file" slot-scope="{file}">
<img
class="el-upload-list__item-thumbnail"
:src="OSSclientConfig.basePath + file.url"
alt=""
>
<img class="el-upload-list__item-thumbnail" :src="OSSclientConfig.basePath + file.url" alt="">
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click="handlePictureCardPreview(file)"
>
<span class="el-upload-list__item-preview" @click="handlePictureCardPreview(file)">
<i class="el-icon-zoom-in" />
</span>
<span
v-if="readingTaskState < 2"
class="el-upload-list__item-delete"
@click="handleRemove(file)"
>
<span v-if="readingTaskState < 2" class="el-upload-list__item-delete" @click="handleRemove(file)">
<i class="el-icon-delete" />
</span>
</span>
</div>
</el-upload>
<el-dialog
v-if="question.Type==='upload'"
append-to-body
:visible.sync="imgVisible"
width="600px"
>
<el-dialog v-if="question.Type === 'upload'" append-to-body :visible.sync="imgVisible" width="600px">
<el-image :src="imageUrl" width="100%">
<div slot="placeholder" class="image-slot">
加载中<span class="dot">...</span>
@ -309,19 +223,11 @@
</el-form-item>
</template>
<template v-for="item of question.Childrens">
<QuestionItem
v-if="item.QuestionClassify === 0"
:key="item.Id"
:question="item"
:reading-task-state="readingTaskState"
:question-form="questionForm"
:visit-task-id="visitTaskId"
:pet5p-s="pet5PS"
:lung-is-inside-volume="lungIsInsideVolume"
:liver-is-inside-volume="liverIsInsideVolume"
@setFormItemData="setFormItemData"
@resetFormItemData="resetFormItemData"
/>
<QuestionItem v-if="item.QuestionClassify === 0" :key="item.Id" :question="item"
:reading-task-state="readingTaskState" :question-form="questionForm" :visit-task-id="visitTaskId"
:pet5p-s="pet5PS" :lung-is-inside-volume="lungIsInsideVolume" :liver-is-inside-volume="liverIsInsideVolume"
@setFormItemData="setFormItemData" @resetFormItemData="resetFormItemData"
@handleReadingChart="handleReadingChart" />
</template>
</div>
</template>
@ -406,6 +312,9 @@ export default {
}
},
methods: {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
formItemChange(v, question) {
if (question.QuestionType === 55) {
this.$emit('setFormItemData', { key: question.Id, val: v })
@ -441,7 +350,7 @@ export default {
.then(() => {
FusionEvent.$emit('removeAnnotation', question)
})
.catch(() => {})
.catch(() => { })
},
locateAnnotation(question) {
FusionEvent.$emit('locateAnnotation', question)
@ -503,26 +412,32 @@ export default {
}
</script>
<style lang="scss" scoped>
.mb{
.mb {
margin-bottom: 0px;
}
.disabled{
.disabled {
::v-deep .el-upload--picture-card {
display: none;
}
}
.uploadWrapper{
.uploadWrapper {
display: flex;
flex-direction: column;
align-items: flex-start;
}
::v-deep .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner {
background-color: #646464a1;
}
::v-deep .el-input-group__append, .el-input-group__prepend{
}
::v-deep .el-input-group__append,
.el-input-group__prepend {
padding: 0 5px;
}
::v-deep .el-select.is-disabled .el-input__inner{
}
::v-deep .el-select.is-disabled .el-input__inner {
background-color: #646464a1;
}
}
</style>

View File

@ -1,29 +1,17 @@
<template>
<div v-loading="loading" class="ecrf-wrapper">
<el-form
v-if="questions.length > 0"
ref="questions"
size="small"
:model="questionForm"
>
<el-form v-if="questions.length > 0" ref="questions" size="small" :model="questionForm">
<template v-for="question of questions">
<QuestionItem
v-if="question.QuestionClassify === 0"
:key="question.Id"
:question="question"
:question-form="questionForm"
:reading-task-state="readingTaskState"
:visit-task-id="visitTaskId"
:pet5p-s="questionForm[pet5PSId]"
:lung-is-inside-volume="lungIsInsideVolume"
:liver-is-inside-volume="liverIsInsideVolume"
@setFormItemData="setFormItemData"
@resetFormItemData="resetFormItemData"
/>
<QuestionItem v-if="question.QuestionClassify === 0" :key="question.Id" :question="question"
:question-form="questionForm" :reading-task-state="readingTaskState" :visit-task-id="visitTaskId"
:pet5p-s="questionForm[pet5PSId]" :lung-is-inside-volume="lungIsInsideVolume"
:liver-is-inside-volume="liverIsInsideVolume" @setFormItemData="setFormItemData"
@resetFormItemData="resetFormItemData" @handleReadingChart="handleReadingChart" />
</template>
<el-form-item v-if="readingTaskState < 2">
<div style="text-align:right">
<el-button :disabled="!questionFormChangeState" :type="questionFormChangeState ? 'primary' : null" size="mini" @click="handleSave">{{ $t('common:button:save') }}</el-button>
<el-button :disabled="!questionFormChangeState" :type="questionFormChangeState ? 'primary' : null" size="mini"
@click="handleSave">{{ $t('common:button:save') }}</el-button>
</div>
</el-form-item>
</el-form>
@ -132,6 +120,9 @@ export default {
FusionEvent.$off('locateAnnotation')
},
methods: {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
getQuestions1() {
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
@ -185,7 +176,7 @@ export default {
this.setChild(v.Childrens)
}
})
console.log(this.questionForm,questions)
console.log(this.questionForm, questions)
this.questions = questions
this.setPet5PSCommentDisplay()
this.measurements = []
@ -759,39 +750,43 @@ export default {
}
</script>
<style lang="scss" scoped>
.ecrf-wrapper{
.ecrf-wrapper {
::v-deep .el-form-item__label{
::v-deep .el-form-item__label {
color: #c3c3c3;
text-align: left;
}
::v-deep .el-input__inner{
::v-deep .el-input__inner {
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
::v-deep .el-textarea__inner{
::v-deep .el-textarea__inner {
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
::v-deep .el-form-item{
::v-deep .el-form-item {
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
::v-deep .el-form-item__content{
::v-deep .el-form-item__content {
flex: 1;
}
::v-deep .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini,
.el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
.el-select{
.el-form-item__content .el-select {
width: 100%;
}
}
</style>
}
</style>

View File

@ -1,12 +1,6 @@
<template>
<el-form
v-if="isRender"
ref="measurementForm"
v-loading="loading"
:model="questionForm"
size="mini"
class="measurement-form"
>
<el-form v-if="isRender" ref="measurementForm" v-loading="loading" :model="questionForm" size="mini"
class="measurement-form">
<div class="base-dialog-body">
<div style="display: flex;justify-content: space-between;">
<h3 v-if="lesionName" style="color: #ddd;padding: 5px 0px;margin: 0;">
@ -19,184 +13,151 @@
</div>
</div>
<el-form-item
:label="$t('trials:reading:title:lesionType')"
prop="LesionType"
:rules="[
{ required:true,message: $t('common:ruleMessage:select'), trigger: ['blur']},
]"
>
<el-form-item :label="$t('trials:reading:title:lesionType')" prop="LesionType" :rules="[
{ required: true, message: $t('common:ruleMessage:select'), trigger: ['blur'] },
]">
<!-- 下拉框 -->
<el-select
v-model="questionForm.LesionType"
filterable
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask"
@change="((val)=>{lesionTypeChange(val)})"
>
<el-select v-model="questionForm.LesionType" filterable
:disabled="!isCurrentTask || readingTaskState >= 2 || !isBaseLineTask"
@change="((val) => { lesionTypeChange(val) })">
<el-option
v-for="item of $d.LesionType"
v-show="!(isBaseLineTask && item.value === 2)"
:key="item.id"
:value="item.value"
:label="item.label"
/>
<el-option v-for="item of $d.LesionType" v-show="!(isBaseLineTask && item.value === 2)" :key="item.id"
:value="item.value" :label="item.label" />
</el-select>
</el-form-item>
<template v-for="qs in questions">
<el-form-item
v-if="qs.ShowQuestion!==2 && qs.QuestionClassify === 0"
:key="qs.Id"
:label="`${qs.QuestionName}`"
:prop="qs.Id"
:rules="[
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (questionForm[qs.RelevanceId] === qs.RelevanceValue)) || (qs.QuestionMark === 6 && questionForm.IsCanEditPosition === true) || (questionForm.IsCanEditPosition && qs.QuestionMark === 10)) && qs.Type!=='group' && qs.Type!=='summary',
message:['radio', 'select', 'checkbox'].includes(qs.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur','change']},
]"
>
<el-form-item v-if="qs.ShowQuestion !== 2 && qs.QuestionClassify === 0" :key="qs.Id"
:label="`${qs.QuestionName}`" :prop="qs.Id" :rules="[
{
required: (qs.IsRequired === 0 || (qs.IsRequired === 1 && qs.RelevanceId && (questionForm[qs.RelevanceId] === qs.RelevanceValue)) || (qs.QuestionMark === 6 && questionForm.IsCanEditPosition === true) || (questionForm.IsCanEditPosition && qs.QuestionMark === 10)) && qs.Type !== 'group' && qs.Type !== 'summary',
message: ['radio', 'select', 'checkbox'].includes(qs.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
},
]">
<!-- {{ isCurrentTaskAdd }}
{{ questionForm.IsCanEditPosition }} -->
<!-- 输入框 -->
<template v-if="qs.Type==='input' || qs.Type==='number'">
<template v-if="qs.Type === 'input' || qs.Type === 'number'">
<div style="display: flex;justify-content: space-between;">
<!-- {{ ((qs.QuestionMark === 6 && isCurrentTaskAdd === 'False') || (qs.QuestionMark === 6 && isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition)) }} -->
<el-input
v-if="qs.Type==='input' || qs.Type==='number'"
v-model="questionForm[qs.Id]"
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName))"
@change="((val)=>{formItemChange(val, qs)})"
>
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
<el-input v-if="qs.Type === 'input' || qs.Type === 'number'" v-model="questionForm[qs.Id]"
:disabled="!isCurrentTask || readingTaskState >= 2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName))"
@change="((val) => { formItemChange(val, qs) })">
<template v-if="(qs.QuestionMark === 0 || qs.QuestionMark === 1) && qs.Unit" slot="append">
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
</template>
<svg-icon v-if="qs.ShowChartTypeEnum > 0" icon-class="readingChart" class="svg-icon svg-readingChart"
@click.stop="(e) => handleReadingChart({
e,
data: {
TableQuestionId: qs.Id,
RowIndex: questionForm.RowIndex,
QuestionName: qs.QuestionName
}
})" />
</el-input>
</div>
</template>
<!-- 多行文本输入框 -->
<el-input
v-if="qs.Type==='textarea'"
v-model="questionForm[qs.Id]"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
maxlength="500"
:disabled="!isCurrentTask || readingTaskState>=2"
@change="((val)=>{formItemChange(val, qs)})"
/>
<el-input v-if="qs.Type === 'textarea'" v-model="questionForm[qs.Id]" type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }" maxlength="500" :disabled="!isCurrentTask || readingTaskState >= 2"
@change="((val) => { formItemChange(val, qs) })" />
<!-- 下拉框 -->
<el-select
v-if="qs.Type==='select'"
v-model="questionForm[qs.Id]"
filterable
<el-select v-if="qs.Type === 'select'" v-model="questionForm[qs.Id]" filterable
:placeholder="qs.QuestionMark === 8 ? $t('common:placeholder:selectorsearch') : $t('common:placeholder:select')"
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False'|| !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))"
@change="((val)=>{formItemChange(val, qs)})"
>
:disabled="!isCurrentTask || readingTaskState >= 2 || qs.QuestionMark === 0 || qs.QuestionMark === 1 || qs.QuestionMark === 2 || qs.QuestionMark === 5 || (qs.QuestionMark === 6 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answers.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answers.SplitOrMergeLesionName))"
@change="((val) => { formItemChange(val, qs) })">
<template v-if="qs.QuestionMark === 8" #prefix>
<span style="padding-left: 5px;">
<i class="el-icon-search" />
</span>
</template>
<template v-if="qs.TableQuestionType === 1">
<el-option
v-for="item in organList"
:key="item.Id"
:label="item[qs.DataTableColumn]"
:value="item[qs.DataTableColumn]"
/>
<el-option v-for="item in organList" :key="item.Id" :label="item[qs.DataTableColumn]"
:value="item[qs.DataTableColumn]" />
</template>
<template v-else-if="qs.DictionaryCode && qs.QuestionMark !== 7">
<el-option
v-for="item of $d[qs.DictionaryCode]"
:key="item.id"
:value="item.value"
:label="item.label"
/>
<el-option v-for="item of $d[qs.DictionaryCode]" :key="item.id" :value="item.value" :label="item.label" />
</template>
<template v-else>
<el-option
v-for="val in qs.TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
/>
<el-option v-for="val in qs.TypeValue.split('|')" :key="val" :label="val" :value="val" />
</template>
</el-select>
<!-- 单选 -->
<el-radio-group
v-if="qs.Type==='radio'"
v-model="questionForm[qs.id]"
:disabled="!isCurrentTask || readingTaskState>=2"
>
<el-radio
v-for="val in qs.options.split('|')"
:key="val"
:label="val"
>
<el-radio-group v-if="qs.Type === 'radio'" v-model="questionForm[qs.id]"
:disabled="!isCurrentTask || readingTaskState >= 2">
<el-radio v-for="val in qs.options.split('|')" :key="val" :label="val">
{{ val }}
</el-radio>
</el-radio-group>
<template v-if="qs.QuestionMark === 20 && qs.Type==='calculation'">
<template v-if="qs.QuestionMark === 20 && qs.Type === 'calculation'">
<div style="display: flex;flex-direction: row;justify-content: flex-start;">
<el-input
v-if="qs.Type==='calculation'"
v-model="questionForm[qs.Id]"
disabled
style="width:120px;"
>
<div style="display: flex;justify-content: space-between;">
<el-input v-if="qs.Type === 'calculation'" v-model="questionForm[qs.Id]" disabled style="width:120px;">
<template v-if="qs.Unit" slot="append">
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
</template>
</el-input>
<svg-icon v-if="qs.ShowChartTypeEnum > 0" icon-class="readingChart" class="svg-icon svg-readingChart"
@click.stop="(e) => handleReadingChart({
e,
data: {
TableQuestionId: qs.Id,
RowIndex: questionForm.RowIndex,
QuestionName: qs.QuestionName
}
})" />
</div>
<!-- <span style="color:#409eff;cursor: pointer" @click="previewImages(answers.RowId)">
{{ $t('trials:lugano:button:suvscreenshot') }}
</span> -->
<el-button v-if="!isBaseLineTask" type="text" @click="previewImages(answers.RowId)">{{ $t('trials:lugano:button:suvscreenshot') }}</el-button>
<el-button v-if="!isBaseLineTask" type="text" @click="previewImages(answers.RowId)">{{
$t('trials:lugano:button:suvscreenshot') }}</el-button>
</div>
</template>
<el-input
v-else-if="qs.Type==='calculation' && qs.QuestionMark !== 20"
v-model="questionForm[qs.Id]"
disabled
>
<div style="display: flex;justify-content: space-between;"
v-else-if="qs.Type === 'calculation' && qs.QuestionMark !== 20">
<el-input v-model="questionForm[qs.Id]" disabled>
<template v-if="qs.Unit" slot="append">
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
</template>
</el-input>
<svg-icon v-if="qs.ShowChartTypeEnum > 0" icon-class="readingChart" class="svg-icon svg-readingChart"
@click.stop="(e) => handleReadingChart({
e,
data: {
TableQuestionId: qs.Id,
RowIndex: questionForm.RowIndex,
QuestionName: qs.QuestionName
}
})" />
</div>
</el-form-item>
</template>
</div>
<div
v-if="isCurrentTask && readingTaskState<2"
class="base-dialog-footer"
style="text-align:right;margin-top:10px;"
>
<div v-if="isCurrentTask && readingTaskState < 2" class="base-dialog-footer"
style="text-align:right;margin-top:10px;">
<!-- 清除标记 -->
<el-button
v-if="questionForm.OtherMeasureData"
size="mini"
@click="handleDeleteMeasureData"
>
<el-button v-if="questionForm.OtherMeasureData" size="mini" @click="handleDeleteMeasureData">
{{ $t('trials:reading:button:removeMark') }}
</el-button>
<!-- 删除 -->
<el-button
v-if="isCurrentTaskAdd !== 'False'"
size="mini"
@click="handleDelete"
>
<el-button v-if="isCurrentTaskAdd !== 'False'" size="mini" @click="handleDelete">
{{ $t('common:button:delete') }}
</el-button>
<!-- 保存 -->
<el-button
size="mini"
@click="handleSave"
>
<el-button size="mini" @click="handleSave">
{{ $t('common:button:save') }}
</el-button>
</div>
@ -288,6 +249,9 @@ export default {
},
methods: {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
async initForm(isRerender = false) {
const loading = this.$loading({ fullscreen: true })
this.questions.forEach(item => {
@ -446,8 +410,8 @@ export default {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {})
.catch(() => {})
.then(() => { })
.catch(() => { })
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
return
}
@ -459,7 +423,7 @@ export default {
this.$confirm(msg, {
type: 'warning',
showCancelButton: false,
callback: action => {}
callback: action => { }
})
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
return
@ -786,7 +750,7 @@ export default {
this.$confirm(this.$t('trials:reading:lugano:warnning:outsideVolume'), {
type: 'warning',
showCancelButton: false,
callback: action => {}
callback: action => { }
})
return
@ -800,7 +764,7 @@ export default {
this.$confirm(this.$t('trials:reading:lugano:warnning:cannotMeasuredSUV'), {
type: 'warning',
showCancelButton: false,
callback: action => {}
callback: action => { }
})
return
}
@ -813,7 +777,7 @@ export default {
this.$confirm(this.$t('trials:reading:lugano:warnning:suvis0'), {
type: 'warning',
showCancelButton: false,
callback: action => {}
callback: action => { }
})
return
}
@ -1054,47 +1018,57 @@ export default {
}
</script>
<style lang="scss" scoped>
.measurement-form{
::v-deep .el-form-item__label{
.measurement-form {
::v-deep .el-form-item__label {
color: #c3c3c3;
// text-align: left;
}
::v-deep .el-input .el-input__inner{
::v-deep .el-input .el-input__inner {
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
::v-deep .el-form-item{
::v-deep .el-form-item {
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
::v-deep .el-form-item__content{
::v-deep .el-form-item__content {
flex: 1;
}
::v-deep .el-input.is-disabled .el-input__inner{
::v-deep .el-input.is-disabled .el-input__inner {
background-color: #646464a1;
}
::v-deep .el-input-group__append, .el-input-group__prepend{
::v-deep .el-input-group__append,
.el-input-group__prepend {
padding: 0 10px;
}
::v-deep .el-select.is-disabled .el-input__inner{
::v-deep .el-select.is-disabled .el-input__inner {
background-color: #646464a1;
}
::v-deep .el-button--mini, .el-button--mini.is-round {
::v-deep .el-button--mini,
.el-button--mini.is-round {
padding: 7px 10px;
}
.el-form-item__content
.el-select{
.el-form-item__content .el-select {
width: 100%;
}
.input-width1{
width: calc(100% - 60px)!important;
.input-width1 {
width: calc(100% - 60px) !important;
}
.input-width2{
.input-width2 {
width: 100% !important;
}
}
</style>

View File

@ -3,75 +3,88 @@
<div class="container">
<!-- 测量问题 -->
<template v-for="(qs,index) in questions">
<template v-for="(qs, index) in questions">
<div v-if="qs.QuestionClassify === 0" :key="index" v-loading="loading" class="lesions lesions_wrapper">
<h4 v-if="qs.Type === 'group'" style="color: #ddd;padding: 5px 0px;margin: 0;">
{{ language==='en'?qs.GroupEnName:qs.GroupName }}
{{ language === 'en' ? qs.GroupEnName : qs.GroupName }}
</h4>
<div class="lesion_list">
<template v-for="item in qs.Childrens">
<div v-if="item.QuestionClassify === 0 && !(isBaseLineTask && item.LesionType === 2)" :key="item.Id">
<div v-if="item.Type === 'table'" class="flex-row" style="margin:3px 0;">
<div class="title">{{ item.QuestionName }}</div>
<div v-if="readingTaskState<2 && (isBaseLineTask || item.LesionType === 2)" class="add-icon" @click.prevent="handleAdd(item)">
<div class="title">{{ item.QuestionName }}
<svg-icon v-if="item.LesionType === 0" icon-class="readingChart"
class="svg-icon svg-readingChart-mini" @click.stop="(e) => handleReadingChart({
e,
data: {
ReportChartTypeEnum: 0,
QuestionName: item.QuestionName
},
})" />
</div>
<div v-if="readingTaskState < 2 && (isBaseLineTask || item.LesionType === 2)" class="add-icon"
@click.prevent="handleAdd(item)">
<i class="el-icon-plus" />
</div>
</div>
<!-- @change="handleCollapseChange(qs.Childrens,item)" -->
<el-collapse
v-if="item.Type === 'table' && item.TableQuestions"
v-model="activeName"
accordion
@change="handleCollapseChange"
>
<el-collapse-item
v-for="(q,i) in item.TableQuestions.Answers"
:key="`${item.Id}_${q.RowIndex}`"
<el-collapse v-if="item.Type === 'table' && item.TableQuestions" v-model="activeName" accordion
@change="handleCollapseChange">
<el-collapse-item v-for="(q, i) in item.TableQuestions.Answers" :key="`${item.Id}_${q.RowIndex}`"
:name="`${item.Id}_${q.RowIndex}`"
@contextmenu.prevent.native="collapseRightClick($event,q,item.Id,q.RowIndex)"
>
@contextmenu.prevent.native="collapseRightClick($event, q, item.Id, q.RowIndex)">
<template slot="title">
<div style="width:300px;position: relative;" :style="{color:(activeName===item.Id+q.RowIndex?'#ffeb3b':'#fff')}">
<div style="width:300px;position: relative;"
:style="{ color: (activeName === item.Id + q.RowIndex ? '#ffeb3b' : '#fff') }">
{{ getLesionName(item.OrderMark,q.RowIndex) }}
{{ getLesionName(item.OrderMark, q.RowIndex) }}
<!-- 未保存 -->
<el-tooltip v-if="readingTaskState<2 && parseInt(item.TableQuestions.Answers[i].saveTypeEnum) === 0" class="item" effect="dark" :content="$t('trials:reading:button:unsaved')" placement="bottom">
<el-tooltip
v-if="readingTaskState < 2 && parseInt(item.TableQuestions.Answers[i].saveTypeEnum) === 0"
class="item" effect="dark" :content="$t('trials:reading:button:unsaved')" placement="bottom">
<i class="el-icon-warning" style="color:red" />
</el-tooltip>
<!-- 信息不完整 -->
<el-tooltip v-if="readingTaskState<2 && parseInt(item.TableQuestions.Answers[i].saveTypeEnum) ===1" class="item" effect="dark" :content="$t('trials:reading:button:incompleteInfor')" placement="bottom">
<el-tooltip
v-if="readingTaskState < 2 && parseInt(item.TableQuestions.Answers[i].saveTypeEnum) === 1"
class="item" effect="dark" :content="$t('trials:reading:button:incompleteInfor')"
placement="bottom">
<i class="el-icon-warning" style="color:#ff9800" />
</el-tooltip>
<div style="position: absolute;left: 50px;top: 2px;">
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
<div style="font-size: 11px;width:220px;height: 30px;">
<div
v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px"
>
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark" :content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<div v-if="item.TableQuestions.Answers[i].lesionPart"
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px">
<el-tooltip v-if="!!item.TableQuestions.Answers[i].lesionPart" class="item" effect="dark"
:content="item.TableQuestions.Answers[i].lesionPart" placement="bottom">
<span>{{ item.TableQuestions.Answers[i].lesionPart }}</span>
</el-tooltip>
</div>
<div style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:50px">
<span v-if="item.LesionType === 0">
{{ $fd('TargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else-if="item.LesionType === 1">
{{ $fd('NoTargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
<span v-else>
{{ $fd('NewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
</span>
</div>
<div style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px;color:red;">
<template v-if="item.TableQuestions.Answers[i].suvMax && !isNaN(parseFloat(item.TableQuestions.Answers[i].suvMax))">
<div
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px;color:red;">
<template
v-if="item.TableQuestions.Answers[i].suvMax && !isNaN(parseFloat(item.TableQuestions.Answers[i].suvMax))">
{{ item.TableQuestions.Answers[i].suvMax }} SUV
</template>
</div>
</div>
</div>
<div v-if="((item.LesionType === 0 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 1 && [0,1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0)) && item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False'" style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
<div
v-if="((item.LesionType === 0 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 1 && [0, 1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0)) && item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False'"
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
<!-- 分裂 -->
<!-- <el-tooltip v-show="readingTaskState<2 && !!item.TableQuestions.Answers[i].RowId && !isBaseLineTask" class="item" :content="$t('trials:reading:button:split')" placement="left">
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;" @click.stop="handleSplit(item.TableQuestions.Answers[i].RowId,item.Id)" />
@ -81,25 +94,14 @@
</div>
</template>
<QuestionForm
:ref="`${item.Id}_${q.RowIndex}`"
:questions="item.TableQuestions.Questions"
:answers="item.TableQuestions.Answers[i]"
:lesion-type="item.LesionType"
:order-mark="item.OrderMark"
:table-questions="tableQuestions"
:row-index="String(q.RowIndex)"
:question-name="item.QuestionName"
:parent-qs-id="item.Id"
:visit-task-id="visitTaskId"
:is-current-task="isCurrentTask"
:reading-task-state="readingTaskState"
:is-base-line-task="isBaseLineTask"
@changeLesionType="changeLesionType"
@resetQuestions="resetQuestions"
@determineExistsUnsavedLession="determineExistsUnsavedLession"
@close="close"
/>
<QuestionForm :ref="`${item.Id}_${q.RowIndex}`" :questions="item.TableQuestions.Questions"
:answers="item.TableQuestions.Answers[i]" :lesion-type="item.LesionType"
:order-mark="item.OrderMark" :table-questions="tableQuestions" :row-index="String(q.RowIndex)"
:question-name="item.QuestionName" :parent-qs-id="item.Id" :visit-task-id="visitTaskId"
:is-current-task="isCurrentTask" :reading-task-state="readingTaskState"
:is-base-line-task="isBaseLineTask" @changeLesionType="changeLesionType"
@resetQuestions="resetQuestions" @determineExistsUnsavedLession="determineExistsUnsavedLession"
@close="close" @handleReadingChart="handleReadingChart" />
</el-collapse-item>
</el-collapse>
@ -170,6 +172,9 @@ export default {
beforeDestroy() {
},
methods: {
handleReadingChart(e) {
this.$emit('handleReadingChart', e)
},
initList(isRerender = false) {
this.loading = true
this.activeName = ''
@ -345,7 +350,7 @@ export default {
.then(() => {
this.split(rowId, questionId)
})
.catch(() => {})
.catch(() => { })
} else {
//
this.$confirm(this.$t('trials:reading:warnning:msg4'), {
@ -355,7 +360,7 @@ export default {
.then(() => {
this.split(rowId, questionId)
})
.catch(() => {})
.catch(() => { })
}
}
}
@ -429,7 +434,7 @@ export default {
this.$confirm(msg, {
type: 'warning',
showCancelButton: false,
callback: action => {}
callback: action => { }
})
return
}
@ -439,7 +444,7 @@ export default {
this.$confirm(msg, {
type: 'warning',
showCancelButton: false,
callback: action => {}
callback: action => { }
})
} else {
// saveTypeEnum: 0
@ -582,7 +587,7 @@ export default {
// await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: questionsObj.oldLesionType, rowIndex: questionsObj.rowIndex, visitTaskId: this.visitTaskId })
this.questions = this.findQuestionAndRemoveLesion(this.questions, { lesionType: questionsObj.oldLesionType, rowIndex: questionsObj.rowIndex })
// saveTypeEnum: 0
var lesionObj = { }
var lesionObj = {}
var questionObj = questionsObj.questionForm
//
var targetObj = this.tableQuestions.find(item => item.LesionType === questionsObj.newLesionType)
@ -817,19 +822,20 @@ export default {
}
</script>
<style lang="scss" scoped>
.measurement-wrapper{
.measurement-wrapper {
// .container{
// padding: 10px;
// }
.title{
.title {
padding: 5px;
font-weight: bold;
color: #ddd;
font-size: 15px;
}
.add-icon{
.add-icon {
padding: 5px;
font-weight: bold;
color: #ddd;
@ -838,42 +844,49 @@ export default {
margin-bottom: 2px;
cursor: pointer;
}
.add-icon:hover{
.add-icon:hover {
background-color: #607d8b;
}
.flex-row{
.flex-row {
display: flex;
flex-direction: row;
justify-content: space-between;
background-color: #424242;
}
.lesion_list{
.lesion_list {
position: relative;
}
.el-collapse{
border-bottom:none;
border-top:none;
::v-deep .el-collapse-item{
background-color: #000!important;
.el-collapse {
border-bottom: none;
border-top: none;
::v-deep .el-collapse-item {
background-color: #000 !important;
color: #ddd;
}
::v-deep .el-collapse-item__header{
background-color: #000!important;
::v-deep .el-collapse-item__header {
background-color: #000 !important;
color: #ddd;
border-bottom-color:#5a5a5a;
border-bottom-color: #5a5a5a;
padding-left: 5px;
height: 35px;
line-height: 35px;
}
::v-deep .el-collapse-item__wrap{
background-color: #000!important;
::v-deep .el-collapse-item__wrap {
background-color: #000 !important;
color: #ddd;
}
::v-deep .el-collapse-item__content{
width:260px;
::v-deep .el-collapse-item__content {
width: 260px;
position: absolute;
top: 0px;
right: 0px;
@ -882,7 +895,7 @@ export default {
z-index: 1;
color: #ddd;
padding: 5px;
background-color:#1e1e1e;
background-color: #1e1e1e;
}
}

View File

@ -31,7 +31,16 @@
v-show="!(isBaseLineTask && item.LesionType === 2) && !(isBaseLineTask && item.LesionType === 3)"
:key="item.Id">
<div v-if="item.Type === 'table'" class="flex-row" style="margin:3px 0;">
<div class="title">{{ item.QuestionName }}</div>
<div class="title">{{ item.QuestionName }}
<svg-icon v-if="item.LesionType === 4" icon-class="readingChart"
class="svg-icon svg-readingChart-mini" @click.stop="(e) => handleReadingChart({
e,
data: {
ReportChartTypeEnum: 0,
QuestionName: item.QuestionName
},
})" />
</div>
<div v-if="readingTaskState < 2 && (isBaseLineTask || item.LesionType === 2)" class="add-icon"
@click.prevent="handleAdd(item)">
<i class="el-icon-plus" />

View File

@ -737,7 +737,7 @@ export default {
line-height: 25px;
text-align: center;
border: 1px solid #607d8b;
top: 65px;
top: 45px;
right: -25px;
z-index: 99;
color: #d5d5d5;

View File

@ -42,14 +42,14 @@
:style="{ color: ((scope.row.isLymphNodes === 1 && scope.row.QuestionMark === 1) || (scope.row.isLymphNodes === 0 && scope.row.QuestionMark === 0)) && (scope.row.LesionType === 0 || scope.row.LesionType === 5) ? '#f66' : '#fff' }">{{
scope.row.QuestionName }}
<svg-icon
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && scope.row.ReportLayType === 1)"
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && scope.row.ReportLayType === 1) || (scope.row.LesionType === 4 && scope.row.ReportLayType === 1)"
icon-class="readingChart" class="svg-icon svg-readingChart-mini" @click.stop="(e) => handleReadingChart({
e,
data: {
QuestionId: scope.row.RowIndex ? null : scope.row.QuestionId,
TableQuestionId: scope.row.RowIndex ? scope.row.TableQuestionId : null,
RowIndex: scope.row.RowIndex ? scope.row.RowIndex : null,
ReportChartTypeEnum: scope.row.LesionType === 0 && scope.row.ReportLayType === 1 ? 0 : null,
ReportChartTypeEnum: (scope.row.LesionType === 0 && scope.row.ReportLayType === 1) || (scope.row.LesionType === 4 && scope.row.ReportLayType === 1) ? 0 : null,
QuestionName: scope.row.QuestionName
}
})" />
@ -169,7 +169,8 @@
<span v-else>{{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}</span>
</template>
<template v-else-if="scope.row.QuestionType === 22">
{{ scope.row.Answers[task.VisitTaskId] === '-1' ? $t('trials:readingReport:title:unknow') :
{{ scope.row.Answers[task.VisitTaskId] === '-2' ? "NA" : scope.row.Answers[task.VisitTaskId] === '-1' ?
$t('trials:readingReport:title:unknow') :
scope.row.Answers[task.VisitTaskId] }}
</template>

View File

@ -206,7 +206,8 @@
:initUrl="scope.row.Answers[task.VisitTaskId]"></customize-report-page-upload>
</template>
<template v-else-if="scope.row.QuestionType === 22">
{{ scope.row.Answers[task.VisitTaskId] === '-1' ? '未知' : scope.row.Answers[task.VisitTaskId] }}
{{ scope.row.Answers[task.VisitTaskId] === '-2' ? "NA" : scope.row.Answers[task.VisitTaskId] === '-1' ?
'未知' : scope.row.Answers[task.VisitTaskId] }}
</template>
<template v-else-if="scope.row.DictionaryCode">
{{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}

View File

@ -168,7 +168,8 @@
<span v-else>{{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}</span>
</template>
<template v-else-if="scope.row.QuestionType === 22">
{{ scope.row.Answers[task.VisitTaskId] === '-1' ? $t('trials:readingReport:title:unknow') :
{{ scope.row.Answers[task.VisitTaskId] === '-2' ? "NA" : scope.row.Answers[task.VisitTaskId] === '-1' ?
$t('trials:readingReport:title:unknow') :
scope.row.Answers[task.VisitTaskId] }}
</template>

View File

@ -1,37 +1,26 @@
<template>
<el-form v-if="globalForm.taskList.length > 0" ref="globalRuleForm" :model="globalForm" class="global-form">
<el-table
v-loading="loading"
:data="globalForm.taskList"
>
<el-table-column
prop="BlindName"
:label="$t('trials:globalReview:table:visitName')"
show-overflow-tooltip
width="150"
/>
<el-table v-loading="loading" :data="globalForm.taskList">
<el-table-column prop="BlindName" :label="$t('trials:globalReview:table:visitName')" show-overflow-tooltip
width="150" />
<!-- 评估结果 -->
<el-table-column
:label="$t('trials:medicalFeedback:table:visitPointCount')"
align="center"
prop=""
>
<el-table-column :label="$t('trials:medicalFeedback:table:visitPointCount')" align="center" prop="">
<template>
<el-table-column
v-for="(qs,index) in globalInfo.evaluationQsList"
:key="index"
prop=""
:label="qs"
show-overflow-tooltip
width="200"
>
<el-table-column v-for="(qs, index) in globalInfo.evaluationQsList" :key="index" prop="" :label="qs"
show-overflow-tooltip width="200">
<template slot-scope="scope">
<template v-if="(scope.row.IsBaseLine && (scope.row.BeforeQuestionList[index].GlobalReadingShowType ===1 || scope.row.BeforeQuestionList[index].GlobalReadingShowType ===5)) || (!scope.row.IsBaseLine && (scope.row.BeforeQuestionList[index].GlobalReadingShowType ===2 || scope.row.BeforeQuestionList[index].GlobalReadingShowType ===6)) || (scope.row.BeforeQuestionList[index].GlobalReadingShowType ===0 || scope.row.BeforeQuestionList[index].GlobalReadingShowType ===4)">
<div v-if="scope.row.BeforeQuestionList.length>index && scope.row.BeforeQuestionList[index].Answer">
<template
v-if="(scope.row.IsBaseLine && (scope.row.BeforeQuestionList[index].GlobalReadingShowType === 1 || scope.row.BeforeQuestionList[index].GlobalReadingShowType === 5)) || (!scope.row.IsBaseLine && (scope.row.BeforeQuestionList[index].GlobalReadingShowType === 2 || scope.row.BeforeQuestionList[index].GlobalReadingShowType === 6)) || (scope.row.BeforeQuestionList[index].GlobalReadingShowType === 0 || scope.row.BeforeQuestionList[index].GlobalReadingShowType === 4)">
<div v-if="scope.row.BeforeQuestionList.length > index && scope.row.BeforeQuestionList[index].Answer">
<span v-if="scope.row.BeforeQuestionList[index].DictionaryCode">
{{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
{{
$fd(scope.row.BeforeQuestionList[index].DictionaryCode, parseInt(scope.row.BeforeQuestionList[index].Answer))
}}
</span>
<span v-else-if="scope.row.BeforeQuestionList[index].QuestionType === 22">{{ scope.row.BeforeQuestionList[index].Answer === '-1' ? $t('trials:readingReport:title:unknow') : scope.row.BeforeQuestionList[index].Answer }}</span>
<span v-else-if="scope.row.BeforeQuestionList[index].QuestionType === 22">{{
scope.row.BeforeQuestionList[index].Answer === '-2' ? "NA" :
scope.row.BeforeQuestionList[index].Answer === '-1' ? $t('trials:readingReport:title:unknow') :
scope.row.BeforeQuestionList[index].Answer }}</span>
<span v-else>{{ scope.row.BeforeQuestionList[index].Answer }}</span>
</div>
</template>
@ -41,72 +30,47 @@
</el-table-column>
<!-- 评估结果 -->
<el-table-column
:label="$t('trials:globalReview:table:evaluationRes')"
align="center"
prop=""
>
<el-table-column :label="$t('trials:globalReview:table:evaluationRes')" align="center" prop="">
<template>
<el-table-column
v-for="(qs,index) in globalInfo.adjustedQsList"
v-if="qs.isShow"
:key="index"
prop=""
:label="qs.questionName"
:width="index > 0 ? '300' : '200'"
>
<el-table-column v-for="(qs, index) in globalInfo.adjustedQsList" v-if="qs.isShow" :key="index" prop=""
:label="qs.questionName" :width="index > 0 ? '300' : '200'">
<template slot-scope="scope">
<div v-if="readingTaskState<2 && (scope.row.AfterQuestionList[index].GlobalReadingShowType === 0 || (scope.row.IsBaseLine && scope.row.AfterQuestionList[index].GlobalReadingShowType === 1) || (!scope.row.IsBaseLine && scope.row.AfterQuestionList[index].GlobalReadingShowType === 2))">
<div
v-if="readingTaskState < 2 && (scope.row.AfterQuestionList[index].GlobalReadingShowType === 0 || (scope.row.IsBaseLine && scope.row.AfterQuestionList[index].GlobalReadingShowType === 1) || (!scope.row.IsBaseLine && scope.row.AfterQuestionList[index].GlobalReadingShowType === 2))">
<!-- <span v-if="(scope.row.IsBaseLine && scope.row.AfterQuestionList[index].LimitEdit === 2) || (!scope.row.IsBaseLine && scope.row.AfterQuestionList[index].LimitEdit === 1)">
{{ $fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].VisitAnswer)) }}
</span> -->
<el-form-item
:prop="`${scope.$index}${scope.row.AfterQuestionList[index].QuestionId?scope.row.AfterQuestionList[index].QuestionId:scope.row.AfterQuestionList[index].GlobalAnswerType}`"
label=""
:rules="[
{ required: parseInt(scope.row.AfterQuestionList[index].GlobalAnswerType) !== 1 || scope.row.AfterQuestionList[index].isChange,message: $t('common:ruleMessage:specify'), trigger: ['change','blur']},
]"
>
<label v-if="scope.row.AfterQuestionList[index].GlobalAnswerType !== 1 || scope.row.AfterQuestionList[index].isChange" />
<template v-if="scope.row.AfterQuestionList[index].GlobalAnswerType === 0 ">
:prop="`${scope.$index}${scope.row.AfterQuestionList[index].QuestionId ? scope.row.AfterQuestionList[index].QuestionId : scope.row.AfterQuestionList[index].GlobalAnswerType}`"
label="" :rules="[
{ required: parseInt(scope.row.AfterQuestionList[index].GlobalAnswerType) !== 1 || scope.row.AfterQuestionList[index].isChange, message: $t('common:ruleMessage:specify'), trigger: ['change', 'blur'] },
]">
<label
v-if="scope.row.AfterQuestionList[index].GlobalAnswerType !== 1 || scope.row.AfterQuestionList[index].isChange" />
<template v-if="scope.row.AfterQuestionList[index].GlobalAnswerType === 0">
<!-- 下拉框 -->
<!-- cope.row.AfterQuestionList[index].Answer -->
<el-select
v-model="globalForm[`${scope.$index}${scope.row.AfterQuestionList[index].QuestionId?scope.row.AfterQuestionList[index].QuestionId:String(scope.row.AfterQuestionList[index].GlobalAnswerType)}`]"
style="width:90%;"
@change="(v) => {
v-model="globalForm[`${scope.$index}${scope.row.AfterQuestionList[index].QuestionId ? scope.row.AfterQuestionList[index].QuestionId : String(scope.row.AfterQuestionList[index].GlobalAnswerType)}`]"
style="width:90%;" @change="(v) => {
selectChange(v, scope.row, index)
}"
>
}">
<template v-if="scope.row.AfterQuestionList[index].TypeValue">
<el-option
v-for="val in scope.row.AfterQuestionList[index].TypeValue.split('|')"
:key="val"
:label="val"
:value="val"
/>
<el-option v-for="val in scope.row.AfterQuestionList[index].TypeValue.split('|')" :key="val"
:label="val" :value="val" />
</template>
<template v-if="scope.row.AfterQuestionList[index].DictionaryCode">
<el-option
v-for="item of $d[scope.row.AfterQuestionList[index].DictionaryCode]"
<el-option v-for="item of $d[scope.row.AfterQuestionList[index].DictionaryCode]"
v-show="(scope.row.IsBaseLine && scope.row.AfterQuestionList[index].GlobalAnswerType === 0 && item.value === 5) || (!scope.row.IsBaseLine && scope.row.AfterQuestionList[index].GlobalAnswerType === 0 && item.value !== 5)"
:key="item.id"
:value="String(item.value)"
:label="item.label"
/>
:key="item.id" :value="String(item.value)" :label="item.label" />
</template>
</el-select>
</template>
<!-- 全局阅片备注 GlobalAnswerType:1 -->
<el-input
v-if="scope.row.AfterQuestionList[index].GlobalAnswerType === 1"
v-model="globalForm[`${scope.$index}${scope.row.AfterQuestionList[index].QuestionId?scope.row.AfterQuestionList[index].QuestionId:String(scope.row.AfterQuestionList[index].GlobalAnswerType)}`]"
maxlength="300"
show-word-limit
type="textarea"
style="width:90%;"
:autosize="{ minRows: 2, maxRows: 4}"
/>
<el-input v-if="scope.row.AfterQuestionList[index].GlobalAnswerType === 1"
v-model="globalForm[`${scope.$index}${scope.row.AfterQuestionList[index].QuestionId ? scope.row.AfterQuestionList[index].QuestionId : String(scope.row.AfterQuestionList[index].GlobalAnswerType)}`]"
maxlength="300" show-word-limit type="textarea" style="width:90%;"
:autosize="{ minRows: 2, maxRows: 4 }" />
</el-form-item>
</div>
<div v-else>
@ -115,7 +79,9 @@
{{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
</span>
<span v-else-if="scope.row.AfterQuestionList[index].DictionaryCode">
{{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
{{
$fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].Answer))
}}
</span>
<span v-else>{{ scope.row.AfterQuestionList[index].Answer }}</span>
</div>
@ -124,17 +90,10 @@
</template>
</el-table-column>
<el-table-column
:label="$t('common:action:action')"
width="200"
>
<el-table-column :label="$t('common:action:action')" width="200">
<template slot-scope="scope">
<el-button
circle
:title="$t('trials:globalReview:table:view')"
icon="el-icon-view"
@click="handleView(scope.row)"
/>
<el-button circle :title="$t('trials:globalReview:table:view')" icon="el-icon-view"
@click="handleView(scope.row)" />
<!-- v-if="readingTaskState < 2 && scope.row.AgreeOrNot[0].Answer==='0'" -->
<!-- <el-button
v-if="readingTaskState < 2 "
@ -232,11 +191,11 @@ export default {
if (i.QuestionId) {
obj.questionId = i.QuestionId
obj.globalAnswerType = i.GlobalAnswerType
obj.answer = this.globalForm[ `${index}${i.QuestionId}`]
obj.answer = this.globalForm[`${index}${i.QuestionId}`]
} else {
obj.questionId = ''
obj.globalAnswerType = i.GlobalAnswerType
obj.answer = this.globalForm[ `${index}${i.GlobalAnswerType}`]
obj.answer = this.globalForm[`${index}${i.GlobalAnswerType}`]
}
answerList.push(obj)
})
@ -259,7 +218,7 @@ export default {
} else {
resolve(false)
}
} catch(e) {
} catch (e) {
console.log(e)
this.loading = false
resolve(false)
@ -278,14 +237,17 @@ export default {
color: #F56C6C;
margin-right: 4px;
}
::v-deep .el-form-item--medium .el-form-item__content{
::v-deep .el-form-item--medium .el-form-item__content {
display: flex;
}
.global-form{
::v-deep .el-form-item__content{
.global-form {
::v-deep .el-form-item__content {
padding-bottom: 10px;
}
::v-deep .form-item .el-form-item__error{
::v-deep .form-item .el-form-item__error {
top: 60%;
}
}

View File

@ -5,53 +5,41 @@
<el-button v-if="auditInfo.IsExistsClinicalData" type="text" @click="previewCD">
{{ $t('trials:adReview:title:clinicalData') }}
</el-button>
<el-button v-if="auditInfo.GlobalInfo.OtherGlobalTaskId" type="text" @click="handleView(auditInfo.GlobalInfo.OtherGlobalTaskId)">{{ $t('trials:medicalFeedback:title:otherReader') }}</el-button>
<el-button v-if="auditInfo.GlobalInfo.OtherGlobalTaskId" type="text"
@click="handleView(auditInfo.GlobalInfo.OtherGlobalTaskId)">{{ $t('trials:medicalFeedback:title:otherReader')
}}</el-button>
<!-- 关联裁判任务 -->
<el-button v-if="auditInfo.GlobalInfo.JudgeTaskName" type="text" @click="handleView(auditInfo.GlobalInfo.JudgeTaskId)">{{ auditInfo.GlobalInfo.JudgeTaskName }}</el-button>
<el-button v-if="auditInfo.GlobalInfo.JudgeTaskName" type="text"
@click="handleView(auditInfo.GlobalInfo.JudgeTaskId)">{{ auditInfo.GlobalInfo.JudgeTaskName }}</el-button>
</div>
<el-table
v-if="rowData.CriterionType === 10"
:data="taskList"
>
<el-table-column
prop="BlindName"
:label="$t('trials:medicalFeedback:table:taskBlindName')"
show-overflow-tooltip
width="150"
>
<el-table v-if="rowData.CriterionType === 10" :data="taskList">
<el-table-column prop="BlindName" :label="$t('trials:medicalFeedback:table:taskBlindName')" show-overflow-tooltip
width="150">
<template slot-scope="scope">
<el-button
type="text"
@click="handleView(scope.row.VisitTaskId)"
>
<el-button type="text" @click="handleView(scope.row.VisitTaskId)">
{{ scope.row.BlindName }}
</el-button>
</template>
</el-table-column>
<!-- 访视点计数 -->
<el-table-column
:label="$t('trials:medicalFeedback:table:visitPointCount')"
align="center"
prop=""
show-overflow-tooltip
>
<el-table-column :label="$t('trials:medicalFeedback:table:visitPointCount')" align="center" prop=""
show-overflow-tooltip>
<template>
<el-table-column
v-for="(qs,index) in evaluationQsList"
:key="index"
prop=""
:label="qs"
show-overflow-tooltip
width="150"
>
<el-table-column v-for="(qs, index) in evaluationQsList" :key="index" prop="" :label="qs" show-overflow-tooltip
width="150">
<template slot-scope="scope">
<div v-if="scope.row.BeforeQuestionList.length>index && scope.row.BeforeQuestionList[index].Answer">
<div v-if="scope.row.BeforeQuestionList.length > index && scope.row.BeforeQuestionList[index].Answer">
<span v-if="scope.row.BeforeQuestionList[index].DictionaryCode">
{{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
{{
$fd(scope.row.BeforeQuestionList[index].DictionaryCode, parseInt(scope.row.BeforeQuestionList[index].Answer))
}}
</span>
<span v-else-if="scope.row.BeforeQuestionList[index].QuestionType === 22">{{ scope.row.BeforeQuestionList[index].Answer === '-1' ? $t('trials:medicalFeedback:table:unKnow') : scope.row.BeforeQuestionList[index].Answer }}</span>
<span v-else-if="scope.row.BeforeQuestionList[index].QuestionType === 22">{{
scope.row.BeforeQuestionList[index].Answer === '-2' ? "NA" : scope.row.BeforeQuestionList[index].Answer
=== '-1' ? $t('trials:medicalFeedback:table:unKnow') : scope.row.BeforeQuestionList[index].Answer
}}</span>
<span v-else>{{ scope.row.BeforeQuestionList[index].Answer }}</span>
</div>
</template>
@ -60,48 +48,35 @@
</el-table-column>
<!-- 是否同意访视结果 -->
<el-table-column
v-for="(qs, index) in agreeOrNotList"
:key="index"
prop=""
:label="$t('trials:medicalFeedback:table:agreeToVisitPointCount')"
show-overflow-tooltip
width="170"
>
<el-table-column v-for="(qs, index) in agreeOrNotList" :key="index" prop=""
:label="$t('trials:medicalFeedback:table:agreeToVisitPointCount')" show-overflow-tooltip width="170">
<template slot-scope="scope">
<el-tag v-if="parseInt(scope.row.AgreeOrNot[0].Answer) === 1" type="primary">
{{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
{{ $fd('ReadingYesOrNo', parseInt(scope.row.AgreeOrNot[0].Answer)) }}
</el-tag>
<el-tag v-else-if="parseInt(scope.row.AgreeOrNot[0].Answer) === 0" type="danger"> {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}</el-tag>
<el-tag v-else-if="parseInt(scope.row.AgreeOrNot[0].Answer) === 0" type="danger"> {{
$fd('ReadingYesOrNo', parseInt(scope.row.AgreeOrNot[0].Answer)) }}</el-tag>
<span v-else />
</template>
</el-table-column>
<!-- 评估结果 -->
<el-table-column
:label="$t('trials:medicalFeedback:table:assessmentResults')"
align="center"
prop=""
show-overflow-tooltip
>
<el-table-column :label="$t('trials:medicalFeedback:table:assessmentResults')" align="center" prop=""
show-overflow-tooltip>
<template>
<el-table-column
v-for="(qs,index) in adjustedQsList"
:key="index"
prop=""
:label="qs"
show-overflow-tooltip
width="150"
>
<el-table-column v-for="(qs, index) in adjustedQsList" :key="index" prop="" :label="qs" show-overflow-tooltip
width="150">
<template slot-scope="scope">
<!-- {{ scope.row.AfterQuestionList.length>index?scope.row.AfterQuestionList[index].Answer:'' }} -->
<div v-if="scope.row.AfterQuestionList.length>index && scope.row.AfterQuestionList[index].Answer">
<div v-if="scope.row.AfterQuestionList.length > index && scope.row.AfterQuestionList[index].Answer">
<span v-if="scope.row.AfterQuestionList[index].GlobalAnswerType === 3">
{{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
</span>
<span v-else-if="scope.row.AfterQuestionList[index].DictionaryCode">
{{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
{{
$fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].Answer))
}}
</span>
<span v-else>{{ scope.row.AfterQuestionList[index].Answer }}</span>
</div>
@ -110,60 +85,35 @@
</template>
</el-table-column>
<el-table-column
:label="$t('common:action:action')"
width="100"
>
<el-table-column :label="$t('common:action:action')" width="100">
<template slot-scope="scope">
<el-button
circle
:title="$t('trials:medicalFeedback:table:view')"
icon="el-icon-view"
@click="handleView(scope.row.VisitTaskId)"
/>
<el-button circle :title="$t('trials:medicalFeedback:table:view')" icon="el-icon-view"
@click="handleView(scope.row.VisitTaskId)" />
</template>
</el-table-column>
</el-table>
<el-table
v-else
:data="taskList"
>
<el-table v-else :data="taskList">
<!-- 访视名称 -->
<el-table-column
prop="BlindName"
:label="$t('trials:globalReview:table:visitName')"
show-overflow-tooltip
width="150"
>
<el-table-column prop="BlindName" :label="$t('trials:globalReview:table:visitName')" show-overflow-tooltip
width="150">
<template slot-scope="scope">
<el-button
type="text"
@click="handleView(scope.row.VisitTaskId)"
>
<el-button type="text" @click="handleView(scope.row.VisitTaskId)">
{{ scope.row.BlindName }}
</el-button>
</template>
</el-table-column>
<!-- 评估结果 -->
<el-table-column
:label="$t('trials:globalReview:table:evaluationRes')"
align="center"
prop=""
>
<el-table-column :label="$t('trials:globalReview:table:evaluationRes')" align="center" prop="">
<template>
<el-table-column
v-for="(qs,index) in evaluationQsList"
:key="index"
prop=""
:label="qs"
show-overflow-tooltip
width="150"
>
<el-table-column v-for="(qs, index) in evaluationQsList" :key="index" prop="" :label="qs" show-overflow-tooltip
width="150">
<template slot-scope="scope">
<div v-if="scope.row.BeforeQuestionList.length>index && scope.row.BeforeQuestionList[index].Answer">
<div v-if="scope.row.BeforeQuestionList.length > index && scope.row.BeforeQuestionList[index].Answer">
<span v-if="scope.row.BeforeQuestionList[index].DictionaryCode">
{{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
{{
$fd(scope.row.BeforeQuestionList[index].DictionaryCode, parseInt(scope.row.BeforeQuestionList[index].Answer))
}}
</span>
<span v-else>{{ scope.row.BeforeQuestionList[index].Answer }}</span>
</div>
@ -172,46 +122,33 @@
</template>
</el-table-column>
<!-- 是否同意访视结果 -->
<el-table-column
v-for="(qs,index) in agreeOrNotList"
:key="index"
prop=""
:label="$t('trials:globalReview:table:isAgreeEvaluationRes')"
show-overflow-tooltip
width="170"
>
<el-table-column v-for="(qs, index) in agreeOrNotList" :key="index" prop=""
:label="$t('trials:globalReview:table:isAgreeEvaluationRes')" show-overflow-tooltip width="170">
<template slot-scope="scope">
<el-tag v-if="parseInt(scope.row.AgreeOrNot[0].Answer) === 1" type="primary">
{{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
{{ $fd('ReadingYesOrNo', parseInt(scope.row.AgreeOrNot[0].Answer)) }}
</el-tag>
<el-tag v-else-if="parseInt(scope.row.AgreeOrNot[0].Answer) === 0" type="danger"> {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}</el-tag>
<el-tag v-else-if="parseInt(scope.row.AgreeOrNot[0].Answer) === 0" type="danger"> {{
$fd('ReadingYesOrNo', parseInt(scope.row.AgreeOrNot[0].Answer)) }}</el-tag>
<span v-else />
</template>
</el-table-column>
<!-- 调整后结果 -->
<el-table-column
:label="$t('trials:globalReview:table:adjustedRes')"
align="center"
prop=""
>
<el-table-column :label="$t('trials:globalReview:table:adjustedRes')" align="center" prop="">
<template>
<el-table-column
v-for="(qs,index) in adjustedQsList"
:key="index"
prop=""
:label="qs"
show-overflow-tooltip
width="150"
>
<el-table-column v-for="(qs, index) in adjustedQsList" :key="index" prop="" :label="qs" show-overflow-tooltip
width="150">
<template slot-scope="scope">
<div v-if="scope.row.AfterQuestionList.length>index && scope.row.AfterQuestionList[index].Answer">
<div v-if="scope.row.AfterQuestionList.length > index && scope.row.AfterQuestionList[index].Answer">
<span v-if="scope.row.AfterQuestionList[index].GlobalAnswerType === 3">
{{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
</span>
<span v-else-if="scope.row.AfterQuestionList[index].DictionaryCode">
{{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
{{
$fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].Answer))
}}
</span>
<span v-else>{{ scope.row.AfterQuestionList[index].Answer }}</span>
</div>
@ -220,18 +157,11 @@
</template>
</el-table-column>
<el-table-column
:label="$t('common:action:action')"
width="120"
:fixed="adjustedQsList.length > 4 ? 'right' : false"
>
<el-table-column :label="$t('common:action:action')" width="120"
:fixed="adjustedQsList.length > 4 ? 'right' : false">
<template slot-scope="scope">
<el-button
circle
:title="$t('trials:globalReview:table:view')"
icon="el-icon-view"
@click="handleView(scope.row.VisitTaskId)"
/>
<el-button circle :title="$t('trials:globalReview:table:view')" icon="el-icon-view"
@click="handleView(scope.row.VisitTaskId)" />
</template>
</el-table-column>
</el-table>
@ -320,7 +250,7 @@ export default {
var isReadingTaskViewInOrder = this.rowData.IsReadingTaskViewInOrder
var trialReadingCriterionId = this.rowData.TrialReadingCriterionId
var path = ''
if (readingTool === 0 || readingTool === 2 ) {
if (readingTool === 0 || readingTool === 2) {
path = `/readingDicoms?TrialReadingCriterionId=${trialReadingCriterionId}&trialId=${trialId}&subjectCode=${this.rowData.SubjectCode}&subjectId=${this.rowData.SubjectId}&visitTaskId=${visitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&TokenKey=${token}&key=${new Date().getTime()}`
} else {
path = `/noneDicomReading?TrialReadingCriterionId=${trialReadingCriterionId}&trialId=${trialId}&subjectCode=${this.rowData.SubjectCode}&subjectId=${this.rowData.SubjectId}&visitTaskId=${visitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&TokenKey=${token}&key=${new Date().getTime()}`

View File

@ -40,7 +40,7 @@
<!-- 受试者中止状态 -->
<el-form-item style="margin-bottom: 10px" :label="$t('trials:crcUpload:table:IsSubjectQuit')">
<el-select v-model="searchData.IsSubjectQuit" clearable style="width: 120px">
<el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.label" />
<el-option v-for="item of $d.Subject_Visit_Status" :value="item.value" :label="item.label" :key="item.label" />
</el-select>
</el-form-item>
<!-- 审核状态 -->

View File

@ -34,7 +34,8 @@
<!-- 受试者中止状态 -->
<el-form-item style="margin-bottom: 10px" :label="$t('trials:qcCheck:table:IsSubjectQuit')">
<el-select v-model="searchData.IsSubjectQuit" clearable style="width: 120px">
<el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.label" />
<el-option v-for="item of $d.Subject_Visit_Status" :value="item.value" :label="item.label"
:key="item.label" />
</el-select>
</el-form-item>
<!-- 审核状态 -->