From 10a43d4c04a577e4699fb71a1603701501972584 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Wed, 6 May 2026 10:23:56 +0800 Subject: [PATCH 001/121] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=82=BF=E7=98=A4=E5=AD=A6=E9=98=85=E7=89=87=E6=9C=9Fbug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subject/reading-period/components/AddSubjectRP.vue | 2 +- src/views/trials/trials-panel/subject/reading-period/index.vue | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/views/trials/trials-panel/subject/reading-period/components/AddSubjectRP.vue b/src/views/trials/trials-panel/subject/reading-period/components/AddSubjectRP.vue index 52875a57..78f473ca 100644 --- a/src/views/trials/trials-panel/subject/reading-period/components/AddSubjectRP.vue +++ b/src/views/trials/trials-panel/subject/reading-period/components/AddSubjectRP.vue @@ -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')) diff --git a/src/views/trials/trials-panel/subject/reading-period/index.vue b/src/views/trials/trials-panel/subject/reading-period/index.vue index b3d03a84..8732441e 100644 --- a/src/views/trials/trials-panel/subject/reading-period/index.vue +++ b/src/views/trials/trials-panel/subject/reading-period/index.vue @@ -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 From d08df877d792580535164201689a6e5c03382e44 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Wed, 6 May 2026 11:23:57 +0800 Subject: [PATCH 002/121] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dicoms/components/Fusion/PetCt.vue | 4 +- .../reading/dicoms/components/StudyList.vue | 104 +++++++++------ .../reading/dicoms3D/components/StudyList.vue | 118 ++++++++++-------- 3 files changed, 129 insertions(+), 97 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue index c3053ad1..204f79cc 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue @@ -130,7 +130,7 @@
{{ $t('trials:reading:button:reset') }}
-
@@ -138,7 +138,7 @@
{{ $t('trials:lugano:button:record') }}
-
+ --> diff --git a/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue b/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue index 20fb8faf..c8a33cad 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue @@ -20,49 +20,49 @@ style="width: 135px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" >
-
+
{{ study.StudyCode }} - {{ study.Modalities }} ({{ study.SeriesCount }}) -
-
- {{ study.StudyCode }} - + {{study.StudyName}} -
{{ study.Modalities }} ({{ study.SeriesCount }})
-
{{ study.Description }}
-
- -

{{ $t('trials:ptData:title') }}

-
- - {{ study.PatientSex }} -
-
- - {{ study.PatientWeight }} -
-
- - {{ study.RadionuclideTotalDose }} -
-
- - {{ study.RadionuclideHalfLife }} -
-
- - {{ study.RadiopharmaceuticalStartTime }} -
-
- - {{ study.AcquisitionTime }} -
- -
+
+ + {{ study.Modalities }} ({{ study.SeriesCount }}) + + +

{{ $t('trials:ptData:title') }}

+
+ + {{ study.PatientSex }} +
+
+ + {{ study.PatientWeight }} +
+
+ + {{ study.RadionuclideTotalDose }} +
+
+ + {{ study.RadionuclideHalfLife }} +
+
+ + {{ study.RadiopharmaceuticalStartTime }} +
+
+ + {{ study.AcquisitionTime }} +
+ +
+
+
+
{{ study.Description }}
@@ -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 { diff --git a/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionList.vue new file mode 100644 index 00000000..16e0c915 --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionList.vue @@ -0,0 +1,624 @@ + + + diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/FixedCircleRoi/FixedCircleRoiTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/FixedCircleRoi/FixedCircleRoiTool.js new file mode 100644 index 00000000..b400be40 --- /dev/null +++ b/src/views/trials/trials-panel/reading/dicoms/tools/FixedCircleRoi/FixedCircleRoiTool.js @@ -0,0 +1,347 @@ +import * as cornerstoneTools from 'cornerstone-tools' +import * as cornerstone from 'cornerstone-core' +import getCircleCoords from '../CircleRoi/getCircleCoords' +const EVENTS = cornerstoneTools.EVENTS +const getPixelSpacing = cornerstoneTools.importInternal('util/getPixelSpacing') +const triggerEvent = cornerstoneTools.import('util/triggerEvent') +const external = cornerstoneTools.external +const getToolState = cornerstoneTools.getToolState +const toolStyle = cornerstoneTools.toolStyle +const toolColors = cornerstoneTools.toolColors +const getModule = cornerstoneTools.getModule +const getNewContext = cornerstoneTools.import('drawing/getNewContext') +const draw = cornerstoneTools.import('drawing/draw') +const setShadow = cornerstoneTools.import('drawing/setShadow') +const drawCircle = cornerstoneTools.import('drawing/drawCircle') +const drawHandles = cornerstoneTools.import('drawing/drawHandles') +const drawLinkedTextBox = cornerstoneTools.import('drawing/drawLinkedTextBox') +const getROITextBoxCoords = cornerstoneTools.import('util/getROITextBoxCoords') +const numbersWithCommas = cornerstoneTools.import('util/numbersWithCommas') + +/** + * @public + * @class FixedCircleRoiTool + * @memberof Tools.Annotation + * @classdesc Tool for drawing circular regions of interest with a fixed radius, and measuring + * the statistics of the enclosed pixels. + * @extends Tools.Annotation.CircleRoiTool + */ +export default class FixedCircleRoiTool extends cornerstoneTools.CircleRoiTool { + constructor(props = {}) { + const defaultProps = { + name: 'FixedCircleRoi', + configuration: { + radius: 10, // Default radius in units (mm by default) + unit: 'mm', // 'mm' or 'px' + centerPointRadius: 0, + renderDashed: false, + drawHandlesOnHover: false, + handleRadius: 0, + digits: 1, + }, + }; + super(props, defaultProps); + + // Explicitly set name to ensure it is defined + this.name = 'FixedCircleRoi'; + + // Manually merge configuration to ensure props override defaults + if (props && props.configuration) { + this.configuration = Object.assign( + {}, + this.configuration || defaultProps.configuration, + props.configuration + ); + } + } + + createNewMeasurement(eventData) { + const measurementData = super.createNewMeasurement(eventData); + + if (!measurementData) { + return; + } + + const { image } = eventData; + // Fallback if configuration is missing + if (!this.configuration) { + console.warn( + 'FixedCircleRoiTool: configuration missing, using defaults' + ); + this.configuration = { radius: 10, unit: 'mm' }; + } + + const config = this.configuration; + let radiusPixels = config.radius; + + if (config.unit === 'mm') { + const pixelSpacing = getPixelSpacing(image); + console.log( + 'FixedCircleRoiTool: PixelSpacing retrieved:', + pixelSpacing + ); + + const { colPixelSpacing } = pixelSpacing; + + if (colPixelSpacing && colPixelSpacing > 0) { + radiusPixels = config.radius / colPixelSpacing; + } else { + console.warn( + 'FixedCircleRoiTool: Invalid pixel spacing, treating radius as pixels' + ); + } + } + + // Ensure radiusPixels is a valid number + if (isNaN(radiusPixels)) { + console.warn( + 'FixedCircleRoiTool: radiusPixels is NaN, defaulting to 10px' + ); + radiusPixels = 10; + } + + // Set end handle position based on calculated radius pixels + measurementData.handles.end.x = + measurementData.handles.start.x + radiusPixels; + measurementData.handles.end.y = measurementData.handles.start.y; + + console.log( + 'FixedCircleRoiTool created measurement:', + JSON.parse(JSON.stringify(measurementData)) + ); + + // Invalidate to trigger stats calculation + measurementData.invalidated = true; + + return measurementData; + } + + /** + * Overwrite the addNewMeasurement method to prevent the default behavior + * of resizing the circle on mouse drag immediately after creation. + */ + addNewMeasurement(evt, interactionType) { + const eventData = evt.detail; + if ( + !eventData || + !eventData.currentPoints || + !eventData.currentPoints.image + ) { + console.warn( + 'FixedCircleRoiTool: Invalid eventData supplied to addNewMeasurement' + ); + return; + } + + const element = eventData.element; + + // 1. Create the measurement data (which already has the fixed radius) + const measurementData = this.createNewMeasurement(eventData); + + if (!measurementData) return; + + // 2. Add it to the tool state + cornerstoneTools.addToolState(element, this.name, measurementData); + + // 3. Ensure stats are available for completion listeners (e.g. mean value consumers). + if (!measurementData.cachedStats && eventData.image) { + this.updateCachedStats(eventData.image, element, measurementData) + } + + // 4. Update the image to show the new annotation + cornerstone.updateImage(element); + + // 5. Manually emit completion event since we bypass default drag-finish flow. + triggerEvent(element, EVENTS.MEASUREMENT_COMPLETED, { + toolName: this.name, + element, + measurementData, + }) + + // 6. Do NOT attach mouse/touch event listeners for resizing. + // The circle is created with fixed size and placed immediately. + } + + handleSelectedCallback(evt, measurementData, handle, interactionType = 'mouse') { + // Lock circle radius by preventing start/end handle drag. + if (measurementData && measurementData.handles) { + const { start, end } = measurementData.handles + if (handle === start || handle === end) { + evt.stopImmediatePropagation?.() + evt.preventDefault?.() + return + } + } + + super.handleSelectedCallback(evt, measurementData, handle, interactionType) + } + + pointNearTool(element, data, coords, interactionType = 'mouse') { + const isNearDefault = super.pointNearTool(element, data, coords, interactionType) + if (isNearDefault) { + return true + } + if (!data || !data.handles || !data.handles.start || !data.handles.end) { + return false + } + + const centerCanvas = external.cornerstone.pixelToCanvas(element, data.handles.start) + const edgeCanvas = external.cornerstone.pixelToCanvas(element, data.handles.end) + const radius = external.cornerstoneMath.point.distance(centerCanvas, edgeCanvas) + const distanceToCenter = external.cornerstoneMath.point.distance(centerCanvas, coords) + + return distanceToCenter <= radius + } + + renderToolData(evt) { + const toolData = getToolState(evt.currentTarget, this.name) + + if (!toolData) { + return + } + + const getDistance = external.cornerstoneMath.point.distance + const eventData = evt.detail + const { image, element, canvasContext } = eventData + const lineWidth = toolStyle.getToolWidth() + const { + handleRadius, + drawHandlesOnHover, + hideHandlesIfMoving, + renderDashed, + centerPointRadius, + } = this.configuration + const newContext = getNewContext(canvasContext.canvas) + const { rowPixelSpacing, colPixelSpacing } = getPixelSpacing(image) + const lineDash = getModule('globalConfiguration').configuration.lineDash + + const seriesModule = + external.cornerstone.metaData.get('generalSeriesModule', image.imageId) || + {} + const modality = seriesModule.modality + const hasPixelSpacing = rowPixelSpacing && colPixelSpacing + + draw(newContext, context => { + for (let i = 0; i < toolData.data.length; i++) { + const data = toolData.data[i] + + if (data.visible === false) { + continue + } + + const color = toolColors.getColorIfActive(data) + const handleOptions = { + color, + handleRadius, + drawHandlesIfActive: drawHandlesOnHover, + hideHandlesIfMoving, + } + + setShadow(context, this.configuration) + + const startCanvas = external.cornerstone.pixelToCanvas( + element, + data.handles.start + ) + const endCanvas = external.cornerstone.pixelToCanvas( + element, + data.handles.end + ) + const radius = getDistance(startCanvas, endCanvas) + + const circleOptions = { color } + if (renderDashed) { + circleOptions.lineDash = lineDash + } + + drawCircle( + context, + element, + data.handles.start, + radius, + circleOptions, + 'pixel' + ) + + if (centerPointRadius && radius > 3 * centerPointRadius) { + drawCircle( + context, + element, + data.handles.start, + centerPointRadius, + circleOptions, + 'pixel' + ) + } + + if (data.handles) { + data.handles.start.drawnIndependently = true + data.handles.end.drawnIndependently = true + } + drawHandles(context, eventData, data.handles, handleOptions) + + if (data.invalidated === true) { + if (data.cachedStats) { + this.throttledUpdateCachedStats(image, element, data) + } else { + this.updateCachedStats(image, element, data) + } + } + + if (!data.handles.textBox.hasMoved) { + const defaultCoords = getROITextBoxCoords( + eventData.viewport, + data.handles + ) + Object.assign(data.handles.textBox, defaultCoords) + } + + const textBoxContent = [] + console.log(data) + if (data.remark) { + textBoxContent.push(data.remark) + } + + const digits = this.configuration.digits || 1 + if (!image.color && data.cachedStats && Number.isFinite(data.cachedStats.mean)) { + const unit = modality === 'CT' && this.configuration.showHounsfieldUnits !== false ? 'HU' : '' + const meanText = numbersWithCommas(data.cachedStats.mean.toFixed(digits)) + textBoxContent.push(unit ? `Mean: ${meanText} ${unit}` : `Mean: ${meanText}`) + } + + if (!textBoxContent.length) { + continue + } + + const textBoxAnchorPoints = handles => + findTextBoxAnchorPoints(handles.start, handles.end) + + drawLinkedTextBox( + context, + element, + data.handles.textBox, + textBoxContent, + data.handles, + textBoxAnchorPoints, + color, + lineWidth, + 20, + true + ) + + data.unit = modality === 'CT' && this.configuration.showHounsfieldUnits !== false ? 'HU' : '' + } + }) + } +} + +function findTextBoxAnchorPoints(startHandle, endHandle) { + const { left, top, width, height } = getCircleCoords(startHandle, endHandle) + + return [ + { x: left + width / 2, y: top }, + { x: left, y: top + height / 2 }, + { x: left + width / 2, y: top + height }, + { x: left + width, y: top + height / 2 }, + ] +} diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue index 5ed6a82a..57740b24 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue @@ -512,7 +512,8 @@ export default { } }, mounted() { - this.isPatientFormCanEdit = this.allowAddOrEdit || this.isPatientFormAllowEdit + console.log(this.allowAddOrEdit,this.isPatientFormAllowEdit ) + this.isPatientFormCanEdit = this.allowAddOrEdit || this.isPatientFormAllowEdit this.getClinicalData() }, methods: { diff --git a/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue index 6620aad8..ca1aab84 100644 --- a/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue +++ b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue @@ -921,7 +921,7 @@
- + From af97e2b4edebead60ad94f1103eb4c35e1f96b4f Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 7 May 2026 12:16:01 +0800 Subject: [PATCH 018/121] =?UTF-8?q?crc=E4=BF=AE=E6=94=B9pt=E4=B8=B4?= =?UTF-8?q?=E5=BA=8A=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dicom/DicomViewer.vue | 2 +- .../visit/crc-upload/components/studyInfo.vue | 10 ++++++++-- .../visit/crc-upload/components/uploadDicomFiles2.vue | 8 +++++++- .../crc-upload/components/uploadPetClinicalData.vue | 1 - 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/components/Dicom/DicomViewer.vue b/src/components/Dicom/DicomViewer.vue index 41c39b9c..583b303a 100644 --- a/src/components/Dicom/DicomViewer.vue +++ b/src/components/Dicom/DicomViewer.vue @@ -496,7 +496,7 @@ export default { this.colormapsList = cornerstone.colors.getColormapsList() this.currentDicomCanvas = this.$refs['dicomCanvas0'] this.type = this.$route.query.type - this.isEdit = parseInt(this.$route.query.showDelete) + this.isEdit = parseInt(this.$route.query.showDelete) || parseInt(this.$route.query.showEdit) }, beforeDestroy() { clearPTClinicalDataCache() diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue index 4886d9c3..47dfcc74 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue @@ -151,7 +151,7 @@ - + @@ -309,8 +309,14 @@ export default { // 预览影像 handleViewStudy(row) { var token = getToken() + let path = '' + if (this.hasPermi(['trials:trials-panel:visit:crc-upload:edit'])) { + path = `/showdicom?studyId=${row.StudyId}&isFromCRCUpload=1&TokenKey=${token}&type=Study&showEdit=${(this.data.SubmitState * 1 < 2 || (this.data.SubmitState === 2 && this.data.IsQCConfirmedReupload)) ? 1 : 0}` + } else { + path = `/showdicom?studyId=${row.StudyId}&isFromCRCUpload=1&TokenKey=${token}&type=Study` + } const routeData = this.$router.resolve({ - path: `/showdicom?studyId=${row.StudyId}&isFromCRCUpload=1&TokenKey=${token}&type=Study`, + path: path }) var newWindow = window.open(routeData.href, '_blank') this.$emit('setOpenWindow', newWindow) diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue index 11cedab5..9b25e7bf 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue @@ -791,8 +791,14 @@ export default { // 预览单个检查影像 handleViewStudy(row) { var token = getToken() + let path = '' + if (this.hasPermi(['trials:trials-panel:visit:crc-upload:edit'])) { + path = `/showdicom?studyId=${row.StudyId}&TokenKey=${token}&type=Study&showEdit=${!(!this.isAfresh && this.data.SubmitState === 2 && this.data.SubmitTime) ? 1 : 0}` + } else { + path = `/showdicom?studyId=${row.StudyId}&TokenKey=${token}&type=Study` + } const routeData = this.$router.resolve({ - path: `/showdicom?studyId=${row.StudyId}&TokenKey=${token}&type=Study`, + path: path, }) window.open(routeData.href, '_blank') }, diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue index 57740b24..ed6a8c8d 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue @@ -512,7 +512,6 @@ export default { } }, mounted() { - console.log(this.allowAddOrEdit,this.isPatientFormAllowEdit ) this.isPatientFormCanEdit = this.allowAddOrEdit || this.isPatientFormAllowEdit this.getClinicalData() }, From 09e9c62f3c4a60eebb61753f9c2fa5a67c6d734b Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 7 May 2026 13:52:28 +0800 Subject: [PATCH 019/121] =?UTF-8?q?pt=E4=B8=B4=E5=BA=8A=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E5=8F=96=E6=B6=88=E7=82=B9=E5=87=BBmodal?= =?UTF-8?q?=E5=85=B3=E9=97=ADDialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reading/dicoms/components/DicomCanvas.vue | 2 +- .../MRIPDFFAdvance/QuestionForm.vue | 2 - .../MRIPDFFAdvance/QuestionList.vue | 2 - .../reading/dicoms/tools/Probe/ProbeTool.js | 43 +++++++++++++++++-- .../visit/crc-upload/components/studyInfo.vue | 2 +- .../components/uploadDicomFiles2.vue | 2 +- .../visit/qc-check/components/dicomFiles.vue | 2 +- .../qc-check/components/qualityAssurance.vue | 2 +- 8 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue b/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue index 926304e1..1c2022a1 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue @@ -1223,7 +1223,7 @@ export default { } else if (toolName === 'Probe' && (parseInt(localStorage.getItem('CriterionType')) === 21)) { cornerstoneTools.addToolForElement(element, ProbeTool, { configuration: { fixedRadius: 5, handleRadius: true, drawHandlesOnHover: true, hideHandlesIfMoving: true, digits: this.digitPlaces } }) } else if (toolName === 'Probe' && parseInt(localStorage.getItem('CriterionType')) === 22) { - cornerstoneTools.addToolForElement(element, ProbeTool, { configuration: { radius: 5, unit: 'mm', handleRadius: true, drawHandlesOnHover: true, hideHandlesIfMoving: true, digits: this.digitPlaces } }) + cornerstoneTools.addToolForElement(element, ProbeTool, { configuration: { fixedRadius: 5, unit: 'mm', handleRadius: true, drawHandlesOnHover: true, hideHandlesIfMoving: true, digits: this.digitPlaces } }) } else { cornerstoneTools.addToolForElement(element, apiTool) } diff --git a/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionForm.vue index 11315cae..b6a654cd 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionForm.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionForm.vue @@ -385,13 +385,11 @@ export default { }, setMeasureData(measureData, isInit = false) { return new Promise(resolve => { - console.log('setMeasureData', measureData) if (!measureData || (measureData && measureData.tableQuestionId !== this.activeQuestionId)) { resolve() } var data = {} // 创建标记 - console.log('setMeasureData', measureData) if (!measureData.data.remark) { // 维护标记信息 measureData.data.remark = this.getLesionName(this.orderMark, this.activeQuestionMark) diff --git a/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionList.vue index 16e0c915..a3a722bc 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionList.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/MRIPDFFAdvance/QuestionList.vue @@ -432,7 +432,6 @@ export default { } }, modifyMeasuredData(measureObj) { - console.log('modifyMeasuredData') if (measureObj.questionInfo) { this.activeItem.activeCollapseId = measureObj.questionInfo.QuestionId this.activeItem.activeRowIndex = String(measureObj.questionInfo.RowIndex) @@ -443,7 +442,6 @@ export default { }, // 设置测量数据 setMeasuredData(measureData) { - console.log('setMeasuredData') if (this.activeItem.activeCollapseId) { // 判断是否存在测量数据 this.$nextTick(() => { diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Probe/ProbeTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/Probe/ProbeTool.js index a8224bbc..65baf902 100644 --- a/src/views/trials/trials-panel/reading/dicoms/tools/Probe/ProbeTool.js +++ b/src/views/trials/trials-panel/reading/dicoms/tools/Probe/ProbeTool.js @@ -1,4 +1,6 @@ import * as cornerstoneTools from 'cornerstone-tools' +const EVENTS = cornerstoneTools.EVENTS +const triggerEvent = cornerstoneTools.import('util/triggerEvent') const external = cornerstoneTools.external // State const getToolState = cornerstoneTools.getToolState @@ -87,7 +89,7 @@ export default class ProbeTool extends cornerstoneTools.ProbeTool { return { visible: true, - active: true, + active: false, color: undefined, invalidated: true, handles: { @@ -100,8 +102,8 @@ export default class ProbeTool extends cornerstoneTools.ProbeTool { end: { x: eventData.currentPoints.image.x, y: eventData.currentPoints.image.y, - highlight: true, - active: true, + highlight: false, + active: false, radius: 0 }, // textBox: { @@ -125,6 +127,41 @@ export default class ProbeTool extends cornerstoneTools.ProbeTool { }; } + addNewMeasurement(evt, interactionType) { + const eventData = evt.detail + if (!eventData || !eventData.currentPoints || !eventData.currentPoints.image) { + return + } + + const { element, image } = eventData + const measurementData = this.createNewMeasurement(eventData) + + if (!measurementData) { + return + } + + // Click-to-place and finish immediately; avoid default drag listeners. + measurementData.active = false + if (measurementData.handles && measurementData.handles.end) { + measurementData.handles.end.active = false + measurementData.handles.end.highlight = false + } + + cornerstoneTools.addToolState(element, this.name, measurementData) + + if (!measurementData.cachedStats && image) { + this.updateCachedStats(image, element, measurementData) + } + + external.cornerstone.updateImage(element) + + triggerEvent(element, EVENTS.MEASUREMENT_COMPLETED, { + toolName: this.name, + element, + measurementData + }) + } + /** * * diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue index 47dfcc74..0ccde59d 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue @@ -150,7 +150,7 @@ - + diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue index 9b25e7bf..ea97a047 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue @@ -423,7 +423,7 @@ - + diff --git a/src/views/trials/trials-panel/visit/qc-check/components/dicomFiles.vue b/src/views/trials/trials-panel/visit/qc-check/components/dicomFiles.vue index 087fca9e..f69003dc 100644 --- a/src/views/trials/trials-panel/visit/qc-check/components/dicomFiles.vue +++ b/src/views/trials/trials-panel/visit/qc-check/components/dicomFiles.vue @@ -78,7 +78,7 @@ - + diff --git a/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue index ca1aab84..958bca3c 100644 --- a/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue +++ b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue @@ -920,7 +920,7 @@ - + From 6a345e35cdd5707a28ca5b0b488d220c2889cd8d Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 7 May 2026 13:59:31 +0800 Subject: [PATCH 020/121] =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E5=88=97=E5=AE=BD?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trials-panel/visit/crc-upload/components/studyInfo.vue | 2 +- .../trials-panel/visit/qc-check/components/dicomFiles.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue index 0ccde59d..2219867a 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue @@ -55,7 +55,7 @@ - + +// } + From feb94dc83283473b8c678c1d734cf9a4a3bf8690 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Wed, 20 May 2026 09:31:13 +0800 Subject: [PATCH 073/121] 1 --- .../reading/dicoms3D/components/customize/QuestionList.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue index 6178855f..38c3ce25 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue @@ -554,7 +554,7 @@ export default { }) } else { this.$set(this.questionForm, question.Id, '') - } + } let o = { Answer: '', SegmentId: null, From 36d5661044dcdbb6c40e1ae5701ba1dfa74bed22 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Wed, 20 May 2026 14:58:38 +0800 Subject: [PATCH 074/121] =?UTF-8?q?=E5=88=86=E5=89=B2=E6=A0=87=E8=AE=B0?= =?UTF-8?q?=E4=B8=8E=E8=A1=A8=E6=A0=BC=E9=97=AE=E9=A2=98=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trials-panel/reading/dicoms3D/components/SegmentForm.vue | 2 +- .../dicoms3D/components/customize/QuestionTableFormItem.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/SegmentForm.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/SegmentForm.vue index 3276bb1a..f7e1593b 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/SegmentForm.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/SegmentForm.vue @@ -127,7 +127,7 @@ export default { } if (this.visitInfo.operateStateEnum === 22) { let o = {} - if (this.isTableQuestion) { + if (this.visitInfo.isTableQuestion) { o.TableQuestionId = this.visitInfo.operateQuestionId o.RowId = this.visitInfo.operateRowId } else { diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionTableFormItem.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionTableFormItem.vue index 10a48e54..26edcd31 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionTableFormItem.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionTableFormItem.vue @@ -416,7 +416,7 @@ export default { }, validatorNumberInput(rule, value, callback) { let reg = new RegExp(/^(?:-?(?:(?:0|[1-9]\d*)(?:\.\d+)?|\.\d+)|NE)$/, 'g') - if (value === '') { + if (value === '' || value == null) { callback(); } else { if (!reg.test(value)) { From c65ad92d393317bb2210d1d35a69a7ca1f281995 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Wed, 20 May 2026 17:41:08 +0800 Subject: [PATCH 075/121] =?UTF-8?q?=E4=B8=AD=E5=BF=83=E8=B0=83=E7=A0=94?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E8=B0=83=E7=A0=94=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../research/components/EquipmentForm.vue | 137 ++++++++++++---- .../research/components/EquipmentList.vue | 153 ++++++++++-------- .../research/components/ResearchForm.vue | 2 +- src/views/research/form.vue | 4 +- .../site-research/components/ImageManual.vue | 112 ++++++++++++- 5 files changed, 301 insertions(+), 107 deletions(-) diff --git a/src/views/research/components/EquipmentForm.vue b/src/views/research/components/EquipmentForm.vue index 676aa37b..73fa0c71 100644 --- a/src/views/research/components/EquipmentForm.vue +++ b/src/views/research/components/EquipmentForm.vue @@ -2,39 +2,101 @@
- - - - - + +
+ + + + + +
- + - - + +
+ + + + + +
- + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + + + + + + + + + - +
@@ -69,24 +131,35 @@ export default { type: String, default: '' }, - isShowParameters: { - type: Boolean, - default: false + EquipmentControlFieldList: { + type: Array, + default: () => { + return [] + } } }, data() { return { form: { Id: '', - EquipmentTypeId: '', - Parameters: '', - ManufacturerName: '', - ScannerType: '', - Note: '', + EquipmentTypeEnum: null, + OtherEquipmentType: null, + Parameters: null, + Note: null, + ManufacturerType: null, + ManufacturerName: null, + ScannerType: null, + MagneticFieldStrengthType: null, + BodyCoilChannelCount: null, + HasDedicatedPdfFatQuantificationSequence: null, + PdfFatQuantificationSequenceType: null, + OtherSequenceSpecification: null, + HasT2R2Correction: null, + CanFullyExportPdfParameterMapsAndRawDicom: null, TrialSiteSurveyId: '' }, rules: { - EquipmentTypeId: [ + EquipmentTypeEnum: [ { required: true, message: this.$t('trials:researchForm:formRule:select'), trigger: ['blur', 'change'] } ] }, diff --git a/src/views/research/components/EquipmentList.vue b/src/views/research/components/EquipmentList.vue index f27b38b7..7b3d67aa 100644 --- a/src/views/research/components/EquipmentList.vue +++ b/src/views/research/components/EquipmentList.vue @@ -2,63 +2,88 @@
- + {{ $t('common:button:add') }}
- + - + + + - + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + - - + + + \ No newline at end of file diff --git a/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue b/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue index 2b41ae41..3068b80d 100644 --- a/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue +++ b/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue @@ -212,13 +212,21 @@ export default { this.form[key] = false }) } + res.Result.ModifyFiledList = [] if (Array.isArray(res.Result.ModifyFiledList) && res.Result.ModifyFiledList.length > 0) { this.form.ReplaceContent = res.Result.ModifyFiledList[0].ReplaceContent.split('

').join('').split('

').filter(item => isNaN(item)).join("\n") this.form.ReplaceContentCN = res.Result.ModifyFiledList[0].ReplaceContentCN.split('

').join('').split('

').filter(item => isNaN(item)).join("\n") } else { let arr = [this.$t('trials:equiptResearch:form:item1'), this.$t('trials:equiptResearch:form:item2'), this.$t('trials:equiptResearch:form:item3'), this.$t('trials:equiptResearch:form:item4')] - // this.form.ReplaceContent = arr.join("\n") - this.form.ReplaceContentCN = arr.join("\n") + let arr2 = [this.$t('trials:equiptResearch:form:item5'), this.$t('trials:equiptResearch:form:item6'), this.$t('trials:equiptResearch:form:item7'), this.$t('trials:equiptResearch:form:item8')] + if (this.$i18n.locale !== 'zh') { + this.form.ReplaceContentCN = arr2.join("\n") + this.form.ReplaceContent = arr.join("\n") + } else { + this.form.ReplaceContentCN = arr.join("\n") + this.form.ReplaceContent = arr2.join("\n") + } + } } } catch (err) { From b6877d4fe8d0f828b8bbc9b257e047c907c61c92 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Thu, 21 May 2026 15:01:43 +0800 Subject: [PATCH 080/121] 1 --- .../attachments/site-research/components/ImageManual.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue b/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue index 3068b80d..41520317 100644 --- a/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue +++ b/src/views/trials/trials-panel/attachments/site-research/components/ImageManual.vue @@ -212,7 +212,6 @@ export default { this.form[key] = false }) } - res.Result.ModifyFiledList = [] if (Array.isArray(res.Result.ModifyFiledList) && res.Result.ModifyFiledList.length > 0) { this.form.ReplaceContent = res.Result.ModifyFiledList[0].ReplaceContent.split('

').join('').split('

').filter(item => isNaN(item)).join("\n") this.form.ReplaceContentCN = res.Result.ModifyFiledList[0].ReplaceContentCN.split('

').join('').split('

').filter(item => isNaN(item)).join("\n") From 04580ed1bb82571cb358a7cce8c66d8129e193c2 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Thu, 21 May 2026 15:31:54 +0800 Subject: [PATCH 081/121] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=AD=E5=A2=9E=E5=8A=A0=EF=BC=9A=E8=B4=A8?= =?UTF-8?q?=E6=8E=A7=E6=97=B6=EF=BC=8C=E5=8F=AF=E4=B8=8B=E8=BD=BD=E5=BD=B1?= =?UTF-8?q?=E5=83=8F=E3=80=81=E8=AE=BF=E8=A7=86=E5=A4=B1=E8=AE=BF=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=90=8E=E7=BB=AD=E8=AE=BF=E8=A7=86=E5=8F=AF=E9=98=85?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trial-config/components/logicalConfig.vue | 29 +++++++++++ .../qc-check/components/qualityAssurance.vue | 49 ++++++++++--------- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/src/views/trials/trials-panel/setting/trial-config/components/logicalConfig.vue b/src/views/trials/trials-panel/setting/trial-config/components/logicalConfig.vue index a39f344a..2ce1382f 100644 --- a/src/views/trials/trials-panel/setting/trial-config/components/logicalConfig.vue +++ b/src/views/trials/trials-panel/setting/trial-config/components/logicalConfig.vue @@ -118,6 +118,23 @@ + + + + + {{ item.label }} + + + + + + + + {{ item.label }} + + + @@ -528,6 +545,8 @@ export default { StudyUseModalityList: [], StudyUseStudyNameList: [], IsIQCAutoNextTask: false, + IsSupportQCDownloadImage: false, + IsOpenLostVistRead: false, IsIQCAutoTaskDistinguishType: false // ClinicalDataSetNames: [], // ClinicalDataTrialSetIds: [], @@ -1263,6 +1282,16 @@ export default { NewVal: this.$fd('YesOrNo', this.form.IsIQCAutoNextTask), OldVal: this.$fd('YesOrNo', this.initialForm.IsIQCAutoNextTask), }, + { + Name: this.$t('trials:logincCfg:form:IsSupportQCDownloadImage'), + NewVal: this.$fd('YesOrNo', this.form.IsSupportQCDownloadImage), + OldVal: this.$fd('YesOrNo', this.initialForm.IsSupportQCDownloadImage), + }, + { + Name: this.$t('trials:logincCfg:form:IsOpenLostVistRead'), + NewVal: this.$fd('YesOrNo', this.form.IsOpenLostVistRead), + OldVal: this.$fd('YesOrNo', this.initialForm.IsOpenLostVistRead), + }, { Name: this.$t('trials:logincCfg:form:IsIQCAutoTaskDistinguishType'), NewVal: this.$fd('YesOrNo', this.form.IsIQCAutoTaskDistinguishType), diff --git a/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue index 958bca3c..8b8e4f14 100644 --- a/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue +++ b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue @@ -40,14 +40,14 @@ {{ $store.state.trials.uploadTip }}
--> @@ -55,7 +55,7 @@ @@ -73,15 +73,13 @@ - + @@ -1117,7 +1116,8 @@ export default { IsSecondPass: false, userId: zzSessionStorage.getItem('userId'), - QCRiskControl: false + QCRiskControl: false, + IsSupportQCDownloadImage: false } }, async mounted() { @@ -1324,6 +1324,7 @@ export default { this.loading = true getVisitQCInfo(this.data.Id, this.data.QCProcessEnum, this.currentQCType) .then((res) => { + this.IsSupportQCDownloadImage = res.Result.IsSupportQCDownloadImage this.secondReviewList = res.Result.SecondReviewList if (this.secondReviewList.length > 0) { let data = this.secondReviewList.find(item => item.SignTime) || {} @@ -2176,11 +2177,11 @@ export default { if (confirm !== 'confirm') return this.$emit('close') } - } catch(e) { + } catch (e) { console.log(e) this.$emit('getList') } - + }, getNextQCInfo() { // '是否确认进入下一个质控任务?' From 015eb78b708857d6eb02e8733b67cacd65b8dd58 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Fri, 22 May 2026 12:28:28 +0800 Subject: [PATCH 082/121] =?UTF-8?q?lugano=E9=98=85=E7=89=87=E6=A0=87?= =?UTF-8?q?=E5=87=86=E9=A1=B5=E9=9D=A2=E5=8D=81=E5=AD=97=E7=BA=BF=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dicoms/components/Fusion/PetCt.vue | 11 ++- .../components/Fusion/TableQuestions.vue | 78 +++++++++++++++---- 2 files changed, 68 insertions(+), 21 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue index 5fd7308e..631e32fc 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/PetCt.vue @@ -103,7 +103,7 @@
- +
{{ $t('trials:reading:button:crosshairsPosition') }}
@@ -468,9 +468,6 @@ export default { mounted() { document.documentElement.style.userSelect = 'none' window.addEventListener('message', this.receiveMsg) - - console.log(cornerstoneTools) - console.log(cornerstone3D) this.$i18n.locale = this.$route.query.lang this.setLanguage(this.$route.query.lang) this.readingTaskState = parseInt(this.$route.query.readingTaskState) @@ -851,6 +848,9 @@ export default { const { detail } = e const { annotation } = detail const { metadata } = annotation + if (!metadata || metadata.toolName === FusionJumpToPointTool.toolName) { + return + } const measureData = {} measureData.frame = 0 measureData.data = annotation @@ -868,6 +868,9 @@ export default { const { detail } = e const { annotation } = detail const { metadata, data } = annotation + if (!metadata || metadata.toolName === FusionJumpToPointTool.toolName) { + return + } // var i = this.initAnnotations.findIndex(i => i.orderMark === data.remark && !i.isInit) // if (i > -1) { // console.log(data.remark) diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestions.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestions.vue index 6e46f6c6..66c91200 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestions.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestions.vue @@ -172,6 +172,13 @@ export default { beforeDestroy() { }, methods: { + getQuestionFormRef(refName) { + const ref = this.$refs[refName] + if (!ref) { + return null + } + return Array.isArray(ref) ? ref[0] : ref + }, handleReadingChart(e) { this.$emit('handleReadingChart', e) }, @@ -191,7 +198,8 @@ export default { this.tableQuestions.forEach(item => { item.TableQuestions.Answers.forEach(i => { var refName = `${item.Id}_${i.RowIndex}` - this.$refs[refName] && this.$refs[refName][0].initForm(isRerender) + const questionFormRef = this.getQuestionFormRef(refName) + questionFormRef && questionFormRef.initForm(isRerender) }) }) }) @@ -271,7 +279,8 @@ export default { this.tableQuestions.forEach(item => { item.TableQuestions.Answers.forEach(i => { var refName = `${item.Id}_${i.RowIndex}` - this.$refs[refName] && this.$refs[refName][0].initForm() + const questionFormRef = this.getQuestionFormRef(refName) + questionFormRef && questionFormRef.initForm() }) }) }) @@ -379,7 +388,8 @@ export default { this.tableQuestions.forEach(item => { item.TableQuestions.Answers.forEach(i => { var refName = `${item.Id}_${i.RowIndex}` - this.$refs[refName] && this.$refs[refName][0].initForm() + const questionFormRef = this.getQuestionFormRef(refName) + questionFormRef && questionFormRef.initForm() }) }) }) @@ -391,7 +401,8 @@ export default { var rowIndex = String(this.unSaveTargets[0].rowIndex) var questionId = this.unSaveTargets[0].questionId const refName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` - if (rowIndex === this.activeItem.activeRowIndex && questionId === this.activeItem.activeCollapseId && !this.$refs[refName][0].questionForm.OtherMeasureData) { + const questionFormRef = this.getQuestionFormRef(refName) + if (rowIndex === this.activeItem.activeRowIndex && questionId === this.activeItem.activeCollapseId && questionFormRef && !questionFormRef.questionForm.OtherMeasureData) { if (toolName === 'CircleROI') { return { isCanActiveTool: true, reason: '' } } else { @@ -522,7 +533,8 @@ export default { if (item.TableQuestions && item.TableQuestions.Answers) { item.TableQuestions.Answers.map(t => { const refName = `${item.Id}_${t.RowIndex}` - if (this.$refs[refName] && this.$refs[refName][0] && this.$refs[refName][0].questionForm.saveTypeEnum !== 2) { + const questionFormRef = this.getQuestionFormRef(refName) + if (questionFormRef && questionFormRef.questionForm.saveTypeEnum !== 2) { var lessionName = this.getLesionName(item.OrderMark, t.RowIndex) arr.push({ lessionName: lessionName, rowIndex: t.RowIndex, questionId: item.Id }) } @@ -552,11 +564,15 @@ export default { this.activeItem.activeCollapseId = arr[0] this.$nextTick(() => { const refName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` - if (this.$refs[refName][0].questionForm.IsDicomReading !== false) { + const questionFormRef = this.getQuestionFormRef(refName) + if (!questionFormRef) { + return + } + if (questionFormRef.questionForm.IsDicomReading !== false) { var markTool = 'CircleROI' - var isMarked = !!this.$refs[refName][0].questionForm.OtherMeasureData + var isMarked = !!questionFormRef.questionForm.OtherMeasureData } - FusionEvent.$emit('imageLocation', { otherMeasureData: this.$refs[refName][0].questionForm.OtherMeasureData, markTool, isMarked }) + FusionEvent.$emit('imageLocation', { otherMeasureData: questionFormRef.questionForm.OtherMeasureData, markTool, isMarked }) }) } else { this.activeItem.activeRowIndex = null @@ -576,7 +592,10 @@ export default { }, collapseRightClick(e, obj, activeCollapseId, activeRowIndex) { const refName = `${activeCollapseId}_${activeRowIndex}` - FusionEvent.$emit('imageLocation', { otherMeasureData: this.$refs[refName][0].questionForm.OtherMeasureData }) + const questionFormRef = this.getQuestionFormRef(refName) + if (questionFormRef) { + FusionEvent.$emit('imageLocation', { otherMeasureData: questionFormRef.questionForm.OtherMeasureData }) + } e.stopImmediatePropagation() e.stopPropagation() @@ -621,8 +640,12 @@ export default { this.activeName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` const refName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` this.$nextTick(() => { + const questionFormRef = this.getQuestionFormRef(refName) + if (!questionFormRef) { + return + } if (deleteInfo) { - this.$refs[refName][0].setDeleteInfo(deleteInfo) + questionFormRef.setDeleteInfo(deleteInfo) } if (questionsObj.otherMeasureData) { const measureData = {} @@ -631,7 +654,7 @@ export default { measureData.type = questionsObj.otherMeasureData.metadata.toolName measureData.suvMax = questionsObj.suvMax - this.$refs[refName][0].setMeasureData(measureData) + questionFormRef.setMeasureData(measureData) } }) }, @@ -719,21 +742,28 @@ export default { this.activeItem.activeRowIndex = String(measureObj.questionInfo.RowIndex) this.activeName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` const refName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` - if (this.$refs[refName]) { - this.$refs[refName][0].setMeasureData(measureObj.measureData) + const questionFormRef = this.getQuestionFormRef(refName) + if (questionFormRef) { + questionFormRef.setMeasureData(measureObj.measureData) } } }, clearMeasuredData() { if (this.activeItem.activeCollapseId && this.activeItem.activeRowIndex && this.activeName) { const refName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` - this.$refs[refName][0].clearMeasurement() + const questionFormRef = this.getQuestionFormRef(refName) + if (questionFormRef) { + questionFormRef.clearMeasurement() + } } }, setOutsideMeasuredData(annotation) { if (this.activeItem.activeCollapseId && this.activeItem.activeRowIndex && this.activeName) { const refName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` - this.$refs[refName][0].setOutsideMeasuredData(annotation) + const questionFormRef = this.getQuestionFormRef(refName) + if (questionFormRef) { + questionFormRef.setOutsideMeasuredData(annotation) + } } }, // 设置测量数据 @@ -779,8 +809,22 @@ export default { // 判断是否存在测量数据 this.$nextTick(() => { const refName = `${this.activeItem.activeCollapseId}_${this.activeItem.activeRowIndex}` - if (!this.$refs[refName][0].questionForm.OtherMeasureData) { - this.$refs[refName][0].setMeasureData(measureData) + const questionFormRef = this.getQuestionFormRef(refName) + if (!questionFormRef) { + if (this.isBaseLineTask) { + var idx = this.tableQuestions.findIndex(item => item.LesionType === 0) + if (this.tableQuestions[idx].TableQuestions.Answers.length < this.tableQuestions[idx].MaxQuestionCount && (measureData.type === 'CircleROI')) { + this.createTTarget(measureData) + } else { + this.createNTTarget(measureData) + } + } else { + this.createNLTarget(measureData) + } + return + } + if (!questionFormRef.questionForm.OtherMeasureData) { + questionFormRef.setMeasureData(measureData) } else { if (this.isBaseLineTask) { var idx = this.tableQuestions.findIndex(item => item.LesionType === 0) From e04e94a792c8dcdce1255c2b8e23e0d078cb1409 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Fri, 22 May 2026 13:57:58 +0800 Subject: [PATCH 083/121] =?UTF-8?q?total=E6=95=B0=E5=80=BC=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reading/dicoms3D/components/ReadPage.vue | 24 ++++++------------- .../components/customize/QuestionList.vue | 13 ++++++++++ 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue index 7cc0fb81..49c168e8 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue @@ -653,7 +653,7 @@ const newStyles = { } } annotation.config.style.setDefaultToolStyles(newStyles) -const { MouseBindings, Events: toolsEvents } = csToolsEnums +const { MouseBindings, Events: toolsEvents, ChangeTypes } = csToolsEnums export default { name: 'ReadPage', components: { @@ -974,7 +974,6 @@ export default { this.tools = getCustomizeStandardsTools(this.taskInfo.ReadingToolList) const toolNames = this.tools.map(i => i.toolName) this.customizeStandards = config.customizeStandards.filter(item => !toolNames.includes(item.toolName)) - console.log(this.customizeStandards, 'this.customizeStandards') } else { this.tools = getTools(this.criterionType) } @@ -1058,7 +1057,6 @@ export default { let imageId = imageIds[0] const imagePixelModule = metaData.get('imagePixelModule', imageId); const photometricInterpretation = imagePixelModule?.photometricInterpretation; - console.log(photometricInterpretation, 'photometricInterpretation') if (photometricInterpretation && photometricInterpretation !== 'MONOCHROME1' && photometricInterpretation !== 'MONOCHROME2') return this.$confirm(this.$t('trials:histogram:confirm:photometricInterpretationNotSupported')) this.histogramVisible = true this.setToolsPassive() @@ -1939,12 +1937,6 @@ export default { // this.toolModeChanged // ) }, - toolModeChanged(e) { - console.log(e) - const arr = cornerstoneTools.annotation.state.getAllAnnotations() - // if (arr) - console.log(arr) - }, annotationAddedListener(e) { }, @@ -1978,12 +1970,13 @@ export default { }, annotationModifiedListener(e) { console.log('Modified') - const { annotation } = e.detail + const { annotation, changeType } = e.detail + const isStatsUpdated = changeType === ChangeTypes.StatsUpdated if (!annotation) return if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation) if (this.readingTaskState === 2) return - if (!annotation.highlighted) return + if (!annotation.highlighted && !isStatsUpdated) return if (annotation.metadata.toolName === 'PlanarFreehandROI' && !annotation.data.contour.closed) return const series = this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series if (series && series.TaskInfo.VisitTaskId && series.TaskInfo.VisitTaskId === this.taskInfo.VisitTaskId) { @@ -2040,7 +2033,6 @@ export default { const series = this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].series if (series && series.TaskInfo.VisitTaskId && series.TaskInfo.VisitTaskId === this.taskInfo.VisitTaskId) { const referencedImageId = annotation.metadata.referencedImageId - console.log(annotation, 'annotation') const params = this.getInstanceInfo(referencedImageId) annotation.visitTaskId = series.TaskInfo.VisitTaskId annotation.studyId = series.StudyId @@ -2114,12 +2106,13 @@ export default { } }, customAnnotationModifiedListener(e) { - const { annotation } = e.detail + const { annotation, changeType } = e.detail + const isStatsUpdated = changeType === ChangeTypes.StatsUpdated if (!annotation) return if (annotation.metadata.toolName === FusionJumpToPointTool.toolName) return if (annotation.metadata.toolName.includes('histogram_')) return this.$refs.histogram.initToolValue(annotation) if (this.readingTaskState === 2) return - if (!annotation.highlighted) return + if (!annotation.highlighted && !isStatsUpdated) return const i = this.tools.findIndex(i => i.toolName === annotation.metadata.toolName) if (i === -1) { if (annotation.metadata.toolName !== LabelMapEditWithContourTool.toolName) this.setToolsPassive() @@ -2216,7 +2209,6 @@ export default { } }, contentMouseup(e) { - console.log('contentMouseup') if (this.$refs.Segmentations) { this.$refs.Segmentations.contentMouseup() } @@ -3395,7 +3387,6 @@ export default { this.$refs[`${this.viewportKey}-${this.activeViewportIndex}`][0].resize(true) } else if (shortcutKeyEnum === 15) { // 截图 - console.log("截图") this.saveImage() } else if (shortcutKeyEnum === 16) { // 反色 @@ -4061,7 +4052,6 @@ export default { }) }, setToolToTarget(obj) { - console.log('setToolToTarget') if (obj.visitTaskId === this.taskInfo.VisitTaskId && this.readingTaskState !== 2 && obj.markTool && !obj.isMarked) { const toolName = obj.markTool if (this.activeTool) { diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue index 38c3ce25..29eadf0c 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/customize/QuestionList.vue @@ -1263,10 +1263,23 @@ export default { } else if (this.isNoneDicom && value !== null) { value = this.reRound(csUtils.roundNumber(value), this.digitPlaces) } + if (prop === 'total' && value !== null) { + return this.formatStatSum(value) + } return value !== null ? parseFloat(value).toFixed(this.digitPlaces) : value }, + formatStatSum(value) { + const num = Number(value) + if (!Number.isFinite(num)) return value + + if (Math.abs(num - Math.round(num)) < 1e-6) { + return String(Math.round(num)) + } + + return this.reRound(num, this.digitPlaces) + }, reRound(result, finalPrecision) { if (typeof result === 'string' && result.includes(', ')) { const numStrs = result.split(', ') From 93ed9943fac74f3854332681f56711bf461f83ca Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Fri, 22 May 2026 15:25:21 +0800 Subject: [PATCH 084/121] =?UTF-8?q?=E4=B8=AD=E5=BF=83=E8=B0=83=E7=A0=94?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/research/components/EquipmentForm.vue | 2 +- src/views/research/login.vue | 2 +- src/views/research/topLang.vue | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/views/research/components/EquipmentForm.vue b/src/views/research/components/EquipmentForm.vue index 32b31341..f039f280 100644 --- a/src/views/research/components/EquipmentForm.vue +++ b/src/views/research/components/EquipmentForm.vue @@ -1,5 +1,5 @@ @@ -262,25 +265,25 @@ export default { e.preventDefault() e.stopPropagation() - // const annotation = this.getCircleAnnotationFromContextMenuEvent(e) - // if (!annotation) { - // this.hideAnnotationContextMenu() - // return false - // } + const annotation = this.getCircleAnnotationFromContextMenuEvent(e) + if (!annotation) { + this.hideAnnotationContextMenu() + return false + } - // if (cornerstoneTools.annotation.locking.isAnnotationLocked(annotation.annotationUID)) { - // this.hideAnnotationContextMenu() - // return false - // } + if (cornerstoneTools.annotation.locking.isAnnotationLocked(annotation.annotationUID)) { + this.hideAnnotationContextMenu() + return false + } - // this.$emit('activeViewport', this.viewportIndex) + this.$emit('activeViewport', this.viewportIndex) - // const { x, y } = this.getContextMenuPosition(e) - // this.annotationContextMenu.visible = true - // this.annotationContextMenu.x = x - // this.annotationContextMenu.y = y - // this.annotationContextMenu.annotation = annotation - // return false + const { x, y } = this.getContextMenuPosition(e) + this.annotationContextMenu.visible = true + this.annotationContextMenu.x = x + this.annotationContextMenu.y = y + this.annotationContextMenu.annotation = annotation + return false }, getContextMenuPosition(e) { const rect = this.element?.getBoundingClientRect?.() From 31d087265384c16169224a040afdc48ff7fa1d78 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Mon, 25 May 2026 13:26:06 +0800 Subject: [PATCH 090/121] =?UTF-8?q?SPECT=E6=B5=8B=E9=87=8F=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trials-panel/reading/dicoms3D/components/PetCtViewport.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/PetCtViewport.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/PetCtViewport.vue index 30eaf347..1f77aabc 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/PetCtViewport.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/PetCtViewport.vue @@ -264,7 +264,7 @@ export default { handleElementContextMenu(e) { e.preventDefault() e.stopPropagation() - + if (this.series.Modality !== 'NM') return false const annotation = this.getCircleAnnotationFromContextMenuEvent(e) if (!annotation) { this.hideAnnotationContextMenu() From a30fd58d79b541c8e982161d49c1193e6023013b Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Tue, 26 May 2026 09:40:04 +0800 Subject: [PATCH 091/121] =?UTF-8?q?=E5=A4=9A=E5=B8=A7=E5=9B=BE=E5=83=8F?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E6=9B=B4=E6=94=B9=EF=BC=9B=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=A3=80=E6=9F=A5=E5=88=97=E8=A1=A8=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E6=8E=92=E5=BA=8F=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/dicom-show/dicom-study.vue | 18 +++- src/views/dicom-show/dicom-visit.vue | 98 +++++++++++++++---- .../data-sync/components/StudyList.vue | 72 ++++++++++++-- 3 files changed, 155 insertions(+), 33 deletions(-) diff --git a/src/views/dicom-show/dicom-study.vue b/src/views/dicom-show/dicom-study.vue index 3955faef..dc72218a 100644 --- a/src/views/dicom-show/dicom-study.vue +++ b/src/views/dicom-show/dicom-study.vue @@ -53,6 +53,7 @@
@@ -72,17 +73,17 @@
+ @click.stop="popperClick(seriesList, item)" />
-
+
{{ item.modality }}: {{ item.instanceCount }} image
-
+
T: {{ parseFloat(item.sliceThickness).toFixed(2) }}
-
{{ item.description }}
@@ -203,7 +204,8 @@ export default { isReading: null, activeSeriesId: null, isPacs: false, - isComparison: false + isComparison: false, + activeInstanceId: null } }, created: function () { @@ -536,6 +538,7 @@ export default { showSeriesImage(e, seriesIndex, series) { if (this.isComparison) return false this.activeSeriesId = series.seriesId + this.activeInstanceId = null workSpeedclose(true) // if (seriesIndex === this.currentSeriesIndex) return const element = e.currentTarget @@ -584,6 +587,7 @@ export default { }, showMultiFrames(series, seriesIndex, instanceInfo) { this.currentSeriesIndex = seriesIndex + this.activeInstanceId = instanceInfo.Id const imageIds = [] if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) { for (let j = 0; j < instanceInfo.NumberOfFrames; j++) { @@ -1193,6 +1197,10 @@ export default { border-color: #213a54 !important; background-color: #213a54; } +.frame_content_active { + border-color: #213a54 !important; + background-color: #213a54; +} /* .viewerRightSidePanel { width: 300px; diff --git a/src/views/dicom-show/dicom-visit.vue b/src/views/dicom-show/dicom-visit.vue index 6eeb249e..e4f303ac 100644 --- a/src/views/dicom-show/dicom-visit.vue +++ b/src/views/dicom-show/dicom-visit.vue @@ -19,25 +19,26 @@ -
+
{{ study.Description }}
-
- {{ study.Modalities }} : {{ study.SeriesCount }} Series +
+ {{ study.Modalities }} : {{ study.SeriesCount }} Series +
@@ -207,6 +210,7 @@
@@ -327,7 +331,8 @@ export default { isFromCRCUpload: false, visitTaskId: null, page: '', - activeSeriesId: null + activeSeriesId: null, + activeInstanceId: null } }, mounted() { @@ -522,6 +527,7 @@ export default { }, showSeriesImage(e, studyIndex, seriesIndex, series) { this.activeSeriesId = series.seriesId + this.activeInstanceId = null workSpeedclose(true) const element = e.currentTarget const elements = document.querySelectorAll('[series-type]') @@ -563,6 +569,7 @@ export default { }, showMultiFrames(studyIndex, series, seriesIndex, instanceInfo) { this.currentSeriesIndex = seriesIndex + this.activeInstanceId = instanceInfo.Id const imageIds = [] if (instanceInfo.NumberOfFrames && instanceInfo.NumberOfFrames > 1) { for (let j = 0; j < instanceInfo.NumberOfFrames; j++) { @@ -886,6 +893,7 @@ export default { }, showRelationSeriesImage(e, series, studyIndex, index) { this.activeSeriesId = series.seriesId + this.activeInstanceId = null workSpeedclose(true) this.currentRelationIndex = index const element = e.currentTarget @@ -1105,6 +1113,7 @@ export default { padding: 0; margin-right: 2px; color: #D0D0D0; + overflow-x: hidden; overflow-y: auto; } @@ -1113,6 +1122,8 @@ export default { word-break: break-all; display: table; width: 100%; + box-sizing: border-box; + overflow-x: hidden; border: 1px solid #3e3f3a; } @@ -1219,12 +1230,24 @@ export default { .viewerContainer .el-collapse { border: none; + width: 100%; + min-width: 0; + box-sizing: border-box; + overflow-x: hidden; } .viewerContainer .el-collapse-item { background-color: #585453 !important; color: #ddd; + width: 100%; + min-width: 0; + box-sizing: border-box; +} +.viewerContainer .el-collapse-item__wrap { + width: 100%; + min-width: 0; + box-sizing: border-box; } .viewerContainer .el-collapse-item__content { @@ -1237,9 +1260,42 @@ export default { background-color: #585453 !important; color: #ddd; border-bottom-color: #5a5a5a; + width: 100%; + min-width: 0; + box-sizing: border-box; padding-left: 5px; - height: 40px; + height: auto; + min-height: 30px; line-height: 20px; + align-items: flex-start; + padding-top: 4px; + padding-bottom: 4px; +} + +.viewerContainer .collapse-title-wrapper { + display: flex; + flex: 1; + min-width: 0; + flex-wrap: wrap; + align-items: center; + column-gap: 6px; + row-gap: 2px; + line-height: 16px; + padding-right: 8px; +} + +.viewerContainer .collapse-title-wrapper .text-desc { + flex: 0 1 auto; + min-width: 0; + max-width: 100%; + white-space: normal; + word-break: break-word; + overflow-wrap: anywhere; +} + +.viewerContainer .collapse-title-wrapper .collapse-title-extra { + flex: 0 1 auto; + text-align: left; } .instance_frame_wrapper { @@ -1282,6 +1338,10 @@ export default { border-color: #213a54 !important; background-color: #213a54; } +.frame_content_active { + border-color: #213a54 !important; + background-color: #213a54; +} /* .viewerRightSidePanel { width: 300px; diff --git a/src/views/trials/trials-panel/trial-summary/data-sync/components/StudyList.vue b/src/views/trials/trials-panel/trial-summary/data-sync/components/StudyList.vue index 36febec1..8827eba7 100644 --- a/src/views/trials/trials-panel/trial-summary/data-sync/components/StudyList.vue +++ b/src/views/trials/trials-panel/trial-summary/data-sync/components/StudyList.vue @@ -90,15 +90,69 @@ - - - - - - - - - + + + + + + + + +