影像质控风险管理
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-12-18 13:38:02 +08:00
parent 4e46bbac84
commit 363ffa58b3
4 changed files with 53 additions and 41 deletions

View File

@ -83,33 +83,36 @@
{{ item.description }} {{ item.description }}
</div> </div>
<div v-if="!item.keySeries" style="padding: 1px;"> <div v-if="!item.keySeries" style="padding: 1px;">
{{ series.imageloadedArr.length <= series.instanceCount ? series.imageloadedArr.length : series.instanceCount }}/{{ item.instanceCount }} {{ series.imageloadedArr.length <= series.instanceCount ? series.imageloadedArr.length :
series.instanceCount }}/{{ item.instanceCount }} </div>
</div> </div>
</div> </div>
</div> <div v-if="showDelete" style="display: flex;flex-direction: row;justify-content: space-between;"
<div v-if="showDelete" style="display: flex;flex-direction: row;justify-content: space-between;" @click.stop="">
@click.stop="">
<div> <div>
<span style="font-size: 12px;margin-right: 5px">{{ $t('trials:audit:table:isReading') <span style="font-size: 12px;margin-right: 5px">{{ $t('trials:audit:table:isReading')
}}</span> }}</span>
<el-switch v-model="item.isReading" size="mini" @change="changeReadingStatus($event, item)" /> <el-switch v-model="item.isReading" size="mini"
@change="changeReadingStatus($event, item)" />
</div>
<div>
<span style="font-size: 12px;margin-right: 5px">{{ $t('trials:audit:table:isDelete')
}}</span>
<el-switch v-model="item.isDeleted" size="mini"
@change="changeDeleteStatus($event, item)" />
</div>
</div> </div>
<div> <div
<span style="font-size: 12px;margin-right: 5px">{{ $t('trials:audit:table:isDelete') }}</span> v-if="item.prefetchInstanceCount > 0 && item.prefetchInstanceCount < item.instanceCount * 100">
<el-switch v-model="item.isDeleted" size="mini" @change="changeDeleteStatus($event, item)" /> <el-progress
:percentage="parseInt((item.prefetchInstanceCount / item.instanceCount).toFixed(2))" />
</div> </div>
</div>
<div
v-if="item.prefetchInstanceCount > 0 && item.prefetchInstanceCount < item.instanceCount * 100">
<el-progress
:percentage="parseInt((item.prefetchInstanceCount / item.instanceCount).toFixed(2))" />
</div>
</div>
</div> </div>
</div> </div>
</div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@ -891,6 +894,7 @@ export default {
// //
this.seriesList[seriesIndex].loadStatus = true this.seriesList[seriesIndex].loadStatus = true
workSpeedclose() workSpeedclose()
localStorage.setItem("QCRiskControl", 1)
if (!this.isFromCRCUpload) { if (!this.isFromCRCUpload) {
this.loadAllImages() this.loadAllImages()
} }

View File

@ -113,35 +113,35 @@
</div> </div>
</el-tooltip> </el-tooltip>
<div style="padding: 1px;"> <div style="padding: 1px;">
{{ series.imageloadedArr.length <= series.instanceCount ? series.imageloadedArr.length : series.instanceCount }}/{{ series.instanceCount }} {{ series.imageloadedArr.length <= series.instanceCount ? series.imageloadedArr.length :
series.instanceCount }}/{{ series.instanceCount }} </div>
<div />
</div> </div>
<div />
</div> </div>
</div> <div v-if="showDelete"
<div v-if="showDelete" style="display: flex;flex-direction: row;justify-content: space-between;" @click.stop="">
style="display: flex;flex-direction: row;justify-content: space-between;" @click.stop="">
<div> <div>
<span style="font-size: 12px;">{{ $t('trials:audit:table:isReading') }}</span> <span style="font-size: 12px;">{{ $t('trials:audit:table:isReading') }}</span>
<el-switch v-model="series.isReading" size="mini" <el-switch v-model="series.isReading" size="mini"
@change="changeReadingStatus($event, series)" /> @change="changeReadingStatus($event, series)" />
</div>
<div>
<span style="font-size: 12px;">{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch v-model="series.isDeleted" size="mini"
@change="changeDeleteStatus($event, series)" />
</div>
</div> </div>
<div> <!-- <div style="position: absolute;bottom: -10px;left: 0;width: 100%;">
<span style="font-size: 12px;">{{ $t('trials:audit:table:isDelete') }}</span>
<el-switch v-model="series.isDeleted" size="mini"
@change="changeDeleteStatus($event, series)" />
</div>
</div>
<!-- <div style="position: absolute;bottom: -10px;left: 0;width: 100%;">
<el-progress v-if="series.prefetchInstanceCount>0 && series.prefetchInstanceCount<series.instanceCount" :percentage="Number(series.prefetchInstanceCount/series.instanceCount)*100" /> <el-progress v-if="series.prefetchInstanceCount>0 && series.prefetchInstanceCount<series.instanceCount" :percentage="Number(series.prefetchInstanceCount/series.instanceCount)*100" />
</div> --> </div> -->
<div <div
v-if="series.prefetchInstanceCount > 0 && series.prefetchInstanceCount < series.instanceCount * 100"> v-if="series.prefetchInstanceCount > 0 && series.prefetchInstanceCount < series.instanceCount * 100">
<el-progress <el-progress
:percentage="parseInt((series.prefetchInstanceCount / series.instanceCount).toFixed(2))" /> :percentage="parseInt((series.prefetchInstanceCount / series.instanceCount).toFixed(2))" />
</div> </div>
</div> </div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
@ -937,6 +937,7 @@ export default {
this.loadAllImages() this.loadAllImages()
} }
workSpeedclose() workSpeedclose()
localStorage.setItem("QCRiskControl", 1)
} }
} }
} }

View File

@ -1100,6 +1100,8 @@ export default {
SecondReviewTime: '', SecondReviewTime: '',
IsSecondPass: false, IsSecondPass: false,
userId: zzSessionStorage.getItem('userId'), userId: zzSessionStorage.getItem('userId'),
QCRiskControl: false
} }
}, },
async mounted() { async mounted() {
@ -1314,6 +1316,7 @@ export default {
this.SecondReviewTime = this.secondReviewList[0].SecondReviewTime this.SecondReviewTime = this.secondReviewList[0].SecondReviewTime
} }
} }
this.QCRiskControl = res.Result.QCRiskControl
this.existsManual = res.Result.ExistsManual this.existsManual = res.Result.ExistsManual
this.qCQuestionAnswerList = res.Result.QCQuestionAnswerList this.qCQuestionAnswerList = res.Result.QCQuestionAnswerList
this.IsHaveStudyClinicalData = res.Result.IsHaveStudyClinicalData this.IsHaveStudyClinicalData = res.Result.IsHaveStudyClinicalData
@ -1929,6 +1932,7 @@ export default {
this.auditState = auditState this.auditState = auditState
return return
} }
if (localStorage.getItem('QCRiskControl') <= 0 && this.QCRiskControl) return this.$confirm(this.$t('trials:qcQuality:title:noViewImage'))
if (auditState === 8) { if (auditState === 8) {
var isgo = true var isgo = true
var hasStudyName = true, var hasStudyName = true,
@ -2421,6 +2425,7 @@ export default {
if (this.open) { if (this.open) {
this.open.close() this.open.close()
} }
localStorage.setItem("QCRiskControl", 1)
// this.previewAllNoneDicomVisible = true // this.previewAllNoneDicomVisible = true
let trialId = this.$route.query.trialId let trialId = this.$route.query.trialId
var token = getToken() var token = getToken()
@ -2438,6 +2443,7 @@ export default {
if (this.open) { if (this.open) {
this.open.close() this.open.close()
} }
localStorage.setItem("QCRiskControl", 1)
let trialId = this.$route.query.trialId let trialId = this.$route.query.trialId
var token = getToken() var token = getToken()
const routeData = this.$router.resolve({ const routeData = this.$router.resolve({

View File

@ -880,6 +880,7 @@ export default {
// //
handlePrimaryQC(row) { handlePrimaryQC(row) {
if (!this.OtherInfo.IsQCQuestionConfirmed) return this.$alert(this.$t("trials:qcCheck:alert:questionNoConfirm")) if (!this.OtherInfo.IsQCQuestionConfirmed) return this.$alert(this.$t("trials:qcCheck:alert:questionNoConfirm"))
localStorage.setItem("QCRiskControl", 0)
this.loading = true this.loading = true
isQCCanOpt(row.Id) isQCCanOpt(row.Id)
.then((res) => { .then((res) => {