Merge branch 'uat'

# Conflicts:
#	src/api/trials.js
#	src/permission.js
#	src/utils/uploadZip.js
#	src/views/login/index.vue
This commit is contained in:
2024-07-17 10:14:54 +08:00
36 changed files with 1509 additions and 274 deletions
+2
View File
@@ -60,12 +60,14 @@ export const anonymization = function (file, config) {
const blob = new Blob([bufferArray], { type: 'application/octet-stream' })
resolve({ blob, pixelDataElement })
} catch (err) {
console.log(file, 'warning')
console.log(err)
resolve(false);
}
};
reader.readAsArrayBuffer(file);
} catch (e) {
console.log(file, 'warning')
console.log(e)
reject(e)
}
+1
View File
@@ -19,6 +19,7 @@ export const dcmUpload = async function (name, file, config) {
} catch (e) {
console.log(file, 'warning')
resolve(false)
console.log(e)
}
+1 -3
View File
@@ -2,10 +2,8 @@ const OSS = require('ali-oss')
const router = require('@/router');
const Minio = require('minio')
const stream = require('stream')
console.log(Minio)
import Vue from 'vue'
const { GenerateSTS, GetObjectStoreToken } = require('../api/user.js')
import { getToken } from '@/utils/auth'
const { GetObjectStoreToken } = require('../api/user.js')
Vue.prototype.OSSclientConfig = {
}
+110 -1
View File
@@ -1,6 +1,115 @@
import JSZip from "jszip";
import { saveAs } from "file-saver";
import Vue from 'vue';
import {
requestPackageAndAnonymizImage,
} from "@/api/load.js";
import streamSaver from "streamsaver";
import "streamsaver/examples/zip-stream.js"
export const downloadImage = (zipName, files) => {
let flag = {};
export const downloadImage = async (id, id2, IsDicom = true) => {
if (flag[`${id2}_${IsDicom}`]) return
flag[`${id2}_${IsDicom}`] = true
try {
let params = {
TrialId: id,
SubjectVisitId: id2,
IsDicom: IsDicom
}
let res = await requestPackageAndAnonymizImage(params);
flag[`${id2}_${IsDicom}`] = false;
if (res.IsSuccess) {
if (!res.Result) {
Vue.prototype.$message.warning(Vue.prototype.$t("trials:upload:message:not"))
return 1;
}
let a = document.createElement("a");
let href = Vue.prototype.OSSclientConfig.basePath + res.Result;
// let fileName =
// res.Result.split("/")[res.Result.split("/").length - 1];
a.download = res.OtherInfo.fileName;
a.href = href;
a.click();
URL.revokeObjectURL(href);
let timer = setTimeout(() => {
a = null;
href = null;
timer = null;
}, 500)
return 2;
} else {
return false;
}
} catch (err) {
flag[`${id2}_${IsDicom}`] = false;
console.log(err);
}
};
const setfolder = async (item) => {
const zip = new JSZip(); // 创建实例对象
let patientIds = item.PatientList.map(i => i.PatientIdStr);
let zipName = `${item.SubjectCode}_${patientIds.join(',')}`;
let zipObj = {};
const promises = [];
for (let visit of item.VisitList) {
if (!zipObj[`${visit.VisitName}`]) {
zipObj[`${visit.VisitName}`] = zip.folder(visit.VisitName);
}
for (let study of visit.StudyList) {
let date = study.StudyTime.split(" ")[0];
for (let series of study.SeriesList) {
if (
!zipObj[
`${visit.VisitName}${series.Modality}`
]
) {
zipObj[
`${visit.VisitName}${series.Modality}`
] = zipObj[`${visit.VisitName}`].folder(
`${date}_${series.Modality}`
);
}
for (let instance of series.InstancePathList) {
let obj = {
subjectCode: item.SubjectCode,
visitName: visit.VisitName,
date: study.StudyTime.split(" ")[0],
modality: series.Modality,
instancePath: instance.Path,
dicomName: instance.Path.split("/Dicom/")[1],
};
const promise = handleBatchDown(
obj,
zipObj[
`${visit.VisitName}${series.Modality}`
],
);
promises.push(promise);
}
}
}
}
// 生成 zip 文件
Promise.all(promises)
.then(() => {
// 生成zip 文件
zip
.generateAsync({
type: "blob",
compression: "DEFLATE", // STORE: 默认不压缩, DEFLATE:需要压缩
compressionOptions: {
level: 9, // 压缩等级 1~9 1 压缩速度最快, 9 最优压缩方式
},
})
.then((res) => {
saveAs(res, zipName + ".zip"); // 使用FileSaver.saveAs保存文件,文件名可自定义
flag[`${id2}_${IsDicom}`] = false;
zipObj = null;
});
})
.catch((reason) => { flag[`${id2}_${IsDicom}`] = false; });
};
const handleBatchDown = async (item, zip) => {
return new Promise((resolve) => {
console.log("同步下载打包开始时间:" + new Date());
// 创建压缩文件输出流