diff --git a/package-lock.json b/package-lock.json index 39fcd597..205955d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,6 +57,7 @@ "sortablejs": "^1.15.5", "streamsaver": "^2.0.6", "svgo": "^1.2.2", + "unzipit": "^2.0.3", "v-viewer": "^1.7.4", "vcrontab": "^0.3.5", "vue": "2.7.16", @@ -21835,6 +21836,15 @@ "node": ">=0.10.0" } }, + "node_modules/unzipit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unzipit/-/unzipit-2.0.3.tgz", + "integrity": "sha512-e6+ftgSQRj9Hwf2mIWFwYIGqBoKV7AziG/d7pep2Uv3NCzHbhLO5d9dGRwpahVlnpQ7aQC+5kWk72dnWocdYyA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/unzipper": { "version": "0.10.14", "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.14.tgz", diff --git a/package.json b/package.json index e10c42e7..3be3af68 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "sortablejs": "^1.15.5", "streamsaver": "^2.0.6", "svgo": "^1.2.2", + "unzipit": "^2.0.3", "v-viewer": "^1.7.4", "vcrontab": "^0.3.5", "vue": "2.7.16", diff --git a/src/api/export.js b/src/api/export.js index da589d90..12ccf939 100644 --- a/src/api/export.js +++ b/src/api/export.js @@ -316,3 +316,30 @@ export function GetReadingMedicineSystemQuestionList_Export(data) { data }) } +// 导出中心调研 +export function getTrialSiteSurveyList_Export(data) { + return requestDownload({ + url: `/ExcelExport/getTrialSiteSurveyList_Export`, + responseType: 'blob', + method: 'post', + data + }) +} +// 导出中心设备 +export function getSiteSurveyEquipmentList_Export(data) { + return requestDownload({ + url: `/ExcelExport/getSiteSurveyEquipmentList_Export`, + responseType: 'blob', + method: 'post', + data + }) +} +// 导出中心调研基本信息 +export function getSiteSurveyInfoList_Export(data) { + return requestDownload({ + url: `/ExcelExport/getSiteSurveyInfoList_Export`, + responseType: 'blob', + method: 'post', + data + }) +} diff --git a/src/api/reading.js b/src/api/reading.js index 0ac49b93..37300160 100644 --- a/src/api/reading.js +++ b/src/api/reading.js @@ -213,6 +213,14 @@ export function getIVUSTemplate(param) { data: param }) } +export function getIVUSTemplatesZip(param) { + return requestDownload({ + url: '/IVUSCalculate/getIVUSTemplatesZip', + method: 'post', + responseType: 'blob', + data: param + }) +} export function uploadIVUSTemplate(param) { return request({ url: `/IVUSCalculate/uploadIVUSTemplate`, @@ -229,7 +237,14 @@ export function getOCTFCTTemplate(param) { data: param }) } - +export function getOCTFCTTemplatesZip(param) { + return requestDownload({ + url: '/OCTCalculate/getOCTFCTTemplatesZip', + method: 'post', + responseType: 'blob', + data: param + }) +} export function uploadOCTFCTTemplate(param) { return request({ url: `/OCTCalculate/uploadOCTFCTTemplate`, diff --git a/src/api/research.js b/src/api/research.js index 66f1b54c..3efefb7e 100644 --- a/src/api/research.js +++ b/src/api/research.js @@ -129,3 +129,31 @@ export function getUserTypeList(userTypeEnum) { method: 'get' }) } + +export function getSiteSurveyLogList(param) { + return request({ + url: `/TrialSiteSurvey/getSiteSurveyLogList`, + method: 'post', + data: param + }) +} +export function getTrialIsSPMJoin(trialId) { + return request({ + url: `/TrialSiteSurvey/getTrialIsSPMJoin?trialId=${trialId}`, + method: 'get' + }) +} +export function getSiteSurveyEquipmentList(param) { + return request({ + url: `/TrialSiteSurvey/getSiteSurveyEquipmentList`, + method: 'post', + data: param + }) +} +export function getSiteSurveyInfoList(param) { + return request({ + url: `/TrialSiteSurvey/getSiteSurveyInfoList`, + method: 'post', + data: param + }) +} diff --git a/src/api/trials/reading.js b/src/api/trials/reading.js index 9ee3654a..a89be510 100644 --- a/src/api/trials/reading.js +++ b/src/api/trials/reading.js @@ -488,3 +488,67 @@ export function setRandomTaskOrder(data) { data }) } + +export function getJudgeForm(data) { + return request({ + url: `/ReadingImageTask/getJudgeForm`, + method: 'post', + data + }) +} + +export function setJudgeForm(data) { + return request({ + url: `/ReadingImageTask/setJudgeForm`, + method: 'post', + data + }) +} + +export function getSingleVisitJudgeAnswer(data) { + return request({ + url: `/ReadingImageTask/getSingleVisitJudgeAnswer`, + method: 'post', + data + }) +} + +export function submitJudgeForm(data) { + return request({ + url: `/Inspection/ReadingImageTask/SubmitJudgeForm`, + method: 'post', + data + }) +} + +export function getTrialQuestionVisitJudgeRule(data) { + return request({ + url: `/ReadingQuestion/getTrialQuestionVisitJudgeRule`, + method: 'post', + data + }) +} + +export function setTrialQuestionVisitJudgeRule(data) { + return request({ + url: `/ReadingQuestion/setTrialQuestionVisitJudgeRule`, + method: 'post', + data + }) +} + +export function copyTrialQuestionVisitJudgeRule(data) { + return request({ + url: `/ReadingQuestion/copyTrialQuestionVisitJudgeRule`, + method: 'post', + data + }) +} + +export function applyBaseLineTrialQuestionVisitJudgeRule(data) { + return request({ + url: `/ReadingQuestion/applyBaseLineTrialQuestionVisitJudgeRule`, + method: 'post', + data + }) +} diff --git a/src/api/trials/setting.js b/src/api/trials/setting.js index 063b0e36..104e8254 100644 --- a/src/api/trials/setting.js +++ b/src/api/trials/setting.js @@ -94,6 +94,14 @@ export function getTrialJudgyInfo(params) { data: params }) } + +export function setTrialJudgeRuleInfo(params) { + return request({ + url: `/ReadingQuestion/setTrialJudgeRuleInfo`, + method: 'post', + data: params + }) +} // 获取检查部位列表 export function getTrialBodyPartList(params) { return request({ diff --git a/src/components/downloadDicomAndNonedicom/index.vue b/src/components/downloadDicomAndNonedicom/index.vue index 49bd1582..4ff5820c 100644 --- a/src/components/downloadDicomAndNonedicom/index.vue +++ b/src/components/downloadDicomAndNonedicom/index.vue @@ -336,6 +336,14 @@ export default { if (data.StudyList && data.StudyList.length > 0) { let StudyList = data.StudyList StudyList.forEach((study) => { + let arr = [] + study.SeriesList.forEach(item => { + if (!arr.includes(item.Modality)) { + arr.push(item.Modality) + } + }) + let str = arr.join('_') + let time = study.StudyTime.split(' ')[0] if (study.StudyDIRPath) { let obj = { name: `${data.SubjectCode}/${data.TaskBlindName @@ -347,7 +355,7 @@ export default { obj = { name: `${data.SubjectCode}/${data.VisitName }/${this.$fd('IsDicom', true)}/${study.StudyCode - }/DICOMDIR`, + }_${time}_${str}/DICOMDIR`, url: this.OSSclientConfig.basePath + study.StudyDIRPath, } } else if (this.IsReadingTaskViewInOrder === 0) { @@ -380,7 +388,7 @@ export default { obj = { name: `${data.SubjectCode}/${data.VisitName }/${this.$fd('IsDicom', true)}/${study.StudyCode - }/IMAGE/${fileName}`, + }_${time}_${str}/IMAGE/${fileName}`, url: this.OSSclientConfig.basePath + instance.Path, IsEncapsulated: instance.IsEncapsulated } diff --git a/src/components/uploadDicomAndNonedicom/index.vue b/src/components/uploadDicomAndNonedicom/index.vue index c5f19dbd..98510f22 100644 --- a/src/components/uploadDicomAndNonedicom/index.vue +++ b/src/components/uploadDicomAndNonedicom/index.vue @@ -3,7 +3,7 @@ :append-to-body="true" class="uploadDicomAndNonedicom"> {{ title }} - + + -1 || file.name.indexOf("trials:uploadNonDicoms:checkValue:researchOver") > -1) f = true + zipFiles.push(file) + } if ( this.faccept.indexOf(extendName) !== -1 && this.fileList.findIndex((v) => v.name === file.name) > -1 @@ -382,6 +417,18 @@ export default { sameFiles.push(file.name) } }) + if (zipFiles.length > 0) { + for (let i = 0; i < zipFiles.length; i++) { + let file = zipFiles[i] + let list = await this.readZipFileListRaw(file) + if (!f) f = list.some(i => i.path.indexOf(this.$t("trials:uploadNonDicoms:checkValue:SelectionPeriod")) > -1 || i.path.indexOf(this.$t("trials:uploadNonDicoms:checkValue:researchOver")) > -1) + list = null + if (f) break + } + } + if (f) return this.$confirm(this.$t("trials:uploadNonDicoms:confirm:zipNameNonCompliant"), '', { + type: "warning" + }) var scope = this if (sameFiles.length > 0) { const h = this.$createElement diff --git a/src/icons/svg/notEqual.svg b/src/icons/svg/notEqual.svg new file mode 100644 index 00000000..a91ca246 --- /dev/null +++ b/src/icons/svg/notEqual.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index f9649f17..93dbf25f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -228,6 +228,12 @@ export const constantRoutes = [ component: () => import('@/views/research/form'), hidden: true }, + { + path: '/researchLog', + name: 'researchLog', + component: () => import('@/views/research/form'), + hidden: true + }, { path: '/researchLogin_m', name: 'researchLogin_m', diff --git a/src/utils/whiteList.js b/src/utils/whiteList.js index 7ade7116..741ae39e 100644 --- a/src/utils/whiteList.js +++ b/src/utils/whiteList.js @@ -1,2 +1,2 @@ -const WHITELIST = ['/', "/curriculumVitae", 'researchDetail_m', '/researchForm', '/ReviewersResearch', '/login', '/link_expired', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/researchLogin_m', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms', '/ecrfList'] +const WHITELIST = ['/', "/curriculumVitae", 'researchDetail_m', '/researchForm', '/ReviewersResearch', '/login', '/link_expired', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/researchLogin_m', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms', '/ecrfList', '/researchLog'] export default WHITELIST diff --git a/src/views/research/components/LogList.vue b/src/views/research/components/LogList.vue new file mode 100644 index 00000000..e7cdc2c2 --- /dev/null +++ b/src/views/research/components/LogList.vue @@ -0,0 +1,93 @@ + + + diff --git a/src/views/research/form.vue b/src/views/research/form.vue index c0393445..8dadc8a5 100644 --- a/src/views/research/form.vue +++ b/src/views/research/form.vue @@ -35,6 +35,10 @@ {{ $t('trials:researchForm:button:historicalRecord') }} + + + {{ $t('trials:researchForm:button:log') }} + {{ $t('trials:researchForm:button:loginOut') }} @@ -133,16 +137,37 @@ -
+
+ + +
+
+ {{ $t('trials:researchForm:button:log') }} +
+
+ + +
+
+
+
+ +
+
+
@@ -399,5 +481,45 @@ export default { } } + .history-dialog-content, + .log-dialog-content { + height: 100%; + margin: 0; + } + + .log-dialog-content { + overflow: hidden; + } + +} + + diff --git a/src/views/trials/trials-panel/attachments/site-research/components/Equipments.vue b/src/views/trials/trials-panel/attachments/site-research/components/Equipments.vue new file mode 100644 index 00000000..3300eb19 --- /dev/null +++ b/src/views/trials/trials-panel/attachments/site-research/components/Equipments.vue @@ -0,0 +1,311 @@ + + diff --git a/src/views/trials/trials-panel/attachments/site-research/components/Questions.vue b/src/views/trials/trials-panel/attachments/site-research/components/Questions.vue new file mode 100644 index 00000000..60d4ffc7 --- /dev/null +++ b/src/views/trials/trials-panel/attachments/site-research/components/Questions.vue @@ -0,0 +1,356 @@ + + diff --git a/src/views/trials/trials-panel/attachments/site-research/components/ResearchList.vue b/src/views/trials/trials-panel/attachments/site-research/components/ResearchList.vue new file mode 100644 index 00000000..68ae8322 --- /dev/null +++ b/src/views/trials/trials-panel/attachments/site-research/components/ResearchList.vue @@ -0,0 +1,733 @@ + + + diff --git a/src/views/trials/trials-panel/attachments/site-research/components/users.vue b/src/views/trials/trials-panel/attachments/site-research/components/users.vue index c992470c..0b837a38 100644 --- a/src/views/trials/trials-panel/attachments/site-research/components/users.vue +++ b/src/views/trials/trials-panel/attachments/site-research/components/users.vue @@ -6,31 +6,33 @@ - + + + + + + + + + - - + + @@ -39,42 +41,19 @@ - - + + - - + + {{ item.UserType }} - - @@ -89,25 +68,15 @@ - + {{ $t('trials:researchRecord:dialogButton:sendEmail') }} - + {{ $t('common:button:export') }} @@ -116,96 +85,74 @@ @@ -296,7 +234,6 @@ export default { } }, mounted() { - console.log(this.dict.type.SiteSurvey_UserRoles) this.getList() this.getSite() this.getUserType() diff --git a/src/views/trials/trials-panel/attachments/site-research/index.vue b/src/views/trials/trials-panel/attachments/site-research/index.vue index 6029d029..7bf7c1b6 100644 --- a/src/views/trials/trials-panel/attachments/site-research/index.vue +++ b/src/views/trials/trials-panel/attachments/site-research/index.vue @@ -1,670 +1,208 @@ diff --git a/src/views/trials/trials-panel/reading/ad-review/index.vue b/src/views/trials/trials-panel/reading/ad-review/index.vue index d49c283f..d3d9c286 100644 --- a/src/views/trials/trials-panel/reading/ad-review/index.vue +++ b/src/views/trials/trials-panel/reading/ad-review/index.vue @@ -1,7 +1,11 @@