Compare commits

..

No commits in common. "f32abfe2301fea83cbcdf41d01eb6cc6171cb6a9" and "3ae982d4221ffefc4400ba2d286c89a878efb0b1" have entirely different histories.

25 changed files with 298 additions and 627 deletions

View File

@ -2,7 +2,7 @@
ENV = 'usa' ENV = 'usa'
NODE_ENV = 'usa' NODE_ENV = 'usa'
# base public path # base public path
VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-19/' VUE_APP_BASE_PATH = 'https://ei-code-prod.s3.amazonaws.com/2024-07-17/'
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true

View File

@ -2,7 +2,7 @@
ENV = 'usa' ENV = 'usa'
NODE_ENV = 'usa' NODE_ENV = 'usa'
# base public path # base public path
VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2024-07-19/' VUE_APP_BASE_PATH = 'https://ei-med-s3-code.s3.amazonaws.com/2024-07-17/'
# 是否开启登陆限制 true:是 false:否 # 是否开启登陆限制 true:是 false:否
VUE_APP_LOGIN_FOR_PERMISSION = true VUE_APP_LOGIN_FOR_PERMISSION = true

View File

@ -89,7 +89,6 @@ import {
batchAddOrUpdateFrontInternationalization, batchAddOrUpdateFrontInternationalization,
getFrontInternationalizationList, getFrontInternationalizationList,
} from "@/api/dictionary/dictionary"; } from "@/api/dictionary/dictionary";
import { getTrialExtralConfig } from "@/api/trials";
import Vue from "vue"; import Vue from "vue";
import i18n from "./lang"; import i18n from "./lang";
export default { export default {
@ -106,28 +105,6 @@ export default {
mounted() { mounted() {
this.show = process.env.VUE_APP_OSS_PATH === "/test/dist"; this.show = process.env.VUE_APP_OSS_PATH === "/test/dist";
}, },
watch: {
"$route.query": {
async handler() {
if (
this.$route.query.trialId &&
this.$route.query.trialId !== this.$store.state.trials.config.trialId
) {
let res = await getTrialExtralConfig({
TrialId: this.$route.query.trialId,
});
if (res.IsSuccess) {
this.$store.dispatch("trials/setConfig", {
trialId: this.$route.query.trialId,
...res.Result,
});
}
}
},
immediate: true,
deep: true,
},
},
methods: { methods: {
changeValue(target, attr, e) { changeValue(target, attr, e) {
this.$set(target, attr, e); this.$set(target, attr, e);

View File

@ -171,19 +171,3 @@ export function getCustomTag(param) {
data: param data: param
}) })
} }
export function clearSkipReadingCache(param) {
return request({
url: `/ReadingImageTask/clearSkipReadingCache`,
method: 'post',
data: param
})
}
export function setSkipReadingCache(param) {
return request({
url: `/ReadingImageTask/setSkipReadingCache`,
method: 'post',
data: param
})
}

View File

@ -3675,11 +3675,3 @@ export function getTrialSiteSelectList(params) {
params params
}) })
} }
// 获取项目配置
export function getTrialExtralConfig(params) {
return request({
url: `/TrialConfig/getTrialExtralConfig`,
method: 'get',
params
})
}

View File

@ -44,6 +44,7 @@ Viewer.setDefaults({
'rotatable': true, 'rotatable': true,
'scalable': true, 'scalable': true,
'transition': true, 'transition': true,
'fullscreen': true,
'keyboard': true, 'keyboard': true,
'url': 'data-source' 'url': 'data-source'
} }
@ -367,9 +368,7 @@ async function VueInit() {
} }
_vm.$store.dispatch('user/logout').then(res => { _vm.$store.dispatch('user/logout').then(res => {
// window.location.href = `/login` // window.location.href = `/login`
if(_vm.$msgbox){
_vm.$msgbox.close(); _vm.$msgbox.close();
}
isOpen = false isOpen = false
isLock = null isLock = null
zzSessionStorage.removeItem('isLock') zzSessionStorage.removeItem('isLock')

View File

@ -12,7 +12,7 @@ NProgress.configure({ showSpinner: false })
const whiteList = ['/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms'] const whiteList = ['/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms']
router.beforeEach(async (to, from, next) => { router.beforeEach(async(to, from, next) => {
NProgress.start() NProgress.start()
// 设置页面标题 // 设置页面标题
// document.title = getPageTitle(to.meta.title) // document.title = getPageTitle(to.meta.title)
@ -56,7 +56,7 @@ router.beforeEach(async (to, from, next) => {
/* has no token*/ /* has no token*/
if (whiteList.indexOf(to.path) !== -1) { if (whiteList.indexOf(to.path) !== -1) {
// 在免登录whiteList中直接进入 // 在免登录whiteList中直接进入
if (to.path === '/readingDicoms' || to.path === '/noneDicomReading') { if (to.path === '/readingDicoms' || to.path === '/noneDicomReading'){
OSSclient() OSSclient()
} }
next() next()

View File

@ -493,10 +493,11 @@ const actions = {
}) })
}, },
removeCustomizeMeasuredData({ state }, obj) { removeCustomizeMeasuredData({ state }, obj) {
return new Promise(async resolve => { return new Promise(async resolve => {
var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
var measureData = state.visitTaskList[index].MeasureData var measureData = state.visitTaskList[index].MeasureData
console.log('removeCustomizeMeasuredData', obj, state.visitTaskList[index].MeasureData) console.log('removeCustomizeMeasuredData',obj, state.visitTaskList[index].MeasureData)
// var uuid = obj.measureData.data.uuid // var uuid = obj.measureData.data.uuid
// var idx = measureData.findIndex(item => item.MeasureData && item.MeasureData.data && item.MeasureData.data.uuid === uuid) // var idx = measureData.findIndex(item => item.MeasureData && item.MeasureData.data && item.MeasureData.data.uuid === uuid)
// console.log(obj, measureData) // console.log(obj, measureData)
@ -681,7 +682,7 @@ const actions = {
} else { } else {
// state.visitTaskList[index].MeasureData.push(obj.MeasureData.data) // state.visitTaskList[index].MeasureData.push(obj.MeasureData.data)
state.visitTaskList[index].MeasureData.push({ state.visitTaskList[index].MeasureData.push({
MeasureData: obj.measureData, MeasureData: obj.measureData ,
SeriesId: obj.measureData.seriesId, SeriesId: obj.measureData.seriesId,
StudyId: obj.measureData.studyId, StudyId: obj.measureData.studyId,
InstanceId: obj.measureData.instanceId, InstanceId: obj.measureData.instanceId,
@ -897,7 +898,7 @@ const actions = {
}, },
setImageloadedInfo({ state }, obj) { setImageloadedInfo({ state }, obj) {
var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId) var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
const prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount let prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount
state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount = prefetchInstanceCount + 100 state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount = prefetchInstanceCount + 100
state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].imageloadedArr.push(obj.imageId) state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].imageloadedArr.push(obj.imageId)
}, },

View File

@ -8,7 +8,6 @@ const getDefaultState = () => {
visitPointQuery: null, visitPointQuery: null,
studyListQuery: null, studyListQuery: null,
unlock: false, unlock: false,
config: {},
} }
} }
@ -21,9 +20,6 @@ const mutations = {
SET_UNLOCK: (state, unlock) => { SET_UNLOCK: (state, unlock) => {
state.unlock = unlock state.unlock = unlock
}, },
SET_CONFIG: (state, config) => {
state.config = config
},
SET_ACTIVENAME: (state, activeName) => { SET_ACTIVENAME: (state, activeName) => {
state.trialDetailActiveName = activeName state.trialDetailActiveName = activeName
}, },
@ -48,9 +44,6 @@ const actions = {
setUnLock({ commit }, unlock) { setUnLock({ commit }, unlock) {
commit('SET_UNLOCK', unlock) commit('SET_UNLOCK', unlock)
}, },
setConfig({ commit }, config) {
commit('SET_CONFIG', config)
},
setActiveName({ commit }, activeName) { setActiveName({ commit }, activeName) {
commit('SET_ACTIVENAME', activeName) commit('SET_ACTIVENAME', activeName)
}, },

View File

@ -2,55 +2,44 @@ import JSZip from "jszip";
import axios from "axios"; import axios from "axios";
import { saveAs } from "file-saver"; import { saveAs } from "file-saver";
import Vue from 'vue'; import Vue from 'vue';
import store from "@/store";
import { import {
requestPackageAndAnonymizImage, requestPackageAndAnonymizImage,
} from "@/api/load.js"; } from "@/api/load.js";
let flag = {}; let flag = {};
export const resetFlag = () => { export const downloadImage = async (id, id2) => {
flag = {}; if (flag[id2]) return
store.dispatch("trials/setUnLock", false); flag[id2] = true
}
export const downloadImage = async (id, id2, IsDicom = true) => {
if (flag[`${id2}_${IsDicom}`]) return Vue.prototype.$message.warning(Vue.prototype.$t('trials:upload:tip:uploading'));
flag[`${id2}_${IsDicom}`] = true
try { try {
let params = { let params = {
TrialId: id, TrialId: id,
SubjectVisitId: id2, SubjectVisitId: id2
IsDicom: IsDicom
} }
store.dispatch("trials/setUnLock", true);
let res = await requestPackageAndAnonymizImage(params); let res = await requestPackageAndAnonymizImage(params);
flag[id2] = false;
if (res.IsSuccess) { if (res.IsSuccess) {
if (!res.Result) { if (!res.Result) {
flag[`${id2}_${IsDicom}`] = false;
Vue.prototype.$message.warning(Vue.prototype.$t("trials:upload:message:not")) Vue.prototype.$message.warning(Vue.prototype.$t("trials:upload:message:not"))
return 1; return 1;
} }
Vue.prototype.$message.success(Vue.prototype.$t("trials:upload:message:startUpload")); let a = document.createElement("a");
let href = Vue.prototype.OSSclientConfig.basePath + res.Result; let href = Vue.prototype.OSSclientConfig.basePath + res.Result;
download(href, res.OtherInfo.FileName, { id2, IsDicom }) let fileName =
res.Result.split("/")[res.Result.split("/").length - 1];
a.download = fileName;
a.href = href;
a.click();
URL.revokeObjectURL(href);
let timer = setTimeout(() => {
a = null;
href = null;
timer = null;
}, 500)
return 2; return 2;
// let a = document.createElement("a");
// // let fileName =
// // res.Result.split("/")[res.Result.split("/").length - 1];
// a.download = res.OtherInfo.FileName;
// a.href = href;
// a.click();
// URL.revokeObjectURL(href);
// let timer = setTimeout(() => {
// a = null;
// href = null;
// timer = null;
// }, 500)
// return 2;
} else { } else {
flag[`${id2}_${IsDicom}`] = false;
return false; return false;
} }
} catch (err) { } catch (err) {
flag[`${id2}_${IsDicom}`] = false; flag[id2] = false;
console.log(err); console.log(err);
} }
}; };
@ -112,11 +101,11 @@ const setfolder = async (item) => {
}) })
.then((res) => { .then((res) => {
saveAs(res, zipName + ".zip"); // 使用FileSaver.saveAs保存文件文件名可自定义 saveAs(res, zipName + ".zip"); // 使用FileSaver.saveAs保存文件文件名可自定义
flag[`${id2}_${IsDicom}`] = false; flag[id2] = false;
zipObj = null; zipObj = null;
}); });
}) })
.catch((reason) => { flag[`${id2}_${IsDicom}`] = false; }); .catch((reason) => { flag[id2] = false; });
}; };
const handleBatchDown = async (item, zip) => { const handleBatchDown = async (item, zip) => {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -153,47 +142,3 @@ export const fileDownload = (content, filename) => {
eleLink.click(); eleLink.click();
document.body.removeChild(eleLink); document.body.removeChild(eleLink);
}; };
let download = async (downloadUrl, downloadFileName, res) => {
const blob = await getBlob(downloadUrl);
flag[`${res.id2}_${res.IsDicom}`] = false;
store.dispatch("trials/setUnLock", false);
saveAsB(blob, downloadFileName);
}
let getBlob = (url) => {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = () => {
if (xhr.status === 200) {
resolve(xhr.response);
} else {
reject(new Error(`Request failed with status ${xhr.status}`));
}
};
xhr.onerror = () => {
reject(new Error('Request failed'));
};
xhr.send();
});
}
let saveAsB = (blob, filename) => {
const link = document.createElement('a');
const body = document.body;
link.href = window.URL.createObjectURL(blob);
link.download = filename;
// hide the link
link.style.display = 'none';
body.appendChild(link);
link.click();
body.removeChild(link);
window.URL.revokeObjectURL(link.href);
}

View File

@ -183,7 +183,7 @@
{{ $t("login:title:system_title") }} {{ $t("login:title:system_title") }}
</p> </p>
<p style="margin-bottom: 20px" v-else>{{ $t("login:title:system") }}</p> <p style="margin-bottom: 20px" v-else>{{ $t("login:title:system") }}</p>
<p style="margin-bottom: 20px">V1.5.3.001</p> <p style="margin-bottom: 20px">V1.5.2.001</p>
<p style="margin-bottom: 20px" v-if="language === 'zh'"> <p style="margin-bottom: 20px" v-if="language === 'zh'">
Copyright © {{ new Date().getFullYear() }} 上海展影医疗科技有限公司 Copyright © {{ new Date().getFullYear() }} 上海展影医疗科技有限公司
版权所有 版权所有

View File

@ -121,7 +121,7 @@ export default {
// Dicom // Dicom
getNoneDicomList() { getNoneDicomList() {
this.loading = true this.loading = true
getNoneDicomStudyList(this.subjectVisitId, this.studyId).then(res => { getNoneDicomStudyList(this.subjectVisitId, this.studyId, true).then(res => {
this.studyList = res.Result this.studyList = res.Result
this.loading = false this.loading = false
const studyIndex = this.studyList.findIndex(item => { const studyIndex = this.studyList.findIndex(item => {

View File

@ -62,7 +62,7 @@ export default {
// Dicom // Dicom
getNoneDicomList() { getNoneDicomList() {
this.loading = true this.loading = true
getNoneDicomStudyList(this.subjectVisitId, '').then(res => { getNoneDicomStudyList(this.subjectVisitId, '', true).then(res => {
this.noneDicomStudyList = res.Result this.noneDicomStudyList = res.Result
this.loading = false this.loading = false
const study = this.noneDicomStudyList.find((item, index) => { const study = this.noneDicomStudyList.find((item, index) => {

View File

@ -203,7 +203,6 @@
> >
<i slot="default" class="el-icon-plus" /> <i slot="default" class="el-icon-plus" />
<div slot="file" slot-scope="{file}"> <div slot="file" slot-scope="{file}">
<viewer :images="images" :ref="file.url">
<img <img
class="el-upload-list__item-thumbnail" class="el-upload-list__item-thumbnail"
:src="OSSclientConfig.basePath + file.url" :src="OSSclientConfig.basePath + file.url"
@ -226,17 +225,23 @@
<i class="el-icon-delete" /> <i class="el-icon-delete" />
</span> </span>
</span> </span>
</viewer>
</div> </div>
</el-upload> </el-upload>
<el-dialog
append-to-body
:visible.sync="imgVisible"
width="600px"
>
<!-- <img width="100%" :src="imageUrl" alt="图片未找到"> -->
<el-image :src="imageUrl" width="100%" crossorigin="anonymous">
<div slot="placeholder" class="image-slot">
{{ $t('trials:adReview:title:loading') }}<span class="dot">...</span>
</div>
</el-image>
</el-dialog>
</el-form-item> </el-form-item>
<el-form-item v-if="adInfo.ReadingTaskState < 2"> <el-form-item v-if="adInfo.ReadingTaskState < 2">
<div style="text-align:center;"> <div style="text-align:center;">
<el-button type="primary" @click="skipTask">
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<!-- 保存 --> <!-- 保存 -->
<el-button type="primary" @click="handleSave">{{ $t('common:button:save') }}</el-button> <el-button type="primary" @click="handleSave">{{ $t('common:button:save') }}</el-button>
<!-- 提交 --> <!-- 提交 -->
@ -312,14 +317,12 @@ import { getJudgeReadingInfo,
// uploadJudgeTaskImage, // uploadJudgeTaskImage,
saveJudgeVisitTaskResult, submitJudgeVisitTaskResult, getReadingPastResultList } from '@/api/trials' saveJudgeVisitTaskResult, submitJudgeVisitTaskResult, getReadingPastResultList } from '@/api/trials'
import { getAutoCutNextTask } from '@/api/user' import { getAutoCutNextTask } from '@/api/user'
import { setSkipReadingCache } from '@/api/reading'
import const_ from '@/const/sign-code' import const_ from '@/const/sign-code'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import SignForm from '@/views/trials/components/newSignForm' import SignForm from '@/views/trials/components/newSignForm'
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent' import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
import store from '@/store' import store from '@/store'
import { changeURLStatic } from '@/utils/history.js' import { changeURLStatic } from '@/utils/history.js'
import Viewer from 'v-viewer'
export default { export default {
name: 'AdReview', name: 'AdReview',
components: { SignForm }, components: { SignForm },
@ -387,8 +390,7 @@ export default {
judgeResultArmEnum: '', judgeResultArmEnum: '',
criterionType: null, criterionType: null,
openWindow: null, openWindow: null,
isFixed: false, isFixed:false
images: []
} }
}, },
// watch: { // watch: {
@ -405,7 +407,6 @@ export default {
// } // }
// }, // },
mounted() { mounted() {
this.initializeViewer()
this.criterionType = parseInt(this.$route.query.criterionType) this.criterionType = parseInt(this.$route.query.criterionType)
this.getAdInfo() this.getAdInfo()
if (this.isReadingShowPreviousResults) { if (this.isReadingShowPreviousResults) {
@ -707,42 +708,14 @@ export default {
}, },
// //
handlePictureCardPreview(file) { handlePictureCardPreview(file) {
this.images = this.fileList.map(f => this.OSSclientConfig.basePath + f.url) this.imageUrl = this.OSSclientConfig.basePath + file.url
// this.imageUrl = this.OSSclientConfig.basePath + file.url this.imgVisible = true
this.$refs[file.url].$viewer.show()
}, },
// //
handleRemove(file, fileList) { handleRemove(file, fileList) {
var idx = this.fileList.findIndex(i => i.url === file.url) var idx = this.fileList.findIndex(i => i.url === file.url)
if (idx === -1) return if (idx === -1) return
this.fileList.splice(idx, 1) this.fileList.splice(idx, 1)
},
async skipTask() {
try {
//
const confirm = await this.$confirm(
this.$t('trials:readingReport:message:skipConfirm'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
window.location.reload()
}
} catch (e) {
this.loading = false
console.log(e)
}
},
initializeViewer() {
Viewer.setDefaults({
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true }
})
} }
} }
} }

View File

@ -12,15 +12,6 @@
style="margin-right:5px;" style="margin-right:5px;"
@change="handleShowDetail" @change="handleShowDetail"
/> />
<el-button
v-if="readingTaskState<2"
type="primary"
size="small"
@click="skipTask"
>
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<el-button <el-button
v-if="readingTaskState<2" v-if="readingTaskState<2"
type="primary" type="primary"
@ -181,7 +172,8 @@
@change="evaluateReasonChange" @change="evaluateReasonChange"
/> />
<!-- 系统评估结果为xxx,与当前调整的结果不一致请填写调整原因 --> <!-- 系统评估结果为xxx,与当前调整的结果不一致请填写调整原因 -->
<p v-if="currentEvaluateResult !== tumorEvaluate" style="width: 140px;padding:0 2px;white-space: normal;word-break: break-all;word-wrap: break-word;" v-html="getWarningText()" /> <p v-if="currentEvaluateResult !== tumorEvaluate" style="width: 140px;padding:0 2px;white-space: normal;word-break: break-all;word-wrap: break-word;" v-html="getWarningText()">
</p>
<p v-else-if="currentExistDisease !== isExistDisease" style="width: 140px;padding:0 2px;white-space: normal;word-break: break-all;word-wrap: break-word;">{{ $t('trials:readingReport:title:sysEvaluationRes') }}<span style="color:red">{{ $fd('ExistDisease',isExistDisease) }}</span>{{ $t('trials:readingReport:message:msg1') }} <p v-else-if="currentExistDisease !== isExistDisease" style="width: 140px;padding:0 2px;white-space: normal;word-break: break-all;word-wrap: break-word;">{{ $t('trials:readingReport:title:sysEvaluationRes') }}<span style="color:red">{{ $fd('ExistDisease',isExistDisease) }}</span>{{ $t('trials:readingReport:message:msg1') }}
</p> </p>
</template> </template>
@ -270,7 +262,6 @@
</template> </template>
<script> <script>
import { getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getTaskAdditionalQuestion } from '@/api/trials' import { getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getTaskAdditionalQuestion } from '@/api/trials'
import { setSkipReadingCache } from '@/api/reading'
import { getAutoCutNextTask } from '@/api/user' import { getAutoCutNextTask } from '@/api/user'
import DicomEvent from './DicomEvent' import DicomEvent from './DicomEvent'
import const_ from '@/const/sign-code' import const_ from '@/const/sign-code'
@ -825,36 +816,14 @@ export default {
var sysRes = '' var sysRes = ''
var curRes = '' var curRes = ''
if (this.CriterionType === 2) { if (this.CriterionType === 2) {
sysRes = this.$fd('ImagingOverallAssessment_Lugano', this.tumorEvaluate) sysRes = this.$fd('ImagingOverallAssessment_Lugano',this.tumorEvaluate)
curRes = this.$fd('ImagingOverallAssessment_Lugano', this.currentEvaluateResult) curRes = this.$fd('ImagingOverallAssessment_Lugano',this.currentEvaluateResult)
} else { } else {
sysRes = this.$fd('OverallAssessment', this.tumorEvaluate) sysRes = this.$fd('OverallAssessment',this.tumorEvaluate)
curRes = this.$fd('OverallAssessment', this.currentEvaluateResult) curRes = this.$fd('OverallAssessment',this.currentEvaluateResult)
} }
const msg = this.$t('trials:readingReport:message:msg9').replace('xxx', '<font color="red">' + sysRes + '</font>').replace('yyy', '<font color="red">' + curRes + '</font>') let msg = this.$t('trials:readingReport:message:msg9').replace('xxx','<font color="red">' + sysRes + '</font>').replace('yyy','<font color="red">' + curRes + '</font>')
return msg return msg
},
async skipTask() {
try {
//
const confirm = await this.$confirm(
this.$t('trials:readingReport:message:skipConfirm'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
window.location.reload()
}
} catch (e) {
this.loading = false
console.log(e)
}
} }
} }
} }

View File

@ -11,15 +11,6 @@
style="margin-right:5px" style="margin-right:5px"
@change="handleShowDetail" @change="handleShowDetail"
/> />
<el-button
v-if="readingTaskState<2"
type="primary"
size="small"
@click="skipTask"
>
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="getReportInfo">{{$t('trials:readingReport:button:refresh')}}</el-button> <el-button v-if="readingTaskState<2" type="primary" size="small" @click="getReportInfo">{{$t('trials:readingReport:button:refresh')}}</el-button>
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleSave(true)">{{$t('common:button:save')}}</el-button> <el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleSave(true)">{{$t('common:button:save')}}</el-button>
<el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleConfirm">{{$t('common:button:submit')}}</el-button> <el-button v-if="readingTaskState<2" type="primary" size="small" @click="handleConfirm">{{$t('common:button:submit')}}</el-button>
@ -269,7 +260,6 @@
</template> </template>
<script> <script>
import { changeCalculationAnswer, getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials' import { changeCalculationAnswer, getReadingReportEvaluation, changeDicomReadingQuestionAnswer, submitDicomVisitTask, verifyVisitTaskQuestions, getQuestionCalculateRelation } from '@/api/trials'
import { setSkipReadingCache } from '@/api/reading'
import DicomEvent from './../components/DicomEvent' import DicomEvent from './../components/DicomEvent'
import CustomizeReportPageUpload from './CustomizeReportPageUpload' import CustomizeReportPageUpload from './CustomizeReportPageUpload'
import const_ from '@/const/sign-code' import const_ from '@/const/sign-code'
@ -838,28 +828,6 @@ export default {
reject() reject()
}) })
}) })
},
async skipTask() {
try {
//
const confirm = await this.$confirm(
this.$t('trials:readingReport:message:skipConfirm'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
window.location.reload()
}
} catch (e) {
this.loading = false
console.log(e)
}
} }
} }
} }

View File

@ -25,14 +25,7 @@
</div> </div>
<div v-if=" readingTaskState < 2" style="text-align:right;margin:5px 0;"> <div v-if=" readingTaskState < 2" style="text-align:right;margin:5px 0;">
<el-button
type="primary"
size="small"
@click="skipTask"
>
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<el-button size="small" type="primary" @click="handleSave"> <el-button size="small" type="primary" @click="handleSave">
{{ $t('common:button:save') }} {{ $t('common:button:save') }}
</el-button> </el-button>
@ -149,7 +142,6 @@
<script> <script>
import { getGlobalReadingInfo, getReadingPastResultList, submitGlobalReadingInfo, saveGlobalReadingInfo } from '@/api/trials' import { getGlobalReadingInfo, getReadingPastResultList, submitGlobalReadingInfo, saveGlobalReadingInfo } from '@/api/trials'
import { getAutoCutNextTask } from '@/api/user' import { getAutoCutNextTask } from '@/api/user'
import { setSkipReadingCache } from '@/api/reading'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import const_ from '@/const/sign-code' import const_ from '@/const/sign-code'
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent' import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
@ -385,28 +377,6 @@ export default {
handleSave() { handleSave() {
this.$refs['globalTbl'].handleSave(true) this.$refs['globalTbl'].handleSave(true)
}, },
async skipTask() {
try {
//
const confirm = await this.$confirm(
this.$t('trials:readingReport:message:skipConfirm'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
window.location.reload()
}
} catch (e) {
this.loading = false
console.log(e)
}
},
async handleConfirm() { async handleConfirm() {
// 访 // 访
var idx = this.taskList.findIndex(i => !i.AgreeOrNotAnswer) var idx = this.taskList.findIndex(i => !i.AgreeOrNotAnswer)

View File

@ -29,22 +29,11 @@
{{ $t('trials:medicalFeedback:message:msg2') }} {{ $t('trials:medicalFeedback:message:msg2') }}
<ol> <ol>
<li v-for="file in record.FileList" :key="file.ImagePath" style="list-style: none;"> <li v-for="file in record.FileList" :key="file.ImagePath" style="list-style: none;">
<viewer <el-button
v-if="file.ImagePath" type="text"
:ref="file.ImagePath" size="mini"
style="margin:0 10px;" @click="previewImage(file.ImagePath)"
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]" >{{ file.FileName }}</el-button>
>
<el-button type="text" @click="previewImage(file.ImagePath)">
{{ file.FileName }}
</el-button>
<img
v-show="false"
crossorigin="anonymous"
:src="`${OSSclientConfig.basePath}${file.ImagePath}`"
alt="Image"
>
</viewer>
</li> </li>
</ol> </ol>
</div> </div>
@ -108,6 +97,22 @@
</div> </div>
</div> </div>
<el-dialog
v-if="previewDialog"
append-to-body
:close-on-click-modal="false"
:visible.sync="previewDialog"
width="600px"
>
<!-- <img width="100%" :src="imagePath" alt="图片未找到"> -->
<el-image :src="imagePath" crossorigin="anonymous" width="100%">
<div slot="placeholder" class="image-slot">
<!-- 加载中 -->
{{ $t('trials:medicalFeedback:message:loading') }}<span class="dot">...</span>
</div>
</el-image>
</el-dialog>
<el-dialog <el-dialog
v-if="irFeedbackForm.visible" v-if="irFeedbackForm.visible"
@ -132,7 +137,6 @@ import { getMedicalReviewDialog } from '@/api/trials'
import FeedbackForm from './FeedbackForm' import FeedbackForm from './FeedbackForm'
import mimAvatar from '@/assets/MIM.png' import mimAvatar from '@/assets/MIM.png'
import irAvatar from '@/assets/IR.png' import irAvatar from '@/assets/IR.png'
import Viewer from 'v-viewer'
export default { export default {
name: 'ChatForm', name: 'ChatForm',
components: { FeedbackForm }, components: { FeedbackForm },
@ -166,7 +170,6 @@ export default {
} }
}, },
mounted() { mounted() {
this.initializeViewer()
this.getMessageList() this.getMessageList()
}, },
methods: { methods: {
@ -201,12 +204,6 @@ export default {
previewImage(path) { previewImage(path) {
this.imagePath = `${this.OSSclientConfig.basePath}${path}` this.imagePath = `${this.OSSclientConfig.basePath}${path}`
this.previewDialog = true this.previewDialog = true
this.$refs[path][0].$viewer.show()
},
initializeViewer() {
Viewer.setDefaults({
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true }
})
} }
} }

View File

@ -29,22 +29,11 @@
{{ $t('trials:medicalFeedback:message:msg2') }} {{ $t('trials:medicalFeedback:message:msg2') }}
<ol> <ol>
<li v-for="file in record.FileList" :key="file.ImagePath" style="list-style: none;"> <li v-for="file in record.FileList" :key="file.ImagePath" style="list-style: none;">
<viewer <el-button
v-if="file.ImagePath" type="text"
:ref="file.ImagePath" size="mini"
style="margin:0 10px;" @click="previewImage(file.ImagePath)"
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]" >{{ file.FileName }}</el-button>
>
<el-button type="text" @click="previewImage(file.ImagePath)">
{{ file.FileName }}
</el-button>
<img
v-show="false"
crossorigin="anonymous"
:src="`${OSSclientConfig.basePath}${file.ImagePath}`"
alt="Image"
>
</viewer>
</li> </li>
</ol> </ol>
</div> </div>
@ -136,6 +125,19 @@
</div> </div>
</div> </div>
<el-dialog
append-to-body
:visible.sync="previewDialog"
width="600px"
>
<!-- <img width="100%" :src="imagePath" alt="图片未找到"> -->
<el-image :src="OSSclientConfig.basePath + imagePath" width="100%" crossorigin="anonymous">
<div slot="placeholder" class="image-slot">
{{ $t('trials:medicalFeedback:message:loading') }}<span class="dot">...</span>
</div>
</el-image>
</el-dialog>
<el-dialog <el-dialog
v-if="irFeedbackForm.visible" v-if="irFeedbackForm.visible"
:visible.sync="irFeedbackForm.visible" :visible.sync="irFeedbackForm.visible"
@ -152,7 +154,6 @@
@close="irFeedbackForm.visible = false" @close="irFeedbackForm.visible = false"
/> />
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
@ -160,7 +161,6 @@ import { getMedicalReviewDialog, sendMedicalReviewDialog } from '@/api/trials'
import FeedbackForm from '@/views/trials/trials-panel/reading/medical-feedback/components/FeedbackForm' import FeedbackForm from '@/views/trials/trials-panel/reading/medical-feedback/components/FeedbackForm'
import mimAvatar from '@/assets/MIM.png' import mimAvatar from '@/assets/MIM.png'
import irAvatar from '@/assets/IR.png' import irAvatar from '@/assets/IR.png'
import Viewer from 'v-viewer'
export default { export default {
name: 'ChatForm', name: 'ChatForm',
components: { components: {
@ -196,7 +196,6 @@ export default {
} }
}, },
mounted() { mounted() {
this.initializeViewer()
this.getMessageList() this.getMessageList()
}, },
methods: { methods: {
@ -243,18 +242,12 @@ export default {
previewImage(path) { previewImage(path) {
this.imagePath = `${path}` this.imagePath = `${path}`
this.previewDialog = true this.previewDialog = true
this.$refs[path][0].$viewer.show()
}, },
handleIRReply() { handleIRReply() {
// '' // ''
this.irFeedbackForm.title = this.$t('trials:medicalFeedback:title:feedback') this.irFeedbackForm.title = this.$t('trials:medicalFeedback:title:feedback')
this.irFeedbackForm.visible = true this.irFeedbackForm.visible = true
},
initializeViewer() {
Viewer.setDefaults({
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true }
})
} }
} }

View File

@ -92,7 +92,6 @@
> >
<i slot="default" class="el-icon-plus" /> <i slot="default" class="el-icon-plus" />
<div slot="file" slot-scope="{file}"> <div slot="file" slot-scope="{file}">
<viewer :images="images" :ref="file.url">
<img <img
class="el-upload-list__item-thumbnail" class="el-upload-list__item-thumbnail"
:src="OSSclientConfig.basePath + file.url" :src="OSSclientConfig.basePath + file.url"
@ -115,26 +114,24 @@
<i class="el-icon-delete" /> <i class="el-icon-delete" />
</span> </span>
</span> </span>
</viewer>
</div> </div>
</el-upload> </el-upload>
<!-- <el-dialog <el-dialog
append-to-body append-to-body
:visible.sync="imgVisible" :visible.sync="imgVisible"
width="600px" width="600px"
> >
<!-- <img width="100%" :src="imageUrl" alt="图片未找到"> -->
<el-image :src="imageUrl" width="100%" crossorigin="anonymous"> <el-image :src="imageUrl" width="100%" crossorigin="anonymous">
<div slot="placeholder" class="image-slot"> <div slot="placeholder" class="image-slot">
{{ $t('trials:medicalFeedback:message:loading') }}<span class="dot">...</span> {{ $t('trials:medicalFeedback:message:loading') }}<span class="dot">...</span>
</div> </div>
</el-image> </el-image>
</el-dialog> --> </el-dialog>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- <viewer v-if="imgVisible" :images="[imageUrl]" ref="viewer">
<img :src="imageUrl" crossorigin="anonymous" alt="">
</viewer> -->
<el-dialog <el-dialog
v-if="chatVisible" v-if="chatVisible"
:visible.sync="chatVisible" :visible.sync="chatVisible"
@ -173,7 +170,6 @@
import { saveMedicalReviewInfo } from '@/api/trials' import { saveMedicalReviewInfo } from '@/api/trials'
import ChatForm from './ChatForm' import ChatForm from './ChatForm'
import CloseQC from './CloseQC' import CloseQC from './CloseQC'
import Viewer from 'v-viewer'
export default { export default {
name: 'AuditConclusions', name: 'AuditConclusions',
components: { components: {
@ -224,12 +220,10 @@ export default {
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1, userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
isClosedDialog: false, isClosedDialog: false,
isSendMessage: false, isSendMessage: false,
closeQuestionVisible: false, closeQuestionVisible: false
images:[]
} }
}, },
mounted() { mounted() {
this.initializeViewer()
this.initForm() this.initForm()
}, },
methods: { methods: {
@ -385,20 +379,14 @@ export default {
}, },
// //
handlePictureCardPreview(file) { handlePictureCardPreview(file) {
this.images = this.fileList.map(f => this.OSSclientConfig.basePath + f.url) this.imageUrl = this.OSSclientConfig.basePath + file.url
// this.imageUrl = this.OSSclientConfig.basePath + file.url this.imgVisible = true
this.$refs[file.url].$viewer.show()
}, },
// //
handleRemove(file, fileList) { handleRemove(file, fileList) {
var idx = this.fileList.findIndex(i => i.url === file.url) var idx = this.fileList.findIndex(i => i.url === file.url)
if (idx === -1) return if (idx === -1) return
this.fileList.splice(idx, 1) this.fileList.splice(idx, 1)
},
initializeViewer() {
Viewer.setDefaults({
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true}
})
} }
} }
} }

View File

@ -26,14 +26,6 @@
> >
{{ $t('trials:oncologyReview:button:clinicalData') }} {{ $t('trials:oncologyReview:button:clinicalData') }}
</el-button> </el-button>
<el-button
type="primary"
size="small"
@click="skipTask"
>
<!-- 跳过 -->
{{ $t('trials:readingReport:button:skip') }}
</el-button>
<!-- 保存 --> <!-- 保存 -->
<el-button <el-button
v-if="oncologyInfo.ReadingTaskState < 2" v-if="oncologyInfo.ReadingTaskState < 2"
@ -261,7 +253,6 @@
</template> </template>
<script> <script>
import { getOncologyReadingInfo, getReadingPastResultList, setOncologyReadingInfo, submitOncologyReadingInfo } from '@/api/trials' import { getOncologyReadingInfo, getReadingPastResultList, setOncologyReadingInfo, submitOncologyReadingInfo } from '@/api/trials'
import { setSkipReadingCache } from '@/api/reading'
import const_ from '@/const/sign-code' import const_ from '@/const/sign-code'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent' import DicomEvent from '@/views/trials/trials-panel/reading/dicoms/components/DicomEvent'
@ -563,28 +554,6 @@ export default {
path: `/clinicalData?subjectId=${this.oncologyInfo.SubjectId}&trialId=${this.trialId}&visitTaskId=${this.oncologyInfo.OncologyTaskId}&TokenKey=${token}` path: `/clinicalData?subjectId=${this.oncologyInfo.SubjectId}&trialId=${this.trialId}&visitTaskId=${this.oncologyInfo.OncologyTaskId}&TokenKey=${token}`
}) })
window.open(routeData.href, '_blank') window.open(routeData.href, '_blank')
},
async skipTask() {
try {
//
const confirm = await this.$confirm(
this.$t('trials:readingReport:message:skipConfirm'),
{
type: 'warning',
distinguishCancelAndClose: true
}
)
if (confirm !== 'confirm') return
this.loading = true
const res = await setSkipReadingCache({ visitTaskId: this.visitTaskId })
this.loading = false
if (res.IsSuccess) {
window.location.reload()
}
} catch (e) {
this.loading = false
console.log(e)
}
} }
} }
} }

View File

@ -78,7 +78,8 @@
? 'warning' ? 'warning'
: 'primary' : 'primary'
" "
>{{ $fd("YesOrNo", scope.row.IsUrgent) }}</el-tag> >{{ $fd("YesOrNo", scope.row.IsUrgent) }}</el-tag
>
</template> </template>
</el-table-column> </el-table-column>
<!-- 受试者编号 --> <!-- 受试者编号 -->
@ -116,7 +117,8 @@
? '#E6A23C' ? '#E6A23C'
: '#409EFF', : '#409EFF',
}" }"
>{{ scope.row.UrgentCount }}</span> >{{ scope.row.UrgentCount }}</span
>
</template> </template>
</el-table-column> </el-table-column>
<!-- 建议完成时间 --> <!-- 建议完成时间 -->
@ -155,12 +157,12 @@
/> />
<!-- 上传 --> <!-- 上传 -->
<el-button <el-button
v-hasPermi="['role:ir']"
v-if=" v-if="
item.CriterionType === 0 && item.CriterionType === 0 &&
item.ImageUploadEnum > 0 && item.ImageUploadEnum > 0 &&
item.IsReadingTaskViewInOrder > 0 item.IsReadingTaskViewInOrder > 0
" "
v-hasPermi="['role:ir']"
circle circle
icon="el-icon-upload2" icon="el-icon-upload2"
:title="$t('trials:pendingReadingTasks:button:upload')" :title="$t('trials:pendingReadingTasks:button:upload')"
@ -168,12 +170,12 @@
/> />
<!-- 下载 --> <!-- 下载 -->
<el-button <el-button
v-hasPermi="['role:ir']"
v-if=" v-if="
item.CriterionType === 0 && item.CriterionType === 0 &&
item.ImageDownloadEnum === 1 && item.ImageDownloadEnum === 1 &&
item.IsReadingTaskViewInOrder > 0 item.IsReadingTaskViewInOrder > 0
" "
v-hasPermi="['role:ir']"
circle circle
icon="el-icon-download" icon="el-icon-download"
:title="$t('trials:pendingReadingTasks:button:download')" :title="$t('trials:pendingReadingTasks:button:download')"
@ -262,8 +264,8 @@
<upload-image <upload-image
v-if="uploadImageVisible" v-if="uploadImageVisible"
:visible.sync="uploadImageVisible" :visible.sync="uploadImageVisible"
:subject-id="uploadSubjectId" :SubjectId="uploadSubjectId"
:criterion="uploadTrialCriterion" :Criterion="uploadTrialCriterion"
:status="uploadStatus" :status="uploadStatus"
@getList="getList" @getList="getList"
/> />
@ -272,36 +274,35 @@
<script> <script>
import { import {
getIRUnReadSubjectTaskList, getIRUnReadSubjectTaskList,
verifyReadingRestTime verifyReadingRestTime,
} from '@/api/trials' } from "@/api/trials";
import { getTrialCriterionList } from '@/api/trials/reading' import { getTrialCriterionList } from "@/api/trials/reading";
import { clearSkipReadingCache } from '@/api/reading' import BaseContainer from "@/components/BaseContainer";
import BaseContainer from '@/components/BaseContainer' import uploadImage from "@/components/uploadImage";
import uploadImage from '@/components/uploadImage' import Pagination from "@/components/Pagination";
import Pagination from '@/components/Pagination' import { getToken } from "@/utils/auth";
import { getToken } from '@/utils/auth'
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
SubjectCode: '', SubjectCode: "",
PageIndex: 1, PageIndex: 1,
PageSize: 20 PageSize: 20,
} };
} };
export default { export default {
name: 'ReadingTaskList', name: "ReadingTaskList",
components: { BaseContainer, Pagination, 'upload-image': uploadImage }, components: { BaseContainer, Pagination, "upload-image": uploadImage },
data() { data() {
return { return {
searchData: searchDataDefault(), searchData: searchDataDefault(),
list: [], list: [],
total: 0, total: 0,
loading: false, loading: false,
trialId: '', trialId: "",
isReadingTaskViewInOrder: null, isReadingTaskViewInOrder: null,
randomReadInfo: {}, randomReadInfo: {},
isRender: false, isRender: false,
trialCriterionList: [], trialCriterionList: [],
TrialReadingCriterionId: '', TrialReadingCriterionId: "",
isTableShow: true, isTableShow: true,
readingTool: null, readingTool: null,
criterionType: null, criterionType: null,
@ -311,146 +312,147 @@ export default {
uploadImageVisible: false, uploadImageVisible: false,
uploadSubjectId: null, uploadSubjectId: null,
uploadTrialCriterion: {}, uploadTrialCriterion: {},
uploadStatus: 'upload' uploadStatus: "upload",
} };
}, },
watch: { watch: {
TrialReadingCriterionId(v) { TrialReadingCriterionId(v) {
if (v) { if (v) {
this.getList() this.getList();
}
} }
}, },
},
mounted() { mounted() {
window.addEventListener('message', this.receiveMsg) window.addEventListener("message", this.receiveMsg);
this.trialId = this.$route.query.trialId this.trialId = this.$route.query.trialId;
this.getTrialCriterionList() this.getTrialCriterionList();
}, },
beforeDestroy() { beforeDestroy() {
window.removeEventListener('message', this.receiveMsg) window.removeEventListener("message", this.receiveMsg);
if (this.openWindow) { if (this.openWindow) {
this.openWindow.close() this.openWindow.close();
} }
}, },
methods: { methods: {
// //
openUploadImage(item, trialCriterion, status) { openUploadImage(item, trialCriterion, status) {
this.uploadSubjectId = item.SubjectId this.uploadSubjectId = item.SubjectId;
this.uploadTrialCriterion = trialCriterion this.uploadTrialCriterion = trialCriterion;
this.uploadStatus = status this.uploadStatus = status;
this.uploadImageVisible = true this.uploadImageVisible = true;
}, },
async getTrialCriterionList() { getTrialCriterionList() {
try { getTrialCriterionList(this.trialId)
const res = await getTrialCriterionList(this.trialId) .then((res) => {
if (res.IsSuccess) { this.trialCriterionList = res.Result;
this.trialCriterionList = res.Result
this.TrialReadingCriterionId = this.TrialReadingCriterionId =
this.trialCriterionList[0].TrialReadingCriterionId this.trialCriterionList[0].TrialReadingCriterionId;
} })
} catch (e) { .catch(() => {});
console.log(e)
}
}, },
async getList() { getList() {
try { this.loading = true;
this.loading = true this.searchData.TrialId = this.trialId;
this.searchData.TrialId = this.trialId this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId this.isRender = false;
this.isRender = false getIRUnReadSubjectTaskList(this.searchData)
const res = await getIRUnReadSubjectTaskList(this.searchData) .then((res) => {
if (res.IsSuccess) {
this.isReadingTaskViewInOrder = this.isReadingTaskViewInOrder =
res.OtherInfo.IsReadingTaskViewInOrder res.OtherInfo.IsReadingTaskViewInOrder;
this.readingTool = res.OtherInfo.ReadingTool this.readingTool = res.OtherInfo.ReadingTool;
this.criterionType = res.OtherInfo.CriterionType this.criterionType = res.OtherInfo.CriterionType;
if (res.OtherInfo.IsReadingTaskViewInOrder) { if (res.OtherInfo.IsReadingTaskViewInOrder) {
this.list = res.Result.CurrentPageData this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount this.total = res.Result.TotalCount;
} else { } else {
this.randomReadInfo = res.OtherInfo.RandomReadInfo this.randomReadInfo = res.OtherInfo.RandomReadInfo;
}
this.isRender = true
this.loading = false
}
} catch (e) {
this.isRender = true
this.loading = false
} }
this.isRender = true;
this.loading = false;
})
.catch(() => {
this.isRender = true;
this.loading = false;
});
}, },
handleSearch() { handleSearch() {
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
}, },
handleReset() { handleReset() {
this.searchData = searchDataDefault() this.searchData = searchDataDefault();
this.getList() this.getList();
}, },
async handleReadImage(row) { handleReadImage(row) {
if (this.openWindow) { if (this.openWindow) {
this.openWindow.close() this.openWindow.close();
} }
try { this.loading = true;
this.loading = true verifyReadingRestTime()
await clearSkipReadingCache() .then((_) => {
await verifyReadingRestTime() this.loading = false;
this.loading = false
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
var token = getToken()
var path = ''
if (this.readingTool === 0) {
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
} else {
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
}
var routeData = this.$router.resolve({ path })
this.openWindow = window.open(routeData.href, '_blank') window.localStorage.setItem(
} catch (e) { "TrialReadingCriterionId",
this.loading = false this.TrialReadingCriterionId
console.log(e) );
} var token = getToken();
}, var path = "";
async handleOutOfOrderReading() {
if (this.openWindow) {
this.openWindow.close()
}
try {
this.loading = true
await clearSkipReadingCache()
await verifyReadingRestTime()
this.loading = false
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
var token = getToken()
var path = ''
if (this.readingTool === 0) { if (this.readingTool === 0) {
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}` path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
} else { } else {
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}` path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
} }
var routeData = this.$router.resolve({ path }) var routeData = this.$router.resolve({ path });
this.openWindow = window.open(routeData.href, '_blank')
} catch (e) { this.openWindow = window.open(routeData.href, "_blank");
this.loading = false })
console.log(e) .catch(() => {
this.loading = false;
});
},
handleOutOfOrderReading() {
if (this.openWindow) {
this.openWindow.close();
} }
this.loading = true;
verifyReadingRestTime()
.then((_) => {
this.loading = false;
window.localStorage.setItem(
"TrialReadingCriterionId",
this.TrialReadingCriterionId
);
var token = getToken();
var path = "";
if (this.readingTool === 0) {
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
} else {
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
}
var routeData = this.$router.resolve({ path });
this.openWindow = window.open(routeData.href, "_blank");
})
.catch(() => {
this.loading = false;
});
}, },
receiveMsg(event) { receiveMsg(event) {
if (event.data === 'refreshTaskList') { if (event.data === "refreshTaskList") {
this.getList() this.getList();
} }
}, },
// //
handleSortChange(column) { handleSortChange(column) {
if (column.order === 'ascending') { if (column.order === "ascending") {
this.searchData.Asc = true this.searchData.Asc = true;
} else { } else {
this.searchData.Asc = false this.searchData.Asc = false;
} }
this.searchData.SortField = column.prop this.searchData.SortField = column.prop;
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
} },
} },
} };
</script> </script>

View File

@ -412,7 +412,6 @@ import { getToken } from '@/utils/auth'
// import PreviewFiles from './previewFiles' // import PreviewFiles from './previewFiles'
import uploadVideos from '@/components/videos' import uploadVideos from '@/components/videos'
import moment from 'moment' import moment from 'moment'
import store from "@/store";
export default { export default {
name: 'UploadNonDicomFiles', name: 'UploadNonDicomFiles',
components: { uploadVideos }, components: { uploadVideos },
@ -471,8 +470,7 @@ export default {
uploadVideoVisible: false, uploadVideoVisible: false,
trialId: this.$route.query.trialId, trialId: this.$route.query.trialId,
moment, moment,
BodyPart:{}, BodyPart:{}
studyMonitorId: null
}; };
}, },
async mounted() { async mounted() {
@ -499,12 +497,6 @@ export default {
}); });
} }
}, },
btnLoading(){
store.dispatch("trials/setUnLock", this.btnLoading);
}
},
beforeDestroy(){
store.dispatch("trials/setUnLock", false);
}, },
methods: { methods: {
// Dicom // Dicom
@ -760,21 +752,12 @@ export default {
this.selectArr.forEach(item=>item.status = 0); this.selectArr.forEach(item=>item.status = 0);
let num = this.selectArr.length > 6 ? 6 : this.selectArr.length; let num = this.selectArr.length > 6 ? 6 : this.selectArr.length;
let funArr = []; let funArr = [];
let res = await preArchiveStudy({
subjectVisitId: this.subjectVisitId,
isDicom: false
});
if(res.IsSuccess){
this.studyMonitorId = res.Result;
for (let i = 0; i < num; i++) { for (let i = 0; i < num; i++) {
funArr.push(this.handleUploadTask(this.selectArr, i)); funArr.push(this.handleUploadTask(this.selectArr, i));
} }
if (funArr.length > 0) { if (funArr.length > 0) {
let res = await Promise.all(funArr); let res = await Promise.all(funArr);
} }
}else{
this.isFail = true;
}
} }
}, },
// //
@ -831,12 +814,16 @@ export default {
// Dicom // Dicom
submitFile(uploadedFileList){ submitFile(uploadedFileList){
if(!this.uploadVisible) return; if(!this.uploadVisible) return;
preArchiveStudy({
subjectVisitId: this.subjectVisitId,
isDicom: false
}).then(res => {
this.btnLoading = true this.btnLoading = true
var params = { var params = {
trialId: this.trialId, trialId: this.trialId,
subjectVisitId: this.subjectVisitId, subjectVisitId: this.subjectVisitId,
noneDicomStudyId:this.currentRow.Id, noneDicomStudyId:this.currentRow.Id,
studyMonitorId: this.studyMonitorId, studyMonitorId: res.Result,
uploadedFileList: uploadedFileList uploadedFileList: uploadedFileList
} }
uploadNoneDicomFile(params).then(res => { uploadNoneDicomFile(params).then(res => {
@ -846,6 +833,7 @@ export default {
this.$emit('getList') this.$emit('getList')
this.$message.success(this.$t('trials:uploadNonDicoms:message:uploadedSuccessfully')) this.$message.success(this.$t('trials:uploadNonDicoms:message:uploadedSuccessfully'))
}).catch(() => { this.btnLoading = false }) }).catch(() => { this.btnLoading = false })
})
}, },
resetFileDiaolg(){ resetFileDiaolg(){
this.btnLoading = false this.btnLoading = false

View File

@ -43,16 +43,6 @@
</el-col> </el-col>
</el-row> </el-row>
<div style="text-align: right"> <div style="text-align: right">
<!-- 下载所有影像 -->
<el-button
v-if="$store.state.trials.config.IsSupportQCDownloadImage"
size="small"
type="primary"
style="margin-left: 10px"
@click="downloadImage(true)"
>
{{ $t("trials:audit:button:downLoadAllDiocms") }}
</el-button>
<!-- 预览所有影像 --> <!-- 预览所有影像 -->
<el-button <el-button
size="small" size="small"
@ -295,16 +285,6 @@
</el-col> </el-col>
</el-row> </el-row>
<div style="text-align: right"> <div style="text-align: right">
<!-- 下载所有影像 -->
<el-button
v-if="$store.state.trials.config.IsSupportQCDownloadImage"
size="small"
type="primary"
style="margin-left: 10px"
@click="downloadImage(false)"
>
{{ $t("trials:audit:button:downLoadAllNonDiocms") }}
</el-button>
<!-- 预览 --> <!-- 预览 -->
<el-button <el-button
size="small" size="small"
@ -1218,7 +1198,6 @@ import SignForm from "@/views/trials/components/newSignForm";
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import const_ from "@/const/sign-code"; import const_ from "@/const/sign-code";
import uploadPetClinicalData from "@/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue"; import uploadPetClinicalData from "@/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue";
import { downloadImage , resetFlag } from "@/utils/uploadZip.js";
export default { export default {
name: "QualityAssurance", name: "QualityAssurance",
components: { components: {
@ -1331,9 +1310,6 @@ export default {
BodyPart: {}, BodyPart: {},
}; };
}, },
beforeDestroy(){
resetFlag();
},
async mounted() { async mounted() {
this.BodyPart.Bodypart = await this.$getBodyPart(this.$route.query.trialId); this.BodyPart.Bodypart = await this.$getBodyPart(this.$route.query.trialId);
if (this.disabled) { if (this.disabled) {
@ -1356,18 +1332,6 @@ export default {
} }
}, },
methods: { methods: {
//
async downloadImage(IsDicom) {
try {
await downloadImage(
this.$route.query.trialId,
this.data.Id,
IsDicom
);
} catch (err) {
console.log(err);
}
},
// QC // QC
getQCInfo() { getQCInfo() {
this.loading = true; this.loading = true;

View File

@ -63,8 +63,7 @@ module.exports = {
// target: 'http://123.56.94.154:8079', // 国内测试环境2 // target: 'http://123.56.94.154:8079', // 国内测试环境2
// target: 'http://123.56.94.154:7000', // 国内测试环境2 // target: 'http://123.56.94.154:7000', // 国内测试环境2
// target: 'http://123.56.94.154:30668', // target: 'http://123.56.94.154:30668',
// target: 'http://106.14.89.110:30000', target: 'http://106.14.89.110:30000',
target: 'http://47.117.164.182:7010', // uat
// target: 'http://123.56.181.144:7000', // target: 'http://123.56.181.144:7000',
changeOrigin: true, changeOrigin: true,
secure: false, secure: false,
@ -95,7 +94,7 @@ module.exports = {
ignore: ['.*'] ignore: ['.*']
} }
]), ]),
process.env.NODE_ENV === 'development' || process.env.VUE_APP_OSS_CONFIG_BUCKET === 'zyypacs-usa' ? function() { } process.env.NODE_ENV === 'development' || process.env.VUE_APP_OSS_CONFIG_BUCKET === 'zyypacs-usa' ? function () { }
: new WebpackAliyunOss({ : new WebpackAliyunOss({
from: ['./dist/**'], from: ['./dist/**'],
dist: process.env.VUE_APP_OSS_PATH + distDate, dist: process.env.VUE_APP_OSS_PATH + distDate,
@ -124,7 +123,7 @@ module.exports = {
// 生成文件的最大体积 // 生成文件的最大体积
maxAssetSize: 3000000000, maxAssetSize: 3000000000,
// 只给出js的性能提示 // 只给出js的性能提示
assetFilter: function(assetFileName) { assetFilter: function (assetFileName) {
return assetFileName.endsWith('.js') return assetFileName.endsWith('.js')
} }
}, },