diff --git a/irc_vue_drone.yml b/irc_vue_drone.yml index 923189c7..0a20aeec 100644 --- a/irc_vue_drone.yml +++ b/irc_vue_drone.yml @@ -1,6 +1,6 @@ kind: pipeline type: ssh -name: ssh-linux-test-irc-publish +name: ssh-linux-uat-irc-publish platform: os: Linux @@ -24,6 +24,38 @@ steps: trigger: branch: - uat + +--- + +kind: pipeline +type: ssh +name: ssh-linux-test-irc-publish + +platform: + os: Linux + arch: 386 + +clone: + disable: true #禁用默认克隆 + +server: + host: 106.14.89.110 + user: root + password: + from_secret: local_pwd + +steps: +- name: publish-test-irc-vue + commands: + - echo start publish test-irc-vue + - cd /opt/1panel/hang/vue/test-irc + - sh test-irc.sh v${DRONE_BUILD_NUMBER} + +trigger: + branch: + - main + + \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index b4b11701..8899a42a 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,6 +3,7 @@
0" />
@@ -90,10 +92,12 @@ import { getFrontInternationalizationList, } from "@/api/dictionary/dictionary"; import { getTrialExtralConfig } from "@/api/trials"; +import feedBack from "@/views/trials/trials-layout/components/feedBack"; import Vue from "vue"; import i18n from "./lang"; export default { name: "App", + components: { feedBack }, data() { return { drawer: false, @@ -111,7 +115,9 @@ export default { async handler() { if ( this.$route.query.trialId && - this.$route.query.trialId !== this.$store.state.trials.config.trialId + this.$route.query.trialId !== + this.$store.state.trials.config.trialId && + this.$store.state.trials.whiteList.indexOf(this.$route.path) === -1 ) { let res = await getTrialExtralConfig({ TrialId: this.$route.query.trialId, @@ -275,4 +281,7 @@ textarea { .title-logo { height: 40px; } +.title-logo { + height: 40px; +} diff --git a/src/api/admin.js b/src/api/admin.js index 361ec37f..c03b0d81 100644 --- a/src/api/admin.js +++ b/src/api/admin.js @@ -277,3 +277,19 @@ export function batchAddInternationalization(param) { data: param }) } + +// 国际化获取迭代列表 +export function getPublishVersionSelect() { + return request({ + url: `/PublishLog/getPublishVersionSelect`, + method: 'get', + }) +} +// 国际化批量更新 +export function batchUpdateInternationalInfo(data) { + return request({ + url: `/Internationalization/batchUpdateInternationalInfo`, + method: 'put', + data + }) +} diff --git a/src/api/dictionary.js b/src/api/dictionary.js index 2ea54499..3a45df78 100644 --- a/src/api/dictionary.js +++ b/src/api/dictionary.js @@ -1013,4 +1013,36 @@ export function getTrialSiteList(params) { method: 'post', data: params }) +} + +// 获取版本记录列表 +export function getExploreRecommendList(params) { + return request({ + url: `/ExploreRecommend/getExploreRecommendList`, + method: 'post', + data: params + }) +} +// 新增或修改推荐版本记录 +export function addOrUpdateExploreRecommend(params) { + return request({ + url: `/ExploreRecommend/addOrUpdateExploreRecommend`, + method: 'post', + data: params + }) +} +// 删除推荐版本记录 +export function deleteExploreRecommend(id) { + return request({ + url: `/ExploreRecommend/deleteExploreRecommend/${id}`, + method: 'delete' + }) +} +// 获取推荐版本记录详情 +export function getExploreRecommentInfo(params) { + return request({ + url: `/ExploreRecommend/getExploreRecommentInfo`, + method: 'get', + params + }) } \ No newline at end of file diff --git a/src/api/dictionary/dictionary.js b/src/api/dictionary/dictionary.js index cb2aaec8..35748423 100644 --- a/src/api/dictionary/dictionary.js +++ b/src/api/dictionary/dictionary.js @@ -51,4 +51,10 @@ export function batchAddOrUpdateFrontInternationalization(params) { data: params }) } - +// 获取当前版本 +export function getCurrentPublishInfo() { + return request({ + url: `/PublishLog/getCurrentPublishInfo`, + method: 'get' + }) +} diff --git a/src/api/export.js b/src/api/export.js index 5ff69d85..74317182 100644 --- a/src/api/export.js +++ b/src/api/export.js @@ -160,3 +160,30 @@ export function getSubjectProgress_Export(param) { data: param }) } +// 导出项目列表 +export function getTrialList_Export(data) { + return requestDownload({ + url: `/ExcelExport/getTrialList_Export`, + responseType: 'blob', + method: 'post', + data + }) +} +// 导出培训记录 +export function pMTrainingRecordList_Export(data) { + return requestDownload({ + url: `/ExcelExport/pMTrainingRecordList_Export`, + responseType: 'blob', + method: 'post', + data + }) +} +// 导出影像指控 +export function qCVisitList_Export(data) { + return requestDownload({ + url: `/ExcelExport/qCVisitList_Export`, + responseType: 'blob', + method: 'post', + data + }) +} diff --git a/src/api/reading.js b/src/api/reading.js index 0f670256..e2596fde 100644 --- a/src/api/reading.js +++ b/src/api/reading.js @@ -187,3 +187,10 @@ export function setSkipReadingCache(param) { data: param }) } +export function resetReadingTask(param) { + return request({ + url: `/ReadingImageTask/resetReadingTask`, + method: 'post', + data: param + }) +} diff --git a/src/api/trials.js b/src/api/trials.js index 35bc26ce..bd299412 100644 --- a/src/api/trials.js +++ b/src/api/trials.js @@ -3675,6 +3675,54 @@ export function getTrialSiteSelectList(params) { params }) } + +export function getNextIRMedicalFeedback(param) { + return request({ + url: `/ReadingMedicalReview/getNextIRMedicalFeedback`, + method: 'post', + data: param + }) +} + +export function getNextCRCChallenge(param) { + return request({ + url: `/QCList/getNextCRCChallenge`, + method: 'post', + data: param + }) +} + +// 获取中心dicomae列表 +export function getTrialSiteDicomAEList(param) { + return request({ + url: `/TrialSiteDicomAE/getTrialSiteDicomAEList`, + method: 'post', + data: param + }) +} +// 新增或修改中心dicomae信息 +export function addOrUpdateTrialSiteDicomAE(param) { + return request({ + url: `/TrialSiteDicomAE/addOrUpdateTrialSiteDicomAE`, + method: 'post', + data: param + }) +} +// 删除中心dicomae信息 +export function deleteTrialSiteDicomAE(id) { + return request({ + url: `/TrialSiteDicomAE/deleteTrialSiteDicomAE/${id}`, + method: 'delete' + }) +} +// 获取项目中dicomAE配置 +export function getTrialDicomAE(params) { + return request({ + url: `/TrialDicomAE/getTrialDicomAE`, + method: 'get', + params + }) +} // 获取项目配置 export function getTrialExtralConfig(params) { return request({ @@ -3683,3 +3731,178 @@ export function getTrialExtralConfig(params) { params }) } +// 项目新增或修改dicomAE配置 +export function addOrUpdateDicomAE(data) { + return request({ + url: `/TrialDicomAE/addOrUpdateDicomAE`, + method: 'post', + data + }) +} +// 测试dicomAE链接 +export function testSCPServerConnect(data) { + return request({ + url: `/TrialDicomAE/testSCPServerConnect`, + method: 'post', + data + }) +} +// 获取dicomAE默认值 +export function getTrialPacsConfigInfo(params) { + return request({ + url: `/TrialConfig/getTrialPacsConfigInfo`, + method: 'get', + params + }) +} +// dicomAE配置签名 +export function ConfigTrialPACSInfoConfirm(data) { + return request({ + url: `/Inspection/configTrialBasicInfo/ConfigTrialPACSInfoConfirm`, + method: 'post', + data + }) +} +// 获取推送记录 +export function getSCPImageUploadList(data) { + return request({ + url: `/Patient/getSCPImageUploadList`, + method: 'post', + data + }) +} +// 获取影像检查患者列表 +export function getPatientList(data) { + return request({ + url: `/Patient/getPatientList`, + method: 'post', + data + }) +} +// 获取影像检查患者检查列表 +export function getPatientStudyList(data) { + return request({ + url: `/Patient/getPatientStudyList`, + method: 'post', + data + }) +} +// 获取接收方AE列表 +export function getDicomCalledAEList(params) { + return request({ + url: `/Patient/getDicomCalledAEList`, + method: 'get', + params + }) +} +// 获取发送方AE列表 +export function getDicomCallingAEList(params) { + return request({ + url: `/Patient/getDicomCallingAEList`, + method: 'get', + params + }) +} +// CRCpacs上传检查列表 +export function getVisitPatientStudyFilterList(data) { + return request({ + url: `/Patient/getVisitPatientStudyFilterList`, + method: 'post', + data + }) +} +// CRCpacs上传检查校验 +export function verifyPacsImage(data) { + return request({ + url: `/Patient/verifyPacsImage`, + method: 'post', + data + }) +} +// CRCpacs上传检查 +export function submitVisitStudyBinding(data) { + return request({ + url: `/Patient/submitVisitStudyBinding`, + method: 'post', + data + }) +} +// 获取pacs检查技术 +export function getDicomModalityList(params) { + return request({ + url: `/Patient/getDicomModalityList`, + method: 'get', + params + }) +} +// 获取患者序列信息 +export function getPatientSeriesList(scpStudyId) { + return request({ + url: `/Patient/getPatientSeriesList?scpStudyId=${scpStudyId}`, + method: 'get' + }) +} +// 获取反馈列表 +export function getUserFeedBackList(data) { + return request({ + url: `/UserFeedBack/getUserFeedBackList`, + method: 'post', + data + }) +} +// 更新反馈状态 +export function batchUpdateFeedBackState(data) { + return request({ + url: `/UserFeedBack/batchUpdateFeedBackState`, + method: 'put', + data + }) +} +// 新增或修改意见反馈 +export function addOrUpdateUserFeedBack(data) { + return request({ + url: `/UserFeedBack/addOrUpdateUserFeedBack`, + method: 'post', + data + }) +} +// 获取反馈详情 +export function getUserFeedBackInfo(data) { + return request({ + url: `/UserFeedBack/getUserFeedBackInfo`, + method: 'post', + data + }) +} +// 一致性分析获取临床数据列表 +export function getConsistencyAnalysisReadingClinicalDataList(data) { + return request({ + url: `/ReadingClinicalData/getConsistencyAnalysisReadingClinicalDataList`, + method: 'post', + data + }) +} +// 新增或修改一致性分析临床数据 +export function addOrUpdateConsistencyAnalysisReadingClinicalData(data) { + return request({ + url: `/ReadingClinicalData/addOrUpdateConsistencyAnalysisReadingClinicalData`, + method: 'post', + data + }) +} +// 一致性分析临床数据签名 +export function signConsistencyAnalysisReadingClinicalData(data) { + return request({ + url: `/Inspection/ReadingClinicalData/SignConsistencyAnalysisReadingClinicalData`, + method: 'post', + data + }) +} +// 一致性分析临床数据设置任务为有效 +export function setTaskValid(data) { + return request({ + url: `/ReadingClinicalData/setTaskValid`, + method: 'post', + data + }) +} \ No newline at end of file diff --git a/src/assets/login-logo.png b/src/assets/login-logo.png deleted file mode 100644 index 1e255993..00000000 Binary files a/src/assets/login-logo.png and /dev/null differ diff --git a/src/assets/logo.png b/src/assets/logo.png deleted file mode 100644 index 9bfd3bcb..00000000 Binary files a/src/assets/logo.png and /dev/null differ diff --git a/src/assets/zzlogo.png b/src/assets/zzlogo.png deleted file mode 100644 index 5eb7884e..00000000 Binary files a/src/assets/zzlogo.png and /dev/null differ diff --git a/src/components/Dicom/DicomCanvas.vue b/src/components/Dicom/DicomCanvas.vue index a7ce70cc..dd5970d0 100644 --- a/src/components/Dicom/DicomCanvas.vue +++ b/src/components/Dicom/DicomCanvas.vue @@ -200,7 +200,7 @@ export default { this.stack.seriesId = dicomSeries.seriesId this.stack.seriesNumber = dicomSeries.seriesNumber this.stack.imageIds = dicomSeries.imageIds - this.stack.currentImageIdIndex = dicomSeries.imageIdIndex ? dicomSeries.imageIdIndex : 0 + this.stack.currentImageIdIndex = dicomSeries.imageIdIndex && dicomSeries.imageIdIndex < dicomSeries.imageIds.length ? dicomSeries.imageIdIndex : 0 this.stack.firstImageLoading = true this.stack.description = dicomSeries.description this.toolState.viewportInvert = false diff --git a/src/components/Dicom/DicomViewer.vue b/src/components/Dicom/DicomViewer.vue index 3ebe1ca4..5ea237e1 100644 --- a/src/components/Dicom/DicomViewer.vue +++ b/src/components/Dicom/DicomViewer.vue @@ -405,7 +405,8 @@ export default { loadImageStack(dicomSeries) { this.currentDicomCanvas.toolState.clipPlaying = false this.$nextTick(() => { - this.currentDicomCanvas.loadImageStack(dicomSeries) + let series = Object.assign({}, dicomSeries) + this.currentDicomCanvas.loadImageStack(series) }) }, loadOtherImageStack(seriesList) { @@ -415,7 +416,8 @@ export default { Array.from(elements).forEach((element, index) => { const canvasIndex = element.getAttribute('data-index') if (index < seriesList.length && element.style.display !== 'none') { - this.$refs[`dicomCanvas${canvasIndex}`].loadImageStack(seriesList[index]) + let series = Object.assign({}, seriesList[index]) + this.$refs[`dicomCanvas${canvasIndex}`].loadImageStack(series) } }) }) diff --git a/src/components/MFA/fun.js b/src/components/MFA/fun.js index f8192fe6..74ea3d15 100644 --- a/src/components/MFA/fun.js +++ b/src/components/MFA/fun.js @@ -2,12 +2,13 @@ import Vue from "vue"; import MFACOMP from "./index.vue"; const MFAConstructor = Vue.extend(MFACOMP); - +let MFAINSTANCELIST = []; const MFA = options => { const { UserId, username, EMail, callBack, cancelBack, status = 'login' } = options; if (!UserId) throw `UserId is requred.but ${UserId}` const id = `MFA${new Date().getTime()}`; const instance = new MFAConstructor(); + MFAINSTANCELIST.push(instance) instance.id = id; instance.vm = instance.$mount(); if (instance.vm.visible) return; @@ -20,7 +21,17 @@ const MFA = options => { if (cancelBack) cancelBack(); document.body.removeChild(instance.vm.$el); instance.vm.$destroy(); + let index = MFAINSTANCELIST.findIndex(item => item.id === id); + MFAINSTANCELIST.splice(index, 1) }); return instance.vm; } +MFA.close = () => { + if (MFAINSTANCELIST.length <= 0) return; + MFAINSTANCELIST.forEach(item => { + document.body.removeChild(item.vm.$el); + item.vm.$destroy(); + }) + MFAINSTANCELIST = []; +} export default MFA; \ No newline at end of file diff --git a/src/components/TrialsTab/index.vue b/src/components/TrialsTab/index.vue index 87ce2daa..f49aafe6 100644 --- a/src/components/TrialsTab/index.vue +++ b/src/components/TrialsTab/index.vue @@ -4,14 +4,15 @@ - + @@ -126,6 +127,10 @@ export default { var additionalAssessmentList = [ '/trials/trials-panel/subject/brain-metastasis' ] + let dicomList = [ + '/trials/trials-panel/trial-summary/image-inspect', + '/trials/trials-panel/trial-summary/push-record', + ] if (this.TrialConfig.QCProcessEnum === 0 && ~qualityList.indexOf(path)) { isShow = false } @@ -135,6 +140,9 @@ export default { if (!this.IsAdditionalAssessment && ~additionalAssessmentList.indexOf(path)) { isShow = false } + if ((!this.TrialConfig.IsPACSConnect || !this.TrialConfig.IsTrialPACSConfirmed) && ~dicomList.indexOf(path)) { + isShow = false + } return isShow }, goBack() { diff --git a/src/components/UploadFile/index.vue b/src/components/UploadFile/index.vue index d875cf90..9e2ec084 100644 --- a/src/components/UploadFile/index.vue +++ b/src/components/UploadFile/index.vue @@ -15,7 +15,7 @@ accept=".pdf" > {{ $t('system:GcpCertificate:upload:Upload') }} - {{$t('system:GcpCertificate:tap:must2') }} + {{$t('system:tip:file:pdf') }} diff --git a/src/components/feedBack/fun.js b/src/components/feedBack/fun.js new file mode 100644 index 00000000..4991323d --- /dev/null +++ b/src/components/feedBack/fun.js @@ -0,0 +1,37 @@ +import Vue from "vue"; +import FEEDBACKCOMP from "./index.vue"; +const FBConstructor = Vue.extend(FEEDBACKCOMP); +let FBCINSTANCELIST = []; +const FB = options => { + const { type, callBack, cancelBack, trialId = null, Id = null, visitTaskId = null, SubjectVisitId = null } = options; + if (!type) throw `type is requred.but ${type}` + const id = `FB${new Date().getTime()}`; + const instance = new FBConstructor(); + FBCINSTANCELIST.push(instance); + instance.id = id; + instance.vm = instance.$mount(); + if (instance.vm.visible) return; + document.body.appendChild(instance.vm.$el); + instance.vm.open({ type, trialId, Id, visitTaskId, SubjectVisitId }); + instance.vm.$on("success", (Id) => { + if (callBack) callBack(); + + }); + instance.vm.$on("closed", () => { + document.body.removeChild(instance.vm.$el); + instance.vm.$destroy(); + let index = FBCINSTANCELIST.findIndex(item => item.id === id); + FBCINSTANCELIST.splice(index, 1) + if (cancelBack) cancelBack() + }); + return instance.vm; +} +FB.close = () => { + if (FBCINSTANCELIST.length <= 0) return; + FBCINSTANCELIST.forEach(item => { + document.body.removeChild(item.vm.$el); + item.vm.$destroy(); + }) + FBCINSTANCELIST = []; +} +export default FB; \ No newline at end of file diff --git a/src/components/feedBack/index.js b/src/components/feedBack/index.js new file mode 100644 index 00000000..e801c731 --- /dev/null +++ b/src/components/feedBack/index.js @@ -0,0 +1,7 @@ +import FEEDBACKCOMP from "./index.vue"; +import FB from "./fun"; + +export default Vue => { + Vue.component(FEEDBACKCOMP.name, FEEDBACKCOMP); + Vue.prototype.$FB = FB; +}; \ No newline at end of file diff --git a/src/components/feedBack/index.vue b/src/components/feedBack/index.vue new file mode 100644 index 00000000..2077ce06 --- /dev/null +++ b/src/components/feedBack/index.vue @@ -0,0 +1,416 @@ + + + \ No newline at end of file diff --git a/src/components/feedBack/uploadImage.vue b/src/components/feedBack/uploadImage.vue new file mode 100644 index 00000000..798ef8b9 --- /dev/null +++ b/src/components/feedBack/uploadImage.vue @@ -0,0 +1,252 @@ + + + \ No newline at end of file diff --git a/src/components/feedBackTable/fun.js b/src/components/feedBackTable/fun.js new file mode 100644 index 00000000..1e6f0a86 --- /dev/null +++ b/src/components/feedBackTable/fun.js @@ -0,0 +1,35 @@ +import Vue from "vue"; +import FEEDBACKCOMP from "./index.vue"; +const FBConstructor = Vue.extend(FEEDBACKCOMP); +let FBCTABLEINSTANCELIST = []; +const FBT = (options = {}) => { + const { data = {}, callBack } = options; + // if (!UserId) throw `UserId is requred.but ${UserId}` + const id = `FB${new Date().getTime()}`; + const instance = new FBConstructor(); + FBCTABLEINSTANCELIST.push(instance); + instance.id = id; + instance.vm = instance.$mount(); + if (instance.vm.visible) return; + document.body.appendChild(instance.vm.$el); + instance.vm.open({ ...data }); + instance.vm.$on("success", (Id) => { + if (callBack) callBack(); + }); + instance.vm.$on("closed", () => { + document.body.removeChild(instance.vm.$el); + instance.vm.$destroy(); + let index = FBCTABLEINSTANCELIST.findIndex(item => item.id === id); + FBCTABLEINSTANCELIST.splice(index, 1) + }); + return instance.vm; +} +FBT.close = () => { + if (FBCTABLEINSTANCELIST.length <= 0) return; + FBCTABLEINSTANCELIST.forEach(item => { + document.body.removeChild(item.vm.$el); + item.vm.$destroy(); + }) + FBCTABLEINSTANCELIST = []; +} +export default FBT; \ No newline at end of file diff --git a/src/components/feedBackTable/index.js b/src/components/feedBackTable/index.js new file mode 100644 index 00000000..06271f18 --- /dev/null +++ b/src/components/feedBackTable/index.js @@ -0,0 +1,7 @@ +import FEEDBACKCOMP from "./index.vue"; +import FBT from "./fun"; + +export default Vue => { + Vue.component(FEEDBACKCOMP.name, FEEDBACKCOMP); + Vue.prototype.$FBT = FBT; +}; \ No newline at end of file diff --git a/src/components/feedBackTable/index.vue b/src/components/feedBackTable/index.vue new file mode 100644 index 00000000..480339c8 --- /dev/null +++ b/src/components/feedBackTable/index.vue @@ -0,0 +1,62 @@ + + +// \ No newline at end of file diff --git a/src/components/uploadImage/components/upload-list.vue b/src/components/uploadImage/components/upload-list.vue index b79aa1eb..2968add8 100644 --- a/src/components/uploadImage/components/upload-list.vue +++ b/src/components/uploadImage/components/upload-list.vue @@ -224,6 +224,7 @@ import { addOrUpdateArchiveTaskStudy, } from "@/api/load.js"; import { parseDicom, getThumbnail, dicomToOSS } from "@/utils/parseDicom.js"; +import store from "@/store"; export default { name: "uploadList", props: { @@ -262,6 +263,7 @@ export default { }, watch: { isLoad() { + store.dispatch("trials/setUnLock", this.isLoad); if (!this.isLoad) { this.$refs.file.value = null; if (this.dicomList.some((item) => item.isUpload === 3)) { @@ -747,6 +749,7 @@ export default { }, beforeDestroy() { this.isClose = true; + store.dispatch("trials/setUnLock", false); }, }; diff --git a/src/components/uploadImage/index.vue b/src/components/uploadImage/index.vue index 9a4154e6..1d6d6067 100644 --- a/src/components/uploadImage/index.vue +++ b/src/components/uploadImage/index.vue @@ -66,13 +66,13 @@ > + diff --git a/src/views/dictionary/template/browser/form.vue b/src/views/dictionary/template/browser/form.vue new file mode 100644 index 00000000..cd54f24d --- /dev/null +++ b/src/views/dictionary/template/browser/form.vue @@ -0,0 +1,214 @@ + + \ No newline at end of file diff --git a/src/views/dictionary/template/browser/index.vue b/src/views/dictionary/template/browser/index.vue new file mode 100644 index 00000000..a9ddb472 --- /dev/null +++ b/src/views/dictionary/template/browser/index.vue @@ -0,0 +1,252 @@ + + diff --git a/src/views/dictionary/template/browser/tip.vue b/src/views/dictionary/template/browser/tip.vue new file mode 100644 index 00000000..e6907a31 --- /dev/null +++ b/src/views/dictionary/template/browser/tip.vue @@ -0,0 +1,109 @@ + + + \ No newline at end of file diff --git a/src/views/dictionary/template/components/CriterionQuestionForm.vue b/src/views/dictionary/template/components/CriterionQuestionForm.vue index 37267972..6f5c12a7 100644 --- a/src/views/dictionary/template/components/CriterionQuestionForm.vue +++ b/src/views/dictionary/template/components/CriterionQuestionForm.vue @@ -430,9 +430,26 @@ - - - + + + + + + { if (value === '') { @@ -552,7 +569,8 @@ export default { LimitEdit: 0, GroupId: null, ConvertShowType: 0, - QuestionClassify: null + QuestionClassify: null, + HighlightAnswerList: [] }, rules: { Type: [ @@ -588,7 +606,29 @@ export default { lesionTypes: [], dicList: [], CriterionDictionaryList: [], - groupClassifyList:[] + groupClassifyList:[], + highlightAnswers: [] + } + }, + watch: { + 'form.DictionaryCode': { + deep: true, + immediate: true, + async handler(v, oldv) { + try { + if (!v) { + this.highlightAnswers = [] + return + } + let res = await getCriterionDictionary({ + ReadingCriterionId: this.data.ReadingQuestionCriterionSystemId, + DictionaryCode: this.form.DictionaryCode + }) + this.highlightAnswers = res.Result[this.form.DictionaryCode] + } catch (e) { + console.log(e) + } + } } }, mounted() { @@ -615,7 +655,6 @@ export default { await this.getGroupOptions() await this.getParentQuestions() await this.getLesionType() - await this.getBasicConfigSelect() if (Object.keys(this.data).length > 0) { for (const k in this.form) { if (this.data.hasOwnProperty(k)) { @@ -679,18 +718,6 @@ export default { }) }) }, - getBasicConfigSelect() { - // getBasicConfigSelect('Reading_eCRF_Criterion').then(res => { - // this.dicList = res.Result - // }) - getCriterionDictionaryList({ - CriterionId: this.data.ReadingQuestionCriterionSystemId, - SystemCriterionId: this.data.ReadingQuestionCriterionSystemId - }).then(res => { - console.log(this.dicList) - this.dicList = res.Result - }) - }, getGroupOptions() { return new Promise((resolve, reject) => { this.loading = true diff --git a/src/views/dictionary/template/components/EvaluationOfGlobalConfig.vue b/src/views/dictionary/template/components/EvaluationOfGlobalConfig.vue index 25235f6b..6a6689e0 100644 --- a/src/views/dictionary/template/components/EvaluationOfGlobalConfig.vue +++ b/src/views/dictionary/template/components/EvaluationOfGlobalConfig.vue @@ -113,13 +113,13 @@ width="55"> diff --git a/src/views/dictionary/template/components/TableQsForm.vue b/src/views/dictionary/template/components/TableQsForm.vue index 0807b2ab..ebb98415 100644 --- a/src/views/dictionary/template/components/TableQsForm.vue +++ b/src/views/dictionary/template/components/TableQsForm.vue @@ -315,7 +315,26 @@ :max="10" /> - + + + + + + - + - + - + - + - + - + - - + + 生成 cron - + @@ -109,7 +132,7 @@ - + @@ -117,18 +140,27 @@ - + - + - + + v-if="form.IsDistinguishCriteria" + prop="CriterionTypeEnum" + > - + @@ -147,7 +179,7 @@ - + - {{$t('common:button:upload')}} + {{ $t("common:button:upload") }} - + - {{$t('common:button:upload')}} + {{ $t("common:button:upload") }} @@ -186,181 +228,250 @@ - diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 8d1565a6..4d3878be 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -11,15 +11,11 @@
- - + +
@@ -203,13 +205,14 @@ import { mapGetters, mapMutations } from "vuex"; import TopLang from "./topLang"; // import NoticeMarquee from '../trials/trials-layout/components/noticeMarquee' import Vcode from "vue-puzzle-vcode"; +import browserTip from "@/views/dictionary/template/browser/tip.vue"; import Img1 from "@/assets/pic-2.png"; export default { name: "Login", - components: { TopLang, Vcode }, + components: { TopLang, Vcode, browserTip }, data() { return { - NODE_ENV: process.env.NODE_ENV, + NODE_ENV: process.env.NODE_ENV, // process.env.NODE_ENV VUE_APP_OSS_CONFIG_REGION: process.env.VUE_APP_OSS_CONFIG_REGION, aboutVisible: false, loginForm: { @@ -252,6 +255,17 @@ export default { computed: { ...mapGetters(["asyncRoutes", "routes", "language"]), }, + watch: { + "$i18n.locale": { + handler() { + if (this.$refs.browserTip) { + this.$refs.browserTip.open(); + } + }, + deep: true, + immediate: true, + }, + }, mounted() { this.loginType = this.$route.query.loginType; this.location = this.$route.query.location; @@ -272,6 +286,7 @@ export default { // this.$updateDictionary() } } + this.$refs.browserTip.open(); }, methods: { ...mapMutations({ setLanguage: "lang/setLanguage" }), diff --git a/src/views/research-mobile/components/BasicInfo.vue b/src/views/research-mobile/components/BasicInfo.vue new file mode 100644 index 00000000..9813c4bc --- /dev/null +++ b/src/views/research-mobile/components/BasicInfo.vue @@ -0,0 +1,310 @@ + + + diff --git a/src/views/research-mobile/components/EquipmentForm.vue b/src/views/research-mobile/components/EquipmentForm.vue new file mode 100644 index 00000000..ce74d708 --- /dev/null +++ b/src/views/research-mobile/components/EquipmentForm.vue @@ -0,0 +1,168 @@ + + + diff --git a/src/views/research-mobile/components/Equipments.vue b/src/views/research-mobile/components/Equipments.vue new file mode 100644 index 00000000..9f298386 --- /dev/null +++ b/src/views/research-mobile/components/Equipments.vue @@ -0,0 +1,219 @@ + + + diff --git a/src/views/research-mobile/components/HistoricalParticipantForm.vue b/src/views/research-mobile/components/HistoricalParticipantForm.vue new file mode 100644 index 00000000..89730772 --- /dev/null +++ b/src/views/research-mobile/components/HistoricalParticipantForm.vue @@ -0,0 +1,304 @@ + + + diff --git a/src/views/research-mobile/components/HistoricalParticipants.vue b/src/views/research-mobile/components/HistoricalParticipants.vue new file mode 100644 index 00000000..f11027e8 --- /dev/null +++ b/src/views/research-mobile/components/HistoricalParticipants.vue @@ -0,0 +1,198 @@ + + + diff --git a/src/views/research-mobile/components/Notes.vue b/src/views/research-mobile/components/Notes.vue new file mode 100644 index 00000000..2b63d32f --- /dev/null +++ b/src/views/research-mobile/components/Notes.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/views/research-mobile/components/ParticipantForm.vue b/src/views/research-mobile/components/ParticipantForm.vue new file mode 100644 index 00000000..12655956 --- /dev/null +++ b/src/views/research-mobile/components/ParticipantForm.vue @@ -0,0 +1,318 @@ + + + diff --git a/src/views/research-mobile/components/Participants.vue b/src/views/research-mobile/components/Participants.vue new file mode 100644 index 00000000..af93ea47 --- /dev/null +++ b/src/views/research-mobile/components/Participants.vue @@ -0,0 +1,249 @@ + + + diff --git a/src/views/research-mobile/detail.vue b/src/views/research-mobile/detail.vue new file mode 100644 index 00000000..0426970a --- /dev/null +++ b/src/views/research-mobile/detail.vue @@ -0,0 +1,221 @@ + + + diff --git a/src/views/research-mobile/login.vue b/src/views/research-mobile/login.vue new file mode 100644 index 00000000..284defad --- /dev/null +++ b/src/views/research-mobile/login.vue @@ -0,0 +1,406 @@ + + + diff --git a/src/views/research/components/ResearchForm.vue b/src/views/research/components/ResearchForm.vue index 69465cb2..4b70774a 100644 --- a/src/views/research/components/ResearchForm.vue +++ b/src/views/research/components/ResearchForm.vue @@ -26,7 +26,7 @@

{{ $t('trials:staffResearch:title:newStaff') }}

- +

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

@@ -35,9 +35,12 @@ -

{{ $t('trials:equiptResearch:form:precautions') }}

-
    +
      +
      +
      +
    +
    1. {{ $t('trials:equiptResearch:form:item1') }}
    2. @@ -148,7 +151,8 @@ export default { rejectForm: { reason: '' }, btnLoading: false, isFullscreen: false, - historyVisible: false + historyVisible: false, + siteSurveyNoteInfo: null } }, mounted() { @@ -165,6 +169,9 @@ export default { if (res.Result) { // this.trialSiteSurveyEquipmentType = res.Result.TrialInfo.TrialSiteSurveyEquipmentType // this.trialSiteSurveyUserRoles = res.Result.TrialInfo.TrialSiteSurveyUserRoles + if (res.Result.SiteSurveyFiledConfig && res.Result.SiteSurveyFiledConfig.ModifyFiledList.length > 0) { + this.siteSurveyNoteInfo = res.Result.SiteSurveyFiledConfig.ModifyFiledList.find(i => i.NeedModifyFiled === 'SiteSurveyNote') + } var historicalArr = [] var newArr = [] res.Result.TrialSiteUserSurveyList.map(i => { @@ -176,11 +183,11 @@ export default { }) this.state = res.Result.TrialSiteSurvey.State this.siteId = res.Result.TrialSiteSurvey.TrialSiteId - this.$refs['baseResearchInfo'].initForm(res.Result.TrialInfo, res.Result.TrialSiteSurvey) + this.$refs['baseResearchInfo'].initForm(res.Result.TrialInfo, res.Result.TrialSiteSurvey, res.Result.SiteSurveyFiledConfig ? res.Result.SiteSurveyFiledConfig.NotShowFieldList : null) this.$refs['historicalParticipant'].initList(historicalArr, res.Result.TrialSiteSurvey) this.$refs['researchParticipants'].initList(newArr, res.Result.TrialSiteSurvey) // this.$refs['researchParticipants'].initList(res.Result.TrialSiteUserSurveyList, res.Result.TrialSiteSurvey) - this.$refs['researchEquipments'].initList(res.Result.TrialSiteEquipmentSurveyList, res.Result.TrialSiteSurvey) + this.$refs['researchEquipments'].initList(res.Result.TrialSiteEquipmentSurveyList, res.Result.TrialSiteSurvey, !(res.Result.SiteSurveyFiledConfig && res.Result.SiteSurveyFiledConfig.ModifyFiledList.length > 0)) this.isExistIncorrect = res.Result.TrialSiteUserSurveyList.every(item => item.IsCorrect === false) } this.loading = false diff --git a/src/views/resumeInfo/components/StatusInfo.vue b/src/views/resumeInfo/components/StatusInfo.vue index 4a96ecfe..847b383a 100644 --- a/src/views/resumeInfo/components/StatusInfo.vue +++ b/src/views/resumeInfo/components/StatusInfo.vue @@ -2,7 +2,7 @@
      - + {{ holiday }} diff --git a/src/views/reviewers/components/Agreements.vue b/src/views/reviewers/components/Agreements.vue index 2a3dead9..c93bc99a 100644 --- a/src/views/reviewers/components/Agreements.vue +++ b/src/views/reviewers/components/Agreements.vue @@ -5,7 +5,7 @@
      -

      {{ $t('system:GcpCertificate:tap:must') }}

      +

      {{ $t('system:tip:file:pdf') }}

      diff --git a/src/views/reviewers/components/GcpCertificate.vue b/src/views/reviewers/components/GcpCertificate.vue index fa56dc4a..4867b0a2 100644 --- a/src/views/reviewers/components/GcpCertificate.vue +++ b/src/views/reviewers/components/GcpCertificate.vue @@ -20,7 +20,7 @@ accept=".pdf" > {{ $t('system:GcpCertificate:upload:Upload') }} - {{ $t('system:GcpCertificate:tap:must') }} + {{ $t('system:tip:file:pdf') }}
      @@ -76,7 +76,7 @@ export default { methods: { handleSaveGCP() { if (this.GCP && this.GCPID === '') { - this.$message.info('Please upload the GCP certificate') + this.$message.info(this.$t('reviewers:GCPCertificate:message:uploadValid')) return } @@ -91,7 +91,7 @@ export default { this.fileList = [] } this.saveBtnLoading = false - this.$message.success('Saved successfully') + this.$message.success(this.$t('common:message:savedSuccessfully')) }).catch(() => { this.saveBtnLoading = false }) @@ -153,7 +153,7 @@ export default { if (res.IsSuccess) { this.fileList[0].id = res.Result[0].Id this.GCPID = res.Result[0].Id - this.$message.success('Uploaded successfully') + this.$message.success(this.$t('common:message:savedSuccessfully')) } }) .catch(() => { @@ -165,7 +165,7 @@ export default { if (isValidFile) { this.fileList = [] } else { - this.$alert('must be in pdf format') + this.$alert(this.$t('trials:attachment:message:pdf')) return false } }, diff --git a/src/views/reviewers/components/Resumes.vue b/src/views/reviewers/components/Resumes.vue index 33486ca5..bd608ff6 100644 --- a/src/views/reviewers/components/Resumes.vue +++ b/src/views/reviewers/components/Resumes.vue @@ -19,7 +19,7 @@
      -

      {{ $t('system:GcpCertificate:tap:must') }}

      +

      {{ $t('system:tip:file:docx') }}

      @@ -78,7 +78,7 @@
      -

      {{ $t('system:GcpCertificate:tap:must') }}

      +

      {{ $t('system:tip:file:docx') }}

      diff --git a/src/views/system/i18n/components/BatchAddForm.vue b/src/views/system/i18n/components/BatchAddForm.vue index f8e89aa0..b20bc815 100644 --- a/src/views/system/i18n/components/BatchAddForm.vue +++ b/src/views/system/i18n/components/BatchAddForm.vue @@ -6,122 +6,162 @@ v-loading="loading" :model="form" size="small" + :rules="rules" > {{ item.label }} + >{{ item.label }} {{ item.label }} + >{{ item.label }} - - + + + + + + + - + - + - + - + + + + - diff --git a/src/views/system/i18n/components/I18nForm.vue b/src/views/system/i18n/components/I18nForm.vue index 68ff924d..7e8150d0 100644 --- a/src/views/system/i18n/components/I18nForm.vue +++ b/src/views/system/i18n/components/I18nForm.vue @@ -9,147 +9,216 @@ label-width="130px" size="small" > - + {{ item.label }} + >{{ item.label }} - + - + - + - + - {{ item.label }} + >{{ item.label }} + + + + + + + + + diff --git a/src/views/system/i18n/index.vue b/src/views/system/i18n/index.vue index 2606c775..5ba45484 100644 --- a/src/views/system/i18n/index.vue +++ b/src/views/system/i18n/index.vue @@ -7,11 +7,11 @@ v-model="searchData.InternationalizationType" clearable filterable - style="width:130px;" + style="width: 130px" > @@ -19,10 +19,10 @@ @@ -30,7 +30,7 @@ v-model="searchData.Code" size="small" clearable - style="width:130px;" + style="width: 130px" /> @@ -38,27 +38,55 @@ v-model="searchData.ValueCN" size="small" clearable - style="width:130px;" + style="width: 130px" /> - + + + + + + + + + 批量新增 + + 批量更新 + - + @selection-change="handleSelectionChange" + > + @@ -154,16 +210,30 @@ > + + 删除 - -
      + diff --git a/src/views/system/log/components/LogForm.vue b/src/views/system/log/components/LogForm.vue index 4c493baf..2a3dc551 100644 --- a/src/views/system/log/components/LogForm.vue +++ b/src/views/system/log/components/LogForm.vue @@ -10,46 +10,72 @@ size="small" > - + - + + + + + + + + + + + + + + diff --git a/src/views/system/log/index.vue b/src/views/system/log/index.vue index 6c8ae0a6..0775865f 100644 --- a/src/views/system/log/index.vue +++ b/src/views/system/log/index.vue @@ -2,25 +2,11 @@
      - - + + - - + + - + + + + + + + - 删除 - -
      + diff --git a/src/views/system/login-log/index.vue b/src/views/system/login-log/index.vue index 4ce9fb43..d6cac187 100644 --- a/src/views/system/login-log/index.vue +++ b/src/views/system/login-log/index.vue @@ -38,6 +38,34 @@ style="width: 120px" /> + + + + + + + + {{ $t("common:button:search") }} + + {{ $t("common:button:reset") }} + - + /> { OptType: null, Ip: "", LoginFaildName: "", + LoginUserName: '', + LoginUserTypeEnum: null, BeginDate: "", EndDate: "", Asc: false, @@ -210,6 +247,7 @@ export default { }, // 重置列表查询 handleReset() { + this.datetimerange = [] this.searchData = searchDataDefault(); this.getList(); }, diff --git a/src/views/system/user/components/UserInfo.vue b/src/views/system/user/components/UserInfo.vue index 5769d106..7b98223b 100644 --- a/src/views/system/user/components/UserInfo.vue +++ b/src/views/system/user/components/UserInfo.vue @@ -25,12 +25,12 @@ - + diff --git a/src/views/system/user/list/index.vue b/src/views/system/user/list/index.vue index d32b1550..86fba86b 100644 --- a/src/views/system/user/list/index.vue +++ b/src/views/system/user/list/index.vue @@ -100,15 +100,15 @@ export default { sortable: 'custom', showOverflowTooltip: true }, - { - prop: 'Sex', - label: this.$t('system:userlist:table:Gender'), - hidden: true, - slot: 'genderSlot', - minWidth: 100, - sortable: 'custom', - showOverflowTooltip: true - }, + // { + // prop: 'Sex', + // label: this.$t('system:userlist:table:Gender'), + // hidden: true, + // slot: 'genderSlot', + // minWidth: 100, + // sortable: 'custom', + // showOverflowTooltip: true + // }, { prop: 'Phone', label: this.$t('system:userlist:table:Phone'), diff --git a/src/views/test/videos/index.vue b/src/views/test/videos/index.vue deleted file mode 100644 index f7104270..00000000 --- a/src/views/test/videos/index.vue +++ /dev/null @@ -1,139 +0,0 @@ - - - - - diff --git a/src/views/test/videos/index2.vue b/src/views/test/videos/index2.vue deleted file mode 100644 index 790d1e1c..00000000 --- a/src/views/test/videos/index2.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/src/views/trials/trials-layout/components/feedBack.vue b/src/views/trials/trials-layout/components/feedBack.vue new file mode 100644 index 00000000..31a8bc5e --- /dev/null +++ b/src/views/trials/trials-layout/components/feedBack.vue @@ -0,0 +1,153 @@ + + + \ No newline at end of file diff --git a/src/views/trials/trials-layout/components/trialsNavbar.vue b/src/views/trials/trials-layout/components/trialsNavbar.vue index 230230ce..4fe88db3 100644 --- a/src/views/trials/trials-layout/components/trialsNavbar.vue +++ b/src/views/trials/trials-layout/components/trialsNavbar.vue @@ -34,11 +34,7 @@ {{ $t("trials:menuTitle:workbench") }} - + diff --git a/src/views/trials/trials-layout/index.vue b/src/views/trials/trials-layout/index.vue index 1a97b570..94d46620 100644 --- a/src/views/trials/trials-layout/index.vue +++ b/src/views/trials/trials-layout/index.vue @@ -6,12 +6,14 @@
      + @@ -34,13 +36,13 @@ export default { position: relative; height: 100%; width: 100%; - .trials-container{ + .trials-container { padding: 10px; height: 100%; - /deep/ .el-tag{ + /deep/ .el-tag { background-color: transparent; } - /deep/ .el-tag--danger{ + /deep/ .el-tag--danger { color: #f56c6c; } } diff --git a/src/views/trials/trials-list/index.vue b/src/views/trials/trials-list/index.vue index 0cdf8c08..b6392258 100644 --- a/src/views/trials/trials-list/index.vue +++ b/src/views/trials/trials-list/index.vue @@ -5,17 +5,13 @@ - + @@ -23,7 +19,7 @@ @@ -32,11 +28,11 @@ - + - - + @@ -70,26 +72,29 @@ - {{ $t('common:button:search') }} + {{ $t("common:button:search") }} - - {{ $t('common:button:reset') }} + + {{ $t("common:button:reset") }} - {{ $t('common:button:export') }} + {{ $t("common:button:export") }} - - + - {{ $t('common:button:new') }} + {{ $t("common:button:new") }} - -
      + +
      @@ -122,7 +123,7 @@ @@ -130,7 +131,7 @@ @@ -152,11 +153,11 @@ - + @@ -216,7 +222,7 @@ v-model="searchData.ModalityIds" multiple placeholder="Modality" - style="width:100%;" + style="width: 100%" clearable > @@ -606,7 +649,11 @@ append-to-body custom-class="base-dialog-wrapper" > - + @@ -619,7 +666,11 @@ custom-class="base-dialog-wrapper" append-to-body > - + - + diff --git a/src/views/trials/trials-panel/attachments/attachment-management/index.vue b/src/views/trials/trials-panel/attachments/attachment-management/index.vue index 6039250c..2f4be8d8 100644 --- a/src/views/trials/trials-panel/attachments/attachment-management/index.vue +++ b/src/views/trials/trials-panel/attachments/attachment-management/index.vue @@ -5,10 +5,7 @@ - + - + - + {{ item.RealName }} - + {{ item.UserName }} @@ -43,7 +52,7 @@ v-model="searchData.UserTypeId" clearable filterable - style="width:120px;" + style="width: 120px" > - - + + - - + + - {{ $t('common:button:search') }} + {{ $t("common:button:search") }} - - {{ $t('common:button:reset') }} + + {{ $t("common:button:reset") }} + + + + {{ $t("common:button:export") }} @@ -84,7 +124,7 @@ @@ -127,8 +171,12 @@ sortable="custom" > @@ -147,8 +195,12 @@ sortable="custom" > @@ -193,7 +245,13 @@ - + @@ -205,32 +263,45 @@ append-to-body custom-class="base-dialog-wrapper" > -
      - +
      +
      diff --git a/src/views/trials/trials-panel/attachments/self-attachment/index.vue b/src/views/trials/trials-panel/attachments/self-attachment/index.vue index 66e23a16..d9ecc360 100644 --- a/src/views/trials/trials-panel/attachments/self-attachment/index.vue +++ b/src/views/trials/trials-panel/attachments/self-attachment/index.vue @@ -323,6 +323,7 @@ export default { }, // 关闭签名弹窗 closeSignDialog(isSave) { + this.duration = 0 this.signVisible = false if (isSave) { this.currentIsConfirm = true 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 9ee79b48..9a88c920 100644 --- a/src/views/trials/trials-panel/attachments/site-research/index.vue +++ b/src/views/trials/trials-panel/attachments/site-research/index.vue @@ -5,9 +5,14 @@ - + - + @@ -39,14 +48,19 @@ v-model="searchData.ReviewerUserName" class="mr" clearable - style="width:140px;" + style="width: 140px" /> - + - - + + @@ -66,34 +91,42 @@ type="daterange" value-format="yyyy-MM-dd" format="yyyy-MM-dd" - style="width:250px;" + style="width: 250px" /> - {{ $t('common:button:search') }} + {{ $t("common:button:search") }} - - {{ $t('common:button:reset') }} + + {{ $t("common:button:reset") }} - {{ $t('trials:researchRecord:button:questionStaffs') }} + {{ $t("trials:researchRecord:button:questionStaffs") }} - {{ $t('trials:researchRecord:button:questionLink') }} + {{ $t("trials:researchRecord:button:questionLink") }} @@ -103,7 +136,7 @@ @@ -164,7 +201,7 @@ show-overflow-tooltip > @@ -175,10 +212,18 @@ show-overflow-tooltip > @@ -189,8 +234,12 @@ show-overflow-tooltip > @@ -200,9 +249,7 @@ min-width="150" show-overflow-tooltip /> - + @@ -246,10 +303,12 @@ custom-class="base-dialog-wrapper" :fullscreen="true" > -
      +
      - @@ -265,53 +324,87 @@ - + diff --git a/src/views/trials/trials-panel/clinical-data/index.vue b/src/views/trials/trials-panel/clinical-data/index.vue index 695fafec..890d0e5a 100644 --- a/src/views/trials/trials-panel/clinical-data/index.vue +++ b/src/views/trials/trials-panel/clinical-data/index.vue @@ -337,7 +337,8 @@ export default { ClinicalDataTrialSetId: this.$router.currentRoute.query.ClinicalDataTrialSetId ? this.$router.currentRoute.query.ClinicalDataTrialSetId : '', readingId: this.$router.currentRoute.query.readingId ? this.$router.currentRoute.query.readingId : '', visitTaskId: this.$router.currentRoute.query.visitTaskId ? this.$router.currentRoute.query.visitTaskId : '', - readingClinicalDataId: this.$router.currentRoute.query.readingClinicalDataId ? this.$router.currentRoute.query.readingClinicalDataId : '' + readingClinicalDataId: this.$router.currentRoute.query.readingClinicalDataId ? this.$router.currentRoute.query.readingClinicalDataId : '', + IsGetAllConsistencyAnalysis:this.$router.currentRoute.query.isGetAllConsistencyAnalysis == 0 ? false : true, } if (this.$router.currentRoute.query.IsOnlyGetCRCReadModule) { param.IsOnlyGetCRCReadModule = true diff --git a/src/views/trials/trials-panel/enrolled-reviewers/list/components/UploadAcksow.vue b/src/views/trials/trials-panel/enrolled-reviewers/list/components/UploadAcksow.vue index cac18dfa..5e24a2e4 100644 --- a/src/views/trials/trials-panel/enrolled-reviewers/list/components/UploadAcksow.vue +++ b/src/views/trials/trials-panel/enrolled-reviewers/list/components/UploadAcksow.vue @@ -14,7 +14,7 @@ accept=".pdf" > {{ $t('trials:enrolledReviews:button:upload') }} - {{ `(${$t('trials:enrolledReviews:label:mustBepdf')})` }} + {{ $t('system:tip:file:pdf') }}
      diff --git a/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue b/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue index 6e0ce792..056fd35e 100644 --- a/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue +++ b/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue @@ -139,7 +139,8 @@ > diff --git a/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue b/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue index b4e33999..e342b6f4 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue @@ -111,10 +111,11 @@ export default { this.isRender = true }, methods: { - handleSave() { - this.$refs.assessmentForm.validate(async valid => { - if (!valid) return - const loading = this.$loading({ fullscreen: true }) + async handleSave() { + const valid = await this.$refs.assessmentForm.validate() + if (!valid) return + const loading = this.$loading({ fullscreen: true }) + try { var answers = [] for (const k in this.form) { answers.push({ questionId: k, answer: this.form[k] }) @@ -123,13 +124,15 @@ export default { visitTaskId: this.visitTaskId, answerList: answers } - submitTaskAdditionalQuestion(params).then(res => { + const res = await submitTaskAdditionalQuestion(params) + if (res.IsSuccess) { this.$emit('sign') - loading.close() - }).catch(() => { - loading.close() - }) - }) + } + loading.close() + } catch (e) { + console.log(e) + loading.close() + } }, handleCancel() { this.$emit('close') diff --git a/src/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm.vue index 1922d17b..163b49b3 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm.vue @@ -1,6 +1,6 @@ + @@ -286,7 +315,7 @@ :reading-task-state="readingTaskState" :question-form="questionForm" :visit-task-id="visitTaskId" - :pet5PS="pet5PS" + :pet5p-s="pet5PS" :lung-is-inside-volume="lungIsInsideVolume" :liver-is-inside-volume="liverIsInsideVolume" @setFormItemData="setFormItemData" @@ -333,7 +362,7 @@ export default { pet5PS: { type: String, default: '' - }, + } }, data() { return { diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/Questions.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/Questions.vue index ddb2848e..20fe04be 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/Questions.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/Questions.vue @@ -14,7 +14,7 @@ :question-form="questionForm" :reading-task-state="readingTaskState" :visit-task-id="visitTaskId" - :pet5PS="questionForm[pet5PSId]" + :pet5p-s="questionForm[pet5PSId]" :lung-is-inside-volume="lungIsInsideVolume" :liver-is-inside-volume="liverIsInsideVolume" @setFormItemData="setFormItemData" @@ -163,42 +163,49 @@ export default { } this.initList(true) }, - initList(isInit) { + async initList(isInit) { this.loading = true - var params = { - trialId: this.trialId, - visitTaskId: this.visitTaskId, - questionClassify: 0 - } - getDicomReadingQuestionAnswer(params).then(res => { - var questions = res.Result + try { + const params = { + trialId: this.trialId, + visitTaskId: this.visitTaskId, + questionClassify: 0 + } + const res = await getDicomReadingQuestionAnswer(params) + if (res.IsSuccess) { + const questions = res.Result - questions.map((v) => { - v.IsBaseLineTask = this.isBaseLineTask - if (v.Type === 'group' && v.Childrens.length === 0) return - if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary') { - this.$set(this.questionForm, v.Id, v.Answer ? v.Answer : null) - } - if (v.Childrens.length > 0) { - this.setChild(v.Childrens) - } - }) - this.questions = questions - this.setPet5PSCommentDisplay() - this.measurements = [] - res.OtherInfo.QuestionMarkInfoList.forEach(i => { - if (i.OtherMeasureData) { - i.OtherMeasureData = JSON.parse(i.OtherMeasureData) - if (i.QuestionType === 51 && isInit) { - this.liverRender = false - } else if (i.QuestionType === 52 && isInit) { - this.lungRender = false + questions.map((v) => { + v.IsBaseLineTask = this.isBaseLineTask + if (v.Type === 'group' && v.Childrens.length === 0) return + if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary') { + this.$set(this.questionForm, v.Id, v.Answer ? v.Answer : null) } - } - this.measurements.push(i) - }) + if (v.Childrens.length > 0) { + this.setChild(v.Childrens) + } + }) + console.log(this.questionForm,questions) + this.questions = questions + this.setPet5PSCommentDisplay() + this.measurements = [] + res.OtherInfo.QuestionMarkInfoList.forEach(i => { + if (i.OtherMeasureData) { + i.OtherMeasureData = JSON.parse(i.OtherMeasureData) + if (i.QuestionType === 51 && isInit) { + this.liverRender = false + } else if (i.QuestionType === 52 && isInit) { + this.lungRender = false + } + } + this.measurements.push(i) + }) + } this.loading = false - }).catch(() => { this.loading = false }) + } catch (e) { + console.log(e) + this.loading = false + } }, setChild(obj) { obj.forEach(i => { @@ -263,37 +270,28 @@ export default { // } }) }, - saveQuestionsForm() { + async saveQuestionsForm() { this.loading = true - var answers = [] - for (const k in this.questionForm) { - answers.push({ id: k, answer: this.questionForm[k] }) - } - // var questionMarkInfoList = [] - // this.measurements.forEach(item => { - // var i = Object.assign({}, item) - // if (i.OtherMeasureData) { - // for (const k in i.OtherMeasureData.data.cachedStats) { - // i.OtherMeasureData.data.cachedStats[k].pointsInShape = [] - // } - // i.OtherMeasureData = JSON.stringify(i.OtherMeasureData) - // } - - // questionMarkInfoList.push(i) - // }) - var params = { - visitTaskId: this.visitTaskId, - answers: answers - // questionMarkInfoList - } - saveTaskQuestion(1, params).then(async res => { - window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) + try { + var answers = [] + for (const k in this.questionForm) { + answers.push({ id: k, answer: this.questionForm[k] }) + } + var params = { + visitTaskId: this.visitTaskId, + answers: answers + } + const res = await saveTaskQuestion(1, params) + if (res.IsSuccess) { + window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) + this.loading = false + this.questionFormChangeState = false + this.$message({ message: this.$t('common:message:savedSuccessfully'), type: 'success', duration: 2000 }) + } + } catch (e) { + console.log(e) this.loading = false - this.questionFormChangeState = false - this.$message({ message: this.$t('common:message:savedSuccessfully'), type: 'success', duration: 2000 }) - }).catch(() => { - this.loading = false - }) + } }, checkAnnotationStatus(obj) { for (let i = 0; i < obj.length; i++) { @@ -422,21 +420,27 @@ export default { break } } - var params = { - visitTaskId: this.visitTaskId, - answers, - questionMarkInfoList + try { + var params = { + visitTaskId: this.visitTaskId, + answers, + questionMarkInfoList + } + const qsType = question.QuestionType === 51 ? 2 : question.QuestionType === 52 ? 3 : null + + const res = await saveTaskQuestion(qsType, params) + if (res.IsSuccess) { + this.$set(question, 'SaveEnum', 0) + window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) + loading.close() + this.$message({ message: this.$t('common:message:savedSuccessfully'), type: 'success', duration: 2000 }) + this.resetSuvQuestions(1) + } + loading.close() + } catch (e) { + console.log(e) + loading.close() } - const qsType = question.QuestionType === 51 ? 2 : question.QuestionType === 52 ? 3 : null - saveTaskQuestion(qsType, params).then(async res => { - this.$set(question, 'SaveEnum', 0) - window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) - loading.close() - this.$message({ message: this.$t('common:message:savedSuccessfully'), type: 'success', duration: 2000 }) - this.resetSuvQuestions(1) - }).catch(() => { - loading.close() - }) }) }, viewAnnotations(question) { @@ -622,7 +626,7 @@ export default { console.log('setfocalFDG') if (this.questionForm[this.pet5PSId] !== '-1' && this.questionForm[this.focalFDGId] === '1') { this.questionForm[this.focalFDGId] = '' - } + } }, setpet5PS() { console.log('setpet5PS') @@ -654,40 +658,38 @@ export default { return '' } }, - resetSuvQuestions(type = 0) { + async resetSuvQuestions(type = 0) { this.loading = true - var params = { - trialId: this.trialId, - visitTaskId: this.visitTaskId, - questionClassify: 0 - } - getDicomReadingQuestionAnswer(params).then(res => { - var questions = res.Result - questions.map((v) => { - if (v.Type === 'group' && v.Childrens.length === 0) return - // if (!v.IsPage && v.Type !== 'group' && v.Type !== 'summary') { - // this.$set(this.questionForm, v.Id, v.Answer ? v.Answer : null) - // } - if (v.Childrens.length > 0) { - this.setSuvChild(v.Childrens, type) - } - // var pet5PS = this.setpet5PS() - // this.questionForm[this.pet5PSId] = pet5PS - // this.calculatePet5PS = pet5PS - // this.setPet5PSCommentDisplay() - // this.setUptakeFormBaseline() - }) - for (let i = 0; i < this.questions[0].Childrens[0].Childrens.length; i++) { - if (this.questions[0].Childrens[0].Childrens[i].QuestionType === 59) { - this.questions[0].Childrens[0].Childrens[i].ShowQuestion = 2 - this.questions[0].Childrens[0].Childrens[i].IsRequired = 3 - this.questionForm[this.pet5PSCommentsId] = '' - break - } + try { + const params = { + trialId: this.trialId, + visitTaskId: this.visitTaskId, + questionClassify: 0 + } + const res = await getDicomReadingQuestionAnswer(params) + if (res.IsSuccess) { + const questions = res.Result + questions.map((v) => { + if (v.Type === 'group' && v.Childrens.length === 0) return + if (v.Childrens.length > 0) { + this.setSuvChild(v.Childrens, type) + } + }) + for (let i = 0; i < this.questions[0].Childrens[0].Childrens.length; i++) { + if (this.questions[0].Childrens[0].Childrens[i].QuestionType === 59) { + this.questions[0].Childrens[0].Childrens[i].ShowQuestion = 2 + this.questions[0].Childrens[0].Childrens[i].IsRequired = 3 + this.questionForm[this.pet5PSCommentsId] = '' + break + } + } + this.questionFormChangeState = true } - this.questionFormChangeState = true this.loading = false - }).catch(() => { this.loading = false }) + } catch (e) { + console.log(e) + this.loading = false + } }, setSuvChild(obj, type) { obj.forEach(i => { diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestionItem.vue b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestionItem.vue index 0fd43d8b..f16cbf50 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestionItem.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/Fusion/TableQuestionItem.vue @@ -316,7 +316,7 @@ export default { this.$set(this.questionForm, 'OrganInfoId', this.answers.OrganInfoId ? this.answers.OrganInfoId : '') // saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断);2:已保存,信息完整 - var lesionState = this.getQuestionVal(7) + // var lesionState = this.getQuestionVal(7) if (!isRerender) { if (this.questionForm.RowId) { this.$set(this.questionForm, 'saveTypeEnum', 2) @@ -625,7 +625,7 @@ export default { } } } - var lesionState = this.getQuestionVal(7) + // var lesionState = this.getQuestionVal(7) if (this.firstRenderAnnotation) { this.$set(this.questionForm, 'saveTypeEnum', 2) } else { @@ -871,75 +871,79 @@ export default { this.deleteInfo = null params.rowId = '' } - submitTableQuestion(params).then(async res => { - this.currentMarkTool = otherMeasureData ? otherMeasureData.type : '' - // saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断);2:已保存,信息完整 + try { + const res = await submitTableQuestion(params) + if (res.IsSuccess) { + this.currentMarkTool = otherMeasureData ? otherMeasureData.type : '' + this.$set(this.questionForm, 'saveTypeEnum', 2) + this.originalQuestionForm = { ...this.questionForm } + var isLymphLesion = this.getQuestionVal(2) + isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null + var lesionOrgan = this.getQuestionVal(6) + this.$set(this.questionForm, 'RowId', res.Result.RowId) + const lesionPart = this.getQuestionVal(8) + const suvMax = this.getQuestionVal(20) + this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm }) - this.$set(this.questionForm, 'saveTypeEnum', 2) - this.originalQuestionForm = { ...this.questionForm } - loading.close() - var isLymphLesion = this.getQuestionVal(2) - isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null - var lesionOrgan = this.getQuestionVal(6) - this.$set(this.questionForm, 'RowId', res.Result.RowId) - const lesionPart = this.getQuestionVal(8) - const suvMax = this.getQuestionVal(20) - this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: this.questionForm }) + FusionEvent.$emit('resetSuvQuestions') + window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) + this.$emit('close') - // FusionEvent.$emit('getAnnotations') - FusionEvent.$emit('resetSuvQuestions') - window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) - this.$emit('close') + this.$message({ message: this.$t('common:message:savedSuccessfully'), type: 'success', duration: 2000 }) + } loading.close() - this.$message({ message: this.$t('common:message:savedSuccessfully'), type: 'success', duration: 2000 }) - }).catch(() => { loading.close() }) + } catch (e) { + console.log(e) + loading.close() + } }) }) }, - handleDeleteMeasureData() { + async handleDeleteMeasureData() { // 是否确认清除标记? - this.$confirm(this.$t('trials:reading:warnning:msg47'), { - type: 'warning', - distinguishCancelAndClose: true - }) - .then(async() => { - this.organList = [] - await this.getOrganInfoList() - // 重置SUV - var suvId = this.getQuestionId(20) - this.$set(this.questionForm, suvId, '') - // saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断) - if (this.questionForm.RowId) { - this.$set(this.questionForm, 'saveTypeEnum', 1) - } else { - this.$set(this.questionForm, 'saveTypeEnum', 0) - } - FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData, type: 'clear' }) - // await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex }) + const confirm = await this.$confirm( + this.$t('trials:reading:warnning:msg47'), + { + type: 'warning', + distinguishCancelAndClose: true + } + ) + if (confirm !== 'confirm') return + this.organList = [] + await this.getOrganInfoList() + // 重置SUV + var suvId = this.getQuestionId(20) + this.$set(this.questionForm, suvId, '') + // saveTypeEnum 0:未保存过(新建病灶);1:已保存,信息不完整(随访初始化病灶/分裂病灶,通过状态判断) + if (this.questionForm.RowId) { + this.$set(this.questionForm, 'saveTypeEnum', 1) + } else { + this.$set(this.questionForm, 'saveTypeEnum', 0) + } + FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData, type: 'clear' }) + // await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex }) - // Store.$emit('updateImage', this.questionForm.MeasureData.instanceId) - var isLymphLesion = this.getQuestionVal(2) - isLymphLesion = !isNaN(parseInt(isLymphLesion)) ? parseInt(isLymphLesion) : null - const lesionPart = this.getQuestionVal(8) - const lesionOrgan = this.getQuestionVal(6) + // Store.$emit('updateImage', this.questionForm.MeasureData.instanceId) + var isLymphLesion = this.getQuestionVal(2) + isLymphLesion = !isNaN(parseInt(isLymphLesion)) ? parseInt(isLymphLesion) : null + const lesionPart = this.getQuestionVal(8) + const lesionOrgan = this.getQuestionVal(6) - if (!this.questionForm.IsDicomReading) { + if (!this.questionForm.IsDicomReading) { - } - this.$set(this.questionForm, 'IsDicomReading', true) + } + this.$set(this.questionForm, 'IsDicomReading', true) - this.$set(this.questionForm, 'OtherMeasureData', '') - let anwsers = null - if (this.answers.measureObj) { - anwsers = Object.assign({ measureObj: '' }, this.questionForm) - } else { - anwsers = Object.assign({}, this.questionForm) - } - var suvMax = this.getQuestionVal(20) - this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: anwsers }) - this.isInsideVolume = true - }) - .catch(() => {}) + this.$set(this.questionForm, 'OtherMeasureData', '') + let anwsers = null + if (this.answers.measureObj) { + anwsers = Object.assign({ measureObj: '' }, this.questionForm) + } else { + anwsers = Object.assign({}, this.questionForm) + } + var suvMax = this.getQuestionVal(20) + this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: anwsers }) + this.isInsideVolume = true }, async clearMeasurement() { this.organList = [] @@ -975,65 +979,63 @@ export default { this.$emit('resetQuestions', { isLymphLesion, lesionPart, lesionOrgan, suvMax, saveTypeEnum: this.questionForm.saveTypeEnum, rowIndex: this.rowIndex, questionId: this.parentQsId, anwsers: anwsers }) this.isInsideVolume = true }, - handleDelete() { - // 是否确认删除? - this.$confirm(this.$t('trials:reading:warnning:msg48'), { - type: 'warning', - distinguishCancelAndClose: true - }) - .then(async() => { - if (this.questionForm.RowId) { - const loading = this.$loading({ fullscreen: true }) - var param = { - visitTaskId: this.visitTaskId, - questionId: this.parentQsId, - rowId: this.questionForm.RowId - } - deleteReadingRowAnswer(param) - .then(async res => { - loading.close() - if (res.IsSuccess) { - // this.$emit('getReadingQuestionAndAnswer') - if (this.questionForm.IsDicomReading && this.questionForm.OtherMeasureData) { - // await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex }) - FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData, type: 'delete' }) - } - this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId }) - - // '删除成功!' - this.$message.success(this.$t('common:message:deletedSuccessfully')) - loading.close() - window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) - } - }).catch(() => { loading.close() }) - } else { - // const loading = this.$loading({ fullscreen: true }) - // 移除新建病灶并关闭窗口 - if (this.questionForm.OtherMeasureData && this.questionForm.IsDicomReading) { - // await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex }) - FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData }) - } - this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId }) - // loading.close() - } - }) - }, - handleClose() { - if (!this.questionForm.RowId) { - // '当前病灶为新建病灶,未保存。如果关闭窗口,将会删除病灶信息,是否继续?' - this.$confirm(this.$t('trials:reading:warnning:msg49'), { + async handleDelete() { + const confirm = await this.$confirm( + this.$t('trials:reading:warnning:msg48'), + { type: 'warning', distinguishCancelAndClose: true - }) - .then(async() => { - // 移除新建病灶并关闭窗口 - if (this.questionForm.OtherMeasureData) { - FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData }) - // await store.dispatch('reading/removeMeasuredData', { visitTaskId: this.visitTaskId, measureData: this.questionForm.MeasureData, questionId: this.parentQsId, rowIndex: this.questionForm.RowIndex }) + } + ) + if (confirm !== 'confirm') return + if (this.questionForm.RowId) { + const loading = this.$loading({ fullscreen: true }) + try { + var param = { + visitTaskId: this.visitTaskId, + questionId: this.parentQsId, + rowId: this.questionForm.RowId + } + const res = await deleteReadingRowAnswer(param) + if (res.IsSuccess) { + if (this.questionForm.IsDicomReading && this.questionForm.OtherMeasureData) { + FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData, type: 'delete' }) } this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId }) - }) - .catch(() => {}) + // '删除成功!' + this.$message.success(this.$t('common:message:deletedSuccessfully')) + loading.close() + window.opener.postMessage({ type: 'petctLesionUpdate' }, window.location) + } + loading.close() + } catch (e) { + console.log(e) + loading.close() + } + } else { + // 移除新建病灶并关闭窗口 + if (this.questionForm.OtherMeasureData && this.questionForm.IsDicomReading) { + FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData }) + } + this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId }) + } + }, + async handleClose() { + if (!this.questionForm.RowId) { + // '当前病灶为新建病灶,未保存。如果关闭窗口,将会删除病灶信息,是否继续?' + const confirm = await this.$confirm( + this.$t('trials:reading:warnning:msg49'), + { + type: 'warning', + distinguishCancelAndClose: true + } + ) + if (confirm !== 'confirm') return + // 移除新建病灶并关闭窗口 + if (this.questionForm.OtherMeasureData) { + FusionEvent.$emit('removeAnnotation', { otherMeasureData: this.questionForm.OtherMeasureData }) + } + this.$emit('close', { lesionType: this.lesionType, rowIndex: this.rowIndex, visitTaskId: this.visitTaskId }) } else { if (this.questionForm.saveTypeEnum === 1) { this.$emit('close') diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Hotkeys.vue b/src/views/trials/trials-panel/reading/dicoms/components/Hotkeys.vue index c259ba62..1f1cdb63 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/Hotkeys.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/Hotkeys.vue @@ -56,22 +56,25 @@ export default { this.getHotkeys() }, methods: { - getHotkeys(isReset = false) { + async getHotkeys(isReset = false) { this.loading = true this.hotKeyList = [] - getDoctorShortcutKey({ imageToolType: this.readingTool }).then(res => { - res.Result.map(item => { - this.hotKeyList.push({ id: item.Id, keys: { controlKey: { altKey: item.AltKey, ctrlKey: item.CtrlKey, shiftKey: item.ShiftKey, metaKey: item.MetaKey, key: item.Keyboardkey, code: item.Code }, text: item.Text }, label: item.ShortcutKeyEnum }) - }) - if (isReset) { - this.$emit('reset', this.hotKeyList) + try { + const res = await getDoctorShortcutKey({ imageToolType: this.readingTool }) + if (res.IsSuccess) { + res.Result.map(item => { + this.hotKeyList.push({ id: item.Id, keys: { controlKey: { altKey: item.AltKey, ctrlKey: item.CtrlKey, shiftKey: item.ShiftKey, metaKey: item.MetaKey, key: item.Keyboardkey, code: item.Code }, text: item.Text }, label: item.ShortcutKeyEnum }) + }) + if (isReset) { + this.$emit('reset', this.hotKeyList) + } } this.loading = false - }).catch(() => { + } catch (e) { this.loading = false - }) + } }, - handleSave() { + async handleSave() { var params = { imageToolType: this.readingTool, shortcutKeyList: [] @@ -86,17 +89,15 @@ export default { emptyLabel = item.label break } else { - shortcutKeyList.push( - { - shortcutKeyEnum: item.label, - keyboardkey: item.keys.controlKey.key, - code: item.keys.controlKey.code, - text: item.keys.text, - altKey: item.keys.controlKey.altKey, - ctrlKey: item.keys.controlKey.ctrlKey, - shiftKey: item.keys.controlKey.shiftKey, - metaKey: item.keys.controlKey.metaKey } - ) + shortcutKeyList.push({ + shortcutKeyEnum: item.label, + keyboardkey: item.keys.controlKey.key, + code: item.keys.controlKey.code, + text: item.keys.text, + altKey: item.keys.controlKey.altKey, + ctrlKey: item.keys.controlKey.ctrlKey, + shiftKey: item.keys.controlKey.shiftKey, + metaKey: item.keys.controlKey.metaKey }) } } if (isExistEmptyText) { @@ -112,43 +113,40 @@ export default { }) } else { this.loading = true - // this.hotKeyList.map(item => { - // shortcutKeyList.push( - // { - // shortcutKeyEnum: item.label, - // keyboardkey: item.keys.controlKey.key, - // code: item.keys.controlKey.code, - // text: item.keys.text, - // altKey: item.keys.controlKey.altKey, - // ctrlKey: item.keys.controlKey.ctrlKey, - // shiftKey: item.keys.controlKey.shiftKey, - // metaKey: item.keys.controlKey.metaKey } - // ) - // }) params.shortcutKeyList = shortcutKeyList - setShortcutKey(params).then(res => { - this.$emit('reset', this.hotKeyList) - // this.$emit('close') + try { + const res = await setShortcutKey(params) + if (res.IsSuccess) { + this.$emit('reset', this.hotKeyList) + } this.loading = false - }).catch(() => { + } catch (e) { this.loading = false - }) + } } }, - handleReset() { + async handleReset() { // '是否确认重置?' - this.$confirm(this.$t('trials:hotkeys:message:confirmReset'), { - type: 'warning', - distinguishCancelAndClose: true - }) - .then(() => { - this.loading = true - restoreDefaultShortcutKey({ imageToolType: this.readingTool }).then(res => { - this.$message.success(this.$t('trials:hotkeys:message:resetSuccessfully')) // '重置成功!' - this.getHotkeys(true) - }).catch(() => { this.loading = false }) - }) - .catch(action => {}) + const confirm = await this.$confirm( + this.$t('trials:hotkeys:message:confirmReset'), + { + type: 'warning', + distinguishCancelAndClose: true + } + ) + if (confirm !== 'confirm') return + + this.loading = true + try { + const res = await restoreDefaultShortcutKey({ imageToolType: this.readingTool }) + if (res.IsSuccess) { + this.$message.success(this.$t('trials:hotkeys:message:resetSuccessfully')) // '重置成功!' + this.getHotkeys(true) + } + this.loading = false + } catch (e) { + this.loading = false + } }, handleHotkeyVerify(hotkey) { for (const item of this.hotKeyList) { diff --git a/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionForm.vue index 851d3408..20146b16 100644 --- a/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionForm.vue +++ b/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionForm.vue @@ -119,44 +119,48 @@ /> @@ -317,10 +407,24 @@ v-dialogDrag :visible.sync="chatVisible" :close-on-click-modal="false" + :close-on-press-escape="false" + :before-close="beforeClose" width="800px" - :title="$t('trials:consistencyCheck:dialogTitle:qsContent') + `(${currentRow.SubjectCode} ${currentRow.VisitName})`" + :title=" + $t('trials:consistencyCheck:dialogTitle:qsContent') + + `(${currentRow.SubjectCode} ${currentRow.VisitName})` + " > - + @@ -331,10 +435,17 @@ width="600px" >
      - {{ $t('common:dialogTitle:sign') }} - {{ `(${$t('common:label:sign')}${ currentUser })` }} + {{ $t("common:dialogTitle:sign") }} + {{ + `(${$t("common:label:sign")}${currentUser})` + }}
      - + @@ -347,7 +458,14 @@ :width="currentRow.type === 'pass' ? '750px' : '600px'" :title="ReasonTitle" > -
      +
      - {{ $t(`trials:check:radio:${currentRow.type}reason${1}`) }} + {{ + $t(`trials:check:radio:${currentRow.type}reason${1}`) + }} - {{ $t(`trials:check:radio:${currentRow.type}reason${2}`) }} + {{ + $t(`trials:check:radio:${currentRow.type}reason${2}`) + }} - {{ $t(`trials:check:radio:${currentRow.type}reason${3}`) }} + {{ + $t(`trials:check:radio:${currentRow.type}reason${3}`) + }} - {{ $t(`trials:check:radio:${currentRow.type}reason${4}`) }} + {{ + $t(`trials:check:radio:${currentRow.type}reason${4}`) + }} - + @@ -407,37 +565,54 @@ 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 1a042ccd..ab7beb7c 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 @@ -193,366 +193,399 @@ -
      - {{ - $t("trials:uploadedDicoms:title:dicomFilesOnly") - }} -
      - -
      -
      - - - - - - - - - - - - - - - - + + + + + + +
      + + - - + + {{ $t("trials:uploadDicomList:button:upload") }} + +
      + + + - {{ $t("trials:uploadDicomList:button:upload") }} - -
      - + + + { if (res.IsSuccess) { this.getStudyInfo(); + if (this.uploadActiveName === "pacs") { + this.$refs.dicomPacs.getList(); + } if ( this.$route.path !== "/trials/trials-panel/visit/crc-question" ) { @@ -1976,7 +2030,7 @@ export default { } var arr = bodyPart.split(separator); var newArr = arr.map((i) => { - return this.$fd("Bodypart", i.trim(), "Code", this.BodyPart,'Name'); + return this.$fd("Bodypart", i.trim(), "Code", this.BodyPart, "Name"); }); return newArr.join(" | "); }, @@ -2016,7 +2070,6 @@ export default { opacity: 0; cursor: pointer; } - #inputForm #listWrapper { margin-top: 10px; diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadDiocmPacs.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDiocmPacs.vue new file mode 100644 index 00000000..7cfeca94 --- /dev/null +++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDiocmPacs.vue @@ -0,0 +1,475 @@ + + + \ No newline at end of file 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 d577d26d..e3fa8561 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 @@ -347,7 +347,7 @@ - - + --> - {{ $t("common:button:new") }} + --> + + + {{ $t("common:button:new") }} +
      @@ -282,6 +312,20 @@ :label="$t('trials:uploadClinicalData:table:fileName')" width="250" /> + + + + { + item.value = null; + }); + }, + async handleUploadFile() { + this.btnLoading = true; + this.loading = true; + this.addFileList = []; + try { + for (var i = 0; i < this.fileList.length; ++i) { + const file = await this.fileToBlob(this.fileList[i].file); + var timestamp = Date.now(); + const res = await this.OSSclient.put( + `/${this.trialId}/ClinicalData/${timestamp}_${this.fileList[i].file.name}`, + file + ); + this.addFileList.push({ + fileName: this.fileList[i].file.name, + path: this.$getObjectName(res.url), + url: this.$getObjectName(res.url), + type: this.fileList[i].type, + size: this.fileList[i].size, + }); + } + this.saveClinicalData(); + } catch (err) { + console.log(err); + this.btnLoading = false; + this.loading = false; + } + }, + saveClinicalData() { + this.btnLoading = true; + this.loading = true; + var param = { + id: this.currentRow.Id, + trialId: this.currentRow.TrialId, + subjectId: this.currentRow.SubjectId, + readingId: this.subjectVisitId, + clinicalDataTrialSetId: this.currentRow.ClinicalDataTrialSetId, + isVisit: true, + deleteFileIds: [], + addFileList: this.addFileList, + }; + if (this.studyData.StudyId) { + param.StudyId = this.studyData.StudyId; + } + addOrUpdateReadingClinicalData(param) + .then((response) => { + this.btnLoading = false; + this.loading = false; + // 刷新文件列表并关闭弹窗 + this.getClinicalData(); + this.$message.success( + this.$t("trials:uploadClinicalData:message:uploadSuccessfully") + ); + this.$emit("getStudyInfo"); + }) + .catch(() => { + this.btnLoading = false; + this.loading = false; + }); + }, getClinicalData() { this.loading = true; this.data.TrialId = this.$route.query.trialId; var param = { StudyId: this.studyData.StudyId, + TrialId: this.$route.query.trialId, + SubjectId: this.studyData.SubjectId, }; getCRCClinicalData(param) .then((res) => { diff --git a/src/views/trials/trials-panel/visit/crc-upload/index.vue b/src/views/trials/trials-panel/visit/crc-upload/index.vue index 4cc834e9..adfbcf59 100644 --- a/src/views/trials/trials-panel/visit/crc-upload/index.vue +++ b/src/views/trials/trials-panel/visit/crc-upload/index.vue @@ -3,17 +3,37 @@ @@ -107,14 +176,19 @@ - + @@ -183,8 +261,11 @@ @@ -197,25 +278,32 @@ sortable="custom" > @@ -230,15 +318,44 @@
      - {{ $t('trials:crcUpload:label:dicom') }}: {{ scope.row.DicomStudyCount }}, - - {{ $t('trials:crcUpload:label:noneDicom') }}: {{ scope.row.NoneDicomStudyCount }}, - {{ $t('trials:crcUpload:label:clinicalData') }}: {{ scope.row.IsHaveClinicalData?'w/':'w/o' }} + {{ $t("trials:crcUpload:label:dicom") }}: + {{ scope.row.DicomStudyCount }}, - {{ $t('trials:crcUpload:label:noneDicom') }}: {{ scope.row.NoneDicomStudyCount }} + + {{ $t("trials:crcUpload:label:noneDicom") }}: + {{ scope.row.NoneDicomStudyCount }}, + + {{ $t("trials:crcUpload:label:clinicalData") }}: + {{ scope.row.IsHaveClinicalData ? "w/" : "w/o" }} + + {{ $t("trials:crcUpload:label:noneDicom") }}: + {{ scope.row.NoneDicomStudyCount }}
      - {{ scope.row.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0?[scope.row.DicomStudyCount,scope.row.NoneDicomStudyCount,scope.row.IsHaveClinicalData?'w/':'w/o'].join(', '):[scope.row.DicomStudyCount,scope.row.NoneDicomStudyCount].join(', ') }} + {{ + scope.row.IsBaseLine && + otherInfo.ClinicalInformationTransmissionEnum > 0 + ? [ + scope.row.DicomStudyCount, + scope.row.NoneDicomStudyCount, + scope.row.IsHaveClinicalData ? "w/" : "w/o", + ].join(", ") + : [ + scope.row.DicomStudyCount, + scope.row.NoneDicomStudyCount, + ].join(", ") + }}
      @@ -252,7 +369,11 @@ sortable="custom" >
      @@ -264,7 +385,11 @@ sortable="custom" >
      @@ -276,9 +401,15 @@ sortable="custom" >
      @@ -298,14 +429,44 @@ sortable="custom" >
      @@ -316,7 +477,17 @@ width="170" /> - +
      - {{ $t('trials:crcUpload:label:firstGiveMedicineTime') }} + {{ $t("trials:crcUpload:label:firstGiveMedicineTime") }} - : {{ $t('trials:crcUpload:label:firstGiveMedicineTimeD') }} + : {{ $t("trials:crcUpload:label:firstGiveMedicineTimeD") }} - - {{ $t('trials:crcUpload:label:finalVisit') }} + + {{ $t("trials:crcUpload:label:finalVisit") }} - : {{ $t('trials:crcUpload:label:finalVisitDetail') }} + : {{ $t("trials:crcUpload:label:finalVisitDetail") }} - - {{ $t('trials:crcUpload:label:lostVisit') }} + + {{ $t("trials:crcUpload:label:lostVisit") }} - : {{ $t('trials:crcUpload:label:lostVisitDetail') }} + : {{ $t("trials:crcUpload:label:lostVisitDetail") }} - - {{ $t('trials:crcUpload:label:pd') }} + + {{ $t("trials:crcUpload:label:pd") }} - : {{ $t('trials:crcUpload:label:pdDetail') }} - - {{ $t('trials:crcUpload:label:enrollmentConfirm') }} + : {{ $t("trials:crcUpload:label:pdDetail") }} + + {{ $t("trials:crcUpload:label:enrollmentConfirm") }} - : {{ $t('trials:crcUpload:label:enrollmentConfirmDetail') }} + : {{ $t("trials:crcUpload:label:enrollmentConfirmDetail") }}
      - + @@ -421,23 +626,40 @@ :close-on-click-modal="false" custom-class="upload-dialog" :before-close="beforeCloseUploadDig" + :modal="false" > - + - {{ searchData.TrialCode }} - {{ rowData.TrialSiteCode }} - {{ rowData.SubjectCode }} - {{ `${rowData.VisitName} (${rowData.VisitNum})` }} + {{ + searchData.TrialCode + }} + {{ + rowData.TrialSiteCode + }} + {{ + rowData.SubjectCode + }} + {{ + `${rowData.VisitName} (${rowData.VisitNum})` + }} -
      +
      - {{ item.label }} + {{ item.label }} @@ -468,27 +697,48 @@ :label="$t('trials:crcUpload:form:pd')" > - {{ item.label }} + {{ item.label }} - + - {{ $t('common:button:edit') }} - + {{ $t("common:button:edit") }} - + - - + + @@ -496,15 +746,34 @@ :label="$t('trials:uploadNonDicoms:tab:uploadNonDicoms')" name="non-dicom" > - + - + - +
      @@ -524,19 +800,26 @@ :visible.sync="studyVisible" :close-on-click-modal="false" :fullscreen="true" - custom-class="upload-dialog" :before-close="beforeCloseStudyDig" > - {{ searchData.TrialCode }} - {{ rowData.TrialSiteCode }} - {{ rowData.SubjectCode }} - {{ `${rowData.VisitName} (${rowData.VisitNum})` }} + {{ + searchData.TrialCode + }} + {{ + rowData.TrialSiteCode + }} + {{ + rowData.SubjectCode + }} + {{ + `${rowData.VisitName} (${rowData.VisitNum})` + }}
      - + - {{ item.label }} + {{ item.label }} - {{ item.label }} + {{ item.label }} -

      {{ $t('trials:crcUpload:label:dicom') }}

      +

      {{ $t("trials:crcUpload:label:dicom") }}

      - + -

      {{ $t('trials:crcUpload:label:noneDicom') }}

      +

      + {{ $t("trials:crcUpload:label:noneDicom") }} +

      - + -

      - {{ $t('trials:crcUpload:label:clinicalData') }} +

      + {{ $t("trials:crcUpload:label:clinicalData") }}

      - - + + -

      - {{ $t('trials:crcUpload:label:clinicalData') }} +

      + {{ $t("trials:crcUpload:label:clinicalData") }}

      - - + +
      @@ -600,7 +951,15 @@ @@ -611,7 +970,7 @@ :close-on-click-modal="false" :title="$t('trials:crcUpload:dialogTitle:edit')" width="500px" - style="height:600px" + style="height: 600px" custom-class="base-dialog-wrapper" append-to-body > @@ -619,7 +978,7 @@
      - {{ item.label }} + {{ item.label }} @@ -645,17 +1011,35 @@ :label="$t('trials:crcUpload:form:pd')" > - {{ item.label }} + {{ item.label }}
      -