重传临床数据取消基线限制
continuous-integration/drone/push Build is passing Details

uat_us
wangxiaoshuang 2024-06-14 16:12:04 +08:00
parent 6db7229cb2
commit 10a2238cba
3 changed files with 221 additions and 170 deletions

View File

@ -250,7 +250,7 @@ export default {
this.currentRow = { ...row }; this.currentRow = { ...row };
this.crc_model.visible = true; this.crc_model.visible = true;
this.userListLoading = true; this.userListLoading = true;
getTrialSiteCRCList(this.trialId, this.currentRow.SiteId) getTrialSiteCRCList(this.trialId, this.currentRow.TrialSiteId)
.then((res) => { .then((res) => {
this.userListLoading = false; this.userListLoading = false;
this.userList = res.Result; this.userList = res.Result;

View File

@ -130,11 +130,18 @@
</el-tab-pane> </el-tab-pane>
<!-- 临床数据采集data.IsBaseLine && --> <!-- 临床数据采集data.IsBaseLine && -->
<el-tab-pane <el-tab-pane
v-if="clinicalEnum>0" v-if="data.IsBaseLine && (otherInfo.IsHaveSubjectClinicalData||otherInfo.IsHaveVisitClinicalData)"
:label="$t('trials:uploadClinicalData:tab:uploadClinicalData')" :label="$t('trials:uploadClinicalData:tab:uploadClinicalData')"
name="clinical-data" name="clinical-data"
> >
<upload-clinical-data v-if="activeName==='clinical-data'" :data="data" :subject-id="data.SubjectId" :subject-visit-id="data.Id" :allow-add-or-edit="true" :enum-type="clinicalEnum" @getList="reFreshList" /> <upload-clinical-data v-if="activeName==='clinical-data'" :subject-visit-id="data.Id" :data="data" :enum-type="otherInfo.ClinicalInformationTransmissionEnum" :allow-add-or-edit="true" @getList="reFreshList" />
</el-tab-pane>
<el-tab-pane
v-if="!data.IsBaseLine && otherInfo.IsHaveVisitClinicalData"
:label="$t('trials:uploadClinicalData:tab:uploadClinicalData')"
name="clinical-data"
>
<upload-clinical-data v-if="activeName==='clinical-data'" :subject-visit-id="data.Id" :data="data" :enum-type="otherInfo.ClinicalInformationTransmissionEnum" :allow-add-or-edit="true" @getList="reFreshList" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@ -158,250 +165,296 @@
</div> </div>
</template> </template>
<script> <script>
import { getCRCVisitChallengeAndDialog, verifyReuploadIsCanJump, addQCChallengeReply, cRCRequestReUpload } from '@/api/trials' import {
import { setReuploadFinished } from '@/api/trials/visit' getCRCVisitChallengeAndDialog,
import adminAvatar from '@/assets/Admin.png' verifyReuploadIsCanJump,
import pmAvatar from '@/assets/PM.png' addQCChallengeReply,
import crcAvatar from '@/assets/CRC.png' cRCRequestReUpload,
import qcAvatar from '@/assets/QC.png' } from "@/api/trials";
import UploadDicomFiles from './uploadDicomFiles2' import { setReuploadFinished } from "@/api/trials/visit";
import UploadNonDicomFiles from './uploadNonDicomFiles' import adminAvatar from "@/assets/Admin.png";
import UploadClinicalData from './uploadClinicalData' import pmAvatar from "@/assets/PM.png";
import SignForm from '@/views/trials/components/newSignForm' import crcAvatar from "@/assets/CRC.png";
import dicomStore from '@/utils/dicom-store' import qcAvatar from "@/assets/QC.png";
import const_ from '@/const/sign-code' import UploadDicomFiles from "./uploadDicomFiles2";
import UploadNonDicomFiles from "./uploadNonDicomFiles";
import UploadClinicalData from "./uploadClinicalData";
import SignForm from "@/views/trials/components/newSignForm";
import dicomStore from "@/utils/dicom-store";
import const_ from "@/const/sign-code";
export default { export default {
name: 'HistoryChat', name: "HistoryChat",
components: { UploadDicomFiles, UploadNonDicomFiles, UploadClinicalData, SignForm }, components: {
UploadDicomFiles,
UploadNonDicomFiles,
UploadClinicalData,
SignForm,
},
props: { props: {
data: { data: {
type: Object, type: Object,
default() { default() {
return {} return {};
} },
},
otherInfo: {
type: Object,
default() {
return {};
},
}, },
bodyParts: { bodyParts: {
type: String, type: String,
default: '' default: "",
}, },
modalities: { modalities: {
type: String, type: String,
default: '' default: "",
}, },
clinicalEnum: { clinicalEnum: {
type: Number, type: Number,
default: 0 default: 0,
} },
}, },
data() { data() {
return { return {
list: [], list: [],
loading: false, loading: false,
btnLoading: false, btnLoading: false,
newMessage: '', newMessage: "",
userId: zzSessionStorage.getItem('userId'), userId: zzSessionStorage.getItem("userId"),
trialCode: this.$route.query.trialCode, trialCode: this.$route.query.trialCode,
adminAvatar, adminAvatar,
pmAvatar, pmAvatar,
crcAvatar, crcAvatar,
qcAvatar, qcAvatar,
uploadVisible: false, uploadVisible: false,
activeName: 'dicom', activeName: "dicom",
currentChallengeIndex: null, currentChallengeIndex: null,
signVisible: false, signVisible: false,
signCode: '', signCode: "",
currentUser: zzSessionStorage.getItem('userName'), currentUser: zzSessionStorage.getItem("userName"),
trialId: this.$route.query.trialId, trialId: this.$route.query.trialId,
uploadBtnLoading: false, uploadBtnLoading: false,
applyBtnLoading: false, applyBtnLoading: false,
reuploadedFinishbtnLoading: false reuploadedFinishbtnLoading: false,
} };
}, },
mounted() { mounted() {
this.initChat() this.initChat();
}, },
methods: { methods: {
clickTab(tab) { clickTab(tab) {
this.setScrollHeight(tab.index * 1) this.setScrollHeight(tab.index * 1);
}, },
// //
initChat(index) { initChat(index) {
var list = [] var list = [];
this.loading = true this.loading = true;
getCRCVisitChallengeAndDialog(this.data.Id, this.data.QCProcessEnum).then(res => { getCRCVisitChallengeAndDialog(this.data.Id, this.data.QCProcessEnum)
res.Result.forEach(item => { .then((res) => {
var contents = [] res.Result.forEach((item) => {
if (item.Content && item.Content.indexOf('|') !== -1) { var contents = [];
contents = item.Content.split('|') if (item.Content && item.Content.indexOf("|") !== -1) {
} else if (item.Content && item.Content !== '') { contents = item.Content.split("|");
contents.push(item.Content) } else if (item.Content && item.Content !== "") {
contents.push(item.Content);
} }
var li = contents.map(content => { return `<li>${content}</li>` }) var li = contents.map((content) => {
return `<li>${content}</li>`;
});
const content = ` const content = `
<div>${this.$t('trials:qcQuality:dialog:qcContent')} <div>${this.$t("trials:qcQuality:dialog:qcContent")}
<ol> <ol>
${li.join('')} ${li.join("")}
</ol> </ol>
</div> </div>
<p> <p>
${this.$t('trials:qcQuality:dialogTips:tip')} ${this.$t("trials:qcQuality:dialogTips:tip")}
</p> </p>
<p style='color:red'>${this.$t('trials:qcQuality:dialog:deadline')}: ${item.DeadlineTime ? item.DeadlineTime : this.$t('trials:qcQuality:dialog:none')}</p>` <p style='color:red'>${this.$t(
const userId = zzSessionStorage.getItem('userId') "trials:qcQuality:dialog:deadline"
var recordContent = [] )}: ${
recordContent.push( item.DeadlineTime
{ ? item.DeadlineTime
: this.$t("trials:qcQuality:dialog:none")
}</p>`;
const userId = zzSessionStorage.getItem("userId");
var recordContent = [];
recordContent.push({
IsCurrentUser: item.CreateUserId === userId, IsCurrentUser: item.CreateUserId === userId,
TalkContent: content, TalkContent: content,
CreateTime: item.CreateTime, CreateTime: item.CreateTime,
CreateUserName: item.CreateUserName, CreateUserName: item.CreateUserName,
CreateUserId: item.CreateUserId, CreateUserId: item.CreateUserId,
UserTypeEnum: item.UserTypeEnum UserTypeEnum: item.UserTypeEnum,
});
} recordContent.push(...item.DialogList);
) list.push({
recordContent.push(...item.DialogList) Id: item.Id,
list.push({ Id: item.Id, ChallengeCode: item.ChallengeCode, IsClosed: item.IsClosed, ReuploadEnum: item.ReuploadEnum * 1, DialogList: recordContent, Content: item.Content, DeadlineTime: item.DeadlineTime, IsOverTime: item.IsOverTime }) ChallengeCode: item.ChallengeCode,
this.list = Object.assign({}, list) IsClosed: item.IsClosed,
this.loading = false ReuploadEnum: item.ReuploadEnum * 1,
this.setScrollHeight(index || 0) DialogList: recordContent,
Content: item.Content,
DeadlineTime: item.DeadlineTime,
IsOverTime: item.IsOverTime,
});
this.list = Object.assign({}, list);
this.loading = false;
this.setScrollHeight(index || 0);
});
}) })
}).catch(() => { this.loading = false }) .catch(() => {
this.loading = false;
});
}, },
setScrollHeight(index) { setScrollHeight(index) {
setTimeout(() => { setTimeout(() => {
var container = document.querySelectorAll('.chat-content')[index] var container = document.querySelectorAll(".chat-content")[index];
container.scrollTop = container.scrollHeight container.scrollTop = container.scrollHeight;
}, 100) }, 100);
}, },
// //
handleReply(qcChallengeId, index) { handleReply(qcChallengeId, index) {
if (!this.newMessage) return if (!this.newMessage) return;
this.btnLoading = true this.btnLoading = true;
var params = { var params = {
talkContent: this.newMessage, talkContent: this.newMessage,
qcChallengeId: qcChallengeId, qcChallengeId: qcChallengeId,
subjectVisitId: this.data.Id subjectVisitId: this.data.Id,
} };
addQCChallengeReply(this.data.TrialId, params).then(res => { addQCChallengeReply(this.data.TrialId, params)
.then((res) => {
if (res.IsSuccess) { if (res.IsSuccess) {
// this.list[index].DialogList.push({ IsCurrentUser: true, TalkContent: this.newMessage, CreateTime: res.Result.CreateTime, CreateUserName: res.Result.CreateUserName, CreateUserId: res.Result.CreateUserId, UserTypeEnum: res.Result.UserTypeEnum }) // this.list[index].DialogList.push({ IsCurrentUser: true, TalkContent: this.newMessage, CreateTime: res.Result.CreateTime, CreateUserName: res.Result.CreateUserName, CreateUserId: res.Result.CreateUserId, UserTypeEnum: res.Result.UserTypeEnum })
this.initChat(index) this.initChat(index);
this.newMessage = '' this.newMessage = "";
} }
this.btnLoading = false this.btnLoading = false;
}).catch(() => { this.btnLoading = false }) })
.catch(() => {
this.btnLoading = false;
});
}, },
// //
openUploadDialog(index) { openUploadDialog(index) {
const qcChallengeId = this.list[index].Id const qcChallengeId = this.list[index].Id;
if (!qcChallengeId) return if (!qcChallengeId) return;
this.uploadBtnLoading = true this.uploadBtnLoading = true;
verifyReuploadIsCanJump(this.trialId, qcChallengeId).then(res => { verifyReuploadIsCanJump(this.trialId, qcChallengeId)
this.uploadBtnLoading = false .then((res) => {
this.uploadBtnLoading = false;
if (res.IsSuccess) { if (res.IsSuccess) {
dicomStore.studyList = [] dicomStore.studyList = [];
this.uploadVisible = true this.uploadVisible = true;
} }
}).catch(() => {
this.initChat(index)
this.$emit('getList')
this.uploadBtnLoading = false
}) })
.catch(() => {
this.initChat(index);
this.$emit("getList");
this.uploadBtnLoading = false;
});
}, },
// //
closeUpload() { closeUpload() {
this.uploadVisible = false this.uploadVisible = false;
}, },
// //
reFreshList() { reFreshList() {
this.$emit('getList') this.$emit("getList");
}, },
// //
handleSetUploadFinished(index) { handleSetUploadFinished(index) {
if (this.clinicalEnum > 0 && this.data.IsBaseLine) { if (this.clinicalEnum > 0 && this.data.IsBaseLine) {
this.currentChallengeIndex = index this.currentChallengeIndex = index;
const { ClinicalDataConfirmation } = const_.processSignature const { ClinicalDataConfirmation } = const_.processSignature;
this.signCode = ClinicalDataConfirmation this.signCode = ClinicalDataConfirmation;
this.signVisible = true this.signVisible = true;
} else { } else {
this.$confirm(this.$t('trials:crcQuestion:message:reuploadConfirm'), { this.$confirm(this.$t("trials:crcQuestion:message:reuploadConfirm"), {
type: 'warning', type: "warning",
distinguishCancelAndClose: true distinguishCancelAndClose: true,
}) })
.then(() => { .then(() => {
this.currentChallengeIndex = index this.currentChallengeIndex = index;
this.setReuploadFinished() this.setReuploadFinished();
}).catch(() => {}) })
.catch(() => {});
} }
}, },
setReuploadFinished(signInfo) { setReuploadFinished(signInfo) {
this.loading = true this.loading = true;
var item = Object.assign({}, this.list[this.currentChallengeIndex]) var item = Object.assign({}, this.list[this.currentChallengeIndex]);
var params = { var params = {
data: { data: {
QcChallengeId: item.Id, QcChallengeId: item.Id,
TrialId: this.trialId, TrialId: this.trialId,
SetOrCancel: true SetOrCancel: true,
}, },
signInfo: signInfo signInfo: signInfo,
} };
this.loading = true this.loading = true;
this.reuploadedFinishbtnLoading = true this.reuploadedFinishbtnLoading = true;
setReuploadFinished(params) setReuploadFinished(params)
.then(res => { .then((res) => {
this.loading = false this.loading = false;
this.reuploadedFinishbtnLoading = false this.reuploadedFinishbtnLoading = false;
if (res.IsSuccess) { if (res.IsSuccess) {
if (signInfo) { if (signInfo) {
this.$refs['signForm'].btnLoading = false this.$refs["signForm"].btnLoading = false;
this.signVisible = false this.signVisible = false;
} }
this.list[this.currentChallengeIndex].ReuploadEnum = 3 this.list[this.currentChallengeIndex].ReuploadEnum = 3;
this.initChat() this.initChat();
// this.$message.success(this.$t('common:message:savedSuccessfully')) // this.$message.success(this.$t('common:message:savedSuccessfully'))
this.reFreshList() this.reFreshList();
} }
}).catch(() => {
this.loading = false
this.reuploadedFinishbtnLoading = false
this.$refs['signForm'].btnLoading = false
}) })
.catch(() => {
this.loading = false;
this.reuploadedFinishbtnLoading = false;
this.$refs["signForm"].btnLoading = false;
});
}, },
// //
closeClinicalDataSignDialog(isSign, signInfo) { closeClinicalDataSignDialog(isSign, signInfo) {
if (isSign) { if (isSign) {
this.setReuploadFinished(signInfo) this.setReuploadFinished(signInfo);
} else { } else {
this.signVisible = false this.signVisible = false;
} }
}, },
// crc // crc
handleCRCApplyReupload(item) { handleCRCApplyReupload(item) {
this.$confirm(this.$t('trials:crcQuestion:message:applyReupload'), { this.$confirm(this.$t("trials:crcQuestion:message:applyReupload"), {
type: 'warning', type: "warning",
distinguishCancelAndClose: true distinguishCancelAndClose: true,
}) })
.then(() => { .then(() => {
this.applyBtnLoading = true this.applyBtnLoading = true;
cRCRequestReUpload(this.trialId, this.data.Id, item.Id) cRCRequestReUpload(this.trialId, this.data.Id, item.Id)
.then(res => { .then((res) => {
this.applyBtnLoading = false this.applyBtnLoading = false;
if (res.IsSuccess) { if (res.IsSuccess) {
item.ReuploadEnum = 1 item.ReuploadEnum = 1;
this.initChat() this.initChat();
// this.$message.success(this.$t('common:message:savedSuccessfully')) // this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$forceUpdate() this.$forceUpdate();
this.reFreshList() this.reFreshList();
} }
}).catch(() => { this.applyBtnLoading = false }) })
}).catch(() => {}) .catch(() => {
} this.applyBtnLoading = false;
} });
} })
.catch(() => {});
},
},
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.history-chat{ .history-chat {
height: 500px; height: 500px;
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 7px; width: 7px;
@ -411,90 +464,90 @@ export default {
border-radius: 10px; border-radius: 10px;
background: #d0d0d0; background: #d0d0d0;
} }
/deep/ .el-tabs{ /deep/ .el-tabs {
/deep/ .el-tabs__header{ /deep/ .el-tabs__header {
width: 100px; width: 100px;
margin-right: 10px; margin-right: 10px;
height: 500px; height: 500px;
overflow-y: auto; overflow-y: auto;
} }
/deep/ .el-tabs__content{ /deep/ .el-tabs__content {
margin-right: 10px; margin-right: 10px;
height: 500px; height: 500px;
width: calc(100%-120px); width: calc(100%-120px);
overflow-y: auto; overflow-y: auto;
} }
.chat-wrapper{ .chat-wrapper {
background-color: #f5f7fa; background-color: #f5f7fa;
height: 500px; height: 500px;
display: flex; display: flex;
flex-direction: column !important; flex-direction: column !important;
overflow: hidden; overflow: hidden;
.chat-content{ .chat-content {
width:100%; width: 100%;
padding: 20px; padding: 20px;
// height: 400px; // height: 400px;
overflow-y: auto; overflow-y: auto;
flex: 1; flex: 1;
.word{ .word {
display: flex; display: flex;
margin-bottom: 20px; margin-bottom: 20px;
img{ img {
width:40px; width: 40px;
height: 40px; height: 40px;
border-radius: 50%; border-radius: 50%;
} }
.info{ .info {
margin-left: 10px; margin-left: 10px;
.user-info{ .user-info {
font-size: 12px; font-size: 12px;
color:rgba(51,51,51,0.8); color: rgba(51, 51, 51, 0.8);
margin:0; margin: 0;
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
margin-top: -5px; margin-top: -5px;
} }
.info-content{ .info-content {
padding: 10px; padding: 10px;
font-size: 14px; font-size: 14px;
background-color: #ebeef5; background-color: #ebeef5;
position: relative; position: relative;
margin-top: 8px; margin-top: 8px;
} }
.info-content::before{ .info-content::before {
position: absolute; position: absolute;
left: -8px; left: -8px;
top: 8px; top: 8px;
content: ''; content: "";
border-right: 10px solid #ebeef5; border-right: 10px solid #ebeef5;
border-top: 8px solid transparent; border-top: 8px solid transparent;
border-bottom: 8px solid transparent; border-bottom: 8px solid transparent;
} }
} }
} }
.word-my{ .word-my {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
margin-bottom: 20px; margin-bottom: 20px;
img{ img {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 50%; border-radius: 50%;
} }
.info{ .info {
width: 90%; width: 90%;
margin-left: 10px; margin-left: 10px;
text-align: right; text-align: right;
.user-info{ .user-info {
font-size: 12px; font-size: 12px;
color: rgba(51,51,51,0.8); color: rgba(51, 51, 51, 0.8);
margin: 0; margin: 0;
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
margin-top: -5px; margin-top: -5px;
margin-right: 10px; margin-right: 10px;
} }
.info-content{ .info-content {
position: relative; position: relative;
max-width: 70%; max-width: 70%;
padding: 10px; padding: 10px;
@ -506,11 +559,11 @@ export default {
color: #fff; color: #fff;
text-align: left; text-align: left;
} }
.info-content::after{ .info-content::after {
position: absolute; position: absolute;
right: -8px; right: -8px;
top: 8px; top: 8px;
content: ''; content: "";
border-left: 10px solid #7574d9; border-left: 10px solid #7574d9;
border-top: 8px solid transparent; border-top: 8px solid transparent;
border-bottom: 8px solid transparent; border-bottom: 8px solid transparent;
@ -518,21 +571,19 @@ export default {
} }
} }
} }
.chat-message{ .chat-message {
height: 100px; height: 100px;
padding: 0 50px; padding: 0 50px;
.function{ .function {
margin-top: 10px; margin-top: 10px;
text-align: right; text-align: right;
} }
} }
ol{ ol {
margin: 5px; margin: 5px;
padding: 0px 10px; padding: 0px 10px;
} }
} }
} }
} }
</style> </style>

View File

@ -592,7 +592,7 @@
<!-- 历史质疑 --> <!-- 历史质疑 -->
<base-model :config="chat_cfg"> <base-model :config="chat_cfg">
<template slot="dialog-body"> <template slot="dialog-body">
<HistoryChat v-if="rowData.Id" :data="rowData" :body-parts="otherInfo.BodyPartTypes" :modalities="otherInfo.Modalitys" :clinical-enum="otherInfo.ClinicalInformationTransmissionEnum" @getList="getList" /> <HistoryChat v-if="rowData.Id" :otherInfo="otherInfo" :data="rowData" :body-parts="otherInfo.BodyPartTypes" :modalities="otherInfo.Modalitys" :clinical-enum="otherInfo.ClinicalInformationTransmissionEnum" @getList="getList" />
</template> </template>
</base-model> </base-model>