阅片报告中数值的统计与可视化
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
ca44352b9e
commit
3243b33b33
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<div id="readingChart" class="readingChart" v-show="visible" :style="{
|
||||
<div :id="key" class="readingChart" v-show="visible" :style="{
|
||||
'z-index': zIndex
|
||||
}" :loading="loading">
|
||||
<div ref="chartContainer" style="width: 490px; height: 290px;"></div>
|
||||
}">
|
||||
<div ref="chartContainer" style="width: 490px; height: 290px;" v-loading="loading"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -32,32 +32,35 @@ export default {
|
|||
visible: false,
|
||||
zIndex: 9,
|
||||
chart: null,
|
||||
loading: false
|
||||
loading: false,
|
||||
key: 'readingChart'
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
init(event, obj, zIndex = 9) {
|
||||
this.loading = true
|
||||
this.zIndex = zIndex
|
||||
// 设置菜单出现的位置
|
||||
// 具体显示位置根据自己需求进行调节
|
||||
this.visible = true
|
||||
let readingChart = document.querySelector("#readingChart");
|
||||
let chaY = document.body.clientHeight - event.clientY;
|
||||
let chaX = document.body.clientWidth - event.clientX;
|
||||
// 防止菜单太靠底,根据可视高度调整菜单出现位置
|
||||
if (chaY < 250) {
|
||||
readingChart.style.top = event.clientY - 220 + "px";
|
||||
} else {
|
||||
readingChart.style.top = event.clientY + "px";
|
||||
let { key } = obj
|
||||
if (key) {
|
||||
this.key = key
|
||||
}
|
||||
if (chaX < 150) {
|
||||
readingChart.style.left = event.clientX - 520 + "px";
|
||||
} else {
|
||||
readingChart.style.left = event.clientX + 15 + "px";
|
||||
}
|
||||
this.getInfo(obj)
|
||||
// this.initChart()
|
||||
// document.addEventListener("click", this.foo); // 给整个document添加监听鼠标事件,点击任何位置执行foo方法
|
||||
this.$nextTick(() => {
|
||||
this.visible = true
|
||||
let readingChart = document.querySelector(`#${this.key}`);
|
||||
let chaY = document.body.clientHeight - event.clientY;
|
||||
let chaX = document.body.clientWidth - event.clientX;
|
||||
if (chaY < 250) {
|
||||
readingChart.style.top = event.clientY - 220 + "px";
|
||||
} else {
|
||||
readingChart.style.top = event.clientY + "px";
|
||||
}
|
||||
if (chaX < 500) {
|
||||
readingChart.style.left = event.clientX - 520 + "px";
|
||||
} else {
|
||||
readingChart.style.left = event.clientX + 15 + "px";
|
||||
}
|
||||
this.getInfo(obj)
|
||||
})
|
||||
},
|
||||
async getInfo(data) {
|
||||
try {
|
||||
|
|
@ -70,7 +73,7 @@ export default {
|
|||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
let obj = {
|
||||
xAxisData: res.Result.VisitTaskNameList || [],
|
||||
xAxisData: res.Result.LatestScanDateList || [],
|
||||
series: []
|
||||
}
|
||||
res.Result.ChartDataList.forEach(item => {
|
||||
|
|
@ -101,8 +104,32 @@ export default {
|
|||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
xAxis: { data: obj.xAxisData },
|
||||
yAxis: { type: 'value' },
|
||||
xAxis: {
|
||||
data: obj.xAxisData,
|
||||
axisLine: { // 设置 x 轴线颜色
|
||||
lineStyle: {
|
||||
color: '#fff',
|
||||
}
|
||||
},
|
||||
axisLabel: { // 设置 x 轴文字颜色
|
||||
textStyle: {
|
||||
color: '#fff'
|
||||
}
|
||||
}
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
axisLabel: {
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#fff',
|
||||
}
|
||||
}
|
||||
},
|
||||
series: obj.series
|
||||
};
|
||||
// 4. 使用配置项渲染图表
|
||||
|
|
@ -129,7 +156,8 @@ export default {
|
|||
max-width: 500px;
|
||||
font-size: 14px;
|
||||
display: inline-block;
|
||||
background: #fff;
|
||||
background: #000;
|
||||
border: 1px solid #ebeef5;
|
||||
border-radius: 4px;
|
||||
position: fixed;
|
||||
padding: 10px 6px;
|
||||
|
|
|
|||
|
|
@ -365,3 +365,10 @@ body .el-table th.gutter {
|
|||
margin-left: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.svg-readingChart-mini {
|
||||
width: 18px !important;
|
||||
height: 20px !important;
|
||||
vertical-align: -0.4em !important;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
|
@ -457,32 +457,41 @@
|
|||
<div class="form-wrapper" v-show="listShow">
|
||||
<RecistBMQuestionList v-if="CriterionType === 17" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<IRecistQuestionList v-else-if="CriterionType === 3" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<PCWGQuestionList v-else-if="CriterionType === 10" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<LuganoQuestionList v-else-if="CriterionType === 2" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<LuganoWithoutPETQuestionList v-else-if="CriterionType === 18" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<RecistQuestionList v-else-if="CriterionType === 1" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
|
||||
<IVUSList v-else-if="CriterionType === 19" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<OCTList v-else-if="CriterionType === 20" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<MRIPDFF v-else-if="CriterionType === 21" ref="measurementList"
|
||||
:question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum"
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo" />
|
||||
:is-show="isShow" :is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<h2 v-else style="color:#ddd">
|
||||
Developing...
|
||||
</h2>
|
||||
|
|
@ -1149,6 +1158,9 @@ export default {
|
|||
})
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async handleSubmitKeyDoc() {
|
||||
try {
|
||||
let data = {
|
||||
|
|
|
|||
|
|
@ -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="questionName" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||||
|
|
@ -19,179 +13,118 @@
|
|||
</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 && !(isFirstChangeTask && (lesionType === 2 || lesionType === 5 || lesionType === 6)))"
|
||||
@change="((val)=>{lesionTypeChange(val)})"
|
||||
>
|
||||
<el-select v-model="questionForm.LesionType" filterable
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2 || (!isBaseLineTask && !(isFirstChangeTask && (lesionType === 2 || lesionType === 5 || lesionType === 6)))"
|
||||
@change="((val) => { lesionTypeChange(val) })">
|
||||
|
||||
<el-option
|
||||
v-for="item of $d.LesionType"
|
||||
<el-option v-for="item of $d.LesionType"
|
||||
v-show="(isBaseLineTask && (item.value === 0 || item.value === 1)) || (!isBaseLineTask && ((isFirstChangeTask && (item.value === 5 || item.value === 6)) || !isFirstChangeTask))"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
: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-for="qs in questions" v-show="qs.ShowQuestion !== 2" :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']
|
||||
},
|
||||
]">
|
||||
|
||||
<!-- 输入框 -->
|
||||
<template v-if="qs.Type==='input' || qs.Type==='number'">
|
||||
<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)) || (isFirstChangeTask && (lesionType === 5 || lesionType === 6) && (qs.QuestionMark === 8 || qs.QuestionMark === 10 ))"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<template v-if="qs.Type === 'input' || qs.Type === 'number'">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<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)) || (isFirstChangeTask && (lesionType === 5 || lesionType === 6) && (qs.QuestionMark === 8 || qs.QuestionMark === 10))"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<template v-if="(qs.QuestionMark === 0 || qs.QuestionMark === 1) && 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
</template>
|
||||
<!-- 多行文本输入框 -->
|
||||
<el-input
|
||||
v-if="qs.Type==='textarea'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
: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 }" :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)) || (qs.QuestionMark === 7 && isFirstChangeTask ) || (qs.QuestionMark === 8 && isFirstChangeTask)"
|
||||
@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)) || (qs.QuestionMark === 7 && isFirstChangeTask) || (qs.QuestionMark === 8 && isFirstChangeTask)"
|
||||
@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 && isBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="((lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="((lesionType === 0 && item.value === 0) || (lesionType === 1 && (item.value === 0))) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && isFirstChangeTask && (lesionType === 5 || lesionType ===6)">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="((lesionType === 5 && item.value ===1) || (lesionType === 6 && (item.value ===0))) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template
|
||||
v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && isFirstChangeTask && (lesionType === 5 || lesionType === 6)">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="((lesionType === 5 && item.value === 1) || (lesionType === 6 && (item.value === 0))) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answers.LastTaskState))}` : ''"
|
||||
>
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode, parseFloat(answers.LastTaskState))}` : ''">
|
||||
<!-- 首次分裂的病灶只能选择存在 -->
|
||||
<template v-if="answers.IsFristAdd=== 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="((lesionType === 0 && item.value === 0) || (lesionType === 1 && item.value === 0 ) || (lesionType === 2 && item.value === 0 )|| (lesionType === 5 && item.value === 1 )|| (lesionType === 6 && item.value === 0 )|| (lesionType === 7 && item.value === 0 )|| (lesionType === 8 && item.value === 1 )) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-if="answers.IsFristAdd === 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="((lesionType === 0 && item.value === 0) || (lesionType === 1 && item.value === 0) || (lesionType === 2 && item.value === 0) || (lesionType === 5 && item.value === 1) || (lesionType === 6 && item.value === 0) || (lesionType === 7 && item.value === 0) || (lesionType === 8 && item.value === 1)) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="isCurrentTaskAdd=== 'True' && (lesionType === 2 || lesionType === 8)">
|
||||
<template v-else-if="isCurrentTaskAdd === 'True' && (lesionType === 2 || lesionType === 8)">
|
||||
<!-- 首次添加的新病灶不能为无法评估和消失 -->
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(((item.value === 0 || item.value === 1) && lesionType === 2) || ((item.value === 1 || item.value === 2) && lesionType === 8)) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="isCurrentTaskAdd=== 'False' && lesionType === 1 && answers.LastTaskState !== '4'">
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
<template v-else-if="isCurrentTaskAdd === 'False' && lesionType === 1 && answers.LastTaskState !== '4'">
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
v-show="(item.value !== 5) && (crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1)"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
v-show="crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
v-show="crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
</el-option-group>
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark !== 7">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="crterionDictionaryGroup.indexOf(item.raw.CrterionDictionaryGroup) > -1" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.TypeValue">
|
||||
<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>
|
||||
|
|
@ -199,33 +132,21 @@
|
|||
|
||||
</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.MeasureData && (!isFirstChangeTask || (isFirstChangeTask && (lesionType === 5 || lesionType === 6)))"
|
||||
size="mini"
|
||||
@click="handleDeleteMeasureData"
|
||||
>
|
||||
size="mini" @click="handleDeleteMeasureData">
|
||||
{{ $t('trials:reading:button:removeMark') }}
|
||||
</el-button>
|
||||
<!-- 删除 -->
|
||||
<el-button
|
||||
v-if="!isFirstChangeTask && isCurrentTaskAdd !== 'False'"
|
||||
size="mini"
|
||||
@click="handleDelete"
|
||||
>
|
||||
<el-button v-if="!isFirstChangeTask && isCurrentTaskAdd !== 'False'" size="mini" @click="handleDelete">
|
||||
{{ $t('common:button:delete') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
v-if="(isFirstChangeTask && (lesionType === 5 || lesionType === 6)) || !isFirstChangeTask"
|
||||
size="mini"
|
||||
@click="handleSave"
|
||||
>
|
||||
<el-button v-if="(isFirstChangeTask && (lesionType === 5 || lesionType === 6)) || !isFirstChangeTask" size="mini"
|
||||
@click="handleSave">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
|
@ -330,6 +251,9 @@ export default {
|
|||
DicomEvent.$off('handleImageQualityAbnormal')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initForm() {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
this.questions.forEach(item => {
|
||||
|
|
@ -375,12 +299,12 @@ export default {
|
|||
await this.setMeasureData(this.answers.measureObj, true)
|
||||
} else {
|
||||
if (this.questionForm.MeasureData) {
|
||||
// 十字线工具 且是靶病灶 器官只能是淋巴结类型
|
||||
// 十字线工具 且是靶病灶 器官只能是淋巴结类型
|
||||
if (this.questionForm.MeasureData.type === 'Bidirectional') {
|
||||
this.organList = []
|
||||
await this.getOrganInfoList(1)
|
||||
} else if (this.questionForm.MeasureData.type === 'Length') {
|
||||
// 直径测量工具 且是靶病灶 器官只能是非淋巴结类型
|
||||
// 直径测量工具 且是靶病灶 器官只能是非淋巴结类型
|
||||
this.organList = []
|
||||
await this.getOrganInfoList(0)
|
||||
} else {
|
||||
|
|
@ -486,8 +410,8 @@ export default {
|
|||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
})
|
||||
.then(() => {})
|
||||
.catch(() => {})
|
||||
.then(() => { })
|
||||
.catch(() => { })
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
}
|
||||
|
|
@ -500,7 +424,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
|
|
@ -926,7 +850,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg19'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -938,7 +862,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg20'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -955,7 +879,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -967,7 +891,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg22'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -985,7 +909,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg23'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -997,7 +921,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg24'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1013,7 +937,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1029,7 +953,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1050,7 +974,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1062,7 +986,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1078,7 +1002,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg29'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1090,7 +1014,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1111,7 +1035,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1123,7 +1047,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg32'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1140,7 +1064,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1152,7 +1076,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1169,7 +1093,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1181,7 +1105,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1198,7 +1122,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1210,7 +1134,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1227,7 +1151,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1239,7 +1163,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1256,7 +1180,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg50'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1268,7 +1192,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg51'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1285,7 +1209,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1297,7 +1221,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1314,7 +1238,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg41'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1326,7 +1250,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg42'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1343,7 +1267,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1355,7 +1279,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1372,7 +1296,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1384,7 +1308,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1404,7 +1328,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg31'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1416,7 +1340,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg32'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1433,7 +1357,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg1'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1445,7 +1369,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg2'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1460,7 +1384,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg3'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1472,7 +1396,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg4'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1493,7 +1417,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg5'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1505,7 +1429,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg6'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1522,7 +1446,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1538,7 +1462,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg34'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1595,7 +1519,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg7'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1607,7 +1531,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg8'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1623,7 +1547,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg9'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1635,7 +1559,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg10'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1651,7 +1575,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg11'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1663,7 +1587,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg12'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1679,7 +1603,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg13'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1691,7 +1615,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg14'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1711,7 +1635,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg15'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1723,7 +1647,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg16'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1740,7 +1664,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg17'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1752,7 +1676,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg18'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1769,7 +1693,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg19'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1781,7 +1705,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg20'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1798,7 +1722,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg21'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1810,7 +1734,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg22'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1829,7 +1753,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg23'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1841,7 +1765,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg24'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1858,7 +1782,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg25'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1870,7 +1794,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg26'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1886,7 +1810,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg27'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1898,7 +1822,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg28'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1914,7 +1838,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg29'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1926,7 +1850,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:iRecist:warnning:msg30'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -2167,42 +2091,50 @@ 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;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
::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-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>
|
||||
|
|
|
|||
|
|
@ -8,43 +8,47 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 非测量问题 -->
|
||||
<div class="lesions">
|
||||
<Questions
|
||||
ref="ecrf"
|
||||
:question-form-change-state="questionFormChangeState"
|
||||
:question-form-change-num="questionFormChangeNum"
|
||||
:is-first-change-task="isFirstChangeTask"
|
||||
/>
|
||||
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState"
|
||||
:question-form-change-num="questionFormChangeNum" :is-first-change-task="isFirstChangeTask"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template v-if="questions.length > 0">
|
||||
<div v-for="(qs,index) in questions" :key="index" v-loading="loading" class="lesions lesions_wrapper">
|
||||
<div v-for="(qs, index) in questions" :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">
|
||||
<div v-for="item in qs.Childrens" v-show="(!isConvertedTask && !(isBaseLineTask && item.LesionType === 2)) || (isConvertedTask && (isFirstChangeTask && item.LesionType !== 8) || (!isFirstChangeTask && item.LesionType !== 2))" :key="item.Id">
|
||||
<div v-for="item in qs.Childrens"
|
||||
v-show="(!isConvertedTask && !(isBaseLineTask && item.LesionType === 2)) || (isConvertedTask && (isFirstChangeTask && item.LesionType !== 8) || (!isFirstChangeTask && item.LesionType !== 2))"
|
||||
:key="item.Id">
|
||||
<div v-if="item.Type === 'table'" class="flex-row" style="margin:3px 0;">
|
||||
<div
|
||||
v-if="isFirstChangeTask && item.LesionType === 2 && readingTaskState<2"
|
||||
class="title"
|
||||
>
|
||||
<div v-if="isFirstChangeTask && item.LesionType === 2 && readingTaskState < 2" class="title">
|
||||
{{ item.QuestionName }}
|
||||
<span v-if="isFirstChangeTask && item.TableQuestions.Answers.length > 0" style="color:red;font-size: 12px;">{{ $t("trials:reading:dicom:IRecist:reevaluate") }}</span>
|
||||
<span v-if="isFirstChangeTask && item.TableQuestions.Answers.length > 0"
|
||||
style="color:red;font-size: 12px;">{{ $t("trials:reading:dicom:IRecist:reevaluate") }}</span>
|
||||
</div>
|
||||
<div v-else 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
|
||||
},
|
||||
})" />
|
||||
</div>
|
||||
<div v-if="readingTaskState<2 && ((!isConvertedTask && (isBaseLineTask || item.LesionType === 2)) || (isConvertedTask && !isFirstChangeTask && item.LesionType === 8))" class="add-icon" @click.prevent="handleAdd(item)">
|
||||
<div
|
||||
v-if="readingTaskState < 2 && ((!isConvertedTask && (isBaseLineTask || item.LesionType === 2)) || (isConvertedTask && !isFirstChangeTask && item.LesionType === 8))"
|
||||
class="add-icon" @click.prevent="handleAdd(item)">
|
||||
<i class="el-icon-plus" />
|
||||
</div>
|
||||
|
||||
|
|
@ -52,109 +56,106 @@
|
|||
111
|
||||
</div> -->
|
||||
</div>
|
||||
<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: 62px;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-if="item.LesionType === 2">
|
||||
{{ $fd('NewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</span>
|
||||
<span v-else-if="item.LesionType === 5">
|
||||
{{ $fd('NewTargetLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('NewTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</span>
|
||||
<span v-else-if="item.LesionType === 6">
|
||||
{{ $fd('NewNoTargetLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('NewNoTargetLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</span>
|
||||
<span v-else-if="item.LesionType === 7">
|
||||
{{ $fd('OtherPreviousNewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('OtherPreviousNewLesionState',
|
||||
parseInt(item.TableQuestions.Answers[i].lesionState))
|
||||
}}
|
||||
</span>
|
||||
<span v-else-if="item.LesionType === 8">
|
||||
{{ $fd('NewLesionAfterTriggeringiRECSITState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{
|
||||
$fd('NewLesionAfterTriggeringiRECSITState',
|
||||
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">
|
||||
<template v-if="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
|
||||
<div
|
||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||
<template
|
||||
v-if="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
|
||||
{{ item.TableQuestions.Answers[i].lesionShort }}mm
|
||||
</template>
|
||||
<template v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
<template
|
||||
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="((item.LesionType === 0 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 1 && [0,1,4,5].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 5 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1) || (item.LesionType === 6 && [0,1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 7 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 8 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1)) && 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, 4, 5].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 5 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1) || (item.LesionType === 6 && [0, 1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 7 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0) || (item.LesionType === 8 && parseInt(item.TableQuestions.Answers[i].lesionState) === 1)) && 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 && !isFirstChangeTask ) && item.TableQuestions.Answers[i].isDicomReading !== false" 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)" />
|
||||
<el-tooltip
|
||||
v-show="readingTaskState < 2 && !!item.TableQuestions.Answers[i].RowId && (!isBaseLineTask && !isFirstChangeTask) && item.TableQuestions.Answers[i].isDicomReading !== false"
|
||||
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)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</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"
|
||||
:crterion-dictionary-group="item.CrterionDictionaryGroup"
|
||||
:visit-task-id="visitTaskId"
|
||||
:is-current-task="isCurrentTask"
|
||||
:is-first-change-task="isFirstChangeTask"
|
||||
:is-converted-task="isConvertedTask"
|
||||
:reading-task-state="readingTaskState"
|
||||
:is-base-line-task="isBaseLineTask"
|
||||
@getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession"
|
||||
@resetQuestions="resetQuestions"
|
||||
@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"
|
||||
:crterion-dictionary-group="item.CrterionDictionaryGroup" :visit-task-id="visitTaskId"
|
||||
:is-current-task="isCurrentTask" :is-first-change-task="isFirstChangeTask"
|
||||
:is-converted-task="isConvertedTask" :reading-task-state="readingTaskState"
|
||||
:is-base-line-task="isBaseLineTask" @getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession" @resetQuestions="resetQuestions"
|
||||
@close="close" @handleReadingChart="handleReadingChart" />
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
|
|
@ -275,6 +276,9 @@ export default {
|
|||
DicomEvent.$off('getUnSaveTarget')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
@ -568,7 +572,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
} else {
|
||||
// 是否确认分裂
|
||||
this.$confirm(this.$t('trials:reading:warnning:msg4'), {
|
||||
|
|
@ -578,7 +582,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -736,7 +740,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -747,7 +751,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
} else {
|
||||
// saveTypeEnum: 0
|
||||
|
|
@ -898,7 +902,7 @@ export default {
|
|||
async changeLesionType(questionsObj) {
|
||||
await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: questionsObj.oldLesionType, rowIndex: questionsObj.rowIndex, visitTaskId: this.visitTaskId })
|
||||
// saveTypeEnum: 0
|
||||
var lesionObj = { }
|
||||
var lesionObj = {}
|
||||
var questionObj = questionsObj.questionForm
|
||||
// 切换到新的病灶集合
|
||||
var targetObj = this.tableQuestions.find(item => item.LesionType === questionsObj.newLesionType)
|
||||
|
|
@ -1176,23 +1180,26 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -1200,14 +1207,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -1216,42 +1225,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;
|
||||
|
|
@ -1260,7 +1276,7 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<!-- 影像质量问题 -->
|
||||
<div class="lesions">
|
||||
<Questions ref="ecrf" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false"
|
||||
:group-classify="1" />
|
||||
:group-classify="1" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template v-if="questions.length > 0">
|
||||
|
|
@ -37,7 +37,8 @@
|
|||
<div class="add-icon" @click.prevent="downloadTpl">
|
||||
<i class="el-icon-download" />
|
||||
</div>
|
||||
<div class="add-icon" style="margin: 0 5px;" @click.prevent="uploadTpl(item.LesionType, item.QuestionName)">
|
||||
<div class="add-icon" style="margin: 0 5px;"
|
||||
@click.prevent="uploadTpl(item.LesionType, item.QuestionName)">
|
||||
<i class="el-icon-upload2" />
|
||||
</div>
|
||||
<div class="add-icon" @click.prevent="handleAddOrEdit('add', item)">
|
||||
|
|
@ -100,9 +101,18 @@
|
|||
@change="((val) => { formItemChange(val, item) })" />
|
||||
</template>
|
||||
<template v-if="item.Type === 'number'">
|
||||
<el-input-number v-model="questionForm[item.Id]"
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2" :precision="0"
|
||||
@change="((val) => { formItemChange(val, item) })" />
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<el-input-number v-model="questionForm[item.Id]"
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2" :precision="0"
|
||||
@change="((val) => { formItemChange(val, item) })" />
|
||||
<svg-icon v-if="item.ShowChartTypeEnum > 0" icon-class="readingChart"
|
||||
class="svg-icon svg-readingChart" @click.stop="(e) => handleReadingChart({
|
||||
e,
|
||||
data: {
|
||||
QuestionId: item.Id
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="item.Type === 'select'">
|
||||
<el-select v-model="questionForm[item.Id]" :disabled="!isCurrentTask || readingTaskState >= 2"
|
||||
|
|
@ -159,7 +169,7 @@
|
|||
<el-form ref="tableQsForm" v-loading="loading" :model="qsForm" size="small">
|
||||
<QuestionTableFormItem v-for="item in qsList" :key="item.Id" :question="item" :question-form="qsForm"
|
||||
:reading-task-state="readingTaskState" @setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData" />
|
||||
@resetFormItemData="resetFormItemData" @handleReadingChart="handleReadingChart" />
|
||||
<el-form-item style="text-align: right">
|
||||
<el-button size="small" @click="addOrEdit.visible = false">
|
||||
{{ $t('common:button:cancel') }}
|
||||
|
|
@ -286,6 +296,9 @@ export default {
|
|||
DicomEvent.$off('refreshQuestions')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
|
|||
|
|
@ -1,119 +1,66 @@
|
|||
<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>
|
||||
<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']},
|
||||
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' || question.QuestionName.length > 15) ?'uploadWrapper' : '']"
|
||||
>
|
||||
:class="[question.Type === 'group' ? 'mb' : (question.Type === 'upload' || question.QuestionName.length > 15) ? 'uploadWrapper' : '']">
|
||||
<!-- 输入框 -->
|
||||
<el-input
|
||||
v-if="question.Type==='input'"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<el-input v-if="question.Type === 'input'" v-model="questionForm[question.Id]" :disabled="readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 多行文本输入框 -->
|
||||
<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"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<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"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 下拉框 -->
|
||||
<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)"
|
||||
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"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
>
|
||||
<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" @change="((val) => { formItemChange(val, question) })">
|
||||
<el-checkbox v-for="val in question.TypeValue.split('|')" :key="val" :label="val">
|
||||
{{ val }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
|
|
@ -144,40 +91,37 @@
|
|||
/>
|
||||
</template> -->
|
||||
<!-- 数值类型 -->
|
||||
<el-input
|
||||
v-else-if="question.Type==='number'"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState>=2 "
|
||||
type="number"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<div style="display: flex;justify-content: space-between;"
|
||||
v-else-if="question.Type === 'number' || question.Type === 'calculation'">
|
||||
<el-input v-if="question.Type === 'number'" v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2" type="number" @change="((val) => { formItemChange(val, question) })">
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
|
||||
<el-input v-else-if="question.Type === 'calculation'" v-model="questionForm[question.Id]" disabled
|
||||
@change="((val) => { formItemChange(val, question) })">
|
||||
<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: {
|
||||
TableQuestionId: question.Id,
|
||||
RowIndex: questionForm.RowIndex
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<el-input
|
||||
v-else-if="question.Type==='calculation'"
|
||||
v-model="questionForm[question.Id]"
|
||||
disabled
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<QuestionTableFormItem
|
||||
v-for="item in question.Childrens"
|
||||
:key="item.Id"
|
||||
:question="item"
|
||||
:question-form="questionForm"
|
||||
:reading-task-state="readingTaskState"
|
||||
@setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData"
|
||||
/>
|
||||
<QuestionTableFormItem v-for="item in question.Childrens" :key="item.Id" :question="item"
|
||||
:question-form="questionForm" :reading-task-state="readingTaskState" @setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -214,6 +158,9 @@ export default {
|
|||
this.digitPlaces = Number(localStorage.getItem('digitPlaces'))
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
formItemChange(v, question) {
|
||||
if (question.Childrens && question.Childrens.length > 0) {
|
||||
this.resetChild(question.Childrens)
|
||||
|
|
@ -269,29 +216,36 @@ 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 !important;
|
||||
align-items: flex-start;
|
||||
}
|
||||
::v-deep .el-input.is-disabled .el-input__inner{
|
||||
background-color: #646464a1;
|
||||
}
|
||||
::v-deep .el-input-group__append, .el-input-group__prepend{
|
||||
padding: 0 10px;
|
||||
}
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
::v-deep .el-select.is-disabled .el-input__inner{
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
::v-deep .el-select.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -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,198 +13,135 @@
|
|||
</div>
|
||||
</div>
|
||||
<div ref="scrollPanel" style="height: 420px;overflow-y: auto;overflow-x: hidden;" @scroll.stop="scrollHandle">
|
||||
<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
|
||||
:ref="`select_LesionType`"
|
||||
v-model="questionForm.LesionType"
|
||||
filterable
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask || answers.SplitOrMergeType === '1'"
|
||||
@change="((val)=>{lesionTypeChange(val)})"
|
||||
>
|
||||
<el-select :ref="`select_LesionType`" v-model="questionForm.LesionType" filterable
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2 || !isBaseLineTask || answers.SplitOrMergeType === '1'"
|
||||
@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>
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
:key="qs.Id"
|
||||
:label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id"
|
||||
:rules="[
|
||||
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (qs.RelevanceValue.includes(questionForm[qs.RelevanceId]))) || (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-for="qs in questions" v-show="qs.ShowQuestion !== 2" :key="qs.Id" :label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id" :rules="[
|
||||
{
|
||||
required: (qs.IsRequired === 0 || (qs.IsRequired === 1 && qs.RelevanceId && (qs.RelevanceValue.includes(questionForm[qs.RelevanceId]))) || (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']
|
||||
},
|
||||
]">
|
||||
|
||||
<!-- 输入框 -->
|
||||
<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;">
|
||||
<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)) || answers.SplitOrMergeType === '1'"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<template v-if="(qs.QuestionMark === 0 || qs.QuestionMark === 1) && 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<!-- {{ ((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)) || answers.SplitOrMergeType === '1'"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
|
||||
</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 || answers.SplitOrMergeType === '1'"
|
||||
@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 || answers.SplitOrMergeType === '1'"
|
||||
@change="((val) => { formItemChange(val, qs) })" />
|
||||
<!-- 下拉框 -->
|
||||
<!-- :disabled="!isCurrentTask || readingTaskState>=2 || (!isBaseLineTask && qs.QuestionMark === 5 && isCurrentTaskAdd === 'False') || qs.QuestionMark === 2 || (qs.QuestionMark === 8 && !isBaseLineTask && isCurrentTaskAdd === 'False')" -->
|
||||
|
||||
<el-select
|
||||
v-if="qs.Type==='select'"
|
||||
:ref="`select_${qs.Id}`"
|
||||
v-model="questionForm[qs.Id]"
|
||||
filterable
|
||||
<el-select v-if="qs.Type === 'select'" :ref="`select_${qs.Id}`" 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)) || (qs.QuestionMark === 7 && stateDisabled) || answers.SplitOrMergeType === '1' || (qs.QuestionMark === 7 && answers.SplitOrMergeType === '3')"
|
||||
@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)) || (qs.QuestionMark === 7 && stateDisabled) || answers.SplitOrMergeType === '1' || (qs.QuestionMark === 7 && answers.SplitOrMergeType === '3')"
|
||||
@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 && isBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value === 0) || (lesionType === 1 && (item.value === 0))"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answers.LastTaskState))}` : ''"
|
||||
>
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode, parseFloat(answers.LastTaskState))}` : ''">
|
||||
<!-- 首次分裂的病灶只能选择存在 -->
|
||||
<template v-if="answers.IsFristAdd=== 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-if="answers.IsFristAdd === 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<!-- 首次添加的新病灶不能为无法评估和消失 -->
|
||||
<template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-else-if="isCurrentTaskAdd === 'True' && lesionType === 2">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])" :key="item.id" :value="item.value"
|
||||
:label="item.label" />
|
||||
</template>
|
||||
</el-option-group>
|
||||
</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 || answers.SplitOrMergeType === '1'"
|
||||
>
|
||||
<el-radio
|
||||
v-for="val in qs.options.split('|')"
|
||||
:key="val"
|
||||
:label="val"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<el-radio-group v-if="qs.Type === 'radio'" v-model="questionForm[qs.id]"
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2 || answers.SplitOrMergeType === '1'">
|
||||
<el-radio v-for="val in qs.options.split('|')" :key="val" :label="val"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
{{ val }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="qs.QuestionMark === 20">
|
||||
<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;"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<viewer
|
||||
v-if="answers.OtherPicturePath"
|
||||
ref="viewer"
|
||||
style="margin:0 10px;"
|
||||
:images="[`${OSSclientConfig.basePath}${answers.OtherPicturePath}`]"
|
||||
>
|
||||
<div style="display: flex;justify-content: space-between;" v-if="qs.Type === 'calculation'">
|
||||
<el-input v-if="qs.Type === 'calculation'" v-model="questionForm[qs.Id]" disabled style="width:120px;"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<viewer v-if="answers.OtherPicturePath" ref="viewer" style="margin:0 10px;"
|
||||
:images="[`${OSSclientConfig.basePath}${answers.OtherPicturePath}`]">
|
||||
<span style="color:#409eff;cursor: pointer" @click="previewImage()">
|
||||
{{ $t('trials:lugano:button:suvscreenshot1') }}
|
||||
</span>
|
||||
<img
|
||||
v-show="false"
|
||||
crossorigin="anonymous"
|
||||
:src="`${OSSclientConfig.basePath}${answers.OtherPicturePath}`"
|
||||
alt="Image"
|
||||
>
|
||||
<img v-show="false" crossorigin="anonymous"
|
||||
:src="`${OSSclientConfig.basePath}${answers.OtherPicturePath}`" alt="Image">
|
||||
</viewer>
|
||||
<!-- <img
|
||||
v-if="answers.OtherPicturePath"
|
||||
|
|
@ -226,45 +157,39 @@
|
|||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input
|
||||
v-if="qs.Type==='calculation'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
disabled
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<div style="display: flex;justify-content: space-between;" v-if="qs.Type === 'calculation'">
|
||||
<el-input v-if="qs.Type === 'calculation'" v-model="questionForm[qs.Id]" disabled
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
v-if="isCurrentTask && readingTaskState<2 && (answers.SplitOrMergeType !== '1' && answers.SplitOrMergeType !== '3')"
|
||||
class="base-dialog-footer"
|
||||
style="text-align:right;margin-top:10px;"
|
||||
>
|
||||
v-if="isCurrentTask && readingTaskState < 2 && (answers.SplitOrMergeType !== '1' && answers.SplitOrMergeType !== '3')"
|
||||
class="base-dialog-footer" style="text-align:right;margin-top:10px;">
|
||||
<!-- 清除标记 -->
|
||||
<el-button
|
||||
v-if="questionForm.MeasureData"
|
||||
size="mini"
|
||||
@click="handleDeleteMeasureData"
|
||||
>
|
||||
<el-button v-if="questionForm.MeasureData" 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>
|
||||
|
|
@ -368,6 +293,9 @@ export default {
|
|||
// container.removeEventListener('scroll', this.scrollHandle , true)
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
scrollHandle() {
|
||||
for (const k in this.$refs) {
|
||||
if (k.indexOf('select_') === -1) continue
|
||||
|
|
@ -505,11 +433,11 @@ export default {
|
|||
if ((ldi > 15 && ldi <= 20) && (pddIncrease >= 50) && (ldiIncrease >= 5 || sdiIncrease >= 5)) {
|
||||
this.stateDisabled = true
|
||||
} else if ((ldi > 20) && (pddIncrease >= 50) && (ldiIncrease >= 10 || sdiIncrease >= 10)) {
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
this.stateDisabled = true
|
||||
} else {
|
||||
this.stateDisabled = false
|
||||
|
|
@ -607,8 +535,8 @@ export default {
|
|||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
})
|
||||
.then(() => {})
|
||||
.catch(() => {})
|
||||
.then(() => { })
|
||||
.catch(() => { })
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
}
|
||||
|
|
@ -621,7 +549,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
|
|
@ -653,7 +581,7 @@ export default {
|
|||
})
|
||||
},
|
||||
deleteLesionInfo() {
|
||||
return new Promise(async(resolve, reject) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
var param = {
|
||||
visitTaskId: this.visitTaskId,
|
||||
|
|
@ -965,31 +893,31 @@ export default {
|
|||
this.stateDisabled = false
|
||||
}
|
||||
} else {
|
||||
/** 疾病进展
|
||||
* 15mm<当前靶病灶LDi≤20mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥5 mm 或者 相比PPD最低点SDi增加值≥5 mm
|
||||
**/
|
||||
/** 疾病进展
|
||||
* 15mm<当前靶病灶LDi≤20mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥5 mm 或者 相比PPD最低点SDi增加值≥5 mm
|
||||
**/
|
||||
if ((ldi > 15 && ldi <= 20) && (pddIncreaseNum >= 50) && (ldiIncrease >= 5 || sdiIncrease >= 5)) {
|
||||
const stateId = this.getQuestionId(7)
|
||||
this.$set(this.questionForm, stateId, 4)
|
||||
this.stateDisabled = true
|
||||
} else if ((ldi > 20) && (pddIncreaseNum >= 50) && (ldiIncrease >= 10 || sdiIncrease >= 10)) {
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
const stateId = this.getQuestionId(7)
|
||||
this.$set(this.questionForm, stateId, 4)
|
||||
this.stateDisabled = true
|
||||
} else {
|
||||
// 不符合疾病进展是否需要清空修改前疾病进展的状态
|
||||
// const lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||||
// if (lesionState === 4) {
|
||||
// const stateId = this.getQuestionId(7)
|
||||
// this.$set(this.questionForm, stateId, null)
|
||||
// }
|
||||
// 不符合疾病进展是否需要清空修改前疾病进展的状态
|
||||
// const lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||||
// if (lesionState === 4) {
|
||||
// const stateId = this.getQuestionId(7)
|
||||
// this.$set(this.questionForm, stateId, null)
|
||||
// }
|
||||
this.stateDisabled = false
|
||||
}
|
||||
}
|
||||
|
|
@ -1132,7 +1060,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState1'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1143,7 +1071,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState2'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1159,7 +1087,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1170,7 +1098,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState12'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1187,7 +1115,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState3'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1199,7 +1127,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState4'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1215,7 +1143,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1234,7 +1162,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1258,7 +1186,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1270,7 +1198,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1287,7 +1215,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState5'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1296,7 +1224,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState6'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1318,7 +1246,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1347,7 +1275,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState7'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1359,7 +1287,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState8'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1376,7 +1304,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1388,7 +1316,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState9'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1405,7 +1333,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1417,7 +1345,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState10'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1434,7 +1362,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1446,7 +1374,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1463,7 +1391,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1475,7 +1403,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1492,7 +1420,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1504,7 +1432,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState11'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1550,7 +1478,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1562,7 +1490,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1579,7 +1507,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1591,7 +1519,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1837,51 +1765,62 @@ 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;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
.suv_viewer{
|
||||
|
||||
.suv_viewer {
|
||||
::v-deep .viewer-play {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,9 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -25,121 +23,132 @@
|
|||
:question-form-change-num="questionFormChangeNum"
|
||||
:group-classify="1"
|
||||
/> -->
|
||||
<Questions
|
||||
ref="ecrf"
|
||||
:question-form-change-state="true"
|
||||
:question-form-change-num="0"
|
||||
:is-qulity-issues="false"
|
||||
:group-classify="1"
|
||||
/>
|
||||
<Questions ref="ecrf" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false"
|
||||
:group-classify="1" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template v-if="questions.length > 0 && CriterionType !== 10">
|
||||
<div v-for="(qs,index) in questions" :key="index" v-loading="loading" class="lesions lesions_wrapper">
|
||||
<div v-for="(qs, index) in questions" :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">
|
||||
<div v-for="item in qs.Childrens" v-show="!(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
|
||||
},
|
||||
})" />
|
||||
</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: item.LesionType === 1 && readingTaskState < 2?'58px':'50px',top: '2px'}">
|
||||
<div
|
||||
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
|
||||
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
|
||||
|
||||
<div style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
|
||||
<el-tooltip v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'" class="item" effect="dark" :content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`" placement="bottom">
|
||||
<div v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'">
|
||||
<div
|
||||
style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
|
||||
<el-tooltip
|
||||
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
|
||||
class="item" effect="dark"
|
||||
:content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`"
|
||||
placement="bottom">
|
||||
<div
|
||||
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'">
|
||||
<span class="login-cycle" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<div v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '4'">
|
||||
<span class="login-cycle" />
|
||||
</div>
|
||||
<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="max-width: 100px;overflow: hidden;">
|
||||
<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="max-width: 100px;overflow: hidden;">
|
||||
{{ item.TableQuestions.Answers[i].lesionPart }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<div v-if="item.LesionType === 0" style="margin:0 5px;">
|
||||
{{ $fd('TargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</div>
|
||||
<div v-else-if="item.LesionType === 1" style="margin:0 5px;">
|
||||
{{ $fd('NoTargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</div>
|
||||
<div v-else style="margin:0 5px;">
|
||||
{{ $fd('NewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</div>
|
||||
<div v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
<el-tooltip class="item" effect="dark" :content="`${item.TableQuestions.Answers[i].lesionLength}*${item.TableQuestions.Answers[i].lesionShort}m㎡`" placement="bottom">
|
||||
<span>{{ item.TableQuestions.Answers[i].lesionLength }}*{{ item.TableQuestions.Answers[i].lesionShort }}m㎡</span>
|
||||
<el-tooltip class="item" effect="dark"
|
||||
:content="`${item.TableQuestions.Answers[i].lesionLength}*${item.TableQuestions.Answers[i].lesionShort}m㎡`"
|
||||
placement="bottom">
|
||||
<span>{{ item.TableQuestions.Answers[i].lesionLength }}*{{
|
||||
item.TableQuestions.Answers[i].lesionShort }}m㎡</span>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False' && readingTaskState < 2" style="position: absolute;right: 5px;top: 2px;">
|
||||
<div v-if="item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False' && readingTaskState < 2"
|
||||
style="position: absolute;right: 5px;top: 2px;">
|
||||
<!-- 分裂 -->
|
||||
<el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '4' && ((item.LesionType === 0 && [0,4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 1 && [0,1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0))" class="item" :content="$t('trials:reading:button:split')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;" @click.stop="handleSplit(item.TableQuestions.Answers[i].RowId,item.Id)" />
|
||||
<el-tooltip
|
||||
v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '4' && ((item.LesionType === 0 && [0, 4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 1 && [0, 1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0))"
|
||||
class="item" :content="$t('trials:reading:button:split')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
||||
</el-tooltip>
|
||||
|
||||
<!-- 融合 -->
|
||||
<el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '2' && ((item.LesionType === 0 && [0,1,4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))))" class="item" :content="$t('trials:reading:button:merge')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-merge" style="color:#fff;font-size: 16px;" @click.stop="handleMerge(item.TableQuestions.Answers[i],item.Id,item.OrderMark)" />
|
||||
<el-tooltip
|
||||
v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '2' && ((item.LesionType === 0 && [0, 1, 4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))))"
|
||||
class="item" :content="$t('trials:reading:button:merge')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-merge" style="color:#fff;font-size: 16px;"
|
||||
@click.stop="handleMerge(item.TableQuestions.Answers[i], item.Id, item.OrderMark)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</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"
|
||||
@getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession"
|
||||
@resetQuestions="resetQuestions"
|
||||
@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" @getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession" @resetQuestions="resetQuestions"
|
||||
@close="close" @handleReadingChart="handleReadingChart" />
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
|
|
@ -149,35 +158,15 @@
|
|||
</template>
|
||||
<!-- <el-divider /> -->
|
||||
<!-- 肝脏评估 -->
|
||||
<Questions
|
||||
ref="ecrf2"
|
||||
:question-form-change-state="true"
|
||||
:question-form-change-num="0"
|
||||
:group-classify="2"
|
||||
:is-qulity-issues="false"
|
||||
style="margin-top:20px"
|
||||
:question-type="6"
|
||||
@setNonTargetMeasurementStatus="setNonTargetMeasurementStatus"
|
||||
/>
|
||||
<Questions ref="ecrf2" :question-form-change-state="true" :question-form-change-num="0" :group-classify="2"
|
||||
:is-qulity-issues="false" style="margin-top:20px" :question-type="6"
|
||||
@setNonTargetMeasurementStatus="setNonTargetMeasurementStatus" />
|
||||
<!-- 脾脏评估 -->
|
||||
<Questions
|
||||
ref="ecrf3"
|
||||
:question-form-change-state="true"
|
||||
:question-form-change-num="0"
|
||||
:group-classify="3"
|
||||
:is-qulity-issues="false"
|
||||
:question-type="7"
|
||||
@setNonTargetMeasurementStatus="setNonTargetMeasurementStatus"
|
||||
/>
|
||||
<Questions ref="ecrf3" :question-form-change-state="true" :question-form-change-num="0" :group-classify="3"
|
||||
:is-qulity-issues="false" :question-type="7" @setNonTargetMeasurementStatus="setNonTargetMeasurementStatus" />
|
||||
</div>
|
||||
<el-dialog
|
||||
v-if="merge.visible"
|
||||
v-loading="merge.loading"
|
||||
:visible.sync="merge.visible"
|
||||
:close-on-click-modal="false"
|
||||
:title="$t('trials:reading:lugano:message:merge')"
|
||||
width="500px"
|
||||
>
|
||||
<el-dialog v-if="merge.visible" v-loading="merge.loading" :visible.sync="merge.visible"
|
||||
:close-on-click-modal="false" :title="$t('trials:reading:lugano:message:merge')" width="500px">
|
||||
<div class="merge-table">
|
||||
<div class="merge-label">
|
||||
<label>{{ $t('trials:reading:lugano:label:currentLesion') }}</label>
|
||||
|
|
@ -185,40 +174,19 @@
|
|||
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
|
||||
</div>
|
||||
<div class="merge-label"><label>{{ $t('trials:reading:lugano:label:selectLesion') }}</label></div>
|
||||
<el-table
|
||||
:data="lesionData"
|
||||
style="width: 450px"
|
||||
size="small"
|
||||
height="200"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="45"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="OrderMarkName"
|
||||
:label="$t('trials:reading:lugano:label:lesionNumber')"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="Part"
|
||||
:label="$t('trials:reading:lugano:label:lesionLocation')"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table :data="lesionData" style="width: 450px" size="small" height="200"
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="45" />
|
||||
<el-table-column prop="OrderMarkName" :label="$t('trials:reading:lugano:label:lesionNumber')" width="100" />
|
||||
<el-table-column prop="Part" :label="$t('trials:reading:lugano:label:lesionLocation')" min-width="120"
|
||||
show-overflow-tooltip />
|
||||
</el-table>
|
||||
</div>
|
||||
<div slot="footer" style="text-align:right;">
|
||||
<!-- 取消 -->
|
||||
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
|
||||
<!-- 确认 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
:disabled="mergeList.length === 0"
|
||||
@click="confirmMerge"
|
||||
>
|
||||
<el-button type="primary" size="mini" :disabled="mergeList.length === 0" @click="confirmMerge">
|
||||
{{ $t('common:button:confirm') }}</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
|
@ -333,7 +301,7 @@ export default {
|
|||
DicomEvent.$on('split', measureData => {
|
||||
this.handleSplit(measureData.RowId, measureData.QuestionId)
|
||||
})
|
||||
DicomEvent.$on('refreshQuestions', async(obj) => {
|
||||
DicomEvent.$on('refreshQuestions', async (obj) => {
|
||||
var triald = this.$router.currentRoute.query.trialId
|
||||
await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: triald, visitTaskId: this.visitTaskId })
|
||||
this.$nextTick(() => {
|
||||
|
|
@ -342,7 +310,7 @@ export default {
|
|||
this.$refs['ecrf3'].getQuestions(this.visitTaskId)
|
||||
})
|
||||
})
|
||||
DicomEvent.$on('refreshSplitTargetLesionPDD', async(callback) => {
|
||||
DicomEvent.$on('refreshSplitTargetLesionPDD', async (callback) => {
|
||||
const res = await getSplitPPdSum({ visitTaskId: this.visitTaskId })
|
||||
this.splitTargetLesions = res.Result
|
||||
if (this.splitTargetLesions && this.splitTargetLesions.length > 0) {
|
||||
|
|
@ -366,6 +334,9 @@ export default {
|
|||
DicomEvent.$off('refreshQuestions')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
@ -529,7 +500,7 @@ export default {
|
|||
try {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
|
||||
await store.dispatch('reading/refreshReadingQuestionAndAnswer', { trialId: this.$router.currentRoute.query.trialId, visitTaskId: this.visitTaskId }).then(async() => {
|
||||
await store.dispatch('reading/refreshReadingQuestionAndAnswer', { trialId: this.$router.currentRoute.query.trialId, visitTaskId: this.visitTaskId }).then(async () => {
|
||||
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
|
||||
if (idx > -1) {
|
||||
if (this.visitTaskList[idx].ReadingQuestions.length > 0) {
|
||||
|
|
@ -655,7 +626,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
} else {
|
||||
// 是否确认分裂
|
||||
this.$confirm(this.$t('trials:reading:warnning:msg4'), {
|
||||
|
|
@ -665,7 +636,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -722,7 +693,7 @@ export default {
|
|||
})
|
||||
},
|
||||
confirmMerge() {
|
||||
// '融合后将无法撤销, 是否继续?'
|
||||
// '融合后将无法撤销, 是否继续?'
|
||||
this.$confirm(this.$t('trials:reading:lugano:warnning:fuse'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
|
|
@ -875,7 +846,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -886,7 +857,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
} else {
|
||||
// saveTypeEnum: 0
|
||||
|
|
@ -1026,7 +997,7 @@ export default {
|
|||
async changeLesionType(questionsObj) {
|
||||
await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: questionsObj.oldLesionType, rowIndex: questionsObj.rowIndex, visitTaskId: this.visitTaskId })
|
||||
// saveTypeEnum: 0
|
||||
var lesionObj = { }
|
||||
var lesionObj = {}
|
||||
var questionObj = questionsObj.questionForm
|
||||
// 切换到新的病灶集合
|
||||
var targetObj = this.tableQuestions.find(item => item.LesionType === questionsObj.newLesionType)
|
||||
|
|
@ -1343,21 +1314,25 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
.container{
|
||||
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -1365,14 +1340,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -1381,21 +1358,24 @@ 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;
|
||||
}
|
||||
.login-cycle{
|
||||
|
||||
.login-cycle {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
display: inline-block;
|
||||
|
|
@ -1404,28 +1384,33 @@ export default {
|
|||
margin-right: 2px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.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;
|
||||
|
|
@ -1434,46 +1419,59 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
.merge-table{
|
||||
padding:0 10px;
|
||||
::v-deep.el-table{
|
||||
background-color: #1e1e1e !important;
|
||||
|
||||
.merge-table {
|
||||
padding: 0 10px;
|
||||
|
||||
::v-deep.el-table {
|
||||
background-color: #1e1e1e !important;
|
||||
color: #383838;
|
||||
}
|
||||
::v-deep.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
|
||||
|
||||
::v-deep.el-table td.el-table__cell,
|
||||
.el-table th.el-table__cell.is-leaf {
|
||||
border-bottom: 1px solid #383838;
|
||||
}
|
||||
.el-table--border::after, .el-table--group::after, .el-table::before{
|
||||
|
||||
.el-table--border::after,
|
||||
.el-table--group::after,
|
||||
.el-table::before {
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
::v-deep.el-table__header-wrapper{
|
||||
th{
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
border-bottom: 1px solid #383838;
|
||||
}
|
||||
|
||||
::v-deep.el-table__header-wrapper {
|
||||
th {
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
border-bottom: 1px solid #383838;
|
||||
}
|
||||
::v-deep.el-table__body-wrapper{
|
||||
tr{
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
|
||||
::v-deep.el-table__body-wrapper {
|
||||
tr {
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
}
|
||||
tr:hover > td{
|
||||
background-color: #1e1e1e !important;
|
||||
|
||||
tr:hover>td {
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
}
|
||||
::v-deep.el-table__empty-block{
|
||||
background-color: #1e1e1e !important;
|
||||
|
||||
::v-deep.el-table__empty-block {
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
.merge-label{
|
||||
color:#ddd;
|
||||
|
||||
.merge-label {
|
||||
color: #ddd;
|
||||
font-size: 13px;
|
||||
margin-bottom: 10px;
|
||||
span{
|
||||
|
||||
span {
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,198 +13,135 @@
|
|||
</div>
|
||||
</div>
|
||||
<div ref="scrollPanel" style="height: 420px;overflow-y: auto;overflow-x: hidden;" @scroll.stop="scrollHandle">
|
||||
<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
|
||||
:ref="`select_LesionType`"
|
||||
v-model="questionForm.LesionType"
|
||||
filterable
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask || answers.SplitOrMergeType === '1'"
|
||||
@change="((val)=>{lesionTypeChange(val)})"
|
||||
>
|
||||
<el-select :ref="`select_LesionType`" v-model="questionForm.LesionType" filterable
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2 || !isBaseLineTask || answers.SplitOrMergeType === '1'"
|
||||
@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>
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
:key="qs.Id"
|
||||
:label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id"
|
||||
:rules="[
|
||||
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (qs.RelevanceValue.includes(questionForm[qs.RelevanceId]))) || (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-for="qs in questions" v-show="qs.ShowQuestion !== 2" :key="qs.Id" :label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id" :rules="[
|
||||
{
|
||||
required: (qs.IsRequired === 0 || (qs.IsRequired === 1 && qs.RelevanceId && (qs.RelevanceValue.includes(questionForm[qs.RelevanceId]))) || (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']
|
||||
},
|
||||
]">
|
||||
|
||||
<!-- 输入框 -->
|
||||
<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;">
|
||||
<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)) || answers.SplitOrMergeType === '1'"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<template v-if="(qs.QuestionMark === 0 || qs.QuestionMark === 1) && 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<!-- {{ ((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)) || answers.SplitOrMergeType === '1'"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
|
||||
</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 || answers.SplitOrMergeType === '1'"
|
||||
@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 || answers.SplitOrMergeType === '1'"
|
||||
@change="((val) => { formItemChange(val, qs) })" />
|
||||
<!-- 下拉框 -->
|
||||
<!-- :disabled="!isCurrentTask || readingTaskState>=2 || (!isBaseLineTask && qs.QuestionMark === 5 && isCurrentTaskAdd === 'False') || qs.QuestionMark === 2 || (qs.QuestionMark === 8 && !isBaseLineTask && isCurrentTaskAdd === 'False')" -->
|
||||
|
||||
<el-select
|
||||
v-if="qs.Type==='select'"
|
||||
:ref="`select_${qs.Id}`"
|
||||
v-model="questionForm[qs.Id]"
|
||||
filterable
|
||||
<el-select v-if="qs.Type === 'select'" :ref="`select_${qs.Id}`" 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)) || (qs.QuestionMark === 7 && stateDisabled) || answers.SplitOrMergeType === '1' || (qs.QuestionMark === 7 && answers.SplitOrMergeType === '3')"
|
||||
@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)) || (qs.QuestionMark === 7 && stateDisabled) || answers.SplitOrMergeType === '1' || (qs.QuestionMark === 7 && answers.SplitOrMergeType === '3')"
|
||||
@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 && isBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value === 0) || (lesionType === 1 && (item.value === 0))"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answers.LastTaskState))}` : ''"
|
||||
>
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode, parseFloat(answers.LastTaskState))}` : ''">
|
||||
<!-- 首次分裂的病灶只能选择存在 -->
|
||||
<template v-if="answers.IsFristAdd=== 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-if="answers.IsFristAdd === 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<!-- 首次添加的新病灶不能为无法评估和消失 -->
|
||||
<template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-else-if="isCurrentTaskAdd === 'True' && lesionType === 2">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])" :key="item.id" :value="item.value"
|
||||
:label="item.label" />
|
||||
</template>
|
||||
</el-option-group>
|
||||
</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 || answers.SplitOrMergeType === '1'"
|
||||
>
|
||||
<el-radio
|
||||
v-for="val in qs.options.split('|')"
|
||||
:key="val"
|
||||
:label="val"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<el-radio-group v-if="qs.Type === 'radio'" v-model="questionForm[qs.id]"
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2 || answers.SplitOrMergeType === '1'">
|
||||
<el-radio v-for="val in qs.options.split('|')" :key="val" :label="val"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
{{ val }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="qs.QuestionMark === 20">
|
||||
<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;"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<viewer
|
||||
v-if="answers.OtherPicturePath"
|
||||
ref="viewer"
|
||||
style="margin:0 10px;"
|
||||
:images="[`${OSSclientConfig.basePath}${answers.OtherPicturePath}`]"
|
||||
>
|
||||
<div style="display: flex;justify-content: space-between;" v-if="qs.Type === 'calculation'">
|
||||
<el-input v-if="qs.Type === 'calculation'" v-model="questionForm[qs.Id]" disabled style="width:120px;"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<viewer v-if="answers.OtherPicturePath" ref="viewer" style="margin:0 10px;"
|
||||
:images="[`${OSSclientConfig.basePath}${answers.OtherPicturePath}`]">
|
||||
<span style="color:#409eff;cursor: pointer" @click="previewImage()">
|
||||
{{ $t('trials:lugano:button:suvscreenshot1') }}
|
||||
</span>
|
||||
<img
|
||||
v-show="false"
|
||||
crossorigin="anonymous"
|
||||
:src="`${OSSclientConfig.basePath}${answers.OtherPicturePath}`"
|
||||
alt="Image"
|
||||
>
|
||||
<img v-show="false" crossorigin="anonymous"
|
||||
:src="`${OSSclientConfig.basePath}${answers.OtherPicturePath}`" alt="Image">
|
||||
</viewer>
|
||||
<!-- <img
|
||||
v-if="answers.OtherPicturePath"
|
||||
|
|
@ -226,45 +157,39 @@
|
|||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input
|
||||
v-if="qs.Type==='calculation'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
disabled
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<div style="display: flex;justify-content: space-between;" v-if="qs.Type === 'calculation'">
|
||||
<el-input v-if="qs.Type === 'calculation'" v-model="questionForm[qs.Id]" disabled
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
v-if="isCurrentTask && readingTaskState<2 && (answers.SplitOrMergeType !== '1' && answers.SplitOrMergeType !== '3')"
|
||||
class="base-dialog-footer"
|
||||
style="text-align:right;margin-top:10px;"
|
||||
>
|
||||
v-if="isCurrentTask && readingTaskState < 2 && (answers.SplitOrMergeType !== '1' && answers.SplitOrMergeType !== '3')"
|
||||
class="base-dialog-footer" style="text-align:right;margin-top:10px;">
|
||||
<!-- 清除标记 -->
|
||||
<el-button
|
||||
v-if="questionForm.MeasureData"
|
||||
size="mini"
|
||||
@click="handleDeleteMeasureData"
|
||||
>
|
||||
<el-button v-if="questionForm.MeasureData" 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>
|
||||
|
|
@ -272,7 +197,7 @@
|
|||
</el-form>
|
||||
</template>
|
||||
<script>
|
||||
import { submitTableQuestion, deleteReadingRowAnswer, getIsSuvMaxLesionNoPet } from '@/api/trials'
|
||||
import { submitTableQuestion, deleteReadingRowAnswer, getIsSuvMaxLesion } from '@/api/trials'
|
||||
// import { uploadPrintscreen } from '@/api/reading'
|
||||
import DicomEvent from './../DicomEvent'
|
||||
import store from '@/store'
|
||||
|
|
@ -368,6 +293,9 @@ export default {
|
|||
// container.removeEventListener('scroll', this.scrollHandle , true)
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
scrollHandle() {
|
||||
for (const k in this.$refs) {
|
||||
if (k.indexOf('select_') === -1) continue
|
||||
|
|
@ -505,11 +433,11 @@ export default {
|
|||
if ((ldi > 15 && ldi <= 20) && (pddIncrease >= 50) && (ldiIncrease >= 5 || sdiIncrease >= 5)) {
|
||||
this.stateDisabled = true
|
||||
} else if ((ldi > 20) && (pddIncrease >= 50) && (ldiIncrease >= 10 || sdiIncrease >= 10)) {
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
this.stateDisabled = true
|
||||
} else {
|
||||
this.stateDisabled = false
|
||||
|
|
@ -607,8 +535,8 @@ export default {
|
|||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
})
|
||||
.then(() => {})
|
||||
.catch(() => {})
|
||||
.then(() => { })
|
||||
.catch(() => { })
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
}
|
||||
|
|
@ -621,7 +549,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
|
|
@ -653,7 +581,7 @@ export default {
|
|||
})
|
||||
},
|
||||
deleteLesionInfo() {
|
||||
return new Promise(async(resolve, reject) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
var param = {
|
||||
visitTaskId: this.visitTaskId,
|
||||
|
|
@ -965,31 +893,31 @@ export default {
|
|||
this.stateDisabled = false
|
||||
}
|
||||
} else {
|
||||
/** 疾病进展
|
||||
* 15mm<当前靶病灶LDi≤20mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥5 mm 或者 相比PPD最低点SDi增加值≥5 mm
|
||||
**/
|
||||
/** 疾病进展
|
||||
* 15mm<当前靶病灶LDi≤20mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥5 mm 或者 相比PPD最低点SDi增加值≥5 mm
|
||||
**/
|
||||
if ((ldi > 15 && ldi <= 20) && (pddIncreaseNum >= 50) && (ldiIncrease >= 5 || sdiIncrease >= 5)) {
|
||||
const stateId = this.getQuestionId(7)
|
||||
this.$set(this.questionForm, stateId, 4)
|
||||
this.stateDisabled = true
|
||||
} else if ((ldi > 20) && (pddIncreaseNum >= 50) && (ldiIncrease >= 10 || sdiIncrease >= 10)) {
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
/** 疾病进展
|
||||
* 当前靶病灶LDi>20 mm
|
||||
* 相比最低点PPD增加百分比 ≥50%
|
||||
* 相比PPD最低点LDi增加值 ≥10 mm 或者 相比PPD最低点SDi增加值Sdi ≥10 mm
|
||||
**/
|
||||
const stateId = this.getQuestionId(7)
|
||||
this.$set(this.questionForm, stateId, 4)
|
||||
this.stateDisabled = true
|
||||
} else {
|
||||
// 不符合疾病进展是否需要清空修改前疾病进展的状态
|
||||
// const lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||||
// if (lesionState === 4) {
|
||||
// const stateId = this.getQuestionId(7)
|
||||
// this.$set(this.questionForm, stateId, null)
|
||||
// }
|
||||
// 不符合疾病进展是否需要清空修改前疾病进展的状态
|
||||
// const lesionState = !isNaN(parseInt(this.getQuestionVal(7))) ? parseInt(this.getQuestionVal(7)) : ''
|
||||
// if (lesionState === 4) {
|
||||
// const stateId = this.getQuestionId(7)
|
||||
// this.$set(this.questionForm, stateId, null)
|
||||
// }
|
||||
this.stateDisabled = false
|
||||
}
|
||||
}
|
||||
|
|
@ -1132,7 +1060,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState1'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1143,7 +1071,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState2'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1159,7 +1087,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1170,7 +1098,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState12'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1187,7 +1115,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState3'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1199,7 +1127,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState4'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1215,7 +1143,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1234,7 +1162,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1258,7 +1186,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1270,7 +1198,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1287,7 +1215,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState5'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1296,7 +1224,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState6'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1318,7 +1246,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1347,7 +1275,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState7'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1359,7 +1287,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState8'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1376,7 +1304,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1388,7 +1316,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState9'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1405,7 +1333,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1417,7 +1345,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState10'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1434,7 +1362,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1446,7 +1374,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1463,7 +1391,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1475,7 +1403,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1492,7 +1420,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1504,7 +1432,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:lugano:message:validState11'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1550,7 +1478,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1562,7 +1490,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1579,7 +1507,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1591,7 +1519,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1737,7 +1665,7 @@ export default {
|
|||
// 判断该病灶的suvmax是否是最大的
|
||||
const suvMax = this.getQuestionVal(20)
|
||||
if (this.questionForm.RowId && !!suvMax) {
|
||||
const res = await getIsSuvMaxLesionNoPet({ visitTaskId: this.visitTaskId, rowId: this.questionForm.RowId })
|
||||
const res = await getIsSuvMaxLesion({ visitTaskId: this.visitTaskId, rowId: this.questionForm.RowId })
|
||||
if (res.IsSuccess && res.Result.IsSuvMaxLesion) {
|
||||
message = this.$t('trials:reading:warnning:msg58')
|
||||
}
|
||||
|
|
@ -1837,51 +1765,62 @@ 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;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
.suv_viewer{
|
||||
|
||||
.suv_viewer {
|
||||
::v-deep .viewer-play {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -8,11 +8,9 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -25,121 +23,132 @@
|
|||
:question-form-change-num="questionFormChangeNum"
|
||||
:group-classify="1"
|
||||
/> -->
|
||||
<Questions
|
||||
ref="ecrf"
|
||||
:question-form-change-state="true"
|
||||
:question-form-change-num="0"
|
||||
:is-qulity-issues="false"
|
||||
:group-classify="1"
|
||||
/>
|
||||
<Questions ref="ecrf" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false"
|
||||
:group-classify="1" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template v-if="questions.length > 0 && CriterionType !== 10">
|
||||
<div v-for="(qs,index) in questions" :key="index" v-loading="loading" class="lesions lesions_wrapper">
|
||||
<div v-for="(qs, index) in questions" :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">
|
||||
<div v-for="item in qs.Childrens" v-show="!(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
|
||||
},
|
||||
})" />
|
||||
</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: item.LesionType === 1 && readingTaskState < 2?'58px':'50px',top: '2px'}">
|
||||
<div
|
||||
:style="{ position: 'absolute', left: item.LesionType === 1 && readingTaskState < 2 ? '58px' : '50px', top: '2px' }">
|
||||
<!-- white-space: nowrap;overflow: hidden;text-overflow: ellipsis; -->
|
||||
|
||||
<div style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
|
||||
<el-tooltip v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'" class="item" effect="dark" :content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`" placement="bottom">
|
||||
<div v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'">
|
||||
<div
|
||||
style="font-size: 11px;width:210px;height: 30px;display: flex;justify-content: flex-start;flex-wrap: nowrap;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">
|
||||
<el-tooltip
|
||||
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'"
|
||||
class="item" effect="dark"
|
||||
:content="`${$t('trials:reading:message:fused')}${item.TableQuestions.Answers[i].SplitOrMergeLesionName}`"
|
||||
placement="bottom">
|
||||
<div
|
||||
v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '1' || item.TableQuestions.Answers[i].SplitOrMergeType === '3'">
|
||||
<span class="login-cycle" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<div v-if="item.TableQuestions.Answers[i].SplitOrMergeType === '4'">
|
||||
<span class="login-cycle" />
|
||||
</div>
|
||||
<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="max-width: 100px;overflow: hidden;">
|
||||
<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="max-width: 100px;overflow: hidden;">
|
||||
{{ item.TableQuestions.Answers[i].lesionPart }}
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<div v-if="item.LesionType === 0" style="margin:0 5px;">
|
||||
{{ $fd('TargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('TargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</div>
|
||||
<div v-else-if="item.LesionType === 1" style="margin:0 5px;">
|
||||
{{ $fd('NoTargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('NoTargetState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</div>
|
||||
<div v-else style="margin:0 5px;">
|
||||
{{ $fd('NewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('NewLesionState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</div>
|
||||
<div v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
<el-tooltip class="item" effect="dark" :content="`${item.TableQuestions.Answers[i].lesionLength}*${item.TableQuestions.Answers[i].lesionShort}m㎡`" placement="bottom">
|
||||
<span>{{ item.TableQuestions.Answers[i].lesionLength }}*{{ item.TableQuestions.Answers[i].lesionShort }}m㎡</span>
|
||||
<el-tooltip class="item" effect="dark"
|
||||
:content="`${item.TableQuestions.Answers[i].lesionLength}*${item.TableQuestions.Answers[i].lesionShort}m㎡`"
|
||||
placement="bottom">
|
||||
<span>{{ item.TableQuestions.Answers[i].lesionLength }}*{{
|
||||
item.TableQuestions.Answers[i].lesionShort }}m㎡</span>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False' && readingTaskState < 2" style="position: absolute;right: 5px;top: 2px;">
|
||||
<div v-if="item.TableQuestions.Answers[i].IsCurrentTaskAdd === 'False' && readingTaskState < 2"
|
||||
style="position: absolute;right: 5px;top: 2px;">
|
||||
<!-- 分裂 -->
|
||||
<el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '4' && ((item.LesionType === 0 && [0,4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 1 && [0,1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0))" class="item" :content="$t('trials:reading:button:split')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;" @click.stop="handleSplit(item.TableQuestions.Answers[i].RowId,item.Id)" />
|
||||
<el-tooltip
|
||||
v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '4' && ((item.LesionType === 0 && [0, 4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 1 && [0, 1].includes(parseInt(item.TableQuestions.Answers[i].lesionState))) || (item.LesionType === 2 && parseInt(item.TableQuestions.Answers[i].lesionState) === 0))"
|
||||
class="item" :content="$t('trials:reading:button:split')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||
@click.stop="handleSplit(item.TableQuestions.Answers[i].RowId, item.Id)" />
|
||||
</el-tooltip>
|
||||
|
||||
<!-- 融合 -->
|
||||
<el-tooltip v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '2' && ((item.LesionType === 0 && [0,1,4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))))" class="item" :content="$t('trials:reading:button:merge')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-merge" style="color:#fff;font-size: 16px;" @click.stop="handleMerge(item.TableQuestions.Answers[i],item.Id,item.OrderMark)" />
|
||||
<el-tooltip
|
||||
v-show="!!item.TableQuestions.Answers[i].RowId && item.TableQuestions.Answers[i].SplitOrMergeType !== '2' && ((item.LesionType === 0 && [0, 1, 4].includes(parseInt(item.TableQuestions.Answers[i].lesionState))))"
|
||||
class="item" :content="$t('trials:reading:button:merge')" placement="bottom">
|
||||
<i class="iconfont icon-24gl-merge" style="color:#fff;font-size: 16px;"
|
||||
@click.stop="handleMerge(item.TableQuestions.Answers[i], item.Id, item.OrderMark)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</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"
|
||||
@getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession"
|
||||
@resetQuestions="resetQuestions"
|
||||
@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" @getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession" @resetQuestions="resetQuestions"
|
||||
@close="close" @handleReadingChart="handleReadingChart" />
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
|
|
@ -149,35 +158,15 @@
|
|||
</template>
|
||||
<!-- <el-divider /> -->
|
||||
<!-- 肝脏评估 -->
|
||||
<Questions
|
||||
ref="ecrf2"
|
||||
:question-form-change-state="true"
|
||||
:question-form-change-num="0"
|
||||
:group-classify="2"
|
||||
:is-qulity-issues="false"
|
||||
style="margin-top:20px"
|
||||
:question-type="6"
|
||||
@setNonTargetMeasurementStatus="setNonTargetMeasurementStatus"
|
||||
/>
|
||||
<Questions ref="ecrf2" :question-form-change-state="true" :question-form-change-num="0" :group-classify="2"
|
||||
:is-qulity-issues="false" style="margin-top:20px" :question-type="6"
|
||||
@setNonTargetMeasurementStatus="setNonTargetMeasurementStatus" />
|
||||
<!-- 脾脏评估 -->
|
||||
<Questions
|
||||
ref="ecrf3"
|
||||
:question-form-change-state="true"
|
||||
:question-form-change-num="0"
|
||||
:group-classify="3"
|
||||
:is-qulity-issues="false"
|
||||
:question-type="7"
|
||||
@setNonTargetMeasurementStatus="setNonTargetMeasurementStatus"
|
||||
/>
|
||||
<Questions ref="ecrf3" :question-form-change-state="true" :question-form-change-num="0" :group-classify="3"
|
||||
:is-qulity-issues="false" :question-type="7" @setNonTargetMeasurementStatus="setNonTargetMeasurementStatus" />
|
||||
</div>
|
||||
<el-dialog
|
||||
v-if="merge.visible"
|
||||
v-loading="merge.loading"
|
||||
:visible.sync="merge.visible"
|
||||
:close-on-click-modal="false"
|
||||
:title="$t('trials:reading:lugano:message:merge')"
|
||||
width="500px"
|
||||
>
|
||||
<el-dialog v-if="merge.visible" v-loading="merge.loading" :visible.sync="merge.visible"
|
||||
:close-on-click-modal="false" :title="$t('trials:reading:lugano:message:merge')" width="500px">
|
||||
<div class="merge-table">
|
||||
<div class="merge-label">
|
||||
<label>{{ $t('trials:reading:lugano:label:currentLesion') }}</label>
|
||||
|
|
@ -185,40 +174,19 @@
|
|||
<span style="margin-left:10px">{{ mergeInfo.lesionPart }}</span>
|
||||
</div>
|
||||
<div class="merge-label"><label>{{ $t('trials:reading:lugano:label:selectLesion') }}</label></div>
|
||||
<el-table
|
||||
:data="lesionData"
|
||||
style="width: 450px"
|
||||
size="small"
|
||||
height="200"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="45"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="OrderMarkName"
|
||||
:label="$t('trials:reading:lugano:label:lesionNumber')"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="Part"
|
||||
:label="$t('trials:reading:lugano:label:lesionLocation')"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table :data="lesionData" style="width: 450px" size="small" height="200"
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="45" />
|
||||
<el-table-column prop="OrderMarkName" :label="$t('trials:reading:lugano:label:lesionNumber')" width="100" />
|
||||
<el-table-column prop="Part" :label="$t('trials:reading:lugano:label:lesionLocation')" min-width="120"
|
||||
show-overflow-tooltip />
|
||||
</el-table>
|
||||
</div>
|
||||
<div slot="footer" style="text-align:right;">
|
||||
<!-- 取消 -->
|
||||
<el-button size="mini" @click="merge.visible = false">{{ $t('common:button:cancel') }}</el-button>
|
||||
<!-- 确认 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
:disabled="mergeList.length === 0"
|
||||
@click="confirmMerge"
|
||||
>
|
||||
<el-button type="primary" size="mini" :disabled="mergeList.length === 0" @click="confirmMerge">
|
||||
{{ $t('common:button:confirm') }}</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
|
@ -333,7 +301,7 @@ export default {
|
|||
DicomEvent.$on('split', measureData => {
|
||||
this.handleSplit(measureData.RowId, measureData.QuestionId)
|
||||
})
|
||||
DicomEvent.$on('refreshQuestions', async(obj) => {
|
||||
DicomEvent.$on('refreshQuestions', async (obj) => {
|
||||
var triald = this.$router.currentRoute.query.trialId
|
||||
await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: triald, visitTaskId: this.visitTaskId })
|
||||
this.$nextTick(() => {
|
||||
|
|
@ -342,7 +310,7 @@ export default {
|
|||
this.$refs['ecrf3'].getQuestions(this.visitTaskId)
|
||||
})
|
||||
})
|
||||
DicomEvent.$on('refreshSplitTargetLesionPDD', async(callback) => {
|
||||
DicomEvent.$on('refreshSplitTargetLesionPDD', async (callback) => {
|
||||
const res = await getSplitPPdSumNoPet({ visitTaskId: this.visitTaskId })
|
||||
this.splitTargetLesions = res.Result
|
||||
if (this.splitTargetLesions && this.splitTargetLesions.length > 0) {
|
||||
|
|
@ -366,6 +334,9 @@ export default {
|
|||
DicomEvent.$off('refreshQuestions')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
@ -529,7 +500,7 @@ export default {
|
|||
try {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
|
||||
await store.dispatch('reading/refreshReadingQuestionAndAnswer', { trialId: this.$router.currentRoute.query.trialId, visitTaskId: this.visitTaskId }).then(async() => {
|
||||
await store.dispatch('reading/refreshReadingQuestionAndAnswer', { trialId: this.$router.currentRoute.query.trialId, visitTaskId: this.visitTaskId }).then(async () => {
|
||||
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
|
||||
if (idx > -1) {
|
||||
if (this.visitTaskList[idx].ReadingQuestions.length > 0) {
|
||||
|
|
@ -655,7 +626,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
} else {
|
||||
// 是否确认分裂
|
||||
this.$confirm(this.$t('trials:reading:warnning:msg4'), {
|
||||
|
|
@ -665,7 +636,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -722,7 +693,7 @@ export default {
|
|||
})
|
||||
},
|
||||
confirmMerge() {
|
||||
// '融合后将无法撤销, 是否继续?'
|
||||
// '融合后将无法撤销, 是否继续?'
|
||||
this.$confirm(this.$t('trials:reading:lugano:warnning:fuse'), {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
|
|
@ -875,7 +846,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -886,7 +857,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
} else {
|
||||
// saveTypeEnum: 0
|
||||
|
|
@ -1026,7 +997,7 @@ export default {
|
|||
async changeLesionType(questionsObj) {
|
||||
await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: questionsObj.oldLesionType, rowIndex: questionsObj.rowIndex, visitTaskId: this.visitTaskId })
|
||||
// saveTypeEnum: 0
|
||||
var lesionObj = { }
|
||||
var lesionObj = {}
|
||||
var questionObj = questionsObj.questionForm
|
||||
// 切换到新的病灶集合
|
||||
var targetObj = this.tableQuestions.find(item => item.LesionType === questionsObj.newLesionType)
|
||||
|
|
@ -1343,21 +1314,25 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
.container{
|
||||
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -1365,14 +1340,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -1381,21 +1358,24 @@ 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;
|
||||
}
|
||||
.login-cycle{
|
||||
|
||||
.login-cycle {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
display: inline-block;
|
||||
|
|
@ -1404,28 +1384,33 @@ export default {
|
|||
margin-right: 2px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.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;
|
||||
|
|
@ -1434,46 +1419,59 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
.merge-table{
|
||||
padding:0 10px;
|
||||
::v-deep.el-table{
|
||||
background-color: #1e1e1e !important;
|
||||
|
||||
.merge-table {
|
||||
padding: 0 10px;
|
||||
|
||||
::v-deep.el-table {
|
||||
background-color: #1e1e1e !important;
|
||||
color: #383838;
|
||||
}
|
||||
::v-deep.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
|
||||
|
||||
::v-deep.el-table td.el-table__cell,
|
||||
.el-table th.el-table__cell.is-leaf {
|
||||
border-bottom: 1px solid #383838;
|
||||
}
|
||||
.el-table--border::after, .el-table--group::after, .el-table::before{
|
||||
|
||||
.el-table--border::after,
|
||||
.el-table--group::after,
|
||||
.el-table::before {
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
::v-deep.el-table__header-wrapper{
|
||||
th{
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
border-bottom: 1px solid #383838;
|
||||
}
|
||||
|
||||
::v-deep.el-table__header-wrapper {
|
||||
th {
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
border-bottom: 1px solid #383838;
|
||||
}
|
||||
::v-deep.el-table__body-wrapper{
|
||||
tr{
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
|
||||
::v-deep.el-table__body-wrapper {
|
||||
tr {
|
||||
background-color: #1e1e1e !important;
|
||||
color: #dfdfdf;
|
||||
}
|
||||
tr:hover > td{
|
||||
background-color: #1e1e1e !important;
|
||||
|
||||
tr:hover>td {
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
}
|
||||
::v-deep.el-table__empty-block{
|
||||
background-color: #1e1e1e !important;
|
||||
|
||||
::v-deep.el-table__empty-block {
|
||||
background-color: #1e1e1e !important;
|
||||
}
|
||||
.merge-label{
|
||||
color:#ddd;
|
||||
|
||||
.merge-label {
|
||||
color: #ddd;
|
||||
font-size: 13px;
|
||||
margin-bottom: 10px;
|
||||
span{
|
||||
|
||||
span {
|
||||
font-size: 15px;
|
||||
color: red;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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="questionName" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||||
|
|
@ -18,183 +12,132 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
:key="qs.Id"
|
||||
:label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id"
|
||||
:rules="[
|
||||
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (String(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']},
|
||||
]"
|
||||
style="flex-wrap: wrap"
|
||||
>
|
||||
<el-form-item v-for="qs in questions" v-show="qs.ShowQuestion !== 2" :key="qs.Id" :label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id" :rules="[
|
||||
{
|
||||
required: (qs.IsRequired === 0 || (qs.IsRequired === 1 && qs.RelevanceId && (String(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']
|
||||
},
|
||||
]" style="flex-wrap: wrap">
|
||||
|
||||
<!-- 输入框 -->
|
||||
<template v-if="(qs.Type==='input' || qs.Type==='number') && (qs.QuestionMark === 1101 || qs.QuestionMark === 1102 || qs.QuestionMark === 1103)">
|
||||
<template
|
||||
v-if="(qs.Type === 'input' || qs.Type === 'number') && (qs.QuestionMark === 1101 || qs.QuestionMark === 1102 || qs.QuestionMark === 1103)">
|
||||
<div style="display: flex;flex-direction: row;justify-content: flex-start;align-items: center;">
|
||||
<el-input
|
||||
v-model="questionForm[qs.Id]"
|
||||
disabled
|
||||
style="width: 100px;"
|
||||
>
|
||||
<el-input v-model="questionForm[qs.Id]" disabled style="width: 100px;">
|
||||
<template v-if="qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<!-- 测量 -->
|
||||
<el-button
|
||||
v-if="questionForm[isMeasurableId] && parseInt(questionForm[isMeasurableId]) === 1 && !questionForm[qs.Id] && readingTaskState!== 2"
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="addAnnotation(qs)"
|
||||
>
|
||||
v-if="questionForm[isMeasurableId] && parseInt(questionForm[isMeasurableId]) === 1 && !questionForm[qs.Id] && readingTaskState !== 2"
|
||||
size="mini" type="text" @click="addAnnotation(qs)">
|
||||
{{ $t('trials:MRIPDFF:button:measure') }}
|
||||
</el-button>
|
||||
<!-- 清除标记 -->
|
||||
<el-button
|
||||
v-if="getAnnotationStatus(qs) && readingTaskState!== 2"
|
||||
size="mini"
|
||||
type="text"
|
||||
style="margin-left: 0px"
|
||||
@click="removeAnnotation(qs)"
|
||||
>
|
||||
<el-button v-if="getAnnotationStatus(qs) && readingTaskState !== 2" size="mini" type="text"
|
||||
style="margin-left: 0px" @click="removeAnnotation(qs)">
|
||||
{{ $t('trials:MRIPDFF:button:clear') }}
|
||||
</el-button>
|
||||
<!-- 返回 -->
|
||||
<el-button
|
||||
v-if="questionForm[qs.Id]"
|
||||
size="mini"
|
||||
type="text"
|
||||
style="margin-left: 0px"
|
||||
@click="locateAnnotation(qs)"
|
||||
>
|
||||
<el-button v-if="questionForm[qs.Id]" size="mini" type="text" style="margin-left: 0px"
|
||||
@click="locateAnnotation(qs)">
|
||||
{{ $t('trials:MRIPDFF:button:return') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
v-if="questionForm[isMeasurableId] && parseInt(questionForm[isMeasurableId]) === 1 && questionForm[qs.Id] && readingTaskState!== 2"
|
||||
size="mini"
|
||||
type="text"
|
||||
style="margin-left: 0px"
|
||||
@click="saveAnnotation(qs)"
|
||||
>
|
||||
v-if="questionForm[isMeasurableId] && parseInt(questionForm[isMeasurableId]) === 1 && questionForm[qs.Id] && readingTaskState !== 2"
|
||||
size="mini" type="text" style="margin-left: 0px" @click="saveAnnotation(qs)">
|
||||
<!-- 未保存 -->
|
||||
<el-tooltip v-if="getAnnotationSaveEnum(qs) === 0" class="item" effect="dark" :content="$t('trials:reading:button:unsaved')" placement="bottom">
|
||||
<el-tooltip v-if="getAnnotationSaveEnum(qs) === 0" 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>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="qs.Type==='input' || qs.Type==='number'">
|
||||
<el-input
|
||||
v-model="questionForm[qs.Id]"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<template v-else-if="qs.Type === 'input' || qs.Type === 'number'">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<el-input v-model="questionForm[qs.Id]" :disabled="!isCurrentTask || readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<template v-if="(qs.QuestionMark === 0 || qs.QuestionMark === 1) && 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
</template>
|
||||
<!-- 多行文本输入框 -->
|
||||
<el-input
|
||||
v-else-if="qs.Type==='textarea'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
/>
|
||||
<el-input v-else-if="qs.Type === 'textarea'" v-model="questionForm[qs.Id]" type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }" :disabled="!isCurrentTask || readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, qs) })" />
|
||||
<!-- 下拉框 -->
|
||||
|
||||
<el-select
|
||||
v-else-if="qs.Type==='select'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
filterable
|
||||
<el-select v-else-if="qs.Type === 'select'" v-model="questionForm[qs.Id]" filterable
|
||||
:placeholder="$t('common:placeholder:select')"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || qs.QuestionMark === 1106"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2 || qs.QuestionMark === 1106"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<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">
|
||||
<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-else-if="qs.Type==='radio'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || (qs.QuestionMark === 1105 && isDisabledMeasurableRadio)"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<el-radio-group v-else-if="qs.Type === 'radio'" v-model="questionForm[qs.Id]"
|
||||
:disabled="!isCurrentTask || readingTaskState >= 2 || (qs.QuestionMark === 1105 && isDisabledMeasurableRadio)"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<template v-if="qs.DictionaryCode.length > 0">
|
||||
<el-radio
|
||||
v-for="item in $d[qs.DictionaryCode]"
|
||||
:key="item.id"
|
||||
:label="item.value"
|
||||
>
|
||||
<el-radio v-for="item in $d[qs.DictionaryCode]" :key="item.id" :label="item.value">
|
||||
{{ item.label }}
|
||||
</el-radio>
|
||||
</template>
|
||||
<template v-else-if="qs.options.length > 0">
|
||||
<el-radio
|
||||
v-for="val in qs.options.split('|')"
|
||||
:key="val"
|
||||
:label="val"
|
||||
>
|
||||
<el-radio v-for="val in qs.options.split('|')" :key="val" :label="val">
|
||||
{{ val }}
|
||||
</el-radio>
|
||||
</template>
|
||||
</el-radio-group>
|
||||
<!-- 自动计算 -->
|
||||
<el-input
|
||||
v-else-if="qs.Type==='calculation'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
disabled
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<div style="display: flex;justify-content: space-between;" v-else-if="qs.Type === 'calculation'">
|
||||
<!-- 自动计算 -->
|
||||
<el-input v-model="questionForm[qs.Id]" disabled @change="((val) => { formItemChange(val, qs) })">
|
||||
<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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
</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
|
||||
size="mini"
|
||||
@click="handleSave"
|
||||
>
|
||||
<el-button size="mini" @click="handleSave">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
|
@ -290,6 +233,9 @@ export default {
|
|||
DicomEvent.$off('handleImageQualityAbnormal')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initForm() {
|
||||
this.isRender = false
|
||||
this.isMeasurableId = this.getQuestionId(1105)
|
||||
|
|
@ -503,7 +449,7 @@ export default {
|
|||
const orderMarkName = this.getLesionName(this.orderMark, qs.QuestionMark)
|
||||
this.activeQuestionId = qs.Id
|
||||
this.activeQuestionMark = qs.QuestionMark
|
||||
DicomEvent.$emit('addAnnotation', { question: qs, locateInfo: { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: orderMarkName, lesionType: null, markTool: 'Probe', readingTaskState: this.readingTaskState, isMarked: true }})
|
||||
DicomEvent.$emit('addAnnotation', { question: qs, locateInfo: { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: orderMarkName, lesionType: null, markTool: 'Probe', readingTaskState: this.readingTaskState, isMarked: true } })
|
||||
},
|
||||
getAnnotationSaveEnum(qs) {
|
||||
const i = this.markList.findIndex(i => i.tableQuestionId === qs.Id)
|
||||
|
|
@ -754,17 +700,17 @@ export default {
|
|||
const valid = await this.$refs.measurementForm.validate()
|
||||
if (!valid) return
|
||||
if (parseInt(this.questionForm[this.isMeasurableId]) === 1) {
|
||||
// 检验是否有标记为保存
|
||||
// 检验是否有标记为保存
|
||||
const i = this.markList.findIndex(i => i.saveEnum === 0)
|
||||
if (i > -1) {
|
||||
// 请先保存标注信息!
|
||||
// 请先保存标注信息!
|
||||
this.$alert(this.$t('trials:MRIPDFF:message:message1'))
|
||||
// this.$message.warning(this.$t('trials:MRIPDFF:message:message1'))
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// 不可测量时,清空测量值,平均值
|
||||
// '是否确认不可测量?'
|
||||
// 不可测量时,清空测量值,平均值
|
||||
// '是否确认不可测量?'
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:MRIPDFF:message:message2'),
|
||||
{
|
||||
|
|
@ -817,7 +763,7 @@ export default {
|
|||
}
|
||||
const res = await submitTaskRowInfo(params, 11)
|
||||
if (res.IsSuccess) {
|
||||
// 保存成功!
|
||||
// 保存成功!
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
this.$set(this.questionForm, 'saveTypeEnum', 2)
|
||||
this.originalQuestionForm = { ...this.questionForm }
|
||||
|
|
@ -853,45 +799,55 @@ 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;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
::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-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;
|
||||
}
|
||||
::v-deep .el-input-group__append, .el-input-group__prepend {
|
||||
|
||||
::v-deep .el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
padding: 0 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>
|
||||
|
|
|
|||
|
|
@ -8,63 +8,62 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 非测量问题 -->
|
||||
<div class="lesions">
|
||||
<Questions ref="ecrf" :groupClassify="1" :question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum" />
|
||||
<Questions ref="ecrf" :groupClassify="1" :question-form-change-state="questionFormChangeState"
|
||||
:question-form-change-num="questionFormChangeNum" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template >
|
||||
<div v-for="(qs,index) in questions" :key="index" v-loading="loading" class="lesions lesions_wrapper">
|
||||
<template>
|
||||
<div v-for="(qs, index) in questions" :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">
|
||||
<div v-for="item in qs.Childrens" v-show="!(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>
|
||||
<div style="color: #ddd;text-align: left;padding: 5px 10px;border-bottom: 1px solid #5a5a5a; font-size: 15px;">
|
||||
<el-row >
|
||||
<div
|
||||
style="color: #ddd;text-align: left;padding: 5px 10px;border-bottom: 1px solid #5a5a5a; font-size: 15px;">
|
||||
<el-row>
|
||||
<!-- 分段 -->
|
||||
<el-col :span="14">{{$t('trials:MRIPDFF:label:col1')}}</el-col>
|
||||
<el-col :span="14">{{ $t('trials:MRIPDFF:label:col1') }}</el-col>
|
||||
<!-- 是否可测量 -->
|
||||
<!-- <el-col :span="7">{{$t('trials:MRIPDFF:label:col2')}}</el-col> -->
|
||||
<!-- 平均值 -->
|
||||
<el-col :span="7">{{$t('trials:MRIPDFF:label:col3')}}</el-col>
|
||||
<el-col :span="7">{{ $t('trials:MRIPDFF:label:col3') }}</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<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.TableQuestions.Questions, q) }}
|
||||
<!-- 未保存 -->
|
||||
<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;right: 0px;top: 2px;">
|
||||
|
|
@ -73,32 +72,23 @@
|
|||
<!-- <div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:95px">
|
||||
{{ $fd('ReadingYesOrNo', parseInt(item.TableQuestions.Answers[i].isMeasurable)) }}
|
||||
</div> -->
|
||||
<div style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:50px">
|
||||
{{ isNaN(parseFloat(item.TableQuestions.Answers[i].mean)) ? item.TableQuestions.Answers[i].mean : `${item.TableQuestions.Answers[i].mean}%` }}
|
||||
<div
|
||||
style="display: inline-block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width:50px">
|
||||
{{ isNaN(parseFloat(item.TableQuestions.Answers[i].mean)) ?
|
||||
item.TableQuestions.Answers[i].mean : `${item.TableQuestions.Answers[i].mean}%` }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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"
|
||||
@getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@resetQuestions="resetQuestions"
|
||||
@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" @getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@resetQuestions="resetQuestions" @close="close" @handleReadingChart="handleReadingChart" />
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
|
|
@ -210,6 +200,9 @@ export default {
|
|||
DicomEvent.$off('getAllUnSaveLesions')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
@ -383,13 +376,13 @@ export default {
|
|||
},
|
||||
|
||||
checkToolCanActive(toolName) {
|
||||
return { isCanActiveTool: true, reason: '' }
|
||||
return { isCanActiveTool: true, reason: '' }
|
||||
},
|
||||
|
||||
getLesionName(questions, q) {
|
||||
let liverSegmentStr = ''
|
||||
if (!this.liverSegmentId) {
|
||||
let i = questions.findIndex(i=>i.QuestionMark === 1106)
|
||||
let i = questions.findIndex(i => i.QuestionMark === 1106)
|
||||
if (i === -1) return
|
||||
this.liverSegmentId = questions[i].Id
|
||||
this.liverSegmentDicCode = questions[i].DictionaryCode
|
||||
|
|
@ -525,23 +518,26 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -549,14 +545,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -565,42 +563,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;
|
||||
|
|
@ -609,7 +614,7 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
<!-- 影像质量问题 -->
|
||||
<div class="lesions">
|
||||
<Questions ref="ecrf" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false"
|
||||
:group-classify="1" />
|
||||
:group-classify="1" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
|
||||
<!-- 测量问题 -->
|
||||
|
|
@ -37,7 +37,8 @@
|
|||
<div class="add-icon" @click.prevent="downloadTpl(item.LesionType)">
|
||||
<i class="el-icon-download" />
|
||||
</div>
|
||||
<div class="add-icon" style="margin: 0 5px;" @click.prevent="uploadTpl(item.LesionType, item.QuestionName)">
|
||||
<div class="add-icon" style="margin: 0 5px;"
|
||||
@click.prevent="uploadTpl(item.LesionType, item.QuestionName)">
|
||||
<i class="el-icon-upload2" />
|
||||
</div>
|
||||
<div class="add-icon" @click.prevent="handleAddOrEdit('add', item)">
|
||||
|
|
@ -154,7 +155,7 @@
|
|||
<el-form ref="tableQsForm" v-loading="loading" :model="qsForm" size="small">
|
||||
<QuestionTableFormItem v-for="item in qsList" :key="item.Id" :question="item" :question-form="qsForm"
|
||||
:reading-task-state="readingTaskState" @setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData" />
|
||||
@resetFormItemData="resetFormItemData" @handleReadingChart="handleReadingChart" />
|
||||
<el-form-item style="text-align: right">
|
||||
<el-button size="small" @click="addOrEdit.visible = false">
|
||||
{{ $t('common:button:cancel') }}
|
||||
|
|
@ -169,7 +170,8 @@
|
|||
<!-- 导入 -->
|
||||
<el-dialog v-if="upload.visible" :visible.sync="upload.visible" :close-on-click-modal="false"
|
||||
:title="upload.title" width="500px">
|
||||
<UploadExcel :visit-task-id="visitTaskId" :lesion-type="upload.lesionType" :TableName="upload.TableName" @close="uploadDlgClose" />
|
||||
<UploadExcel :visit-task-id="visitTaskId" :lesion-type="upload.lesionType" :TableName="upload.TableName"
|
||||
@close="uploadDlgClose" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -282,6 +284,9 @@ export default {
|
|||
DicomEvent.$off('refreshQuestions')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
|
|||
|
|
@ -1,119 +1,66 @@
|
|||
<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>
|
||||
<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']},
|
||||
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' || question.QuestionName.length > 15) ?'uploadWrapper' : '']"
|
||||
>
|
||||
:class="[question.Type === 'group' ? 'mb' : (question.Type === 'upload' || question.QuestionName.length > 15) ? 'uploadWrapper' : '']">
|
||||
<!-- 输入框 -->
|
||||
<el-input
|
||||
v-if="question.Type==='input'"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<el-input v-if="question.Type === 'input'" v-model="questionForm[question.Id]" :disabled="readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 多行文本输入框 -->
|
||||
<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"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<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"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 下拉框 -->
|
||||
<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)"
|
||||
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"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
>
|
||||
<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" @change="((val) => { formItemChange(val, question) })">
|
||||
<el-checkbox v-for="val in question.TypeValue.split('|')" :key="val" :label="val">
|
||||
{{ val }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
|
|
@ -143,41 +90,38 @@
|
|||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
</template> -->
|
||||
<!-- 数值类型 -->
|
||||
<el-input
|
||||
v-else-if="question.Type==='number'"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState>=2 "
|
||||
type="number"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<div style="display: flex;justify-content: space-between;"
|
||||
v-else-if="question.Type === 'calculation' || question.Type === 'number'">
|
||||
<!-- 数值类型 -->
|
||||
<el-input v-if="question.Type === 'number'" v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2" type="number" @change="((val) => { formItemChange(val, question) })">
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
|
||||
<el-input v-else-if="question.Type === 'calculation'" v-model="questionForm[question.Id]" disabled
|
||||
@change="((val) => { formItemChange(val, question) })">
|
||||
<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: {
|
||||
TableQuestionId: question.Id,
|
||||
RowIndex: questionForm.RowIndex
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<el-input
|
||||
v-else-if="question.Type==='calculation'"
|
||||
v-model="questionForm[question.Id]"
|
||||
disabled
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<QuestionTableFormItem
|
||||
v-for="item in question.Childrens"
|
||||
:key="item.Id"
|
||||
:question="item"
|
||||
:question-form="questionForm"
|
||||
:reading-task-state="readingTaskState"
|
||||
@setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData"
|
||||
/>
|
||||
<QuestionTableFormItem v-for="item in question.Childrens" :key="item.Id" :question="item"
|
||||
:question-form="questionForm" :reading-task-state="readingTaskState" @setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData" @handleReadingChart="handleReadingChart"/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -214,6 +158,9 @@ export default {
|
|||
this.digitPlaces = Number(localStorage.getItem('digitPlaces'))
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
formItemChange(v, question) {
|
||||
if (question.Childrens && question.Childrens.length > 0) {
|
||||
this.resetChild(question.Childrens)
|
||||
|
|
@ -269,29 +216,36 @@ 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 !important;
|
||||
align-items: flex-start;
|
||||
}
|
||||
::v-deep .el-input.is-disabled .el-input__inner{
|
||||
background-color: #646464a1;
|
||||
}
|
||||
::v-deep .el-input-group__append, .el-input-group__prepend{
|
||||
padding: 0 10px;
|
||||
}
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
::v-deep .el-select.is-disabled .el-input__inner{
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
::v-deep .el-select.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -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="questionName" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||||
|
|
@ -20,177 +14,108 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<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="true"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d.LesionType"
|
||||
v-show="!(isBaseLineTask && item.value === 2)"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<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="true">
|
||||
<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>
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
:key="qs.Id"
|
||||
:label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id"
|
||||
:rules="qs.QuestionMark===11?[
|
||||
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (questionForm[qs.RelevanceId] === qs.RelevanceValue))) && qs.Type!=='group' && qs.Type!=='summary',
|
||||
message: ['radio', 'select', 'checkbox'].includes(qs.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']},{validator:validateLesionCount, trigger: ['blur', 'change']}]:[
|
||||
{ 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-for="qs in questions" v-show="qs.ShowQuestion !== 2" :key="qs.Id" :label="`${qs.QuestionName}`"
|
||||
:prop="qs.Id" :rules="qs.QuestionMark === 11 ? [
|
||||
{
|
||||
required: (qs.IsRequired === 0 || (qs.IsRequired === 1 && qs.RelevanceId && (questionForm[qs.RelevanceId] === qs.RelevanceValue))) && qs.Type !== 'group' && qs.Type !== 'summary',
|
||||
message: ['radio', 'select', 'checkbox'].includes(qs.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
|
||||
}, { validator: validateLesionCount, trigger: ['blur', 'change'] }] : [
|
||||
{
|
||||
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 }} -->
|
||||
|
||||
<!-- 输入框 min="1"
|
||||
@input="questionForm[qs.Id]=questionForm[qs.Id].replace(/^(0+)|[^\d]+/g,'')"-->
|
||||
<template v-if="qs.Type==='input' || qs.Type==='number'">
|
||||
<template v-if="qs.QuestionMark===11">
|
||||
<el-input
|
||||
v-model="questionForm[qs.Id]"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 "
|
||||
type="number"
|
||||
<template v-if="qs.Type === 'input' || qs.Type === 'number'">
|
||||
<template v-if="qs.QuestionMark === 11">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<el-input v-model="questionForm[qs.Id]" :disabled="!isCurrentTask || readingTaskState >= 2" type="number"
|
||||
@focus="focusQs = { ...qs }" @change="((val) => { formItemChange(val, qs) })">
|
||||
<template v-if="(qs.QuestionMark === 0 || qs.QuestionMark === 1) && 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
@focus="focusQs = {...qs}"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input
|
||||
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') && lesionType !== 2) || qs.QuestionMark === 9 || (qs.QuestionMark === 10 && isCurrentTaskAdd === 'False')"
|
||||
@focus="focusQs = {...qs}"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<template v-if="(qs.QuestionMark===0 || qs.QuestionMark===1) && qs.Unit" slot="append">
|
||||
<el-input 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') && lesionType !== 2) || qs.QuestionMark === 9 || (qs.QuestionMark === 10 && isCurrentTaskAdd === 'False')"
|
||||
@focus="focusQs = { ...qs }" @change="((val) => { formItemChange(val, qs) })">
|
||||
<template v-if="(qs.QuestionMark === 0 || qs.QuestionMark === 1) && qs.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
</template>
|
||||
</template>
|
||||
<!-- 多行文本输入框 -->
|
||||
<el-input
|
||||
v-if="qs.Type==='textarea'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
/>
|
||||
<el-select
|
||||
v-if="qs.Type==='select'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
filterable
|
||||
:disabled="((!isBaseLineTask && qs.QuestionMark === 11) || (isBaseLineTask || lesionType === 2) && qs.QuestionMark === 7) || !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)"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
>
|
||||
<el-input v-if="qs.Type === 'textarea'" v-model="questionForm[qs.Id]" type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }" :disabled="!isCurrentTask || readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, qs) })" />
|
||||
<el-select v-if="qs.Type === 'select'" v-model="questionForm[qs.Id]" filterable
|
||||
:disabled="((!isBaseLineTask && qs.QuestionMark === 11) || (isBaseLineTask || lesionType === 2) && qs.QuestionMark === 7) || !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)"
|
||||
@change="((val) => { formItemChange(val, qs) })">
|
||||
<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 && isBaseLineTask">
|
||||
<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-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<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-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>
|
||||
</el-form-item>
|
||||
|
||||
</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.MeasureData"
|
||||
size="mini"
|
||||
style="padding:7px 10px"
|
||||
@click="handleDeleteMeasureData"
|
||||
>
|
||||
<el-button v-if="questionForm.MeasureData" size="mini" style="padding:7px 10px" @click="handleDeleteMeasureData">
|
||||
{{ $t('trials:reading:button:removeMark') }}
|
||||
</el-button>
|
||||
<!-- 删除 -->
|
||||
<el-button
|
||||
v-if="isCurrentTaskAdd !== 'False'"
|
||||
size="mini"
|
||||
style="margin-left: 5px;padding:7px 10px"
|
||||
@click="handleDelete"
|
||||
>
|
||||
<el-button v-if="isCurrentTaskAdd !== 'False'" size="mini" style="margin-left: 5px;padding:7px 10px"
|
||||
@click="handleDelete">
|
||||
{{ $t('common:button:delete') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
size="mini"
|
||||
style="margin-left: 5px;padding:7px 10px"
|
||||
@click="handleSave"
|
||||
>
|
||||
<el-button size="mini" style="margin-left: 5px;padding:7px 10px" @click="handleSave">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
|
@ -287,6 +212,9 @@ export default {
|
|||
DicomEvent.$off('handleImageQualityAbnormal')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
validateLesionCount(rule, value, callback) {
|
||||
// const reg = /^[1-9][0-9]?$|^100$/
|
||||
// const reg = /^(0+)|[^\d]+/g
|
||||
|
|
@ -647,7 +575,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingPGWC:warnning:msg2'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -660,7 +588,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingPGWC:warnning:msg3'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -672,7 +600,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingPGWC:warnning:msg4'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -684,7 +612,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingPGWC:warnning:msg5'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -696,7 +624,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingPGWC:warnning:msg6'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -855,7 +783,7 @@ export default {
|
|||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
})
|
||||
.then(async() => {
|
||||
.then(async () => {
|
||||
// 移除新建病灶并关闭窗口
|
||||
if (this.questionForm.MeasureData) {
|
||||
var remark = this.getLesionName(this.orderMark, this.questionForm.RowIndex)
|
||||
|
|
@ -864,7 +792,7 @@ export default {
|
|||
DicomEvent.$emit('getMeasureData')
|
||||
this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId })
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
} else {
|
||||
if (this.questionForm.isSave === false) {
|
||||
// '当前病灶信息有更新,未保存,是否继续?'
|
||||
|
|
@ -875,7 +803,7 @@ export default {
|
|||
.then(() => {
|
||||
this.$emit('close')
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
} else {
|
||||
this.$emit('close')
|
||||
}
|
||||
|
|
@ -900,39 +828,45 @@ 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;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
::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-select.is-disabled .el-input__inner{
|
||||
|
||||
::v-deep .el-select.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
.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>
|
||||
|
|
|
|||
|
|
@ -8,58 +8,55 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 非测量问题 -->
|
||||
<div class="lesions">
|
||||
<Questions
|
||||
ref="ecrf"
|
||||
:question-form-change-state="questionFormChangeState"
|
||||
:question-form-change-num="questionFormChangeNum"
|
||||
:is-first-change-task="isFirstChangeTask"
|
||||
/>
|
||||
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState"
|
||||
:question-form-change-num="questionFormChangeNum" :is-first-change-task="isFirstChangeTask"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template v-if="questions.length > 0">
|
||||
<div v-for="(qs,index) in questions" :key="index" v-loading="loading" class="lesions lesions_wrapper">
|
||||
<div v-for="(qs, index) in questions" :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">
|
||||
<div v-for="item in qs.Childrens" v-show="!(isBaseLineTask && item.LesionType === 2) && !(isBaseLineTask && item.LesionType === 3)" :key="item.Id">
|
||||
<div v-for="item in qs.Childrens"
|
||||
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 v-if="readingTaskState<2 && (isBaseLineTask || item.LesionType === 2)" class="add-icon" @click.prevent="handleAdd(item)">
|
||||
<div v-if="readingTaskState < 2 && (isBaseLineTask || item.LesionType === 2)" class="add-icon"
|
||||
@click.prevent="handleAdd(item)">
|
||||
<i class="el-icon-plus" />
|
||||
</div>
|
||||
</div>
|
||||
<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')}">
|
||||
{{ getLesionName(item.OrderMark,q.RowIndex, qs.Childrens) }}
|
||||
<div style="width:300px;position: relative;"
|
||||
:style="{ color: (activeName === item.Id + q.RowIndex ? '#ffeb3b' : '#fff') }">
|
||||
{{ getLesionName(item.OrderMark, q.RowIndex, qs.Childrens) }}
|
||||
<!-- 未保存 -->
|
||||
<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: 60px;top: 2px;">
|
||||
|
|
@ -68,37 +65,29 @@
|
|||
{{ item.TableQuestions.Answers[i].lesionPart }}
|
||||
</div>
|
||||
<div v-if="item.TableQuestions.Answers[i].lesionState" style="margin-left:10px;">
|
||||
{{ $fd('EvaluationOfState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
{{ $fd('EvaluationOfState', parseInt(item.TableQuestions.Answers[i].lesionState)) }}
|
||||
</div>
|
||||
<div v-if="item.TableQuestions.Answers[i].lesionType" style="margin-left:10px;margin-bottom:5px;">
|
||||
<div v-if="item.TableQuestions.Answers[i].lesionType"
|
||||
style="margin-left:10px;margin-bottom:5px;">
|
||||
{{ item.TableQuestions.Answers[i].lesionType }}
|
||||
</div>
|
||||
<div v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionNum)) && item.LesionType === 4" style="margin-left:10px;">
|
||||
<div
|
||||
v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionNum)) && item.LesionType === 4"
|
||||
style="margin-left:10px;">
|
||||
{{ item.TableQuestions.Answers[i].lesionNum }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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"
|
||||
@getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession"
|
||||
@resetQuestions="resetQuestions"
|
||||
@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" @getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession" @resetQuestions="resetQuestions"
|
||||
@close="close" @handleReadingChart="handleReadingChart" />
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
|
|
@ -218,6 +207,9 @@ export default {
|
|||
DicomEvent.$off('getUnSaveTarget')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
@ -519,7 +511,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -530,7 +522,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
} else {
|
||||
var obj = { saveTypeEnum: 0 }
|
||||
|
|
@ -798,23 +790,26 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -822,14 +817,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.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 +835,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,10 +886,9 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
|
|
|||
|
|
@ -6,47 +6,53 @@
|
|||
>
|
||||
{{ question.GroupName }}
|
||||
</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.QuestionType === 57) && 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']},
|
||||
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' || question.QuestionName.length > 15) ?'uploadWrapper' : '']"
|
||||
>
|
||||
:class="[question.Type === 'group' ? 'mb' : (question.Type === 'upload' || question.QuestionName.length > 15) ? 'uploadWrapper' : '']">
|
||||
<template v-if="question.QuestionType === 60 || question.QuestionType === 61">
|
||||
<div style="display: flex;flex-direction: row;justify-content: flex-start;align-items: center;">
|
||||
<div style="display: flex;justify-content: space-between;" v-if="question.Type === 'calculation'">
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]" disabled
|
||||
style="width: 130px;">
|
||||
<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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<el-input
|
||||
v-if="question.Type==='calculation'"
|
||||
v-model="questionForm[question.Id]"
|
||||
disabled
|
||||
style="width: 130px;"
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<!-- 测量 -->
|
||||
<el-button v-if="!questionForm[question.Id] && readingTaskState!== 2" size="mini" type="text" @click="addAnnotation(question)">{{ $t('trials:lugano:button:addAnnotation') }}</el-button>
|
||||
<el-button v-if="!questionForm[question.Id] && readingTaskState !== 2" size="mini" type="text"
|
||||
@click="addAnnotation(question)">{{ $t('trials:lugano:button:addAnnotation') }}</el-button>
|
||||
<!-- 清除标记 -->
|
||||
<el-button v-if="questionForm[question.Id]&& readingTaskState!== 2" size="mini" type="text" @click="removeAnnotation(question)">{{ $t('trials:lugano:button:clearAnnotation') }}</el-button>
|
||||
<el-button v-if="questionForm[question.Id] && readingTaskState !== 2" size="mini" type="text"
|
||||
@click="removeAnnotation(question)">{{ $t('trials:lugano:button:clearAnnotation') }}</el-button>
|
||||
<!-- 定位 -->
|
||||
<el-button v-if="questionForm[question.Id]" size="mini" type="text" @click="locateAnnotation(question)">{{ $t('trials:lugano:button:locateAnnotation') }}</el-button>
|
||||
<el-button v-if="questionForm[question.Id]" size="mini" type="text" @click="locateAnnotation(question)">{{
|
||||
$t('trials:lugano:button:locateAnnotation') }}</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button v-if="readingTaskState!== 2 && question.SaveEnum === 1" size="mini" type="text" @click="saveAnnotation(question)">
|
||||
<el-button v-if="readingTaskState !== 2 && question.SaveEnum === 1" size="mini" type="text"
|
||||
@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" />
|
||||
|
|
@ -56,157 +62,100 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<template v-else-if="question.QuestionType === 48 || question.QuestionType === 51 || question.QuestionType === 52 || question.QuestionType === 53">
|
||||
<el-input
|
||||
v-if="question.Type==='calculation'"
|
||||
v-model="questionForm[question.Id]"
|
||||
disabled
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
<template
|
||||
v-else-if="question.QuestionType === 48 || question.QuestionType === 51 || question.QuestionType === 52 || question.QuestionType === 53">
|
||||
<div style="display: flex;justify-content: space-between;" v-if="question.Type === 'calculation'">
|
||||
<el-input v-if="question.Type === 'calculation'" 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<!-- 输入框 -->
|
||||
<el-input
|
||||
v-else-if="question.Type==='input'"
|
||||
v-model="questionForm[question.Id]"
|
||||
<el-input v-else-if="question.Type === 'input'" v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 多行文本输入框 -->
|
||||
<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 || isFirstChangeTask"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<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 || isFirstChangeTask"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 下拉框 -->
|
||||
<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) || isFirstChangeTask || question.QuestionType === 50 || question.QuestionType === 55"
|
||||
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.QuestionGenre === 3 && question.QuestionType === 47 && question.IsBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 ||item.value === 2 || item.value === 5 "
|
||||
:key="item.id"
|
||||
:value="String(item.value)"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 || item.value === 2 || item.value === 5" :key="item.id"
|
||||
:value="String(item.value)" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="question.QuestionGenre === 3 && question.QuestionType === 47 && !question.IsBaseLineTask">
|
||||
<template
|
||||
v-else-if="question.QuestionGenre === 3 && question.QuestionType === 47 && !question.IsBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(question.DictionaryCode,parseFloat(question.LastTaskAnswer))}` : ''"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 ||item.value === 3|| item.value === 4 || item.value === 5"
|
||||
: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))}` : ''">
|
||||
<el-option v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 || item.value === 3 || item.value === 4 || item.value === 5" :key="item.id"
|
||||
:value="String(item.value)" :label="item.label" />
|
||||
</el-option-group>
|
||||
</template>
|
||||
<template v-else-if="question.QuestionGenre === 3 && question.QuestionType === 49 && question.IsBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 ||item.value === 5 || item.value === 6 "
|
||||
:key="item.id"
|
||||
:value="String(item.value)"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 || item.value === 5 || item.value === 6" :key="item.id"
|
||||
:value="String(item.value)" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="question.QuestionGenre === 3 && question.QuestionType === 49 && !question.IsBaseLineTask">
|
||||
<template
|
||||
v-else-if="question.QuestionGenre === 3 && question.QuestionType === 49 && !question.IsBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(question.LastTaskAnswer)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(question.DictionaryCode,parseFloat(question.LastTaskAnswer))}` : ''"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 ||item.value === 2 || item.value === 3 || item.value === 4 || item.value === 5"
|
||||
: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))}` : ''">
|
||||
<el-option v-for="item of $d[question.DictionaryCode]"
|
||||
v-show="item.value === 1 || item.value === 2 || item.value === 3 || item.value === 4 || item.value === 5"
|
||||
:key="item.id" :value="String(item.value)" :label="item.label" />
|
||||
</el-option-group>
|
||||
</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 || isFirstChangeTask"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
>
|
||||
<el-radio-group v-else-if="question.Type === 'radio'" v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask" @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 || isFirstChangeTask"
|
||||
>
|
||||
<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 || isFirstChangeTask">
|
||||
<el-checkbox v-for="val in question.TypeValue.split('|')" :key="val" :label="val">
|
||||
{{ val }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
|
|
@ -217,80 +166,52 @@
|
|||
:disabled="readingTaskState >= 2 || isFirstChangeTask"
|
||||
:precision="2"
|
||||
/> -->
|
||||
<template v-else-if="question.Type==='number'">
|
||||
<el-input-number
|
||||
v-if="question.ValueType === 0"
|
||||
v-model="questionForm[question.Id]"
|
||||
:precision="0"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask"
|
||||
/>
|
||||
<el-input-number
|
||||
v-else-if="question.ValueType === 3"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask"
|
||||
/>
|
||||
<el-input-number
|
||||
v-else-if="question.ValueType === 1 || question.ValueType === 2"
|
||||
v-model="questionForm[question.Id]"
|
||||
:precision="digitPlaces"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask"
|
||||
/>
|
||||
</template>
|
||||
<el-input
|
||||
v-else-if="question.Type==='calculation'"
|
||||
v-model="questionForm[question.Id]"
|
||||
disabled
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
<div style="display: flex;justify-content: space-between;"
|
||||
v-else-if="question.Type === 'number' || question.Type === 'calculation'">
|
||||
<template v-if="question.Type === 'number'">
|
||||
<el-input-number v-if="question.ValueType === 0" v-model="questionForm[question.Id]" :precision="0"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask" />
|
||||
<el-input-number v-else-if="question.ValueType === 3" v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask" />
|
||||
<el-input-number v-else-if="question.ValueType === 1 || question.ValueType === 2"
|
||||
v-model="questionForm[question.Id]" :precision="digitPlaces"
|
||||
:disabled="readingTaskState >= 2 || isFirstChangeTask" />
|
||||
</template>
|
||||
</el-input>
|
||||
<el-input v-else-if="question.Type === 'calculation'" 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<!-- 上传图像 -->
|
||||
<el-upload
|
||||
v-else-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 || isFirstChangeTask"
|
||||
>
|
||||
<el-upload v-else-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 || isFirstChangeTask">
|
||||
<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>
|
||||
|
|
@ -300,17 +221,9 @@
|
|||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<QuestionItem
|
||||
v-for="(item) in question.Childrens"
|
||||
:key="item.Id"
|
||||
:question="item"
|
||||
:reading-task-state="readingTaskState"
|
||||
:is-first-change-task="isFirstChangeTask"
|
||||
:question-form="questionForm"
|
||||
:visit-task-id="visitTaskId"
|
||||
@setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData"
|
||||
/>
|
||||
<QuestionItem v-for="(item) in question.Childrens" :key="item.Id" :question="item"
|
||||
:reading-task-state="readingTaskState" :is-first-change-task="isFirstChangeTask" :question-form="questionForm"
|
||||
:visit-task-id="visitTaskId" @setFormItemData="setFormItemData" @resetFormItemData="resetFormItemData" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -423,7 +336,7 @@ export default {
|
|||
.then(() => {
|
||||
DicomEvent.$emit('removeAnnotation', question)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
},
|
||||
locateAnnotation(question) {
|
||||
DicomEvent.$emit('locateAnnotation', question)
|
||||
|
|
@ -479,29 +392,36 @@ 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 !important;
|
||||
align-items: flex-start;
|
||||
}
|
||||
::v-deep .el-input.is-disabled .el-input__inner{
|
||||
background-color: #646464a1;
|
||||
}
|
||||
::v-deep .el-input-group__append, .el-input-group__prepend{
|
||||
padding: 0 10px;
|
||||
}
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
::v-deep .el-select.is-disabled .el-input__inner{
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
::v-deep .el-select.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
<el-form v-if="questions.length > 0" ref="questions" size="small" :model="questionForm">
|
||||
<QuestionItem v-for="question of questions" :key="question.Id" :question="question" :question-form="questionForm"
|
||||
:reading-task-state="readingTaskState" :is-first-change-task="isFirstChangeTask" :visit-task-id="visitTaskId"
|
||||
@setFormItemData="setFormItemData" @resetFormItemData="resetFormItemData" />
|
||||
@setFormItemData="setFormItemData" @resetFormItemData="resetFormItemData"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
|
||||
<el-form-item v-if="readingTaskState < 2 && !isFirstChangeTask">
|
||||
<div class="ecrf-footer">
|
||||
|
|
@ -140,6 +141,9 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async getQuestions(visitTaskId, isRefresh = false) {
|
||||
var isChangeVisitTask = this.visitTaskId !== visitTaskId
|
||||
this.visitTaskId = visitTaskId
|
||||
|
|
|
|||
|
|
@ -44,10 +44,12 @@
|
|||
:is-reading-show-subject-info="isReadingShowSubjectInfo" :studyShow="studyShow"
|
||||
:is-reading-task-view-in-order="isReadingTaskViewInOrder" :is-exists-manual="isExistsManual"
|
||||
:isReadKeyFile="isReadKeyFile" :isHaveKeyFile="isHaveKeyFile"
|
||||
:iseCRFShowInDicomReading="iseCRFShowInDicomReading" @previewCD="previewCD" />
|
||||
:iseCRFShowInDicomReading="iseCRFShowInDicomReading" @previewCD="previewCD"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<readingChart ref="readingChart" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -62,6 +64,7 @@ import * as dicomParser from 'dicom-parser'
|
|||
import * as cornerstone from 'cornerstone-core'
|
||||
import { workSpeedclose } from "@/utils"
|
||||
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
|
||||
import readingChart from '@/components/readingChart'
|
||||
// import metaDataProvider from '@/utils/metaDataProvider'
|
||||
// cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 });
|
||||
var config = {
|
||||
|
|
@ -82,7 +85,8 @@ export default {
|
|||
name: 'ReadPage',
|
||||
components: {
|
||||
DicomViewer,
|
||||
StudyList
|
||||
StudyList,
|
||||
readingChart
|
||||
},
|
||||
props: {
|
||||
trialId: {
|
||||
|
|
@ -233,6 +237,7 @@ export default {
|
|||
window.addEventListener('beforeunload', e => {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
})
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
beforeDestroy() {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
|
|
@ -246,6 +251,21 @@ export default {
|
|||
workSpeedclose(true)
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.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()
|
||||
},
|
||||
clickShow() {
|
||||
this.studyShow = !this.studyShow
|
||||
this.$nextTick(() => {
|
||||
|
|
|
|||
|
|
@ -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="questionName" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||||
|
|
@ -19,28 +13,16 @@
|
|||
</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>
|
||||
|
|
@ -48,140 +30,95 @@
|
|||
{ required: (qs.IsRequired === 0 || (qs.IsRequired ===1 && qs.RelevanceId && (questionForm[qs.RelevanceId] === qs.RelevanceValue))) && qs.Type!=='group' && qs.Type!=='summary' && qs.QuestionMark !== 4 && qs.QuestionMark !== 6 && qs.QuestionMark !== 2,
|
||||
message: '请注明', trigger: ['blur']},
|
||||
]" -->
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
: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-for="qs in questions" v-show="qs.ShowQuestion !== 2" :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;">
|
||||
<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>
|
||||
</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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<!-- {{ ((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">
|
||||
{{ $fd('ValueUnit', parseInt(qs.Unit)) }}
|
||||
</template>
|
||||
</el-input>
|
||||
|
||||
</template>
|
||||
<!-- 多行文本输入框 -->
|
||||
<el-input
|
||||
v-if="qs.Type==='textarea'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
: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 }" :disabled="!isCurrentTask || readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, qs) })" />
|
||||
<!-- 下拉框 -->
|
||||
<!-- :disabled="!isCurrentTask || readingTaskState>=2 || (!isBaseLineTask && qs.QuestionMark === 5 && isCurrentTaskAdd === 'False') || qs.QuestionMark === 2 || (qs.QuestionMark === 8 && !isBaseLineTask && isCurrentTaskAdd === 'False')" -->
|
||||
|
||||
<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 && isBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value === 0) || (lesionType === 1 && (item.value === 0))" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answers.LastTaskState))}` : ''"
|
||||
>
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode, parseFloat(answers.LastTaskState))}` : ''">
|
||||
<!-- 首次分裂的病灶只能选择存在 -->
|
||||
<template v-if="answers.IsFristAdd=== 'True' && answers.SplitOrMergeType === '0'">
|
||||
<template v-if="answers.IsFristAdd === 'True' && answers.SplitOrMergeType === '0'">
|
||||
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<!-- 首次添加的新病灶不能为无法评估和消失 -->
|
||||
<template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-else-if="isCurrentTaskAdd === 'True' && lesionType === 2">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])" :key="item.id" :value="item.value"
|
||||
:label="item.label" />
|
||||
</template>
|
||||
</el-option-group>
|
||||
</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>
|
||||
|
|
@ -189,33 +126,19 @@
|
|||
|
||||
</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.MeasureData"
|
||||
size="mini"
|
||||
@click="handleDeleteMeasureData"
|
||||
>
|
||||
<el-button v-if="questionForm.MeasureData" 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>
|
||||
|
|
@ -307,6 +230,9 @@ export default {
|
|||
DicomEvent.$off('handleImageQualityAbnormal')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initForm() {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
this.questions.forEach(item => {
|
||||
|
|
@ -352,12 +278,12 @@ export default {
|
|||
await this.setMeasureData(this.answers.measureObj, true)
|
||||
} else {
|
||||
if (this.questionForm.MeasureData) {
|
||||
// 十字线工具 且是靶病灶 器官只能是淋巴结类型
|
||||
// 十字线工具 且是靶病灶 器官只能是淋巴结类型
|
||||
if (this.questionForm.MeasureData.type === 'Bidirectional') {
|
||||
this.organList = []
|
||||
await this.getOrganInfoList(1)
|
||||
} else if (this.questionForm.MeasureData.type === 'Length') {
|
||||
// 直径测量工具 且是靶病灶 器官只能是非淋巴结类型
|
||||
// 直径测量工具 且是靶病灶 器官只能是非淋巴结类型
|
||||
this.organList = []
|
||||
await this.getOrganInfoList(0)
|
||||
} else {
|
||||
|
|
@ -469,8 +395,8 @@ export default {
|
|||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
})
|
||||
.then(() => {})
|
||||
.catch(() => {})
|
||||
.then(() => { })
|
||||
.catch(() => { })
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
}
|
||||
|
|
@ -483,7 +409,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
|
|
@ -657,7 +583,7 @@ export default {
|
|||
var lesionShort = this.getQuestionVal(1)
|
||||
// 当前添加的新病灶不做处理
|
||||
if (!(this.isCurrentTaskAdd === 'True')) {
|
||||
// 非基线时,非淋巴结病灶长径>=10mm,自动给“存在”状态,如果淋巴结病灶短径>=10mm,自动给“存在”状态。
|
||||
// 非基线时,非淋巴结病灶长径>=10mm,自动给“存在”状态,如果淋巴结病灶短径>=10mm,自动给“存在”状态。
|
||||
if (!this.isBaseLineTask && ((measureData.type === 'Length' && lesionLength >= 10) || (measureData.type === 'Bidirectional' && lesionShort >= 10))) {
|
||||
const stateId = this.getQuestionId(7)
|
||||
this.$set(this.questionForm, stateId, 0)
|
||||
|
|
@ -855,7 +781,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg19'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -867,7 +793,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg20'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -884,7 +810,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -896,7 +822,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg22'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -914,7 +840,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg23'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -926,7 +852,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg24'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -942,7 +868,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -958,7 +884,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -979,7 +905,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -991,7 +917,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1026,7 +952,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg29'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1038,7 +964,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1059,7 +985,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1071,7 +997,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg32'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1088,7 +1014,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1100,7 +1026,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1117,7 +1043,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1129,7 +1055,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1146,7 +1072,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1158,7 +1084,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1175,7 +1101,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1187,7 +1113,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1204,7 +1130,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg41'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1216,7 +1142,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg42'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1233,7 +1159,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1245,7 +1171,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1262,7 +1188,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1274,7 +1200,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1330,7 +1256,7 @@ export default {
|
|||
}
|
||||
const res = await submitTableQuestion(params)
|
||||
if (res.IsSuccess) {
|
||||
// 保存成功!
|
||||
// 保存成功!
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
this.currentMarkTool = measureData ? measureData.type : ''
|
||||
// saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断);2:已保存,信息完整
|
||||
|
|
@ -1500,42 +1426,50 @@ 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;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
::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-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>
|
||||
|
|
|
|||
|
|
@ -8,119 +8,123 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 非测量问题 -->
|
||||
<div class="lesions">
|
||||
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum" />
|
||||
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState"
|
||||
:question-form-change-num="questionFormChangeNum" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template v-if="questions.length > 0 && CriterionType !== 10">
|
||||
<div v-for="(qs,index) in questions" :key="index" v-loading="loading" class="lesions lesions_wrapper">
|
||||
<div v-for="(qs, index) in questions" :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">
|
||||
<div v-for="item in qs.Childrens" v-show="!(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
|
||||
},
|
||||
})" />
|
||||
</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">
|
||||
<template v-if="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
|
||||
<div
|
||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||
<template
|
||||
v-if="item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionShort))">
|
||||
{{ item.TableQuestions.Answers[i].lesionShort }}mm
|
||||
</template>
|
||||
<template v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
<template
|
||||
v-else-if="!item.TableQuestions.Answers[i].isLymphLesion && !isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
||||
</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 && item.TableQuestions.Answers[i].isDicomReading !== false" 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)" />
|
||||
<el-tooltip
|
||||
v-show="readingTaskState < 2 && !!item.TableQuestions.Answers[i].RowId && !isBaseLineTask && item.TableQuestions.Answers[i].isDicomReading !== false"
|
||||
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)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</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"
|
||||
@getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession"
|
||||
@resetQuestions="resetQuestions"
|
||||
@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" @getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession" @resetQuestions="resetQuestions"
|
||||
@close="close" @handleReadingChart="handleReadingChart" />
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
|
|
@ -240,6 +244,9 @@ export default {
|
|||
DicomEvent.$off('getUnSaveTarget')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
@ -495,7 +502,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
} else {
|
||||
// 是否确认分裂
|
||||
this.$confirm(this.$t('trials:reading:warnning:msg4'), {
|
||||
|
|
@ -505,7 +512,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -631,7 +638,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -642,7 +649,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
} else {
|
||||
// saveTypeEnum: 0
|
||||
|
|
@ -781,7 +788,7 @@ export default {
|
|||
async changeLesionType(questionsObj) {
|
||||
await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: questionsObj.oldLesionType, rowIndex: questionsObj.rowIndex, visitTaskId: this.visitTaskId })
|
||||
// saveTypeEnum: 0
|
||||
var lesionObj = { }
|
||||
var lesionObj = {}
|
||||
var questionObj = questionsObj.questionForm
|
||||
// 切换到新的病灶集合
|
||||
var targetObj = this.tableQuestions.find(item => item.LesionType === questionsObj.newLesionType)
|
||||
|
|
@ -1058,23 +1065,26 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -1082,14 +1092,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -1098,42 +1110,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;
|
||||
|
|
@ -1142,7 +1161,7 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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="questionName" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||||
|
|
@ -18,160 +12,103 @@
|
|||
</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>
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
: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-for="qs in questions" v-show="qs.ShowQuestion !== 2" :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']
|
||||
},
|
||||
]">
|
||||
|
||||
<!-- 输入框 -->
|
||||
<template v-if="qs.Type==='input' || qs.Type==='number'">
|
||||
<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>
|
||||
</el-input>
|
||||
<template v-if="qs.Type === 'input' || qs.Type === 'number'">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<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>
|
||||
</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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<!-- 多行文本输入框 -->
|
||||
<el-input
|
||||
v-if="qs.Type==='textarea'"
|
||||
v-model="questionForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
: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 }" :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 && isBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value === 0) || (lesionType === 1 && (item.value === 0))" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answers.LastTaskState))}` : ''"
|
||||
>
|
||||
:label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode, parseFloat(answers.LastTaskState))}` : ''">
|
||||
<!-- 首次分裂的病灶只能选择存在 -->
|
||||
<template v-if="answers.IsFristAdd=== 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-if="answers.IsFristAdd === 'True' && answers.SplitOrMergeType === '0'">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<!-- 首次添加的新病灶不能为无法评估和消失 -->
|
||||
<template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-else-if="isCurrentTaskAdd === 'True' && lesionType === 2">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])" :key="item.id" :value="item.value"
|
||||
:label="item.label" />
|
||||
</template>
|
||||
</el-option-group>
|
||||
</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>
|
||||
|
|
@ -179,33 +116,19 @@
|
|||
|
||||
</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.MeasureData"
|
||||
size="mini"
|
||||
@click="handleDeleteMeasureData"
|
||||
>
|
||||
<el-button v-if="questionForm.MeasureData" 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>
|
||||
|
|
@ -297,6 +220,9 @@ export default {
|
|||
DicomEvent.$off('handleImageQualityAbnormal')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initForm() {
|
||||
const loading = this.$loading({ fullscreen: true })
|
||||
this.questions.forEach(item => {
|
||||
|
|
@ -427,8 +353,8 @@ export default {
|
|||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
})
|
||||
.then(() => {})
|
||||
.catch(() => {})
|
||||
.then(() => { })
|
||||
.catch(() => { })
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
}
|
||||
|
|
@ -440,7 +366,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.questionForm, 'LesionType', this.originalQuestionForm.LesionType)
|
||||
return
|
||||
|
|
@ -584,7 +510,7 @@ export default {
|
|||
|
||||
// 当前添加的新病灶不做处理
|
||||
if (!(this.isCurrentTaskAdd === 'True')) {
|
||||
// 非基线时,非淋巴结病灶长径>=10mm,自动给“存在”状态,如果淋巴结病灶短径>=10mm,自动给“存在”状态。
|
||||
// 非基线时,非淋巴结病灶长径>=10mm,自动给“存在”状态,如果淋巴结病灶短径>=10mm,自动给“存在”状态。
|
||||
if (!this.isBaseLineTask && ((measureData.type === 'Length' && lesionLength >= 10) || (measureData.type === 'Bidirectional' && lesionShort >= 10))) {
|
||||
const stateId = this.getQuestionId(7)
|
||||
this.$set(this.questionForm, stateId, 0)
|
||||
|
|
@ -779,7 +705,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg06'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -793,7 +719,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg07'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -808,7 +734,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg08'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -821,7 +747,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg09'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -839,7 +765,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg10'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -853,7 +779,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg11'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -871,7 +797,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg12'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -885,7 +811,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg13'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -899,7 +825,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg14'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -913,7 +839,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg15'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -927,7 +853,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg16'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -941,7 +867,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg17'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -955,7 +881,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg18'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -969,7 +895,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:readingBM:warnning:msg19'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1182,42 +1108,50 @@ 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;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
::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-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>
|
||||
|
|
|
|||
|
|
@ -8,78 +8,86 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 非测量问题 -->
|
||||
<div class="lesions">
|
||||
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum" />
|
||||
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState"
|
||||
:question-form-change-num="questionFormChangeNum" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
<!-- 测量问题 -->
|
||||
<template v-if="questions.length > 0">
|
||||
<div v-for="(qs,index) in questions" :key="index" v-loading="loading" class="lesions lesions_wrapper">
|
||||
<div v-for="(qs, index) in questions" :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">
|
||||
<div v-for="item in qs.Childrens" v-show="!(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
|
||||
},
|
||||
})" />
|
||||
</div>
|
||||
<div v-if="readingTaskState < 2 && (isBaseLineTask || item.LesionType === 2)" class="add-icon"
|
||||
@click.prevent="handleAdd(item)">
|
||||
<i class="el-icon-plus" />
|
||||
</div>
|
||||
</div>
|
||||
<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;">
|
||||
<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">
|
||||
<div
|
||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||
|
||||
<template v-if="!isNaN(parseInt(item.TableQuestions.Answers[i].lesionLength))">
|
||||
{{ item.TableQuestions.Answers[i].lesionLength }}mm
|
||||
|
|
@ -87,35 +95,29 @@
|
|||
</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 && item.TableQuestions.Answers[i].isDicomReading !== false" 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)" />
|
||||
<el-tooltip
|
||||
v-show="readingTaskState < 2 && !!item.TableQuestions.Answers[i].RowId && !isBaseLineTask && item.TableQuestions.Answers[i].isDicomReading !== false"
|
||||
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)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</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"
|
||||
@getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession"
|
||||
@resetQuestions="resetQuestions"
|
||||
@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" @getReadingQuestionAndAnswer="getReadingQuestionAndAnswer"
|
||||
@determineExistsUnsavedLession="determineExistsUnsavedLession" @resetQuestions="resetQuestions"
|
||||
@close="close" @handleReadingChart="handleReadingChart" />
|
||||
</el-collapse-item>
|
||||
|
||||
</el-collapse>
|
||||
|
|
@ -237,6 +239,9 @@ export default {
|
|||
DicomEvent.$off('setReadingState')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
if (i > -1) {
|
||||
|
|
@ -488,7 +493,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
} else {
|
||||
// 是否确认分裂
|
||||
this.$confirm(this.$t('trials:reading:warnning:msg4'), {
|
||||
|
|
@ -498,7 +503,7 @@ export default {
|
|||
.then(() => {
|
||||
this.split(rowId, questionId)
|
||||
})
|
||||
.catch(() => {})
|
||||
.catch(() => { })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -604,7 +609,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -614,7 +619,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
} else {
|
||||
var obj = { saveTypeEnum: 0 }
|
||||
|
|
@ -742,7 +747,7 @@ export default {
|
|||
async changeLesionType(questionsObj) {
|
||||
await store.dispatch('reading/removeReadingQuestionAndAnswer', { lesionType: questionsObj.oldLesionType, rowIndex: questionsObj.rowIndex, visitTaskId: this.visitTaskId })
|
||||
// saveTypeEnum: 0
|
||||
var lesionObj = { }
|
||||
var lesionObj = {}
|
||||
var questionObj = questionsObj.questionForm
|
||||
// 切换到新的病灶集合
|
||||
var targetObj = this.tableQuestions.find(item => item.LesionType === questionsObj.newLesionType)
|
||||
|
|
@ -987,23 +992,26 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -1011,14 +1019,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -1027,42 +1037,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;
|
||||
|
|
@ -1071,7 +1088,7 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,19 @@
|
|||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.QuestionName"
|
||||
: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 }}</span>
|
||||
scope.row.QuestionName }}
|
||||
<svg-icon
|
||||
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && 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
|
||||
}
|
||||
})" />
|
||||
</span>
|
||||
<span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">
|
||||
{{ language === 'en' ? scope.row.GroupEnName : scope.row.GroupName }}
|
||||
</span>
|
||||
|
|
@ -206,6 +218,7 @@
|
|||
</div>
|
||||
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||
</el-dialog>
|
||||
<readingChart ref="readingChart_report" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -221,9 +234,10 @@ import { mapGetters } from 'vuex'
|
|||
import { changeURLStatic } from '@/utils/history.js'
|
||||
import AdditionalAssessment from './AdditionalAssessment'
|
||||
import { openWindow } from "@/utils/splitScreen";
|
||||
import readingChart from '@/components/readingChart'
|
||||
export default {
|
||||
name: 'ReportPage',
|
||||
components: { SignForm, AdditionalAssessment },
|
||||
components: { SignForm, AdditionalAssessment, readingChart },
|
||||
props: {
|
||||
visitTaskId: {
|
||||
type: String,
|
||||
|
|
@ -298,6 +312,7 @@ export default {
|
|||
}
|
||||
})
|
||||
this.getReportInfo()
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
beforeDestroy() {
|
||||
DicomEvent.$off('getReportInfo')
|
||||
|
|
@ -307,6 +322,22 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.taskInfo.VisitTaskId
|
||||
obj.key = 'readingChart_report'
|
||||
let zIndex = 9
|
||||
if (obj.RowIndex) {
|
||||
zIndex = 9999
|
||||
}
|
||||
this.$refs.readingChart_report.init(e, obj, zIndex)
|
||||
},
|
||||
foo() {
|
||||
if (!this.$refs.readingChart_report) return false
|
||||
this.$refs.readingChart_report.foo()
|
||||
},
|
||||
myConfirm(msg) {
|
||||
return new Promise(resolve => {
|
||||
this.$confirm(msg, {
|
||||
|
|
|
|||
|
|
@ -391,7 +391,7 @@
|
|||
<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" />
|
||||
:is-reading-show-subject-info="isReadingShowSubjectInfo" @handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -864,6 +864,9 @@ export default {
|
|||
DicomEvent.$off('loadLinkedImageStack')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async handleSubmitKeyDoc() {
|
||||
try {
|
||||
let data = {
|
||||
|
|
|
|||
|
|
@ -1,14 +1,12 @@
|
|||
<template>
|
||||
<div class="measurement-wrapper" :style="{'height':height+10+'px'}" style="position: relative">
|
||||
<div class="measurement-wrapper" :style="{ 'height': height + 10 + 'px' }" style="position: relative">
|
||||
|
||||
<div class="container" :style="{'height':height+'px'}" style="padding-bottom: 50px;overflow-y: auto;">
|
||||
<div class="container" :style="{ 'height': height + 'px' }" style="padding-bottom: 50px;overflow-y: auto;">
|
||||
<div class="basic-info">
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetMeasuredData"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetMeasuredData" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<h3 v-if="isReadingShowSubjectInfo">
|
||||
|
|
@ -16,73 +14,48 @@
|
|||
<span style="margin-left:5px;">{{ taskBlindName }}</span>
|
||||
</h3>
|
||||
</div>
|
||||
<QuestionsPreview
|
||||
ref="QuestionsPreview"
|
||||
v-if="ecrfShow && TrialReadingCriterionId"
|
||||
:visitTaskId="visitTaskId"
|
||||
:criterionId="TrialReadingCriterionId">
|
||||
<QuestionsPreview ref="QuestionsPreview" v-if="ecrfShow && TrialReadingCriterionId" :visitTaskId="visitTaskId"
|
||||
:criterionId="TrialReadingCriterionId" @handleReadingChart="handleReadingChart">
|
||||
</QuestionsPreview>
|
||||
</div>
|
||||
<div class="questions-footer">
|
||||
<i class="el-icon-warning feedback-icon" @click="openFeedBackTable" :style="{color: isExistUnprocessedFeedback ? '#ffeb3b' : '#fff'}"/>
|
||||
<el-button v-if="readingTaskState<2" style="margin-right: 10px" type="primary" size="small" @click="handleSave(true)">
|
||||
{{$t('common:button:save')}}
|
||||
<i class="el-icon-warning feedback-icon" @click="openFeedBackTable"
|
||||
:style="{ color: isExistUnprocessedFeedback ? '#ffeb3b' : '#fff' }" />
|
||||
<el-button v-if="readingTaskState < 2" style="margin-right: 10px" type="primary" size="small"
|
||||
@click="handleSave(true)">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
<el-button v-if="readingTaskState<2 && IseCRFShowInDicomReading" type="primary" style="margin-right: 10px" size="small" @click="skipTask">
|
||||
<el-button v-if="readingTaskState < 2 && IseCRFShowInDicomReading" type="primary" style="margin-right: 10px"
|
||||
size="small" @click="skipTask">
|
||||
<!-- 跳过 -->
|
||||
{{ $t('trials:readingReport:button:skip') }}
|
||||
</el-button>
|
||||
<el-button style="margin-right: 10px" type="primary" size="small" v-if="readingTaskState<2 && IseCRFShowInDicomReading" @click="handleConfirm">
|
||||
<el-button style="margin-right: 10px" type="primary" size="small"
|
||||
v-if="readingTaskState < 2 && IseCRFShowInDicomReading" @click="handleConfirm">
|
||||
{{ $t('common:button:submit') }}</el-button>
|
||||
</div>
|
||||
<!-- 签名框 -->
|
||||
<el-dialog
|
||||
v-if="signVisible"
|
||||
:visible.sync="signVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="600px"
|
||||
custom-class="base-dialog-wrapper"
|
||||
>
|
||||
<el-dialog v-if="signVisible" :visible.sync="signVisible" :close-on-click-modal="false" width="600px"
|
||||
custom-class="base-dialog-wrapper">
|
||||
<div slot="title">
|
||||
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
|
||||
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span>
|
||||
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${currentUser})` }}</span>
|
||||
</div>
|
||||
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
v-if="measuredDataVisible"
|
||||
:visible.sync="measuredDataVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="600px"
|
||||
custom-class="base-dialog-wrapper"
|
||||
>
|
||||
<el-form
|
||||
ref="measuredDataForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
v-loading="loading"
|
||||
label-width="120px"
|
||||
size="small"
|
||||
>
|
||||
<el-form-item
|
||||
:label="$t('trials:reading:title:measuredDataName')"
|
||||
prop="measuredDataName"
|
||||
>
|
||||
<el-dialog v-if="measuredDataVisible" :visible.sync="measuredDataVisible" :close-on-click-modal="false"
|
||||
width="600px" custom-class="base-dialog-wrapper">
|
||||
<el-form ref="measuredDataForm" :model="form" :rules="rules" v-loading="loading" label-width="120px" size="small">
|
||||
<el-form-item :label="$t('trials:reading:title:measuredDataName')" prop="measuredDataName">
|
||||
<el-input v-model="form.measuredDataName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item style="text-align:right;">
|
||||
<!-- Cancel -->
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleMeasuredDataCancel"
|
||||
>
|
||||
<el-button type="primary" @click="handleMeasuredDataCancel">
|
||||
{{ $t('common:button:cancel') }}
|
||||
</el-button>
|
||||
<!-- Save -->
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleMeasuredDataSave"
|
||||
>
|
||||
<el-button type="primary" @click="handleMeasuredDataSave">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
|
@ -140,7 +113,7 @@ export default {
|
|||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['visitTaskList','lastCanvasTaskId', 'currentReadingTaskState'])
|
||||
...mapGetters(['visitTaskList', 'lastCanvasTaskId', 'currentReadingTaskState'])
|
||||
},
|
||||
watch: {
|
||||
lastCanvasTaskId: {
|
||||
|
|
@ -185,7 +158,10 @@ export default {
|
|||
DicomEvent.$off('getCustomTableQuestionAnswer')
|
||||
},
|
||||
methods: {
|
||||
async initList(){
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
async initList() {
|
||||
if (this.visitTaskId !== this.lastCanvasTaskId) {
|
||||
this.ecrfShow = true
|
||||
var i = this.visitTaskList.findIndex(i => i.VisitTaskId === this.lastCanvasTaskId)
|
||||
|
|
@ -215,15 +191,15 @@ export default {
|
|||
loading.close()
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
if(this.$refs['QuestionsPreview']){
|
||||
this.$refs['QuestionsPreview'].getCustomTableQuestionAnswer(this.visitTaskId )
|
||||
if (this.$refs['QuestionsPreview']) {
|
||||
this.$refs['QuestionsPreview'].getCustomTableQuestionAnswer(this.visitTaskId)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
getCustomTag() {
|
||||
getCustomTag({visitTaskId: this.visitTaskId}).then(res => {
|
||||
getCustomTag({ visitTaskId: this.visitTaskId }).then(res => {
|
||||
console.log(res)
|
||||
})
|
||||
},
|
||||
|
|
@ -236,10 +212,10 @@ export default {
|
|||
modifyMeasuredData(measureData) {
|
||||
measureData.visitTaskId = this.visitTaskId
|
||||
measureData.measureData.pictureBaseStr = ''
|
||||
if (this.readingTaskState >=2) {
|
||||
if (this.readingTaskState >= 2) {
|
||||
this.measuredDataVisible = false
|
||||
store.dispatch('reading/addCustomizeMeasuredData', { visitTaskId: this.visitTaskId, measureData: measureData.measureData })
|
||||
}else{
|
||||
} else {
|
||||
let params = JSON.parse(JSON.stringify(measureData))
|
||||
params.measureData = JSON.stringify(measureData.measureData)
|
||||
params.Id = params.questionInfo.Id
|
||||
|
|
@ -256,7 +232,7 @@ export default {
|
|||
|
||||
},
|
||||
async moveMeasureData(measureData) {
|
||||
console.log('measureData', measureData)
|
||||
console.log('measureData', measureData)
|
||||
await store.dispatch('reading/removeCustomizeMeasuredData', { visitTaskId: this.visitTaskId, ...measureData })
|
||||
DicomEvent.$emit('updateImage')
|
||||
},
|
||||
|
|
@ -265,42 +241,42 @@ export default {
|
|||
// DicomEvent.$emit('updateImage')
|
||||
},
|
||||
handleMeasuredDataSave() {
|
||||
this.$refs.measuredDataForm.validate(valid => {
|
||||
if (!valid) return
|
||||
// 是否同名验证
|
||||
let isValid = this.validateRemarkName(this.form.measuredDataName)
|
||||
if (!isValid) {
|
||||
// '存在同名标记,不允许保存!'
|
||||
this.$message.error(this.$t('trials:customReading:error:validMarkName'))
|
||||
return
|
||||
}
|
||||
this.measureData.data.remark = this.form.measuredDataName
|
||||
this.measureData.pictureBaseStr = ''
|
||||
if (this.readingTaskState >=2) {
|
||||
this.measuredDataVisible = false
|
||||
this.form.measuredDataName = ''
|
||||
store.dispatch('reading/addCustomizeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.measureData })
|
||||
DicomEvent.$emit('updateImage')
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
} else {
|
||||
let params = JSON.parse(JSON.stringify(this.measureData))
|
||||
params.measureData = JSON.stringify(this.measureData)
|
||||
params.NumberOfFrames = this.measureData.frame
|
||||
submitCustomTag(params).then(async (res) => {
|
||||
this.$refs.measuredDataForm.validate(valid => {
|
||||
if (!valid) return
|
||||
// 是否同名验证
|
||||
let isValid = this.validateRemarkName(this.form.measuredDataName)
|
||||
if (!isValid) {
|
||||
// '存在同名标记,不允许保存!'
|
||||
this.$message.error(this.$t('trials:customReading:error:validMarkName'))
|
||||
return
|
||||
}
|
||||
this.measureData.data.remark = this.form.measuredDataName
|
||||
this.measureData.pictureBaseStr = ''
|
||||
if (this.readingTaskState >= 2) {
|
||||
this.measuredDataVisible = false
|
||||
this.form.measuredDataName = ''
|
||||
await store.dispatch('reading/addCustomizeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.measureData, id: res.Result })
|
||||
await store.dispatch('reading/getCustomizeMeasuredData', this.visitTaskId)
|
||||
store.dispatch('reading/addCustomizeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.measureData })
|
||||
DicomEvent.$emit('updateImage')
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
})
|
||||
}
|
||||
})
|
||||
} else {
|
||||
let params = JSON.parse(JSON.stringify(this.measureData))
|
||||
params.measureData = JSON.stringify(this.measureData)
|
||||
params.NumberOfFrames = this.measureData.frame
|
||||
submitCustomTag(params).then(async (res) => {
|
||||
this.measuredDataVisible = false
|
||||
this.form.measuredDataName = ''
|
||||
await store.dispatch('reading/addCustomizeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.measureData, id: res.Result })
|
||||
await store.dispatch('reading/getCustomizeMeasuredData', this.visitTaskId)
|
||||
DicomEvent.$emit('updateImage')
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
validateRemarkName(remark) {
|
||||
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
|
||||
var measureData = this.visitTaskList[idx].MeasureData
|
||||
let i = measureData.findIndex(i=>i.MeasureData.data.remark === remark)
|
||||
let i = measureData.findIndex(i => i.MeasureData.data.remark === remark)
|
||||
return i === -1
|
||||
},
|
||||
// 关闭签名框
|
||||
|
|
@ -393,7 +369,7 @@ export default {
|
|||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
// 刷新标注、表单、报告页信息
|
||||
this.$refs['QuestionsPreview'].getCustomTableQuestionAnswer(this.visitTaskId )
|
||||
this.$refs['QuestionsPreview'].getCustomTableQuestionAnswer(this.visitTaskId)
|
||||
await store.dispatch('reading/refreshCustomizeMeasuredData', this.visitTaskId)
|
||||
DicomEvent.$emit('getMeasureData')
|
||||
DicomEvent.$emit('getReportInfo', true)
|
||||
|
|
@ -432,7 +408,7 @@ export default {
|
|||
type: 'imgfail',
|
||||
trialId: this.$route.query.trialId,
|
||||
visitTaskId: this.visitTaskId,
|
||||
callBack: async() => {
|
||||
callBack: async () => {
|
||||
console.log('callBack')
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:reading:confirm:feedbackmsg'),
|
||||
|
|
@ -460,23 +436,26 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.measurement-wrapper{
|
||||
.measurement-wrapper {
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-direction: row-reverse;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -484,14 +463,16 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -500,41 +481,48 @@ 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;
|
||||
::v-deep .el-collapse-item{
|
||||
background-color: #000!important;
|
||||
|
||||
.el-collapse {
|
||||
border-bottom: 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;
|
||||
|
|
@ -543,13 +531,14 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
.questions-footer{
|
||||
|
||||
.questions-footer {
|
||||
position: absolute;
|
||||
bottom:0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 10;
|
||||
background: #000;
|
||||
|
|
@ -558,13 +547,15 @@ export default {
|
|||
justify-content: right;
|
||||
align-items: center;
|
||||
height: 50px;
|
||||
.feedback-icon{
|
||||
|
||||
.feedback-icon {
|
||||
padding: 0 10px;
|
||||
color: #fff;
|
||||
font-weight: 400;
|
||||
font-size: 24px;
|
||||
cursor: pointer;
|
||||
&:hover{
|
||||
|
||||
&:hover {
|
||||
color: #68a2d5;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,39 +122,53 @@
|
|||
<el-input v-if="question.Type === 'class' && question.ClassifyShowType === 4" type="number"
|
||||
:disabled="!question.ClassifyEditType || readingTaskState === 2" v-model="questionForm[question.Id]"
|
||||
@change="(val) => { formItemNumberChange(val, question) }" />
|
||||
<!-- 自动计算 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
@input="value = value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<!-- 自增 -->
|
||||
<el-input v-if="question.Type === 'increment'" v-model="questionForm[question.Id]" disabled />
|
||||
<!-- 数值 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-select v-if="question.Type === 'number' && question.TypeValue" v-model="questionForm[question.Id]" clearable
|
||||
@change="(val) => { formItemNumberChange(val, question) }" :disabled="readingTaskState === 2">
|
||||
<el-option v-for="val in question.TypeValue.split('|')" :key="val" :label="val.trim()" :value="val.trim()" />
|
||||
<template v-if="question.Unit !== 0" slot="prefix">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
<template v-else-if="question.ValueType === 2" slot="prefix">%</template>
|
||||
</el-select>
|
||||
<el-input type="text" v-if="question.Type === 'number' && !question.TypeValue && question.DataSource !== 1"
|
||||
@change="(val) => { formItemNumberChange(val, question) }" @input="numberInput(question.Id)"
|
||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||
v-model.trim="questionForm[question.Id]" :disabled="readingTaskState === 2">
|
||||
<!-- <template slot="append">1</template> -->
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
<template slot="append" v-else-if="question.ValueType === 2">%</template>
|
||||
</el-input>
|
||||
<el-input type="text" @input="numberInput(question.Id)"
|
||||
v-if="question.Type === 'number' && !question.TypeValue && question.DataSource === 1"
|
||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||
:disabled="question.DataSource === 1 || readingTaskState === 2" v-model.trim="questionForm[question.Id]">
|
||||
<!-- <template slot="append">2</template> -->
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
<template slot="append" v-else-if="question.ValueType === 2">%</template>
|
||||
</el-input>
|
||||
<div style="display: flex;justify-content: space-between;"
|
||||
v-if="question.Type === 'number' || question.Type === 'calculation'">
|
||||
<!-- 自动计算 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
@input="value = value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<!-- 数值 -->
|
||||
<el-select v-if="question.Type === 'number' && question.TypeValue" v-model="questionForm[question.Id]"
|
||||
clearable @change="(val) => { formItemNumberChange(val, question) }" :disabled="readingTaskState === 2">
|
||||
<el-option v-for="val in question.TypeValue.split('|')" :key="val" :label="val.trim()"
|
||||
:value="val.trim()" />
|
||||
<template v-if="question.Unit !== 0" slot="prefix">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit)
|
||||
:
|
||||
question.CustomUnit }}</template>
|
||||
<template v-else-if="question.ValueType === 2" slot="prefix">%</template>
|
||||
</el-select>
|
||||
<el-input type="text" v-if="question.Type === 'number' && !question.TypeValue && question.DataSource !== 1"
|
||||
@change="(val) => { formItemNumberChange(val, question) }" @input="numberInput(question.Id)"
|
||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||
v-model.trim="questionForm[question.Id]" :disabled="readingTaskState === 2">
|
||||
<!-- <template slot="append">1</template> -->
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit)
|
||||
:
|
||||
question.CustomUnit }}</template>
|
||||
<template slot="append" v-else-if="question.ValueType === 2">%</template>
|
||||
</el-input>
|
||||
<el-input type="text" @input="numberInput(question.Id)"
|
||||
v-if="question.Type === 'number' && !question.TypeValue && question.DataSource === 1"
|
||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||
:disabled="question.DataSource === 1 || readingTaskState === 2" v-model.trim="questionForm[question.Id]">
|
||||
<!-- <template slot="append">2</template> -->
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit)
|
||||
:
|
||||
question.CustomUnit }}</template>
|
||||
<template slot="append" v-else-if="question.ValueType === 2">%</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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<!-- 上传图像 -->
|
||||
<el-upload v-if="question.Type === 'upload'" :disabled="readingTaskState === 2" action
|
||||
:accept="question.FileType" :limit="question.ImageCount === 0 ? 100 : question.ImageCount"
|
||||
|
|
@ -179,7 +193,7 @@
|
|||
:IsBaseline="IsBaseline" :reading-task-state="readingTaskState" :question-form="questionForm"
|
||||
:visit-task-id="visitTaskId" :criterion-id="criterionId" :CalculationList="CalculationList"
|
||||
@formItemNumberChange="formItemNumberChange" @setFormItemData="setFormItemData"
|
||||
@resetFormItemData="resetFormItemData" />
|
||||
@resetFormItemData="resetFormItemData" @handleReadingChart="handleReadingChart" />
|
||||
</template>
|
||||
<base-model :config="addOrEdit" class="my_dialog" :close-on-click-modal="false" width="400px" append-to-body>
|
||||
<template slot="dialog-body">
|
||||
|
|
@ -188,7 +202,8 @@
|
|||
:IsBaseline="IsBaseline" :reading-task-state="readingTaskState" :question-form="QuestionsForm"
|
||||
:visit-task-id="visitTaskId" :criterion-id="criterionId" :type="addOrEdit.type"
|
||||
:CalculationList="CalculationTabelList" @formItemTableNumberChange="formItemTableNumberChange"
|
||||
@resetFormItemData="resetTableFormItemData" @setFormItemData="setFormTableItemData" />
|
||||
@resetFormItemData="resetTableFormItemData" @setFormItemData="setFormTableItemData"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
</el-form>
|
||||
</template>
|
||||
<template slot="dialog-footer">
|
||||
|
|
@ -347,6 +362,9 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
numberInput(id) {
|
||||
this.questionForm[id] = this.questionForm[id].toUpperCase();
|
||||
},
|
||||
|
|
|
|||
|
|
@ -71,36 +71,47 @@
|
|||
{{ item.trim() }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<!-- 自动计算 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
oninput="value=value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<!-- 自增 -->
|
||||
<el-input v-if="question.Type === 'increment'" v-model="questionForm[question.Id]" disabled />
|
||||
<!-- 数值 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-select v-if="question.Type === 'number' && question.TypeValue" v-model="questionForm[question.Id]" clearable
|
||||
@change="(val) => { formItemNumberChange(val, question) }"
|
||||
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !IsBaseline && questionForm.IsCurrentTaskAdd === 'False')">
|
||||
<el-option v-for="val in question.TypeValue.split('|')" :key="val" :label="val.trim()" :value="val.trim()" />
|
||||
<template v-if="question.Unit !== 0" slot="prefix">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
<template v-else-if="question.ValueType === 2" slot="prefix">%</template>
|
||||
</el-select>
|
||||
<el-input type="text" v-else-if="question.Type === 'number' && question.DataSource !== 1"
|
||||
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !IsBaseline && questionForm.IsCurrentTaskAdd === 'False')"
|
||||
@change="((val) => { formItemNumberChange(val, question) })" @input="numberInput(question.Id)"
|
||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||
v-model.trim="questionForm[question.Id]">
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
</el-input>
|
||||
<el-input type="text" v-else-if="question.Type === 'number' && question.DataSource === 1"
|
||||
:disabled="question.DataSource === 1" @input="numberInput(question.Id, true)"
|
||||
@blur="handleCalculationBlur(calculationValue)" v-model.trim="calculationValue">
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
</el-input>
|
||||
<div style="display: flex;justify-content: space-between;"
|
||||
v-if="question.Type === 'number' || question.Type === 'calculation'">
|
||||
<!-- 自动计算 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
oninput="value=value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<!-- 数值 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-select v-if="question.Type === 'number' && question.TypeValue" v-model="questionForm[question.Id]" clearable
|
||||
@change="(val) => { formItemNumberChange(val, question) }"
|
||||
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !IsBaseline && questionForm.IsCurrentTaskAdd === 'False')">
|
||||
<el-option v-for="val in question.TypeValue.split('|')" :key="val" :label="val.trim()" :value="val.trim()" />
|
||||
<template v-if="question.Unit !== 0" slot="prefix">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
<template v-else-if="question.ValueType === 2" slot="prefix">%</template>
|
||||
</el-select>
|
||||
<el-input type="text" v-else-if="question.Type === 'number' && question.DataSource !== 1"
|
||||
:disabled="question.TableQuestionType === 2 || (question.IsCopy && type === 'edit' && !IsBaseline && questionForm.IsCurrentTaskAdd === 'False')"
|
||||
@change="((val) => { formItemNumberChange(val, question) })" @input="numberInput(question.Id)"
|
||||
@blur="handleBlur(questionForm[question.Id], questionForm, question.Id)"
|
||||
v-model.trim="questionForm[question.Id]">
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</template>
|
||||
</el-input>
|
||||
<el-input type="text" v-else-if="question.Type === 'number' && question.DataSource === 1"
|
||||
:disabled="question.DataSource === 1" @input="numberInput(question.Id, true)"
|
||||
@blur="handleCalculationBlur(calculationValue)" v-model.trim="calculationValue">
|
||||
<template slot="append" v-if="question.Unit !== 0">{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) :
|
||||
question.CustomUnit }}</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: question.Id,
|
||||
RowIndex: questionForm.RowIndex
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<!-- 上传图像 -->
|
||||
<el-upload v-if="question.Type === 'upload'" action :accept="question.FileType"
|
||||
:limit="question.ImageCount === 0 ? 100 : question.ImageCount" :on-preview="handlePictureCardPreview"
|
||||
|
|
@ -251,6 +262,9 @@ export default {
|
|||
// }
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
numberInput(id, notId = false) {
|
||||
if (notId) {
|
||||
this.calculationValue = this.calculationValue.toUpperCase();
|
||||
|
|
|
|||
|
|
@ -1,26 +1,12 @@
|
|||
<template>
|
||||
<div v-loading="loading" style="min-height: 500px;">
|
||||
<el-form
|
||||
v-if="isRender"
|
||||
ref="questions"
|
||||
size="small"
|
||||
:model="questionForm"
|
||||
:disabled="readingTaskState >= 2"
|
||||
>
|
||||
<el-form v-if="isRender" ref="questions" size="small" :model="questionForm" :disabled="readingTaskState >= 2">
|
||||
<template>
|
||||
<QuestionFormItem
|
||||
v-for="question of questions"
|
||||
:key="question.Id"
|
||||
:visitTaskId="visitTaskId"
|
||||
:question="question"
|
||||
:question-form="questionForm"
|
||||
:reading-task-state="readingTaskState"
|
||||
:criterion-id="criterionId"
|
||||
:CalculationList="CalculationList"
|
||||
:IsBaseline="IsBaseline"
|
||||
@resetFormItemData="resetFormItemData"
|
||||
@setFormItemData="setFormItemData"
|
||||
/>
|
||||
<QuestionFormItem v-for="question of questions" :key="question.Id" :visitTaskId="visitTaskId"
|
||||
:question="question" :question-form="questionForm" :reading-task-state="readingTaskState"
|
||||
:criterion-id="criterionId" :CalculationList="CalculationList" :IsBaseline="IsBaseline"
|
||||
@resetFormItemData="resetFormItemData" @setFormItemData="setFormItemData"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
</template>
|
||||
</el-form>
|
||||
</div>
|
||||
|
|
@ -75,6 +61,9 @@ export default {
|
|||
DicomEvent.$off('reGetQuestionAnswer')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
handleSave(isMsg) {
|
||||
return new Promise(resolve => {
|
||||
console.log('handleSave')
|
||||
|
|
@ -86,7 +75,7 @@ export default {
|
|||
this.loading = true
|
||||
var answers = []
|
||||
for (const k in this.questionForm) {
|
||||
if (this.questionForm[k] instanceof Array) {} else {
|
||||
if (this.questionForm[k] instanceof Array) { } else {
|
||||
answers.push({ id: k, answer: this.questionForm[k] })
|
||||
}
|
||||
}
|
||||
|
|
@ -134,7 +123,7 @@ export default {
|
|||
this.$set(this.questionForm, v.Id, v.TableQuestions.Answers)
|
||||
}
|
||||
if (v.Type === 'class') {
|
||||
this.classArr.push({triggerId: v.ClassifyQuestionId, classId: v.Id, classifyAlgorithms: v.ClassifyAlgorithms, classifyType: v.ClassifyType})
|
||||
this.classArr.push({ triggerId: v.ClassifyQuestionId, classId: v.Id, classifyAlgorithms: v.ClassifyAlgorithms, classifyType: v.ClassifyType })
|
||||
}
|
||||
if (v.Type === 'number') {
|
||||
this.$set(this.questionForm, v.Id, isNaN(parseFloat(v.Answer)) ? v.Answer : parseFloat(v.Answer).toFixed(this.digitPlaces))
|
||||
|
|
@ -205,7 +194,7 @@ export default {
|
|||
},
|
||||
setChild(obj) {
|
||||
obj.forEach(i => {
|
||||
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id && i.Type !== 'table' && i.Type !== 'basicTable') {
|
||||
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id && i.Type !== 'table' && i.Type !== 'basicTable') {
|
||||
this.$set(this.questionForm, i.Id, i.Answer)
|
||||
}
|
||||
if (i.Type === 'table' || i.Type === 'basicTable') {
|
||||
|
|
@ -219,7 +208,7 @@ export default {
|
|||
this.$set(this.questionForm, i.Id, i.TableQuestions.Answers)
|
||||
}
|
||||
if (i.Type === 'class') {
|
||||
this.classArr.push({triggerId: i.ClassifyQuestionId, classId: i.Id, classifyAlgorithms: i.ClassifyAlgorithms, classifyType: i.ClassifyType})
|
||||
this.classArr.push({ triggerId: i.ClassifyQuestionId, classId: i.Id, classifyAlgorithms: i.ClassifyAlgorithms, classifyType: i.ClassifyType })
|
||||
}
|
||||
if (i.Type === 'number') {
|
||||
this.$set(this.questionForm, i.Id, isNaN(parseFloat(i.Answer)) ? i.Answer : parseFloat(i.Answer).toFixed(this.digitPlaces))
|
||||
|
|
@ -234,7 +223,7 @@ export default {
|
|||
},
|
||||
setFormItemData(obj) {
|
||||
this.$set(this.questionForm, obj.key, JSON.parse(JSON.stringify(obj.val)))
|
||||
this.classArr.map(i=>{
|
||||
this.classArr.map(i => {
|
||||
if (i.triggerId === obj.key) {
|
||||
let answer = null
|
||||
let list = JSON.parse(i.classifyAlgorithms)
|
||||
|
|
@ -284,15 +273,17 @@ export default {
|
|||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::-webkit-scrollbar {
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 10px;
|
||||
background: #d0d0d0;
|
||||
}
|
||||
.tabContent{
|
||||
height:300px;
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 10px;
|
||||
background: #d0d0d0;
|
||||
}
|
||||
|
||||
.tabContent {
|
||||
height: 300px;
|
||||
overflow-y: auto;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,9 +34,11 @@
|
|||
:is-reading-show-subject-info="isReadingShowSubjectInfo"
|
||||
:is-reading-task-view-in-order="isReadingTaskViewInOrder" :isExistsManual="isExistsManual"
|
||||
:isReadKeyFile="isReadKeyFile" :isHaveKeyFile="isHaveKeyFile"
|
||||
:IseCRFShowInDicomReading="IseCRFShowInDicomReading" @previewCD="previewCD" />
|
||||
:IseCRFShowInDicomReading="IseCRFShowInDicomReading" @previewCD="previewCD"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
</div>
|
||||
</div>
|
||||
<readingChart ref="readingChart" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -50,6 +52,7 @@ import * as dicomParser from 'dicom-parser'
|
|||
import * as cornerstone from 'cornerstone-core'
|
||||
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
|
||||
import { workSpeedclose } from "@/utils"
|
||||
import readingChart from '@/components/readingChart'
|
||||
// import metaDataProvider from '@/utils/metaDataProvider'
|
||||
// cornerstone.metaData.addProvider(metaDataProvider, { priority: 10 });
|
||||
var config = {
|
||||
|
|
@ -71,6 +74,7 @@ export default {
|
|||
components: {
|
||||
DicomViewer,
|
||||
StudyList,
|
||||
readingChart
|
||||
},
|
||||
props: {
|
||||
isReadingShowSubjectInfo: {
|
||||
|
|
@ -233,6 +237,7 @@ export default {
|
|||
window.addEventListener('beforeunload', e => {
|
||||
cornerstone.imageCache.purgeCache()
|
||||
})
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
beforeDestroy() {
|
||||
DicomEvent.$off("getNextVisitInfo");
|
||||
|
|
@ -245,6 +250,21 @@ export default {
|
|||
workSpeedclose(true)
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.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()
|
||||
},
|
||||
async getVisitInfo() {
|
||||
const loading = this.$loading({ fullscreen: true });
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,19 @@
|
|||
<el-table-column prop="" label="" show-overflow-tooltip width="350px">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.QuestionName">{{ scope.row.BlindName ? scope.row.QuestionName :
|
||||
scope.row.QuestionName }}</span>
|
||||
scope.row.QuestionName }}
|
||||
<svg-icon
|
||||
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && 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
|
||||
}
|
||||
})" />
|
||||
</span>
|
||||
<span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">
|
||||
{{ scope.row.GroupName }}
|
||||
</span>
|
||||
|
|
@ -235,6 +247,7 @@
|
|||
</div>
|
||||
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||
</el-dialog>
|
||||
<readingChart ref="readingChart_report" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -247,9 +260,10 @@ import const_ from '@/const/sign-code'
|
|||
import SignForm from '@/views/trials/components/newSignForm'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import store from '@/store'
|
||||
import readingChart from '@/components/readingChart'
|
||||
export default {
|
||||
name: 'CustomizeReportPage',
|
||||
components: { SignForm, CustomizeReportPageUpload },
|
||||
components: { SignForm, CustomizeReportPageUpload, readingChart },
|
||||
props: {
|
||||
visitTaskId: {
|
||||
type: String,
|
||||
|
|
@ -317,11 +331,28 @@ export default {
|
|||
})
|
||||
await this.getQuestionCalculateRelation()
|
||||
this.getReportInfo()
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
beforeDestroy() {
|
||||
DicomEvent.$off('getReportInfo')
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.taskInfo.VisitTaskId
|
||||
obj.key = 'readingChart_report'
|
||||
let zIndex = 9
|
||||
if (obj.RowIndex) {
|
||||
zIndex = 9999
|
||||
}
|
||||
this.$refs.readingChart_report.init(e, obj, zIndex)
|
||||
},
|
||||
foo() {
|
||||
if (!this.$refs.readingChart_report) return false
|
||||
this.$refs.readingChart_report.foo()
|
||||
},
|
||||
limitInput(value, a, b) {
|
||||
if (value.indexOf('.') > -1) {
|
||||
if (value.split('.')[1].length >= this.digitPlaces) {
|
||||
|
|
|
|||
|
|
@ -324,16 +324,16 @@
|
|||
:reading-task-state="currentVisitInfo.VisitTaskId === taskInfo.VisitTaskId ? readingTaskState : 2"
|
||||
:last-viewport-task-id="lastViewportTaskId" :visit-info="s" @removeAnnotation="removeAnnotation"
|
||||
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
|
||||
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations"
|
||||
@setToolToTarget="setToolToTarget" />
|
||||
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<recisit
|
||||
v-else-if="lastViewportTaskId && criterionType === 1 && lastViewportTaskIds.includes(s.VisitTaskId)"
|
||||
:ref="`ecrf_${s.VisitTaskId}`"
|
||||
:reading-task-state="currentVisitInfo.VisitTaskId === taskInfo.VisitTaskId ? readingTaskState : 2"
|
||||
:last-viewport-task-id="lastViewportTaskId" :visit-info="s" @removeAnnotation="removeAnnotation"
|
||||
@getScreenshots="getScreenshots" @setMarkName="setMarkName" @imageLocation="imageLocation"
|
||||
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations"
|
||||
@setToolToTarget="setToolToTarget" />
|
||||
@resetAnnotations="resetAnnotations" @getAnnotations="getAnnotations" @setToolToTarget="setToolToTarget"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<customize-question-list
|
||||
v-else-if="lastViewportTaskId && criterionType === 0 && lastViewportTaskIds.includes(s.VisitTaskId)"
|
||||
:ref="`ecrf_${s.VisitTaskId}`"
|
||||
|
|
@ -560,7 +560,7 @@ export default {
|
|||
trialId: '',
|
||||
visitTaskList: [],
|
||||
selectArr: [],
|
||||
taskInfo: null,
|
||||
taskInfo: {},
|
||||
activeTaskId: null,
|
||||
activeTaskIndex: -1,
|
||||
activeStudyIndex: -1,
|
||||
|
|
@ -766,19 +766,24 @@ export default {
|
|||
DicomEvent.$on('addNoneDicomMeasureData', data => {
|
||||
this.open.postMessage({ type: 'addNoneDicomMeasureData', data: data }, window.location)
|
||||
})
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.taskInfo.VisitTaskI
|
||||
obj.VisitTaskId = this.taskInfo.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()
|
||||
},
|
||||
async handleSubmitKeyDoc() {
|
||||
try {
|
||||
let data = {
|
||||
|
|
|
|||
|
|
@ -1,197 +1,115 @@
|
|||
<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>
|
||||
<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']},
|
||||
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' || question.QuestionName.length > 15) ?'uploadWrapper' : '']"
|
||||
>
|
||||
:class="[question.Type === 'group' ? 'mb' : (question.Type === 'upload' || question.QuestionName.length > 15) ? 'uploadWrapper' : '']">
|
||||
|
||||
<!-- 输入框 -->
|
||||
<el-input
|
||||
v-if="question.Type==='input'"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<el-input v-if="question.Type === 'input'" v-model="questionForm[question.Id]" :disabled="readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 多行文本输入框 -->
|
||||
<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"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<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"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 下拉框 -->
|
||||
<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)"
|
||||
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>
|
||||
<!-- 数值 -->
|
||||
<template v-else-if="question.Type==='number'">
|
||||
<el-input-number
|
||||
v-if="question.ValueType === 0"
|
||||
v-model="questionForm[question.Id]"
|
||||
:precision="0"
|
||||
:disabled="readingTaskState >= 2"
|
||||
/>
|
||||
<el-input-number
|
||||
v-else-if="question.ValueType === 3"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2"
|
||||
/>
|
||||
<el-input-number
|
||||
v-else-if="question.ValueType === 1 || question.ValueType === 2"
|
||||
v-model="questionForm[question.Id]"
|
||||
:precision="digitPlaces"
|
||||
:disabled="readingTaskState >= 2"
|
||||
/>
|
||||
</template>
|
||||
<el-input
|
||||
v-else-if="question.Type==='calculation'"
|
||||
v-model="questionForm[question.Id]"
|
||||
disabled
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
<div style="display: flex;justify-content: space-between;"
|
||||
v-else-if="question.Type === 'number' || question.Type === 'calculation'">
|
||||
<!-- 数值 -->
|
||||
<template v-if="question.Type === 'number'">
|
||||
<el-input-number v-if="question.ValueType === 0" v-model="questionForm[question.Id]" :precision="0"
|
||||
:disabled="readingTaskState >= 2" />
|
||||
<el-input-number v-else-if="question.ValueType === 3" v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2" />
|
||||
<el-input-number v-else-if="question.ValueType === 1 || question.ValueType === 2"
|
||||
v-model="questionForm[question.Id]" :precision="digitPlaces" :disabled="readingTaskState >= 2" />
|
||||
</template>
|
||||
</el-input>
|
||||
<el-input v-else-if="question.Type === 'calculation'" 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<!-- 上传图像 -->
|
||||
<el-upload
|
||||
v-else-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-else-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>
|
||||
|
|
@ -201,16 +119,9 @@
|
|||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<question-form-item
|
||||
v-for="(item) in question.Childrens"
|
||||
:key="item.Id"
|
||||
:question="item"
|
||||
:question-form="questionForm"
|
||||
:reading-task-state="readingTaskState"
|
||||
:visitTaskId="visitTaskId"
|
||||
@resetFormItemData="resetFormItemData"
|
||||
@setFormItemData="setFormItemData"
|
||||
/>
|
||||
<question-form-item v-for="(item) in question.Childrens" :key="item.Id" :question="item"
|
||||
:question-form="questionForm" :reading-task-state="readingTaskState" :visitTaskId="visitTaskId"
|
||||
@resetFormItemData="resetFormItemData" @setFormItemData="setFormItemData" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -267,6 +178,9 @@ export default {
|
|||
this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
this.$emit('handleReadingChart', row)
|
||||
},
|
||||
formItemChange(v, question) {
|
||||
console.log('formItemChange')
|
||||
if (question.Childrens.length > 0) {
|
||||
|
|
@ -293,33 +207,40 @@ 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 !important;
|
||||
align-items: flex-start;
|
||||
}
|
||||
::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.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
::v-deep .el-select.is-disabled .el-input__inner{
|
||||
|
||||
::v-deep .el-select.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
// ::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner {
|
||||
// background-color: #428bca;
|
||||
// border-color: #428bca;
|
||||
// }
|
||||
</style>
|
||||
// }</style>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,15 @@
|
|||
<div class="lesion_list">
|
||||
<div v-for="table in qs.Childrens" v-show="!(isBaseLineTask && table.LesionType === 2)" :key="table.Id">
|
||||
<div v-if="table.Type === 'table'" class="flex-row" style="margin:3px 0;">
|
||||
<div class="title">{{ table.QuestionName }}</div>
|
||||
<div class="title">{{ table.QuestionName }}
|
||||
<svg-icon v-if="table.LesionType === 0" icon-class="readingChart"
|
||||
class="svg-icon svg-readingChart-mini" @click.stop="(e) => handleReadingChart({
|
||||
e,
|
||||
data: {
|
||||
ReportChartTypeEnum: 0
|
||||
},
|
||||
})" />
|
||||
</div>
|
||||
<div v-if="readingTaskState < 2 && (isBaseLineTask || table.LesionType === 2)" class="add-icon"
|
||||
@click.prevent="addTarget(table)">
|
||||
<i class="el-icon-plus" />
|
||||
|
|
@ -246,6 +254,9 @@ export default {
|
|||
window.addEventListener('message', this.receiveMsg)
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
// 获取器官信息
|
||||
async getOrganList() {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -9,160 +9,102 @@
|
|||
<i class="el-icon-circle-close" style="font-size: 25px;cursor: pointer;" @click="close" />
|
||||
</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="qsForm.LesionType"
|
||||
filterable
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask"
|
||||
@change="((val)=>{lesionTypeChange(val)})"
|
||||
>
|
||||
<el-select v-model="qsForm.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>
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
: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-for="qs in questions" v-show="qs.ShowQuestion !== 2" :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']
|
||||
},
|
||||
]">
|
||||
<!-- 输入框 -->
|
||||
<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;">
|
||||
<el-input v-if="qs.Type === 'input' || qs.Type === 'number'" v-model="qsForm[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) || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answer.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answer.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>
|
||||
</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: qsForm.RowIndex
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<el-input
|
||||
v-if="qs.Type==='input' || qs.Type==='number'"
|
||||
v-model="qsForm[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) || !!answer.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answer.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answer.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>
|
||||
</el-input>
|
||||
</template>
|
||||
<!-- 多行文本输入框 -->
|
||||
<el-input
|
||||
v-if="qs.Type==='textarea'"
|
||||
v-model="qsForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
/>
|
||||
<el-input v-if="qs.Type === 'textarea'" v-model="qsForm[qs.Id]" type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }" :disabled="!isCurrentTask || readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, qs) })" />
|
||||
<!-- 下拉框 -->
|
||||
<el-select
|
||||
v-if="qs.Type==='select'"
|
||||
v-model="qsForm[qs.Id]"
|
||||
filterable
|
||||
<el-select v-if="qs.Type === 'select'" v-model="qsForm[qs.Id]" filterable
|
||||
:placeholder="qs.QuestionMark === 8 ? $t('common:placeholder:selectorsearch') : qs.QuestionMark === 2 ? '' : $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) || !!answer.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False'|| !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answer.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) || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answer.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 && isBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value === 0) || (lesionType === 1 && (item.value === 0))" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(answer.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answer.LastTaskState))}` : ''"
|
||||
>
|
||||
:label="!isNaN(parseFloat(answer.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode, parseFloat(answer.LastTaskState))}` : ''">
|
||||
<!-- 首次分裂的病灶只能选择存在 -->
|
||||
<template v-if="answer.IsFristAdd=== 'True' && answer.SplitOrMergeType === '0'">
|
||||
<template v-if="answer.IsFristAdd === 'True' && answer.SplitOrMergeType === '0'">
|
||||
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<!-- 首次添加的新病灶不能为无法评估和消失 -->
|
||||
<template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-else-if="isCurrentTaskAdd === 'True' && lesionType === 2">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])" :key="item.id" :value="item.value"
|
||||
:label="item.label" />
|
||||
</template>
|
||||
</el-option-group>
|
||||
</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="qsForm[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="qsForm[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>
|
||||
|
|
@ -254,6 +196,9 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
this.$emit('handleReadingChart', row)
|
||||
},
|
||||
lesionTypeChange(v) {
|
||||
this.$emit('lesionTypeChange', { tableId: this.tableInfo.Id, rowIndex: this.answer.RowIndex, newLesionType: v })
|
||||
},
|
||||
|
|
@ -316,42 +261,50 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.table-question-form{
|
||||
::v-deep .el-form-item__label{
|
||||
.table-question-form {
|
||||
::v-deep .el-form-item__label {
|
||||
color: #c3c3c3;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
::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-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>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,19 @@
|
|||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.QuestionName"
|
||||
: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 }}</span>
|
||||
scope.row.QuestionName }}
|
||||
<svg-icon
|
||||
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && 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
|
||||
}
|
||||
})" />
|
||||
</span>
|
||||
<span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">
|
||||
{{ language === 'en' ? scope.row.GroupEnName : scope.row.GroupName }}
|
||||
</span>
|
||||
|
|
@ -205,6 +217,7 @@
|
|||
</div>
|
||||
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||
</el-dialog>
|
||||
<readingChart ref="readingChart_report" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -219,9 +232,10 @@ import { mapGetters } from 'vuex'
|
|||
import { changeURLStatic } from '@/utils/history.js'
|
||||
import AdditionalAssessment from '@/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment'
|
||||
import { openWindow } from "@/utils/splitScreen";
|
||||
import readingChart from '@/components/readingChart'
|
||||
export default {
|
||||
name: 'ReportPage',
|
||||
components: { SignForm, AdditionalAssessment },
|
||||
components: { SignForm, AdditionalAssessment, readingChart },
|
||||
data() {
|
||||
return {
|
||||
currentUser: zzSessionStorage.getItem('userName'),
|
||||
|
|
@ -281,6 +295,7 @@ export default {
|
|||
this.setScrollTop()
|
||||
})
|
||||
this.getReportInfo()
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (this.openWindow) {
|
||||
|
|
@ -288,6 +303,22 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.taskInfo.VisitTaskId
|
||||
obj.key = 'readingChart_report'
|
||||
let zIndex = 9
|
||||
if (obj.RowIndex) {
|
||||
zIndex = 9999
|
||||
}
|
||||
this.$refs.readingChart_report.init(e, obj, zIndex)
|
||||
},
|
||||
foo() {
|
||||
if (!this.$refs.readingChart_report) return false
|
||||
this.$refs.readingChart_report.foo()
|
||||
},
|
||||
myConfirm(msg) {
|
||||
return new Promise(resolve => {
|
||||
this.$confirm(msg, {
|
||||
|
|
|
|||
|
|
@ -148,12 +148,20 @@
|
|||
@change="(val) => { formItemNumberChange(val, question) }" />
|
||||
<!-- 自动计算 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
@input="value = value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
@input="value = value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<svg-icon v-if="question.ShowChartTypeEnum > 0" icon-class="readingChart" class="svg-icon svg-readingChart"
|
||||
@click.stop="(e) => handleReadingChart({
|
||||
e,
|
||||
data: {
|
||||
QuestionId: question.Id
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<!-- 自增 -->
|
||||
<el-input v-if="question.Type === 'increment'" v-model="questionForm[question.Id]" disabled />
|
||||
<!-- 数值 -->
|
||||
|
||||
<template v-if="question.Type === 'number' && (question.ImageMarkEnum === 1 || question.ImageMarkEnum === 2)">
|
||||
<div style="display: flex;flex-direction: row;justify-content: flex-start;align-items: center;">
|
||||
<el-input type="text" @change="(val) => { formItemNumberChange(val, question) }"
|
||||
|
|
|
|||
|
|
@ -75,8 +75,18 @@
|
|||
</el-radio-group>
|
||||
<!-- 自动计算 -->
|
||||
<!-- :precision="2" :step="0.1" :max="10" -->
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
oninput="value=value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<el-input v-if="question.Type === 'calculation'" v-model="questionForm[question.Id]"
|
||||
oninput="value=value.replace(/^\D*(\d*(?:.\d{0,2})?).*$/g, '$1')" disabled />
|
||||
<svg-icon v-if="question.ShowChartTypeEnum > 0" icon-class="readingChart" class="svg-icon svg-readingChart"
|
||||
@click.stop="(e) => handleReadingChart({
|
||||
e,
|
||||
data: {
|
||||
TableQuestionId: question.Id,
|
||||
RowIndex: questionForm.RowIndex
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
<!-- 自增 -->
|
||||
<el-input v-if="question.Type === 'increment'" v-model="questionForm[question.Id]" disabled />
|
||||
<!-- 数值 -->
|
||||
|
|
|
|||
|
|
@ -23,7 +23,19 @@
|
|||
<el-table-column prop="" label="" show-overflow-tooltip width="350px">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.QuestionName">{{ scope.row.BlindName ? scope.row.QuestionName :
|
||||
scope.row.QuestionName }}</span>
|
||||
scope.row.QuestionName }}
|
||||
<svg-icon
|
||||
v-if="scope.row.ShowChartTypeEnum > 0 || (scope.row.LesionType === 0 && 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
|
||||
}
|
||||
})" />
|
||||
</span>
|
||||
<span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">
|
||||
{{ scope.row.GroupName }}
|
||||
</span>
|
||||
|
|
@ -206,6 +218,7 @@
|
|||
|
||||
<img v-show="false" :src="`${OSSclientConfig.basePath}${currentPath}`" alt="Image" />
|
||||
</viewer>
|
||||
<readingChart ref="readingChart_report" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -216,9 +229,10 @@ import const_ from '@/const/sign-code'
|
|||
import SignForm from '@/views/trials/components/newSignForm'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { openWindow } from "@/utils/splitScreen";
|
||||
import readingChart from '@/components/readingChart'
|
||||
export default {
|
||||
name: 'CustomizeReportPage',
|
||||
components: { SignForm },
|
||||
components: { SignForm, readingChart },
|
||||
data() {
|
||||
return {
|
||||
trialId: '',
|
||||
|
|
@ -289,8 +303,21 @@ export default {
|
|||
})
|
||||
await this.getQuestionCalculateRelation()
|
||||
this.getReportInfo()
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.taskInfo.VisitTaskId
|
||||
obj.key = 'readingChart_report'
|
||||
let zIndex = 9
|
||||
if (obj.RowIndex) {
|
||||
zIndex = 9999
|
||||
}
|
||||
this.$refs.readingChart_report.init(e, obj, zIndex)
|
||||
},
|
||||
limitBlur(questionForm, id, valueType) {
|
||||
const value = questionForm[id]
|
||||
if (valueType === 0) {
|
||||
|
|
|
|||
|
|
@ -1,197 +1,115 @@
|
|||
<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>
|
||||
<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']},
|
||||
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' || question.QuestionName.length > 15) ?'uploadWrapper' : '']"
|
||||
>
|
||||
:class="[question.Type === 'group' ? 'mb' : (question.Type === 'upload' || question.QuestionName.length > 15) ? 'uploadWrapper' : '']">
|
||||
|
||||
<!-- 输入框 -->
|
||||
<el-input
|
||||
v-if="question.Type==='input'"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<el-input v-if="question.Type === 'input'" v-model="questionForm[question.Id]" :disabled="readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 多行文本输入框 -->
|
||||
<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"
|
||||
@change="((val)=>{formItemChange(val, question)})"
|
||||
/>
|
||||
<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"
|
||||
@change="((val) => { formItemChange(val, question) })" />
|
||||
<!-- 下拉框 -->
|
||||
<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)"
|
||||
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>
|
||||
<!-- 数值 -->
|
||||
<template v-else-if="question.Type==='number'">
|
||||
<el-input-number
|
||||
v-if="question.ValueType === 0"
|
||||
v-model="questionForm[question.Id]"
|
||||
:precision="0"
|
||||
:disabled="readingTaskState >= 2"
|
||||
/>
|
||||
<el-input-number
|
||||
v-else-if="question.ValueType === 3"
|
||||
v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2"
|
||||
/>
|
||||
<el-input-number
|
||||
v-else-if="question.ValueType === 1 || question.ValueType === 2"
|
||||
v-model="questionForm[question.Id]"
|
||||
:precision="digitPlaces"
|
||||
:disabled="readingTaskState >= 2"
|
||||
/>
|
||||
</template>
|
||||
<el-input
|
||||
v-else-if="question.Type==='calculation'"
|
||||
v-model="questionForm[question.Id]"
|
||||
disabled
|
||||
>
|
||||
<template v-if="question.Unit" slot="append">
|
||||
{{ $fd('ValueUnit', parseInt(question.Unit)) }}
|
||||
<div style="display: flex;justify-content: space-between;"
|
||||
v-else-if="question.Type === 'number' || question.Type === 'calculation'">
|
||||
<!-- 数值 -->
|
||||
<template v-if="question.Type === 'number'">
|
||||
<el-input-number v-if="question.ValueType === 0" v-model="questionForm[question.Id]" :precision="0"
|
||||
:disabled="readingTaskState >= 2" />
|
||||
<el-input-number v-else-if="question.ValueType === 3" v-model="questionForm[question.Id]"
|
||||
:disabled="readingTaskState >= 2" />
|
||||
<el-input-number v-else-if="question.ValueType === 1 || question.ValueType === 2"
|
||||
v-model="questionForm[question.Id]" :precision="digitPlaces" :disabled="readingTaskState >= 2" />
|
||||
</template>
|
||||
</el-input>
|
||||
<el-input v-else-if="question.Type === 'calculation'" 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
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<!-- 上传图像 -->
|
||||
<el-upload
|
||||
v-else-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-else-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>
|
||||
|
|
@ -201,16 +119,9 @@
|
|||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<question-form-item
|
||||
v-for="(item) in question.Childrens"
|
||||
:key="item.Id"
|
||||
:question="item"
|
||||
:question-form="questionForm"
|
||||
:reading-task-state="readingTaskState"
|
||||
:visitTaskId="visitTaskId"
|
||||
@resetFormItemData="resetFormItemData"
|
||||
@setFormItemData="setFormItemData"
|
||||
/>
|
||||
<question-form-item v-for="(item) in question.Childrens" :key="item.Id" :question="item"
|
||||
:question-form="questionForm" :reading-task-state="readingTaskState" :visitTaskId="visitTaskId"
|
||||
@resetFormItemData="resetFormItemData" @setFormItemData="setFormItemData" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -267,6 +178,9 @@ export default {
|
|||
this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
this.$emit('handleReadingChart', row)
|
||||
},
|
||||
formItemChange(v, question) {
|
||||
if (question.Childrens.length > 0) {
|
||||
this.resetChild(question.Childrens)
|
||||
|
|
@ -292,33 +206,40 @@ 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 !important;
|
||||
align-items: flex-start;
|
||||
}
|
||||
::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.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
::v-deep .el-input-group__append,
|
||||
.el-input-group__prepend {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item__content {
|
||||
width: 100%;
|
||||
}
|
||||
::v-deep .el-select.is-disabled .el-input__inner{
|
||||
|
||||
::v-deep .el-select.is-disabled .el-input__inner {
|
||||
background-color: #646464a1;
|
||||
}
|
||||
|
||||
// ::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner {
|
||||
// background-color: #428bca;
|
||||
// border-color: #428bca;
|
||||
// }
|
||||
</style>
|
||||
// }</style>
|
||||
|
|
|
|||
|
|
@ -8,35 +8,25 @@
|
|||
<span style="margin-left:5px;">{{ visitInfo.TaskBlindName }}</span>
|
||||
</h3>
|
||||
<div v-if="readingTaskState < 2">
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
|
||||
<i
|
||||
class="el-icon-refresh-left"
|
||||
@click="resetForm"
|
||||
/>
|
||||
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')"
|
||||
placement="bottom">
|
||||
<i class="el-icon-refresh-left" @click="resetForm" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 影像质量评估 -->
|
||||
<div v-if="outerQuestions.length > 0" class="outer_form_wrapper">
|
||||
<el-form
|
||||
ref="outerForm"
|
||||
size="small"
|
||||
:model="outerForm"
|
||||
>
|
||||
<question-form-item
|
||||
v-for="outerQs in outerQuestions"
|
||||
:key="outerQs.Id"
|
||||
:question="outerQs"
|
||||
:question-form="outerForm"
|
||||
:reading-task-state="readingTaskState"
|
||||
:visit-task-id="visitTaskId"
|
||||
@resetFormItemData="resetOuterFormItemData"
|
||||
@setFormItemData="setOuterFormItemData"
|
||||
/>
|
||||
<el-form ref="outerForm" size="small" :model="outerForm">
|
||||
<question-form-item v-for="outerQs in outerQuestions" :key="outerQs.Id" :question="outerQs"
|
||||
:question-form="outerForm" :reading-task-state="readingTaskState" :visit-task-id="visitTaskId"
|
||||
@resetFormItemData="resetOuterFormItemData" @setFormItemData="setOuterFormItemData"
|
||||
@handleReadingChart="handleReadingChart" />
|
||||
<el-form-item v-if="readingTaskState < 2">
|
||||
<div class="outer_form-footer">
|
||||
<i class="el-icon-warning feedback-icon" :style="{color: taskInfo && taskInfo.IsExistUnprocessedFeedback ? '#ffeb3b' : '#fff'}" @click="openFeedBackTable" />
|
||||
<i class="el-icon-warning feedback-icon"
|
||||
:style="{ color: taskInfo && taskInfo.IsExistUnprocessedFeedback ? '#ffeb3b' : '#fff' }"
|
||||
@click="openFeedBackTable" />
|
||||
<el-button size="mini" @click="saveOuterForm">{{ $t('common:button:save') }}</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
|
@ -44,147 +34,126 @@
|
|||
</div>
|
||||
<!-- 病灶评估 -->
|
||||
<template v-if="tableQuestions.length > 0 && criterionType !== 10">
|
||||
<div
|
||||
v-for="(qs,index) in tableQuestions"
|
||||
:key="index"
|
||||
class="lesions lesions_wrapper"
|
||||
>
|
||||
<h4
|
||||
v-if="qs.Type === 'group'"
|
||||
style="color: #ddd;padding: 5px 0px;margin: 0;"
|
||||
>
|
||||
{{ language==='en'?qs.GroupEnName:qs.GroupName }}
|
||||
<div v-for="(qs, index) in tableQuestions" :key="index" class="lesions lesions_wrapper">
|
||||
<h4 v-if="qs.Type === 'group'" style="color: #ddd;padding: 5px 0px;margin: 0;">
|
||||
{{ language === 'en' ? qs.GroupEnName : qs.GroupName }}
|
||||
</h4>
|
||||
<div class="lesion_list">
|
||||
<div
|
||||
v-for="table in qs.Childrens"
|
||||
v-show="!(isBaseLineTask && table.LesionType === 2)"
|
||||
:key="table.Id"
|
||||
>
|
||||
<div
|
||||
v-if="table.Type === 'table'"
|
||||
class="flex-row"
|
||||
style="margin:3px 0;"
|
||||
>
|
||||
<div class="title">{{ table.QuestionName }}</div>
|
||||
<div
|
||||
v-if="readingTaskState<2 && (isBaseLineTask || table.LesionType === 2)"
|
||||
class="add-icon"
|
||||
@click.prevent="addTarget(table)"
|
||||
>
|
||||
<div v-for="table in qs.Childrens" v-show="!(isBaseLineTask && table.LesionType === 2)" :key="table.Id">
|
||||
<div v-if="table.Type === 'table'" class="flex-row" style="margin:3px 0;">
|
||||
<div class="title">{{ table.QuestionName }}
|
||||
<svg-icon v-if="table.LesionType === 0" icon-class="readingChart"
|
||||
class="svg-icon svg-readingChart-mini" @click.stop="(e) => handleReadingChart({
|
||||
e,
|
||||
data: {
|
||||
ReportChartTypeEnum: 0
|
||||
},
|
||||
})" />
|
||||
</div>
|
||||
<div v-if="readingTaskState < 2 && (isBaseLineTask || table.LesionType === 2)" class="add-icon"
|
||||
@click.prevent="addTarget(table)">
|
||||
<i class="el-icon-plus" />
|
||||
</div>
|
||||
</div>
|
||||
<el-collapse
|
||||
v-if="table.Type === 'table' && table.TableQuestions"
|
||||
v-model="activeName"
|
||||
accordion
|
||||
@change="handleCollapseChange"
|
||||
>
|
||||
<el-collapse-item
|
||||
v-for="(answer,i) in table.TableQuestions.Answers"
|
||||
:key="`${table.Id}_${answer.RowIndex}`"
|
||||
:name="`${table.Id}_${answer.RowIndex}`"
|
||||
@contextmenu.prevent.native="collapseRightClick($event, table.Id, answer.RowIndex)"
|
||||
>
|
||||
<el-collapse v-if="table.Type === 'table' && table.TableQuestions" v-model="activeName" accordion
|
||||
@change="handleCollapseChange">
|
||||
<el-collapse-item v-for="(answer, i) in table.TableQuestions.Answers"
|
||||
:key="`${table.Id}_${answer.RowIndex}`" :name="`${table.Id}_${answer.RowIndex}`"
|
||||
@contextmenu.prevent.native="collapseRightClick($event, table.Id, answer.RowIndex)">
|
||||
<template slot="title">
|
||||
<div
|
||||
style="width:340px;position: relative;"
|
||||
:style="{color:innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ?'#5fb4ff':'#fff'}"
|
||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? $t('trials:mRecist:text:text1') : ''"
|
||||
>
|
||||
{{ getLesionName(table.OrderMark,answer.RowIndex) }}
|
||||
<div style="width:340px;position: relative;"
|
||||
:style="{ color: innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? '#5fb4ff' : '#fff' }"
|
||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? $t('trials:mRecist:text:text1') : ''">
|
||||
{{ getLesionName(table.OrderMark, answer.RowIndex) }}
|
||||
<!-- 未保存 -->
|
||||
<el-tooltip v-if="readingTaskState<2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].SaveTypeEnum) === 0" class="item" effect="dark" :content="$t('trials:reading:button:unsaved')" placement="bottom">
|
||||
<el-tooltip
|
||||
v-if="readingTaskState < 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].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(innerFormData[`${table.Id}_${answer.RowIndex}`].SaveTypeEnum) ===1" class="item" effect="dark" :content="$t('trials:reading:button:incompleteInfor')" placement="bottom">
|
||||
<el-tooltip
|
||||
v-if="readingTaskState < 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].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', color: innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? '#5fb4ff' : '#fff'}">
|
||||
<div
|
||||
:style="{ position: 'absolute', left: '50px', top: '2px', color: innerFormData[`${table.Id}_${answer.RowIndex}`].IntrahepaticLesion ? '#5fb4ff' : '#fff' }">
|
||||
<div style="font-size: 11px;width:220px;height: 30px;">
|
||||
<div
|
||||
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
||||
<div v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
||||
style="margin-left:10px;display: inline-block; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:90px"
|
||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart"
|
||||
>
|
||||
:title="innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart">
|
||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionPart }}
|
||||
</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="table.LesionType === 0">
|
||||
{{ $fd('TargetState',parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState)) }}
|
||||
{{
|
||||
$fd('TargetState', parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||
}}
|
||||
</span>
|
||||
<span v-else-if="table.LesionType === 1">
|
||||
{{ $fd('NoTargetState',parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState)) }}
|
||||
{{
|
||||
$fd('NoTargetState',
|
||||
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||
}}
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ $fd('NewLesionState',parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState)) }}
|
||||
{{
|
||||
$fd('NewLesionState',
|
||||
parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
<div style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||
<template v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphNodes && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort))">
|
||||
<div
|
||||
style="display: inline-block;margin-left:5px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;max-width:60px">
|
||||
<template
|
||||
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphNodes && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort))">
|
||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionShort }}mm
|
||||
</template>
|
||||
<template v-else-if="!innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphNodes && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength))">
|
||||
<template
|
||||
v-else-if="!innerFormData[`${table.Id}_${answer.RowIndex}`].IsLymphNodes && !isNaN(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength))">
|
||||
{{ innerFormData[`${table.Id}_${answer.RowIndex}`].LesionLength }}mm
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 分裂 -->
|
||||
<div v-if="((table.LesionType === 0 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0) || (table.LesionType === 1 && [0,1].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))) || (table.LesionType === 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0)) && innerFormData[`${table.Id}_${answer.RowIndex}`].IsCurrentTaskAdd === 'False'" style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||
<el-tooltip v-show="readingTaskState<2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && !isBaseLineTask && innerFormData[`${table.Id}_${answer.RowIndex}`].IsDicomReading !== false" class="table" :content="$t('trials:reading:button:split')" placement="left">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;" @click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
||||
<div
|
||||
v-if="((table.LesionType === 0 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0) || (table.LesionType === 1 && [0, 1].includes(parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState))) || (table.LesionType === 2 && parseInt(innerFormData[`${table.Id}_${answer.RowIndex}`].LesionState) === 0)) && innerFormData[`${table.Id}_${answer.RowIndex}`].IsCurrentTaskAdd === 'False'"
|
||||
style="position: absolute;right: 5px;top: 2px;transform: rotateY(180deg);">
|
||||
<el-tooltip
|
||||
v-show="readingTaskState < 2 && !!innerFormData[`${table.Id}_${answer.RowIndex}`].RowId && !isBaseLineTask && innerFormData[`${table.Id}_${answer.RowIndex}`].IsDicomReading !== false"
|
||||
class="table" :content="$t('trials:reading:button:split')" placement="left">
|
||||
<i class="iconfont icon-24gl-split" style="color:#fff;font-size: 16px;"
|
||||
@click.stop="lesionSplit(table.Id, innerFormData[`${table.Id}_${answer.RowIndex}`].RowId)" />
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<el-form
|
||||
:ref="`${table.Id}_${answer.RowIndex}`"
|
||||
size="small"
|
||||
:model="innerFormData[`${table.Id}_${answer.RowIndex}`]"
|
||||
>
|
||||
<table-question-form-item
|
||||
:ref="`form_${table.Id}_${answer.RowIndex}`"
|
||||
:table-info="table"
|
||||
:answer="answer"
|
||||
:question-form="innerFormData[`${table.Id}_${answer.RowIndex}`]"
|
||||
:reading-task-state="readingTaskState"
|
||||
:organs="organs"
|
||||
:is-base-line-task="isBaseLineTask"
|
||||
:is-current-task="isCurrentTask"
|
||||
@update="innerFormDataUpdate"
|
||||
@close="closeInnerForm"
|
||||
@lesionTypeChange="lesionTypeChange"
|
||||
/>
|
||||
<div
|
||||
v-if="readingTaskState<2"
|
||||
style="text-align:right;margin-top:10px;"
|
||||
>
|
||||
<el-form :ref="`${table.Id}_${answer.RowIndex}`" size="small"
|
||||
:model="innerFormData[`${table.Id}_${answer.RowIndex}`]">
|
||||
<table-question-form-item :ref="`form_${table.Id}_${answer.RowIndex}`" :table-info="table"
|
||||
:answer="answer" :question-form="innerFormData[`${table.Id}_${answer.RowIndex}`]"
|
||||
:reading-task-state="readingTaskState" :organs="organs" :is-base-line-task="isBaseLineTask"
|
||||
:is-current-task="isCurrentTask" @update="innerFormDataUpdate" @close="closeInnerForm"
|
||||
@lesionTypeChange="lesionTypeChange" @handleReadingChart="handleReadingChart" />
|
||||
<div v-if="readingTaskState < 2" style="text-align:right;margin-top:10px;">
|
||||
<!-- 清除标记 -->
|
||||
<el-button
|
||||
v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].MeasureData"
|
||||
size="mini"
|
||||
@click="clearMeasureData(table, answer.RowIndex)"
|
||||
>
|
||||
<el-button v-if="innerFormData[`${table.Id}_${answer.RowIndex}`].MeasureData" size="mini"
|
||||
@click="clearMeasureData(table, answer.RowIndex)">
|
||||
{{ $t('trials:reading:button:removeMark') }}
|
||||
</el-button>
|
||||
<!-- 删除 -->
|
||||
<el-button
|
||||
v-if="table.TableQuestions.Answers[i].IsCurrentTaskAdd !== 'False'"
|
||||
size="mini"
|
||||
@click="deleteLesion(table, answer.RowIndex)"
|
||||
>
|
||||
<el-button v-if="table.TableQuestions.Answers[i].IsCurrentTaskAdd !== 'False'" size="mini"
|
||||
@click="deleteLesion(table, answer.RowIndex)">
|
||||
{{ $t('common:button:delete') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
size="mini"
|
||||
@click="saveLesion(table, answer.RowIndex)"
|
||||
>
|
||||
<el-button size="mini" @click="saveLesion(table, answer.RowIndex)">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
|
@ -286,6 +255,9 @@ export default {
|
|||
this.getTableQuestions()
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(e) {
|
||||
this.$emit('handleReadingChart', e)
|
||||
},
|
||||
// 获取器官信息
|
||||
async getOrganList() {
|
||||
try {
|
||||
|
|
@ -676,7 +648,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -687,7 +659,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -895,7 +867,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg19'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -905,7 +877,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:mRecist:warnning:msg2'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -917,7 +889,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg20'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -934,7 +906,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -946,7 +918,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg22'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -964,7 +936,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg23'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -976,7 +948,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg24'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -992,7 +964,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1009,7 +981,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1031,7 +1003,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1043,7 +1015,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1059,7 +1031,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg29'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1071,7 +1043,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1093,7 +1065,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1105,7 +1077,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg32'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1122,7 +1094,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1134,7 +1106,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1151,7 +1123,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1163,7 +1135,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1180,7 +1152,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1192,7 +1164,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1209,7 +1181,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1221,7 +1193,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:mRecist:warnning:msg6'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1231,7 +1203,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1241,7 +1213,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:mRecist:warnning:msg3'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1258,7 +1230,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg41'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1269,7 +1241,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:mRecist:warnning:msg6'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1280,7 +1252,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg42'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1290,7 +1262,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:mRecist:warnning:msg4'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1307,7 +1279,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1319,7 +1291,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1336,7 +1308,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1348,7 +1320,7 @@ export default {
|
|||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
loading.close()
|
||||
return
|
||||
|
|
@ -1576,7 +1548,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return
|
||||
}
|
||||
|
|
@ -1679,7 +1651,7 @@ export default {
|
|||
type: 'imgfail',
|
||||
trialId: this.$route.query.trialId,
|
||||
visitTaskId: this.visitTaskId,
|
||||
callBack: async() => {
|
||||
callBack: async () => {
|
||||
const confirm = await this.$confirm(
|
||||
this.$t('trials:reading:confirm:feedbackmsg'),
|
||||
{
|
||||
|
|
@ -1716,7 +1688,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionType', innerForm.LesionType)
|
||||
return
|
||||
|
|
@ -1733,7 +1705,7 @@ export default {
|
|||
this.$confirm(msg, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionType', innerForm.LesionType)
|
||||
return
|
||||
|
|
@ -1744,7 +1716,7 @@ export default {
|
|||
this.$confirm(this.$t(' trials:reading:warnning:msg15'), {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
this.$set(this.innerFormData[`${obj.tableId}_${obj.rowIndex}`], 'LesionType', innerForm.LesionType)
|
||||
return
|
||||
|
|
@ -1957,23 +1929,26 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.questionList-wrapper{
|
||||
.questionList-wrapper {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
// overflow: hidden;
|
||||
|
||||
.container{
|
||||
.container {
|
||||
padding: 10px;
|
||||
.basic-info{
|
||||
|
||||
.basic-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
color: #ddd;
|
||||
padding: 5px 0px;
|
||||
margin: 0;
|
||||
}
|
||||
i{
|
||||
|
||||
i {
|
||||
color: #fff;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
|
|
@ -1981,64 +1956,75 @@ export default {
|
|||
}
|
||||
}
|
||||
}
|
||||
.outer_form_wrapper{
|
||||
::v-deep .el-form-item__label{
|
||||
|
||||
.outer_form_wrapper {
|
||||
::v-deep .el-form-item__label {
|
||||
color: #c3c3c3;
|
||||
text-align: left;
|
||||
}
|
||||
::v-deep .el-input__inner{
|
||||
background-color: transparent;
|
||||
color: #ddd;
|
||||
border: 1px solid #5e5e5e;
|
||||
}
|
||||
::v-deep .el-textarea__inner{
|
||||
|
||||
::v-deep .el-input__inner {
|
||||
background-color: transparent;
|
||||
color: #ddd;
|
||||
border: 1px solid #5e5e5e;
|
||||
}
|
||||
|
||||
::v-deep .el-form-item{
|
||||
::v-deep .el-textarea__inner {
|
||||
background-color: transparent;
|
||||
color: #ddd;
|
||||
border: 1px solid #5e5e5e;
|
||||
}
|
||||
|
||||
::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;
|
||||
}
|
||||
::v-deep .el-form-item__content
|
||||
.el-select{
|
||||
|
||||
::v-deep .el-form-item__content .el-select {
|
||||
width: 100%;
|
||||
}
|
||||
.outer_form-footer{
|
||||
|
||||
.outer_form-footer {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
.feedback-icon{
|
||||
|
||||
.feedback-icon {
|
||||
padding: 0 10px;
|
||||
color: #fff;
|
||||
font-weight: 400;
|
||||
font-size: 22px;
|
||||
cursor: pointer;
|
||||
&:hover{
|
||||
|
||||
&:hover {
|
||||
color: #68a2d5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.title{
|
||||
|
||||
.title {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
font-size: 15px;
|
||||
|
||||
}
|
||||
.add-icon{
|
||||
|
||||
.add-icon {
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
color: #ddd;
|
||||
|
|
@ -2047,42 +2033,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;
|
||||
|
|
@ -2091,7 +2084,7 @@ export default {
|
|||
z-index: 1;
|
||||
color: #ddd;
|
||||
padding: 5px;
|
||||
background-color:#1e1e1e;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,168 +9,112 @@
|
|||
<i class="el-icon-circle-close" style="font-size: 25px;cursor: pointer;" @click="close" />
|
||||
</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="qsForm.LesionType"
|
||||
filterable
|
||||
:disabled="!isCurrentTask || readingTaskState>=2 || !isBaseLineTask"
|
||||
@change="((val)=>{lesionTypeChange(val)})"
|
||||
>
|
||||
<el-select v-model="qsForm.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>
|
||||
<!-- 靶病灶、非靶病灶的器官为肝脏/Liver时,需要选择典型肝内病灶。该值默认为否;如果选择是,对于靶病灶需要提示“按照《独立影像评估章程》的相关规则,对于典型肝内靶病灶请测量肿瘤活性部分最长径。”,提示方式为在“长径”属性上,显示浮框或者增加!
|
||||
-->
|
||||
<el-form-item
|
||||
v-for="qs in questions"
|
||||
v-show="qs.ShowQuestion!==2"
|
||||
:key="qs.Id"
|
||||
: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.QuestionMark === 21 && (questionForm.LesionOrgan === '肝脏' || questionForm.LesionOrgan === 'Liver') && (lesionType === 0 || lesionType === 1 || lesionType === 2))) && qs.Type!=='group' && qs.Type!=='summary',
|
||||
message:['radio', 'select', 'checkbox'].includes(qs.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur','change']},
|
||||
]"
|
||||
>
|
||||
<span slot="label" style="display:inline-block;" >
|
||||
<el-tooltip v-if="qs.QuestionMark === 0 && (questionForm.LesionOrgan === '肝脏' || questionForm.LesionOrgan === 'Liver') && (lesionType === 0 || lesionType === 1 || lesionType === 2) && questionForm.IntrahepaticLesion" effect="dark" :content="$t('trials:mRecist:warnning:msg1')" placement="bottom">
|
||||
<el-form-item v-for="qs in questions" v-show="qs.ShowQuestion !== 2" :key="qs.Id" :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.QuestionMark === 21 && (questionForm.LesionOrgan === '肝脏' || questionForm.LesionOrgan === 'Liver') && (lesionType === 0 || lesionType === 1 || lesionType === 2))) && qs.Type !== 'group' && qs.Type !== 'summary',
|
||||
message: ['radio', 'select', 'checkbox'].includes(qs.Type) ? $t('common:ruleMessage:select') : $t('common:ruleMessage:specify'), trigger: ['blur', 'change']
|
||||
},
|
||||
]">
|
||||
<span slot="label" style="display:inline-block;">
|
||||
<el-tooltip
|
||||
v-if="qs.QuestionMark === 0 && (questionForm.LesionOrgan === '肝脏' || questionForm.LesionOrgan === 'Liver') && (lesionType === 0 || lesionType === 1 || lesionType === 2) && questionForm.IntrahepaticLesion"
|
||||
effect="dark" :content="$t('trials:mRecist:warnning:msg1')" placement="bottom">
|
||||
<i class='el-icon-warning' />
|
||||
</el-tooltip>
|
||||
{{ qs.QuestionName }}
|
||||
</span>
|
||||
|
||||
<!-- 输入框 -->
|
||||
<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;">
|
||||
<el-input v-if="qs.Type === 'input' || qs.Type === 'number'" v-model="qsForm[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) || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answer.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answer.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>
|
||||
</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: qsForm.RowIndex
|
||||
}
|
||||
})" />
|
||||
</div>
|
||||
|
||||
<el-input
|
||||
v-if="qs.Type==='input' || qs.Type==='number'"
|
||||
v-model="qsForm[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) || !!answer.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answer.SplitOrMergeLesionName) && lesionType !== 2) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || !!answer.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>
|
||||
</el-input>
|
||||
</template>
|
||||
<!-- 多行文本输入框 -->
|
||||
<el-input
|
||||
v-if="qs.Type==='textarea'"
|
||||
v-model="qsForm[qs.Id]"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
:disabled="!isCurrentTask || readingTaskState>=2"
|
||||
@change="((val)=>{formItemChange(val, qs)})"
|
||||
/>
|
||||
<el-input v-if="qs.Type === 'textarea'" v-model="qsForm[qs.Id]" type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }" :disabled="!isCurrentTask || readingTaskState >= 2"
|
||||
@change="((val) => { formItemChange(val, qs) })" />
|
||||
<!-- 下拉框 -->
|
||||
<el-select
|
||||
v-if="qs.Type==='select'"
|
||||
v-model="qsForm[qs.Id]"
|
||||
filterable
|
||||
<el-select v-if="qs.Type === 'select'" v-model="qsForm[qs.Id]" filterable
|
||||
:placeholder="qs.QuestionMark === 8 ? $t('common:placeholder:selectorsearch') : qs.QuestionMark === 2 ? '' : $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) || !!answer.SplitOrMergeLesionName))|| (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False'|| !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 21 && (isCurrentTaskAdd === 'False'|| !!answer.SplitOrMergeLesionName)) || (questionForm.LesionOrgan && questionForm.LesionOrgan !== '肝脏' && questionForm.LesionOrgan !== 'Liver' && qs.QuestionMark === 21)"
|
||||
@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) || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 8 && (isCurrentTaskAdd === 'False' || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 10 && (isCurrentTaskAdd === 'False' || (isCurrentTaskAdd === 'True' && !questionForm.IsCanEditPosition) || !!answer.SplitOrMergeLesionName)) || (qs.QuestionMark === 21 && (isCurrentTaskAdd === 'False' || !!answer.SplitOrMergeLesionName)) || (questionForm.LesionOrgan && questionForm.LesionOrgan !== '肝脏' && questionForm.LesionOrgan !== 'Liver' && qs.QuestionMark === 21)"
|
||||
@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 && isBaseLineTask">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value ===0) || (lesionType === 1 && (item.value ===0))"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="(lesionType === 0 && item.value === 0) || (lesionType === 1 && (item.value === 0))" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
|
||||
<el-option-group
|
||||
:label="!isNaN(parseFloat(answer.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answer.LastTaskState))}` : ''"
|
||||
>
|
||||
:label="!isNaN(parseFloat(answer.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode, parseFloat(answer.LastTaskState))}` : ''">
|
||||
<!-- 首次分裂的病灶只能选择存在 -->
|
||||
<template v-if="answer.IsFristAdd=== 'True' && answer.SplitOrMergeType === '0'">
|
||||
<template v-if="answer.IsFristAdd === 'True' && answer.SplitOrMergeType === '0'">
|
||||
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0" :key="item.id"
|
||||
:value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<!-- 首次添加的新病灶不能为无法评估和消失 -->
|
||||
<template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
|
||||
<el-option
|
||||
v-for="item of $d[qs.DictionaryCode]"
|
||||
v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<template v-else-if="isCurrentTaskAdd === 'True' && lesionType === 2">
|
||||
<el-option v-for="item of $d[qs.DictionaryCode]" v-show="item.value === 0 || item.value === 1"
|
||||
:key="item.id" :value="item.value" :label="item.label" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-option
|
||||
v-for="item of filterState($d[qs.DictionaryCode])"
|
||||
:key="item.id"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item of filterState($d[qs.DictionaryCode])" :key="item.id" :value="item.value"
|
||||
:label="item.label" />
|
||||
</template>
|
||||
</el-option-group>
|
||||
</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="qsForm[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="qsForm[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>
|
||||
|
|
@ -262,6 +206,9 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
this.$emit('handleReadingChart', row)
|
||||
},
|
||||
lesionTypeChange(v) {
|
||||
this.$emit('lesionTypeChange', { tableId: this.tableInfo.Id, rowIndex: this.answer.RowIndex, newLesionType: v })
|
||||
},
|
||||
|
|
@ -324,42 +271,50 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.table-question-form{
|
||||
::v-deep .el-form-item__label{
|
||||
.table-question-form {
|
||||
::v-deep .el-form-item__label {
|
||||
color: #c3c3c3;
|
||||
}
|
||||
::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;
|
||||
}
|
||||
::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-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>
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@ export default {
|
|||
this.$refs.readingChart.init(e, obj, zIndex)
|
||||
},
|
||||
foo() {
|
||||
if (!this.$refs.readingChart) return false
|
||||
this.$refs.readingChart.foo()
|
||||
},
|
||||
getEcrf(data) {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,17 @@
|
|||
<el-table-column prop="" label="" show-overflow-tooltip width="350px">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.QuestionName">{{ scope.row.BlindName ? scope.row.QuestionName :
|
||||
scope.row.QuestionName }}</span>
|
||||
scope.row.QuestionName }}
|
||||
<svg-icon v-if="scope.row.ShowChartTypeEnum > 0" 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,
|
||||
}
|
||||
})" />
|
||||
</span>
|
||||
<span v-else style="font-weight: bold;font-size: 16px;color: #f44336;">
|
||||
{{ scope.row.GroupName }}
|
||||
</span>
|
||||
|
|
@ -206,6 +216,7 @@
|
|||
<PreviewFile v-if="previewVisible" :file-path="currentPath" :file-type="currentType" />
|
||||
</div>
|
||||
</el-dialog>
|
||||
<readingChart ref="readingChart_report" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
|
@ -218,9 +229,10 @@ import PreviewFile from '@/components/PreviewFile/index'
|
|||
import { getToken } from '@/utils/auth'
|
||||
import store from '@/store'
|
||||
import { openWindow } from "@/utils/splitScreen";
|
||||
import readingChart from '@/components/readingChart'
|
||||
export default {
|
||||
name: 'CustomizeReportPage',
|
||||
components: { SignForm, PreviewFile },
|
||||
components: { SignForm, PreviewFile, readingChart },
|
||||
data() {
|
||||
return {
|
||||
trialId: '',
|
||||
|
|
@ -278,8 +290,25 @@ export default {
|
|||
})
|
||||
await this.getQuestionCalculateRelation()
|
||||
this.getReportInfo()
|
||||
document.addEventListener("click", this.foo);
|
||||
},
|
||||
methods: {
|
||||
handleReadingChart(row) {
|
||||
let { e, data } = row
|
||||
let obj = Object.assign({}, data)
|
||||
obj.TrialId = this.$route.query.trialId
|
||||
obj.VisitTaskId = this.taskInfo.VisitTaskId
|
||||
obj.key = 'readingChart_report'
|
||||
let zIndex = 9
|
||||
if (obj.RowIndex) {
|
||||
zIndex = 9999
|
||||
}
|
||||
this.$refs.readingChart_report.init(e, obj, zIndex)
|
||||
},
|
||||
foo() {
|
||||
if (!this.$refs.readingChart_report) return false
|
||||
this.$refs.readingChart_report.foo()
|
||||
},
|
||||
limitBlur(questionForm, id, valueType) {
|
||||
const value = questionForm[id]
|
||||
if (valueType === 0) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue