1
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-10-21 11:48:41 +08:00
parent 2a27e1fbae
commit 7f48e37779
3 changed files with 99 additions and 86 deletions

View File

@ -272,7 +272,7 @@
</el-form>
</template>
<script>
import { submitTableQuestion, deleteReadingRowAnswer, getIsSuvMaxLesion } from '@/api/trials'
import { submitTableQuestion, deleteReadingRowAnswer, getIsSuvMaxLesionNoPet } from '@/api/trials'
// import { uploadPrintscreen } from '@/api/reading'
import DicomEvent from './../DicomEvent'
import store from '@/store'
@ -1737,7 +1737,7 @@ export default {
// suvmax
const suvMax = this.getQuestionVal(20)
if (this.questionForm.RowId && !!suvMax) {
const res = await getIsSuvMaxLesion({ visitTaskId: this.visitTaskId, rowId: this.questionForm.RowId })
const res = await getIsSuvMaxLesionNoPet({ visitTaskId: this.visitTaskId, rowId: this.questionForm.RowId })
if (res.IsSuccess && res.Result.IsSuvMaxLesion) {
message = this.$t('trials:reading:warnning:msg58')
}

View File

@ -225,7 +225,7 @@
</div>
</template>
<script>
import { splitLesion, getSplitPPdSum, getCanMergeLesion, mergeLesion } from '@/api/trials'
import { splitLesion, getSplitPPdSumNoPet, getCanMergeLesion, mergeLesion } from '@/api/trials'
import { resetReadingTask } from '@/api/reading'
import DicomEvent from './../DicomEvent'
import store from '@/store'
@ -343,7 +343,7 @@ export default {
})
})
DicomEvent.$on('refreshSplitTargetLesionPDD', async(callback) => {
const res = await getSplitPPdSum({ visitTaskId: this.visitTaskId })
const res = await getSplitPPdSumNoPet({ visitTaskId: this.visitTaskId })
this.splitTargetLesions = res.Result
if (this.splitTargetLesions && this.splitTargetLesions.length > 0) {
this.splitTargetLesions.map(i => {
@ -397,7 +397,7 @@ export default {
loading.close()
}
if (!this.isBaseLineTask) {
const res = await getSplitPPdSum({ visitTaskId: this.visitTaskId })
const res = await getSplitPPdSumNoPet({ visitTaskId: this.visitTaskId })
this.splitTargetLesions = res.Result
}
this.questions = this.visitTaskList[i].ReadingQuestions
@ -540,7 +540,7 @@ export default {
this.isCurrentTask = this.visitTaskList[idx].IsCurrentTask
}
if (!this.isBaseLineTask) {
const res = await getSplitPPdSum({ visitTaskId: this.visitTaskId })
const res = await getSplitPPdSumNoPet({ visitTaskId: this.visitTaskId })
this.splitTargetLesions = res.Result
}
this.getTableQuestions()

View File

@ -1,27 +1,17 @@
<template>
<div v-loading="loading" class="ecrf-wrapper">
<el-form
v-if="questions.length > 0"
ref="questions"
size="small"
:model="questionForm"
>
<QuestionItem
v-for="question of questions"
:key="question.Id"
:question="question"
:question-form="questionForm"
:reading-task-state="readingTaskState"
:is-first-change-task="isFirstChangeTask"
:visit-task-id="visitTaskId"
@setFormItemData="setFormItemData"
@resetFormItemData="resetFormItemData"
/>
<el-form v-if="questions.length > 0" ref="questions" size="small" :model="questionForm">
<QuestionItem v-for="question of questions" :key="question.Id" :question="question" :question-form="questionForm"
:reading-task-state="readingTaskState" :is-first-change-task="isFirstChangeTask" :visit-task-id="visitTaskId"
@setFormItemData="setFormItemData" @resetFormItemData="resetFormItemData" />
<el-form-item v-if="readingTaskState < 2 && !isFirstChangeTask">
<div class="ecrf-footer">
<i v-if="groupClassify === null || groupClassify === 1" class="el-icon-warning feedback-icon" @click="openFeedBackTable" :style="{color: isExistUnprocessedFeedback ? '#ffeb3b' : '#fff'}"/>
<el-button size="mini" :disabled="!questionFormChangeState || (!formChanged && groupClassify > 0)" :type="questionFormChangeState || (!formChanged && groupClassify > 0) ? 'primary' : null" @click="handleSave">{{ $t('common:button:save') }}</el-button>
<i v-if="groupClassify === null || groupClassify === 1" class="el-icon-warning feedback-icon"
@click="openFeedBackTable" :style="{ color: isExistUnprocessedFeedback ? '#ffeb3b' : '#fff' }" />
<el-button size="mini" :disabled="!questionFormChangeState || (!formChanged && groupClassify > 0)"
:type="questionFormChangeState || (!formChanged && groupClassify > 0) ? 'primary' : null"
@click="handleSave">{{ $t('common:button:save') }}</el-button>
</div>
</el-form-item>
</el-form>
@ -31,7 +21,7 @@
<script>
// import { uploadPrintscreen } from '@/api/reading'
import { saveTaskQuestion, getSplenicState, getSplenicVerify, getCanChooseNotMerge, getDicomReadingQuestionAnswer } from '@/api/trials'
import { saveTaskQuestion, getSplenicState, getSplenicStateNoPet, getSplenicVerify, getSplenicVerifyNoPet, getCanChooseNotMerge, getCanChooseNotMergeNoPet, getDicomReadingQuestionAnswer } from '@/api/trials'
import { setSkipReadingCache } from '@/api/reading'
import QuestionItem from './QuestionItem'
import DicomEvent from './DicomEvent'
@ -169,8 +159,14 @@ export default {
this.measurements.push(i)
})
if (isChangeVisitTask || isRefresh) {
const { Result } = await getSplenicVerify(visitTaskId)
this.spleenInfo = Result
if (this.criterionType === 18) {
const { Result } = await getSplenicVerifyNoPet(visitTaskId)
this.spleenInfo = Result
} else {
const { Result } = await getSplenicVerify(visitTaskId)
this.spleenInfo = Result
}
}
}
@ -271,10 +267,10 @@ export default {
},
handleSave() {
this.$refs['questions'].validate(async(valid) => {
this.$refs['questions'].validate(async (valid) => {
if (!valid) return
// lugano
if (this.criterionType === 2 && this.groupClassify === 3) {
if ((this.criterionType === 2 || this.criterionType === 18) && this.groupClassify === 3) {
//
var existUnSave = this.checkAnnotationStatus(this.questions)
if (existUnSave) {
@ -291,28 +287,34 @@ export default {
if (currentSpleenLength && currentSpleenStatus === 5) {
// '!'
this.$alert(this.$t('trials:lugano:message:validSpleen1'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => {}
callback: _ => { }
})
} else if (currentSpleenStatus === 5 && ((stIdx > -1 && this.measurements[stIdx].MeasureData) || (slIdx > -1 && this.measurements[slIdx].MeasureData))) {
//
this.$alert(this.$t('trials:lugano:message:validSpleen1'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => {}
callback: _ => { }
})
} else if (((stIdx > -1 && this.measurements[stIdx].MeasureData) || (slIdx > -1 && this.measurements[slIdx].MeasureData)) && !currentSpleenLength) {
this.$alert(this.$t('trials:lugano:message:validSpleen2'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => {}
callback: _ => { }
})
} else {
this.saveQuestionsList()
}
} else if (this.criterionType === 2 && this.groupClassify === 1 && this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) {
} else if ((this.criterionType === 2 || this.criterionType === 18) && this.groupClassify === 1 && this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) {
// PET-CT
const res = await getCanChooseNotMerge({ visitTaskId: this.visitTaskId })
let res = null
if (this.criterionType === 18) {
res = await getCanChooseNotMergeNoPet({ visitTaskId: this.visitTaskId })
} else {
res = await getCanChooseNotMerge({ visitTaskId: this.visitTaskId })
}
if (res.IsSuccess && !res.Result.IsCanChooseNotMerge) {
// this.$alert(this.$t('trials:lugano:saveQuestions:warning1'), this.$t('trials:lugano:fusionDialog:warning'), {showCancelButton: false})
this.$alert(this.$t('trials:lugano:saveQuestions:warning1'), this.$t('trials:lugano:fusionDialog:warning'), {
showCancelButton: false,
callback: action => {}
callback: action => { }
})
return
} else {
@ -377,7 +379,7 @@ export default {
// DicomEvent.$emit('readingPageUpdate', {})
var idx = this.visitTaskList.findIndex(i => i.VisitTaskId === this.visitTaskId)
const criterionType = parseInt(localStorage.getItem('CriterionType'))
if (idx > -1 && !this.visitTaskList[idx].IsBaseLineTask && (criterionType === 1 || criterionType === 2 || criterionType === 3 || criterionType === 17)) {
if (idx > -1 && !this.visitTaskList[idx].IsBaseLineTask && (criterionType === 1 || criterionType === 2 || criterionType === 18 || criterionType === 3 || criterionType === 17)) {
if (parseInt(imageQuality) === 2) {
this.$confirm(this.$t('trials:reading:warnning:unableEvaluate'), '', {
type: 'warning'
@ -441,7 +443,12 @@ export default {
try {
var spleenLength = this.questionForm[this.spleenLengthId]
spleenLength = isNaN(parseFloat(spleenLength)) ? -1 : parseFloat(spleenLength)
const result = await getSplenicState(this.visitTaskId, spleenLength)
let result = null
if (this.criterionType === 18) {
result = await getSplenicStateNoPet(this.visitTaskId, spleenLength)
} else {
result = await getSplenicState(this.visitTaskId, spleenLength)
}
return { isSuccess: true, result: result.Result }
} catch (e) {
return { isSuccess: false, result: e }
@ -538,7 +545,7 @@ export default {
if (!chenckVaild) {
//
this.$alert(this.$t('trials:lugano:message:validSpleen3'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => {}
callback: _ => { }
})
return
}
@ -820,7 +827,7 @@ export default {
type: 'imgfail',
trialId: this.$route.query.trialId,
visitTaskId: this.visitTaskId,
callBack: async() => {
callBack: async () => {
console.log('callBack')
const confirm = await this.$confirm(
this.$t('trials:reading:confirm:feedbackmsg'),
@ -856,55 +863,61 @@ export default {
}
</script>
<style lang="scss" scoped>
.ecrf-wrapper{
::v-deep .el-form-item__label{
color: #c3c3c3;
text-align: left;
}
::v-deep .el-input__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
::v-deep .el-textarea__inner{
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
.ecrf-wrapper {
::v-deep .el-form-item__label {
color: #c3c3c3;
text-align: left;
}
::v-deep .el-form-item{
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
::v-deep .el-form-item__content{
flex: 1;
}
::v-deep .el-button--mini, .el-button--mini.is-round {
::v-deep .el-input__inner {
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
::v-deep .el-textarea__inner {
background-color: transparent;
color: #ddd;
border: 1px solid #5e5e5e;
}
::v-deep .el-form-item {
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
}
::v-deep .el-form-item__content {
flex: 1;
}
::v-deep .el-button--mini,
.el-button--mini.is-round {
padding: 7px 10px;
}
::v-deep .el-form-item__content
.el-select{
width: 100%;
}
.ecrf-footer{
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
.feedback-icon{
padding: 0 10px;
color: #fff;
font-weight: 400;
font-size: 22px;
cursor: pointer;
&:hover{
color: #68a2d5;
}
::v-deep .el-form-item__content .el-select {
width: 100%;
}
.ecrf-footer {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
.feedback-icon {
padding: 0 10px;
color: #fff;
font-weight: 400;
font-size: 22px;
cursor: pointer;
&:hover {
color: #68a2d5;
}
}
}
</style>
}
</style>