IVUS & OCT标准更改
continuous-integration/drone/push Build is passing Details

uat
caiyiling 2026-08-05 09:08:46 +08:00
parent c53890add7
commit 9256970662
4 changed files with 170 additions and 103 deletions

View File

@ -189,11 +189,22 @@
</template> </template>
<!-- 计算值 --> <!-- 计算值 -->
<Questions ref="ecrf2" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false" <Questions
:group-classify="4" style="margin-top:20px" /> ref="ecrf2"
:question-form-change-state="true"
:question-form-change-num="0"
:is-qulity-issues="false"
:group-classify="4"
:question-type="12"
style="margin-top:20px" />
<!-- 评估结果 --> <!-- 评估结果 -->
<Questions ref="ecrf3" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false" <Questions
ref="ecrf3"
:question-form-change-state="true"
:question-form-change-num="0"
:is-qulity-issues="false"
:question-type="12"
:group-classify="5" /> :group-classify="5" />
<!-- 新增编辑弹窗 --> <!-- 新增编辑弹窗 -->
<el-dialog v-if="addOrEdit.visible" :visible.sync="addOrEdit.visible" :close-on-click-modal="false" <el-dialog v-if="addOrEdit.visible" :visible.sync="addOrEdit.visible" :close-on-click-modal="false"
@ -622,7 +633,7 @@ export default {
return v return v
} }
}, },
async handleSave(index) { async handleSave(index, options = {}) {
if (this.rowSaveLoadingMap[index]) return if (this.rowSaveLoadingMap[index]) return
const refName = `questions${index}` const refName = `questions${index}`
this.$set(this.rowSaveLoadingMap, index, true) this.$set(this.rowSaveLoadingMap, index, true)
@ -640,9 +651,13 @@ export default {
answers: answers answers: answers
} }
await saveTaskQuestion(12, params) await saveTaskQuestion(12, params)
this.$message.success(this.$t('common:message:savedSuccessfully')) if (!options.silentSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
}
DicomEvent.$emit('getReportInfo', true) DicomEvent.$emit('getReportInfo', true)
this.refreshQuestions() if (!options.skipRefresh) {
await this.refreshQuestions()
}
this.formChanged = false this.formChanged = false
} catch (e) { } catch (e) {
console.log(e) console.log(e)
@ -858,9 +873,23 @@ export default {
} }
}, },
async uploadDlgClose() { async uploadDlgClose() {
this.refreshQuestions() try {
DicomEvent.$emit('getReportInfo', true) await this.refreshQuestions()
this.upload.visible = false const saveTasks = []
for (let index = 0; index < this.questions.length; index++) {
const qs = this.questions[index]
if (qs.GroupClassify === 6) {
saveTasks.push(() => this.handleSave(index, { silentSuccess: true, skipRefresh: true }))
}
}
saveTasks.push(() => this.$refs['ecrf2'] && this.$refs['ecrf2'].handleSave({ silentSuccess: true, skipRefresh: true }))
saveTasks.push(() => this.$refs['ecrf3'] && this.$refs['ecrf3'].handleSave({ silentSuccess: true, skipRefresh: true }))
await Promise.allSettled(saveTasks.map(saveTask => saveTask()))
} catch (e) {
console.log(e)
} finally {
this.upload.visible = false
}
}, },
renderHeader(h, { column, $index }) { renderHeader(h, { column, $index }) {
const span = document.createElement('span') const span = document.createElement('span')

View File

@ -189,11 +189,22 @@
</template> </template>
<!-- 计算值 --> <!-- 计算值 -->
<Questions ref="ecrf2" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false" <Questions
:group-classify="4" style="margin-top:20px" /> ref="ecrf2"
:question-form-change-state="true"
:question-form-change-num="0"
:is-qulity-issues="false"
:group-classify="4"
:question-type="12"
style="margin-top:20px" />
<!-- 评估结果 --> <!-- 评估结果 -->
<Questions ref="ecrf3" :question-form-change-state="true" :question-form-change-num="0" :is-qulity-issues="false" <Questions
ref="ecrf3"
:question-form-change-state="true"
:question-form-change-num="0"
:is-qulity-issues="false"
:question-type="12"
:group-classify="5" /> :group-classify="5" />
<el-dialog v-if="addOrEdit.visible" :visible.sync="addOrEdit.visible" :close-on-click-modal="false" <el-dialog v-if="addOrEdit.visible" :visible.sync="addOrEdit.visible" :close-on-click-modal="false"
:title="addOrEdit.title" width="500px"> :title="addOrEdit.title" width="500px">
@ -617,7 +628,7 @@ export default {
return v return v
} }
}, },
async handleSave(index) { async handleSave(index, options = {}) {
if (this.rowSaveLoadingMap[index]) return if (this.rowSaveLoadingMap[index]) return
const refName = `questions${index}` const refName = `questions${index}`
this.$set(this.rowSaveLoadingMap, index, true) this.$set(this.rowSaveLoadingMap, index, true)
@ -635,9 +646,13 @@ export default {
answers: answers answers: answers
} }
await saveTaskQuestion(12, params) await saveTaskQuestion(12, params)
this.$message.success(this.$t('common:message:savedSuccessfully')) if (!options.silentSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
}
DicomEvent.$emit('getReportInfo', true) DicomEvent.$emit('getReportInfo', true)
this.refreshQuestions() if (!options.skipRefresh) {
await this.refreshQuestions()
}
this.formChanged = false this.formChanged = false
} catch (e) { } catch (e) {
console.log(e) console.log(e)
@ -884,9 +899,23 @@ export default {
} }
}, },
async uploadDlgClose() { async uploadDlgClose() {
this.refreshQuestions() try {
DicomEvent.$emit('getReportInfo', true) await this.refreshQuestions()
this.upload.visible = false const saveTasks = []
for (let index = 0; index < this.questions.length; index++) {
const qs = this.questions[index]
if (qs.GroupClassify === 6) {
saveTasks.push(() => this.handleSave(index, { silentSuccess: true, skipRefresh: true }))
}
}
saveTasks.push(() => this.$refs['ecrf2'] && this.$refs['ecrf2'].handleSave({ silentSuccess: true, skipRefresh: true }))
saveTasks.push(() => this.$refs['ecrf3'] && this.$refs['ecrf3'].handleSave({ silentSuccess: true, skipRefresh: true }))
await Promise.allSettled(saveTasks.map(saveTask => saveTask()))
} catch (e) {
console.log(e)
} finally {
this.upload.visible = false
}
}, },
renderHeader(h, { column, $index }) { renderHeader(h, { column, $index }) {
const span = document.createElement('span') const span = document.createElement('span')

View File

@ -279,84 +279,86 @@ export default {
}) })
}, },
handleSave() { async handleSave(options = {}) {
if (this.saveLoading) return if (this.saveLoading) return false
this.saveLoading = true this.saveLoading = true
this.$refs['questions'].validate(async (valid) => { const valid = await new Promise(resolve => {
if (!valid) { this.$refs['questions'].validate(v => resolve(v))
this.saveLoading = false
return
}
// lugano
if ((this.criterionType === 2 || this.criterionType === 18) && this.groupClassify === 3) {
//
var existUnSave = this.checkAnnotationStatus(this.questions)
if (existUnSave) {
this.$alert(this.$t('trials:lugano:message:saveWarning'), this.$t('trials:lugano:fusionDialog:warning'))
this.saveLoading = false
return
}
var currentSpleenStatus = this.questionForm[this.spleenStatusId]
var currentSpleenLength = this.questionForm[this.spleenLengthId]
currentSpleenStatus = isNaN(parseInt(currentSpleenStatus)) ? null : parseInt(currentSpleenStatus)
var stIdx = this.measurements.findIndex(i => i.QuestionType === 60)
var slIdx = this.measurements.findIndex(i => i.QuestionType === 61)
if (currentSpleenLength && currentSpleenStatus === 5) {
// '!'
this.$alert(this.$t('trials:lugano:message:validSpleen1'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => { }
})
this.saveLoading = false
} 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: _ => { }
})
this.saveLoading = false
} 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: _ => { }
})
this.saveLoading = false
} else {
this.saveQuestionsList()
}
} else if ((this.criterionType === 2 || this.criterionType === 18) && this.groupClassify === 1 && this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) {
// PET-CT
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 => { }
})
this.saveLoading = false
return
} else {
// PET-CTFDG-PETNE
this.$confirm(this.$t('trials:lugano:saveQuestions:warning2'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
this.saveQuestionsList()
})
}
} else {
this.saveQuestionsList()
}
// this.saveQuestionsList()
}) })
if (!valid) {
this.saveLoading = false
return false
}
// lugano
if ((this.criterionType === 2 || this.criterionType === 18) && this.groupClassify === 3) {
//
var existUnSave = this.checkAnnotationStatus(this.questions)
if (existUnSave) {
await this.$alert(this.$t('trials:lugano:message:saveWarning'), this.$t('trials:lugano:fusionDialog:warning'))
this.saveLoading = false
return false
}
var currentSpleenStatus = this.questionForm[this.spleenStatusId]
var currentSpleenLength = this.questionForm[this.spleenLengthId]
currentSpleenStatus = isNaN(parseInt(currentSpleenStatus)) ? null : parseInt(currentSpleenStatus)
var stIdx = this.measurements.findIndex(i => i.QuestionType === 60)
var slIdx = this.measurements.findIndex(i => i.QuestionType === 61)
if (currentSpleenLength && currentSpleenStatus === 5) {
// '!'
await this.$alert(this.$t('trials:lugano:message:validSpleen1'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => { }
})
this.saveLoading = false
return false
} else if (currentSpleenStatus === 5 && ((stIdx > -1 && this.measurements[stIdx].MeasureData) || (slIdx > -1 && this.measurements[slIdx].MeasureData))) {
//
await this.$alert(this.$t('trials:lugano:message:validSpleen1'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => { }
})
this.saveLoading = false
return false
} else if (((stIdx > -1 && this.measurements[stIdx].MeasureData) || (slIdx > -1 && this.measurements[slIdx].MeasureData)) && !currentSpleenLength) {
await this.$alert(this.$t('trials:lugano:message:validSpleen2'), this.$t('trials:lugano:fusionDialog:warning'), {
callback: _ => { }
})
this.saveLoading = false
return false
}
return await this.saveQuestionsList(options)
} else if ((this.criterionType === 2 || this.criterionType === 18) && this.groupClassify === 1 && this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) {
// PET-CT
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) {
await this.$alert(this.$t('trials:lugano:saveQuestions:warning1'), this.$t('trials:lugano:fusionDialog:warning'), {
showCancelButton: false,
callback: action => { }
})
this.saveLoading = false
return false
}
// PET-CTFDG-PETNE
const confirm = await this.$confirm(this.$t('trials:lugano:saveQuestions:warning2'), {
type: 'warning',
distinguishCancelAndClose: true
}).then(() => true).catch(() => false)
if (!confirm) {
this.saveLoading = false
return false
}
return await this.saveQuestionsList(options)
} else {
return await this.saveQuestionsList(options)
}
}, },
async saveQuestionsList() { async saveQuestionsList(options = {}) {
this.loading = true this.loading = true
var answers = [] var answers = []
var imageQuality = null var imageQuality = null
@ -382,18 +384,22 @@ export default {
// }) // })
// params.questionMarkInfoList = questionMarkInfoList // params.questionMarkInfoList = questionMarkInfoList
// } // }
try {
saveTaskQuestion(this.questionType, params).then(async res => { const res = await saveTaskQuestion(this.questionType, params)
if (this.imageQualityIssuesId) { if (this.imageQualityIssuesId) {
store.dispatch('reading/setImageQualityIssues', this.questionForm[this.imageQualityIssuesId]) store.dispatch('reading/setImageQualityIssues', this.questionForm[this.imageQualityIssuesId])
if (this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) { if (this.questionForm[this.imageQualityIssuesId] && parseInt(this.questionForm[this.imageQualityIssuesId]) === 6) {
DicomEvent.$emit('closePetct') DicomEvent.$emit('closePetct')
} }
} }
this.$message.success(this.$t('common:message:savedSuccessfully')) if (!options.silentSuccess) {
var trialId = this.$route.query.trialId this.$message.success(this.$t('common:message:savedSuccessfully'))
await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: trialId, visitTaskId: this.visitTaskId }) }
this.getQuestions(this.visitTaskId, true) if (!options.skipRefresh) {
var trialId = this.$route.query.trialId
await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: trialId, visitTaskId: this.visitTaskId })
this.getQuestions(this.visitTaskId, true)
}
this.loading = false this.loading = false
if (this.isQulityIssues) { if (this.isQulityIssues) {
DicomEvent.$emit('questionFormChange', false) DicomEvent.$emit('questionFormChange', false)
@ -417,10 +423,12 @@ export default {
} }
this.formChanged = false this.formChanged = false
this.saveLoading = false this.saveLoading = false
}).catch(() => { return res
} catch (e) {
this.loading = false this.loading = false
this.saveLoading = false this.saveLoading = false
}) throw e
}
}, },
checkAnnotationStatus(obj) { checkAnnotationStatus(obj) {
for (let i = 0; i < obj.length; i++) { for (let i = 0; i < obj.length; i++) {

View File

@ -147,7 +147,7 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div style="text-align:right;margin-top: 10px;"> <div style="text-align:right;margin-top: 10px;" v-if="!IsViewStudyPart">
<!-- 确认 --> <!-- 确认 -->
<el-button type="primary" @click="handleConfirmBP">{{ $t('trials:reading:button:confirm') <el-button type="primary" @click="handleConfirmBP">{{ $t('trials:reading:button:confirm')
}}</el-button> }}</el-button>
@ -223,7 +223,8 @@ export default {
readingVersionEnum: null, readingVersionEnum: null,
dialogBodyPartVisible: false, dialogBodyPartVisible: false,
isReadKeyFile: true, isReadKeyFile: true,
isHaveKeyFile: false isHaveKeyFile: false,
IsViewStudyPart: true
} }
}, },
computed: { computed: {