Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
commit
956e3b7152
|
@ -35,6 +35,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
|
|||
# 是否开启文档签署验证 true:是 false:否
|
||||
VUE_APP_WORD_FOR_PERMISSION = false
|
||||
|
||||
# 公司名称
|
||||
VUE_APP_COMPANY_NAME = "Extensive Imaging"
|
||||
|
||||
|
||||
# dicom文件地址
|
||||
VUE_APP_DICOM_PATH = 'https://zyypacs.oss-cn-shanghai.aliyuncs.com'
|
||||
|
|
|
@ -29,6 +29,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
|
|||
# 是否开启文档签署验证 true:是 false:否
|
||||
VUE_APP_WORD_FOR_PERMISSION = true
|
||||
|
||||
# 公司名称
|
||||
VUE_APP_COMPANY_NAME = "Extensive Imaging"
|
||||
|
||||
# dicom文件地址
|
||||
# VUE_APP_DICOM_PATH = 'http://101.132.193.237:7080'
|
||||
VUE_APP_DICOM_PATH = 'https://zyypacs-prod.oss-cn-shanghai.aliyuncs.com'
|
||||
|
|
3
.env.uat
3
.env.uat
|
@ -31,6 +31,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
|
|||
# 是否开启文档签署验证 true:是 false:否
|
||||
VUE_APP_WORD_FOR_PERMISSION = true
|
||||
|
||||
# 公司名称
|
||||
VUE_APP_COMPANY_NAME = "Extensive Imaging"
|
||||
|
||||
# dicom文件地址
|
||||
VUE_APP_DICOM_PATH = 'https://zyypacs-uat.oss-cn-shanghai.aliyuncs.com'
|
||||
|
||||
|
|
3
.env.usa
3
.env.usa
|
@ -28,6 +28,9 @@ VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!
|
|||
# 是否开启文档签署验证 true:是 false:否
|
||||
VUE_APP_WORD_FOR_PERMISSION = true
|
||||
|
||||
# 公司名称
|
||||
VUE_APP_COMPANY_NAME = "Elevate Imaging"
|
||||
|
||||
# dicom文件地址
|
||||
VUE_APP_DICOM_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "EICS",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"dev": "vue-cli-service serve --open",
|
||||
"dev": "vue-cli-service serve --open --mode development",
|
||||
"build": "vue-cli-service build",
|
||||
"build:prod": "vue-cli-service build --mode prod",
|
||||
"build:uat": "vue-cli-service build --mode uat",
|
||||
|
|
|
@ -332,6 +332,7 @@ async function VueInit () {
|
|||
}
|
||||
const h = _vm.$createElement
|
||||
/* eslint-disable */
|
||||
window.VUE_APP_COMPANY_NAME = process.env.VUE_APP_COMPANY_NAME;
|
||||
waitOperate(eval(process.env.VUE_APP_LOGOUT_FOR_PERMISSION) ? () => {
|
||||
var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
|
||||
if ( _vm.$route.path === '/ReviewersResearchForm' || _vm.$route.path === '/ReviewersResearch' || _vm.$route.path === '/login' || _vm.$route.path === '/researchForm' || _vm.$route.path === '/researchLogin' || _vm.$route.path === '/email-recompose' || _vm.$route.path === '/recompose' || _vm.$route.path === '/resetpassword' || _vm.$route.path === '/error') {
|
||||
|
|
|
@ -9,11 +9,13 @@
|
|||
label-width="170px"
|
||||
@submit.native.prevent
|
||||
>
|
||||
<div class="base-dialog-body" style="position: relative;padding-top: 50px">
|
||||
<el-button @click="openSiteCodeHistory" type="text" style="position: absolute;right: 10px;top: 10px;">{{$t('trials:consistencyAnalysisRule:table:SiteCodeHistory')}}</el-button>
|
||||
<div class="base-dialog-body" style="position: relative;padding-top: 20px">
|
||||
<!-- 访视数 -->
|
||||
<el-form-item :label="$t('trials:consistencyAnalysisRule:table:nowSiteCode')">
|
||||
{{ OtherInfo.VitrualSiteCode }}
|
||||
<div style="display:flex;align-items:center;justify-content: space-between;">
|
||||
<span>{{ OtherInfo.VitrualSiteCode }}</span>
|
||||
<el-button @click="openSiteCodeHistory" type="text">{{$t('trials:consistencyAnalysisRule:table:SiteCodeHistory')}}</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<!-- 虚拟中心编号 -->
|
||||
<el-form-item :label="$t('trials:consistencyAnalysisRule:table:siteCode')" prop="VirtualSiteCode">
|
||||
|
@ -50,7 +52,7 @@
|
|||
v-loading="loading"
|
||||
:data="list"
|
||||
stripe
|
||||
min-height="300"
|
||||
height="300"
|
||||
>
|
||||
<el-table-column
|
||||
show-overflow-tooltip
|
||||
|
@ -139,4 +141,7 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .base-dialog-wrapper .el-dialog__body{
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
@change="isHaveQuestionChange"
|
||||
>
|
||||
<el-radio
|
||||
v-for="item of $d.YesOrNo"
|
||||
v-for="item of $d.IsPass"
|
||||
:key="'IsHaveQuestion' + item.value"
|
||||
:label="item.value"
|
||||
>
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<template>
|
||||
<div class="clinical-data_content">
|
||||
<el-tabs type="card" v-model="clinicalType" v-if="!(data.IsVisit || data.IsBaseLine)">
|
||||
<el-tab-pane v-for="item in $d.GetClinicalType" :key="item.Id" :label="item.label" :name="item.value.toString()">
|
||||
<template v-for="item in $d.GetClinicalType">
|
||||
<el-tab-pane :key="item.Id" :label="item.label" :name="item.value.toString()" v-if="item.value===1">
|
||||
<div v-if="item.value === 1">
|
||||
<h4 style="margin:0">
|
||||
<!-- 提示: -->
|
||||
|
@ -9,7 +10,7 @@
|
|||
</h4>
|
||||
<h5>
|
||||
<!-- 当前访视/阅片期需要采集“临床数据名称”。请采集临床数据后,按照模板上传,并签名确认。 -->
|
||||
{{ $t('trials:readingPeriod:cd:title:tips1') }}
|
||||
{{ tips1 }}
|
||||
</h5>
|
||||
<h5>
|
||||
{{ $t('trials:readingPeriod:cd:title:tips2') }}
|
||||
|
@ -210,6 +211,7 @@
|
|||
</el-dialog>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</template>
|
||||
</el-tabs>
|
||||
<div v-else>
|
||||
<div class="top">
|
||||
|
@ -428,6 +430,7 @@ export default {
|
|||
otherInfo: {},
|
||||
spanArr: [],
|
||||
pos: 0,
|
||||
tips1:null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
@ -482,7 +485,17 @@ export default {
|
|||
}
|
||||
this.loading = true
|
||||
getReadingClinicalDataList(this.searchData).then(res => {
|
||||
this.list = res.Result
|
||||
this.list = res.Result;
|
||||
let message ="";
|
||||
this.list.forEach((item,index)=>{
|
||||
if(index<1){
|
||||
message += item.ClinicalDataSetName;
|
||||
}else{
|
||||
message =message + "、" + item.ClinicalDataSetName;
|
||||
}
|
||||
})
|
||||
this.tips1 = this.$t('trials:readingPeriod:cd:title:tips1').replace('临床数据名称',message);
|
||||
this.tips1 = this.tips1.replace("xxx",message);
|
||||
this.pos = 0
|
||||
this.getSpanArr(this.list)
|
||||
this.otherInfo = res.OtherInfo
|
||||
|
|
|
@ -60,6 +60,12 @@
|
|||
</div>
|
||||
<span class="el-icon-warning" style="color: #cbb024;cursor: pointer" v-if="scope.row.IsHaveUploadFailed"></span>
|
||||
</el-tooltip>
|
||||
<el-tooltip placement="top" v-if="scope.row.notClinicaData">
|
||||
<div slot="content">
|
||||
{{ $t('trials:crc-upload:confirm:message') }}
|
||||
</div>
|
||||
<span class="el-icon-warning" style="color: red;cursor: pointer"></span>
|
||||
</el-tooltip>
|
||||
{{scope.row.StudyCode}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -310,14 +316,14 @@
|
|||
<div style="max-height: 500px;overflow-y: auto">
|
||||
{{$t('trials:uploadDicomList:table:Existed')}}:
|
||||
<div v-if="scope.row.uploadState.record.Existed.length">
|
||||
<div v-for="item of scope.row.uploadState.record.Existed" style="font-size: 12px;color:#baa72a">{{item}}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Existed" :key="item" style="font-size: 12px;color:#baa72a">{{item}}</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
|
||||
</div>
|
||||
{{$t('trials:uploadDicomList:table:Uploaded')}}:
|
||||
<div v-if="scope.row.uploadState.record.Uploaded.length">
|
||||
<div v-for="item of scope.row.uploadState.record.Uploaded" style="font-size: 12px;color:#24b837">{{item}}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Uploaded" :key="item" style="font-size: 12px;color:#24b837">{{item}}</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
|
||||
|
@ -325,7 +331,7 @@
|
|||
<br>
|
||||
{{$t('trials:uploadDicomList:table:Failed')}}:
|
||||
<div v-if="scope.row.uploadState.record.Failed.length">
|
||||
<div v-for="item of scope.row.uploadState.record.Failed" style="font-size: 12px;color:#f66">{{item}}</div>
|
||||
<div v-for="item of scope.row.uploadState.record.Failed" :key="item" style="font-size: 12px;color:#f66">{{item}}</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
|
||||
|
@ -506,7 +512,7 @@
|
|||
</template>
|
||||
<script>
|
||||
import {
|
||||
dicomUploadInProgress, batchVerifyStudyAllowUpload, getSubjectVisitUploadedStudyList, deleteStudyList, updateModality, preArchiveDicomStudy, addOrUpdateArchiveStudy
|
||||
dicomUploadInProgress, batchVerifyStudyAllowUpload, getSubjectVisitUploadedStudyList, deleteStudyList, updateModality, preArchiveDicomStudy, addOrUpdateArchiveStudy,getCRCClinicalData
|
||||
} from '@/api/trials'
|
||||
import store from '@/store'
|
||||
import * as dicomParser from 'dicom-parser'
|
||||
|
@ -538,6 +544,10 @@ export default {
|
|||
subjectId: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
activeName:{
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
|
@ -631,17 +641,60 @@ export default {
|
|||
format(v) {
|
||||
return v
|
||||
},
|
||||
// 获取临床数据
|
||||
getClinicalData(showConfirm = false, data = []) {
|
||||
// this.data.TrialId = this.$route.query.trialId
|
||||
var param = {
|
||||
subjectVisitId: this.subjectVisitId,
|
||||
trialId: this.trialId,
|
||||
subjectId: this.data.SubjectId,
|
||||
isBaseLine: this.data.IsBaseLine
|
||||
}
|
||||
getCRCClinicalData(param).then(res => {
|
||||
if(res.IsSuccess){
|
||||
let flag = res.Result.some(item=>item.ClinicalDataLevel===4&&item.PDFFileList.length===0)
|
||||
if(flag){
|
||||
if(!showConfirm){
|
||||
data.forEach(item =>{
|
||||
item.notClinicaData = false;
|
||||
if(item.Modalities==="CT、PT"||item.Modalities==="PT、CT"||item.Modalities==="PET-CT"){
|
||||
item.notClinicaData = true;
|
||||
}
|
||||
})
|
||||
this.studyList = data;
|
||||
return false;
|
||||
}
|
||||
this.$confirm(this.$t("trials:crc-upload:confirm:message"), this.$t('trials:uploadDicomList:label:prompt'), {
|
||||
confirmButtonText: this.$t('trials:reviewTrack:impactList:save'),
|
||||
cancelButtonText: this.$t("common:button:cancel"),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$emit("update:activeName",'clinical-data');
|
||||
}).catch(() => {
|
||||
});
|
||||
}else{
|
||||
if(showConfirm) return;
|
||||
this.studyList = data;
|
||||
}
|
||||
}
|
||||
// this.clinicalDatas = res.Result
|
||||
// this.loading = false
|
||||
}).catch(() => {
|
||||
// this.loading = false
|
||||
})
|
||||
},
|
||||
// 获取已上传的dicom影像
|
||||
getStudyInfo() {
|
||||
this.studyLoading = true
|
||||
getSubjectVisitUploadedStudyList(this.subjectVisitId).then(res => {
|
||||
this.studyList = res.Result
|
||||
// this.studyList = res.Result
|
||||
this.relationInfo = res.OtherInfo
|
||||
this.trialBodyPartTypes =
|
||||
this.relationInfo.BodyPartTypes ? this.relationInfo.BodyPartTypes.split('|') : []
|
||||
this.trialModalitys =
|
||||
this.relationInfo.Modalitys ? this.relationInfo.Modalitys.split('|') : []
|
||||
this.studyLoading = false
|
||||
this.studyLoading = false;
|
||||
this.getClinicalData(false,res.Result);
|
||||
}).catch(() => { this.studyLoading = false })
|
||||
},
|
||||
// 预览单个检查影像
|
||||
|
@ -1315,7 +1368,6 @@ export default {
|
|||
if (logRes && logRes.url) {
|
||||
params.study.instanceCount = dicomInfo.failedFileCount
|
||||
params.RecordPath = scope.$getObjectName(logRes.url)
|
||||
console.log(JSON.stringify(params))
|
||||
addOrUpdateArchiveStudy(params).then(res => {
|
||||
if (dicomInfo.failedFileCount === dicomInfo.fileCount) {
|
||||
scope.$message.success(scope.$t('trials:uploadDicomList:label:uploaded'))
|
||||
|
@ -1323,6 +1375,11 @@ export default {
|
|||
scope.studyErrorList.push(dicomInfo.accNumber)
|
||||
}
|
||||
scope.uploadQueues[index].uploadState.record = Record
|
||||
let flag = res.Result=== 'PET-CT' || res.Result==='CT、PT' || res.Result === 'PT、CT';
|
||||
// let flag = params.study.seriesList.some(item=>item.modality==='PT');
|
||||
if(flag){
|
||||
scope.getClinicalData(true);
|
||||
}
|
||||
scope.getStudyInfo()
|
||||
if (scope.$route.path !== '/trials/trials-panel/visit/crc-question') {
|
||||
scope.$emit('getList')
|
||||
|
|
|
@ -479,7 +479,7 @@
|
|||
<el-tabs v-model="activeName" type="border-card" style="flex:1;">
|
||||
<!-- DICOM影像上传 -->
|
||||
<el-tab-pane :label="$t('trials:uploadedDicoms:tab:uploadDicoms')" name="dicom">
|
||||
<upload-dicom-files2 v-if="uploadVisible2" :data="rowData" :subject-id="rowData.SubjectId" :subject-visit-id="rowData.Id" @getList="getList" @close="closeUpload" />
|
||||
<upload-dicom-files2 v-if="uploadVisible2" :data="rowData" :subject-id="rowData.SubjectId" :subject-visit-id="rowData.Id" @getList="getList" @close="closeUpload" :activeName.sync="activeName"/>
|
||||
<upload-dicom-files v-else :data="rowData" :subject-id="rowData.SubjectId" :subject-visit-id="rowData.Id" @getList="getList" @close="closeUpload" @setOpenWindow="setOpenWindow"/>
|
||||
</el-tab-pane>
|
||||
<!-- 非DICOM影像上传 -->
|
||||
|
|
|
@ -12370,7 +12370,8 @@ class PDFPageView {
|
|||
c.style.fontWeight = '900'
|
||||
c.style.color = "rgba(0, 191, 255, 0.1)";
|
||||
// c.innerText = text;//text为水印内容,可以在viewer.html中传入,也可以直接替换成固定的字符串如:c.innerText = "这是一个水印";
|
||||
c.innerText = `Extensive Imaging_${obj.userName}\n${new Date().format('yyyy-MM-dd')}`;
|
||||
console.log(window.VUE_APP_COMPANY_NAME)
|
||||
c.innerText = `${window.VUE_APP_COMPANY_NAME }_${obj.userName}\n${new Date().format('yyyy-MM-dd')}`;
|
||||
cover.appendChild(c);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue