Compare commits

..

No commits in common. "6eb971e263d225b7eb27aa21fe23e3ef09ffb064" and "64a5a7f89ce13aba9cee62003d4c3dbd8c69d033" have entirely different histories.

1 changed files with 159 additions and 204 deletions

View File

@ -1,5 +1,6 @@
<template>
<div class="conclusions">
<el-form
ref="conclusionsForm"
v-loading="loading"
@ -11,15 +12,13 @@
<el-form-item
:label="$t('trials:medicalFeedback:button:isQuestions')"
prop="IsHaveQuestion"
:rules="[{ required: true, message: $t('common:ruleMessage:select') }]"
:rules="[
{ required: true, message: $t('common:ruleMessage:select')},
]"
>
<el-radio-group
v-model="form.IsHaveQuestion"
:disabled="
isSendMessage ||
auditState === 2 ||
!hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])
"
:disabled="isSendMessage || auditState===2 || !hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])"
@change="isHaveQuestionChange"
>
<el-radio
@ -39,18 +38,16 @@
maxlength="500"
autosize
show-word-limit
:rules="[{ required: true, message: $t('common:ruleMessage:specify') }]"
:rules="[
{ required: true, message: $t('common:ruleMessage:specify')},
]"
>
<el-input
v-model="form.Questioning"
type="textarea"
:autosize="{ minRows: 3, maxRows: 5}"
maxlength="500"
:disabled="
isSendMessage ||
auditState === 2 ||
!hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])
"
:disabled="isSendMessage || auditState===2 || !hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])"
/>
</el-form-item>
<!-- 审核建议 -->
@ -58,15 +55,13 @@
v-if="form.IsHaveQuestion === true"
:label="$t('trials:medicalFeedback:title:auditAdviceEnum')"
prop="AuditAdviceEnum"
:rules="[{ required: true, message: $t('common:ruleMessage:select') }]"
:rules="[
{ required: true, message: $t('common:ruleMessage:select')},
]"
>
<el-radio-group
v-model="form.AuditAdviceEnum"
:disabled="
isSendMessage ||
auditState === 2 ||
!hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])
"
:disabled="isSendMessage || auditState===2 || !hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])"
>
<el-radio
v-for="item of $d.AuditAdvice"
@ -91,33 +86,19 @@
list-type="picture-card"
:on-remove="handleRemove"
:file-list="fileList"
:disabled="
isSendMessage ||
auditState === 2 ||
!hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])
"
:disabled="isSendMessage || auditState===2 || !hasPermi(['trials:trials-panel:reading:mim-medical-audit:edit'])"
style="width:300px"
>
<i slot="default" class="el-icon-plus" />
<div slot="file" slot-scope="{ file }" style="width: 100%; height: 100%">
<viewer
:ref="file.url"
:images="images"
style="
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
"
>
<div slot="file" slot-scope="{file}">
<viewer :ref="file.url" :images="images">
<img
class="el-upload-list__item-thumbnail"
:src="OSSclientConfig.basePath + file.url"
crossOrigin="anonymous"
alt=""
style="max-width: 100%; max-height: 100%"
/>
>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@ -149,6 +130,7 @@
</el-image>
</el-dialog> -->
</el-form-item>
</el-form>
<!-- <viewer v-if="imgVisible" :images="[imageUrl]" ref="viewer">
<img :src="imageUrl" crossorigin="anonymous" alt="">
@ -158,9 +140,7 @@
:visible.sync="chatVisible"
:close-on-click-modal="false"
width="800px"
:title="`${$t(
'trials:medicalFeedback:title:qaRecord'
)} (${subjectCode} ${taskBlindName})`"
:title="`${$t('trials:medicalFeedback:title:qaRecord')} (${subjectCode} ${taskBlindName})`"
append-to-body
>
<ChatForm
@ -190,268 +170,245 @@
</div>
</template>
<script>
import { saveMedicalReviewInfo } from "@/api/trials";
import ChatForm from "./ChatForm";
import CloseQC from "./CloseQC";
import Viewer from "v-viewer";
import { saveMedicalReviewInfo } from '@/api/trials'
import ChatForm from './ChatForm'
import CloseQC from './CloseQC'
import Viewer from 'v-viewer'
export default {
name: "AuditConclusions",
name: 'AuditConclusions',
components: {
ChatForm,
CloseQC,
CloseQC
},
props: {
medicalReviewInfo: {
type: Object,
default() {
return {};
},
return {}
}
},
auditState: {
type: Number,
required: true,
required: true
},
visitTaskId: {
type: String,
required: true,
required: true
},
subjectCode: {
type: String,
required: true,
required: true
},
taskBlindName: {
type: String,
required: true,
},
required: true
}
},
data() {
return {
form: {
TaskMedicalReviewId: "",
TaskMedicalReviewId: '',
IsHaveQuestion: null,
Questioning: "",
Questioning: '',
AuditAdviceEnum: null,
FileList: [],
FileList: []
},
loading: false,
accept: ".png,.jpg,.jpeg",
accept: '.png,.jpg,.jpeg',
imgVisible: false,
imageUrl: "",
imageUrl: '',
uploadDisabled: false,
fileList: [],
chatVisible: false,
userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
isClosedDialog: false,
isSendMessage: false,
closeQuestionVisible: false,
images: [],
};
images: []
}
},
mounted() {
this.initializeViewer();
this.initForm();
this.initializeViewer()
this.initForm()
},
methods: {
initForm() {
if (Object.keys(this.medicalReviewInfo).length > 0) {
for (const k in this.form) {
if (this.medicalReviewInfo.hasOwnProperty(k)) {
this.form[k] = this.medicalReviewInfo[k];
this.form[k] = this.medicalReviewInfo[k]
}
}
this.fileList = [];
this.fileList = []
if (this.form.FileList) {
this.form.FileList.map((file) => {
this.fileList.push({ name: file.FileName, url: file.ImagePath });
});
this.form.FileList.map(file => {
this.fileList.push({ name: file.FileName, url: file.ImagePath })
})
}
this.isClosedDialog = this.medicalReviewInfo.IsClosedDialog;
this.isSendMessage = this.medicalReviewInfo.IsSendMessage;
this.isClosedDialog = this.medicalReviewInfo.IsClosedDialog
this.isSendMessage = this.medicalReviewInfo.IsSendMessage
}
},
handleSave(isPrompt) {
return new Promise((resolve, reject) => {
this.$refs["conclusionsForm"].validate((valid) => {
this.$refs['conclusionsForm'].validate((valid) => {
if (!valid) {
reject();
reject()
} else {
this.form.IsSendDialog = this.form.IsHaveQuestion;
var files = [];
this.fileList.map((file) => {
files.push({ FileName: file.name, ImagePath: file.url });
});
this.form.FileList = files;
saveMedicalReviewInfo(this.form)
.then((res) => {
if (isPrompt) {
this.$message.success(
this.$t("common:message:savedSuccessfully")
);
this.$emit("getMedicalAuditList");
}
this.isSendMessage = this.form.IsHaveQuestion;
resolve();
this.form.IsSendDialog = this.form.IsHaveQuestion
var files = []
this.fileList.map(file => {
files.push({ FileName: file.name, ImagePath: file.url })
})
.catch(() => {
reject();
});
this.form.FileList = files
saveMedicalReviewInfo(this.form).then(res => {
if (isPrompt) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
this.$emit('getMedicalAuditList')
}
});
});
this.isSendMessage = this.form.IsHaveQuestion
resolve()
}).catch(() => {
reject()
})
}
})
})
},
save() {
return new Promise((resolve, reject) => {
this.$refs["conclusionsForm"].validate((valid) => {
this.$refs['conclusionsForm'].validate((valid) => {
if (!valid) {
resolve(false);
resolve(false)
} else {
this.loading = true;
this.form.IsSendDialog = this.form.IsHaveQuestion;
var files = [];
this.fileList.map((file) => {
files.push({ FileName: file.name, ImagePath: file.url });
});
this.form.FileList = files;
saveMedicalReviewInfo(this.form)
.then((res) => {
this.$emit("getMedicalAuditList");
this.isSendMessage = this.form.IsHaveQuestion;
this.loading = false;
resolve(true);
this.loading = true
this.form.IsSendDialog = this.form.IsHaveQuestion
var files = []
this.fileList.map(file => {
files.push({ FileName: file.name, ImagePath: file.url })
})
this.form.FileList = files
saveMedicalReviewInfo(this.form).then(res => {
this.$emit('getMedicalAuditList')
this.isSendMessage = this.form.IsHaveQuestion
this.loading = false
resolve(true)
}).catch(() => {
this.loading = false
reject()
})
.catch(() => {
this.loading = false;
reject();
});
}
});
});
})
})
},
validForm() {
return new Promise((resolve) => {
this.$refs["conclusionsForm"].validate((valid) => {
resolve(valid);
});
});
this.$refs['conclusionsForm'].validate((valid) => {
resolve(valid)
})
})
},
handleReply() {
this.chatVisible = true;
this.chatVisible = true
},
handleCloseReply() {
this.closeQuestionVisible = true;
this.closeQuestionVisible = true
},
isHaveQuestionChange(val) {
this.$emit("setIsHaveQuestion", val);
this.$emit('setIsHaveQuestion', val)
},
refresh() {
this.isClosedDialog = true;
this.$emit("getMedicalAuditList");
this.$refs["chatForm"].getMessageList();
this.$emit("handleSign");
this.isClosedDialog = true
this.$emit('getMedicalAuditList')
this.$refs['chatForm'].getMessageList()
this.$emit('handleSign')
},
convertBase64ToBlob(imageEditorBase64) {
var base64Arr = imageEditorBase64.split(",");
var imgtype = "";
var base64String = "";
var base64Arr = imageEditorBase64.split(',')
var imgtype = ''
var base64String = ''
if (base64Arr.length > 1) {
// base64
base64String = base64Arr[1];
base64String = base64Arr[1]
imgtype = base64Arr[0].substring(
base64Arr[0].indexOf(":") + 1,
base64Arr[0].indexOf(";")
);
base64Arr[0].indexOf(':') + 1,
base64Arr[0].indexOf(';')
)
}
// base64
var bytes = atob(base64String);
var bytes = atob(base64String)
// var bytes = base64;
var bytesCode = new ArrayBuffer(bytes.length);
var bytesCode = new ArrayBuffer(bytes.length)
//
var byteArray = new Uint8Array(bytesCode);
var byteArray = new Uint8Array(bytesCode)
// base64ascii
for (var i = 0; i < bytes.length; i++) {
byteArray[i] = bytes.charCodeAt(i);
byteArray[i] = bytes.charCodeAt(i)
}
// Blob
return new Blob([bytesCode], { type: imgtype });
return new Blob([bytesCode], { type: imgtype })
},
async uploadScreenshot(param) {
this.loading = true;
this.loading = true
try {
var file = await this.fileToBlob(param.file);
var trialId = this.$route.query.trialId;
const res = await this.OSSclient.put(
`/${trialId}/MedicalReview/${param.file.name}`,
file
);
this.fileList.push({
name: param.file.name,
url: this.$getObjectName(res.url),
});
this.loading = false;
var file = await this.fileToBlob(param.file)
var trialId = this.$route.query.trialId
const res = await this.OSSclient.put(`/${trialId}/MedicalReview/${param.file.name}`, file)
this.fileList.push({ name: param.file.name, url: this.$getObjectName(res.url) })
this.loading = false
} catch (e) {
console.log(e);
console.log(e)
}
},
handleBeforeUpload(file) {
//
if (this.checkFileSuffix(file.name)) {
return true;
return true
} else {
var msg = this.$t("trials:medicalFeedback:message:format");
msg = msg.replace("xxx", this.accept);
this.$alert(msg);
return false;
var msg = this.$t('trials:medicalFeedback:message:format')
msg = msg.replace('xxx', this.accept)
this.$alert(msg)
return false
}
},
checkFileSuffix(fileName) {
var index = fileName.lastIndexOf(".");
var suffix = fileName.substring(index + 1, fileName.length);
if (
this.accept.toLocaleLowerCase().search(suffix.toLocaleLowerCase()) ===
-1
) {
return false;
var index = fileName.lastIndexOf('.')
var suffix = fileName.substring(index + 1, fileName.length)
if (this.accept.toLocaleLowerCase().search(suffix.toLocaleLowerCase()) === -1) {
return false
} else {
return true;
return true
}
},
//
handlePictureCardPreview(file) {
this.images = this.fileList.map(
(f) => this.OSSclientConfig.basePath + f.url
);
this.images = this.fileList.map(f => this.OSSclientConfig.basePath + f.url)
// this.imageUrl = this.OSSclientConfig.basePath + file.url
this.$refs[file.url].$viewer.show();
this.$refs[file.url].$viewer.show()
},
//
handleRemove(file, fileList) {
var idx = this.fileList.findIndex((i) => i.url === file.url);
if (idx === -1) return;
this.fileList.splice(idx, 1);
var idx = this.fileList.findIndex(i => i.url === file.url)
if (idx === -1) return
this.fileList.splice(idx, 1)
},
initializeViewer() {
Viewer.setDefaults({
toolbar: {
zoomIn: true,
zoomOut: true,
rotateLeft: true,
rotateRight: true,
flipHorizontal: true,
flipVertical: true,
},
});
},
},
};
toolbar: { zoomIn: true, zoomOut: true, rotateLeft: true, rotateRight: true, flipHorizontal: true, flipVertical: true }
})
}
}
}
</script>
<style lang="scss" scoped>
.conclusions{
.disabled{
/deep/ .el-upload--picture-card {
display: none;
}
}
/deep/ .el-upload-list__item {
@ -464,11 +421,9 @@ export default {
/* 图片在方框内显示长边 */
object-fit: scale-down !important;
}
.el-radio-group,
.el-textarea,
.el-input,
.el-select {
.el-radio-group,.el-textarea,.el-input,.el-select{
width:300px;
}
}
</style>