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-06 16:11:35 +08:00
commit 8ff9e3b232
5 changed files with 47 additions and 26 deletions

View File

@ -304,7 +304,7 @@ export default {
cornerstoneTools.addToolForElement(element, Note_RectangleRoiTool, {
configuration: {
color: '#f00',
lineWidth: 0.5,
lineWidth: 2,
drawHandles: false,
fillColor: 'rgba(0, 0, 0, 1)',
},

View File

@ -9,10 +9,10 @@
<div class="Anonymous" v-if="isAnonymous">
<div
:class="{ btn: true, activeBtn: activeTool === 'Note_RectangleRoi' && !isComparison, isNoted: isComparison }"
@click="setToolActive($event, 'Note_RectangleRoi')">{{
@click="setToolActive($event, 'Note_RectangleRoi', true)">{{
$t('DicomViewer:anonymous:Note_RectangleRoi') }}</div>
<div :class="{ btn: true, activeBtn: activeTool === 'Eraser' && !isComparison, isNoted: isComparison }"
@click="setToolActive($event, 'Eraser')">{{
@click="setToolActive($event, 'Eraser', true)">{{
$t('DicomViewer:anonymous:Eraser') }}
</div>
<div :class="{ btn: true, isNoted: isComparison }" @click="anonymousImage(false)">{{
@ -299,7 +299,8 @@
v-if="type === 'Study' && modality && ['PT、CT', 'CT、PT', 'PET-CT'].includes(modality)">
<div class="sideTool-title">{{ $t('trials:tab:patientData') }}</div>
<div class="sideTool-wrapper">
<el-form ref="patientForm" size="mini" :model="formData" :rules="rules" label-width="150" v-loading="formLoading">
<el-form ref="patientForm" size="mini" :model="formData" :rules="rules" label-width="150"
v-loading="formLoading">
<!-- 性别 -->
<el-form-item :label="$t('trials:ptData:label:patientSex')" prop="PatientSex">
<el-select v-model="formData.PatientSex" :placeholder="$t('common:ruleMessage:select')"
@ -401,10 +402,10 @@ export default {
handler(v) {
if (v) {
if (this.type === 'Study' && ['PT、CT', 'CT、PT', 'PET-CT'].includes(v)) {
this.$nextTick(()=>{
this.$nextTick(() => {
this.getPatientInfo()
})
}
}
}
}
}
@ -641,7 +642,7 @@ export default {
})
})
let res = await this.studyMaskImage(data)
if (!res) return false
if (!res || res.length <= 0) return this.$confirm(this.$t("DicomViewer:anonymous:studyMaskImageFail"))
this.$emit("update:loading", true)
if (!isAll) {
let strs = image.imageId.split("?")
@ -839,8 +840,25 @@ export default {
}
})
},
setToolActive(e, toolName) {
setToolActive(e, toolName, isNotSetClassName = false) {
const elements = document.querySelectorAll('.dicom-item')
if (isNotSetClassName) {
const scope = this
if (scope.activeTool) {
Array.from(elements).forEach((element, index) => {
if (element.style.display !== 'none') {
scope.$refs[`dicomCanvas${index}`].setToolPassive(scope.activeTool)
}
})
}
if (scope.activeTool === toolName) return scope.activeTool = null
scope.activeTool = toolName
return Array.from(elements).forEach((element, index) => {
if (element.style.display !== 'none') {
scope.$refs[`dicomCanvas${index}`].setToolActive(toolName)
}
})
}
if (e.currentTarget.classList.contains('activeTool')) {
e.currentTarget.classList.remove('activeTool')
const scope = this
@ -1020,7 +1038,7 @@ export default {
try {
this.formLoading = true
let studyId = this.$route.query.studyId
let res = await getPatientInfo({studyId: studyId})
let res = await getPatientInfo({ studyId: studyId })
this.formData = {
Id: res.Result.Id || '',
PatientSex: res.Result.PatientSex || '',
@ -1035,7 +1053,7 @@ export default {
// PT 2D SUV 使/
this.cachePtClinicalDataToInstances()
this.formLoading = false
} catch(e) {
} catch (e) {
this.formLoading = false
console.log(e)
}
@ -1161,6 +1179,7 @@ export default {
cursor: pointer;
padding: 5px 10px;
border: 1px solid rgba(255, 255, 255, .7);
color: #000;
&:hover {
background-color: rgba(255, 255, 255, .5);
@ -1168,7 +1187,8 @@ export default {
}
.activeBtn {
background-color: rgba(255, 255, 255, .5);
background-color: #16477b90;
color: #fff;
}
.isNoted {

View File

@ -41,10 +41,10 @@
<div v-if="series" class="right-bottom-text">
<div v-show="imageInfo.location">Location: {{
`${Number(imageInfo.location).toFixed(digitPlaces)} mm`
}}</div>
}}</div>
<div v-show="imageInfo.sliceThickness">Slice Thickness: {{
`${Number(imageInfo.sliceThickness).toFixed(digitPlaces)} mm`
}}</div>
}}</div>
<div v-show="imageInfo.wwwc">WW/WL: {{ imageInfo.wwwc }}</div>
</div>
<div class="orientation-top">
@ -658,13 +658,12 @@ export default {
}
})
viewport.render()
if (this.series.Modality === 'PT') {
if (this.series.Modality === 'PT' || this.series.Modality === 'NM') {
setTimeout(() => {
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
viewport.resetProperties()
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
// viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
// viewport.resetProperties()
viewport.setProperties({ voiRange: { upper: 5, lower: 0 }, invert: true }, this.volumeId)
viewport.render()
renderingEngine.render()
}, 100)
}
await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, null, this.actionConfiguration, this.segmentationId, this.segmentIndex)

View File

@ -3052,7 +3052,6 @@ export default {
if (this.readingTool !== 3) {
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true, resetRotation: true })
}
viewport.resetProperties()
if (this.isMPR) {
let volume = cache.getVolume(this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].volumeId)
const voi = metaData.get('voiLutModule', volume._imageIds[Math.ceil((volume._imageIds.length - 1) / 2)])
@ -3068,9 +3067,12 @@ export default {
return this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setFullScreen(index)
}
// viewport.resetProperties()
this.setToolsPassive()
if (this.readingTool === 3 && this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series.Modality === 'PT') {
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
viewport.setProperties({ voiRange: { upper: 5, lower: 0 }, invert: true }, this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].volumeId)
} else {
viewport.resetProperties()
}
viewport.render()
// renderingEngine.render()
@ -3405,6 +3407,7 @@ export default {
//
async toggleFullScreen(e, index) {
if (this.isDelay && (this.readingTool === 3 || this.isMPR)) return false
if (this.readingTool === 3 && this.isMPR) return false
if (this.readingTool === 3) {
let res = await this.changeScreenSave()
if (!res) return false

View File

@ -59,10 +59,10 @@
<div v-if="series" class="right-bottom-text">
<div v-show="imageInfo.location">Location: {{
`${Number(imageInfo.location).toFixed(digitPlaces)} mm`
}}</div>
}}</div>
<div v-show="imageInfo.sliceThickness">Slice Thickness: {{
`${Number(imageInfo.sliceThickness).toFixed(digitPlaces)} mm`
}}</div>
}}</div>
<div v-show="imageInfo.wwwc">WW/WL: {{ imageInfo.wwwc }}</div>
</div>
<div class="orientation-top">
@ -706,11 +706,10 @@ export default {
viewport.render()
if (this.series.Modality === 'PT' || this.series.Modality === 'NM') {
setTimeout(() => {
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
viewport.resetProperties()
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
// viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
// viewport.resetProperties()
viewport.setProperties({ voiRange: { upper: 5, lower: 0 }, invert: true }, this.volumeId)
viewport.render()
renderingEngine.render()
}, 100)
}
await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, data.segment, this.actionConfiguration, this.segmentationId, this.segmentIndex)