wangxiaoshuang 2024-07-17 15:58:45 +08:00
commit 75efdcf0f7
9 changed files with 1836 additions and 1738 deletions

View File

@ -187,3 +187,10 @@ export function setSkipReadingCache(param) {
data: param data: param
}) })
} }
export function resetReadingTask(param) {
return request({
url: `/ReadingImageTask/resetReadingTask`,
method: 'post',
data: param
})
}

View File

@ -7,7 +7,7 @@
{{ language==='en'?question.GroupEnName:question.GroupName }} {{ language==='en'?question.GroupEnName:question.GroupName }}
</h4> </h4>
</div> </div>
<template v-else-if="((question.QuestionType === 56 || question.QuestionType === 57) && question.IsBaseLineTask)" /> <template v-else-if="((question.QuestionType === 56) && question.IsBaseLineTask)" />
<template v-else> <template v-else>
<el-form-item <el-form-item
v-if="(question.ShowQuestion===1 && question.ParentTriggerValueList.includes(String(questionForm[question.ParentId]))) || question.ShowQuestion===0" v-if="(question.ShowQuestion===1 && question.ParentTriggerValueList.includes(String(questionForm[question.ParentId]))) || question.ShowQuestion===0"
@ -286,7 +286,7 @@
:reading-task-state="readingTaskState" :reading-task-state="readingTaskState"
:question-form="questionForm" :question-form="questionForm"
:visit-task-id="visitTaskId" :visit-task-id="visitTaskId"
:pet5PS="pet5PS" :pet5p-s="pet5PS"
:lung-is-inside-volume="lungIsInsideVolume" :lung-is-inside-volume="lungIsInsideVolume"
:liver-is-inside-volume="liverIsInsideVolume" :liver-is-inside-volume="liverIsInsideVolume"
@setFormItemData="setFormItemData" @setFormItemData="setFormItemData"
@ -333,7 +333,7 @@ export default {
pet5PS: { pet5PS: {
type: String, type: String,
default: '' default: ''
}, }
}, },
data() { data() {
return { return {

View File

@ -2,10 +2,20 @@
<div class="measurement-wrapper" :style="{'height':height+10+'px'}"> <div class="measurement-wrapper" :style="{'height':height+10+'px'}">
<div class="container" :style="{'height':height+'px'}"> <div class="container" :style="{'height':height+'px'}">
<h3 v-if="isReadingShowSubjectInfo" style="color: #ddd;padding: 5px 0px;margin: 0;"> <div class="basic-info">
<span v-if="subjectCode">{{ subjectCode }} </span> <h3 v-if="isReadingShowSubjectInfo">
<span style="margin-left:5px;">{{ taskBlindName }}</span> <span v-if="subjectCode">{{ subjectCode }} </span>
</h3> <span style="margin-left:5px;">{{ taskBlindName }}</span>
</h3>
<div v-if="readingTaskState < 2">
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
<i
class="el-icon-refresh-left"
@click="resetMeasuredData"
/>
</el-tooltip>
</div>
</div>
<!-- 非测量问题 --> <!-- 非测量问题 -->
<div class="lesions"> <div class="lesions">
<Questions <Questions
@ -157,6 +167,7 @@
</template> </template>
<script> <script>
import { splitLesion } from '@/api/trials' import { splitLesion } from '@/api/trials'
import { resetReadingTask } from '@/api/reading'
import DicomEvent from './../DicomEvent' import DicomEvent from './../DicomEvent'
import store from '@/store' import store from '@/store'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
@ -1068,6 +1079,36 @@ export default {
getECRFQuestions(obj) { getECRFQuestions(obj) {
this.$refs['ecrf'].getQuestions(obj.visitTaskId) this.$refs['ecrf'].getQuestions(obj.visitTaskId)
}, },
async resetMeasuredData() {
try {
const confirm = await this.$confirm(
this.$t('trials:dicomReading:message:confirmReset1'),
this.$t('trials:dicomReading:message:confirmReset2'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await resetReadingTask({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
//
this.activeName = ''
this.activeItem.activeRowIndex = null
this.activeItem.activeCollapseId = null
await this.getReadingQuestionAndAnswer(this.visitTaskId)
this.$refs['ecrf'].resetQSForm()
DicomEvent.$emit('getMeasureData')
DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('refreshStudyListMeasureData')
}
} catch (e) {
this.loading = false
console.log(e)
}
},
receiveMsg(event) { receiveMsg(event) {
if (event.data.type === 'isCanActiveNoneDicomTool') { if (event.data.type === 'isCanActiveNoneDicomTool') {
this.getUnSaveTarget() this.getUnSaveTarget()
@ -1140,6 +1181,22 @@ export default {
.container{ .container{
padding: 10px; padding: 10px;
.basic-info{
display: flex;
justify-content: space-between;
align-items: center;
h3{
color: #ddd;
padding: 5px 0px;
margin: 0;
}
i{
color: #fff;
font-size: 22px;
font-weight: bold;
cursor: pointer;
}
}
} }
.title{ .title{
padding: 5px; padding: 5px;

View File

@ -390,6 +390,18 @@ export default {
this.loading = false this.loading = false
}) })
}, },
async resetQSForm() {
try {
this.loading = true
var trialId = this.$route.query.trialId
await store.dispatch('reading/refreshDicomReadingQuestionAnswer', { trialId: trialId, visitTaskId: this.visitTaskId })
this.getQuestions(this.visitTaskId, true)
this.loading = false
} catch(e) {
this.loading = false
}
},
checkAnnotationStatus(obj) { checkAnnotationStatus(obj) {
for (let i = 0; i < obj.length; i++) { for (let i = 0; i < obj.length; i++) {
if (obj[i].SaveEnum === 1) { if (obj[i].SaveEnum === 1) {

View File

@ -2,10 +2,21 @@
<div class="measurement-wrapper" :style="{'height':height+10+'px'}"> <div class="measurement-wrapper" :style="{'height':height+10+'px'}">
<div class="container" :style="{'height':height+'px'}"> <div class="container" :style="{'height':height+'px'}">
<h3 v-if="isReadingShowSubjectInfo" style="color: #ddd;padding: 5px 0px;margin: 0;"> <div class="basic-info">
<span v-if="subjectCode">{{ subjectCode }} </span> <h3 v-if="isReadingShowSubjectInfo">
<span style="margin-left:5px;">{{ taskBlindName }}</span> <span v-if="subjectCode">{{ subjectCode }} </span>
</h3> <span style="margin-left:5px;">{{ taskBlindName }}</span>
</h3>
<div v-if="readingTaskState < 2">
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
<i
class="el-icon-refresh-left"
@click="resetMeasuredData"
/>
</el-tooltip>
</div>
</div>
<!-- 非测量问题 --> <!-- 非测量问题 -->
<div class="lesions"> <div class="lesions">
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum" /> <Questions ref="ecrf" :question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum" />
@ -122,6 +133,7 @@
</template> </template>
<script> <script>
import { splitLesion } from '@/api/trials' import { splitLesion } from '@/api/trials'
import { resetReadingTask } from '@/api/reading'
import DicomEvent from './../DicomEvent' import DicomEvent from './../DicomEvent'
import store from '@/store' import store from '@/store'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
@ -943,6 +955,36 @@ export default {
getECRFQuestions(obj) { getECRFQuestions(obj) {
this.$refs['ecrf'].getQuestions(obj.visitTaskId) this.$refs['ecrf'].getQuestions(obj.visitTaskId)
}, },
async resetMeasuredData() {
try {
const confirm = await this.$confirm(
this.$t('trials:dicomReading:message:confirmReset1'),
this.$t('trials:dicomReading:message:confirmReset2'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await resetReadingTask({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
//
this.activeName = ''
this.activeItem.activeRowIndex = null
this.activeItem.activeCollapseId = null
await this.getReadingQuestionAndAnswer(this.visitTaskId)
this.$refs['ecrf'].resetQSForm()
DicomEvent.$emit('getMeasureData')
DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('refreshStudyListMeasureData')
}
} catch (e) {
this.loading = false
console.log(e)
}
},
receiveMsg(event) { receiveMsg(event) {
if (event.data.type === 'isCanActiveNoneDicomTool') { if (event.data.type === 'isCanActiveNoneDicomTool') {
this.getUnSaveTarget() this.getUnSaveTarget()
@ -1021,6 +1063,22 @@ export default {
.container{ .container{
padding: 10px; padding: 10px;
.basic-info{
display: flex;
justify-content: space-between;
align-items: center;
h3{
color: #ddd;
padding: 5px 0px;
margin: 0;
}
i{
color: #fff;
font-size: 22px;
font-weight: bold;
cursor: pointer;
}
}
} }
.title{ .title{
padding: 5px; padding: 5px;

View File

@ -110,34 +110,38 @@
/> />
</template> </template>
<template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask"> <template v-else-if="qs.DictionaryCode && qs.QuestionMark === 7 && !isBaseLineTask">
<!-- 首次分裂的病灶只能选择存在 --> <el-option-group
<template v-if="answers.IsFristAdd=== 'True' && answers.SplitOrMergeType === '0'"> :label="!isNaN(parseFloat(answers.LastTaskState)) ? `${$t('trials:dicomReading:tip:lastVisitStatus')} ${$fd(qs.DictionaryCode,parseFloat(answers.LastTaskState))}` : ''"
<el-option >
v-for="item of $d[qs.DictionaryCode]" <!-- 首次分裂的病灶只能选择存在 -->
v-show="item.value === 0" <template v-if="answers.IsFristAdd=== 'True' && answers.SplitOrMergeType === '0'">
:key="item.id" <el-option
:value="item.value" v-for="item of $d[qs.DictionaryCode]"
:label="item.label" v-show="item.value === 0"
/> :key="item.id"
</template> :value="item.value"
<!-- 首次添加的新病灶不能为无法评估和消失 --> :label="item.label"
<template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2"> />
<el-option </template>
v-for="item of $d[qs.DictionaryCode]" <!-- 首次添加的新病灶不能为无法评估和消失 -->
v-show="item.value === 0 || item.value === 1" <template v-else-if="isCurrentTaskAdd=== 'True' && lesionType === 2">
:key="item.id" <el-option
:value="item.value" v-for="item of $d[qs.DictionaryCode]"
:label="item.label" v-show="item.value === 0 || item.value === 1"
/> :key="item.id"
</template> :value="item.value"
<template v-else> :label="item.label"
<el-option />
v-for="item of filterState($d[qs.DictionaryCode])" </template>
:key="item.id" <template v-else>
:value="item.value" <el-option
:label="item.label" v-for="item of filterState($d[qs.DictionaryCode])"
/> :key="item.id"
</template> :value="item.value"
:label="item.label"
/>
</template>
</el-option-group>
</template> </template>
<template v-else-if="qs.DictionaryCode && qs.QuestionMark !== 7"> <template v-else-if="qs.DictionaryCode && qs.QuestionMark !== 7">
<el-option <el-option

View File

@ -2,10 +2,20 @@
<div class="measurement-wrapper" :style="{'height':height+10+'px'}"> <div class="measurement-wrapper" :style="{'height':height+10+'px'}">
<div class="container" :style="{'height':height+'px'}"> <div class="container" :style="{'height':height+'px'}">
<h3 v-if="isReadingShowSubjectInfo" style="color: #ddd;padding: 5px 0px;margin: 0;"> <div class="basic-info">
<span v-if="subjectCode">{{ subjectCode }} </span> <h3 v-if="isReadingShowSubjectInfo">
<span style="margin-left:5px;">{{ taskBlindName }}</span> <span v-if="subjectCode">{{ subjectCode }} </span>
</h3> <span style="margin-left:5px;">{{ taskBlindName }}</span>
</h3>
<div v-if="readingTaskState < 2">
<el-tooltip class="item" effect="dark" :content="$t('trials:dicomReading:message:confirmReset')" placement="bottom">
<i
class="el-icon-refresh-left"
@click="resetMeasuredData"
/>
</el-tooltip>
</div>
</div>
<!-- 非测量问题 --> <!-- 非测量问题 -->
<div class="lesions"> <div class="lesions">
<Questions ref="ecrf" :question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum" /> <Questions ref="ecrf" :question-form-change-state="questionFormChangeState" :question-form-change-num="questionFormChangeNum" />
@ -118,6 +128,7 @@
</template> </template>
<script> <script>
import { splitLesion } from '@/api/trials' import { splitLesion } from '@/api/trials'
import { resetReadingTask } from '@/api/reading'
import DicomEvent from './../DicomEvent' import DicomEvent from './../DicomEvent'
import store from '@/store' import store from '@/store'
@ -880,6 +891,36 @@ export default {
getECRFQuestions(obj) { getECRFQuestions(obj) {
this.$refs['ecrf'].getQuestions(obj.visitTaskId) this.$refs['ecrf'].getQuestions(obj.visitTaskId)
}, },
async resetMeasuredData() {
try {
const confirm = await this.$confirm(
this.$t('trials:dicomReading:message:confirmReset1'),
this.$t('trials:dicomReading:message:confirmReset2'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await resetReadingTask({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
//
this.activeName = ''
this.activeItem.activeRowIndex = null
this.activeItem.activeCollapseId = null
await this.getReadingQuestionAndAnswer(this.visitTaskId)
this.$refs['ecrf'].resetQSForm()
DicomEvent.$emit('getMeasureData')
DicomEvent.$emit('getReportInfo', true)
DicomEvent.$emit('refreshStudyListMeasureData')
}
} catch (e) {
this.loading = false
console.log(e)
}
},
receiveMsg(event) { receiveMsg(event) {
if (event.data.type === 'isCanActiveNoneDicomTool') { if (event.data.type === 'isCanActiveNoneDicomTool') {
this.getUnSaveTarget() this.getUnSaveTarget()