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

# Conflicts:
#	src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue
uat_us
wangxiaoshuang 2026-04-30 16:01:34 +08:00
commit d88f7c43b2
6 changed files with 139 additions and 170 deletions

View File

@ -17,7 +17,7 @@
<div <div
v-else v-else
class="dicom-desc" class="dicom-desc"
style="width: 150px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="width: 135px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"
> >
<div> <div>
<div style="text-overflow: ellipsis;overflow: hidden;" v-if="!study.StudyName"> <div style="text-overflow: ellipsis;overflow: hidden;" v-if="!study.StudyName">
@ -32,7 +32,37 @@
<div>{{ study.Modalities }} ({{ study.SeriesCount }})</div> <div>{{ study.Modalities }} ({{ study.SeriesCount }})</div>
</div> </div>
<div style="text-overflow: ellipsis;overflow: hidden;" :title="study.Description">{{ study.Description }}</div> <div style="text-overflow: ellipsis;overflow: hidden;" :title="study.Description">{{ study.Description }}</div>
<div class="patient-info" v-if="['PT、CT', 'CT、PT', 'PET-CT'].includes(study.Modalities)">
<el-popover placement="right-start" trigger="hover" popper-class="patient-info-popper">
<h4>{{ $t('trials:ptData:title') }}</h4>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientSex') }}</label>
<span>{{ study.PatientSex }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientWeight') }}</label>
<span>{{ study.PatientWeight }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:totalDose') }}</label>
<span>{{ study.RadionuclideTotalDose }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:halfLife') }}</label>
<span>{{ study.RadionuclideHalfLife }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:injectTime') }}</label>
<span>{{ study.RadiopharmaceuticalStartTime }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:acquisitionTime') }}</label>
<span>{{ study.AcquisitionTime }}</span>
</div>
<i slot="reference" class="el-icon-document"
style="font-size: 15px;cursor: pointer;color: #f5f7fa;" />
</el-popover>
</div>
</div> </div>
</div> </div>
@ -99,37 +129,7 @@
<el-tooltip class="item" effect="dark" :content="series.description" placement="right"> <el-tooltip class="item" effect="dark" :content="series.description" placement="right">
<div style="">{{ series.description }}</div> <div style="">{{ series.description }}</div>
</el-tooltip> </el-tooltip>
<div class="patient-info" style="position: absolute;right: 0;top: 30px;" v-if="['PT','PET'].includes(series.modality)">
<el-popover placement="right" trigger="hover" popper-class="patient-info-popper">
<h4>{{ $t('trials:ptData:title') }}</h4>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientSex') }}</label>
<span>{{ study.PatientSex }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientWeight') }}</label>
<span>{{ study.PatientWeight }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:totalDose') }}</label>
<span>{{ study.RadionuclideTotalDose }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:halfLife') }}</label>
<span>{{ study.RadionuclideHalfLife }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:injectTime') }}</label>
<span>{{ study.RadiopharmaceuticalStartTime }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:acquisitionTime') }}</label>
<span>{{ study.AcquisitionTime }}</span>
</div>
<i slot="reference" class="el-icon-document"
style="font-size: 15px;cursor: pointer;color: #f5f7fa;" />
</el-popover>
</div>
</p> </p>
<p v-show="series.sliceThickness && !study.IsCriticalSequence"> <p v-show="series.sliceThickness && !study.IsCriticalSequence">
@ -1140,6 +1140,10 @@ export default {
} }
</style> </style>
<style lang="scss"> <style lang="scss">
.patient-info {
// display: inline-block;
text-align: right;
}
.patient-info-popper { .patient-info-popper {
font-size: 12px; font-size: 12px;
color: #ddd; color: #ddd;

View File

@ -41,10 +41,10 @@
<div v-if="series" class="right-bottom-text"> <div v-if="series" class="right-bottom-text">
<div v-show="imageInfo.location">Location: {{ <div v-show="imageInfo.location">Location: {{
`${Number(imageInfo.location).toFixed(digitPlaces)} mm` `${Number(imageInfo.location).toFixed(digitPlaces)} mm`
}}</div> }}</div>
<div v-show="imageInfo.sliceThickness">Slice Thickness: {{ <div v-show="imageInfo.sliceThickness">Slice Thickness: {{
`${Number(imageInfo.sliceThickness).toFixed(digitPlaces)} mm` `${Number(imageInfo.sliceThickness).toFixed(digitPlaces)} mm`
}}</div> }}</div>
<div v-show="imageInfo.wwwc">WW/WL: {{ imageInfo.wwwc }}</div> <div v-show="imageInfo.wwwc">WW/WL: {{ imageInfo.wwwc }}</div>
</div> </div>
<div class="orientation-top"> <div class="orientation-top">
@ -120,10 +120,6 @@ export default {
type: Boolean, type: Boolean,
default: false default: false
}, },
isMPR: {
type: Boolean,
default: false
},
actionConfiguration: { actionConfiguration: {
type: Object, type: Object,
default: () => { default: () => {
@ -231,7 +227,6 @@ export default {
}) })
DicomEvent.$on('renderSegmentation', async (viewportId) => { DicomEvent.$on('renderSegmentation', async (viewportId) => {
// if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false // if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false
if (!this.isMPR) return false
if (this.viewportId !== viewportId) return false if (this.viewportId !== viewportId) return false
await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, null, this.actionConfiguration, this.segmentationId, this.segmentIndex) await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, null, this.actionConfiguration, this.segmentationId, this.segmentIndex)
}) })
@ -256,7 +251,6 @@ export default {
}, },
SegmentConfig: { SegmentConfig: {
handler() { handler() {
if (!this.isMPR) return false
if (!this.segmentationId) return false if (!this.segmentationId) return false
if (!this.series.TaskInfo) return false if (!this.series.TaskInfo) return false
readingSegmentByConfig(this.series, this.series.TaskInfo, this.viewportId, this.segmentationId, this.SegmentConfig) readingSegmentByConfig(this.series, this.series.TaskInfo, this.viewportId, this.segmentationId, this.SegmentConfig)
@ -264,13 +258,11 @@ export default {
deep: true deep: true
}, },
segmentIndex() { segmentIndex() {
if (!this.isMPR) return false
if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false
if (this.segmentIndex <= 0) return false if (this.segmentIndex <= 0) return false
selectSegment(this.viewportId, this.segmentationId, this.segmentIndex) selectSegment(this.viewportId, this.segmentationId, this.segmentIndex)
}, },
segmentationId() { segmentationId() {
if (!this.isMPR) return false
if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false if (this.curSegSeries.Id !== this.series.Id || this.curSegSeries.VisitTaskId !== this.series.VisitTaskId) return false
if (!this.segmentationId) return false if (!this.segmentationId) return false
selectSegmentation(this.viewportId, this.segmentationId) selectSegmentation(this.viewportId, this.segmentationId)
@ -673,11 +665,8 @@ export default {
renderingEngine.render() renderingEngine.render()
}, 100) }, 100)
} }
if (this.isMPR) { await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, null, this.actionConfiguration, this.segmentationId, this.segmentIndex)
await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, null, this.actionConfiguration, this.segmentationId, this.segmentIndex) DicomEvent.$emit('SegmentationLoading', this.viewportId)
DicomEvent.$emit('SegmentationLoading', this.viewportId)
}
let volume = cache.getVolume(this.volumeId) let volume = cache.getVolume(this.volumeId)
// console.log(volume, 'volume') // console.log(volume, 'volume')
if (this.series.orientation === 'AXIAL' && this.series.curIndex) return this.setFullScreen(this.series.curIndex) if (this.series.orientation === 'AXIAL' && this.series.curIndex) return this.setFullScreen(this.series.curIndex)

View File

@ -344,7 +344,7 @@
:viewport-index="index" :histogramVisible="histogramVisible" :viewport-index="index" :histogramVisible="histogramVisible"
:actionConfiguration="actionConfiguration" :SegmentConfig="SegmentConfig" :actionConfiguration="actionConfiguration" :SegmentConfig="SegmentConfig"
:segmentationId.sync="segId" :segmentIndex.sync="segIndex" :curSegSeries.sync="curSegSeries" :segmentationId.sync="segId" :segmentIndex.sync="segIndex" :curSegSeries.sync="curSegSeries"
:isMPR="isMPR" :MPRInfo="MPRInfo" @activeViewport="activeViewport" @setMPRInfo="setMPRInfo" :MPRInfo="MPRInfo" @activeViewport="activeViewport" @setMPRInfo="setMPRInfo"
@toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD" @toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD"
@renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup" @renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup"
@resetHistogram="resetHistogram" v-resize="(e) => handleSizeChange(e, `viewport-MPR-${index}`)" /> @resetHistogram="resetHistogram" v-resize="(e) => handleSizeChange(e, `viewport-MPR-${index}`)" />
@ -1052,6 +1052,7 @@ export default {
let imageId = imageIds[0] let imageId = imageIds[0]
const imagePixelModule = metaData.get('imagePixelModule', imageId); const imagePixelModule = metaData.get('imagePixelModule', imageId);
const photometricInterpretation = imagePixelModule?.photometricInterpretation; const photometricInterpretation = imagePixelModule?.photometricInterpretation;
console.log(photometricInterpretation, 'photometricInterpretation')
if (photometricInterpretation && photometricInterpretation !== 'MONOCHROME1' && photometricInterpretation !== 'MONOCHROME2') return this.$confirm(this.$t('trials:histogram:confirm:photometricInterpretationNotSupported')) if (photometricInterpretation && photometricInterpretation !== 'MONOCHROME1' && photometricInterpretation !== 'MONOCHROME2') return this.$confirm(this.$t('trials:histogram:confirm:photometricInterpretationNotSupported'))
this.histogramVisible = true this.histogramVisible = true
this.setToolsPassive() this.setToolsPassive()

View File

@ -32,6 +32,37 @@
<span :title="study.Modalities">{{ `${study.Modalities} (${study.SeriesCount})` }}</span> <span :title="study.Modalities">{{ `${study.Modalities} (${study.SeriesCount})` }}</span>
</div> </div>
</template> </template>
<div class="patient-info" v-if="['PT、CT', 'CT、PT', 'PET-CT'].includes(study.Modalities)">
<el-popover placement="right-start" trigger="hover" popper-class="patient-info-popper">
<h4>{{ $t('trials:ptData:title') }}</h4>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientSex') }}</label>
<span>{{ study.PatientSex }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientWeight') }}</label>
<span>{{ study.PatientWeight }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:totalDose') }}</label>
<span>{{ study.RadionuclideTotalDose }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:halfLife') }}</label>
<span>{{ study.RadionuclideHalfLife }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:injectTime') }}</label>
<span>{{ study.RadiopharmaceuticalStartTime }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:acquisitionTime') }}</label>
<span>{{ study.AcquisitionTime }}</span>
</div>
<i slot="reference" class="el-icon-document"
style="font-size: 15px;cursor: pointer;color: #f5f7fa;" />
</el-popover>
</div>
</div> </div>
<div v-else> <div v-else>
@ -74,41 +105,9 @@
#{{ series.SeriesNumber }} #{{ series.SeriesNumber }}
</div> </div>
<div v-if="series.Description" class="text-desc" :title="series.Description" <div v-if="series.Description" class="text-desc" :title="series.Description">
style="position: relative;">
{{ series.Description }} {{ series.Description }}
<div class="patient-info" style="position: absolute;right: 0;top: 0;"
v-if="['PT', 'PET'].includes(series.Modality)">
<el-popover placement="right" trigger="hover" popper-class="patient-info-popper">
<h4>{{ $t('trials:ptData:title') }}</h4>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientSex') }}</label>
<span>{{ study.PatientSex }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:patientWeight') }}</label>
<span>{{ study.PatientWeight }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:totalDose') }}</label>
<span>{{ study.RadionuclideTotalDose }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:halfLife') }}</label>
<span>{{ study.RadionuclideHalfLife }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:injectTime') }}</label>
<span>{{ study.RadiopharmaceuticalStartTime }}</span>
</div>
<div class="patient-info-row">
<label>{{ $t('trials:ptData:label:acquisitionTime') }}</label>
<span>{{ study.AcquisitionTime }}</span>
</div>
<i slot="reference" class="el-icon-document"
style="font-size: 15px;cursor: pointer;color: #f5f7fa;" />
</el-popover>
</div>
</div> </div>
<div v-if="series.SliceThickness && !study.IsCriticalSequence" class="text-desc"> <div v-if="series.SliceThickness && !study.IsCriticalSequence" class="text-desc">
T: {{ parseFloat(series.SliceThickness).toFixed(digitPlaces) }} T: {{ parseFloat(series.SliceThickness).toFixed(digitPlaces) }}
@ -200,9 +199,6 @@ export default {
}, },
methods: { methods: {
activeSeries(series, seriesIndex, studyIndex) { activeSeries(series, seriesIndex, studyIndex) {
const photometricInterpretation = series?.InstanceInfoList[0]?.PhotometricInterpretation;
if (!photometricInterpretation || (photometricInterpretation !== 'MONOCHROME1' && photometricInterpretation !== 'MONOCHROME2'))
return this.$confirm(this.$t('trials:histogram:confirm:activeSeriesPhotometricInterpretationNotSupported'))
this.activeStudyIndex = studyIndex this.activeStudyIndex = studyIndex
this.activeSeriesIndex = seriesIndex this.activeSeriesIndex = seriesIndex
this.$emit('activeSeries', series) this.$emit('activeSeries', series)
@ -267,6 +263,10 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.patient-info {
// display: inline-block;
text-align: right;
}
.patient-info-popper { .patient-info-popper {
font-size: 12px; font-size: 12px;
color: #ddd; color: #ddd;
@ -291,7 +291,7 @@ export default {
line-height: 18px; line-height: 18px;
} }
.patient-info-popper .patient-info-row+.patient-info-row { .patient-info-popper .patient-info-row + .patient-info-row {
margin-top: 4px; margin-top: 4px;
} }
@ -299,6 +299,7 @@ export default {
color: #bbb; color: #bbb;
// font-weight: 600; // font-weight: 600;
white-space: nowrap; white-space: nowrap;
// text-align: right;
} }
.patient-info-popper span { .patient-info-popper span {

View File

@ -112,7 +112,6 @@ async function loadSegmentation(arrayBuffer, series, segmentationId) {
}) })
const megmentGroup = const megmentGroup =
segmentation.state.getSegmentation(segmentationId); segmentation.state.getSegmentation(segmentationId);
if (!megmentGroup) return false
const { imageIds } = megmentGroup.representationData.Labelmap; const { imageIds } = megmentGroup.representationData.Labelmap;
const derivedSegmentationImages = imageIds.map(imageId => const derivedSegmentationImages = imageIds.map(imageId =>
cache.getImage(imageId) cache.getImage(imageId)
@ -227,11 +226,10 @@ async function readingSegmentByConfig(series, visitInfo, viewportId, segmentatio
) )
} }
function selectSegmentation(viewportId, segmentationId) { function selectSegmentation(viewportId, segmentationId) {
if (!segmentation.state.getSegmentation(segmentationId)) return false
segmentation.activeSegmentation.setActiveSegmentation(viewportId, segmentationId) segmentation.activeSegmentation.setActiveSegmentation(viewportId, segmentationId)
} }
function selectSegment(viewportId, segmentationId, segmentIndex) { function selectSegment(viewportId, segmentationId, segmentIndex) {
if (!segmentIndex || !segmentationId || !segmentation.state.getSegmentation(segmentationId)) return false if (!segmentIndex || !segmentationId) return false
selectSegmentation(viewportId, segmentationId) selectSegmentation(viewportId, segmentationId)
segmentation.segmentIndex.setActiveSegmentIndex(segmentationId, segmentIndex); segmentation.segmentIndex.setActiveSegmentIndex(segmentationId, segmentIndex);
} }
@ -356,66 +354,63 @@ async function renderSegmentation(series, visitInfo, viewportId, SegmentConfig,
PageSize: 9999, PageSize: 9999,
PageIndex: 1, PageIndex: 1,
} }
setTimeout(async () => { let res = await getSegmentationList(data);
let res = await getSegmentationList(data); if (res.IsSuccess) {
if (res.IsSuccess) { let list = res.Result.CurrentPageData;
let list = res.Result.CurrentPageData; for (let i = 0; i < list.length; i++) {
for (let i = 0; i < list.length; i++) { let item = list[i]
let item = list[i] if (!segmentationId) segmentationId = item.Id
if (!segmentationId) segmentationId = item.Id await createSegmentation(viewportId, series.SeriesInstanceUid, item.Id)
await createSegmentation(viewportId, series.SeriesInstanceUid, item.Id) if (item.SEGUrl) await readSegmentation(item.SEGUrl, series, item.Id)
if (item.SEGUrl) await readSegmentation(item.SEGUrl, series, item.Id) createSegmentationRepresentation(viewportId, item.Id)
createSegmentationRepresentation(viewportId, item.Id) if (!viewportInfo[viewportId]) {
if (!viewportInfo[viewportId]) { viewportInfo[viewportId] = [item.Id]
viewportInfo[viewportId] = [item.Id] } else {
} else { viewportInfo[viewportId].push(item.Id)
viewportInfo[viewportId].push(item.Id) }
} let params = {
let params = { SegmentationId: item.Id,
SegmentationId: item.Id, PageSize: 9999,
PageSize: 9999, PageIndex: 1,
PageIndex: 1, }
} let r = await getSegmentList(params)
let r = await getSegmentList(params) if (r.IsSuccess) {
if (r.IsSuccess) { let segments = r.Result.CurrentPageData
let segments = r.Result.CurrentPageData segments.forEach(s => {
segments.forEach(s => { if (!segmentIndex) segmentIndex = s.SegmentNumber
if (!segmentIndex) segmentIndex = s.SegmentNumber let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {};
let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {}; segmentation.segmentIndex.setActiveSegmentIndex(s.SegmentationId, s.SegmentNumber);
segmentation.segmentIndex.setActiveSegmentIndex(s.SegmentationId, s.SegmentNumber); segmentation.config.color.setSegmentIndexColor(viewportId, s.SegmentationId, s.SegmentNumber, hex2Rgb(s.ColorRgb))
segmentation.config.color.setSegmentIndexColor(viewportId, s.SegmentationId, s.SegmentNumber, hex2Rgb(s.ColorRgb)) segmentation.segmentLocking.setSegmentIndexLocked(s.SegmentationId, s.SegmentNumber, s.IsLock)
segmentation.segmentLocking.setSegmentIndexLocked(s.SegmentationId, s.SegmentNumber, s.IsLock) if (SegmentJson.bidirectional) {
if (SegmentJson.bidirectional) { let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional"); if (!an) {
if (!an) { let { majorAxis, minorAxis } = SegmentJson.bidirectional
let { majorAxis, minorAxis } = SegmentJson.bidirectional // createSegmentConfiguration(s.SegmentNumber, s.SegmentationId, viewportId, actionConfiguration)
// createSegmentConfiguration(s.SegmentNumber, s.SegmentationId, viewportId, actionConfiguration) SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], {
SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], { segmentIndex: s.SegmentNumber,
segmentIndex: s.SegmentNumber, segmentationId: s.SegmentationId,
segmentationId: s.SegmentationId, })
})
}
an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
if (an) {
annotation.locking.setAnnotationLocked(an.annotationUID, true)
annotation.visibility.setAnnotationVisibility(an.annotationUID, true)
}
} }
an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === s.SegmentationId && i.metadata.segmentIndex === SegmentJson.bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
if (an) {
annotation.locking.setAnnotationLocked(an.annotationUID, true)
annotation.visibility.setAnnotationVisibility(an.annotationUID, true)
}
}
}) })
} }
if (segmentationId && segmentIndex) { if (segmentationId && segmentIndex) {
selectSegment(viewportId, segmentationId, segmentIndex) selectSegment(viewportId, segmentationId, segmentIndex)
} }
if (Segment) { if (Segment) {
jumpBidirectional(Segment, viewportId, series.SeriesInstanceUid) jumpBidirectional(Segment, viewportId, series.SeriesInstanceUid)
}
} }
} }
readingSegmentByConfig(series, visitInfo, viewportId, segmentationId, SegmentConfig) }
}, 500) readingSegmentByConfig(series, visitInfo, viewportId, segmentationId, SegmentConfig)
} catch (err) { } catch (err) {
console.log(err) console.log(err)
} }

View File

@ -221,7 +221,6 @@ export default {
Object.keys(this.seriesData).forEach(key => { Object.keys(this.seriesData).forEach(key => {
if (key !== 'default' || this.isNeedDefault) seriesData.push(this.seriesData[key]) if (key !== 'default' || this.isNeedDefault) seriesData.push(this.seriesData[key])
}) })
seriesData = this.formatSeriesData(seriesData)
this.chart.clear(); this.chart.clear();
const option = { const option = {
useUTC: true, useUTC: true,
@ -288,27 +287,6 @@ export default {
}; };
this.chart.setOption(option); this.chart.setOption(option);
}, },
formatSeriesData(seriesData) {
let arr = []
seriesData.forEach(serie => {
serie.data.forEach(item => {
if (!arr.includes(item[0])) arr.push(item[0])
})
})
arr = arr.sort((a, b) => a - b)
seriesData.forEach(serie => {
let data = []
arr.forEach(item => {
if (serie.objKey[item]) {
data.push([item, serie.objKey[item]])
} else {
data.push([item, 0])
}
})
serie.data = data
})
return seriesData
},
async generateData(annotation) { async generateData(annotation) {
var seriesData = []; var seriesData = [];
var min = null; var min = null;
@ -319,8 +297,10 @@ export default {
} else { } else {
res = await this.getCurrentSliceValuesFromVoxelManager(this.renderingEngineId, `${this.viewportKey}-${this.activeViewportIndex}`) res = await this.getCurrentSliceValuesFromVoxelManager(this.renderingEngineId, `${this.viewportKey}-${this.activeViewportIndex}`)
} }
let obj = {}
if (res) { if (res) {
let obj = {
}
res.values.forEach(item => { res.values.forEach(item => {
if (obj[item]) { if (obj[item]) {
obj[item]++ obj[item]++
@ -347,8 +327,7 @@ export default {
seriesData: { seriesData: {
type: 'line', type: 'line',
symbolSize: 0, symbolSize: 0,
data: seriesData, data: seriesData
objKey: obj
}, },
min: min, min: min,
max: max max: max