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

View File

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

View File

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