有pet影像但无法融合/无法测量的处理

uat_us
caiyiling 2024-04-11 13:38:42 +08:00
parent c29b60cbbe
commit c04aaf2db6
11 changed files with 89 additions and 21 deletions

View File

@ -2810,7 +2810,21 @@ export function saveImageQuality(param) {
data: param data: param
}) })
} }
export function getIsSuvMaxLesion(param) {
return request({
url: `/LuganoCalculate/getIsSuvMaxLesion`,
method: 'post',
data: param
})
}
export function getCanChooseNotMerge(param) {
return request({
url: `/LuganoCalculate/getCanChooseNotMerge`,
method: 'post',
data: param
})
}
export function saveTaskQuestion(saveQuestionType, param) { export function saveTaskQuestion(saveQuestionType, param) {
return request({ return request({
url: `/SaveTaskQuestion/${saveQuestionType}`, url: `/SaveTaskQuestion/${saveQuestionType}`,

View File

@ -40,6 +40,7 @@ const getters = {
activeSeries: state => state.reading.activeSeries, activeSeries: state => state.reading.activeSeries,
lastCanvasTaskId: state => state.reading.lastCanvasTaskId, lastCanvasTaskId: state => state.reading.lastCanvasTaskId,
imageQuality: state => state.reading.imageQuality, imageQuality: state => state.reading.imageQuality,
imageQualityIssues: state => state.reading.imageQualityIssues,
language: state => state.lang.language, language: state => state.lang.language,
TotalNeedSignSystemDocCount: state => state.user.TotalNeedSignSystemDocCount, TotalNeedSignSystemDocCount: state => state.user.TotalNeedSignSystemDocCount,
TotalNeedSignTrialDocCount: state => state.user.TotalNeedSignTrialDocCount, TotalNeedSignTrialDocCount: state => state.user.TotalNeedSignTrialDocCount,

View File

@ -29,7 +29,8 @@ const getDefaultState = () => {
currentReadingTaskState: 2, currentReadingTaskState: 2,
activeSeries: {}, activeSeries: {},
lastCanvasTaskId: '', lastCanvasTaskId: '',
imageQuality: null imageQuality: null,
imageQualityIssues: null
} }
} }
function getQuestions(questions) { function getQuestions(questions) {
@ -183,6 +184,7 @@ const actions = {
state.activeSeries = {} state.activeSeries = {}
state.lastCanvasTaskId = '' state.lastCanvasTaskId = ''
state.imageQuality = null state.imageQuality = null
state.imageQualityIssues = null
resolve() resolve()
}) })
}, },
@ -875,6 +877,9 @@ const actions = {
setImageQuality({ state }, imageQuality) { setImageQuality({ state }, imageQuality) {
state.imageQuality = isNaN(parseInt(imageQuality)) ? null : parseInt(imageQuality) state.imageQuality = isNaN(parseInt(imageQuality)) ? null : parseInt(imageQuality)
}, },
setImageQualityIssues({ state }, imageQualityIssues) {
state.imageQualityIssues = isNaN(parseInt(imageQualityIssues)) ? null : parseInt(imageQualityIssues)
},
addQuestionMeasuredData({ state }, obj) { addQuestionMeasuredData({ state }, obj) {
return new Promise(resolve => { return new Promise(resolve => {
var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)

View File

@ -794,7 +794,7 @@ export default {
}, },
computed: { computed: {
...mapGetters(['visitTaskList', 'currentReadingTaskState', 'lastCanvasTaskId']) ...mapGetters(['visitTaskList', 'currentReadingTaskState', 'lastCanvasTaskId', 'imageQualityIssues'])
}, },
watch: { watch: {
currentReadingTaskState: { currentReadingTaskState: {
@ -840,6 +840,10 @@ export default {
this.studyList = studyList this.studyList = studyList
} }
} }
},
imageQualityIssues: {
immediate: true,
handler(v) {}
} }
}, },
@ -961,6 +965,11 @@ export default {
this.petctWindow.close() this.petctWindow.close()
} }
}) })
DicomEvent.$on('closePetct', () => {
if (this.petctWindow) {
this.petctWindow.close()
}
})
window.addEventListener('beforeunload', () => { window.addEventListener('beforeunload', () => {
if (this.petctWindow) { if (this.petctWindow) {
this.petctWindow.close() this.petctWindow.close()
@ -978,6 +987,7 @@ export default {
DicomEvent.$off('readingPageUpdate') DicomEvent.$off('readingPageUpdate')
DicomEvent.$off('setReadingState') DicomEvent.$off('setReadingState')
DicomEvent.$off('reload') DicomEvent.$off('reload')
DicomEvent.$off('closePetct')
if (this.petctWindow) { if (this.petctWindow) {
this.petctWindow.close() this.petctWindow.close()
} }
@ -1966,6 +1976,10 @@ export default {
this.$alert(this.$t('components:uploadvideo:message:xf4')) this.$alert(this.$t('components:uploadvideo:message:xf4'))
return return
} }
if (this.imageQualityIssues && parseInt(this.imageQualityIssues) === 6) {
this.$alert(this.$t('trials:lugano:message:fusionWarn'))
return
}
const i = this.activeTaskInfo.visitTaskIndex const i = this.activeTaskInfo.visitTaskIndex
if (i < 0) return if (i < 0) return
if (this.studyList.length > 0) { if (this.studyList.length > 0) {

View File

@ -828,7 +828,7 @@ export default {
// 10mm2线 // 10mm2线
// 15mm2线 // 15mm2线
var picturePath = '' var picturePath = ''
if (val && otherMeasureData) { if (val && otherMeasureData && this.questionForm.IsDicomReading) {
var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val) var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val)
picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : '' picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : ''
} }
@ -842,6 +842,7 @@ export default {
} }
} }
var params = { var params = {
computationTrigger: -3,
questionId: this.parentQsId, questionId: this.parentQsId,
rowId: this.questionForm.RowId, rowId: this.questionForm.RowId,
rowIndex: this.answers.RowIndex, rowIndex: this.answers.RowIndex,

View File

@ -1962,7 +1962,7 @@ export default {
// 10mm2线 // 10mm2线
// 15mm2线 // 15mm2线
var picturePath = '' var picturePath = ''
if (val && measureData) { if (val && measureData && this.questionForm.IsDicomReading) {
var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val) var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val)
picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : '' picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : ''
} }

View File

@ -267,7 +267,7 @@
</el-form> </el-form>
</template> </template>
<script> <script>
import { submitTableQuestion, deleteReadingRowAnswer } from '@/api/trials' import { submitTableQuestion, deleteReadingRowAnswer, getIsSuvMaxLesion } 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'
@ -1654,18 +1654,12 @@ export default {
} }
} }
} }
// DicomEvent.$emit('imageLocation', { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: this.lesionName, lesionType: this.lesionType }, () => {
// console.log(11111)
// })
// await DicomEvent.$emit('imageLocation', { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: this.lesionName, lesionType: this.lesionType })
// console.log(5555)
DicomEvent.$emit('getScreenshots', { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: this.lesionMark, lesionType: this.lesionType }, async val => { DicomEvent.$emit('getScreenshots', { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: this.lesionMark, lesionType: this.lesionType }, async val => {
// 0线 // 0线
// 10mm2线 // 10mm2线
// 15mm2线 // 15mm2线
var picturePath = '' var picturePath = ''
if (val && measureData) { if (val && measureData && this.questionForm.IsDicomReading) {
var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val) var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val)
picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : '' picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : ''
} }
@ -1680,6 +1674,7 @@ export default {
} }
var params = { var params = {
computationTrigger: -2,
questionId: this.parentQsId, questionId: this.parentQsId,
rowId: this.questionForm.RowId, rowId: this.questionForm.RowId,
rowIndex: this.answers.RowIndex, rowIndex: this.answers.RowIndex,
@ -1789,9 +1784,19 @@ export default {
}) })
.catch(() => {}) .catch(() => {})
}, },
handleDelete() { async handleDelete() {
let message = this.$t('trials:reading:warnning:msg48')
// suvmax
const suvMax = this.getQuestionVal(20)
if (this.questionForm.RowId && !!suvMax) {
const res = await getIsSuvMaxLesion({ visitTaskId: this.visitTaskId, rowId: this.questionForm.RowId })
if (res.IsSuccess && res.Result.IsSuvMaxLesion) {
message = this.$t('trials:reading:warnning:msg58')
}
}
// //
this.$confirm(this.$t('trials:reading:warnning:msg48'), { this.$confirm(message, {
type: 'warning', type: 'warning',
distinguishCancelAndClose: true distinguishCancelAndClose: true
}) })

View File

@ -73,6 +73,7 @@
v-else-if="question.Type==='input'" v-else-if="question.Type==='input'"
v-model="questionForm[question.Id]" v-model="questionForm[question.Id]"
:disabled="readingTaskState >= 2 || isFirstChangeTask" :disabled="readingTaskState >= 2 || isFirstChangeTask"
@change="((val)=>{formItemChange(val, question)})"
/> />
<!-- 多行文本输入框 --> <!-- 多行文本输入框 -->
<el-input <el-input
@ -81,6 +82,7 @@
type="textarea" type="textarea"
:autosize="{ minRows: 2, maxRows: 4}" :autosize="{ minRows: 2, maxRows: 4}"
:disabled="readingTaskState >= 2 || isFirstChangeTask" :disabled="readingTaskState >= 2 || isFirstChangeTask"
@change="((val)=>{formItemChange(val, question)})"
/> />
<!-- 下拉框 --> <!-- 下拉框 -->
<el-select <el-select

View File

@ -30,7 +30,7 @@
<script> <script>
// import { uploadPrintscreen } from '@/api/reading' // import { uploadPrintscreen } from '@/api/reading'
import { saveTaskQuestion, getSplenicState, getSplenicVerify } from '@/api/trials' import { saveTaskQuestion, getSplenicState, getSplenicVerify, getCanChooseNotMerge } from '@/api/trials'
import QuestionItem from './QuestionItem' import QuestionItem from './QuestionItem'
import DicomEvent from './DicomEvent' import DicomEvent from './DicomEvent'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
@ -74,6 +74,7 @@ export default {
readingTaskState: 2, readingTaskState: 2,
visitTaskId: '', visitTaskId: '',
imageQualityId: '', imageQualityId: '',
imageQualityIssuesId: '',
measurements: [], measurements: [],
spleenStatusId: '', spleenStatusId: '',
spleenLengthId: '', spleenLengthId: '',
@ -180,6 +181,11 @@ export default {
this.imageQualityId = v.Id this.imageQualityId = v.Id
// store.dispatch('reading/setImageQuality', v.Answer ? v.Answer : null) // store.dispatch('reading/setImageQuality', v.Answer ? v.Answer : null)
} }
if (v.QuestionType === 67) {
//
this.imageQualityIssuesId = v.Id
}
if (v.QuestionType === 49) { if (v.QuestionType === 49) {
// //
this.spleenStatusId = v.Id this.spleenStatusId = v.Id
@ -208,7 +214,9 @@ export default {
} }
// this.questions = questions // this.questions = questions
} }
if (this.imageQualityIssuesId) {
store.dispatch('reading/setImageQualityIssues', this.questionForm[this.imageQualityIssuesId])
}
if (this.spleenLengthId && this.spleenInfo && this.readingTaskState < 2) { if (this.spleenLengthId && this.spleenInfo && this.readingTaskState < 2) {
this.calculateSpleenStatus = this.setSpleenStatus(this.questionForm[this.spleenLengthId]) this.calculateSpleenStatus = this.setSpleenStatus(this.questionForm[this.spleenLengthId])
this.setSpleenCommentDisplay() this.setSpleenCommentDisplay()
@ -225,6 +233,10 @@ export default {
this.imageQualityId = i.Id this.imageQualityId = i.Id
// store.dispatch('reading/setImageQuality', i.Answer ? i.Answer : null) // store.dispatch('reading/setImageQuality', i.Answer ? i.Answer : null)
} }
if (i.QuestionType === 67) {
//
this.imageQualityIssuesId = i.Id
}
if (i.QuestionType === 49) { if (i.QuestionType === 49) {
// //
this.spleenStatusId = i.Id this.spleenStatusId = i.Id
@ -257,7 +269,6 @@ 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.groupClassify === 3) {
// //
@ -296,6 +307,15 @@ export default {
} else { } else {
this.saveQuestionsList() this.saveQuestionsList()
} }
} else if (this.criterionType === 2 && this.groupClassify === 1 && this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) {
// PET-CT
const res = await getCanChooseNotMerge({ visitTaskId: this.visitTaskId })
if (res.IsSuccess && !res.Result.IsCanChooseNotMerge) {
this.$alert(this.$t('trials:lugano:saveQuestions:warning1'))
return
} else {
this.saveQuestionsList()
}
} else { } else {
this.saveQuestionsList() this.saveQuestionsList()
} }
@ -330,6 +350,12 @@ export default {
// } // }
saveTaskQuestion(this.questionType, params).then(async res => { saveTaskQuestion(this.questionType, params).then(async res => {
if (this.imageQualityIssuesId) {
store.dispatch('reading/setImageQualityIssues', this.questionForm[this.imageQualityIssuesId])
if (this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) {
DicomEvent.$emit('closePetct')
}
}
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$message.success(this.$t('common:message:savedSuccessfully'))
var trialId = this.$route.query.trialId var trialId = this.$route.query.trialId
await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: trialId, visitTaskId: this.visitTaskId }) await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: trialId, visitTaskId: this.visitTaskId })

View File

@ -1325,7 +1325,7 @@ export default {
// 15mm2线 // 15mm2线
var picturePath = '' var picturePath = ''
if (val && measureData) { if (val && measureData && this.questionForm.IsDicomReading) {
var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val) var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val)
picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : '' picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : ''

View File

@ -972,7 +972,7 @@ export default {
DicomEvent.$emit('getScreenshots', { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: this.lesionMark, lesionType: this.lesionType }, async val => { DicomEvent.$emit('getScreenshots', { questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex, visitTaskId: this.visitTaskId, lesionName: this.lesionMark, lesionType: this.lesionType }, async val => {
var picturePath = '' var picturePath = ''
if (val && measureData) { if (val && measureData && this.questionForm.IsDicomReading) {
var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val) var pictureObj = await this.uploadScreenshots(`${new Date().getTime()}`, val)
picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : '' picturePath = pictureObj.isSuccess ? this.$getObjectName(pictureObj.result.url) : ''
} }