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

main
wangxiaoshuang 2026-05-06 13:28:04 +08:00
commit 00e03c782d
6 changed files with 145 additions and 99 deletions

View File

@ -140,7 +140,7 @@
</div>
</el-tooltip>
<!-- 伪彩 -->
<colorMap v-show="isFusion" ref="colorMap" :unit="fusionOverlayModality === 'NM' ? 'counts' : 'g/ml'"
<colorMap v-show="isFusion" ref="colorMap" :unit="fusionOverlayModality === 'NM' ? '' : 'g/ml'"
:modality="fusionOverlayModality" @setColorMap="setColorMap" @voiChange="voiChange" />
<!-- 截屏 -->

View File

@ -81,7 +81,7 @@
{{ markers.left }}
</div>
<div v-if="presetName" class="color_bar">
<canvas id="colorBar_Canvas" />
<canvas ref="colorBarCanvas" />
</div>
<div v-if="index === 4" id="rotateBar" ref="rotateBar" class="rotate_slider_box" @click.stop="clickRotate($event)">
<div id="rotateSlider" :style="{left: rotateBarLeft + 'px'}" class="box" @click.stop.prevent="() => {return}" @mousedown.stop="rotateBarMousedown($event)" />
@ -162,6 +162,10 @@ export default {
default() {
return []
}
},
rgbPresetName: {
type: String,
default: ''
}
},
data() {
@ -203,6 +207,16 @@ export default {
handler(v) {
console.log('activeIndex ', v)
}
},
rgbPresetName: {
immediate: true,
handler(v) {
this.presetName = v || ''
if (!this.presetName) return
this.$nextTick(() => {
this.renderColorBar(this.presetName)
})
}
}
},
mounted() {
@ -574,7 +588,8 @@ export default {
colorMap = getColormap(presetName)
}
const rgbPoints = colorMap.RGBPoints
const canvas = document.getElementById('colorBar_Canvas')
const canvas = this.$refs.colorBarCanvas
if (!canvas) return
const ctx = canvas.getContext('2d')
const canvasWidth = 160
const canvasHeight = 5

View File

@ -20,49 +20,49 @@
style="width: 135px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;"
>
<div>
<div style="text-overflow: ellipsis;overflow: hidden;" v-if="!study.StudyName">
<div style="text-overflow: ellipsis;overflow: hidden;">
<span :title="study.StudyCode">{{ study.StudyCode }}</span>
<span style="margin-left: 5px;">{{ study.Modalities }} ({{ study.SeriesCount }})</span>
</div>
<div style="text-overflow: ellipsis;overflow: hidden;" v-else>
<span :title="study.StudyCode">{{ study.StudyCode }}</span>
<span v-if="taskInfo && taskInfo.IsShowStudyName" :title="study.StudyName" style="margin: 0 5px">
<span v-if="taskInfo && taskInfo.IsShowStudyName && study.StudyName" :title="study.StudyName" style="margin-left: 5px;">
{{study.StudyName}}
</span>
<div>{{ study.Modalities }} ({{ study.SeriesCount }})</div>
</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 style="text-overflow: ellipsis;overflow: hidden;">
<span class="study-meta-line" :title="study.Modalities">
<span>{{ study.Modalities }} ({{ study.SeriesCount }})</span>
<span 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>
</span>
</span>
</div>
<div v-if="study.Description" class="study-desc-text" :title="study.Description">{{ study.Description }}</div>
</div>
</div>
@ -974,6 +974,18 @@ export default {
color: #d0d0d0;
padding: 2px;
}
.study-meta-line {
display: inline-flex;
align-items: center;
gap: 6px;
vertical-align: middle;
}
.study-desc-text {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ps {
overflow-anchor: none;
@ -1069,7 +1081,16 @@ export default {
color: #ddd;
border-bottom-color:#5a5a5a;
padding-left: 5px;
height: 40px;
min-height: 40px;
height: auto;
line-height: 20px;
align-items: flex-start;
padding-top: 6px;
padding-bottom: 6px;
}
.el-collapse-item__arrow{
align-self: flex-start;
margin-top: 2px;
line-height: 20px;
}
}
@ -1141,8 +1162,9 @@ export default {
</style>
<style lang="scss">
.patient-info {
// display: inline-block;
text-align: right;
display: inline-flex;
align-items: center;
line-height: 1;
}
.patient-info-popper {
font-size: 12px;

View File

@ -14,54 +14,47 @@
<el-collapse-item :key="`${study.StudyId}`" :name="`${study.StudyId}`" v-if="!study.IsCriticalSequence">
<template slot="title">
<div v-if="readingTool !== 3 || !study.IsCriticalSequence" class="dicom-desc">
<template v-if="taskInfo && taskInfo.IsShowStudyName">
<div style="text-overflow: ellipsis;overflow: hidden;">
<span :title="study.StudyCode">{{ study.StudyCode }}</span>
<span v-if="study.StudyName" :title="study.StudyName" style="margin-left: 5px;">{{ study.StudyName
}}</span>
<span v-else :title="study.Modalities" style="margin-left: 5px;">{{ `${study.Modalities}
(${study.SeriesCount})` }}</span>
</div>
<div v-if="study.StudyName" style="text-overflow: ellipsis;overflow: hidden;">
<span :title="study.Modalities">{{ `${study.Modalities} (${study.SeriesCount})` }}</span>
</div>
</template>
<template v-else-if="taskInfo && !taskInfo.IsShowStudyName">
<div style="text-overflow: ellipsis;overflow: hidden;">
<span :title="study.StudyCode">{{ study.StudyCode }}</span>
<span :title="study.Modalities">{{ `${study.Modalities} (${study.SeriesCount})` }}</span>
</div>
</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 style="text-overflow: ellipsis;overflow: hidden;">
<span :title="study.StudyCode">{{ study.StudyCode }}</span>
<span v-if="taskInfo && taskInfo.IsShowStudyName && study.StudyName" :title="study.StudyName" style="margin-left: 5px;">
{{ study.StudyName }}
</span>
</div>
<div style="text-overflow: ellipsis;overflow: hidden;">
<span class="study-meta-line" :title="study.Modalities">
<span>{{ `${study.Modalities} (${study.SeriesCount})` }}</span>
<span 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>
</span>
</span>
</div>
</div>
@ -265,10 +258,10 @@ export default {
}
</script>
<style lang="scss">
.patient-info {
// display: inline-block;
text-align: right;
}
// .patient-info {
// // display: inline-block;
// // text-align: right;
// }
.patient-info-popper {
font-size: 12px;
@ -343,6 +336,17 @@ export default {
overflow: hidden;
text-overflow: ellipsis;
}
.study-meta-line {
display: inline-flex;
align-items: center;
gap: 6px;
vertical-align: middle;
}
.patient-info {
display: inline-flex;
align-items: center;
line-height: 1;
}
.ps {
flex: 1;
@ -427,8 +431,12 @@ export default {
color: #ddd;
border-bottom-color: #5a5a5a;
padding-left: 5px;
// height: 50px;
min-height: 40px;
height: auto;
line-height: 20px;
align-items: flex-start;
padding-top: 6px;
padding-bottom: 6px;
}
}

View File

@ -138,7 +138,7 @@ export default {
addReadModule(this.form).then(res => {
this.btnLoading = false
this.$emit('getList')
this.$emit('close', {visitStageId: this.form.VisitStageId})
this.$emit('close', {visitStageId: this.form.VisitStageId, expirationVisitNum: this.form.ExpirationVisitNum})
this.form.Name = null
this.form.VisitStageId = null
this.$message.success(this.$t('common:message:savedSuccessfully'))

View File

@ -540,6 +540,7 @@ export default {
if (res === 'confirm') {
this.param.ReadingSetType = 1
this.param.VisitStageId = obj.visitStageId
this.param.ExpirationVisitNum = obj.expirationVisitNum
this.subjectPeriod = { visible: true, title: this.$t('trials:readingPeriod:dialogTitle:addSubjectTumorPR') }
} else {
this.subjectPeriod.visible = true