自定义阅片更改
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
81a5d5af17
commit
c2aba6c3fe
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="container" style="width:100%;height:100%" class="dicom-container">
|
<div ref="container" style="width:100%;height:100%" class="dicom-container">
|
||||||
<!-- 访视阅片 -->
|
<!-- 访视阅片 -->
|
||||||
<div v-if="readingCategory=== 1 && (CriterionType === 7 || CriterionType === 1)" class="reading-wrapper">
|
<div v-if="readingCategory=== 1 && (CriterionType === 7 || CriterionType === 1 )" class="reading-wrapper">
|
||||||
<VisitReview />
|
<VisitReview />
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="(isReadingTaskViewInOrder === 1 || ((isReadingTaskViewInOrder !== 1) && isShow)) && readingCategory=== 1 && CriterionType !== 0" class="reading-wrapper">
|
<div v-else-if="(isReadingTaskViewInOrder === 1 || ((isReadingTaskViewInOrder !== 1) && isShow)) && readingCategory=== 1 && CriterionType !== 0" class="reading-wrapper">
|
||||||
|
|
|
@ -353,6 +353,15 @@
|
||||||
@getAnnotations="getAnnotations"
|
@getAnnotations="getAnnotations"
|
||||||
@setToolToTarget="setToolToTarget"
|
@setToolToTarget="setToolToTarget"
|
||||||
/>
|
/>
|
||||||
|
<customize-question-list
|
||||||
|
v-else-if="lastViewportTaskId && criterionType === 0 && 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"
|
||||||
|
@resetAnnotations="resetAnnotations"
|
||||||
|
@setReadingTaskState="setReadingTaskState"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -469,6 +478,7 @@ import StudyList from './StudyList'
|
||||||
import Viewport from './Viewport'
|
import Viewport from './Viewport'
|
||||||
import mRecisit from './mRecist/QuestionList'
|
import mRecisit from './mRecist/QuestionList'
|
||||||
import recisit from './Recist/QuestionList'
|
import recisit from './Recist/QuestionList'
|
||||||
|
import customizeQuestionList from './customize/QuestionList'
|
||||||
import CustomWwwcForm from '@/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm'
|
import CustomWwwcForm from '@/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm'
|
||||||
import Manuals from '@/views/trials/trials-panel/reading/dicoms/components/Manuals'
|
import Manuals from '@/views/trials/trials-panel/reading/dicoms/components/Manuals'
|
||||||
import Hotkeys from '@/views/trials/trials-panel/reading/dicoms/components/Hotkeys'
|
import Hotkeys from '@/views/trials/trials-panel/reading/dicoms/components/Hotkeys'
|
||||||
|
@ -529,6 +539,7 @@ export default {
|
||||||
Viewport,
|
Viewport,
|
||||||
mRecisit,
|
mRecisit,
|
||||||
recisit,
|
recisit,
|
||||||
|
customizeQuestionList,
|
||||||
CustomWwwcForm,
|
CustomWwwcForm,
|
||||||
Manuals,
|
Manuals,
|
||||||
Hotkeys,
|
Hotkeys,
|
||||||
|
@ -654,30 +665,19 @@ export default {
|
||||||
if (!this.lastViewportTaskIds.includes(id)) {
|
if (!this.lastViewportTaskIds.includes(id)) {
|
||||||
this.lastViewportTaskIds.push(id)
|
this.lastViewportTaskIds.push(id)
|
||||||
}
|
}
|
||||||
// if (this.readingTaskState === 2) return
|
}
|
||||||
// if (id !== this.taskInfo.VisitTaskId) {
|
},
|
||||||
// const taskIdx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.taskInfo.VisitTaskId)
|
readingTaskState: {
|
||||||
// // const annotationUIDs = this.visitTaskList[taskIdx].AnnotationUIDs
|
immediate: true,
|
||||||
// const annotations = cornerstoneTools.annotation.state.getAllAnnotations()
|
handler(state) {
|
||||||
// // const annotations = this.visitTaskList[taskIdx].Annotations
|
if (state === 2) {
|
||||||
// annotations.forEach(i => {
|
// 设置标记锁定
|
||||||
// if (i.visitTaskId === this.taskInfo.VisitTaskId) {
|
const annotations = cornerstoneTools.annotation.state.getAllAnnotations()
|
||||||
// cornerstoneTools.annotation.state.removeAnnotation(i.annotationUID)
|
annotations.map(annotation => {
|
||||||
// let idx = this.visitTaskList[taskIdx].Annotations.findIndex(v=>v.MeasureData && v.MeasureData.annotationUID === i.annotationUID)
|
cornerstoneTools.annotation.locking.setAnnotationLocked(annotation.annotationUID)
|
||||||
// console.log('123',idx)
|
})
|
||||||
// if (idx > -1) {
|
this.setToolsPassive()
|
||||||
// cornerstoneTools.annotation.state.addAnnotation(this.visitTaskList[taskIdx].Annotations[idx].MeasureData)
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// // const annotations = cornerstoneTools.annotation.state.getAllAnnotations()
|
|
||||||
// // annotations.forEach(i => {
|
|
||||||
// // if (!(annotationUIDs.includes(i.annotationUID)) && i.visitTaskId === this.taskInfo.VisitTaskId) {
|
|
||||||
// // cornerstoneTools.annotation.state.removeAnnotation(i.annotationUID)
|
|
||||||
// // }
|
|
||||||
// // })
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -816,494 +816,501 @@ export default {
|
||||||
const valid = await this.$refs[`${table.Id}_${rowIndex}`][0].validate()
|
const valid = await this.$refs[`${table.Id}_${rowIndex}`][0].validate()
|
||||||
if (!valid) return
|
if (!valid) return
|
||||||
const loading = this.$loading({ fullscreen: true })
|
const loading = this.$loading({ fullscreen: true })
|
||||||
const innerForm = this.innerFormData[`${table.Id}_${rowIndex}`]
|
try {
|
||||||
const measureData = innerForm.MeasureData
|
const innerForm = this.innerFormData[`${table.Id}_${rowIndex}`]
|
||||||
const lesionState = innerForm.LesionState
|
const measureData = innerForm.MeasureData
|
||||||
let lesionLength = innerForm.LesionLength
|
const lesionState = innerForm.LesionState
|
||||||
let lesionShort = innerForm.LesionShort
|
let lesionLength = innerForm.LesionLength
|
||||||
const lymphNodes = innerForm.IsLymphNodes
|
let lesionShort = innerForm.LesionShort
|
||||||
const lesionType = table.LesionType
|
const lymphNodes = innerForm.IsLymphNodes
|
||||||
// const lesionPart = innerForm.LesionPart
|
const lesionType = table.LesionType
|
||||||
if (this.isBaseLineTask) {
|
// const lesionPart = innerForm.LesionPart
|
||||||
// 基线
|
if (this.isBaseLineTask) {
|
||||||
// 靶病灶且状态为存在(0)
|
// 基线
|
||||||
if (lesionType === 0 && lesionState === 0) {
|
// 靶病灶且状态为存在(0)
|
||||||
if (lymphNodes === 1) {
|
if (lesionType === 0 && lesionState === 0) {
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具,短径大于等于15mm
|
if (lymphNodes === 1) {
|
||||||
if (!(measureData && measureData.markTool === 'Bidirectional' && lesionShort >= 15)) {
|
// 淋巴结靶病灶 必须使用长短径测量工具,短径大于等于15mm
|
||||||
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记,且短径须大于15mm!
|
if (!(measureData && measureData.markTool === 'Bidirectional' && lesionShort >= 15)) {
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg19'), {
|
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记,且短径须大于15mm!
|
||||||
type: 'warning',
|
this.$confirm(this.$t('trials:reading:warnning:msg19'), {
|
||||||
showCancelButton: false,
|
type: 'warning',
|
||||||
callback: action => {}
|
showCancelButton: false,
|
||||||
})
|
callback: action => {}
|
||||||
loading.close()
|
})
|
||||||
return
|
loading.close()
|
||||||
}
|
return
|
||||||
} else {
|
}
|
||||||
// 非淋巴结靶病灶 直径测量工具 长径须大于等于10mm且不小于2倍层厚
|
} else {
|
||||||
if (!(measureData && measureData.markTool === 'Length' && lesionLength >= 10 && (measureData.sliceThickness && lesionLength >= 2 * measureData.sliceThickness || !measureData.sliceThickness))) {
|
// 非淋巴结靶病灶 直径测量工具 长径须大于等于10mm且不小于2倍层厚
|
||||||
// 评估状态为存在的非淋巴结靶病灶需使用直径测量工具添加标记,长径须大于10mm且不小于2倍层厚!
|
if (!(measureData && measureData.markTool === 'Length' && lesionLength >= 10 && (measureData.sliceThickness && lesionLength >= 2 * measureData.sliceThickness || !measureData.sliceThickness))) {
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg20'), {
|
// 评估状态为存在的非淋巴结靶病灶需使用直径测量工具添加标记,长径须大于10mm且不小于2倍层厚!
|
||||||
type: 'warning',
|
this.$confirm(this.$t('trials:reading:warnning:msg20'), {
|
||||||
showCancelButton: false,
|
type: 'warning',
|
||||||
callback: action => {}
|
showCancelButton: false,
|
||||||
})
|
callback: action => {}
|
||||||
loading.close()
|
})
|
||||||
return
|
loading.close()
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 非靶病灶且状态为存在(0)
|
// 非靶病灶且状态为存在(0)
|
||||||
if (lesionType === 1 && lesionState === 0) {
|
if (lesionType === 1 && lesionState === 0) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结非靶病灶 必须使用长短径测量工具或箭头工具
|
// 淋巴结非靶病灶 必须使用长短径测量工具或箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleROI'))) {
|
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleROI'))) {
|
||||||
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记
|
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 直径测量工具或箭头工具
|
// 非淋巴结非靶病灶 直径测量工具或箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'RectangleROI'))) {
|
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'RectangleROI'))) {
|
||||||
// 评估状态为存在的非淋巴结非靶病灶需使用直径测量工具或矩形工具添加标记!
|
// 评估状态为存在的非淋巴结非靶病灶需使用直径测量工具或矩形工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg22'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg22'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
// 非基线
|
||||||
// 非基线
|
// 靶病灶且状态为存在(0)
|
||||||
// 靶病灶且状态为存在(0)
|
if (lesionType === 0 && lesionState === 0) {
|
||||||
if (lesionType === 0 && lesionState === 0) {
|
if (lymphNodes === 1) {
|
||||||
if (lymphNodes === 1) {
|
// 淋巴结靶病灶 必须使用长短径测量工具
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具
|
if (!(measureData && measureData.markTool === 'Bidirectional' && lesionShort >= 10)) {
|
||||||
if (!(measureData && measureData.markTool === 'Bidirectional' && lesionShort >= 10)) {
|
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记!
|
||||||
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记!
|
this.$confirm(this.$t('trials:reading:warnning:msg23'), {
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg23'), {
|
type: 'warning',
|
||||||
type: 'warning',
|
showCancelButton: false,
|
||||||
showCancelButton: false,
|
callback: action => {}
|
||||||
callback: action => {}
|
})
|
||||||
})
|
loading.close()
|
||||||
loading.close()
|
return
|
||||||
return
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
// 非淋巴结靶病灶 直径测量工具
|
||||||
// 非淋巴结靶病灶 直径测量工具
|
if (!(measureData && measureData.markTool === 'Length')) {
|
||||||
if (!(measureData && measureData.markTool === 'Length')) {
|
// `评估状态为存在的非淋巴结靶病灶需使用直径测量工具添加标记!`
|
||||||
// `评估状态为存在的非淋巴结靶病灶需使用直径测量工具添加标记!`
|
this.$confirm(this.$t('trials:reading:warnning:msg24'), {
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg24'), {
|
type: 'warning',
|
||||||
type: 'warning',
|
showCancelButton: false,
|
||||||
showCancelButton: false,
|
callback: action => {}
|
||||||
callback: action => {}
|
})
|
||||||
})
|
loading.close()
|
||||||
loading.close()
|
return
|
||||||
return
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// 靶病灶且状态为太小(1)
|
||||||
// 靶病灶且状态为太小(1)
|
if (lesionType === 0 && lesionState === 1) {
|
||||||
if (lesionType === 0 && lesionState === 1) {
|
if (lymphNodes === 1) {
|
||||||
if (lymphNodes === 1) {
|
// 淋巴结靶病灶 必须使用箭头工具,短径记录为5mm
|
||||||
// 淋巴结靶病灶 必须使用箭头工具,短径记录为5mm
|
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
// 评估状态为太小的淋巴结靶病灶需使用箭头工具添加标记!
|
||||||
// 评估状态为太小的淋巴结靶病灶需使用箭头工具添加标记!
|
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg25'), {
|
type: 'warning',
|
||||||
type: 'warning',
|
showCancelButton: false,
|
||||||
showCancelButton: false,
|
callback: action => {}
|
||||||
callback: action => {}
|
})
|
||||||
})
|
loading.close()
|
||||||
loading.close()
|
return
|
||||||
return
|
} else if (measureData && measureData.markTool === 'ArrowAnnotate') {
|
||||||
} else if (measureData && measureData.markTool === 'ArrowAnnotate') {
|
const shortId = this.getQuestionId(1, table.TableQuestions.Questions)
|
||||||
const shortId = this.getQuestionId(1, table.TableQuestions.Questions)
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], shortId, 5)
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], shortId, 5)
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'LesionShort', 5)
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'LesionShort', 5)
|
lesionShort = 5
|
||||||
lesionShort = 5
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
// 非淋巴结靶病灶 箭头工具,长径记录为5mm
|
||||||
// 非淋巴结靶病灶 箭头工具,长径记录为5mm
|
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
// 评估状态为太小的非淋巴结靶病灶需使用箭头工具添加标记!
|
||||||
// 评估状态为太小的非淋巴结靶病灶需使用箭头工具添加标记!
|
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg26'), {
|
type: 'warning',
|
||||||
type: 'warning',
|
showCancelButton: false,
|
||||||
showCancelButton: false,
|
callback: action => {}
|
||||||
callback: action => {}
|
})
|
||||||
})
|
loading.close()
|
||||||
loading.close()
|
return
|
||||||
return
|
} else if (measureData && measureData.markTool === 'ArrowAnnotate') {
|
||||||
} else if (measureData && measureData.markTool === 'ArrowAnnotate') {
|
const lengthId = this.getQuestionId(0, table.TableQuestions.Questions)
|
||||||
const lengthId = this.getQuestionId(0, table.TableQuestions.Questions)
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], lengthId, 5)
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], lengthId, 5)
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'LesionLength', 5)
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'LesionLength', 5)
|
lesionLength = 5
|
||||||
lesionLength = 5
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 靶病灶且状态为无法评估(2)
|
// 靶病灶且状态为无法评估(2)
|
||||||
if (lesionType === 0 && lesionState === 2) {
|
if (lesionType === 0 && lesionState === 2) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 不需要添加标记
|
// 淋巴结靶病灶 不需要添加标记
|
||||||
if (measureData) {
|
if (measureData) {
|
||||||
// 评估状态为无法评估的淋巴结靶病灶不需要添加标记!
|
// 评估状态为无法评估的淋巴结靶病灶不需要添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg27'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结靶病灶 不需要添加标记
|
// 非淋巴结靶病灶 不需要添加标记
|
||||||
if (measureData) {
|
if (measureData) {
|
||||||
// 状态为无法评估的非淋巴结靶病灶不需要添加标记!
|
// 状态为无法评估的非淋巴结靶病灶不需要添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg28'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 靶病灶且状态为消失(3)
|
// 靶病灶且状态为消失(3)
|
||||||
if (lesionType === 0 && lesionState === 3) {
|
if (lesionType === 0 && lesionState === 3) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
if (!(measureData && (measureData.markTool === 'Bidirectional' && lesionShort < 10))) {
|
if (!(measureData && (measureData.markTool === 'Bidirectional' && lesionShort < 10))) {
|
||||||
// `评估状态为消失的淋巴结靶病灶需使用长短径工具添加标记,且短径需小于10mm!`
|
// `评估状态为消失的淋巴结靶病灶需使用长短径工具添加标记,且短径需小于10mm!`
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg29'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg29'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结靶病灶 箭头工具
|
// 非淋巴结靶病灶 箭头工具
|
||||||
if (!(measureData && measureData.markTool === 'ArrowAnnotate')) {
|
if (!(measureData && measureData.markTool === 'ArrowAnnotate')) {
|
||||||
// 评估状态为消失的非淋巴结靶病灶只能使用箭头工具添加标记!
|
// 评估状态为消失的非淋巴结靶病灶只能使用箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg30'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
} else if (measureData && measureData.markTool === 'ArrowAnnotate') {
|
} else if (measureData && measureData.markTool === 'ArrowAnnotate') {
|
||||||
const lengthId = this.getQuestionId(0, table.TableQuestions.Questions)
|
const lengthId = this.getQuestionId(0, table.TableQuestions.Questions)
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], lengthId, null)
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], lengthId, null)
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'LesionLength', null)
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'LesionLength', null)
|
||||||
lesionLength = null
|
lesionLength = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 非靶病灶且状态为存在(0)
|
// 非靶病灶且状态为存在(0)
|
||||||
if (lesionType === 1 && lesionState === 0) {
|
if (lesionType === 1 && lesionState === 0) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结非靶病灶 必须使用长短径测量工具、箭头工具
|
// 淋巴结非靶病灶 必须使用长短径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleROI'))) {
|
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleROI'))) {
|
||||||
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或箭头工具添加标记!
|
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg31'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'RectangleROI'))) {
|
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'RectangleROI'))) {
|
||||||
// 评估状态为存在的非淋巴结非靶病灶需使用直径测量工具或箭头工具添加标记!
|
// 评估状态为存在的非淋巴结非靶病灶需使用直径测量工具或箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg32'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg32'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 非靶病灶且状态为显著增大(1)
|
// 非靶病灶且状态为显著增大(1)
|
||||||
if (lesionType === 1 && lesionState === 1) {
|
if (lesionType === 1 && lesionState === 1) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleROI'))) {
|
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleROI'))) {
|
||||||
// `评估状态为显著增大的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记!`
|
// `评估状态为显著增大的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记!`
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg33'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'RectangleROI'))) {
|
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'RectangleROI'))) {
|
||||||
// 评估状态为显著增大的非淋巴结非靶病灶需使用直径测量工具或矩形工具添加标记!
|
// 评估状态为显著增大的非淋巴结非靶病灶需使用直径测量工具或矩形工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg34'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 非靶病灶且状态为无法评估(2)
|
// 非靶病灶且状态为无法评估(2)
|
||||||
if (lesionType === 1 && lesionState === 2) {
|
if (lesionType === 1 && lesionState === 2) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 无标记
|
// 淋巴结靶病灶 无标记
|
||||||
if (measureData) {
|
if (measureData) {
|
||||||
// 评估状态为无法评估的淋巴结非靶病灶不需要添加标记!
|
// 评估状态为无法评估的淋巴结非靶病灶不需要添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg35'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 无标记
|
// 非淋巴结非靶病灶 无标记
|
||||||
if (measureData) {
|
if (measureData) {
|
||||||
// 评估状态为无法评估的非淋巴结非靶病灶不需要添加标记!
|
// 评估状态为无法评估的非淋巴结非靶病灶不需要添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg36'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 非靶病灶且状态为消失(3)
|
// 非靶病灶且状态为消失(3)
|
||||||
if (lesionType === 1 && lesionState === 3) {
|
if (lesionType === 1 && lesionState === 3) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为消失的淋巴结非靶病灶需使用箭头工具添加标记!
|
// 评估状态为消失的淋巴结非靶病灶需使用箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg37'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 箭头工具
|
// 非淋巴结非靶病灶 箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为消失的非淋巴结非靶病灶需使用箭头工具添加标记!
|
// 评估状态为消失的非淋巴结非靶病灶需使用箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg38'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 新病灶且状态为存在(0)
|
// 新病灶且状态为存在(0)
|
||||||
if (lesionType === 2 && lesionState === 0) {
|
if (lesionType === 2 && lesionState === 0) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为存在的淋巴结新病灶需使用长短径测量工具或箭头工具添加标记!
|
// 评估状态为存在的淋巴结新病灶需使用长短径测量工具或箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg39'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为存在的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!
|
// 评估状态为存在的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg40'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 新病灶且状态为疑似(1)
|
// 新病灶且状态为疑似(1)
|
||||||
if (lesionType === 2 && lesionState === 1) {
|
if (lesionType === 2 && lesionState === 1) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为疑似的淋巴结新病灶需使用长短径测量工具或箭头工具添加标记!
|
// 评估状态为疑似的淋巴结新病灶需使用长短径测量工具或箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg41'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg41'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'Length' || measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// `评估状态为疑似的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!`
|
// `评估状态为疑似的非淋巴结新病灶需使用直径测量工具或箭头工具添加标记!`
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg42'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg42'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 新病灶且状态为无法评估(2)
|
// 新病灶且状态为无法评估(2)
|
||||||
if (lesionType === 2 && lesionState === 2) {
|
if (lesionType === 2 && lesionState === 2) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||||||
if (measureData) {
|
if (measureData) {
|
||||||
// `评估状态为无法评估的淋巴结新病灶不需要添加标记!`
|
// `评估状态为无法评估的淋巴结新病灶不需要添加标记!`
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg43'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
// 非淋巴结非靶病灶 直径测量工具、箭头工具
|
||||||
if (measureData) {
|
if (measureData) {
|
||||||
// 评估状态为无法评估的非淋巴结新病灶不需要添加标记!
|
// 评估状态为无法评估的非淋巴结新病灶不需要添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg44'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 新病灶且状态为消失(3)
|
// 新病灶且状态为消失(3)
|
||||||
if (lesionType === 2 && lesionState === 3) {
|
if (lesionType === 2 && lesionState === 3) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
// 淋巴结靶病灶 必须使用长短径测量工具、箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为消失的淋巴结新病灶需使用箭头工具添加标记!
|
// 评估状态为消失的淋巴结新病灶需使用箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg45'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 箭头工具
|
// 箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
if (!(measureData && (measureData.markTool === 'ArrowAnnotate'))) {
|
||||||
// 评估状态为消失的非淋巴结新病灶需使用箭头工具添加标记!
|
// 评估状态为消失的非淋巴结新病灶需使用箭头工具添加标记!
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg46'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
showCancelButton: false,
|
showCancelButton: false,
|
||||||
callback: action => {}
|
callback: action => {}
|
||||||
})
|
})
|
||||||
loading.close()
|
loading.close()
|
||||||
return
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// 获取截图
|
||||||
// 获取截图
|
const obj = Object.assign({}, measureData)
|
||||||
const obj = Object.assign({}, measureData)
|
obj.visitTaskId = this.visitTaskId
|
||||||
obj.visitTaskId = this.visitTaskId
|
obj.lesionName = innerForm.LesionName
|
||||||
obj.lesionName = innerForm.LesionName
|
let picturePath = ''
|
||||||
let picturePath = ''
|
if (measureData) {
|
||||||
if (measureData) {
|
const base64Str = await this.getScreenshots(obj)
|
||||||
const base64Str = await this.getScreenshots(obj)
|
const pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, base64Str)
|
||||||
const pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, base64Str)
|
picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : ''
|
||||||
picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : ''
|
}
|
||||||
}
|
const answers = []
|
||||||
const answers = []
|
const reg = new RegExp(/^[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}$/)
|
||||||
const reg = new RegExp(/^[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}$/)
|
for (const k in innerForm) {
|
||||||
for (const k in innerForm) {
|
if (reg.test(k)) {
|
||||||
if (reg.test(k)) {
|
if (answers.findIndex(i => i.tableQuestionId === k) === -1) {
|
||||||
if (answers.findIndex(i => i.tableQuestionId === k) === -1) {
|
answers.push({ tableQuestionId: k, answer: innerForm[k] })
|
||||||
answers.push({ tableQuestionId: k, answer: innerForm[k] })
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
const params = {
|
||||||
const params = {
|
questionId: table.Id,
|
||||||
questionId: table.Id,
|
rowId: innerForm.RowId,
|
||||||
rowId: innerForm.RowId,
|
rowIndex: innerForm.RowIndex,
|
||||||
rowIndex: innerForm.RowIndex,
|
|
||||||
visitTaskId: this.visitTaskId,
|
|
||||||
trialId: this.$route.query.trialId,
|
|
||||||
measureData: measureData ? JSON.stringify(measureData) : '',
|
|
||||||
answerList: answers,
|
|
||||||
isCanEditPosition: innerForm.IsCanEditPosition,
|
|
||||||
studyId: measureData ? measureData.studyId : '',
|
|
||||||
seriesId: measureData ? measureData.seriesId : '',
|
|
||||||
instanceId: measureData ? measureData.instanceId : '',
|
|
||||||
numberOfFrames: measureData ? measureData.frame : null,
|
|
||||||
picturePath: picturePath,
|
|
||||||
organInfoId: innerForm.OrganInfoId,
|
|
||||||
markTool: measureData ? measureData.markTool : '',
|
|
||||||
isDicomReading: innerForm.IsDicomReading
|
|
||||||
}
|
|
||||||
if (this.deleteTargetInfo && this.deleteTargetInfo.newLesionName === innerForm.LesionName) {
|
|
||||||
await deleteReadingRowAnswer({
|
|
||||||
visitTaskId: this.visitTaskId,
|
visitTaskId: this.visitTaskId,
|
||||||
questionId: this.deleteTargetInfo.tableId,
|
trialId: this.$route.query.trialId,
|
||||||
rowId: this.deleteTargetInfo.rowId
|
measureData: measureData ? JSON.stringify(measureData) : '',
|
||||||
})
|
answerList: answers,
|
||||||
this.deleteTargetInfo = null
|
isCanEditPosition: innerForm.IsCanEditPosition,
|
||||||
params.rowId = ''
|
studyId: measureData ? measureData.studyId : '',
|
||||||
}
|
seriesId: measureData ? measureData.seriesId : '',
|
||||||
const res = await submitTableQuestion(params)
|
instanceId: measureData ? measureData.instanceId : '',
|
||||||
if (res.IsSuccess) {
|
numberOfFrames: measureData ? measureData.frame : null,
|
||||||
// 保存成功!
|
picturePath: picturePath,
|
||||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
organInfoId: innerForm.OrganInfoId,
|
||||||
// this.getTableQuestions()
|
markTool: measureData ? measureData.markTool : '',
|
||||||
// this.$emit('getAnnotations', this.visitTaskId)
|
isDicomReading: innerForm.IsDicomReading
|
||||||
if (!this.innerFormData[`${table.Id}_${rowIndex}`].RowId) {
|
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'RowId', res.Result.RowId)
|
|
||||||
}
|
}
|
||||||
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'SaveTypeEnum', 2)
|
if (this.deleteTargetInfo && this.deleteTargetInfo.newLesionName === innerForm.LesionName) {
|
||||||
|
await deleteReadingRowAnswer({
|
||||||
|
visitTaskId: this.visitTaskId,
|
||||||
|
questionId: this.deleteTargetInfo.tableId,
|
||||||
|
rowId: this.deleteTargetInfo.rowId
|
||||||
|
})
|
||||||
|
this.deleteTargetInfo = null
|
||||||
|
params.rowId = ''
|
||||||
|
}
|
||||||
|
const res = await submitTableQuestion(params)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
// 保存成功!
|
||||||
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
|
// this.getTableQuestions()
|
||||||
|
// this.$emit('getAnnotations', this.visitTaskId)
|
||||||
|
if (!this.innerFormData[`${table.Id}_${rowIndex}`].RowId) {
|
||||||
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'RowId', res.Result.RowId)
|
||||||
|
}
|
||||||
|
this.$set(this.innerFormData[`${table.Id}_${rowIndex}`], 'SaveTypeEnum', 2)
|
||||||
|
this.activeName = ''
|
||||||
|
}
|
||||||
|
loading.close()
|
||||||
|
} catch(e) {
|
||||||
|
console.log(e)
|
||||||
|
loading.close()
|
||||||
}
|
}
|
||||||
loading.close()
|
|
||||||
},
|
},
|
||||||
// 上传截图
|
// 上传截图
|
||||||
async uploadScreenshots(fileName, file) {
|
async uploadScreenshots(fileName, file) {
|
||||||
|
|
|
@ -673,7 +673,7 @@ export default {
|
||||||
|
|
||||||
this.signVisible = false
|
this.signVisible = false
|
||||||
// window.location.reload()
|
// window.location.reload()
|
||||||
// window.opener.postMessage('refreshTaskList', window.location)
|
window.opener.postMessage('refreshTaskList', window.location)
|
||||||
|
|
||||||
// 设置当前任务阅片状态为已读
|
// 设置当前任务阅片状态为已读
|
||||||
this.readingTaskState = 2
|
this.readingTaskState = 2
|
||||||
|
|
|
@ -6,11 +6,10 @@
|
||||||
<!-- 阅片 -->
|
<!-- 阅片 -->
|
||||||
<el-tab-pane
|
<el-tab-pane
|
||||||
v-if="taskInfo"
|
v-if="taskInfo"
|
||||||
ref="readPage"
|
|
||||||
:label="$t('trials:reading:tabTitle:review')"
|
:label="$t('trials:reading:tabTitle:review')"
|
||||||
name="read"
|
name="read"
|
||||||
>
|
>
|
||||||
<read-page />
|
<read-page ref="readPage"/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<!-- 报告 -->
|
<!-- 报告 -->
|
||||||
<el-tab-pane
|
<el-tab-pane
|
||||||
|
@ -19,7 +18,11 @@
|
||||||
name="report"
|
name="report"
|
||||||
>
|
>
|
||||||
<report-page
|
<report-page
|
||||||
v-if="activeName === 'report'"
|
v-if="activeName === 'report' && taskInfo.CriterionType !== 0"
|
||||||
|
@setReadingTaskState="setReadingTaskState"
|
||||||
|
/>
|
||||||
|
<customize-report-page
|
||||||
|
v-if="activeName === 'report' && taskInfo.CriterionType === 0"
|
||||||
@setReadingTaskState="setReadingTaskState"
|
@setReadingTaskState="setReadingTaskState"
|
||||||
/>
|
/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
@ -29,11 +32,13 @@
|
||||||
<script>
|
<script>
|
||||||
import ReadPage from './ReadPage'
|
import ReadPage from './ReadPage'
|
||||||
import ReportPage from './ReportPage'
|
import ReportPage from './ReportPage'
|
||||||
|
import CustomizeReportPage from './customize/ReportPage'
|
||||||
export default {
|
export default {
|
||||||
name: 'VisitReview',
|
name: 'VisitReview',
|
||||||
components: {
|
components: {
|
||||||
ReadPage,
|
ReadPage,
|
||||||
ReportPage
|
ReportPage,
|
||||||
|
CustomizeReportPage
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -0,0 +1,438 @@
|
||||||
|
<template>
|
||||||
|
<div v-loading="loading" class="questionList-wrapper">
|
||||||
|
<div class="container">
|
||||||
|
<div class="basic-info">
|
||||||
|
<h3 v-if="taskInfo && taskInfo.IsReadingShowSubjectInfo">
|
||||||
|
<span v-if="visitInfo.SubjectCode">{{ visitInfo.SubjectCode }} </span>
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-form
|
||||||
|
v-if="taskInfo && rerender"
|
||||||
|
ref="questions"
|
||||||
|
size="small"
|
||||||
|
:model="questionForm"
|
||||||
|
class="ecrf-form"
|
||||||
|
>
|
||||||
|
<template v-if="rerender">
|
||||||
|
<QuestionFormItem
|
||||||
|
v-for="question of questions"
|
||||||
|
:key="question.Id"
|
||||||
|
:visit-task-id="visitTaskId"
|
||||||
|
:question="question"
|
||||||
|
:question-form="questionForm"
|
||||||
|
:reading-task-state="readingTaskState"
|
||||||
|
:criterion-id="criterionId"
|
||||||
|
:calculation-list="calculationList"
|
||||||
|
:is-baseline="isBaseLineTask"
|
||||||
|
@resetFormItemData="resetFormItemData"
|
||||||
|
@setFormItemData="setFormItemData"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-form-item v-if="readingTaskState < 2">
|
||||||
|
<div style="text-align:center;">
|
||||||
|
<el-button v-if="taskInfo && taskInfo.IseCRFShowInDicomReading" type="primary" @click="skipTask">
|
||||||
|
{{ $t('trials:readingReport:button:skip') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button type="primary" @click="handleSave">
|
||||||
|
{{ $t('common:button:save') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button v-if="taskInfo && taskInfo.IseCRFShowInDicomReading" type="primary" @click="handleSubmit">
|
||||||
|
{{ $t('common:button:submit') }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 签名框 -->
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import { getCustomTableQuestionAnswer, changeDicomReadingQuestionAnswer, submitVisitTaskQuestionsInDto, getQuestionCalculateRelation } from '@/api/trials'
|
||||||
|
import { setSkipReadingCache, resetReadingTask } from '@/api/reading'
|
||||||
|
import const_ from '@/const/sign-code'
|
||||||
|
import QuestionFormItem from '@/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionFormItem'
|
||||||
|
import SignForm from '@/views/trials/components/newSignForm'
|
||||||
|
export default {
|
||||||
|
name: 'EcrfList',
|
||||||
|
components: {
|
||||||
|
QuestionFormItem,
|
||||||
|
SignForm
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
visitInfo: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
readingTaskState: {
|
||||||
|
type: Number,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
trialId: '',
|
||||||
|
criterionId: '',
|
||||||
|
visitTaskId: '',
|
||||||
|
loading: false,
|
||||||
|
questions: [],
|
||||||
|
questionForm: {},
|
||||||
|
publicQuestions: [],
|
||||||
|
signVisible: false,
|
||||||
|
signCode: null,
|
||||||
|
currentUser: zzSessionStorage.getItem('userName'),
|
||||||
|
activeName: 0,
|
||||||
|
classArr: [],
|
||||||
|
calculationList: [],
|
||||||
|
taskInfo: null,
|
||||||
|
isBaseLineTask: false,
|
||||||
|
rerender: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.trialId = this.$route.query.trialId
|
||||||
|
this.visitTaskId = this.visitInfo.VisitTaskId
|
||||||
|
this.taskInfo = JSON.parse(localStorage.getItem('taskInfo'))
|
||||||
|
this.isBaseLineTask = this.taskInfo.IsBaseLine
|
||||||
|
this.criterionType = this.taskInfo.CriterionType
|
||||||
|
this.getQuestionCalculateRelation()
|
||||||
|
this.getQuestions()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getQuestions() {
|
||||||
|
this.loading = true
|
||||||
|
try {
|
||||||
|
const param = {
|
||||||
|
visitTaskId: this.visitTaskId
|
||||||
|
}
|
||||||
|
const res = await getCustomTableQuestionAnswer(param)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.readingTaskState = res.OtherInfo.ReadingTaskState
|
||||||
|
res.Result.SinglePage.map((v) => {
|
||||||
|
if (v.Type === 'group' && v.Childrens.length === 0) return
|
||||||
|
if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary' && v.Type !== 'table' && v.Type !== 'basicTable' && v.Type !== 'number') {
|
||||||
|
this.$set(this.questionForm, v.Id, v.Answer)
|
||||||
|
}
|
||||||
|
if (v.Type === 'table' || v.Type === 'basicTable') {
|
||||||
|
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 })
|
||||||
|
}
|
||||||
|
if (v.Type === 'number') {
|
||||||
|
this.$set(this.questionForm, v.Id, v.Answer === '' ? '' : parseFloat(v.Answer).toFixed(this.digitPlaces))
|
||||||
|
}
|
||||||
|
if (v.Childrens.length > 0) {
|
||||||
|
this.setChild(v.Childrens)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.questions = res.Result.SinglePage
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setChild(obj) {
|
||||||
|
obj.forEach(i => {
|
||||||
|
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') {
|
||||||
|
i.TableQuestions.Questions.forEach(o => {
|
||||||
|
if (o.Type === 'number') {
|
||||||
|
i.TableQuestions.Answers.forEach((ite, index) => {
|
||||||
|
this.$set(i.TableQuestions.Answers[index], o.Id, i.TableQuestions.Answers[index][o.Id] ? parseFloat(i.TableQuestions.Answers[index][o.Id]).toFixed(this.digitPlaces) : null)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
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 })
|
||||||
|
}
|
||||||
|
if (i.Type === 'number') {
|
||||||
|
this.$set(this.questionForm, i.Id, i.Answer === '' ? '' : parseFloat(i.Answer).toFixed(this.digitPlaces))
|
||||||
|
}
|
||||||
|
if (i.Childrens && i.Childrens.length > 0) {
|
||||||
|
this.setChild(i.Childrens)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async getQuestionCalculateRelation() {
|
||||||
|
try {
|
||||||
|
const res = await getQuestionCalculateRelation({ TrialReadingCriterionId: this.criterionId })
|
||||||
|
this.calculationList = res.Result
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async handleSave(isMsg) {
|
||||||
|
const valid = await this.$refs['questions'].validate()
|
||||||
|
if (!valid) return
|
||||||
|
this.loading = true
|
||||||
|
try {
|
||||||
|
var answers = []
|
||||||
|
for (const k in this.questionForm) {
|
||||||
|
if (this.questionForm[k] instanceof Array) {} else {
|
||||||
|
answers.push({ id: k, answer: this.questionForm[k] })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var params = {
|
||||||
|
visitTaskId: this.visitTaskId,
|
||||||
|
answers: answers
|
||||||
|
}
|
||||||
|
const res = await changeDicomReadingQuestionAnswer(params)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
if (isMsg) {
|
||||||
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.loading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async handleSubmit() {
|
||||||
|
const valid = await this.$refs['questions'].validate()
|
||||||
|
if (!valid) return
|
||||||
|
const { ImageAssessmentReportConfirmation } = const_.processSignature
|
||||||
|
this.signCode = ImageAssessmentReportConfirmation
|
||||||
|
this.signVisible = true
|
||||||
|
},
|
||||||
|
// 关闭签名框
|
||||||
|
closeSignDialog(isSign, signInfo) {
|
||||||
|
if (isSign) {
|
||||||
|
this.signConfirm(signInfo)
|
||||||
|
} else {
|
||||||
|
this.signVisible = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 签名并确认
|
||||||
|
async signConfirm(signInfo) {
|
||||||
|
this.loading = true
|
||||||
|
var answers = []
|
||||||
|
for (const k in this.questionForm) {
|
||||||
|
answers.push({ readingQuestionTrialId: k, answer: this.questionForm[k] })
|
||||||
|
}
|
||||||
|
var params = {
|
||||||
|
data: {
|
||||||
|
trialId: this.trialId,
|
||||||
|
visitTaskId: this.visitTaskId,
|
||||||
|
readingQuestionCriterionTrialId: this.criterionId,
|
||||||
|
answerList: answers
|
||||||
|
},
|
||||||
|
signInfo: signInfo
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const res = await submitVisitTaskQuestionsInDto(params)
|
||||||
|
this.loading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
|
this.isEdit = false
|
||||||
|
this.$refs['signForm'].btnLoading = false
|
||||||
|
this.signVisible = false
|
||||||
|
this.$emit('setReadingTaskState', 2)
|
||||||
|
window.opener.postMessage('refreshTaskList', window.location)
|
||||||
|
const confirm = await this.$confirm(
|
||||||
|
this.$t('trials:noneDicoms:message:msg1'),
|
||||||
|
{
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (confirm !== 'confirm') return
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.loading = false
|
||||||
|
this.$refs['signForm'].btnLoading = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async skipTask() {
|
||||||
|
try {
|
||||||
|
// 是否确认跳过?
|
||||||
|
const confirm = await this.$confirm(
|
||||||
|
this.$t('trials:readingReport:message:skipConfirm'),
|
||||||
|
{
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (confirm !== 'confirm') return
|
||||||
|
this.loading = true
|
||||||
|
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
|
||||||
|
this.loading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.loading = false
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resetFormItemData(v) {
|
||||||
|
this.questionForm[v] = null
|
||||||
|
},
|
||||||
|
setFormItemData(obj) {
|
||||||
|
this.$set(this.questionForm, obj.key, JSON.parse(JSON.stringify(obj.val)))
|
||||||
|
this.classArr.map(i => {
|
||||||
|
if (i.triggerId === obj.key) {
|
||||||
|
let answer = null
|
||||||
|
const list = JSON.parse(i.classifyAlgorithms)
|
||||||
|
if (i.classifyType === 0) {
|
||||||
|
const o = list.find(v => {
|
||||||
|
return (
|
||||||
|
parseFloat(obj.val) >= parseFloat(v.gt) &&
|
||||||
|
parseFloat(obj.val) < parseFloat(v.lt)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
answer = o ? o.label : null
|
||||||
|
} else if (i.classifyType === 1) {
|
||||||
|
const o = list.find(v => {
|
||||||
|
return v.val.includes(obj.val)
|
||||||
|
})
|
||||||
|
answer = o ? o.label : null
|
||||||
|
}
|
||||||
|
this.$set(this.questionForm, i.classId, answer)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async resetForm() {
|
||||||
|
const confirm = await this.$confirm(
|
||||||
|
this.$t('trials:dicomReading:message:confirmReset1'),
|
||||||
|
this.$t('trials:dicomReading:message:confirmReset2'),
|
||||||
|
{
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (confirm !== 'confirm') return
|
||||||
|
const loading = this.$loading({ fullscreen: true })
|
||||||
|
try {
|
||||||
|
const res = await resetReadingTask({ visitTaskId: this.visitTaskId })
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.rerender = false
|
||||||
|
await this.getQuestionCalculateRelation()
|
||||||
|
await this.getQuestions()
|
||||||
|
this.$emit('resetAnnotations', this.visitTaskId)
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
this.rerender = true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
loading.close()
|
||||||
|
} catch (e) {
|
||||||
|
loading.close()
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.questionList-wrapper{
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
.container{
|
||||||
|
padding: 10px;
|
||||||
|
.basic-info{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
h3{
|
||||||
|
color: #ddd;
|
||||||
|
padding: 5px 0px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
i{
|
||||||
|
color: #fff;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ecrf-form{
|
||||||
|
::v-deep .el-form-item__label{
|
||||||
|
color: #ddd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::v-deep .el-table,
|
||||||
|
.el-table__expanded-cell {
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
border-color: #444444;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-table th,
|
||||||
|
.el-table tr {
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
border-color: #444444;
|
||||||
|
}
|
||||||
|
::v-deep .el-table__body tr > td {
|
||||||
|
background-color: #000 !important;
|
||||||
|
color: #fff;
|
||||||
|
border-color: #444444;
|
||||||
|
}
|
||||||
|
::v-deep .el-table__body tr:hover > td {
|
||||||
|
background-color: #858282 !important;
|
||||||
|
color: #fff;
|
||||||
|
border-color: #444444;
|
||||||
|
}
|
||||||
|
::v-deep .el-table--border th.gutter:last-of-type {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
::v-deep .el-dialog{
|
||||||
|
background: #1e1e1e;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
color: #ddd;
|
||||||
|
.el-dialog__title{
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
|
.el-input .el-input__inner{
|
||||||
|
background-color: transparent;
|
||||||
|
color: #ddd;
|
||||||
|
border: 1px solid #5e5e5e;
|
||||||
|
}
|
||||||
|
.el-input.is-disabled .el-input__inner{
|
||||||
|
background-color: #646464a1;
|
||||||
|
}
|
||||||
|
.el-form-item__label{
|
||||||
|
color: #dfdfdf
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// .ecrf-list-container{
|
||||||
|
// min-height:400px;
|
||||||
|
// color: #ddd;
|
||||||
|
|
||||||
|
// }
|
||||||
|
</style>
|
|
@ -0,0 +1,852 @@
|
||||||
|
<template>
|
||||||
|
<div class="report-wrapper">
|
||||||
|
<el-card v-loading="loading" shadow="never" style="display:flex;flex-direction: column;">
|
||||||
|
<div slot="header" class="clearfix report-header">
|
||||||
|
<h3 style="margin:0;padding:0;">{{ $t('trials:readingReport:title:eicrf') }}</h3>
|
||||||
|
<div style="margin-left:auto">
|
||||||
|
<el-button
|
||||||
|
v-if="readingTaskState<2"
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
@click="skipTask"
|
||||||
|
>
|
||||||
|
<!-- 跳过 -->
|
||||||
|
{{ $t('trials:readingReport:button:skip') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="getReportInfo">{{ $t('trials:readingReport:button:refresh') }}</el-button>
|
||||||
|
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleSave(true)">{{ $t('common:button:save') }}</el-button>
|
||||||
|
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleConfirm">{{ $t('common:button:submit') }}</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="flex: 1">
|
||||||
|
<el-table
|
||||||
|
v-if="taskQuestions.length > 0"
|
||||||
|
ref="reportList"
|
||||||
|
v-adaptive="{bottomOffset:0}"
|
||||||
|
:data="taskQuestions"
|
||||||
|
row-key="Id"
|
||||||
|
border
|
||||||
|
default-expand-all
|
||||||
|
height="100"
|
||||||
|
:tree-props="{children: 'Childrens', hasChildren: 'hasChildren'}"
|
||||||
|
size="mini"
|
||||||
|
>
|
||||||
|
<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>
|
||||||
|
<span
|
||||||
|
v-else
|
||||||
|
style="font-weight: bold;font-size: 16px;color: #f44336;"
|
||||||
|
>
|
||||||
|
{{ scope.row.GroupName }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
v-for="task in visitTaskList"
|
||||||
|
:key="task.VisitTaskId"
|
||||||
|
prop="date"
|
||||||
|
show-overflow-tooltip
|
||||||
|
width="200px"
|
||||||
|
>
|
||||||
|
<template slot="header">
|
||||||
|
<div v-if="task.IsCurrentTask">
|
||||||
|
{{ task.BlindName }}
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<div>
|
||||||
|
{{ task.BlindName }}
|
||||||
|
<el-button type="text" size="small" @click="previewDicoms(task)">
|
||||||
|
<span class="el-icon-view" />
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<template v-if="readingTaskState<2 && task.VisitTaskId === visitTaskId && (scope.row.Type==='input' || scope.row.Type==='number' || scope.row.Type==='select' || scope.row.Type==='textarea' || scope.row.Type==='radio')">
|
||||||
|
<!-- 输入框 -->
|
||||||
|
<div>
|
||||||
|
<template v-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" />
|
||||||
|
<el-input
|
||||||
|
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type==='input' || scope.row.Type==='textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
|
||||||
|
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
|
||||||
|
size="mini"
|
||||||
|
/>
|
||||||
|
<span v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type==='input' || scope.row.Type==='textarea')">
|
||||||
|
{{ questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}
|
||||||
|
</span>
|
||||||
|
<el-input
|
||||||
|
v-else-if="(scope.row.Type==='input' || scope.row.Type==='textarea') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
|
||||||
|
v-model="questionForm[scope.row.QuestionId]"
|
||||||
|
size="mini"
|
||||||
|
/>
|
||||||
|
<span v-else-if="scope.row.Type==='input' || scope.row.Type==='textarea'">
|
||||||
|
{{ questionForm[scope.row.QuestionId] }}
|
||||||
|
</span>
|
||||||
|
<el-select
|
||||||
|
v-else-if="questionForm[scope.row.QuestionId] instanceof Array && (scope.row.Type==='select' || scope.row.Type==='radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
|
||||||
|
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
|
||||||
|
size="mini"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<template>
|
||||||
|
<el-option
|
||||||
|
v-for="val in scope.row.TypeValue.split('|')"
|
||||||
|
:key="val"
|
||||||
|
:label="val"
|
||||||
|
:value="val"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-select>
|
||||||
|
<span v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='select'">
|
||||||
|
{{ questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId] }}
|
||||||
|
</span>
|
||||||
|
<el-select
|
||||||
|
v-else-if="(scope.row.Type==='select' || scope.row.Type==='radio') && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
|
||||||
|
v-model="questionForm[scope.row.QuestionId]"
|
||||||
|
size="mini"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<template>
|
||||||
|
<el-option
|
||||||
|
v-for="val in scope.row.TypeValue.split('|')"
|
||||||
|
:key="val"
|
||||||
|
:label="val"
|
||||||
|
:value="val"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-select>
|
||||||
|
<span v-else-if="scope.row.Type==='select' || scope.row.Type==='radio'">
|
||||||
|
{{ questionForm[scope.row.QuestionId] }}
|
||||||
|
</span>
|
||||||
|
<el-input
|
||||||
|
v-else-if="scope.row.DataSource !== 1 && questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='number' && (scope.row.xfIndex || scope.row.xfIndex === 0) && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
|
||||||
|
v-model="questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]"
|
||||||
|
:disabled="scope.row.DataSource === 1"
|
||||||
|
size="mini"
|
||||||
|
@blur="limitBlur(questionForm[scope.row.QuestionId][scope.row.xfIndex], scope.row.TableQuestionId, scope.row.ValueType)"
|
||||||
|
@focus="() => {questionId = scope.row.QuestionId}"
|
||||||
|
>
|
||||||
|
<template v-if="scope.row.Unit !== 0" slot="append">{{ scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit }}</template>
|
||||||
|
<template v-else-if="scope.row.ValueType === 2" slot="append">%</template>
|
||||||
|
</el-input>
|
||||||
|
<span v-else-if="questionForm[scope.row.QuestionId] instanceof Array && scope.row.Type==='number' && (scope.row.xfIndex || scope.row.xfIndex === 0)">
|
||||||
|
<template v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
|
||||||
|
{{ isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))? questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]:`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="scope.row.ValueType === 2">
|
||||||
|
{{ isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) ? questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]:`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} %` }}
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) ? questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]:`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}` }}
|
||||||
|
</template>
|
||||||
|
</span>
|
||||||
|
<el-input
|
||||||
|
v-else-if="scope.row.DataSource !== 1 && scope.row.Type==='number' && !scope.row.IsShowInDicom && ((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)"
|
||||||
|
v-model="questionForm[scope.row.QuestionId]"
|
||||||
|
:disabled="scope.row.DataSource === 1"
|
||||||
|
size="mini"
|
||||||
|
@blur="limitBlur(questionForm, scope.row.QuestionId, scope.row.ValueType)"
|
||||||
|
@focus="() => {questionId = scope.row.QuestionId}"
|
||||||
|
>
|
||||||
|
<template v-if="scope.row.Unit !== 0" slot="append">{{ scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit }}</template>
|
||||||
|
<template v-else-if="scope.row.ValueType === 2" slot="append">%</template>
|
||||||
|
</el-input>
|
||||||
|
<span v-else-if="scope.row.Type==='number'">
|
||||||
|
<template v-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
|
||||||
|
{{ isNaN(parseInt(questionForm[scope.row.QuestionId]))? questionForm[scope.row.QuestionId]:`${questionForm[scope.row.QuestionId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="scope.row.ValueType === 2">
|
||||||
|
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId]:`${questionForm[scope.row.QuestionId]} %` }}
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId] : questionForm[scope.row.QuestionId] }}
|
||||||
|
</template>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="scope.row.Type==='upload' && scope.row.Answers[task.VisitTaskId]">
|
||||||
|
<span v-for="(url,index) in scope.row.Answers[task.VisitTaskId].split('|')" :key="url" style="margin-left: 5px;">
|
||||||
|
<el-button v-if="scope.row.Answers[task.VisitTaskId]" type="text" @click="preview(url)">
|
||||||
|
{{ `${$t('trials:noneDicom:title:attachment')}${index + 1}` }}
|
||||||
|
</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="scope.row.DictionaryCode">
|
||||||
|
{{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="criterionType === 10">
|
||||||
|
{{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]}` }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="!((task.IsBaseLine && scope.row.LimitEdit === 1) || (!task.IsBaseLine && scope.row.LimitEdit === 2) || scope.row.LimitEdit === 0)" />
|
||||||
|
<template v-else-if="(scope.row.ValueType === 0 || scope.row.ValueType === 1) && scope.row.Unit">
|
||||||
|
{{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="scope.row.ValueType === 2">
|
||||||
|
{{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]} %` }}
|
||||||
|
</template>
|
||||||
|
<template v-else-if="scope.row.Answers && scope.row.Answers.hasOwnProperty(task.VisitTaskId)">
|
||||||
|
{{ scope.row.Answers[task.VisitTaskId] }}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<!-- 签名框 -->
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 预览文件 -->
|
||||||
|
<el-dialog
|
||||||
|
v-if="previewVisible"
|
||||||
|
:visible.sync="previewVisible"
|
||||||
|
:title="$t('common:button:preview')"
|
||||||
|
:fullscreen="true"
|
||||||
|
append-to-body
|
||||||
|
custom-class="base-dialog-wrapper"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="base-modal-body"
|
||||||
|
style="border: 2px solid #ccc; padding: 10px"
|
||||||
|
>
|
||||||
|
<PreviewFile
|
||||||
|
v-if="previewVisible"
|
||||||
|
:file-path="currentPath"
|
||||||
|
:file-type="currentType"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { changeCalculationAnswer, getReadingReportEvaluation, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
|
||||||
|
import { setSkipReadingCache } from '@/api/reading'
|
||||||
|
import { getAutoCutNextTask } from '@/api/user'
|
||||||
|
import const_ from '@/const/sign-code'
|
||||||
|
import SignForm from '@/views/trials/components/newSignForm'
|
||||||
|
import PreviewFile from '@/components/PreviewFile/index'
|
||||||
|
import { getToken } from '@/utils/auth'
|
||||||
|
import store from '@/store'
|
||||||
|
export default {
|
||||||
|
name: 'CustomizeReportPage',
|
||||||
|
components: { SignForm, PreviewFile },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
trialId: '',
|
||||||
|
visitTaskId: '',
|
||||||
|
subjectId: '',
|
||||||
|
readingTool: 1,
|
||||||
|
criterionType: null,
|
||||||
|
isReadingTaskViewInOrder: false,
|
||||||
|
currentUser: zzSessionStorage.getItem('userName'),
|
||||||
|
signVisible: false,
|
||||||
|
signCode: null,
|
||||||
|
visitTaskList: [],
|
||||||
|
taskQuestions: [],
|
||||||
|
loading: false,
|
||||||
|
answers: [],
|
||||||
|
readingTaskState: 2,
|
||||||
|
answerArr: [],
|
||||||
|
questions: [],
|
||||||
|
CalculationList: [],
|
||||||
|
TrialReadingCriterionId: null,
|
||||||
|
tableAnswers: {},
|
||||||
|
questionForm: {},
|
||||||
|
questionId: null,
|
||||||
|
taskInfo: null,
|
||||||
|
previewVisible: false,
|
||||||
|
currentPath: '',
|
||||||
|
currentType: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
questionForm: {
|
||||||
|
deep: true,
|
||||||
|
immediate: true,
|
||||||
|
handler(v, oldv) {
|
||||||
|
try {
|
||||||
|
if (!v[this.questionId] || !oldv[this.questionId]) return
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
this.formItemNumberChange(this.questionId, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
this.taskInfo = JSON.parse(localStorage.getItem('taskInfo'))
|
||||||
|
this.trialId = this.$route.query.trialId
|
||||||
|
this.visitTaskId = this.taskInfo.VisitTaskId
|
||||||
|
this.subjectId = this.taskInfo.SubjectId
|
||||||
|
this.criterionType = this.taskInfo.CriterionType
|
||||||
|
var digitPlaces = Number(localStorage.getItem('digitPlaces'))
|
||||||
|
this.digitPlaces = digitPlaces === -1 ? this.digitPlaces : digitPlaces
|
||||||
|
this.TrialReadingCriterionId = this.taskInfo.TrialReadingCriterionId
|
||||||
|
window.addEventListener('resize', () => {
|
||||||
|
this.handleResize()
|
||||||
|
})
|
||||||
|
await this.getQuestionCalculateRelation()
|
||||||
|
this.getReportInfo()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
limitBlur(questionForm, id, valueType) {
|
||||||
|
const value = questionForm[id]
|
||||||
|
if (valueType === 0) {
|
||||||
|
this.$set(questionForm, id, parseInt(value))
|
||||||
|
} else if (valueType === 3) {
|
||||||
|
this.$set(questionForm, id, parseFloat(value))
|
||||||
|
} else {
|
||||||
|
this.$set(questionForm, id, parseFloat(value).toFixed(this.digitPlaces))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setImageUrl(qid, index, tqid, url, RowId) {
|
||||||
|
if (index || index === 0) {
|
||||||
|
// 表格问题
|
||||||
|
this.$set(this.questionForm[qid][index], tqid, url)
|
||||||
|
this.$set(this.questionForm[qid][index], tqid + '_RowId', RowId)
|
||||||
|
// this.questionForm[qid][index][tqid] = url
|
||||||
|
} else {
|
||||||
|
// 非表格问题
|
||||||
|
this.questionForm[qid] = url
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getTagterAnswers(list, questionId) {
|
||||||
|
list.forEach(v => {
|
||||||
|
if (v.QuestionId === questionId) {
|
||||||
|
return Object.assign({}, v.Answers)
|
||||||
|
} else if (v.Childrens.length > 0) {
|
||||||
|
return this.getTagterAnswers(v.Childrens, questionId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
formItemNumberChange(questionId, isTable) {
|
||||||
|
if (isTable) {
|
||||||
|
this.CalculationList.forEach((v, i) => {
|
||||||
|
var find = v.CalculateQuestionList.filter(o => {
|
||||||
|
return o.QuestionId === questionId
|
||||||
|
})
|
||||||
|
// find的自动计算值number
|
||||||
|
if (find) {
|
||||||
|
var num = this.logic(v)
|
||||||
|
if (num !== false) {
|
||||||
|
this.$set(this.questionForm, v.QuestionId, num)
|
||||||
|
// this.$emit('setFormItemData', { key: v.QuestionId, val: num })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.CalculationList.forEach(v => {
|
||||||
|
var find = v.CalculateQuestionList.filter(o => {
|
||||||
|
return o.TableQuestionId === questionId
|
||||||
|
})
|
||||||
|
// find的自动计算值number
|
||||||
|
if (find) {
|
||||||
|
var num = this.logic(v)
|
||||||
|
if (num !== false) {
|
||||||
|
this.$set(this.questionForm, v.QuestionId, num)
|
||||||
|
// this.$emit('setFormItemData', { key: v.QuestionId, val: num })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// this.$emit('formItemNumberChange')
|
||||||
|
},
|
||||||
|
getTableAnswers(QuestionId, list) {
|
||||||
|
var arr = []
|
||||||
|
window.xfList = list
|
||||||
|
list.forEach((v, i) => {
|
||||||
|
var obj = {}
|
||||||
|
v.Childrens.forEach((o) => {
|
||||||
|
this.$set(o, 'xfIndex', i)
|
||||||
|
obj[o.TableQuestionId + '_RowId'] = o.RowId
|
||||||
|
obj[o.TableQuestionId] = o.Answers[this.visitTaskId]
|
||||||
|
})
|
||||||
|
arr.push(obj)
|
||||||
|
})
|
||||||
|
return arr
|
||||||
|
},
|
||||||
|
InitVisitTaskQuestionForm() {
|
||||||
|
this.taskQuestions.map((v, i) => {
|
||||||
|
if (v.Type === 'group' && v.Childrens.length === 0 && v.Type !== 'table' && v.Type !== 'basicTable') return
|
||||||
|
if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary' && v.Type !== 'table' && v.Type !== 'basicTable' && v.Type !== 'number') {
|
||||||
|
this.$set(this.questionForm, v.QuestionId, v.Answers[this.visitTaskId])
|
||||||
|
}
|
||||||
|
if (v.Type === 'table' || v.Type === 'basicTable') {
|
||||||
|
var tableAnswers = this.getTableAnswers(v.QuestionId, v.Childrens, i)
|
||||||
|
this.$set(this.questionForm, v.QuestionId, tableAnswers)
|
||||||
|
// this.$set(v, 'xfIndex', i)
|
||||||
|
}
|
||||||
|
if (v.Type === 'number') {
|
||||||
|
let val = null
|
||||||
|
if (v.ValueType === 0) {
|
||||||
|
val = parseInt(v.Answers[this.visitTaskId])
|
||||||
|
} else if (v.ValueType === 3) {
|
||||||
|
val = v.Answers[this.visitTaskId]
|
||||||
|
} else {
|
||||||
|
val = v.Answers[this.visitTaskId] === '' ? parseFloat(0).toFixed(this.digitPlaces) : v.Answers[this.visitTaskId]
|
||||||
|
}
|
||||||
|
this.$set(this.questionForm, v.QuestionId, val)
|
||||||
|
}
|
||||||
|
if (v.Childrens.length > 0) {
|
||||||
|
this.setChild(v.Childrens)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.formItemNumberChange(this.questionId, false)
|
||||||
|
},
|
||||||
|
setChild(obj) {
|
||||||
|
obj.forEach((i, index) => {
|
||||||
|
if (i.Type !== 'group' && i.Type !== 'summary' && i.Id && i.Type !== 'table' && i.Type !== 'basicTable') {
|
||||||
|
this.$set(this.questionForm, i.QuestionId, i.Answers[this.visitTaskId])
|
||||||
|
}
|
||||||
|
if (i.Type === 'table' || i.Type === 'basicTable') {
|
||||||
|
var tableAnswers = this.getTableAnswers(i.QuestionId, i.Childrens, index)
|
||||||
|
this.$set(this.questionForm, i.QuestionId, tableAnswers)
|
||||||
|
}
|
||||||
|
if (i.Type === 'number') {
|
||||||
|
let val = null
|
||||||
|
if (i.ValueType === 0) {
|
||||||
|
val = parseInt(i.Answers[this.visitTaskId])
|
||||||
|
} else if (i.ValueType === 3) {
|
||||||
|
val = i.Answers[this.visitTaskId]
|
||||||
|
} else {
|
||||||
|
val = i.Answers[this.visitTaskId] === '' ? parseFloat(0).toFixed(this.digitPlaces) : i.Answers[this.visitTaskId]
|
||||||
|
}
|
||||||
|
this.$set(this.questionForm, i.QuestionId, val)
|
||||||
|
}
|
||||||
|
if (i.Childrens && i.Childrens.length > 0 && i.Type !== 'table' && i.Type !== 'basicTable') {
|
||||||
|
this.setChild(i.Childrens)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getQuestionCalculateRelation() {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
getQuestionCalculateRelation({
|
||||||
|
TrialReadingCriterionId: this.TrialReadingCriterionId
|
||||||
|
}).then(res => {
|
||||||
|
this.CalculationList = res.Result
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
logic(rules, num = 0) {
|
||||||
|
try {
|
||||||
|
if (rules.CalculateQuestionList.length === 0) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
rules.CalculateQuestionList.forEach((o, i) => {
|
||||||
|
if (i === 0) {
|
||||||
|
if (rules.CustomCalculateMark > 4) {
|
||||||
|
switch (rules.CustomCalculateMark) {
|
||||||
|
case 5:
|
||||||
|
this.questionForm[o.QuestionId].forEach((q, qi) => {
|
||||||
|
if (qi === 0) {
|
||||||
|
num = parseFloat(q[o.TableQuestionId])
|
||||||
|
} else {
|
||||||
|
num *= parseFloat(q[o.TableQuestionId])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 6:
|
||||||
|
this.questionForm[o.QuestionId].forEach((q, qi) => {
|
||||||
|
if (qi === 0) {
|
||||||
|
num = isNaN(parseFloat(q[o.TableQuestionId])) ? null : parseFloat(q[o.TableQuestionId])
|
||||||
|
} else {
|
||||||
|
num += isNaN(parseFloat(q[o.TableQuestionId])) ? null : parseFloat(q[o.TableQuestionId])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break
|
||||||
|
case 7:
|
||||||
|
this.questionForm[o.QuestionId].forEach((q, qi) => {
|
||||||
|
if (qi === 0) {
|
||||||
|
num = parseFloat(q[o.TableQuestionId])
|
||||||
|
} else {
|
||||||
|
num += parseFloat(q[o.TableQuestionId])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
num = this.questionForm[o.QuestionId].length === 0 ? 0 : num / this.questionForm[o.QuestionId].length
|
||||||
|
break
|
||||||
|
case 8:
|
||||||
|
const arr = []
|
||||||
|
this.questionForm[o.QuestionId].forEach(q => {
|
||||||
|
arr.push(q[o.TableQuestionId])
|
||||||
|
})
|
||||||
|
num = arr.length === 0 ? 0 : Math.max(...arr)
|
||||||
|
break
|
||||||
|
case 9:
|
||||||
|
const arr1 = []
|
||||||
|
this.questionForm[o.QuestionId].forEach(q => {
|
||||||
|
arr1.push(q[o.TableQuestionId])
|
||||||
|
})
|
||||||
|
num = arr1.length === 0 ? 0 : Math.min(...arr1)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
num = parseFloat(this.questionForm[o.TableQuestionId])
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (rules.CustomCalculateMark) {
|
||||||
|
case 1:
|
||||||
|
num += parseFloat(this.questionForm[o.TableQuestionId])
|
||||||
|
break
|
||||||
|
case 2:
|
||||||
|
num -= parseFloat(this.questionForm[o.TableQuestionId])
|
||||||
|
break
|
||||||
|
case 3:
|
||||||
|
num *= parseFloat(this.questionForm[o.TableQuestionId])
|
||||||
|
break
|
||||||
|
case 4:
|
||||||
|
num /= parseFloat(this.questionForm[o.TableQuestionId])
|
||||||
|
// num /= parseFloat(this.questionForm[o.TableQuestionId])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
if (rules.ValueType === 2) {
|
||||||
|
num = num * 100
|
||||||
|
}
|
||||||
|
return isNaN(num) ? '' : isFinite(num) ? num.toFixed(this.digitPlaces) : '∞'
|
||||||
|
},
|
||||||
|
getReportInfo() {
|
||||||
|
this.loading = true
|
||||||
|
var params = {
|
||||||
|
visitTaskId: this.visitTaskId,
|
||||||
|
trialId: this.trialId
|
||||||
|
}
|
||||||
|
this.taskQuestions = []
|
||||||
|
getReadingReportEvaluation(params).then(res => {
|
||||||
|
this.readingTaskState = res.Result.ReadingTaskState
|
||||||
|
this.answerArr = []
|
||||||
|
this.questions = res.Result.TaskQuestions.concat()
|
||||||
|
var taskQuestions = this.getQuestions(res.Result.TaskQuestions)
|
||||||
|
taskQuestions.forEach(item => {
|
||||||
|
this.$set(this.taskQuestions, this.taskQuestions.length, item)
|
||||||
|
})
|
||||||
|
this.visitTaskList = res.Result.VisitTaskList
|
||||||
|
this.InitVisitTaskQuestionForm()
|
||||||
|
this.handleResize()
|
||||||
|
this.loading = false
|
||||||
|
}).catch(() => { this.loading = false })
|
||||||
|
},
|
||||||
|
getQuestions(questions) {
|
||||||
|
const arr = []
|
||||||
|
if (questions.length !== 0) {
|
||||||
|
questions.forEach((item) => {
|
||||||
|
const obj = item
|
||||||
|
this.$set(obj, 'Answers', {})
|
||||||
|
item.Answer.forEach(i => {
|
||||||
|
if (item.DictionaryCode) {
|
||||||
|
this.$set(obj.Answers, i.VisitTaskId, i.Answer ? parseInt(i.Answer) : null)
|
||||||
|
// obj.Answers[i.VisitTaskId] = i.Answer ? parseInt(i.Answer) : null
|
||||||
|
} else {
|
||||||
|
if (item.Type === 'number') {
|
||||||
|
let val = null
|
||||||
|
if (item.ValueType === 0) {
|
||||||
|
val = parseInt(i.Answer)
|
||||||
|
} else if (item.ValueType === 3) {
|
||||||
|
val = i.Answer
|
||||||
|
} else {
|
||||||
|
val = isNaN(parseFloat(i.Answer)) ? i.Answer : parseFloat(i.Answer).toFixed(this.digitPlaces)
|
||||||
|
}
|
||||||
|
this.$set(obj.Answers, i.VisitTaskId, val)
|
||||||
|
} else {
|
||||||
|
this.$set(obj.Answers, i.VisitTaskId, i.Answer)
|
||||||
|
}
|
||||||
|
// obj.Answers[i.VisitTaskId] = i.Answer
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (item.Childrens.length >= 1) {
|
||||||
|
obj.Childrens = this.getQuestions(item.Childrens)
|
||||||
|
}
|
||||||
|
arr.push(obj)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
},
|
||||||
|
handleShowDetail(val) {
|
||||||
|
this.getReportInfo()
|
||||||
|
// this.taskQuestions = this.getQuestions(res.Result.TaskQuestions, !this.isShowDetail, null)
|
||||||
|
},
|
||||||
|
async handleConfirm() {
|
||||||
|
await this.handleSave(false)
|
||||||
|
await this.verifyVisitTaskQuestions()
|
||||||
|
const { ImageAssessmentReportConfirmation } = const_.processSignature
|
||||||
|
this.signCode = ImageAssessmentReportConfirmation
|
||||||
|
this.signVisible = true
|
||||||
|
},
|
||||||
|
verifyVisitTaskQuestions() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.loading = true
|
||||||
|
verifyVisitTaskQuestions({ visitTaskId: this.visitTaskId }).then(res => {
|
||||||
|
this.loading = false
|
||||||
|
resolve()
|
||||||
|
}).catch(() => {
|
||||||
|
this.loading = false
|
||||||
|
reject()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleResize() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.reportList ? this.$refs.reportList.doLayout() : ''
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 关闭签名框
|
||||||
|
closeSignDialog(isSign, signInfo) {
|
||||||
|
if (isSign) {
|
||||||
|
this.signConfirm(signInfo)
|
||||||
|
} else {
|
||||||
|
this.signVisible = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 签名并确认
|
||||||
|
async signConfirm(signInfo) {
|
||||||
|
this.loading = true
|
||||||
|
try {
|
||||||
|
var params = {
|
||||||
|
data: {
|
||||||
|
visitTaskId: this.visitTaskId
|
||||||
|
},
|
||||||
|
signInfo: signInfo
|
||||||
|
}
|
||||||
|
const res = await submitDicomVisitTask(params)
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
|
if (this.$refs['signForm']) {
|
||||||
|
this.$refs['signForm'].btnLoading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
this.signVisible = false
|
||||||
|
|
||||||
|
// 设置当前任务阅片状态为已读
|
||||||
|
this.readingTaskState = 2
|
||||||
|
this.$emit('setReadingTaskState', 2)
|
||||||
|
window.opener.postMessage('refreshTaskList', window.location)
|
||||||
|
const res = await getAutoCutNextTask()
|
||||||
|
const isAutoTask = res.Result.AutoCutNextTask
|
||||||
|
if (isAutoTask) {
|
||||||
|
window.location.reload()
|
||||||
|
} else {
|
||||||
|
// '当前阅片任务已完成,是否进入下一个阅片任务?'
|
||||||
|
this.$confirm(this.$t('trials:readingReport:message:msg4'), {
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
window.location.reload()
|
||||||
|
})
|
||||||
|
.catch(action => {
|
||||||
|
// changeURLStatic('visitTaskId', this.visitTaskId)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.loading = false
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
this.loading = false
|
||||||
|
if (this.$refs['signForm'] && this.$refs['signForm'].btnLoading) {
|
||||||
|
this.$refs['signForm'].btnLoading = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
previewDicoms(task) {
|
||||||
|
var token = getToken()
|
||||||
|
// var subjectCode = this.$router.currentRoute.query.subjectCode
|
||||||
|
var subjectCode = localStorage.getItem('subjectCode')
|
||||||
|
var subjectId = this.subjectId
|
||||||
|
var trialId = this.trialId
|
||||||
|
var isReadingTaskViewInOrder = this.isReadingTaskViewInOrder
|
||||||
|
var criterionType = this.criterionType
|
||||||
|
var readingTool = this.readingTool
|
||||||
|
var trialReadingCriterionId = this.$router.currentRoute.query.TrialReadingCriterionId
|
||||||
|
var path = `/noneDicomReading?TrialReadingCriterionId=${trialReadingCriterionId}&trialId=${trialId}&subjectCode=${subjectCode}&subjectId=${subjectId}&visitTaskId=${task.VisitTaskId}&isReadingTaskViewInOrder=${isReadingTaskViewInOrder}&criterionType=${criterionType}&readingTool=${readingTool}&TokenKey=${token}`
|
||||||
|
const routeData = this.$router.resolve({ path })
|
||||||
|
window.open(routeData.href, '_blank')
|
||||||
|
},
|
||||||
|
handleSave(isPrompt) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.loading = true
|
||||||
|
var answers = []
|
||||||
|
var tableQuestionAnswer = []
|
||||||
|
for (const k in this.questionForm) {
|
||||||
|
if (this.questionForm[k] instanceof Array) {
|
||||||
|
this.questionForm[k].forEach((v, i) => {
|
||||||
|
Object.keys(v).forEach(o => {
|
||||||
|
if (o.indexOf('_RowId') === -1) {
|
||||||
|
tableQuestionAnswer.push({
|
||||||
|
questionId: k,
|
||||||
|
answer: v[o],
|
||||||
|
tableQuestionId: o,
|
||||||
|
rowId: v[o + '_RowId']
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
// tableQuestionAnswer.push({})
|
||||||
|
} else {
|
||||||
|
answers.push({ questionId: k, answer: this.questionForm[k].toString() })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var params = {
|
||||||
|
visitTaskId: this.visitTaskId,
|
||||||
|
questionAnswer: answers,
|
||||||
|
tableQuestionAnswer: tableQuestionAnswer
|
||||||
|
}
|
||||||
|
changeCalculationAnswer(params).then(res => {
|
||||||
|
if (isPrompt) {
|
||||||
|
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||||
|
}
|
||||||
|
// DicomEvent.$emit('refreshQuestionAnswer')
|
||||||
|
this.loading = false
|
||||||
|
resolve()
|
||||||
|
}).catch(() => {
|
||||||
|
this.loading = false
|
||||||
|
reject()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async skipTask() {
|
||||||
|
try {
|
||||||
|
// 是否确认跳过?
|
||||||
|
const confirm = await this.$confirm(
|
||||||
|
this.$t('trials:readingReport:message:skipConfirm'),
|
||||||
|
{
|
||||||
|
type: 'warning',
|
||||||
|
distinguishCancelAndClose: true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (confirm !== 'confirm') return
|
||||||
|
this.loading = true
|
||||||
|
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
|
||||||
|
this.loading = false
|
||||||
|
if (res.IsSuccess) {
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.loading = false
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 预览
|
||||||
|
preview(path) {
|
||||||
|
this.currentPath = path
|
||||||
|
const arr = path.split('.')
|
||||||
|
this.currentType = arr[arr.length - 1]
|
||||||
|
this.previewVisible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.report-wrapper{
|
||||||
|
|
||||||
|
height: 100%;
|
||||||
|
// background-color: #fff;
|
||||||
|
background-color: #000;
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 7px;
|
||||||
|
height: 7px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
border-radius: 10px;
|
||||||
|
// background: #d0d0d0;
|
||||||
|
}
|
||||||
|
.report-header{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.el-card{
|
||||||
|
background-color: #000;
|
||||||
|
color: #ffffff;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
::v-deep .el-table--border th.gutter:last-of-type{
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
::v-deep .el-table, .el-table__expanded-cell {
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
border-color:#444444;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-table th, .el-table tr {
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
border-color:#444444;
|
||||||
|
}
|
||||||
|
::v-deep .el-table__body tr > td{
|
||||||
|
background-color:#000 !important;
|
||||||
|
color: #fff;
|
||||||
|
border-color:#444444;
|
||||||
|
}
|
||||||
|
::v-deep .el-table__body tr:hover > td{
|
||||||
|
background-color:#858282 !important;
|
||||||
|
color: #fff;
|
||||||
|
border-color:#444444;
|
||||||
|
}
|
||||||
|
::v-deep .el-table--border th.gutter:last-of-type{
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
::v-deep .el-card__header{
|
||||||
|
border: none;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
::v-deep .el-upload-list--picture-card .el-upload-list__item{
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
::v-deep .el-upload--picture-card{
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
line-height: 40px;
|
||||||
|
}
|
||||||
|
::v-deep .el-dialog{
|
||||||
|
background: #1e1e1e;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
color: #ddd;
|
||||||
|
.el-dialog__title{
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
|
.el-input .el-input__inner{
|
||||||
|
background-color: transparent;
|
||||||
|
color: #ddd;
|
||||||
|
border: 1px solid #5e5e5e;
|
||||||
|
}
|
||||||
|
.el-input.is-disabled .el-input__inner{
|
||||||
|
background-color: #646464a1;
|
||||||
|
}
|
||||||
|
.el-form-item__label{
|
||||||
|
color: #dfdfdf
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::v-deep .el-switch__label{
|
||||||
|
color:#fff;
|
||||||
|
}
|
||||||
|
::v-deep .el-switch__label.is-active{
|
||||||
|
color: #428bca;
|
||||||
|
}
|
||||||
|
.uploadWrapper{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -847,7 +847,6 @@ export default {
|
||||||
// 靶病灶且状态为存在(0)
|
// 靶病灶且状态为存在(0)
|
||||||
if (lesionType === 0 && lesionState === 0) {
|
if (lesionType === 0 && lesionState === 0) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
console.log('靶病灶且状态为存在')
|
|
||||||
// 淋巴结靶病灶 必须使用长短径测量工具,短径大于等于15mm
|
// 淋巴结靶病灶 必须使用长短径测量工具,短径大于等于15mm
|
||||||
if (!(measureData && measureData.markTool === 'Bidirectional' && lesionShort >= 15)) {
|
if (!(measureData && measureData.markTool === 'Bidirectional' && lesionShort >= 15)) {
|
||||||
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记,且短径须大于15mm!
|
// 评估状态为存在的淋巴结靶病灶需使用长短径测量工具添加标记,且短径须大于15mm!
|
||||||
|
@ -888,7 +887,7 @@ export default {
|
||||||
if (lesionType === 1 && lesionState === 0) {
|
if (lesionType === 1 && lesionState === 0) {
|
||||||
if (lymphNodes === 1) {
|
if (lymphNodes === 1) {
|
||||||
// 淋巴结非靶病灶 必须使用长短径测量工具或箭头工具
|
// 淋巴结非靶病灶 必须使用长短径测量工具或箭头工具
|
||||||
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleRo'))) {
|
if (!(measureData && (measureData.markTool === 'Bidirectional' || measureData.markTool === 'RectangleROI'))) {
|
||||||
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记
|
// 评估状态为存在的淋巴结非靶病灶需使用长短径测量工具或矩形工具添加标记
|
||||||
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
this.$confirm(this.$t('trials:reading:warnning:msg21'), {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
|
|
Loading…
Reference in New Issue