部分问题修复
continuous-integration/drone/push Build encountered an error Details

uat
wangxiaoshuang 2025-07-16 16:58:38 +08:00
parent 33a8d8743e
commit f8b4dd70c8
8 changed files with 148 additions and 201 deletions

View File

@ -245,13 +245,13 @@ export default {
if (this.IsDicom) { if (this.IsDicom) {
var token = getToken() var token = getToken()
routeData = this.$router.resolve({ routeData = this.$router.resolve({
path: `/showdicom?studyId=${row.Id}&TokenKey=${token}&type=Study&visitTaskId=${this.visitTaskId}`, path: `/showdicom?studyId=${row.Id}&TokenKey=${token}&type=Study&visitTaskId=${this.visitTaskId}&isReading=true`,
}) })
} else { } else {
let trialId = this.$route.query.trialId let trialId = this.$route.query.trialId
var token = getToken() var token = getToken()
routeData = this.$router.resolve({ routeData = this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&studyId=${row.Id}&TokenKey=${token}`, path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&studyId=${row.Id}&TokenKey=${token}&isReading=true`,
}) })
} }
window.open(routeData.href, '_blank') window.open(routeData.href, '_blank')

View File

@ -110,7 +110,8 @@ let timer = null, // 网速定时器
// 获取网速 // 获取网速
export function getNetWorkSpeed() { export function getNetWorkSpeed() {
if (timer) return false; if (timer) return false;
if (lastPercentage < 100) return false; // if (lastPercentage < 100) return false;
if (imageId && imageId !== Id) return false
imageId = null imageId = null
timer = setInterval(() => { timer = setInterval(() => {
let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b); let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b);
@ -135,8 +136,9 @@ export function setNetWorkSpeedSize(totalPercentage, total, Id) {
if (imageId && imageId !== Id) return false if (imageId && imageId !== Id) return false
imageId = Id imageId = Id
let percentage = totalPercentage - lastPercentage let percentage = totalPercentage - lastPercentage
percentage = percentage / 100
lastPercentage = totalPercentage lastPercentage = totalPercentage
console.log(percentage, totalPercentage, total) // console.log(percentage, totalPercentage, total)
let time = new Date().getTime(); let time = new Date().getTime();
let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b); let timeList = Object.keys(bytesReceivedPerSecond).sort((a, b) => a - b);
let bytesTime = timeList.find(item => time - item < 1000); let bytesTime = timeList.find(item => time - item < 1000);
@ -156,6 +158,7 @@ export function workSpeedclose(isForce = false) {
if (!isForce && lastPercentage < 100) { if (!isForce && lastPercentage < 100) {
return false return false
} }
console.log('workSpeedclose')
if (timer) { if (timer) {
clearInterval(timer); clearInterval(timer);
timer = null; timer = null;

View File

@ -192,7 +192,8 @@ export default {
imageList: [], imageList: [],
showSeriesList: [], showSeriesList: [],
currentLoadIns: [], currentLoadIns: [],
isFromCRCUpload: false isFromCRCUpload: false,
isReading: null
} }
}, },
created: function () { created: function () {
@ -206,6 +207,9 @@ export default {
store.dispatch('user/setToken', this.$router.currentRoute.query.TokenKey) store.dispatch('user/setToken', this.$router.currentRoute.query.TokenKey)
changeURLStatic('TokenKey', '') changeURLStatic('TokenKey', '')
} }
if (this.$router.currentRoute.query.isReading) {
this.isReading = this.$router.currentRoute.query.isReading
}
this.studyId = this.$router.currentRoute.query.studyId this.studyId = this.$router.currentRoute.query.studyId
this.isFromCRCUpload = !!this.$router.currentRoute.query.isFromCRCUpload this.isFromCRCUpload = !!this.$router.currentRoute.query.isFromCRCUpload
if (this.type === 'Series') { if (this.type === 'Series') {
@ -244,7 +248,8 @@ export default {
this.seriesCount = data.Result.SeriesCount this.seriesCount = data.Result.SeriesCount
this.description = data.Result.Description this.description = data.Result.Description
} }
const url = `/series/list/${this.studyId}` let isReading = !!this.isReading ? `?IsReading=true` : ''
const url = `/series/list/${this.studyId}${isReading}`
this.getSeriesList(url) this.getSeriesList(url)
} }
}, },

View File

@ -149,7 +149,7 @@
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane v-if="!visitTaskId" :label="$t('trials:dicom-show:relatedVisit')" name="relation-study" <el-tab-pane v-show="!visitTaskId" :label="$t('trials:dicom-show:relatedVisit')" name="relation-study"
class="pane-relation-wrapper"> class="pane-relation-wrapper">
<div class="viewerSidethumbinner"> <div class="viewerSidethumbinner">
<el-collapse v-model="relationActiveName" @change="handelRelationActiveChange"> <el-collapse v-model="relationActiveName" @change="handelRelationActiveChange">
@ -171,66 +171,69 @@
<div v-show="study.Description" class="text-desc" style="background-color: #1f1f1f;"> <div v-show="study.Description" class="text-desc" style="background-color: #1f1f1f;">
{{ study.Description }} {{ study.Description }}
</div> </div>
<div v-if="study.seriesList" class="viewerSidethumbs ps" style="position: relative;"> <div class="viewerSidethumbs ps" style="position: relative;">
<div class="viewerSidethumbinner"> <div class="viewerSidethumbinner">
<div v-for="(seriesItem, index) in study.seriesList" :key="index" <div v-for="(seriesItem, index) in study.seriesList" :key="seriesItem.seriesId">
class="viewernavigatorwrapper" style="position: relative;border:1px solid #434343;" <div class="viewernavigatorwrapper" style="position: relative;border:1px solid #434343;"
series-type="relation" series-type="relation"
@click="showRelationSeriesImage($event, seriesItem, studyIndex, index)"> @click="showRelationSeriesImage($event, seriesItem, studyIndex, index)">
<img class="image-preview" :src="seriesItem.previewImageUrl" crossorigin="anonymous"
alt="" style="width: 85px;height:85px;" fit="fill">
<div class="viewernavitextwrapper">
<div style="padding: 1px 5px 1px 1px;display: flex;justify-content: space-between;">
<div v-if="seriesItem.keySeries" style="color:red">
Key Images
</div>
<div v-else>#{{ seriesItem.seriesNumber }}</div>
<div v-if="seriesItem.isExistMutiFrames && seriesItem.instanceCount > 1">
<el-popover placement="right-start" trigger="click"
popper-class="instance_frame_wrapper">
<div class="frame_list">
<div v-for="(instance, idx) in seriesItem.instanceInfoList" :key="instance.Id"
class="frame_content"
:style="{ 'margin-bottom': idx < seriesItem.instanceInfoList.length - 1 ? '5px' : '0px' }"
@click="showMultiFrames(studyIndex, seriesItem, index, instance)">
<div>
<div>{{ instance.InstanceNumber }}</div>
<div>{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame`
}}</div>
</div>
</div>
</div>
<i slot="reference" class="el-icon-connection"
style="font-size: 15px;cursor: pointer;" />
</el-popover>
</div>
</div>
<div v-show="seriesItem.instanceCount" style="padding: 1px;">
{{ seriesItem.modality }}: {{ seriesItem.instanceCount }} image
</div>
<div v-show="seriesItem.sliceThickness" style="padding: 1px;">
T: {{ seriesItem.sliceThickness }}
</div>
<el-tooltip v-show="seriesItem.description" class="item" effect="dark"
:content="seriesItem.description" placement="bottom">
<div v-show="seriesItem.description"
style="width: 120px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;padding: 1x;">
{{ seriesItem.description }}
</div>
</el-tooltip>
</div>
</div>
<!-- <el-image <!-- <el-image
class="image-preview" class="image-preview"
style="height:72px;width:72px;" style="height:72px;width:72px;"
:src="seriesItem.previewImageUrl" :src="seriesItem.previewImageUrl"
fit="fill" fit="fill"
/> --> /> -->
<img class="image-preview" :src="seriesItem.previewImageUrl" crossorigin="anonymous" alt="" <div
style="width: 85px;height:85px;" fit="fill"> v-if="seriesItem.prefetchInstanceCount > 0 && seriesItem.prefetchInstanceCount < seriesItem.instanceCount * 100">
<el-progress
<div class="viewernavitextwrapper"> :percentage="parseInt((seriesItem.prefetchInstanceCount / seriesItem.instanceCount).toFixed(2))" />
<div style="padding: 1px 5px 1px 1px;display: flex;justify-content: space-between;">
<div v-if="seriesItem.keySeries" style="color:red">
Key Images
</div>
<div v-else>#{{ seriesItem.seriesNumber }}</div>
<div v-if="seriesItem.isExistMutiFrames && seriesItem.instanceCount > 1">
<el-popover placement="right-start" trigger="click"
popper-class="instance_frame_wrapper">
<div class="frame_list">
<div v-for="(instance, idx) in seriesItem.instanceInfoList" :key="instance.Id"
class="frame_content"
:style="{ 'margin-bottom': idx < seriesItem.instanceInfoList.length - 1 ? '5px' : '0px' }"
@click="showMultiFrames(studyIndex, seriesItem, index, instance)">
<div>
<div>{{ instance.InstanceNumber }}</div>
<div>{{ `${instance.NumberOfFrames > 0 ? instance.NumberOfFrames : 1} frame`
}}</div>
</div>
</div>
</div>
<i slot="reference" class="el-icon-connection"
style="font-size: 15px;cursor: pointer;" />
</el-popover>
</div>
</div>
<div v-show="seriesItem.instanceCount" style="padding: 1px;">
{{ seriesItem.modality }}: {{ seriesItem.instanceCount }} image
</div>
<div v-show="seriesItem.sliceThickness" style="padding: 1px;">
T: {{ seriesItem.sliceThickness }}
</div>
<el-tooltip v-show="seriesItem.description" class="item" effect="dark"
:content="seriesItem.description" placement="bottom">
<div v-show="seriesItem.description"
style="width: 120px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;padding: 1x;">
{{ seriesItem.description }}
</div>
</el-tooltip>
</div> </div>
<!-- <div style="position: absolute;bottom: -10px;left: 0;width: 100%;">
<el-progress v-if="seriesItem.prefetchInstanceCount>0 && seriesItem.prefetchInstanceCount<seriesItem.instanceCount" :percentage="Number(seriesItem.prefetchInstanceCount/seriesItem.instanceCount)*100" />
</div> -->
</div> </div>
</div> </div>
</div> </div>
@ -303,7 +306,8 @@ export default {
currentLoadIns: [], currentLoadIns: [],
isFromCRCUpload: false, isFromCRCUpload: false,
visitTaskId: null, visitTaskId: null,
page: '' page: '',
activeSeriesId: null
} }
}, },
mounted() { mounted() {
@ -435,6 +439,8 @@ export default {
} }
}, },
showSeriesImage(e, studyIndex, seriesIndex, series) { showSeriesImage(e, studyIndex, seriesIndex, series) {
this.activeSeriesId = series.seriesId
workSpeedclose(true)
const element = e.currentTarget const element = e.currentTarget
const elements = document.querySelectorAll('[series-type]') const elements = document.querySelectorAll('[series-type]')
Array.from(elements).forEach((e) => { Array.from(elements).forEach((e) => {
@ -725,9 +731,15 @@ export default {
item.InstanceInfoList.forEach(i => { item.InstanceInfoList.forEach(i => {
if (i.NumberOfFrames && i.NumberOfFrames > 1) { if (i.NumberOfFrames && i.NumberOfFrames > 1) {
for (let j = 0; j < i.NumberOfFrames; j++) { for (let j = 0; j < i.NumberOfFrames; j++) {
if (!i.ImageId) {
i.ImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? scope.OSSclientConfig.basePath : scope.OSSclientConfig.basePath}${i.Path}?frame=${j}&instanceId=${i.Id}&idx=${index}|${seriesIndex}&isRelation=1`
}
imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? scope.OSSclientConfig.basePath : scope.OSSclientConfig.basePath}${i.Path}?frame=${j}&instanceId=${i.Id}&idx=${index}|${seriesIndex}&isRelation=1`) imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? scope.OSSclientConfig.basePath : scope.OSSclientConfig.basePath}${i.Path}?frame=${j}&instanceId=${i.Id}&idx=${index}|${seriesIndex}&isRelation=1`)
} }
} else { } else {
if (!i.ImageId) {
i.ImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? scope.OSSclientConfig.basePath : scope.OSSclientConfig.basePath}${i.Path}?instanceId=${i.Id}&idx=${index}|${seriesIndex}&isRelation=1`
}
imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? scope.OSSclientConfig.basePath : scope.OSSclientConfig.basePath}${i.Path}?instanceId=${i.Id}&idx=${index}|${seriesIndex}&isRelation=1`) imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? scope.OSSclientConfig.basePath : scope.OSSclientConfig.basePath}${i.Path}?instanceId=${i.Id}&idx=${index}|${seriesIndex}&isRelation=1`)
} }
}) })
@ -751,9 +763,12 @@ export default {
isShowPopper: false isShowPopper: false
}) })
}) })
scope.relationStudyList[index].seriesCount = seriesList.length // scope.relationStudyList[index].seriesCount = seriesList.length
scope.relationStudyList[index].seriesList = seriesList // scope.relationStudyList[index].seriesList = seriesList
scope.relationStudyList[index].showSeries = true // scope.relationStudyList[index].showSeries = true
scope.$set(scope.relationStudyList[index], 'seriesCount', seriesList.length)
scope.$set(scope.relationStudyList[index], 'seriesList', seriesList)
scope.$set(scope.relationStudyList[index], 'showSeries', true)
scope.$forceUpdate() scope.$forceUpdate()
} }
} catch (e) { } catch (e) {
@ -762,6 +777,8 @@ export default {
} }
}, },
showRelationSeriesImage(e, series, studyIndex, index) { showRelationSeriesImage(e, series, studyIndex, index) {
this.activeSeriesId = series.seriesId
workSpeedclose(true)
this.currentRelationIndex = index this.currentRelationIndex = index
const element = e.currentTarget const element = e.currentTarget
const elements = document.querySelectorAll('[series-type]') const elements = document.querySelectorAll('[series-type]')
@ -840,8 +857,11 @@ export default {
} }
const studyIndex = params.idx.split('|')[0] const studyIndex = params.idx.split('|')[0]
const seriesIndex = params.idx.split('|')[1] const seriesIndex = params.idx.split('|')[1]
var series = !params.isRelation ? this.studyList[studyIndex].SeriesList[seriesIndex] : null var series = !params.isRelation ? this.studyList[studyIndex].SeriesList[seriesIndex] : this.relationStudyList[studyIndex].seriesList[seriesIndex]
if (!series) return if (!series) return
if (!this.activeSeriesId) {
this.activeSeriesId = series.seriesId
}
var prefetchInstanceCount = series.prefetchInstanceCount var prefetchInstanceCount = series.prefetchInstanceCount
var instanceCount = series.instanceCount var instanceCount = series.instanceCount
if (series.imageloadedArr.indexOf(imageId) < 0) { if (series.imageloadedArr.indexOf(imageId) < 0) {
@ -863,8 +883,8 @@ export default {
series.imageloadedArr.push(imageId) series.imageloadedArr.push(imageId)
} }
} }
let file = this.studyList[studyIndex].SeriesList[seriesIndex].instanceInfoList.find(item => item.ImageId === imageId) let file = series.instanceInfoList.find(item => item.ImageId === imageId)
if (file) { if (file && this.activeSeriesId === series.seriesId) {
getNetWorkSpeed() getNetWorkSpeed()
setNetWorkSpeedSize(percentComplete, file.FileSize, imageId) setNetWorkSpeedSize(percentComplete, file.FileSize, imageId)
} }

View File

@ -1,139 +1,68 @@
<template> <template>
<el-form <el-form ref="questionForm" v-loading="loading" :model="form" label-width="120px" size="small" :rules="rules">
ref="questionForm"
v-loading="loading"
:model="form"
label-width="120px"
size="small"
:rules="rules"
>
<div class="base-dialog-body"> <div class="base-dialog-body">
<!-- 审核问题 --> <!-- 审核问题 -->
<el-form-item <el-form-item :label="$t('trials:qcCfg:table:questionName')" prop="QuestionName">
:label="$t('trials:qcCfg:table:questionName')" <el-input v-model="form.QuestionName" :disabled="data.IsQuestionQCAuditPassed" />
prop="QuestionName"
>
<el-input
v-model="form.QuestionName"
/>
</el-form-item> </el-form-item>
<!-- <el-form-item--> <!-- <el-form-item-->
<!-- :label="$t('common:title:languageType')"--> <!-- :label="$t('common:title:languageType')"-->
<!-- prop="LanguageType"--> <!-- prop="LanguageType"-->
<!-- >--> <!-- >-->
<!-- <el-select--> <!-- <el-select-->
<!-- v-model="form.LanguageType"--> <!-- v-model="form.LanguageType"-->
<!-- >--> <!-- >-->
<!-- <el-option--> <!-- <el-option-->
<!-- v-for="item of $d.LanguageType"--> <!-- v-for="item of $d.LanguageType"-->
<!-- :key="item.value"--> <!-- :key="item.value"-->
<!-- :value="item.value"--> <!-- :value="item.value"-->
<!-- :label="item.label"--> <!-- :label="item.label"-->
<!-- />--> <!-- />-->
<!-- </el-select>--> <!-- </el-select>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<!-- 类型 --> <!-- 类型 -->
<el-form-item <el-form-item :label="$t('trials:qcCfg:table:type')">
:label="$t('trials:qcCfg:table:type')" <el-select v-model="form.Type" @change="((val) => { typeChange(val, form) })"
> :disabled="data.IsQuestionQCAuditPassed">
<el-select <el-option v-for="item of $d.QcType" :key="item.value" :value="item.value" :label="item.label" />
v-model="form.Type"
@change="((val)=>{typeChange(val, form)})"
>
<el-option
v-for="item of $d.QcType"
:key="item.value"
:value="item.value"
:label="item.label"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 选项 --> <!-- 选项 -->
<el-form-item <el-form-item v-if="form.Type === 'select' || form.Type === 'radio'" :label="$t('trials:qcCfg:table:typeValue')"
v-if="form.Type === 'select' || form.Type === 'radio'" prop="TypeValue">
:label="$t('trials:qcCfg:table:typeValue')" <el-input v-model="form.TypeValue" :placeholder="$t('trials:qcCfg:message:typeValue')" type="textarea"
prop="TypeValue" :autosize="{ minRows: 2, maxRows: 4 }" :disabled="data.IsQuestionQCAuditPassed" />
>
<el-input
v-model="form.TypeValue"
:placeholder="$t('trials:qcCfg:message:typeValue')"
type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"
/>
</el-form-item> </el-form-item>
<!-- 父问题 --> <!-- 父问题 -->
<el-form-item <el-form-item :label="$t('trials:qcCfg:table:parentQs')">
:label="$t('trials:qcCfg:table:parentQs')" <el-select v-model="form.ParentId" clearable @change="((val) => { parentQuestionChange(val, form) })"
> :disabled="data.IsQuestionQCAuditPassed">
<el-select <el-option v-for="item of parentOptions" :key="item.Id" :label="item.QuestionName" :value="item.Id" />
v-model="form.ParentId"
clearable
@change="((val)=>{parentQuestionChange(val, form)})"
>
<el-option
v-for="item of parentOptions"
:key="item.Id"
:label="item.QuestionName"
:value="item.Id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 父问题触发值 --> <!-- 父问题触发值 -->
<el-form-item <el-form-item v-if="form.ParentId" :label="$t('trials:qcCfg:table:parentTriggerValue')" prop="ParentTriggerValue">
v-if="form.ParentId" <el-select v-model="form.ParentTriggerValue" :disabled="data.IsQuestionQCAuditPassed">
:label="$t('trials:qcCfg:table:parentTriggerValue')" <el-option v-for="item of parentTriggerValOptions" :key="item" :label="item" :value="item" />
prop="ParentTriggerValue"
>
<el-select
v-model="form.ParentTriggerValue"
>
<el-option
v-for="item of parentTriggerValOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 序号 --> <!-- 序号 -->
<el-form-item <el-form-item :label="$t('trials:qcCfg:table:order')" prop="ShowOrder">
:label="$t('trials:qcCfg:table:order')" <el-input-number v-model="form.ShowOrder" controls-position="right" :min="0"
prop="ShowOrder" :disabled="data.IsQuestionQCAuditPassed" />
>
<el-input-number
v-model="form.ShowOrder"
controls-position="right"
:min="0"
/>
</el-form-item> </el-form-item>
<!-- 是否必填 --> <!-- 是否必填 -->
<el-form-item <el-form-item :label="$t('trials:qcCfg:table:isRequired')">
:label="$t('trials:qcCfg:table:isRequired')" <el-radio-group v-model="form.IsRequired">
> <el-radio v-for="item of $d.YesOrNo" :key="`IsRequired${item.value}`" :label="item.value">
<el-radio-group
v-model="form.IsRequired"
>
<el-radio
v-for="item of $d.YesOrNo"
:key="`IsRequired${item.value}`"
:label="item.value"
>
{{ item.label }} {{ item.label }}
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<!-- 启用状态 --> <!-- 启用状态 -->
<el-form-item <el-form-item :label="$t('trials:qcCfg:table:isEnable')">
:label="$t('trials:qcCfg:table:isEnable')" <el-radio-group v-model="form.IsEnable">
> <el-radio v-for="item of $d.YesOrNo" :key="item.value" :label="item.value">
<el-radio-group
v-model="form.IsEnable"
>
<el-radio
v-for="item of $d.YesOrNo"
:key="item.value"
:label="item.value"
>
{{ item.label }} {{ item.label }}
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
@ -143,19 +72,11 @@
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;"> <div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
<el-form-item style="text-align:right;"> <el-form-item style="text-align:right;">
<!-- 取消 --> <!-- 取消 -->
<el-button <el-button size="small" type="primary" @click="handleClose">
size="small"
type="primary"
@click="handleClose"
>
{{ $t('common:button:cancel') }} {{ $t('common:button:cancel') }}
</el-button> </el-button>
<!-- Save --> <!-- Save -->
<el-button <el-button size="small" type="primary" @click="handleSave">
size="small"
type="primary"
@click="handleSave"
>
{{ $t('common:button:save') }} {{ $t('common:button:save') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
@ -202,7 +123,7 @@ export default {
}, },
rules: { rules: {
QuestionName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, QuestionName: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ max: 300, message: `${this.$t('common:ruleMessage:maxLength')} 300` }], { max: 300, message: `${this.$t('common:ruleMessage:maxLength')} 300` }],
TypeValue: [ TypeValue: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, { required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ validator: validateTypeVal, trigger: 'blur' }, { validator: validateTypeVal, trigger: 'blur' },
@ -308,6 +229,4 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss"></style>
</style>

View File

@ -135,8 +135,7 @@
:label="$t('common:action:action')" min-width="150"> :label="$t('common:action:action')" min-width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-hasPermi="['trials:trials-panel:setting:qc-question:edit']" circle <el-button v-hasPermi="['trials:trials-panel:setting:qc-question:edit']" circle
:title="$t('common:button:edit')" icon="el-icon-edit-outline" @click="handleEdit(scope.row)" :title="$t('common:button:edit')" icon="el-icon-edit-outline" @click="handleEdit(scope.row)" />
:disabled="scope.row.IsQuestionQCAuditPassed" />
<el-button v-hasPermi="['trials:trials-panel:setting:qc-question:delete']" circle <el-button v-hasPermi="['trials:trials-panel:setting:qc-question:delete']" circle
:title="$t('common:button:delete')" icon="el-icon-delete" @click="handleDelete(scope.row)" :title="$t('common:button:delete')" icon="el-icon-delete" @click="handleDelete(scope.row)"
:disabled="scope.row.IsQuestionQCAuditPassed" /> :disabled="scope.row.IsQuestionQCAuditPassed" />

View File

@ -1042,10 +1042,10 @@ export default {
this.isAudit = true this.isAudit = true
this.currentQCType = this.qType this.currentQCType = this.qType
} else { } else {
this.currentQCType = this.data.AuditState < 6 ? 1 : 2 this.currentQCType = this.data.QCProcessEnum === 2 && this.data.PreliminaryAuditUserId ? 2 : 1
} }
window.addEventListener('message', this.receiveMsg) window.addEventListener('message', this.receiveMsg)
console.log(this.SecondReviewState, 'SecondReviewState')
this.trialId = this.$route.query.trialId this.trialId = this.$route.query.trialId
this.getQCInfo() this.getQCInfo()
this.getDicData() this.getDicData()
@ -2133,7 +2133,7 @@ export default {
var token = getToken() var token = getToken()
const routeData = this.$router.resolve({ const routeData = this.$router.resolve({
path: `/showvisitdicoms?trialId=${this.data.TrialId}&visitInfo=${this.data.VisitName path: `/showvisitdicoms?trialId=${this.data.TrialId}&visitInfo=${this.data.VisitName
}(${this.data.VisitNum})&subjectVisitId=${this.data.Id}&showDelete=${this.isAudit ? 0 : 1 }(${this.data.VisitNum})&subjectVisitId=${this.data.Id}&showDelete=${this.isAudit || this.SecondReviewState > 0 ? 0 : 1
}&TokenKey=${token}`, }&TokenKey=${token}`,
}) })
this.open = window.open(routeData.href, '_blank') this.open = window.open(routeData.href, '_blank')
@ -2199,7 +2199,7 @@ export default {
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${this.data.Id}&TokenKey=${token}&isReading=1`, path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${this.data.Id}&TokenKey=${token}&isReading=1`,
}) })
: this.$router.resolve({ : this.$router.resolve({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${this.data.Id}&TokenKey=${token}&isQcCheck=1`, path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${this.data.Id}&TokenKey=${token}&isQcCheck=${this.SecondReviewState > 0 ? 0 : 1}`,
}) })
this.open = window.open(routeData.href, '_blank') this.open = window.open(routeData.href, '_blank')
}, },
@ -2211,7 +2211,7 @@ export default {
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({
path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${this.data.Id}&studyId=${row.Id}&TokenKey=${token}&isQcCheck=1`, path: `/showNoneDicoms?trialId=${trialId}&subjectVisitId=${this.data.Id}&studyId=${row.Id}&TokenKey=${token}&isQcCheck=${this.SecondReviewState > 0 ? 0 : 1}`,
}) })
this.open = window.open(routeData.href, '_blank') this.open = window.open(routeData.href, '_blank')
}, },

View File

@ -50,9 +50,10 @@ module.exports = defineConfig({
pathRewrite: { pathRewrite: {
} }
}, },
// uat http://101.132.253.119:7010
'/api': { '/api': {
target: 'http://106.14.89.110:30000', target: 'http://106.14.89.110:30000',
// target: 'http://101.132.253.119:7010', // uat
changeOrigin: true, changeOrigin: true,
secure: false, secure: false,
pathRewrite: { pathRewrite: {