From 8db641db1628b9b896dd1d743aedf491cba82fbb Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Thu, 2 Apr 2026 14:07:58 +0800 Subject: [PATCH 01/41] =?UTF-8?q?=E5=88=86=E5=89=B2=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E6=97=B6=E9=BB=98=E8=AE=A4=E5=80=BC=E5=A1=AB=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reading/dicoms3D/components/Segmentations.vue | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue index 822566fa..08ce4f15 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/Segmentations.vue @@ -26,7 +26,8 @@
+ :title="$t('trials:Segmentations:tools:Eraser')" + @click.prevent="setToolActive('CircularEraser')">
+ + + + + {{ item.label }} + + + @@ -78,6 +96,7 @@ + + + + + + + + + {{ $t('common:button:search') }} + + + + {{ $t('common:button:reset') }} + + + + + + + + + diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadClinicalData.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadClinicalData.vue index 9f708c14..ededa539 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/uploadClinicalData.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadClinicalData.vue @@ -382,6 +382,7 @@ export default { size: files[i].size, type: extendName.split('.')[1], file: files[i], + fileType: files[i].type } this.fileList.push(obj); } @@ -401,7 +402,17 @@ export default { var timestamp = Date.now(); const res = await this.OSSclient.put( `/${this.trialId}/ClinicalData/${timestamp}_${this.fileList[i].file.name}`, - file + file, + { + fileName: `${this.fileList[i].file.name}`, + fileSize: file.size, + fileType: this.fileList[i].fileType, + uploadBatchId: this.$guid(), + batchDataType: 4, + trialId: this.trialId, + subjectId: this.data.SubjectId, + subjectVisitId: this.subjectVisitId + } ); this.addFileList.push({ fileName: this.fileList[i].file.name, 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 33a738cb..d66beef3 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 @@ -1520,6 +1520,7 @@ export default { }, } let arr = [] + let uploadBatchId = scope.$guid() for (let i = 0; i < seriesList.length; i++) { let v = seriesList[i] let instanceList = [] @@ -1587,6 +1588,7 @@ export default { params.trialId )}` if (scope.isClose) return + console.log(o.file) let res = await dcmUpload( { path: path, @@ -1607,6 +1609,16 @@ export default { ) { dicomInfo.uploadFileSize = dicomInfo.fileSize } + }, + { + fileName: o.file.name, + fileSize: o.file.size, + fileType: 'application/dicom', + uploadBatchId: uploadBatchId, + batchDataType: 1, + trialId: params.trialId, + subjectId: params.subjectId, + subjectVisitId: params.subjectVisitId } ) if (!res || !res.url) { @@ -1623,11 +1635,22 @@ export default { o.imageColumns, o.imageRows ) + let thumbnailPath = `/${params.trialId}/Image/${params.subjectId}/${params.subjectVisitId}/${dicomInfo.studyUid}/${v.seriesUid}.jpg` let OSSclient = scope.OSSclient let seriesRes = await OSSclient.put( thumbnailPath, - blob + blob, + { + fileName: `${v.seriesUid}.jpg`, + fileSize: blob.size, + fileType: 'image/jpeg', + uploadBatchId: scope.$guid(), + batchDataType: 2, + trialId: params.trialId, + subjectId: params.subjectId, + subjectVisitId: params.subjectVisitId + } ) if (seriesRes && seriesRes.url) { ImageResizePath = scope.$getObjectName( @@ -1762,7 +1785,20 @@ export default { let thumbnailPath = `/${params.trialId}/Image/${params.trialSiteId}/${params.subjectId}/${params.subjectVisitId}/${dicomInfo.studyUid}/${v.seriesUid}.jpg` let OSSclient = scope.OSSclient try { - let seriesRes = await OSSclient.put(thumbnailPath, blob) + let seriesRes = await OSSclient.put( + thumbnailPath, + blob, + { + fileName: `${v.seriesUid}.jpg`, + fileSize: blob.size, + fileType: 'image/jpeg', + uploadBatchId: uploadBatchId, + batchDataType: 2, + trialId: params.trialId, + subjectId: params.subjectId, + subjectVisitId: params.subjectVisitId + } + ) if (seriesRes && seriesRes.url) { o.ImageResizePath = scope.$getObjectName(seriesRes.url) } @@ -1775,7 +1811,8 @@ export default { params.study.instanceCount = dicomInfo.failedFileCount params.RecordPath = scope.$getObjectName(logRes.url) if (scope.isClose) return false - console.log(params) + + params.UploadBatchId = uploadBatchId addOrUpdateArchiveStudy(params) .then((res) => { if (dicomInfo.failedFileCount === dicomInfo.fileCount) { diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadNonDicomFiles.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadNonDicomFiles.vue index fc357961..12756cbd 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/components/uploadNonDicomFiles.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadNonDicomFiles.vue @@ -756,6 +756,7 @@ export default { .substring(fileName.lastIndexOf('.')) .toLocaleLowerCase() if (this.faccept.indexOf(extendName) !== -1) { + files[i].fileName = files[i].name files[i].id = `${files[i].lastModified}${files[i].name}` this.fileList.push(files[i]) } @@ -809,8 +810,9 @@ export default { }) if (res.IsSuccess) { this.studyMonitorId = res.Result + let uploadBatchId = this.$guid() for (let i = 0; i < num; i++) { - funArr.push(this.handleUploadTask(this.selectArr, i)) + funArr.push(this.handleUploadTask(this.selectArr, i, uploadBatchId)) } if (funArr.length > 0) { let res = await Promise.all(funArr) @@ -821,17 +823,16 @@ export default { } }, // 并发上传 - async handleUploadTask(arr, index) { + async handleUploadTask(arr, index, uploadBatchId) { if (!this.uploadVisible) return let file = this.fileList.filter((item) => item.id === arr[index].id)[0] file.status = 1 + let fileName = `${this.$guid()}${file.name.substring(file.name.lastIndexOf('.')).toLocaleLowerCase()}` let path = `/${this.trialId}/Image/${this.data.SubjectId}/${this.data.Id - }/${this.$guid()}${file.name - .substring(file.name.lastIndexOf('.')) - .toLocaleLowerCase()}` + }/${fileName}` file.curPath = path const fileData = await this.fileToBlob(file.file) - let res = await this.fileToOss(path, fileData, file) + let res = await this.fileToOss(path, fileData, file, uploadBatchId) if (res) { file.status = 2 this.successFileList.push({ @@ -865,13 +866,13 @@ export default { } let ind = arr.findIndex((item) => item.status === 0) if (ind >= 0) { - return this.handleUploadTask(arr, ind) + return this.handleUploadTask(arr, ind, uploadBatchId) } else { return false } }, // file上传到oss - async fileToOss(path, file, item) { + async fileToOss(path, file, item, uploadBatchId) { try { let res = await this.OSSclient.multipartUpload( { @@ -884,6 +885,18 @@ export default { if (item.uploadFileSize > file.fileSize) { item.uploadFileSize = file.fileSize > 0 ? file.fileSize : 1 } + }, + { + fileName: item.name, + fileSize: item.size, + fileType: item.fileType, + uploadBatchId: uploadBatchId, + batchDataType: 3, + trialId: this.trialId, + subjectId: this.data.SubjectId, + subjectVisitId: this.subjectVisitId, + studyCode: this.currentRow.CodeView + } ) if (res) { 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 9a7c6d99..f7efe6bf 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 @@ -361,6 +361,7 @@ export default { size: files[i].size, type: extendName.split('.')[1], file: files[i], + fileType: files[i].type } this.fileList.push(obj) } @@ -380,7 +381,17 @@ export default { var timestamp = Date.now() const res = await this.OSSclient.put( `/${this.trialId}/ClinicalData/${timestamp}_${this.fileList[i].file.name}`, - file + file, + { + fileName: `${this.fileList[i].file.name}`, + fileSize: this.fileList[i].size, + fileType: this.fileList[i].fileType, + uploadBatchId: this.$guid(), + batchDataType: 4, + trialId: this.trialId, + subjectId: this.data.SubjectId, + subjectVisitId: this.subjectVisitId + } ) this.addFileList.push({ fileName: this.fileList[i].file.name, From 478adcde21c63acb7cf2817c55660dcd2b12af2f Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 2 Apr 2026 17:35:20 +0800 Subject: [PATCH 06/41] 1 --- src/utils/oss.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/oss.js b/src/utils/oss.js index c6543243..dba5248f 100644 --- a/src/utils/oss.js +++ b/src/utils/oss.js @@ -23,7 +23,9 @@ async function ossGenerateSTS() { res = await GetObjectStoreToken() localStorage.setItem('stsToken', JSON.stringify(res)) } - let trialId = this.$route.query.trialId + const urlParams = new URLSearchParams(window.location.search) + + const trialId = urlParams.get('trialId') // res.Result.ObjectStoreUse = 'AWS'; Vue.prototype.OSSclientConfig = { ...res.Result[res.Result.ObjectStoreUse] } Vue.prototype.OSSclientConfig.ObjectStoreUse = res.Result.ObjectStoreUse; @@ -228,7 +230,9 @@ function uploadAWS(aws, data, progress, fileInfo) { data.path = data.path.replace(`/${bucketName}/`, ''); await exist(aws, bucketName, data, progress, (path, status) => { if (status === 'success') { - let trialId = this.$route.query.trialId + const urlParams = new URLSearchParams(window.location.search) + + const trialId = urlParams.get('trialId') if (Object.keys(fileInfo).length !== 0) { let params = Object.assign({path: decodeUtf8(curPath)}, fileInfo) addOrUpdateFileUploadRecord(params) From e30fb2a041e87fc3ca2336535951cb5d3b80749f Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Thu, 2 Apr 2026 17:37:24 +0800 Subject: [PATCH 07/41] 1 --- src/utils/oss.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/utils/oss.js b/src/utils/oss.js index dba5248f..723d155e 100644 --- a/src/utils/oss.js +++ b/src/utils/oss.js @@ -23,9 +23,6 @@ async function ossGenerateSTS() { res = await GetObjectStoreToken() localStorage.setItem('stsToken', JSON.stringify(res)) } - const urlParams = new URLSearchParams(window.location.search) - - const trialId = urlParams.get('trialId') // res.Result.ObjectStoreUse = 'AWS'; Vue.prototype.OSSclientConfig = { ...res.Result[res.Result.ObjectStoreUse] } Vue.prototype.OSSclientConfig.ObjectStoreUse = res.Result.ObjectStoreUse; @@ -56,6 +53,8 @@ async function ossGenerateSTS() { } let res = await OSSclient.put(objectName, object) if (res && res.url) { + const urlParams = new URLSearchParams(window.location.search) + const trialId = urlParams.get('trialId') if (Object.keys(fileInfo).length !== 0) { let params = Object.assign({path: objectName}, fileInfo) addOrUpdateFileUploadRecord(params) @@ -106,6 +105,8 @@ async function ossGenerateSTS() { } let res = await customerHttp(OSSclient, data, progress); if (res) { + const urlParams = new URLSearchParams(window.location.search) + const trialId = urlParams.get('trialId') if (Object.keys(fileInfo).length !== 0) { let params = Object.assign({path: data.path}, fileInfo) addOrUpdateFileUploadRecord(params) From 6321bddfd373a82761756732e28e7145c7dffae6 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Fri, 3 Apr 2026 13:33:46 +0800 Subject: [PATCH 08/41] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/file.js | 10 +- .../data-sync/components/FileList.vue | 207 +++++++++++++ .../data-sync/components/TaskList.vue | 176 +++++++++++ .../trial-summary/data-sync/index.vue | 290 +++++++++++------- .../components/uploadDicomFiles2.vue | 2 +- 5 files changed, 575 insertions(+), 110 deletions(-) create mode 100644 src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue create mode 100644 src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue diff --git a/src/api/file.js b/src/api/file.js index 804e067d..ccaef8d6 100644 --- a/src/api/file.js +++ b/src/api/file.js @@ -8,6 +8,14 @@ export function addOrUpdateFileUploadRecord(params) { }) } +export function getSubjectUploadRecordList(params) { + return request({ + url: `/FileUploadRecord/getSubjectUploadRecordList`, + method: 'post', + data: params + }) +} + export function getFileUploadRecordList(params) { return request({ url: `/FileUploadRecord/getFileUploadRecordList`, @@ -22,4 +30,4 @@ export function getUploadFileSyncRecordList(params) { method: 'post', data: params }) -} \ No newline at end of file +} diff --git a/src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue b/src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue new file mode 100644 index 00000000..3a7b3c32 --- /dev/null +++ b/src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue @@ -0,0 +1,207 @@ + + \ No newline at end of file diff --git a/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue b/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue new file mode 100644 index 00000000..90e95c24 --- /dev/null +++ b/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue @@ -0,0 +1,176 @@ + + \ No newline at end of file diff --git a/src/views/trials/trials-panel/trial-summary/data-sync/index.vue b/src/views/trials/trials-panel/trial-summary/data-sync/index.vue index 37ea54dc..c5d1cd1a 100644 --- a/src/views/trials/trials-panel/trial-summary/data-sync/index.vue +++ b/src/views/trials/trials-panel/trial-summary/data-sync/index.vue @@ -2,55 +2,57 @@ - + + {{ detailDialog.title }} + {{`${detailDialog.currentRow.SubjectCode} / ${detailDialog.currentRow.VisitName} ${detailDialog.currentRow.StudyCode ? ' / ' + detailDialog.currentRow.StudyCode : ''}`}} + + + + + + + + + + + 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 d66beef3..e18b8eab 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 @@ -1645,7 +1645,7 @@ export default { fileName: `${v.seriesUid}.jpg`, fileSize: blob.size, fileType: 'image/jpeg', - uploadBatchId: scope.$guid(), + uploadBatchId: uploadBatchId, batchDataType: 2, trialId: params.trialId, subjectId: params.subjectId, From 769c5f8440095c63e13cf8c9c30ec7083417a2c6 Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Fri, 3 Apr 2026 13:42:14 +0800 Subject: [PATCH 09/41] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=BA=A7=E5=88=AB?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data-sync/components/TaskList.vue | 24 ++++++++++++++++++- .../trial-summary/data-sync/index.vue | 6 ++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue b/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue index 90e95c24..5ab58708 100644 --- a/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue +++ b/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue @@ -2,10 +2,25 @@ Date: Fri, 3 Apr 2026 13:45:39 +0800 Subject: [PATCH 11/41] =?UTF-8?q?echarts=E7=89=88=E6=9C=AC=E5=8D=87?= =?UTF-8?q?=E7=BA=A7v4=3D>v6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/components/readingChart/index.vue | 52 ++++++-- .../dashboard/components/distribution-map.vue | 124 +++++++++--------- .../components/enrollments-of-reviewers.vue | 2 +- .../components/enrollments-per-quarter.vue | 2 +- .../dashboard/components/reviewers-stats.vue | 2 +- .../components/workload-of-months.vue | 2 +- .../components/workload-of-reviewers.vue | 2 +- .../dashboard/components/workload-stats.vue | 2 +- .../reading/dicoms3D/components/ReadPage.vue | 12 ++ .../subject-list/components/SubjectChart.vue | 50 ++++++- .../trial-summary/report-forms/index.vue | 103 ++++++++++++--- 12 files changed, 255 insertions(+), 100 deletions(-) diff --git a/package.json b/package.json index bb0c39fe..57425f0f 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "dcmjs": "^0.29.8", "dicom-parser": "^1.8.9", "dicomedit": "^0.1.0", - "echarts": "^4.8.0", + "echarts": "^6.0.0", "element-ui": "^2.15.14", "exceljs": "^4.4.0", "file-saver": "^2.0.5", diff --git a/src/components/readingChart/index.vue b/src/components/readingChart/index.vue index 1c4ae9a8..f10c4c9c 100644 --- a/src/components/readingChart/index.vue +++ b/src/components/readingChart/index.vue @@ -8,20 +8,49 @@ + \ No newline at end of file From d2d1063ed5bd01c3ba3d296a9e004b4acad70adf Mon Sep 17 00:00:00 2001 From: caiyiling <1321909229@qq.com> Date: Fri, 3 Apr 2026 17:27:12 +0800 Subject: [PATCH 14/41] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 34 +- src/api/file.js | 8 + .../data-sync/components/FileList.vue | 208 +++++++++++- .../data-sync/components/StudyList.vue | 302 +++++++++++++++++ .../data-sync/components/TaskList.vue | 45 +-- .../trial-summary/data-sync/index.vue | 306 ++---------------- 6 files changed, 579 insertions(+), 324 deletions(-) create mode 100644 src/views/trials/trials-panel/trial-summary/data-sync/components/StudyList.vue diff --git a/package-lock.json b/package-lock.json index a00f41c7..962a85d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "dcmjs": "^0.29.8", "dicom-parser": "^1.8.9", "dicomedit": "^0.1.0", - "echarts": "^4.8.0", + "echarts": "^6.0.0", "element-ui": "^2.15.14", "exceljs": "^4.4.0", "file-saver": "^2.0.5", @@ -10849,14 +10849,21 @@ } }, "node_modules/echarts": { - "version": "4.9.0", - "resolved": "https://registry.npmmirror.com/echarts/-/echarts-4.9.0.tgz", - "integrity": "sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==", + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-6.0.0.tgz", + "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==", "license": "Apache-2.0", "dependencies": { - "zrender": "4.3.2" + "tslib": "2.3.0", + "zrender": "6.0.0" } }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", @@ -23905,10 +23912,19 @@ } }, "node_modules/zrender": { - "version": "4.3.2", - "resolved": "https://registry.npmmirror.com/zrender/-/zrender-4.3.2.tgz", - "integrity": "sha512-bIusJLS8c4DkIcdiK+s13HiQ/zjQQVgpNohtd8d94Y2DnJqgM1yjh/jpDb8DoL6hd7r8Awagw8e3qK/oLaWr3g==", - "license": "BSD-3-Clause" + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-6.0.0.tgz", + "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" } } } diff --git a/src/api/file.js b/src/api/file.js index ccaef8d6..b320feed 100644 --- a/src/api/file.js +++ b/src/api/file.js @@ -8,6 +8,14 @@ export function addOrUpdateFileUploadRecord(params) { }) } +export function batchAddSyncFileTask(params) { + return request({ + url: `/FileUploadRecord/batchAddSyncFileTask`, + method: 'post', + data: params + }) +} + export function getSubjectUploadRecordList(params) { return request({ url: `/FileUploadRecord/getSubjectUploadRecordList`, diff --git a/src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue b/src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue index c2568eb1..8543fb31 100644 --- a/src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue +++ b/src/views/trials/trials-panel/trial-summary/data-sync/components/FileList.vue @@ -51,16 +51,21 @@ {{ $t('common:button:reset') }} + + + 批量编辑 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 取消 + 保存 + + + + + + + + + + 取消 + 保存 + + + + diff --git a/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue b/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue index 134efc2b..7c3d079a 100644 --- a/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue +++ b/src/views/trials/trials-panel/trial-summary/data-sync/components/TaskList.vue @@ -36,9 +36,10 @@ + - + - + + - + @@ -75,7 +77,7 @@ - + \ No newline at end of file From b1de662677a1cba003ff71bfe14a7328804a705d Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Tue, 7 Apr 2026 17:11:04 +0800 Subject: [PATCH 15/41] =?UTF-8?q?aws=E6=8F=92=E4=BB=B6=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 57425f0f..4ab1c6d9 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "i18n:en": "node i18nGenerate.js lang=en keyCol=5 valCol=7" }, "dependencies": { - "@aws-sdk/client-s3": "^3.726.1", - "@cornerstonejs/adapters": "4.19.2", + "@aws-sdk/client-s3": "3.726.1", + "@cornerstonejs/adapters": "^4.19.2", "@cornerstonejs/calculate-suv": "^1.1.0", "@cornerstonejs/core": "^4.19.2", "@cornerstonejs/dicom-image-loader": "^4.19.2", From 5b4cc097bcaa2d0a50d0c69d178df1cbd0442bf3 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Wed, 8 Apr 2026 14:58:26 +0800 Subject: [PATCH 16/41] =?UTF-8?q?=E5=88=86=E5=89=B2=E8=A7=86=E5=9B=BE?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=B4=E6=96=B9=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reading/dicoms3D/components/ReadPage.vue | 72 +- .../dicoms3D/components/VolumeViewport.vue | 5 + .../reading/dicoms3D/components/histogram.vue | 1040 +++++++++++++++-- 3 files changed, 1035 insertions(+), 82 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 f296c2f8..1c47b07e 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue @@ -313,7 +313,8 @@ @dblclick="toggleFullScreen($event, index)" @click="activeViewport(index)"> + + @@ -500,7 +504,6 @@ :subject-code="uploadSubjectCode" :criterion="uploadTrialCriterion" :task-id="taskId" :visible.sync="downloadImageVisible" /> - - \ No newline at end of file + \ No newline at end of file From 641c2e6adee0e40875365540d1b8a5f36c147849 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Wed, 8 Apr 2026 16:22:29 +0800 Subject: [PATCH 17/41] =?UTF-8?q?=E7=9B=B4=E6=96=B9=E5=9B=BE=E5=8F=96?= =?UTF-8?q?=E5=80=BC=E5=8F=8A=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reading/dicoms3D/components/histogram.vue | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/histogram.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/histogram.vue index 214cea71..9a64d272 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/histogram.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/histogram.vue @@ -23,7 +23,7 @@
-
+
@@ -194,6 +194,7 @@ export default { const option = { useUTC: true, title: { + show: false, text: this.$t("trials:histogram:title:histogram"), textStyle: { color: "#fff" @@ -203,6 +204,7 @@ export default { }, color: this.colors, grid: { + top: 0, left: 50, bottom: 80, right: 20 @@ -282,8 +284,11 @@ export default { } }) Object.keys(obj).forEach(key => { - let arr = [key, obj[key]] - seriesData.push(arr) + if (key > -1020) { + let arr = [key, obj[key]] + seriesData.push(arr) + } + }) } seriesData.sort((a, b) => a[0] - b[0]) @@ -1169,6 +1174,8 @@ export default { .el-dialog { position: fixed; top: 10px; + margin-top: 110px; + left: 220px; z-index: 9999; width: 450px; text-align: center; From a68c27fd43c39737a9b0ec451d859f477479ac38 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Thu, 9 Apr 2026 17:19:12 +0800 Subject: [PATCH 18/41] =?UTF-8?q?=E5=88=86=E5=89=B2=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reading/dicoms3D/components/ReadPage.vue | 12 ++++--- .../dicoms3D/components/SegmentForm.vue | 36 +++++++++++++++---- .../dicoms3D/components/VolumeViewport.vue | 17 +++++++-- 3 files changed, 52 insertions(+), 13 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 1c47b07e..c14419a2 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/ReadPage.vue @@ -315,8 +315,8 @@ :rendering-engine-id="renderingEngineId" :viewport-id="`viewport-${index}`" :viewport-index="index" :histogramVisible="histogramVisible" @activeViewport="activeViewport" @toggleTaskByViewport="toggleTaskByViewport" @previewCD="previewCD" - @renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup" v-if="readingTool === 3" - v-resize="(e) => handleSizeChange(e, `viewport-${index}`)" /> + @renderAnnotations="renderAnnotations" @contentMouseup="contentMouseup" @resetViewport="resetViewport" + v-if="readingTool === 3" v-resize="(e) => handleSizeChange(e, `viewport-${index}`)" /> - + - + - + @@ -106,10 +109,14 @@ export default { }) this.studyList = studyList if (this.visitInfo.operateStateEnum === 21) { - this.form.studyId = this.series.StudyId - this.handleChange(null, 'study') - this.form.seriesId = this.series.Id - this.handleChange(null, 'series') + let find = studyList.some(item => item.StudyId === this.series.StudyId) + if (find) { + this.form.studyId = this.series.StudyId + this.handleChange(null, 'study') + this.form.seriesId = this.series.Id + this.handleChange(null, 'series') + } + } if (this.visitInfo.operateStateEnum === 22) { let o = {} @@ -132,6 +139,7 @@ export default { }, async handleChange(e, key) { if (key === 'study') { + console.log(this.studyList, 'this.studyList') this.seriesList = this.studyList.find(item => item.StudyId === this.form.studyId).SeriesArr } if (key === 'series') { @@ -142,6 +150,20 @@ export default { this.segmentList = list.filter(item => item.SegmentJson) } }, + handleClear(e, key) { + if (key === 'study') { + this.form.seriesId = null + this.form.segmentGroupId = null + this.form.segmentId = null + } + if (key === 'series') { + this.form.segmentGroupId = null + this.form.segmentId = null + } + if (key === 'segmentGroup') { + this.form.segmentId = null + } + }, handleCancel() { this.$emit("update:visible", false) }, diff --git a/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue b/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue index 0cf01f3e..935e6697 100644 --- a/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue +++ b/src/views/trials/trials-panel/reading/dicoms3D/components/VolumeViewport.vue @@ -78,8 +78,10 @@ import * as cornerstoneTools from '@cornerstonejs/tools' import { createImageIdsAndCacheMetaData } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/createImageIdsAndCacheMetaData' import setCtTransferFunctionForVolumeActor from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setCtTransferFunctionForVolumeActor' import { setCtMappingRange } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setCtTransferFunctionForVolumeActor' -import { setPetColorMapTransferFunctionForVolumeActor } from '@/views/trials/trials-panel/reading/dicoms/components/Fusion/js/setPetColorMapTransferFunctionForVolumeActor' import { vec3, mat4 } from 'gl-matrix' +import { + setPetTransferFunctionForVolumeActor +} from './helpers/index.js' import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent' export default { name: 'MPRViewport', @@ -537,7 +539,8 @@ export default { .setVolumes([{ volumeId: this.volumeId, callback: (r) => { if (this.series.Modality === 'PT' || this.series.Modality === 'NM') { - setPetColorMapTransferFunctionForVolumeActor(r, true) + setPetTransferFunctionForVolumeActor(r) + // viewport.setProperties({ voiRange: { upper: 5, lower: 0 } }) } else { const voi = metaData.get('voiLutModule', res.volume._imageIds[Math.ceil((res.volume._imageIds.length - 1) / 2)]) setCtMappingRange(voi.windowWidth[0], voi.windowCenter[0]) @@ -555,6 +558,16 @@ export default { DicomEvent.$emit("isloaded", { isChange: data.isChange }) }) 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.render() + renderingEngine.render() + }, 100) + } + } catch (e) { console.log(e) } From 5289c156c0547bba39f6d9a871b7c77ea7709aa1 Mon Sep 17 00:00:00 2001 From: wangxiaoshuang <825034831@qq.com> Date: Thu, 9 Apr 2026 17:28:59 +0800 Subject: [PATCH 19/41] 1 --- .../components/ArbitrationRules.vue | 455 +++++------------- 1 file changed, 122 insertions(+), 333 deletions(-) diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/ArbitrationRules.vue b/src/views/trials/trials-panel/setting/reading-unit/components/ArbitrationRules.vue index c2056fc4..ebbe1998 100644 --- a/src/views/trials/trials-panel/setting/reading-unit/components/ArbitrationRules.vue +++ b/src/views/trials/trials-panel/setting/reading-unit/components/ArbitrationRules.vue @@ -4,226 +4,127 @@