Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
8ff9e3b232
|
|
@ -304,7 +304,7 @@ export default {
|
||||||
cornerstoneTools.addToolForElement(element, Note_RectangleRoiTool, {
|
cornerstoneTools.addToolForElement(element, Note_RectangleRoiTool, {
|
||||||
configuration: {
|
configuration: {
|
||||||
color: '#f00',
|
color: '#f00',
|
||||||
lineWidth: 0.5,
|
lineWidth: 2,
|
||||||
drawHandles: false,
|
drawHandles: false,
|
||||||
fillColor: 'rgba(0, 0, 0, 1)',
|
fillColor: 'rgba(0, 0, 0, 1)',
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@
|
||||||
<div class="Anonymous" v-if="isAnonymous">
|
<div class="Anonymous" v-if="isAnonymous">
|
||||||
<div
|
<div
|
||||||
:class="{ btn: true, activeBtn: activeTool === 'Note_RectangleRoi' && !isComparison, isNoted: isComparison }"
|
: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>
|
$t('DicomViewer:anonymous:Note_RectangleRoi') }}</div>
|
||||||
<div :class="{ btn: true, activeBtn: activeTool === 'Eraser' && !isComparison, isNoted: isComparison }"
|
<div :class="{ btn: true, activeBtn: activeTool === 'Eraser' && !isComparison, isNoted: isComparison }"
|
||||||
@click="setToolActive($event, 'Eraser')">{{
|
@click="setToolActive($event, 'Eraser', true)">{{
|
||||||
$t('DicomViewer:anonymous:Eraser') }}
|
$t('DicomViewer:anonymous:Eraser') }}
|
||||||
</div>
|
</div>
|
||||||
<div :class="{ btn: true, isNoted: isComparison }" @click="anonymousImage(false)">{{
|
<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)">
|
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-title">{{ $t('trials:tab:patientData') }}</div>
|
||||||
<div class="sideTool-wrapper">
|
<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-form-item :label="$t('trials:ptData:label:patientSex')" prop="PatientSex">
|
||||||
<el-select v-model="formData.PatientSex" :placeholder="$t('common:ruleMessage:select')"
|
<el-select v-model="formData.PatientSex" :placeholder="$t('common:ruleMessage:select')"
|
||||||
|
|
@ -401,10 +402,10 @@ export default {
|
||||||
handler(v) {
|
handler(v) {
|
||||||
if (v) {
|
if (v) {
|
||||||
if (this.type === 'Study' && ['PT、CT', 'CT、PT', 'PET-CT'].includes(v)) {
|
if (this.type === 'Study' && ['PT、CT', 'CT、PT', 'PET-CT'].includes(v)) {
|
||||||
this.$nextTick(()=>{
|
this.$nextTick(() => {
|
||||||
this.getPatientInfo()
|
this.getPatientInfo()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -641,7 +642,7 @@ export default {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
let res = await this.studyMaskImage(data)
|
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)
|
this.$emit("update:loading", true)
|
||||||
if (!isAll) {
|
if (!isAll) {
|
||||||
let strs = image.imageId.split("?")
|
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')
|
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')) {
|
if (e.currentTarget.classList.contains('activeTool')) {
|
||||||
e.currentTarget.classList.remove('activeTool')
|
e.currentTarget.classList.remove('activeTool')
|
||||||
const scope = this
|
const scope = this
|
||||||
|
|
@ -1020,7 +1038,7 @@ export default {
|
||||||
try {
|
try {
|
||||||
this.formLoading = true
|
this.formLoading = true
|
||||||
let studyId = this.$route.query.studyId
|
let studyId = this.$route.query.studyId
|
||||||
let res = await getPatientInfo({studyId: studyId})
|
let res = await getPatientInfo({ studyId: studyId })
|
||||||
this.formData = {
|
this.formData = {
|
||||||
Id: res.Result.Id || '',
|
Id: res.Result.Id || '',
|
||||||
PatientSex: res.Result.PatientSex || '',
|
PatientSex: res.Result.PatientSex || '',
|
||||||
|
|
@ -1035,7 +1053,7 @@ export default {
|
||||||
// 缓存 PT 临床数据:用于 2D SUV 计算时优先使用接口/人工录入值
|
// 缓存 PT 临床数据:用于 2D SUV 计算时优先使用接口/人工录入值
|
||||||
this.cachePtClinicalDataToInstances()
|
this.cachePtClinicalDataToInstances()
|
||||||
this.formLoading = false
|
this.formLoading = false
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
this.formLoading = false
|
this.formLoading = false
|
||||||
console.log(e)
|
console.log(e)
|
||||||
}
|
}
|
||||||
|
|
@ -1161,6 +1179,7 @@ export default {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
border: 1px solid rgba(255, 255, 255, .7);
|
border: 1px solid rgba(255, 255, 255, .7);
|
||||||
|
color: #000;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: rgba(255, 255, 255, .5);
|
background-color: rgba(255, 255, 255, .5);
|
||||||
|
|
@ -1168,7 +1187,8 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.activeBtn {
|
.activeBtn {
|
||||||
background-color: rgba(255, 255, 255, .5);
|
background-color: #16477b90;
|
||||||
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.isNoted {
|
.isNoted {
|
||||||
|
|
|
||||||
|
|
@ -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">
|
||||||
|
|
@ -658,13 +658,12 @@ export default {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
viewport.render()
|
viewport.render()
|
||||||
if (this.series.Modality === 'PT') {
|
if (this.series.Modality === 'PT' || this.series.Modality === 'NM') {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
|
// viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
|
||||||
viewport.resetProperties()
|
// viewport.resetProperties()
|
||||||
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
|
viewport.setProperties({ voiRange: { upper: 5, lower: 0 }, invert: true }, this.volumeId)
|
||||||
viewport.render()
|
viewport.render()
|
||||||
renderingEngine.render()
|
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
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)
|
||||||
|
|
|
||||||
|
|
@ -3052,7 +3052,6 @@ export default {
|
||||||
if (this.readingTool !== 3) {
|
if (this.readingTool !== 3) {
|
||||||
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true, resetRotation: true })
|
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true, resetRotation: true })
|
||||||
}
|
}
|
||||||
viewport.resetProperties()
|
|
||||||
if (this.isMPR) {
|
if (this.isMPR) {
|
||||||
let volume = cache.getVolume(this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].volumeId)
|
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)])
|
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)
|
return this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].setFullScreen(index)
|
||||||
}
|
}
|
||||||
|
// viewport.resetProperties()
|
||||||
this.setToolsPassive()
|
this.setToolsPassive()
|
||||||
if (this.readingTool === 3 && this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series.Modality === 'PT') {
|
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()
|
viewport.render()
|
||||||
// renderingEngine.render()
|
// renderingEngine.render()
|
||||||
|
|
@ -3405,6 +3407,7 @@ export default {
|
||||||
// 切换全屏
|
// 切换全屏
|
||||||
async toggleFullScreen(e, index) {
|
async toggleFullScreen(e, index) {
|
||||||
if (this.isDelay && (this.readingTool === 3 || this.isMPR)) return false
|
if (this.isDelay && (this.readingTool === 3 || this.isMPR)) return false
|
||||||
|
if (this.readingTool === 3 && this.isMPR) return false
|
||||||
if (this.readingTool === 3) {
|
if (this.readingTool === 3) {
|
||||||
let res = await this.changeScreenSave()
|
let res = await this.changeScreenSave()
|
||||||
if (!res) return false
|
if (!res) return false
|
||||||
|
|
|
||||||
|
|
@ -59,10 +59,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">
|
||||||
|
|
@ -706,11 +706,10 @@ export default {
|
||||||
viewport.render()
|
viewport.render()
|
||||||
if (this.series.Modality === 'PT' || this.series.Modality === 'NM') {
|
if (this.series.Modality === 'PT' || this.series.Modality === 'NM') {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
|
// viewport.resetCamera({ resetPan: true, resetZoom: true, resetToCenter: true })
|
||||||
viewport.resetProperties()
|
// viewport.resetProperties()
|
||||||
viewport.setProperties({ voiRange: { upper: 5, lower: 0 } })
|
viewport.setProperties({ voiRange: { upper: 5, lower: 0 }, invert: true }, this.volumeId)
|
||||||
viewport.render()
|
viewport.render()
|
||||||
renderingEngine.render()
|
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, data.segment, this.actionConfiguration, this.segmentationId, this.segmentIndex)
|
await renderSegmentation(this.series, this.series.TaskInfo, this.viewportId, this.SegmentConfig, this.renderingEngineId, data.segment, this.actionConfiguration, this.segmentationId, this.segmentIndex)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue