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({ return request({
url: `/DownloadAndUpload/getTrialUnreadVisitList?trialId=${trialId}`, url: `/DownloadAndUpload/getTrialUnreadVisitList`,
method: 'get' method: 'get',
params,
}) })
} }

View File

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

View File

@ -308,7 +308,7 @@ export default {
}) })
}) })
}, },
async loadStudy(isJump = true) { async loadStudy(seriesId = null) {
let params = {} let params = {}
if (this.isPacs) { if (this.isPacs) {
params.IsPacs = true params.IsPacs = true
@ -328,7 +328,7 @@ export default {
isReading = `?IsPacs=true` isReading = `?IsPacs=true`
} }
const url = `/series/list/${this.studyId}${isReading}` const url = `/series/list/${this.studyId}${isReading}`
this.getSeriesList(url, isJump) this.getSeriesList(url, seriesId)
} }
}, },
async loadPatientStudy() { async loadPatientStudy() {
@ -393,7 +393,7 @@ export default {
console.log(err) console.log(err)
} }
}, },
async getSeriesList(url, isJump = true) { async getSeriesList(url, seriesId = null) {
try { try {
const data = await getSeriesList(url) const data = await getSeriesList(url)
if (data.IsSuccess) { if (data.IsSuccess) {
@ -432,12 +432,12 @@ export default {
isDeleted: item.IsDeleted, isDeleted: item.IsDeleted,
previewImageUrl: item.ImageResizePath ? this.OSSclientConfig.basePath + item.ImageResizePath : `/api/series/preview/${item.Id}`, previewImageUrl: item.ImageResizePath ? this.OSSclientConfig.basePath + item.ImageResizePath : `/api/series/preview/${item.Id}`,
instanceCount: item.InstanceCount, instanceCount: item.InstanceCount,
prefetchInstanceCount: !isJump ? item.InstanceInfoList.length * 100 : 0, prefetchInstanceCount: seriesId ? item.InstanceInfoList.length * 100 : 0,
hasLabel: item.HasLabel, hasLabel: item.HasLabel,
keySeries: item.KeySeries, keySeries: item.KeySeries,
tpCode: this.tpCode, tpCode: this.tpCode,
loadStatus: false, loadStatus: false,
imageloadedArr: [], imageloadedArr: seriesId ? imageIds : [],
isExistMutiFrames: item.IsExistMutiFrames, isExistMutiFrames: item.IsExistMutiFrames,
isShowPopper: false, isShowPopper: false,
subjectCode: item.SubjectCode, subjectCode: item.SubjectCode,
@ -447,10 +447,12 @@ export default {
this.seriesList = seriesList this.seriesList = seriesList
if (this.seriesList.length > 0) { if (this.seriesList.length > 0) {
this.loadAllImages() this.loadAllImages()
if (isJump) { let index = 0;
this.$refs.dicomViewer.loadImageStack(this.seriesList[0], this.labels[this.tpCode]) if (seriesId) {
this.firstInstanceId = this.seriesList[0].imageIds[0] 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> <template>
<div> <div>
<el-input v-model="input" placeholder="" clearable></el-input> <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> <el-button type="primary" size="small" :disabled="!input" @click.stop="getTrialUnreadVisitList">下载</el-button>
</div> </div>
</template> </template>
@ -14,12 +16,19 @@ export default {
// }, // },
data() { data() {
return { return {
input: '08deab4a-f842-a7a4-0242-0a0001000000' input: '08deab4a-f842-a7a4-0242-0a0001000000',
pageIndex: 1,
pageSize: 250
}; };
}, },
methods: { methods: {
async getTrialUnreadVisitList() { 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) { if (res.IsSuccess) {
let arr = res.Result let arr = res.Result
this.LoopDownload(arr, 0) this.LoopDownload(arr, 0)
@ -118,7 +127,7 @@ export default {
noneDicomStudy.FileList.forEach(file => { noneDicomStudy.FileList.forEach(file => {
let time = noneDicomStudy.ImageDate.split(' ')[0] let time = noneDicomStudy.ImageDate.split(' ')[0]
let obj = { 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, url: this.OSSclientConfig.basePath + file.Path,
} }
files.push(obj) files.push(obj)