部分问题修复
continuous-integration/drone/push Build is passing Details

uat_us
wangxiaoshuang 2026-03-31 15:17:13 +08:00
parent 307c02725f
commit ca35fe6df4
6 changed files with 117 additions and 77 deletions

View File

@ -497,7 +497,7 @@ export default {
setCtTransferFunctionForVolumeActor(r) setCtTransferFunctionForVolumeActor(r)
} }
console.log("渲染成功") console.log("渲染成功")
DicomEvent.$emit("isloaded", {}) DicomEvent.$emit("isloaded", { isChange: false })
} }
}]).then(r => { }]).then(r => {
if (data.isLocation || !this.imageInfo.zoom) { if (data.isLocation || !this.imageInfo.zoom) {

View File

@ -2539,7 +2539,7 @@ export default {
viewport.render() viewport.render()
renderingEngine.render() renderingEngine.render()
if (this.readingTool === 3) { if (this.readingTool === 3) {
DicomEvent.$emit('isloaded', {}) DicomEvent.$emit('isloaded', { isChange: false })
} }
}, },
// //
@ -2826,13 +2826,20 @@ export default {
renderingEngine.resize(true, false) renderingEngine.resize(true, false)
renderingEngine.render() renderingEngine.render()
if (this.readingTool === 3) { if (this.readingTool === 3) {
DicomEvent.$emit('isloaded', {}) DicomEvent.$emit('isloaded', { isChange: false })
} }
}) })
} }
if (this.isFusion) { if (this.isFusion || this.isMPR || this.readingTool === 3) {
const viewportIds = [`${this.viewportKey}-0`, `${this.viewportKey}-1`, `${this.viewportKey}-2`] let viewportIds = [`${this.viewportKey}-0`, `${this.viewportKey}-1`, `${this.viewportKey}-2`]
if (!this.isFusion && !this.isMPR) {
viewportIds = []
for (let i = 0; i < this.cells.length; i++) {
const viewportId = `${this.viewportKey}-${i}`
viewportIds.push(viewportId)
}
}
viewportIds.forEach(id => { viewportIds.forEach(id => {
const index = this.$refs[id][0].series.SliceIndex const index = this.$refs[id][0].series.SliceIndex
this.$refs[id][0].setFullScreen(index) this.$refs[id][0].setFullScreen(index)
@ -2933,13 +2940,14 @@ export default {
this.activeViewportIndex = 0 this.activeViewportIndex = 0
this.fullScreenIndex = null this.fullScreenIndex = null
this.isMPR = false this.isMPR = false
obj.isChange = false
this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setSeriesInfo(obj) this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setSeriesInfo(obj)
return this.$nextTick(() => { return this.$nextTick(() => {
const renderingEngine = getRenderingEngine(renderingEngineId) const renderingEngine = getRenderingEngine(renderingEngineId)
renderingEngine.resize(true, false) renderingEngine.resize(true, false)
renderingEngine.render() renderingEngine.render()
if (this.readingTool === 3) { if (this.readingTool === 3) {
DicomEvent.$emit('isloaded', {}) DicomEvent.$emit('isloaded', { isChange: false })
} }
}) })

View File

@ -148,7 +148,7 @@
</div> </div>
<i slot="reference" class="el-icon-more" style="cursor: pointer;color:#fff" /> <i slot="reference" class="el-icon-more" style="cursor: pointer;color:#fff" />
</el-popover> </el-popover>
<el-select v-model="segmentationId" placeholder="" @change="selectSegmentGroup"> <el-select v-model="segmentationId" placeholder="" @change="selectSegmentGroup()">
<el-option v-for="item in segmentList" :key="`${item.segmentationId}`" <el-option v-for="item in segmentList" :key="`${item.segmentationId}`"
:label="item.name" :value="item.segmentationId"> :label="item.name" :value="item.segmentationId">
</el-option> </el-option>
@ -159,7 +159,7 @@
:title="$t('trials:reading:Segmentations:tip:segmentationIsNotSave')" :title="$t('trials:reading:Segmentations:tip:segmentationIsNotSave')"
v-if="!curSegmentGroup.isSaved"></i> v-if="!curSegmentGroup.isSaved"></i>
<el-button type="success" size="small" @click="saveSegmentGroup([curSegmentGroup])"> <el-button type="success" size="small" @click="saveSegmentGroup([curSegmentGroup])">
{{ $t("common:button:save") }} {{ $t("trials:reading:Segmentations:button:save") }}
</el-button> </el-button>
</div> </div>
</div> </div>
@ -186,7 +186,7 @@
<template v-else> <template v-else>
<div class="num"> <div class="num">
<span>L:{{ Number(item.bidirectional.maxMajor).toFixed(2) }} mm</span> <span>L:{{ Number(item.bidirectional.maxMajor).toFixed(2) }} mm</span>
<span>s:{{ Number(item.bidirectional.maxMinor).toFixed(2) }} mm</span> <span>W:{{ Number(item.bidirectional.maxMinor).toFixed(2) }} mm</span>
</div> </div>
<div class="btnBox"> <div class="btnBox">
<svg-icon :icon-class="!item.bidirectionalView ? 'eye' : 'eye-open'" <svg-icon :icon-class="!item.bidirectionalView ? 'eye' : 'eye-open'"
@ -243,8 +243,9 @@
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
<div class="saveBtnBox"> <div class="saveBtnBox">
<el-button type="success" size="small" @click="saveSegmentGroup()">{{ $t("common:button:save") <el-button type="success" size="small" @click="saveSegmentGroup()">
}}</el-button> {{ $t("trials:reading:Segmentations:button:saveAll") }}
</el-button>
</div> </div>
</div> </div>
</template> </template>
@ -331,6 +332,7 @@ export default {
isDynamic: false, isDynamic: false,
range: [200, 1000] range: [200, 1000]
}, },
tools: ['LabelMapEditWithContour', 'CircularBrush', 'CircularEraser'],
ThresholdTools: ['ThresholdCircle', 'ThresholdSphere'], ThresholdTools: ['ThresholdCircle', 'ThresholdSphere'],
thresholdType: null, thresholdType: null,
showSegmentConfig: false, showSegmentConfig: false,
@ -383,8 +385,8 @@ export default {
DicomEvent.$on('isloaded', (data) => { DicomEvent.$on('isloaded', (data) => {
if (this.isloaded) return false if (this.isloaded) return false
this.isloaded = true this.isloaded = true
let { segment } = data let { segment, isChange = true } = data
this.delAllSegment() this.delAllSegment(isChange)
this.getSegmentationList(segment) this.getSegmentationList(segment)
}) })
const digitPlaces = Number(localStorage.getItem('digitPlaces')) const digitPlaces = Number(localStorage.getItem('digitPlaces'))
@ -473,13 +475,13 @@ export default {
this.actionConfiguration.contourBidirectional.data.segmentIndex = segmentIndex this.actionConfiguration.contourBidirectional.data.segmentIndex = segmentIndex
}, },
async addTip(item) { async addTip(item) {
let segmentGroup = this.segmentList.filter(item => i.segmentationId === i.segmentationId) let segmentGroup = this.segmentList.filter(i => item.segmentationId === i.segmentationId)
await this.saveSegmentGroup(segmentGroup, false) await this.saveSegmentGroup(segmentGroup, false)
this.calculateStatistics([item.segmentIndex], item.segmentationId, 'individual'); this.calculateStatistics([item.segmentIndex], item.segmentationId, 'individual');
this.getBidirectional([item]) this.getBidirectional([item])
}, },
getBidirectional(list, DATA = null) { getBidirectional(list, DATA = null, isCompute = true) {
list.forEach(item => { list.forEach(item => {
this.createSegmentConfiguration(item.segmentIndex, item.segmentationId); this.createSegmentConfiguration(item.segmentIndex, item.segmentationId);
}) })
@ -487,13 +489,14 @@ export default {
const renderingEngine = getRenderingEngine(this.renderingEngineId) const renderingEngine = getRenderingEngine(this.renderingEngineId)
const viewportId = `${this.viewportKey}-${this.activeViewportIndex}` const viewportId = `${this.viewportKey}-${this.activeViewportIndex}`
const viewport = renderingEngine.getViewport(viewportId); const viewport = renderingEngine.getViewport(viewportId);
if (isCompute) {
[viewport.element].forEach(async (element) => { [viewport.element].forEach(async (element) => {
const bidirectionalData = const bidirectionalData =
await CStUtils.segmentation.getSegmentLargestBidirectional({ await CStUtils.segmentation.getSegmentLargestBidirectional({
segmentationId: list[0].segmentationId, segmentationId: list[0].segmentationId,
segmentIndices: list.map(item => item.segmentIndex), segmentIndices: list.map(item => item.segmentIndex),
}); });
console.log(bidirectionalData, 'bidirectionalData') console.log(bidirectionalData, list[0].segmentationId, 'bidirectionalData')
if (bidirectionalData.length <= 0) { if (bidirectionalData.length <= 0) {
list.forEach(item => { list.forEach(item => {
let annotations = annotation.state.getAllAnnotations().filter(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === item.segmentIndex); let annotations = annotation.state.getAllAnnotations().filter(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === item.segmentIndex);
@ -520,7 +523,7 @@ export default {
SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], { SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], {
segmentIndex, segmentIndex,
segmentationId: item.segmentationId, segmentationId: item.segmentationId,
}); })
let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional"); let an = annotation.state.getAllAnnotations().find(i => i.metadata.segmentationId === item.segmentationId && i.metadata.segmentIndex === bidirectional.segmentIndex && i.metadata.toolName === "SegmentBidirectional");
if (an) { if (an) {
annotation.locking.setAnnotationLocked(an.annotationUID, true) annotation.locking.setAnnotationLocked(an.annotationUID, true)
@ -538,6 +541,18 @@ export default {
}); });
}); });
} else {
list.forEach(item => {
if (item.bidirectional) {
let { majorAxis, minorAxis } = item.bidirectional
SegmentBidirectionalTool.hydrate(viewportId, [majorAxis, minorAxis], {
segmentIndex: item.segmentIndex,
segmentationId: item.segmentationId,
})
}
})
}
}, },
setToolActive(toolName) { setToolActive(toolName) {
if (this.segmentList.length <= 0) return false if (this.segmentList.length <= 0) return false
@ -647,9 +662,11 @@ export default {
item.lock = lock item.lock = lock
if (!lock) this.changeSegmentationSavedStatus(item.segmentationId, lock) if (!lock) this.changeSegmentationSavedStatus(item.segmentationId, lock)
}, },
selectSegment(item) { selectSegment(item, isChange = true) {
if (isChange) {
this.segmentationId = item.segmentationId; this.segmentationId = item.segmentationId;
this.segmentIndex = item.segmentIndex; this.segmentIndex = item.segmentIndex;
}
segmentation.segmentIndex.setActiveSegmentIndex(item.segmentationId, item.segmentIndex); segmentation.segmentIndex.setActiveSegmentIndex(item.segmentationId, item.segmentIndex);
this.jumpBidirectional(item) this.jumpBidirectional(item)
if (item.lock) { if (item.lock) {
@ -657,11 +674,11 @@ export default {
} }
// this.resetViewport() // this.resetViewport()
}, },
selectSegmentGroup() { selectSegmentGroup(s) {
this.viewprotIds.forEach(id => { this.viewprotIds.forEach(id => {
segmentation.activeSegmentation.setActiveSegmentation(id, this.segmentationId) segmentation.activeSegmentation.setActiveSegmentation(id, this.segmentationId)
}) })
let segment = this.segmentList.find(item => item.segmentationId === this.segmentationId).segments[0] let segment = s ? s : this.segmentList.find(item => item.segmentationId === this.segmentationId).segments[0]
this.selectSegment(segment) this.selectSegment(segment)
this.readingSegmentByConfig() this.readingSegmentByConfig()
}, },
@ -775,15 +792,17 @@ export default {
}) })
}, },
// //
delAllSegment() { delAllSegment(isChange) {
segmentation.removeAllSegmentations() segmentation.removeAllSegmentations()
segmentation.state.removeAllSegmentations() segmentation.state.removeAllSegmentations()
let annotations = annotation.state.getAllAnnotations().filter(item => item.metadata.segmentationId && item.metadata.segmentIndex && item.metadata.toolName === "SegmentBidirectional"); let annotations = annotation.state.getAllAnnotations().filter(item => item.metadata.segmentationId && item.metadata.segmentIndex && item.metadata.toolName === "SegmentBidirectional");
annotations.forEach(item => { annotations.forEach(item => {
annotation.state.removeAnnotation(item.annotationUID) annotation.state.removeAnnotation(item.annotationUID)
}) })
if (isChange) {
this.segmentationId = '' this.segmentationId = ''
this.segmentIndex = null this.segmentIndex = null
}
this.segmentList = [] this.segmentList = []
this.resetViewport() this.resetViewport()
}, },
@ -1222,7 +1241,8 @@ export default {
}, },
segmentationModifiedCallback(evt) { segmentationModifiedCallback(evt) {
const { detail } = evt; const { detail } = evt;
if (!detail || detail.segmentIndex === 255) { let tools = [...this.ThresholdTools, ...this.tools]
if (!detail || detail.segmentIndex === 255 || !this.activeTool || !tools.includes(this.activeTool)) {
return; return;
} }
this.drawing = true this.drawing = true
@ -1379,8 +1399,8 @@ export default {
this.addOrUpdateSegmentation({ name: segmentGroup.name, id: segmentGroup.segmentationId, url: segmentGroup.segUrl }) this.addOrUpdateSegmentation({ name: segmentGroup.name, id: segmentGroup.segmentationId, url: segmentGroup.segUrl })
this.changeSegmentationSavedStatus(segmentGroup.segmentationId, saveSegment) this.changeSegmentationSavedStatus(segmentGroup.segmentationId, saveSegment)
if (saveSegment) { if (saveSegment) {
await this.getBidirectionalSaveSegment(list) await this.getBidirectionalSaveSegment(segmentList)
this.syncBindingAnswer(list) this.syncBindingAnswer(segmentList)
} }
} }
this.$emit("update:globalLoading", false) this.$emit("update:globalLoading", false)
@ -1467,7 +1487,7 @@ export default {
SegmentationId: segmentGroup.segmentationId SegmentationId: segmentGroup.segmentationId
} }
let res = await this.getSegmentBindingList(data) let res = await this.getSegmentBindingList(data)
if (res && res.length > 0) questionNeedChange = true // if (res && res.length > 0) questionNeedChange = true
for (let j = 0; j < res.length; j++) { for (let j = 0; j < res.length; j++) {
let item = res[j] let item = res[j]
let segment = segmentGroup.segments.find(d => d.id === item.SegmentId) let segment = segmentGroup.segments.find(d => d.id === item.SegmentId)
@ -1558,6 +1578,9 @@ export default {
this.createSegmentationRepresentation(obj.segmentationId) this.createSegmentationRepresentation(obj.segmentationId)
} }
} }
if (!this.segmentationId) {
this.segmentationId = obj.segmentationId
}
let segments = await this.getSegmentList(item.Id) let segments = await this.getSegmentList(item.Id)
segments.forEach((s, index) => { segments.forEach((s, index) => {
let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {}; let SegmentJson = s.SegmentJson ? JSON.parse(s.SegmentJson) : {};
@ -1576,19 +1599,28 @@ export default {
id: s.Id id: s.Id
} }
obj.segments.push(o) obj.segments.push(o)
this.selectSegment(o) this.selectSegment(o, false)
this.changeColor(s.ColorRgb, o) this.changeColor(s.ColorRgb, o)
this.lockSegment(o, true) this.lockSegment(o, true)
} }
if (!this.segmentIndex) {
this.segmentIndex = s.SegmentMumber
}
}) })
this.$nextTick(() => { this.$nextTick(() => {
if (SEGMENT) { if (SEGMENT) {
// console.log(SEGMENT, 'SEGMENT') // console.log(SEGMENT, 'SEGMENT')
return this.getBidirectional(obj.segments, SEGMENT) return this.getBidirectional(obj.segments, SEGMENT)
} }
this.getBidirectional(obj.segments) this.getBidirectional(obj.segments, null, false)
}) })
} }
if (this.segmentationId && this.segmentIndex) {
let segment = this.segmentList.find(item => item.segmentationId === this.segmentationId).segments.find(item => item.segmentIndex === this.segmentIndex)
console.log(segment, 'segment')
this.selectSegmentGroup(segment)
// this.selectSegment(segment)
}
this.isloaded = false this.isloaded = false
this.readingSegmentByConfig() this.readingSegmentByConfig()
} }

View File

@ -541,12 +541,12 @@ export default {
} }
}]).then(r => { }]).then(r => {
if (data.segment) { if (data.segment) {
return DicomEvent.$emit("isloaded", { segment: data.segment }) return DicomEvent.$emit("isloaded", { segment: data.segment, isChange: data.isChange })
} }
if (data.isLocation) { if (data.isLocation) {
setTimeout(() => { csUtils.jumpToSlice(viewport.element, { imageIndex: data.SliceIndex }); }) setTimeout(() => { csUtils.jumpToSlice(viewport.element, { imageIndex: data.SliceIndex }); })
} }
DicomEvent.$emit("isloaded", {}) DicomEvent.$emit("isloaded", { isChange: data.isChange })
}) })
viewport.render() viewport.render()
} catch (e) { } catch (e) {

View File

@ -190,7 +190,7 @@
@input="numberInput(question.Id)" @input="numberInput(question.Id)"
@blur="questionsSegmentMarkStatus[question.Id] ? () => { } : handleMarkedQsBlur(questionForm[question.Id], questionForm, question.Id, question)" @blur="questionsSegmentMarkStatus[question.Id] ? () => { } : handleMarkedQsBlur(questionForm[question.Id], questionForm, question.Id, question)"
v-model="questionForm[question.Id]" v-model="questionForm[question.Id]"
:title="questionsSegmentMarkStatus[question.Id] ? `${questionsSegmentMarkStatus[question.Id].SegmentationName}_${questionsSegmentMarkStatus[question.Id].SegmentName}` : question.Remark" :title="questionsSegmentMarkStatus[question.Id] ? `${questionsSegmentMarkStatus[question.Id].SegmentationName}\n${questionsSegmentMarkStatus[question.Id].SegmentName}\n${questionForm[question.Id]}` : question.Remark"
:disabled="(questionsSegmentMarkStatus[question.Id] && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || readingTaskState === 2" :disabled="(questionsSegmentMarkStatus[question.Id] && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || readingTaskState === 2"
style="width: 150px;margin-right: 5px;"> style="width: 150px;margin-right: 5px;">
<template v-if="question.Unit !== 0" slot="append"> <template v-if="question.Unit !== 0" slot="append">

View File

@ -113,7 +113,7 @@
@input="numberInput(question.Id)" @input="numberInput(question.Id)"
@blur="questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] ? () => { } : handleMarkedQsBlur(questionForm[question.Id], questionForm, question.Id, question)" @blur="questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] ? () => { } : handleMarkedQsBlur(questionForm[question.Id], questionForm, question.Id, question)"
v-model="questionForm[question.Id]" v-model="questionForm[question.Id]"
:title="questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] ? `${questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id].SegmentationName}_${questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id].SegmentName}` : question.Remark" :title="questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] ? `${questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id].SegmentationName}\n${questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id].SegmentName}\n${questionForm[question.Id]}` : question.Remark"
:disabled="(questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || question.IsPreinstall" :disabled="(questionsSegmentMarkStatus[rowId ? `${rowId}_${question.Id}` : question.Id] && question.ImageMarkEnum === 2) || question.ImageMarkEnum === 1 || question.IsPreinstall"
style="width: 150px;margin-right: 5px;"> style="width: 150px;margin-right: 5px;">
<template v-if="question.Unit !== 0" slot="append"> <template v-if="question.Unit !== 0" slot="append">