自定义标准配置更改及自定义阅片更改
parent
c1f10036b0
commit
d05a4437d4
|
@ -438,6 +438,8 @@
|
||||||
@resetAnnotations="resetAnnotations"
|
@resetAnnotations="resetAnnotations"
|
||||||
@setReadingTaskState="setReadingTaskState"
|
@setReadingTaskState="setReadingTaskState"
|
||||||
@viewCustomAnnotationSeries="viewCustomAnnotationSeries"
|
@viewCustomAnnotationSeries="viewCustomAnnotationSeries"
|
||||||
|
@setReadingToolActive="setReadingToolActive"
|
||||||
|
@setReadingToolPassive="setReadingToolPassive"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -719,7 +721,8 @@ export default {
|
||||||
studyList: [],
|
studyList: [],
|
||||||
volumeData: {},
|
volumeData: {},
|
||||||
fusionSerieId: {},
|
fusionSerieId: {},
|
||||||
loadingText: null
|
loadingText: null,
|
||||||
|
toolNames: ['Length', 'Bidirectional', 'RectangleROI', 'ArrowAnnotate', 'CircleROI', 'Eraser']
|
||||||
// resetAnnotation: false , // 是否初始化标记 (融合时使用)
|
// resetAnnotation: false , // 是否初始化标记 (融合时使用)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1160,7 +1163,7 @@ export default {
|
||||||
})
|
})
|
||||||
toolGroup.addTool(RectangleROITool.toolName, {
|
toolGroup.addTool(RectangleROITool.toolName, {
|
||||||
cachedStats: false,
|
cachedStats: false,
|
||||||
getTextLines: this.getRectangleROIToolTextLines
|
getTextLines: this.criterionType === 0 ? this.getCustomRectangleROIToolTextLines : this.getRectangleROIToolTextLines
|
||||||
})
|
})
|
||||||
toolGroup.addTool(PlanarFreehandROITool.toolName, {
|
toolGroup.addTool(PlanarFreehandROITool.toolName, {
|
||||||
allowOpenContours: false,
|
allowOpenContours: false,
|
||||||
|
@ -1685,7 +1688,7 @@ export default {
|
||||||
} = cachedVolumeStats || {}
|
} = cachedVolumeStats || {}
|
||||||
|
|
||||||
const textLines = []
|
const textLines = []
|
||||||
|
|
||||||
if (area) {
|
if (area) {
|
||||||
const areaLine = isEmptyArea
|
const areaLine = isEmptyArea
|
||||||
? `Area: Oblique not supported`
|
? `Area: Oblique not supported`
|
||||||
|
@ -1728,11 +1731,23 @@ export default {
|
||||||
if (data.label) {
|
if (data.label) {
|
||||||
textLines.push(data.status ? `${data.label}(${data.status})` : data.label)
|
textLines.push(data.status ? `${data.label}(${data.status})` : data.label)
|
||||||
}
|
}
|
||||||
// textLines.push(`Area: ${parseFloat(area).toFixed(this.digitPlaces)} ${areaUnit}`)
|
|
||||||
|
|
||||||
// textLines.push(`Mean: ${csUtils.roundNumber(mean)} ${modalityUnit}`)
|
return textLines
|
||||||
// textLines.push(`Max: ${csUtils.roundNumber(max)} ${modalityUnit}`)
|
},
|
||||||
// textLines.push(`Std Dev: ${csUtils.roundNumber(stdDev)} ${modalityUnit}`)
|
getCustomRectangleROIToolTextLines(data, targetId) {
|
||||||
|
const cachedVolumeStats = data.cachedStats[targetId]
|
||||||
|
const { area, mean, max, stdDev, areaUnit, modalityUnit } = cachedVolumeStats
|
||||||
|
|
||||||
|
if (mean === undefined) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const textLines = []
|
||||||
|
textLines.push(`Area: ${this.reRound(area, this.digitPlaces)} ${areaUnit}`)
|
||||||
|
|
||||||
|
textLines.push(`Mean: ${this.reRound(mean, this.digitPlaces)} ${modalityUnit}`)
|
||||||
|
textLines.push(`Max: ${this.reRound(max, this.digitPlaces)} ${modalityUnit}`)
|
||||||
|
textLines.push(`Std Dev: ${this.reRound(stdDev, this.digitPlaces)} ${modalityUnit}`)
|
||||||
|
|
||||||
return textLines
|
return textLines
|
||||||
},
|
},
|
||||||
|
@ -1751,12 +1766,10 @@ export default {
|
||||||
if (length === undefined) {
|
if (length === undefined) {
|
||||||
return textLines
|
return textLines
|
||||||
}
|
}
|
||||||
|
|
||||||
// spaceBetweenSlices & pixelSpacing &
|
|
||||||
// magnitude in each direction? Otherwise, this is "px"?
|
|
||||||
textLines.push(
|
textLines.push(
|
||||||
`L: ${csUtils.roundNumber(length)} ${unit || unit}`,
|
`L: ${parseFloat(length).toFixed(this.digitPlaces)} ${unit || unit}`,
|
||||||
`S: ${csUtils.roundNumber(width)} ${unit}`
|
`S: ${parseFloat(width).toFixed(this.digitPlaces)} ${unit}`
|
||||||
)
|
)
|
||||||
|
|
||||||
return textLines
|
return textLines
|
||||||
|
@ -1783,31 +1796,48 @@ export default {
|
||||||
if (radius) {
|
if (radius) {
|
||||||
const radiusLine = isEmptyArea
|
const radiusLine = isEmptyArea
|
||||||
? `Radius: Oblique not supported`
|
? `Radius: Oblique not supported`
|
||||||
: `Radius: ${csUtils.roundNumber(radius)} ${radiusUnit}`
|
: `Radius: ${this.reRound(radius, this.digitPlaces)} ${radiusUnit}`
|
||||||
textLines.push(radiusLine)
|
textLines.push(radiusLine)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (area) {
|
if (area) {
|
||||||
const areaLine = isEmptyArea
|
const areaLine = isEmptyArea
|
||||||
? `Area: Oblique not supported`
|
? `Area: Oblique not supported`
|
||||||
: `Area: ${csUtils.roundNumber(area)} ${areaUnit}`
|
: `Area: ${parseFloat(area)} ${areaUnit}`
|
||||||
textLines.push(areaLine)
|
textLines.push(areaLine)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mean) {
|
if (mean) {
|
||||||
textLines.push(`Mean: ${csUtils.roundNumber(mean)} ${modalityUnit}`)
|
textLines.push(`Mean: ${this.reRound(mean, this.digitPlaces)} ${modalityUnit}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max) {
|
if (max) {
|
||||||
textLines.push(`Max: ${csUtils.roundNumber(max)} ${modalityUnit}`)
|
textLines.push(`Max: ${this.reRound(max, this.digitPlaces)} ${modalityUnit}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stdDev) {
|
if (stdDev) {
|
||||||
textLines.push(`Std Dev: ${csUtils.roundNumber(stdDev)} ${modalityUnit}`)
|
textLines.push(`Std Dev: ${this.reRound(stdDev, this.digitPlaces)} ${modalityUnit}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
return textLines
|
return textLines
|
||||||
},
|
},
|
||||||
|
reRound(result, finalPrecision) {
|
||||||
|
if (result.includes(', ')) {
|
||||||
|
const numStrs = result.split(', ')
|
||||||
|
const processed = numStrs.map(str => this.processSingle(str, finalPrecision))
|
||||||
|
return processed.join(', ')
|
||||||
|
}
|
||||||
|
return this.processSingle(result, finalPrecision)
|
||||||
|
},
|
||||||
|
processSingle(str, precision) {
|
||||||
|
const num = parseFloat(str)
|
||||||
|
if (isNaN(num)) return 'NaN'
|
||||||
|
|
||||||
|
// 保留原极小值处理逻辑
|
||||||
|
if (Math.abs(num) < 0.0001) return str
|
||||||
|
const factor = 10 ** precision
|
||||||
|
return (Math.round(num * factor + 0.0000001) / factor).toFixed(precision)
|
||||||
|
},
|
||||||
// 激活工具
|
// 激活工具
|
||||||
setToolActive(toolName) {
|
setToolActive(toolName) {
|
||||||
const toolGroupId = `${this.viewportKey}-${this.activeViewportIndex}`
|
const toolGroupId = `${this.viewportKey}-${this.activeViewportIndex}`
|
||||||
|
@ -1847,6 +1877,37 @@ export default {
|
||||||
this.activeTool = toolName
|
this.activeTool = toolName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.criterionType === 0 && this.readingTaskState < 2) {
|
||||||
|
this.$refs[`ecrf_${this.taskInfo.VisitTaskId}`][0].resetOperateState()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setReadingToolActive(toolName) {
|
||||||
|
if (this.readingTaskState === 2) return
|
||||||
|
if (this.activeTool === toolName) return
|
||||||
|
const series = this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series
|
||||||
|
if (series && series.TaskInfo.VisitTaskId && series.TaskInfo.VisitTaskId === this.taskInfo.VisitTaskId) {
|
||||||
|
const toolGroupId = `${this.viewportKey}-${this.activeViewportIndex}`
|
||||||
|
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
|
||||||
|
if (this.activeTool) {
|
||||||
|
toolGroup.setToolPassive(this.activeTool)
|
||||||
|
}
|
||||||
|
toolGroup.setToolActive(toolName, {
|
||||||
|
bindings: [{ mouseButton: MouseBindings.Primary }]
|
||||||
|
})
|
||||||
|
this.activeTool = toolName
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setReadingToolPassive() {
|
||||||
|
if (this.readingTaskState === 2) return
|
||||||
|
if (this.activeTool && this.toolNames.includes(this.activeTool)) {
|
||||||
|
const series = this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series
|
||||||
|
if (series && series.TaskInfo.VisitTaskId && series.TaskInfo.VisitTaskId === this.taskInfo.VisitTaskId) {
|
||||||
|
const toolGroupId = `${this.viewportKey}-${this.activeViewportIndex}`
|
||||||
|
const toolGroup = ToolGroupManager.getToolGroup(toolGroupId)
|
||||||
|
toolGroup.setToolPassive(this.activeTool)
|
||||||
|
this.activeTool = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
setMoreToolActive(toolName) {
|
setMoreToolActive(toolName) {
|
||||||
if (this.readingTaskState === 2) return
|
if (this.readingTaskState === 2) return
|
||||||
|
|
|
@ -232,22 +232,32 @@
|
||||||
<el-input
|
<el-input
|
||||||
type="number"
|
type="number"
|
||||||
@change="(val) => { formItemNumberChange(val, question) }"
|
@change="(val) => { formItemNumberChange(val, question) }"
|
||||||
|
@blur="!questionsMarkStatus[question.Id] ? handleBlur(questionForm[question.Id], questionForm, question.Id) : ()=>{}"
|
||||||
v-model="questionForm[question.Id]"
|
v-model="questionForm[question.Id]"
|
||||||
disabled
|
:disabled="(questionsMarkStatus[question.Id] && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1"
|
||||||
style="width: 150px;"
|
style="width: 150px;"
|
||||||
>
|
>
|
||||||
<template v-if="question.Unit !== 0" slot="append">
|
<template v-if="question.Unit !== 0" slot="append">
|
||||||
{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) : question.CustomUnit }}
|
{{ question.Unit !== 4 ? $fd('ValueUnit', question.Unit) : question.CustomUnit }}
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
<!-- 标记 -->
|
<!-- 测量 -->
|
||||||
<el-button
|
<el-button
|
||||||
v-if="readingTaskState < 2 && !questionsMarkStatus[question.Id]"
|
v-if="readingTaskState < 2 && !questionsMarkStatus[question.Id]"
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
@click="operateImageMarker({operateStateEnum: 1, question})"
|
@click="operateImageMarker({operateStateEnum: 1, question})"
|
||||||
>
|
>
|
||||||
标记
|
测量
|
||||||
|
</el-button>
|
||||||
|
<!-- 绑定 -->
|
||||||
|
<el-button
|
||||||
|
v-if="readingTaskState < 2 && !questionsMarkStatus[question.Id]"
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
@click="operateImageMarker({operateStateEnum: 0, question})"
|
||||||
|
>
|
||||||
|
绑定
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- 查看 -->
|
<!-- 查看 -->
|
||||||
<el-button
|
<el-button
|
||||||
|
|
|
@ -118,9 +118,11 @@ export default {
|
||||||
isBaseLineTask: false,
|
isBaseLineTask: false,
|
||||||
rerender: true,
|
rerender: true,
|
||||||
questionMarkInfoList: [],
|
questionMarkInfoList: [],
|
||||||
operateStateEnum: null, // 1:标记;2:查看;3:更改;4:移除;5:保存
|
operateStateEnum: null, // 0:绑定;1:标记;2:查看;3:更改;4:移除;5:保存
|
||||||
operateQuestionId: '',
|
operateQuestionId: '',
|
||||||
operateRowId: '',
|
operateRowId: '',
|
||||||
|
imageTool: '',
|
||||||
|
imageToolAttribute: '',
|
||||||
questionsMarkStatus: {}, // 1:未保存;2:已保存
|
questionsMarkStatus: {}, // 1:未保存;2:已保存
|
||||||
digitPlaces: 2
|
digitPlaces: 2
|
||||||
}
|
}
|
||||||
|
@ -347,6 +349,7 @@ export default {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
verifyAnnotationIsBound(annotation) {
|
verifyAnnotationIsBound(annotation) {
|
||||||
const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID)
|
const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID)
|
||||||
return i > -1
|
return i > -1
|
||||||
|
@ -354,9 +357,14 @@ export default {
|
||||||
async operateImageMarker(obj) {
|
async operateImageMarker(obj) {
|
||||||
this.operateStateEnum = obj.operateStateEnum
|
this.operateStateEnum = obj.operateStateEnum
|
||||||
this.operateQuestionId = obj.question.Id
|
this.operateQuestionId = obj.question.Id
|
||||||
if (obj.operateStateEnum === 1) {
|
this.imageTool = obj.question.ImageTool
|
||||||
|
this.imageToolAttribute = obj.question.ImageToolAttribute
|
||||||
|
if (obj.operateStateEnum === 0) {
|
||||||
|
// 绑定标记
|
||||||
|
this.$emit('setReadingToolPassive')
|
||||||
|
} else if (obj.operateStateEnum === 1) {
|
||||||
// 添加标记
|
// 添加标记
|
||||||
|
this.$emit('setReadingToolActive', obj.question.ImageTool)
|
||||||
} else if (obj.operateStateEnum === 2) {
|
} else if (obj.operateStateEnum === 2) {
|
||||||
// 查看标记
|
// 查看标记
|
||||||
const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === obj.question.Id)
|
const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === obj.question.Id)
|
||||||
|
@ -366,8 +374,9 @@ export default {
|
||||||
}
|
}
|
||||||
} else if (obj.operateStateEnum === 3) {
|
} else if (obj.operateStateEnum === 3) {
|
||||||
// 更改标记
|
// 更改标记
|
||||||
// this.$set(this.questionsMarkStatus, obj.question.Id, 1)
|
this.$emit('setReadingToolPassive')
|
||||||
} else if (obj.operateStateEnum === 4) {
|
} else if (obj.operateStateEnum === 4) {
|
||||||
|
this.$emit('setReadingToolPassive')
|
||||||
// 移除标记
|
// 移除标记
|
||||||
this.$set(this.questionForm, obj.question.Id, '')
|
this.$set(this.questionForm, obj.question.Id, '')
|
||||||
const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === obj.question.Id)
|
const i = this.questionMarkInfoList.findIndex(i => i.QuestionId === obj.question.Id)
|
||||||
|
@ -405,14 +414,20 @@ export default {
|
||||||
},
|
},
|
||||||
async bindAnnotationToQuestion(annotation) {
|
async bindAnnotationToQuestion(annotation) {
|
||||||
try {
|
try {
|
||||||
if (!(this.operateStateEnum === 1 || this.operateStateEnum === 3)) return
|
if (!(this.operateStateEnum === 0 || this.operateStateEnum === 1 || this.operateStateEnum === 3)) return
|
||||||
|
if (this.operateStateEnum === 1 && annotation.markTool !== this.imageTool) return
|
||||||
if (!this.operateQuestionId) return
|
if (!this.operateQuestionId) return
|
||||||
if (this.operateStateEnum === 3) {
|
if (this.operateStateEnum === 0 || this.operateStateEnum === 3) {
|
||||||
if (!annotation.data.label) {
|
if (!annotation.data.label) {
|
||||||
this.$alert('该标记不能与问题绑定!')
|
this.$alert('该标记不能与问题绑定!')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const confirm = await this.$confirm('是否确认更改?', {
|
if (annotation.markTool !== this.imageTool) {
|
||||||
|
this.$alert('该标记不能与问题绑定!')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let msg = this.operateStateEnum === 0 ? '是否确认绑定?' : '是否确认更改?'
|
||||||
|
const confirm = await this.$confirm(msg, {
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
distinguishCancelAndClose: true
|
distinguishCancelAndClose: true
|
||||||
})
|
})
|
||||||
|
@ -449,7 +464,6 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateAnnotationToQuestion(annotation) {
|
updateAnnotationToQuestion(annotation) {
|
||||||
console.log('updateAnnotationToQuestion', annotation)
|
|
||||||
const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID)
|
const i = this.questionMarkInfoList.findIndex(i => i.MeasureData && i.MeasureData.annotationUID === annotation.annotationUID)
|
||||||
if (i === -1) return
|
if (i === -1) return
|
||||||
this.questionMarkInfoList[i].measureData = annotation
|
this.questionMarkInfoList[i].measureData = annotation
|
||||||
|
@ -464,13 +478,25 @@ export default {
|
||||||
length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||||
this.$set(this.questionForm, questionId, length)
|
this.$set(this.questionForm, questionId, length)
|
||||||
} else if (annotation.metadata.toolName === 'Bidirectional') {
|
} else if (annotation.metadata.toolName === 'Bidirectional') {
|
||||||
// let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length
|
if (this.imageToolAttribute === 'length') {
|
||||||
// length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
let length = annotation.data.cachedStats[`imageId:${referencedImageId}`].length
|
||||||
let short = annotation.data.cachedStats[`imageId:${referencedImageId}`].width
|
length = length ? parseFloat(length).toFixed(this.digitPlaces) : length
|
||||||
short = short ? parseFloat(short).toFixed(this.digitPlaces) : short
|
this.$set(this.questionForm, questionId, length)
|
||||||
this.$set(this.questionForm, questionId, short)
|
} else if (this.imageToolAttribute === 'width') {
|
||||||
|
let short = annotation.data.cachedStats[`imageId:${referencedImageId}`].width
|
||||||
|
short = short ? parseFloat(short).toFixed(this.digitPlaces) : short
|
||||||
|
this.$set(this.questionForm, questionId, short)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
resetOperateState() {
|
||||||
|
console.log('resetOperateState')
|
||||||
|
this.operateStateEnum = null
|
||||||
|
this.operateQuestionId = ''
|
||||||
|
this.operateRowId = ''
|
||||||
|
this.imageTool = ''
|
||||||
|
this.imageToolAttribute = ''
|
||||||
|
},
|
||||||
async resetForm() {
|
async resetForm() {
|
||||||
const confirm = await this.$confirm(
|
const confirm = await this.$confirm(
|
||||||
this.$t('trials:dicomReading:message:confirmReset1'),
|
this.$t('trials:dicomReading:message:confirmReset1'),
|
||||||
|
|
|
@ -460,6 +460,7 @@ export default {
|
||||||
},
|
},
|
||||||
formItemNumberChange(v, question) {
|
formItemNumberChange(v, question) {
|
||||||
this.$emit('formItemTableNumberChange', v, question)
|
this.$emit('formItemTableNumberChange', v, question)
|
||||||
|
this.$emit('setFormItemData', { key: question.Id, val: v, question: question })
|
||||||
// this.$emit('formItemTableNumberChange', v, question)
|
// this.$emit('formItemTableNumberChange', v, question)
|
||||||
},
|
},
|
||||||
resetChild(obj) {
|
resetChild(obj) {
|
||||||
|
|
|
@ -353,7 +353,9 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
formItemNumberChange(v, question) {
|
formItemNumberChange(v, question) {
|
||||||
this.$emit('formItemTableNumberChange', v, question)
|
// this.$emit('formItemTableNumberChange', v, question)
|
||||||
|
this.$emit('formItemTableNumberChange')
|
||||||
|
this.$emit('setFormItemData', { key: question.Id, val: v, question: question })
|
||||||
},
|
},
|
||||||
resetChild(obj) {
|
resetChild(obj) {
|
||||||
obj.forEach(i => {
|
obj.forEach(i => {
|
||||||
|
|
|
@ -729,17 +729,62 @@
|
||||||
</div>
|
</div>
|
||||||
<!-- 影像标记 -->
|
<!-- 影像标记 -->
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-if="form.Type === 'number' && !isFromSystem"
|
v-if="form.Type === 'number' && !isFromSystem && readingVersionEnum"
|
||||||
:label="$t('trials:readingUnit:qsList:title:imageMarkEnum')"
|
:label="$t('trials:readingUnit:qsList:title:imageMarkEnum')"
|
||||||
prop="ImageMarkEnum"
|
prop="ImageMarkEnum"
|
||||||
>
|
>
|
||||||
<el-radio-group
|
<el-radio-group
|
||||||
v-model="form.ImageMarkEnum"
|
v-model="form.ImageMarkEnum"
|
||||||
:disabled="form.IsRequired === 0"
|
:disabled="form.IsRequired === 0"
|
||||||
|
@change="imageMarkEnumChange"
|
||||||
>
|
>
|
||||||
<el-radio v-for="item of $d.ImageMark" :key="item.id" :label="item.value" :disabled="form.IsRequired === 2 && item.value === 1">{{ item.label }}</el-radio>
|
<el-radio v-for="item of $d.ImageMark" :key="item.id" :label="item.value" :disabled="form.IsRequired === 2 && item.value === 1">{{ item.label }}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!-- 测量工具 ImageTool -->
|
||||||
|
<el-form-item
|
||||||
|
v-if="form.ImageMarkEnum === 1 || form.ImageMarkEnum === 2"
|
||||||
|
:label="$t('trials:readingUnit:qsList:title:ImageTool')"
|
||||||
|
prop="ImageTool"
|
||||||
|
:rules="[
|
||||||
|
{ required: true, message: this.$t('common:ruleMessage:select')}
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
<el-radio-group
|
||||||
|
v-model="form.ImageTool"
|
||||||
|
:disabled="form.IsRequired === 0"
|
||||||
|
@change="imageToolChange"
|
||||||
|
>
|
||||||
|
<el-radio
|
||||||
|
v-for="tool of readingTools"
|
||||||
|
:key="tool.toolName"
|
||||||
|
:label="tool.toolName"
|
||||||
|
>
|
||||||
|
{{ $t(tool.i18nKey) }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 测量值 ImageToolAttribute -->
|
||||||
|
<el-form-item
|
||||||
|
v-if="form.ImageTool"
|
||||||
|
:label="$t('trials:readingUnit:qsList:title:ImageToolAttribute')"
|
||||||
|
prop="ImageToolAttribute"
|
||||||
|
:rules="[
|
||||||
|
{ required: true, message: this.$t('common:ruleMessage:select')}
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
<el-radio-group
|
||||||
|
v-model="form.ImageToolAttribute"
|
||||||
|
>
|
||||||
|
<el-radio
|
||||||
|
v-for="i of imageToolAttributes"
|
||||||
|
:key="i"
|
||||||
|
:label="i"
|
||||||
|
>
|
||||||
|
{{ i }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
<!-- 最大上传个数 -->
|
<!-- 最大上传个数 -->
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-if="form.Type === 'upload'"
|
v-if="form.Type === 'upload'"
|
||||||
|
@ -1031,6 +1076,16 @@ export default {
|
||||||
isLook: {
|
isLook: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true
|
default: true
|
||||||
|
},
|
||||||
|
readingTools: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
readingVersionEnum: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1085,9 +1140,13 @@ export default {
|
||||||
ClassifyType: null,
|
ClassifyType: null,
|
||||||
ClassifyEditType: null,
|
ClassifyEditType: null,
|
||||||
ClassifyShowType: null,
|
ClassifyShowType: null,
|
||||||
ImageMarkEnum: 0
|
ImageMarkEnum: 0,
|
||||||
|
ImageTool: '',
|
||||||
|
ImageToolAttribute: '',
|
||||||
|
|
||||||
// IsEnable: true
|
// IsEnable: true
|
||||||
},
|
},
|
||||||
|
imageToolAttributes: [],
|
||||||
rules: {
|
rules: {
|
||||||
Type: [
|
Type: [
|
||||||
{required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change']}
|
{required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change']}
|
||||||
|
@ -1363,6 +1422,9 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.form.ImageTool) {
|
||||||
|
this.imageToolChange(this.form.ImageTool)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!this.data.ShowOrder && this.data.ShowOrder !== 0) {
|
if (!this.data.ShowOrder && this.data.ShowOrder !== 0) {
|
||||||
if (this.list.length > 0) {
|
if (this.list.length > 0) {
|
||||||
|
@ -1477,8 +1539,20 @@ export default {
|
||||||
form.ImageMarkEnum = 0
|
form.ImageMarkEnum = 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
imageMarkEnumChange(val) {
|
||||||
|
if (val === 0) {
|
||||||
|
this.form.ImageTool = ''
|
||||||
|
this.form.ImageToolAttribute = ''
|
||||||
|
this.imageToolAttributes = []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
imageToolChange(v) {
|
||||||
|
let i = this.readingTools.findIndex(tool=>tool.toolName === v)
|
||||||
|
if (i > -1) {
|
||||||
|
this.imageToolAttributes = this.readingTools[i].props
|
||||||
|
}
|
||||||
|
},
|
||||||
parentQuestionChange(val, form) {
|
parentQuestionChange(val, form) {
|
||||||
console.log(val)
|
|
||||||
this.isParentExistGroup = false
|
this.isParentExistGroup = false
|
||||||
if (val) {
|
if (val) {
|
||||||
var index = this.parentOptions.findIndex(item => {
|
var index = this.parentOptions.findIndex(item => {
|
||||||
|
@ -1571,6 +1645,9 @@ export default {
|
||||||
form.ClassifyType = null
|
form.ClassifyType = null
|
||||||
form.ClassifyShowType = null
|
form.ClassifyShowType = null
|
||||||
form.ImageMarkEnum = 0
|
form.ImageMarkEnum = 0
|
||||||
|
form.ImageTool = ''
|
||||||
|
form.ImageToolAttribute = ''
|
||||||
|
this.imageToolAttributes = []
|
||||||
},
|
},
|
||||||
getLesionType() {
|
getLesionType() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
|
@ -210,12 +210,14 @@
|
||||||
append-to-body
|
append-to-body
|
||||||
custom-class="base-dialog-wrapper"
|
custom-class="base-dialog-wrapper"
|
||||||
>
|
>
|
||||||
<QuestionsForm
|
<questions-form
|
||||||
ref="addOrEdit"
|
ref="addOrEdit"
|
||||||
:data="rowData"
|
:data="rowData"
|
||||||
:trial-criterion-id="trialCriterionId"
|
:trial-criterion-id="trialCriterionId"
|
||||||
:is-from-system="isFromSystem"
|
:is-from-system="isFromSystem"
|
||||||
:digit-places="digitPlaces"
|
:digit-places="digitPlaces"
|
||||||
|
:readingTools="readingTools"
|
||||||
|
:readingVersionEnum="readingVersionEnum"
|
||||||
:list="tblList"
|
:list="tblList"
|
||||||
:is-look="isLook"
|
:is-look="isLook"
|
||||||
:is-system-criterion="isSystemCriterion"
|
:is-system-criterion="isSystemCriterion"
|
||||||
|
@ -231,7 +233,7 @@
|
||||||
:title="preview.title"
|
:title="preview.title"
|
||||||
:fullscreen="true"
|
:fullscreen="true"
|
||||||
>
|
>
|
||||||
<QuestionsPreview :criterion-id="trialCriterionId" :is-system-criterion="isSystemCriterion" :form-type="1" />
|
<questions-preview :criterion-id="trialCriterionId" :is-system-criterion="isSystemCriterion" :form-type="1" />
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog
|
||||||
|
@ -241,7 +243,7 @@
|
||||||
:title="config.title"
|
:title="config.title"
|
||||||
:fullscreen="true"
|
:fullscreen="true"
|
||||||
>
|
>
|
||||||
<TableQsList
|
<table-qs-list
|
||||||
:digit-places="digitPlaces"
|
:digit-places="digitPlaces"
|
||||||
:reading-question-id="rowData.Id"
|
:reading-question-id="rowData.Id"
|
||||||
:is-from-system="isFromSystem"
|
:is-from-system="isFromSystem"
|
||||||
|
@ -299,6 +301,16 @@ export default {
|
||||||
isFromSystem: {
|
isFromSystem: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true
|
default: true
|
||||||
|
},
|
||||||
|
readingTools: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
readingVersionEnum: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -321,7 +333,6 @@ export default {
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.tblList = this.list
|
this.tblList = this.list
|
||||||
console.log('ql', this.isSystemCriterion)
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getList() {
|
getList() {
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
>
|
>
|
||||||
<!-- '表单问题' -->
|
<!-- '表单问题' -->
|
||||||
<el-form-item :label="$t('trials:readingUnit:readingCriterion:title:formQs')">
|
<el-form-item :label="$t('trials:readingUnit:readingCriterion:title:formQs')">
|
||||||
<QuestionsList
|
<questions-list
|
||||||
:ref="`questionList${trialReadingCriterionId}`"
|
:ref="`questionList${trialReadingCriterionId}`"
|
||||||
v-if="form.FormType===1"
|
v-if="form.FormType===1"
|
||||||
:trial-reading-criterion-id="trialReadingCriterionId"
|
:trial-reading-criterion-id="trialReadingCriterionId"
|
||||||
|
@ -20,6 +20,8 @@
|
||||||
:is-system-criterion="isSystemCriterion"
|
:is-system-criterion="isSystemCriterion"
|
||||||
:is-from-system="readingInfo.IsFromSystem"
|
:is-from-system="readingInfo.IsFromSystem"
|
||||||
:digit-places="digitPlaces"
|
:digit-places="digitPlaces"
|
||||||
|
:readingTools="readingTools"
|
||||||
|
:readingVersionEnum="readingVersionEnum"
|
||||||
@reloadArbitrationRules="reloadArbitrationRules"
|
@reloadArbitrationRules="reloadArbitrationRules"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -77,6 +79,12 @@ export default {
|
||||||
isAdditionalAssessment: {
|
isAdditionalAssessment: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
|
},
|
||||||
|
readingTools: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
@ -99,7 +107,8 @@ export default {
|
||||||
readingInfo: {},
|
readingInfo: {},
|
||||||
isConfirm: true,
|
isConfirm: true,
|
||||||
configBaseDataVisible: false,
|
configBaseDataVisible: false,
|
||||||
additionalAssessmentOptionList: null
|
additionalAssessmentOptionList: null,
|
||||||
|
readingVersionEnum: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -118,6 +127,7 @@ export default {
|
||||||
}
|
}
|
||||||
getTrialReadingCriterionInfo({ trialId, TrialReadingCriterionId: this.trialReadingCriterionId }).then(res => {
|
getTrialReadingCriterionInfo({ trialId, TrialReadingCriterionId: this.trialReadingCriterionId }).then(res => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
|
this.readingVersionEnum = res.OtherInfo.ReadingVersionEnum
|
||||||
this.readingInfo = res.Result
|
this.readingInfo = res.Result
|
||||||
for (const k in this.form) {
|
for (const k in this.form) {
|
||||||
if (res.Result.hasOwnProperty(k)) {
|
if (res.Result.hasOwnProperty(k)) {
|
||||||
|
@ -126,7 +136,6 @@ export default {
|
||||||
}
|
}
|
||||||
this.isConfirm = res.Result.IsSign
|
this.isConfirm = res.Result.IsSign
|
||||||
this.isSystemCriterion = res.Result.IsSystemCriterion
|
this.isSystemCriterion = res.Result.IsSystemCriterion
|
||||||
console.log(this.isSystemCriterion)
|
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
|
@ -137,7 +146,6 @@ export default {
|
||||||
// 配置信息保存
|
// 配置信息保存
|
||||||
handleSave(isPrompt = true) {
|
handleSave(isPrompt = true) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
console.log(this.form)
|
|
||||||
this.$refs['readingCriterionsForm'].validate((valid) => {
|
this.$refs['readingCriterionsForm'].validate((valid) => {
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
resolve(false)
|
resolve(false)
|
||||||
|
|
|
@ -917,6 +917,8 @@ export default {
|
||||||
this.$emit('setGlobalReading', res.Result.IsGlobalReading)
|
this.$emit('setGlobalReading', res.Result.IsGlobalReading)
|
||||||
this.$emit('setOncologyReading', res.Result.IsOncologyReading)
|
this.$emit('setOncologyReading', res.Result.IsOncologyReading)
|
||||||
this.$emit('setDigitPlaces', res.Result.DigitPlaces)
|
this.$emit('setDigitPlaces', res.Result.DigitPlaces)
|
||||||
|
this.$emit('setReadingTools', res.Result.ReadingToolList)
|
||||||
|
|
||||||
if (res.Result.ReadingType === 1) {
|
if (res.Result.ReadingType === 1) {
|
||||||
this.$emit('setArbitrationReading', false)
|
this.$emit('setArbitrationReading', false)
|
||||||
}
|
}
|
||||||
|
@ -957,6 +959,7 @@ export default {
|
||||||
this.$emit('setGlobalReading', this.form.IsGlobalReading)
|
this.$emit('setGlobalReading', this.form.IsGlobalReading)
|
||||||
this.$emit('setOncologyReading', this.form.IsOncologyReading)
|
this.$emit('setOncologyReading', this.form.IsOncologyReading)
|
||||||
this.$emit('setDigitPlaces', this.form.DigitPlaces)
|
this.$emit('setDigitPlaces', this.form.DigitPlaces)
|
||||||
|
this.$emit('setReadingTools', this.form.ReadingToolList)
|
||||||
if (this.form.ReadingType === 1) {
|
if (this.form.ReadingType === 1) {
|
||||||
this.$emit('setArbitrationReading', false)
|
this.$emit('setArbitrationReading', false)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1199,6 +1199,12 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
classifyQuestionChange (v){
|
||||||
|
let obj = this.selectQuestions.find(i=>i.Id === v)
|
||||||
|
let arr = obj && obj.TypeValue ? obj.TypeValue.split('|') : []
|
||||||
|
arr = arr.length > 0 ? arr.map(i=>i.trim()) : []
|
||||||
|
this.classifyQuestionOptions = arr
|
||||||
|
},
|
||||||
getBasicConfigSelect() {
|
getBasicConfigSelect() {
|
||||||
getCriterionDictionaryList({
|
getCriterionDictionaryList({
|
||||||
CriterionId: this.criterionId,
|
CriterionId: this.criterionId,
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
@setGlobalReading="setGlobalReading"
|
@setGlobalReading="setGlobalReading"
|
||||||
@setOncologyReading="setOncologyReading"
|
@setOncologyReading="setOncologyReading"
|
||||||
@setDigitPlaces="setDigitPlaces"
|
@setDigitPlaces="setDigitPlaces"
|
||||||
|
@setReadingTools="setReadingTools"
|
||||||
/>
|
/>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
<!-- 阅片标准 -->
|
<!-- 阅片标准 -->
|
||||||
|
@ -57,6 +58,7 @@
|
||||||
:ref="`readingCriterions${item.TrialReadingCriterionId}`"
|
:ref="`readingCriterions${item.TrialReadingCriterionId}`"
|
||||||
:trial-reading-criterion-id="TrialReadingCriterionId"
|
:trial-reading-criterion-id="TrialReadingCriterionId"
|
||||||
:digit-places="digitPlaces"
|
:digit-places="digitPlaces"
|
||||||
|
:readingTools="readingTools"
|
||||||
:is-additional-assessment="isAdditionalAssessment"
|
:is-additional-assessment="isAdditionalAssessment"
|
||||||
@reloadArbitrationRules="reloadArbitrationRules"
|
@reloadArbitrationRules="reloadArbitrationRules"
|
||||||
/>
|
/>
|
||||||
|
@ -174,7 +176,7 @@ import GlobalReading from "./components/GlobalReading";
|
||||||
import OncologyForm from "./components/OncologyForm";
|
import OncologyForm from "./components/OncologyForm";
|
||||||
import SignForm from "@/views/trials/components/newSignForm";
|
import SignForm from "@/views/trials/components/newSignForm";
|
||||||
import const_ from "@/const/sign-code";
|
import const_ from "@/const/sign-code";
|
||||||
|
import { getCustomizeStandardsTools } from '@/views/trials/trials-panel/reading/dicoms3D/components/toolConfig'
|
||||||
export default {
|
export default {
|
||||||
name: "ReadingUnit",
|
name: "ReadingUnit",
|
||||||
components: {
|
components: {
|
||||||
|
@ -208,6 +210,7 @@ export default {
|
||||||
isGlobalReading: false,
|
isGlobalReading: false,
|
||||||
digitPlaces: 0,
|
digitPlaces: 0,
|
||||||
isAdditionalAssessment: false,
|
isAdditionalAssessment: false,
|
||||||
|
readingTools: []
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
@ -295,6 +298,9 @@ export default {
|
||||||
setDigitPlaces(digitPlaces) {
|
setDigitPlaces(digitPlaces) {
|
||||||
this.digitPlaces = digitPlaces;
|
this.digitPlaces = digitPlaces;
|
||||||
},
|
},
|
||||||
|
setReadingTools(readingTools) {
|
||||||
|
this.readingTools = getCustomizeStandardsTools(readingTools)
|
||||||
|
},
|
||||||
setIsClinicalReading(isClinicalReading) {
|
setIsClinicalReading(isClinicalReading) {
|
||||||
this.isClinicalReading = isClinicalReading;
|
this.isClinicalReading = isClinicalReading;
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue