Merge branch 'uat' into uat_us
commit
f0e6c5b9de
Binary file not shown.
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 7.7 KiB |
23
src/App.vue
23
src/App.vue
|
@ -89,6 +89,7 @@ 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 {
|
||||||
|
@ -105,6 +106,28 @@ 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);
|
||||||
|
|
|
@ -171,3 +171,19 @@ 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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -3675,3 +3675,11 @@ export function getTrialSiteSelectList(params) {
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 获取项目配置
|
||||||
|
export function getTrialExtralConfig(params) {
|
||||||
|
return request({
|
||||||
|
url: `/TrialConfig/getTrialExtralConfig`,
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -44,7 +44,6 @@ 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'
|
||||||
}
|
}
|
||||||
|
@ -368,7 +367,9 @@ 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')
|
||||||
|
|
|
@ -493,7 +493,6 @@ 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
|
||||||
|
@ -898,7 +897,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)
|
||||||
let prefetchInstanceCount = state.visitTaskList[index].StudyList[obj.studyIndex].SeriesList[obj.seriesIndex].prefetchInstanceCount
|
const 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)
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,6 +8,7 @@ const getDefaultState = () => {
|
||||||
visitPointQuery: null,
|
visitPointQuery: null,
|
||||||
studyListQuery: null,
|
studyListQuery: null,
|
||||||
unlock: false,
|
unlock: false,
|
||||||
|
config: {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +21,9 @@ 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
|
||||||
},
|
},
|
||||||
|
@ -44,6 +48,9 @@ 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)
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,44 +2,55 @@ 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 downloadImage = async (id, id2) => {
|
export const resetFlag = () => {
|
||||||
if (flag[id2]) return
|
flag = {};
|
||||||
flag[id2] = true
|
store.dispatch("trials/setUnLock", false);
|
||||||
|
}
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
let a = document.createElement("a");
|
Vue.prototype.$message.success(Vue.prototype.$t("trials:upload:message:startUpload"));
|
||||||
let href = Vue.prototype.OSSclientConfig.basePath + res.Result;
|
let href = Vue.prototype.OSSclientConfig.basePath + res.Result;
|
||||||
let fileName =
|
download(href, res.OtherInfo.FileName, { id2, IsDicom })
|
||||||
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] = false;
|
flag[`${id2}_${IsDicom}`] = false;
|
||||||
console.log(err);
|
console.log(err);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -101,11 +112,11 @@ const setfolder = async (item) => {
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
saveAs(res, zipName + ".zip"); // 使用FileSaver.saveAs保存文件,文件名可自定义
|
saveAs(res, zipName + ".zip"); // 使用FileSaver.saveAs保存文件,文件名可自定义
|
||||||
flag[id2] = false;
|
flag[`${id2}_${IsDicom}`] = false;
|
||||||
zipObj = null;
|
zipObj = null;
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.catch((reason) => { flag[id2] = false; });
|
.catch((reason) => { flag[`${id2}_${IsDicom}`] = false; });
|
||||||
};
|
};
|
||||||
const handleBatchDown = async (item, zip) => {
|
const handleBatchDown = async (item, zip) => {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
|
@ -142,3 +153,47 @@ 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);
|
||||||
|
}
|
|
@ -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.2.001</p>
|
<p style="margin-bottom: 20px">V1.5.3.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() }} 上海展影医疗科技有限公司
|
||||||
版权所有
|
版权所有
|
||||||
|
|
|
@ -121,7 +121,7 @@ export default {
|
||||||
// 获取非Dicom检查信息
|
// 获取非Dicom检查信息
|
||||||
getNoneDicomList() {
|
getNoneDicomList() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
getNoneDicomStudyList(this.subjectVisitId, this.studyId, true).then(res => {
|
getNoneDicomStudyList(this.subjectVisitId, this.studyId).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 => {
|
||||||
|
|
|
@ -62,7 +62,7 @@ export default {
|
||||||
// 获取非Dicom检查信息
|
// 获取非Dicom检查信息
|
||||||
getNoneDicomList() {
|
getNoneDicomList() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
getNoneDicomStudyList(this.subjectVisitId, '', true).then(res => {
|
getNoneDicomStudyList(this.subjectVisitId, '').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) => {
|
||||||
|
|
|
@ -203,6 +203,7 @@
|
||||||
>
|
>
|
||||||
<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"
|
||||||
|
@ -225,23 +226,17 @@
|
||||||
<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>
|
||||||
<!-- 提交 -->
|
<!-- 提交 -->
|
||||||
|
@ -317,12 +312,14 @@ 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 },
|
||||||
|
@ -390,7 +387,8 @@ export default {
|
||||||
judgeResultArmEnum: '',
|
judgeResultArmEnum: '',
|
||||||
criterionType: null,
|
criterionType: null,
|
||||||
openWindow: null,
|
openWindow: null,
|
||||||
isFixed:false
|
isFixed: false,
|
||||||
|
images: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// watch: {
|
// watch: {
|
||||||
|
@ -407,6 +405,7 @@ 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) {
|
||||||
|
@ -708,14 +707,42 @@ export default {
|
||||||
},
|
},
|
||||||
// 预览图片
|
// 预览图片
|
||||||
handlePictureCardPreview(file) {
|
handlePictureCardPreview(file) {
|
||||||
this.imageUrl = this.OSSclientConfig.basePath + file.url
|
this.images = this.fileList.map(f => this.OSSclientConfig.basePath + f.url)
|
||||||
this.imgVisible = true
|
// this.imageUrl = this.OSSclientConfig.basePath + file.url
|
||||||
|
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 }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,15 @@
|
||||||
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"
|
||||||
|
@ -172,8 +181,7 @@
|
||||||
@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>
|
||||||
|
@ -262,6 +270,7 @@
|
||||||
</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'
|
||||||
|
@ -822,8 +831,30 @@ export default {
|
||||||
sysRes = this.$fd('OverallAssessment', this.tumorEvaluate)
|
sysRes = this.$fd('OverallAssessment', this.tumorEvaluate)
|
||||||
curRes = this.$fd('OverallAssessment', this.currentEvaluateResult)
|
curRes = this.$fd('OverallAssessment', this.currentEvaluateResult)
|
||||||
}
|
}
|
||||||
let msg = this.$t('trials:readingReport:message:msg9').replace('xxx','<font color="red">' + sysRes + '</font>').replace('yyy','<font color="red">' + curRes + '</font>')
|
const 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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,15 @@
|
||||||
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>
|
||||||
|
@ -260,6 +269,7 @@
|
||||||
</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'
|
||||||
|
@ -828,6 +838,28 @@ 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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,14 @@
|
||||||
</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>
|
||||||
|
@ -142,6 +149,7 @@
|
||||||
<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'
|
||||||
|
@ -377,6 +385,28 @@ 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)
|
||||||
|
|
|
@ -29,11 +29,22 @@
|
||||||
{{ $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;">
|
||||||
<el-button
|
<viewer
|
||||||
type="text"
|
v-if="file.ImagePath"
|
||||||
size="mini"
|
:ref="file.ImagePath"
|
||||||
@click="previewImage(file.ImagePath)"
|
style="margin:0 10px;"
|
||||||
>{{ file.FileName }}</el-button>
|
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]"
|
||||||
|
>
|
||||||
|
<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>
|
||||||
|
@ -97,22 +108,6 @@
|
||||||
</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"
|
||||||
|
@ -137,6 +132,7 @@ 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 },
|
||||||
|
@ -170,6 +166,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.initializeViewer()
|
||||||
this.getMessageList()
|
this.getMessageList()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -204,6 +201,12 @@ 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 }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,22 @@
|
||||||
{{ $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;">
|
||||||
<el-button
|
<viewer
|
||||||
type="text"
|
v-if="file.ImagePath"
|
||||||
size="mini"
|
:ref="file.ImagePath"
|
||||||
@click="previewImage(file.ImagePath)"
|
style="margin:0 10px;"
|
||||||
>{{ file.FileName }}</el-button>
|
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]"
|
||||||
|
>
|
||||||
|
<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>
|
||||||
|
@ -125,19 +136,6 @@
|
||||||
</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"
|
||||||
|
@ -154,6 +152,7 @@
|
||||||
@close="irFeedbackForm.visible = false"
|
@close="irFeedbackForm.visible = false"
|
||||||
/>
|
/>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
@ -161,6 +160,7 @@ 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,6 +196,7 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.initializeViewer()
|
||||||
this.getMessageList()
|
this.getMessageList()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -242,12 +243,18 @@ 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 }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,7 @@
|
||||||
>
|
>
|
||||||
<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"
|
||||||
|
@ -114,24 +115,26 @@
|
||||||
<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"
|
||||||
|
@ -170,6 +173,7 @@
|
||||||
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: {
|
||||||
|
@ -220,10 +224,12 @@ 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: {
|
||||||
|
@ -379,14 +385,20 @@ export default {
|
||||||
},
|
},
|
||||||
// 预览图片
|
// 预览图片
|
||||||
handlePictureCardPreview(file) {
|
handlePictureCardPreview(file) {
|
||||||
this.imageUrl = this.OSSclientConfig.basePath + file.url
|
this.images = this.fileList.map(f => this.OSSclientConfig.basePath + f.url)
|
||||||
this.imgVisible = true
|
// this.imageUrl = this.OSSclientConfig.basePath + file.url
|
||||||
|
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}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,14 @@
|
||||||
>
|
>
|
||||||
{{ $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"
|
||||||
|
@ -253,6 +261,7 @@
|
||||||
</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'
|
||||||
|
@ -554,6 +563,28 @@ 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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,8 +78,7 @@
|
||||||
? '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>
|
||||||
<!-- 受试者编号 -->
|
<!-- 受试者编号 -->
|
||||||
|
@ -117,8 +116,7 @@
|
||||||
? '#E6A23C'
|
? '#E6A23C'
|
||||||
: '#409EFF',
|
: '#409EFF',
|
||||||
}"
|
}"
|
||||||
>{{ scope.row.UrgentCount }}</span
|
>{{ scope.row.UrgentCount }}</span>
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<!-- 建议完成时间 -->
|
<!-- 建议完成时间 -->
|
||||||
|
@ -157,12 +155,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')"
|
||||||
|
@ -170,12 +168,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')"
|
||||||
|
@ -264,8 +262,8 @@
|
||||||
<upload-image
|
<upload-image
|
||||||
v-if="uploadImageVisible"
|
v-if="uploadImageVisible"
|
||||||
:visible.sync="uploadImageVisible"
|
:visible.sync="uploadImageVisible"
|
||||||
:SubjectId="uploadSubjectId"
|
:subject-id="uploadSubjectId"
|
||||||
:Criterion="uploadTrialCriterion"
|
:criterion="uploadTrialCriterion"
|
||||||
:status="uploadStatus"
|
:status="uploadStatus"
|
||||||
@getList="getList"
|
@getList="getList"
|
||||||
/>
|
/>
|
||||||
|
@ -274,35 +272,36 @@
|
||||||
<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 BaseContainer from "@/components/BaseContainer";
|
import { clearSkipReadingCache } from '@/api/reading'
|
||||||
import uploadImage from "@/components/uploadImage";
|
import BaseContainer from '@/components/BaseContainer'
|
||||||
import Pagination from "@/components/Pagination";
|
import uploadImage from '@/components/uploadImage'
|
||||||
import { getToken } from "@/utils/auth";
|
import Pagination from '@/components/Pagination'
|
||||||
|
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,
|
||||||
|
@ -312,147 +311,146 @@ 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
|
||||||
},
|
},
|
||||||
getTrialCriterionList() {
|
async getTrialCriterionList() {
|
||||||
getTrialCriterionList(this.trialId)
|
try {
|
||||||
.then((res) => {
|
const res = await getTrialCriterionList(this.trialId)
|
||||||
this.trialCriterionList = res.Result;
|
if (res.IsSuccess) {
|
||||||
|
this.trialCriterionList = res.Result
|
||||||
this.TrialReadingCriterionId =
|
this.TrialReadingCriterionId =
|
||||||
this.trialCriterionList[0].TrialReadingCriterionId;
|
this.trialCriterionList[0].TrialReadingCriterionId
|
||||||
})
|
}
|
||||||
.catch(() => {});
|
} catch (e) {
|
||||||
},
|
console.log(e)
|
||||||
getList() {
|
}
|
||||||
this.loading = true;
|
},
|
||||||
this.searchData.TrialId = this.trialId;
|
async getList() {
|
||||||
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
|
try {
|
||||||
this.isRender = false;
|
this.loading = true
|
||||||
getIRUnReadSubjectTaskList(this.searchData)
|
this.searchData.TrialId = this.trialId
|
||||||
.then((res) => {
|
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
|
||||||
this.isReadingTaskViewInOrder =
|
this.isRender = false
|
||||||
res.OtherInfo.IsReadingTaskViewInOrder;
|
const res = await getIRUnReadSubjectTaskList(this.searchData)
|
||||||
this.readingTool = res.OtherInfo.ReadingTool;
|
if (res.IsSuccess) {
|
||||||
this.criterionType = res.OtherInfo.CriterionType;
|
this.isReadingTaskViewInOrder =
|
||||||
if (res.OtherInfo.IsReadingTaskViewInOrder) {
|
res.OtherInfo.IsReadingTaskViewInOrder
|
||||||
this.list = res.Result.CurrentPageData;
|
this.readingTool = res.OtherInfo.ReadingTool
|
||||||
this.total = res.Result.TotalCount;
|
this.criterionType = res.OtherInfo.CriterionType
|
||||||
} else {
|
if (res.OtherInfo.IsReadingTaskViewInOrder) {
|
||||||
this.randomReadInfo = res.OtherInfo.RandomReadInfo;
|
this.list = res.Result.CurrentPageData
|
||||||
|
this.total = res.Result.TotalCount
|
||||||
|
} else {
|
||||||
|
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()
|
||||||
},
|
},
|
||||||
handleReadImage(row) {
|
async handleReadImage(row) {
|
||||||
if (this.openWindow) {
|
if (this.openWindow) {
|
||||||
this.openWindow.close();
|
this.openWindow.close()
|
||||||
}
|
}
|
||||||
this.loading = true;
|
try {
|
||||||
verifyReadingRestTime()
|
this.loading = true
|
||||||
.then((_) => {
|
await clearSkipReadingCache()
|
||||||
this.loading = false;
|
await verifyReadingRestTime()
|
||||||
|
this.loading = false
|
||||||
window.localStorage.setItem(
|
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
|
||||||
"TrialReadingCriterionId",
|
var token = getToken()
|
||||||
this.TrialReadingCriterionId
|
var path = ''
|
||||||
);
|
|
||||||
var token = getToken();
|
|
||||||
var path = "";
|
|
||||||
if (this.readingTool === 0) {
|
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}`;
|
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}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&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");
|
this.openWindow = window.open(routeData.href, '_blank')
|
||||||
})
|
} catch (e) {
|
||||||
.catch(() => {
|
this.loading = false
|
||||||
this.loading = false;
|
console.log(e)
|
||||||
});
|
}
|
||||||
},
|
},
|
||||||
handleOutOfOrderReading() {
|
async handleOutOfOrderReading() {
|
||||||
if (this.openWindow) {
|
if (this.openWindow) {
|
||||||
this.openWindow.close();
|
this.openWindow.close()
|
||||||
}
|
}
|
||||||
this.loading = true;
|
try {
|
||||||
verifyReadingRestTime()
|
this.loading = true
|
||||||
.then((_) => {
|
await clearSkipReadingCache()
|
||||||
this.loading = false;
|
await verifyReadingRestTime()
|
||||||
window.localStorage.setItem(
|
this.loading = false
|
||||||
"TrialReadingCriterionId",
|
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
|
||||||
this.TrialReadingCriterionId
|
var token = getToken()
|
||||||
);
|
var path = ''
|
||||||
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}&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}&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 (e) {
|
||||||
|
this.loading = false
|
||||||
|
console.log(e)
|
||||||
}
|
}
|
||||||
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.PageIndex = 1
|
||||||
|
this.getList()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.searchData.SortField = column.prop;
|
|
||||||
this.searchData.PageIndex = 1;
|
|
||||||
this.getList();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -412,6 +412,7 @@ 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 },
|
||||||
|
@ -470,7 +471,8 @@ 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() {
|
||||||
|
@ -497,6 +499,12 @@ export default {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
btnLoading(){
|
||||||
|
store.dispatch("trials/setUnLock", this.btnLoading);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeDestroy(){
|
||||||
|
store.dispatch("trials/setUnLock", false);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 初始化非Dicom列表数据
|
// 初始化非Dicom列表数据
|
||||||
|
@ -752,12 +760,21 @@ 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 并发上传
|
// 并发上传
|
||||||
|
@ -814,16 +831,12 @@ 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: res.Result,
|
studyMonitorId: this.studyMonitorId,
|
||||||
uploadedFileList: uploadedFileList
|
uploadedFileList: uploadedFileList
|
||||||
}
|
}
|
||||||
uploadNoneDicomFile(params).then(res => {
|
uploadNoneDicomFile(params).then(res => {
|
||||||
|
@ -833,7 +846,6 @@ 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
|
||||||
|
|
|
@ -43,6 +43,16 @@
|
||||||
</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"
|
||||||
|
@ -285,6 +295,16 @@
|
||||||
</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"
|
||||||
|
@ -1198,6 +1218,7 @@ 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: {
|
||||||
|
@ -1310,6 +1331,9 @@ 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) {
|
||||||
|
@ -1332,6 +1356,18 @@ 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;
|
||||||
|
|
|
@ -63,7 +63,8 @@ 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,
|
||||||
|
|
Loading…
Reference in New Issue