Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing Details

main
caiyiling 2026-05-08 11:39:40 +08:00
commit 10bac01371
4 changed files with 125 additions and 83 deletions

View File

@ -4468,9 +4468,10 @@ export function updateReadModuleClinicalData(data) {
})
}
export function getTrialUnreadVisitList(trialId) {
export function getTrialUnreadVisitList(params) {
return request({
url: `/DownloadAndUpload/getTrialUnreadVisitList?trialId=${trialId}`,
method: 'get'
url: `/DownloadAndUpload/getTrialUnreadVisitList`,
method: 'get',
params,
})
}

View File

@ -329,21 +329,15 @@
</el-form-item>
<!-- 注射时间 HHMMSS-->
<el-form-item :label="$t('trials:ptData:label:injectTime')" prop="RadiopharmaceuticalStartTime">
<el-input
v-model.trim="formData.RadiopharmaceuticalStartTime"
:placeholder="$t('trials:injectTime:eg')"
@blur="handleTimeBlur('RadiopharmaceuticalStartTime')"
maxlength="6"
style="width: 100%" @input="computeTimeRelation" :disabled="!isEdit"></el-input>
<el-input v-model.trim="formData.RadiopharmaceuticalStartTime" :placeholder="$t('trials:injectTime:eg')"
@blur="handleTimeBlur('RadiopharmaceuticalStartTime')" maxlength="6" style="width: 100%"
@input="computeTimeRelation" :disabled="!isEdit"></el-input>
</el-form-item>
<!-- 成像时间 HHMMSS-->
<el-form-item :label="$t('trials:ptData:label:acquisitionTime')" prop="AcquisitionTime">
<el-input
v-model.trim="formData.AcquisitionTime"
@blur="handleTimeBlur('AcquisitionTime')"
maxlength="6"
:placeholder="$t('trials:injectTime:eg')"
style="width: 100%" @input="computeTimeRelation" :disabled="!isEdit"></el-input>
<el-input v-model.trim="formData.AcquisitionTime" @blur="handleTimeBlur('AcquisitionTime')" maxlength="6"
:placeholder="$t('trials:injectTime:eg')" style="width: 100%" @input="computeTimeRelation"
:disabled="!isEdit"></el-input>
</el-form-item>
<!-- 时间一致性检查 -->
<!-- <el-form-item :label="$t('trials:ptData:label:timeCheck')">
@ -590,7 +584,11 @@ export default {
let res = await this.studyUndoMaskImage(data)
if (!res) return false
this.$emit("update:loading", true)
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) isAll = true
let isMultiple = false
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1 && isAll === false) {
isAll = true;
isMultiple = true;
}
if (!isAll) {
let strs = image.imageId.split("?")
let newImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${res[0].Path}?${strs[1]}`
@ -605,36 +603,49 @@ export default {
this.series.imageIds.splice(index, 1, newImageId)
await this.$refs[`dicomCanvas0`].reloadImage(newImageId)
} else {
let arr = []
this.series.instanceInfoList.forEach(item => {
let strs = item.ImageId.split("?")
let info = res.find(i => item.Id === i.Id)
let newImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${strs[1]}`
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
let strList = strs[1].split("&")
let s = ''
strList.forEach(item => {
if (item.includes('frame=')) {
s += `frame=${j}`
} else {
s += `&${item}`
}
})
arr.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${s}`)
}
} else {
arr.push(newImageId)
}
item.ImageId = newImageId
item.IsMasked = false
})
this.series.imageIds = arr
// this.loadImageStack(this.series)
this.$refs[`dicomCanvas0`].loadImageStack(this.series)
// let arr = []
// this.series.instanceInfoList.forEach(item => {
// let strs = item.ImageId.split("?")
// let info = res.find(i => item.Id === i.Id)
// if (info) {
// let newImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${strs[1]}`
// this.series.imageIds.forEach(i => {
// let is = i.split("?")
// if (is[0] === strs[0]) {
// arr.push(newImageId)
// } else {
// if (isMultiple) {
// arr.push(i)
// }
// }
// })
// // if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
// // for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
// // let strList = strs[1].split("&")
// // let s = ''
// // strList.forEach(item => {
// // if (item.includes('frame=')) {
// // s += `frame=${j}`
// // } else {
// // s += `&${item}`
// // }
// // })
// // arr.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${s}`)
// // }
// // } else {
// // arr.push(newImageId)
// // }
// item.ImageId = newImageId
// item.IsMasked = false
// }
// })
// this.series.imageIds = arr
// // this.loadImageStack(this.series)
// this.$refs[`dicomCanvas0`].loadImageStack(this.series)
}
this.$emit('loadStudy', this.series.seriesId)
this.$emit("update:loading", false)
this.$emit('loadStudy', false)
})
},
anonymousImage(isAll = false) {
@ -679,7 +690,11 @@ export default {
let res = await this.studyMaskImage(data)
if (!res || res.length <= 0) return this.$confirm(this.$t("DicomViewer:anonymous:studyMaskImageFail"))
this.$emit("update:loading", true)
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) isAll = true
let isMultiple = false
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1 && isAll === false) {
isAll = true;
isMultiple = true;
}
if (!isAll) {
let strs = image.imageId.split("?")
let newImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${res[0].Path}?${strs[1]}`
@ -695,35 +710,50 @@ export default {
await this.$refs[`dicomCanvas0`].reloadImage(newImageId)
} else {
let arr = []
this.series.instanceInfoList.forEach(item => {
let strs = item.ImageId.split("?")
let info = res.find(i => item.Id === i.Id)
let newImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${strs[1]}`
if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
let strList = strs[1].split("&")
let s = ''
strList.forEach(item => {
if (item.includes('frame=')) {
s += `frame=${j}`
} else {
s += `&${item}`
}
})
arr.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${s}`)
}
} else {
arr.push(newImageId)
}
item.ImageId = newImageId
item.IsMasked = true
})
this.series.imageIds = arr
// this.loadImageStack(this.series)
this.$refs[`dicomCanvas0`].loadImageStack(this.series)
// this.series.instanceInfoList.forEach(item => {
// let strs = item.ImageId.split("?")
// let info = res.find(i => item.Id === i.Id)
// if (info) {
// let newImageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${strs[1]}`
// this.series.imageIds.forEach(i => {
// let is = i.split("?")
// if (is[0] === strs[0]) {
// arr.push(newImageId)
// } else {
// if (isMultiple) {
// arr.push(i)
// }
// }
// })
// item.ImageId = newImageId
// item.IsMasked = true
// }
// // if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) {
// // for (let j = 0; j < instanceInfo.NumberOfFrames; j++) {
// // let strList = strs[1].split("&")
// // let s = ''
// // strList.forEach(item => {
// // if (item.includes('frame=')) {
// // s += `frame=${j}`
// // } else {
// // s += `&${item}`
// // }
// // })
// // arr.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? this.OSSclientConfig.basePath : this.OSSclientConfig.basePath}${info.Path}?${s}`)
// // }
// // } else {
// // arr.push(newImageId)
// // }
// })
// this.series.imageIds = arr
// console.log(this.series, 'series')
// // this.loadImageStack(this.series)
// this.$refs[`dicomCanvas0`].loadImageStack(this.series)
}
this.$emit('loadStudy', this.series.seriesId)
this.$emit("update:loading", false)
this.$emit('loadStudy', false)
})
},
openAnonymous() {

View File

@ -308,7 +308,7 @@ export default {
})
})
},
async loadStudy(isJump = true) {
async loadStudy(seriesId = null) {
let params = {}
if (this.isPacs) {
params.IsPacs = true
@ -328,7 +328,7 @@ export default {
isReading = `?IsPacs=true`
}
const url = `/series/list/${this.studyId}${isReading}`
this.getSeriesList(url, isJump)
this.getSeriesList(url, seriesId)
}
},
async loadPatientStudy() {
@ -393,7 +393,7 @@ export default {
console.log(err)
}
},
async getSeriesList(url, isJump = true) {
async getSeriesList(url, seriesId = null) {
try {
const data = await getSeriesList(url)
if (data.IsSuccess) {
@ -432,12 +432,12 @@ export default {
isDeleted: item.IsDeleted,
previewImageUrl: item.ImageResizePath ? this.OSSclientConfig.basePath + item.ImageResizePath : `/api/series/preview/${item.Id}`,
instanceCount: item.InstanceCount,
prefetchInstanceCount: !isJump ? item.InstanceInfoList.length * 100 : 0,
prefetchInstanceCount: seriesId ? item.InstanceInfoList.length * 100 : 0,
hasLabel: item.HasLabel,
keySeries: item.KeySeries,
tpCode: this.tpCode,
loadStatus: false,
imageloadedArr: [],
imageloadedArr: seriesId ? imageIds : [],
isExistMutiFrames: item.IsExistMutiFrames,
isShowPopper: false,
subjectCode: item.SubjectCode,
@ -447,10 +447,12 @@ export default {
this.seriesList = seriesList
if (this.seriesList.length > 0) {
this.loadAllImages()
if (isJump) {
this.$refs.dicomViewer.loadImageStack(this.seriesList[0], this.labels[this.tpCode])
this.firstInstanceId = this.seriesList[0].imageIds[0]
let index = 0;
if (seriesId) {
index = this.seriesList.findIndex(item => item.seriesId === seriesId)
}
this.$refs.dicomViewer.loadImageStack(this.seriesList[index], this.labels[this.tpCode])
this.firstInstanceId = this.seriesList[index].imageIds[0]
}
}

View File

@ -1,6 +1,8 @@
<template>
<div>
<el-input v-model="input" placeholder="" clearable></el-input>
<el-input v-model="pageIndex" placeholder="" clearable></el-input>
<el-input v-model="pageSize" placeholder="" clearable></el-input>
<el-button type="primary" size="small" :disabled="!input" @click.stop="getTrialUnreadVisitList">下载</el-button>
</div>
</template>
@ -14,12 +16,19 @@ export default {
// },
data() {
return {
input: '08deab4a-f842-a7a4-0242-0a0001000000'
input: '08deab4a-f842-a7a4-0242-0a0001000000',
pageIndex: 1,
pageSize: 250
};
},
methods: {
async getTrialUnreadVisitList() {
let res = await getTrialUnreadVisitList(this.input)
let params = {
TrialId: this.input,
PageIndex: this.pageIndex,
PageSize: this.pageSize,
}
let res = await getTrialUnreadVisitList(params)
if (res.IsSuccess) {
let arr = res.Result
this.LoopDownload(arr, 0)
@ -118,7 +127,7 @@ export default {
noneDicomStudy.FileList.forEach(file => {
let time = noneDicomStudy.ImageDate.split(' ')[0]
let obj = {
name: `${visit.TrialSiteCode}/${visit.SubjectCode}/${visit.VisitName}/${noneDicomStudy.StudyCode}_${time}_${noneDicomStudy.Modality}/${file.FileName}`,
name: `${noneDicomStudy.StudyCode}_${time}_${noneDicomStudy.Modality}/${file.FileName}`,
url: this.OSSclientConfig.basePath + file.Path,
}
files.push(obj)