Compare commits
40 Commits
988317d0cd
..
v1.7.0
| Author | SHA1 | Date | |
|---|---|---|---|
| f58eb07323 | |||
| 83a14956e3 | |||
| ef2e7d4cf8 | |||
| 9e7ec09719 | |||
| 19f9c8012c | |||
| 506307690d | |||
| b945db8a47 | |||
| 7bb0213a8c | |||
| a75367480d | |||
| 64fd549d12 | |||
| f0ec643205 | |||
| 34c05a9728 | |||
| 49241bacfa | |||
| 3bb0250699 | |||
| 47dd21ea7e | |||
| 64d268b6e8 | |||
| 463ecee3d8 | |||
| 9936d8c942 | |||
| 1e132e0046 | |||
| 95097caac2 | |||
| dcde93b4f8 | |||
| e690aadd8a | |||
| 7874f69bfe | |||
| bdb45c7b4e | |||
| 0a4683386c | |||
| c73297003f | |||
| 4faff7e85c | |||
| 595e10a77a | |||
| 360826ef28 | |||
| cd7d261adf | |||
| 3ed09d16f6 | |||
| 2a016cf5f6 | |||
| 2d996941a2 | |||
| 2ac92aa8b3 | |||
| e8a21fa5a3 | |||
| 771554c9b2 | |||
| 3b7271d3a8 | |||
| d2ab510a3c | |||
| 7e8af2b4e5 | |||
| f9f3c55ea1 |
@@ -95,4 +95,12 @@ export function getTrialDownloadList(data) {
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
// 修改后处理检查类型
|
||||
export function updateTaskStudyModality(params) {
|
||||
return request({
|
||||
url: '/DownloadAndUpload/updateTaskStudyModality',
|
||||
method: 'put',
|
||||
params
|
||||
})
|
||||
}
|
||||
+4
-2
@@ -133,9 +133,11 @@ export function AddAdjudicationReport(param) {
|
||||
})
|
||||
}
|
||||
|
||||
export function getVisitStudyList(trialId, subjectVisitId, isReading) {
|
||||
export function getVisitStudyList(trialId, subjectVisitId, isReading, visitTaskId) {
|
||||
let url = `/SubjectVisit/getVisitStudyList/${trialId}/${subjectVisitId}/${isReading}`
|
||||
url = visitTaskId ? `${url}?visitTaskId=${visitTaskId}` : url
|
||||
return request({
|
||||
url: `/SubjectVisit/getVisitStudyList/${trialId}/${subjectVisitId}/${isReading}`,
|
||||
url: url,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
:modelList="modelList"
|
||||
:bodyPart="bodyPart"
|
||||
:IsDicom="IsDicom"
|
||||
:visitTaskId="modelTaskId"
|
||||
/>
|
||||
</el-dialog>
|
||||
</template>
|
||||
@@ -217,6 +218,7 @@ export default {
|
||||
downloadId: null,
|
||||
IsReadingTaskViewInOrder: 0, // 阅片规则
|
||||
bodyPart: [],
|
||||
modelTaskId: null,
|
||||
}
|
||||
},
|
||||
async mounted() {
|
||||
@@ -442,6 +444,7 @@ export default {
|
||||
data.SourceSubjectVisitId = item.SourceSubjectVisitId
|
||||
})
|
||||
}
|
||||
this.modelTaskId = item.VisitTaskId
|
||||
this.IsDicom = item.IsDicom
|
||||
this.model_cfg.visible = true
|
||||
},
|
||||
@@ -483,7 +486,7 @@ export default {
|
||||
var token = getToken()
|
||||
let trialId = this.$route.query.trialId
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showvisitdicoms?trialId=${trialId}&subjectVisitId=${row.SourceSubjectVisitId}&isReading=1&TokenKey=${token}`,
|
||||
path: `/showvisitdicoms?page=download&trialId=${trialId}&visitTaskId=${row.VisitTaskId}&subjectVisitId=${row.SourceSubjectVisitId}&isReading=1&TokenKey=${token}`,
|
||||
})
|
||||
this.open = window.open(routeData.href, '_blank')
|
||||
},
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
class="el-icon-warning-outline"
|
||||
style="color: #f56c6c; font-size: 24px"
|
||||
></i>
|
||||
<span>{{ $t("feedBack:imgfail:tip") }}</span>
|
||||
<span>{{ $t('feedBack:imgfail:tip') }}</span>
|
||||
</p>
|
||||
<!-- 问题反馈 -->
|
||||
<el-form-item
|
||||
@@ -140,7 +140,7 @@
|
||||
<div slot="footer" v-if="type !== 'detail' || isImgfail">
|
||||
<!-- 取消 -->
|
||||
<el-button size="small" @click.stop="cancel">
|
||||
{{ $t("feedBack:button:cancel") }}
|
||||
{{ $t('feedBack:button:cancel') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
@@ -149,21 +149,21 @@
|
||||
@click.stop="save"
|
||||
:loading="loading"
|
||||
>
|
||||
{{ $t("feedBack:button:save") }}
|
||||
{{ $t('feedBack:button:save') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import uploadImage from "./uploadImage.vue";
|
||||
import uploadImage from './uploadImage.vue'
|
||||
import {
|
||||
addOrUpdateUserFeedBack,
|
||||
getUserFeedBackInfo,
|
||||
batchUpdateFeedBackState,
|
||||
} from "@/api/trials.js";
|
||||
} from '@/api/trials.js'
|
||||
export default {
|
||||
name: "FB",
|
||||
name: 'FB',
|
||||
components: { uploadImage },
|
||||
data() {
|
||||
return {
|
||||
@@ -195,131 +195,131 @@ export default {
|
||||
QuestionType: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("common:ruleMessage:specify"),
|
||||
trigger: "blur",
|
||||
message: this.$t('common:ruleMessage:specify'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
QuestionDescription: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("common:ruleMessage:specify"),
|
||||
trigger: "blur",
|
||||
message: this.$t('common:ruleMessage:specify'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value.length < 5) {
|
||||
callback(
|
||||
new Error(this.$t("feedBack:ruleMessage:lengthLimitMin5"))
|
||||
);
|
||||
new Error(this.$t('feedBack:ruleMessage:lengthLimitMin5'))
|
||||
)
|
||||
}
|
||||
callback();
|
||||
callback()
|
||||
},
|
||||
trigger: "blur",
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
},
|
||||
isUpload: false,
|
||||
};
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
level() {
|
||||
if (this.hasPermi(["role:dev", "role:admin"])) {
|
||||
return 9;
|
||||
if (this.hasPermi(['role:dev', 'role:admin'])) {
|
||||
return 9
|
||||
}
|
||||
if (this.hasPermi(["role:pm"])) {
|
||||
return 8;
|
||||
if (this.hasPermi(['role:pm', 'role:apm'])) {
|
||||
return 8
|
||||
}
|
||||
if (this.hasPermi(["role:ir", "role:crc"])) {
|
||||
return 7;
|
||||
if (this.hasPermi(['role:ir', 'role:crc'])) {
|
||||
return 7
|
||||
}
|
||||
return 0;
|
||||
return 0
|
||||
},
|
||||
QuestionTypeOptions() {
|
||||
if (this.level > 7) {
|
||||
return [
|
||||
...this.$d.FeedBackTypeToCRC.filter((item) => item.value > 0),
|
||||
...this.$d.FeedBackTypeToIR,
|
||||
];
|
||||
]
|
||||
}
|
||||
if (this.hasPermi(["role:ir"])) {
|
||||
return this.$d.FeedBackTypeToIR;
|
||||
if (this.hasPermi(['role:ir'])) {
|
||||
return this.$d.FeedBackTypeToIR
|
||||
}
|
||||
if (this.hasPermi(["role:crc"])) {
|
||||
return this.$d.FeedBackTypeToCRC;
|
||||
if (this.hasPermi(['role:crc'])) {
|
||||
return this.$d.FeedBackTypeToCRC
|
||||
}
|
||||
return [];
|
||||
return []
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
open(data) {
|
||||
let { type, trialId, Id, visitTaskId, SubjectVisitId } = data;
|
||||
this.type = type;
|
||||
this.trialId = trialId;
|
||||
this.Id = Id;
|
||||
this.visitTaskId = visitTaskId;
|
||||
this.SubjectVisitId = SubjectVisitId;
|
||||
let { type, trialId, Id, visitTaskId, SubjectVisitId } = data
|
||||
this.type = type
|
||||
this.trialId = trialId
|
||||
this.Id = Id
|
||||
this.visitTaskId = visitTaskId
|
||||
this.SubjectVisitId = SubjectVisitId
|
||||
if (visitTaskId) {
|
||||
this.isImgfail = true;
|
||||
this.isImgfail = true
|
||||
}
|
||||
this.setTypeOption();
|
||||
this.setTypeOption()
|
||||
if (!Id) {
|
||||
this.title = this.setTitle();
|
||||
this.title = this.setTitle()
|
||||
}
|
||||
if (Id || visitTaskId) {
|
||||
this.getInfo(Id, visitTaskId);
|
||||
this.getInfo(Id, visitTaskId)
|
||||
}
|
||||
this.visible = true;
|
||||
this.visible = true
|
||||
},
|
||||
cancel() {
|
||||
this.visible = false;
|
||||
this.$emit("closed");
|
||||
this.visible = false
|
||||
this.$emit('closed')
|
||||
},
|
||||
async save() {
|
||||
try {
|
||||
let validate = await this.$refs.feedBackForm.validate();
|
||||
if (!validate) return;
|
||||
let validate = await this.$refs.feedBackForm.validate()
|
||||
if (!validate) return
|
||||
if (this.trialId) {
|
||||
this.form.TrialId = this.trialId;
|
||||
this.form.TrialId = this.trialId
|
||||
}
|
||||
if (this.visitTaskId) {
|
||||
this.form.VisitTaskId = this.visitTaskId;
|
||||
this.form.VisitTaskId = this.visitTaskId
|
||||
}
|
||||
if (this.SubjectVisitId) {
|
||||
this.form.SubjectVisitId = this.SubjectVisitId;
|
||||
this.form.SubjectVisitId = this.SubjectVisitId
|
||||
}
|
||||
if (this.Id) {
|
||||
this.form.Id = this.Id;
|
||||
this.form.Id = this.Id
|
||||
}
|
||||
this.loading = true;
|
||||
let res = await addOrUpdateUserFeedBack(this.form);
|
||||
this.loading = false;
|
||||
this.loading = true
|
||||
let res = await addOrUpdateUserFeedBack(this.form)
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
this.$emit("success");
|
||||
this.$message.success(this.$t("feedBack:save:success"));
|
||||
this.cancel();
|
||||
this.$emit('success')
|
||||
this.$message.success(this.$t('feedBack:save:success'))
|
||||
this.cancel()
|
||||
}
|
||||
} catch (err) {
|
||||
this.loading = false;
|
||||
console.log(err);
|
||||
this.loading = false
|
||||
console.log(err)
|
||||
}
|
||||
},
|
||||
// 修改状态
|
||||
async changeState() {
|
||||
if (this.isImgfail) return;
|
||||
if (this.isImgfail) return
|
||||
try {
|
||||
let data = {
|
||||
IdList: [this.Id],
|
||||
State: this.form.State,
|
||||
};
|
||||
let res = await batchUpdateFeedBackState(data);
|
||||
}
|
||||
let res = await batchUpdateFeedBackState(data)
|
||||
if (res.IsSuccess) {
|
||||
this.$message.success(this.$t("feedBack:changeState:success"));
|
||||
this.$emit("success");
|
||||
this.$message.success(this.$t('feedBack:changeState:success'))
|
||||
this.$emit('success')
|
||||
// this.cancel();
|
||||
this.getInfo(this.Id, this.visitTaskId);
|
||||
this.getInfo(this.Id, this.visitTaskId)
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
console.log(err)
|
||||
}
|
||||
},
|
||||
// 获取反馈详情
|
||||
@@ -328,56 +328,56 @@ export default {
|
||||
let data = {
|
||||
Id,
|
||||
visitTaskId,
|
||||
};
|
||||
let res = await getUserFeedBackInfo(data);
|
||||
}
|
||||
let res = await getUserFeedBackInfo(data)
|
||||
if (res.IsSuccess && res.Result) {
|
||||
this.form = res.Result;
|
||||
this.form = res.Result
|
||||
this.form.ScreenshotList = this.form.ScreenshotList || []
|
||||
this.Id = res.Result.Id;
|
||||
this.Id = res.Result.Id
|
||||
if (res.Result.State > 0) {
|
||||
this.isStateChange = false;
|
||||
this.isStateChange = false
|
||||
}
|
||||
if (res.Result.VisitTaskId) {
|
||||
this.visitTaskId = res.Result.VisitTaskId;
|
||||
this.visitTaskId = res.Result.VisitTaskId
|
||||
}
|
||||
if (res.Result.SubjectVisitId) {
|
||||
this.SubjectVisitId = res.Result.SubjectVisitId;
|
||||
this.SubjectVisitId = res.Result.SubjectVisitId
|
||||
}
|
||||
let code = this.$fd("UserType", res.Result.UserTypeEnum);
|
||||
this.title = this.setTitle(code, res.Result.FeedBackFullName);
|
||||
let code = this.$fd('UserType', res.Result.UserTypeEnum)
|
||||
this.title = this.setTitle(code, res.Result.FeedBackFullName)
|
||||
if (visitTaskId) {
|
||||
code = `${res.Result.SubjectCode}-${res.Result.SubjectVisitName}`;
|
||||
this.title = this.setTitle(code, res.Result.FeedBackFullName);
|
||||
code = `${res.Result.SubjectCode}-${res.Result.SubjectVisitName}`
|
||||
this.title = this.setTitle(code, res.Result.FeedBackFullName)
|
||||
}
|
||||
this.$refs.uploadImage.initFileList(res.Result.ScreenshotList);
|
||||
this.$refs.uploadImage.initFileList(res.Result.ScreenshotList)
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
console.log(err)
|
||||
}
|
||||
},
|
||||
setTypeOption() {
|
||||
if (!this.trialId) return (this.options = []);
|
||||
if (this.hasPermi(["role:ir"]))
|
||||
return (this.option = this.$d.FeedBackTypeToIR);
|
||||
if (this.hasPermi(["role:crc"]))
|
||||
return (this.option = this.$d.FeedBackTypeToCRC);
|
||||
if (!this.trialId) return (this.options = [])
|
||||
if (this.hasPermi(['role:ir']))
|
||||
return (this.option = this.$d.FeedBackTypeToIR)
|
||||
if (this.hasPermi(['role:crc']))
|
||||
return (this.option = this.$d.FeedBackTypeToCRC)
|
||||
},
|
||||
setTitle(code, name) {
|
||||
if (this.hasPermi(["role:pm"]) && this.visitTaskId) {
|
||||
return `${this.$t("feedBack:form:title:pm2")}(${code}/${name})`;
|
||||
if (this.hasPermi(['role:pm']) && this.visitTaskId) {
|
||||
return `${this.$t('feedBack:form:title:pm2')}(${code}/${name})`
|
||||
}
|
||||
if (this.hasPermi(["role:pm", "role:dev", "role:admin"])) {
|
||||
return `${this.$t("feedBack:form:title:pm")}(${code},${name})`;
|
||||
if (this.hasPermi(['role:pm', 'role:dev', 'role:admin'])) {
|
||||
return `${this.$t('feedBack:form:title:pm')}(${code},${name})`
|
||||
}
|
||||
if (this.hasPermi(["role:ir", "role:crc"]) && this.type === "detail") {
|
||||
return `${this.$t("feedBack:form:detail:title")}`;
|
||||
if (this.hasPermi(['role:ir', 'role:crc']) && this.type === 'detail') {
|
||||
return `${this.$t('feedBack:form:detail:title')}`
|
||||
}
|
||||
if (this.hasPermi(["role:ir", "role:crc"])) {
|
||||
return `${this.$t("feedBack:form:title")}`;
|
||||
if (this.hasPermi(['role:ir', 'role:crc'])) {
|
||||
return `${this.$t('feedBack:form:title')}`
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.tip {
|
||||
|
||||
@@ -58,14 +58,14 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
const type = "Statement of Work";
|
||||
const type = 'Statement of Work'
|
||||
export default {
|
||||
name: "UploadImage",
|
||||
name: 'UploadImage',
|
||||
props: {
|
||||
path: {
|
||||
required: true,
|
||||
default: () => {
|
||||
return [];
|
||||
return []
|
||||
},
|
||||
},
|
||||
disabled: {
|
||||
@@ -78,14 +78,14 @@ export default {
|
||||
},
|
||||
trialId: {
|
||||
type: String,
|
||||
default: "",
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
fileList: [],
|
||||
btnDisabled: false,
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
remove(file, fileList) {
|
||||
@@ -93,115 +93,113 @@ export default {
|
||||
},
|
||||
fileToBlob(file) {
|
||||
// 创建 FileReader 对象
|
||||
const reader = new FileReader();
|
||||
const reader = new FileReader()
|
||||
return new Promise((resolve) => {
|
||||
// FileReader 添加 load 事件
|
||||
reader.addEventListener("load", (e) => {
|
||||
let blob;
|
||||
if (typeof e.target.result === "object") {
|
||||
blob = new Blob([e.target.result]);
|
||||
reader.addEventListener('load', (e) => {
|
||||
let blob
|
||||
if (typeof e.target.result === 'object') {
|
||||
blob = new Blob([e.target.result])
|
||||
} else {
|
||||
blob = e.target.result;
|
||||
blob = e.target.result
|
||||
}
|
||||
resolve(blob);
|
||||
});
|
||||
resolve(blob)
|
||||
})
|
||||
// FileReader 以 ArrayBuffer 格式 读取 File 对象中数据
|
||||
reader.readAsArrayBuffer(file);
|
||||
});
|
||||
reader.readAsArrayBuffer(file)
|
||||
})
|
||||
},
|
||||
// 上传oss
|
||||
async uploadToOSS(name, file) {
|
||||
try {
|
||||
let defaultPath = "/System/FeedBack/";
|
||||
let defaultPath = '/System/FeedBack/'
|
||||
if (this.trialId) {
|
||||
defaultPath = `/${this.trialId}/FeedBack/`;
|
||||
defaultPath = `/${this.trialId}/FeedBack/`
|
||||
}
|
||||
let res = await this.OSSclient.put(`${defaultPath}${name}`, file);
|
||||
return res;
|
||||
let res = await this.OSSclient.put(`${defaultPath}${name}`, file)
|
||||
return res
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
return false;
|
||||
console.log(err)
|
||||
return false
|
||||
}
|
||||
},
|
||||
initFileList(list) {
|
||||
if (list && list.length > 0) {
|
||||
this.fileList = [];
|
||||
this.fileList = []
|
||||
list.forEach((item, index) => {
|
||||
let name = item.split("/");
|
||||
let name = item.split('/')
|
||||
this.fileList.push({
|
||||
name: name[name.length - 1],
|
||||
path: item,
|
||||
fullPath: this.OSSclientConfig.basePath + item,
|
||||
url: this.OSSclientConfig.basePath + item,
|
||||
uid: `${name[name.length - 1]}${index}`,
|
||||
});
|
||||
});
|
||||
console.log(this.fileList);
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
async uploadFile(param) {
|
||||
var fileName = param.file.name;
|
||||
this.$emit("update:isUpload", true);
|
||||
this.btnDisabled = true;
|
||||
var fileName = param.file.name
|
||||
this.$emit('update:isUpload', true)
|
||||
this.btnDisabled = true
|
||||
this.fileList.push({
|
||||
url: param.file.url,
|
||||
path: fileName,
|
||||
uid: param.file.uid,
|
||||
});
|
||||
let file = await this.fileToBlob(param.file);
|
||||
let res = await this.uploadToOSS(fileName, file);
|
||||
this.btnDisabled = false;
|
||||
let index = this.fileList.findIndex(
|
||||
(item) => item.uid === param.file.uid
|
||||
);
|
||||
})
|
||||
let file = await this.fileToBlob(param.file)
|
||||
let res = await this.uploadToOSS(fileName, file)
|
||||
this.btnDisabled = false
|
||||
let index = this.fileList.findIndex((item) => item.uid === param.file.uid)
|
||||
if (!res) {
|
||||
if (index >= 0) {
|
||||
this.fileList.splice(index, 1);
|
||||
this.fileList.splice(index, 1)
|
||||
}
|
||||
return this.$emit("update:isUpload", false);
|
||||
return this.$emit('update:isUpload', false)
|
||||
}
|
||||
this.fileList[index].url = this.OSSclientConfig.basePath + res.name;
|
||||
this.fileList[index].path = res.name;
|
||||
this.$emit("update:path", [...this.path, res.name]);
|
||||
this.$emit("update:isUpload", false);
|
||||
return false;
|
||||
let name = this.$getObjectName(res.url)
|
||||
this.fileList[index].url = this.OSSclientConfig.basePath + name
|
||||
this.fileList[index].path = name
|
||||
this.$emit('update:path', [...this.path, res.name])
|
||||
this.$emit('update:isUpload', false)
|
||||
return false
|
||||
},
|
||||
beforeUpload(file, fileList) {
|
||||
const isValidFile = this.fileValid(file.name, ["png", "jpg", "jpeg"]);
|
||||
const isValidFile = this.fileValid(file.name, ['png', 'jpg', 'jpeg'])
|
||||
if (isValidFile) {
|
||||
// this.fileList = [];
|
||||
} else {
|
||||
this.$alert(this.$t("feedBack:uploadImg:format"));
|
||||
return false;
|
||||
this.$alert(this.$t('feedBack:uploadImg:format'))
|
||||
return false
|
||||
}
|
||||
},
|
||||
handlePreview(file) {
|
||||
file.fullPath ? window.open(file.fullPath, "_blank") : "";
|
||||
file.fullPath ? window.open(file.fullPath, '_blank') : ''
|
||||
},
|
||||
handleExceed(files, fileList) {
|
||||
this.$message.warning(`Upload is currently limited to 1 file`);
|
||||
this.$message.warning(`Upload is currently limited to 1 file`)
|
||||
},
|
||||
fileValid(fileName, typeArr) {
|
||||
var extendName = fileName
|
||||
.substring(fileName.lastIndexOf(".") + 1)
|
||||
.toLocaleLowerCase();
|
||||
.substring(fileName.lastIndexOf('.') + 1)
|
||||
.toLocaleLowerCase()
|
||||
if (typeArr.indexOf(extendName) > -1) {
|
||||
return true;
|
||||
return true
|
||||
} else {
|
||||
return false;
|
||||
return false
|
||||
}
|
||||
},
|
||||
handlePictureCardPreview(file) {
|
||||
this.$refs[file.url].$viewer.show();
|
||||
this.$refs[file.url].$viewer.show()
|
||||
},
|
||||
handleRemove(file) {
|
||||
let index = this.fileList.findIndex((item) => item.uid === file.uid);
|
||||
this.fileList.splice(index, 1);
|
||||
let arr = this.fileList.map((item) => item.path);
|
||||
this.$emit("update:path", arr);
|
||||
let index = this.fileList.findIndex((item) => item.uid === file.uid)
|
||||
this.fileList.splice(index, 1)
|
||||
let arr = this.fileList.map((item) => item.path)
|
||||
this.$emit('update:path', arr)
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.upload-container .el-upload--text {
|
||||
|
||||
@@ -45,11 +45,18 @@
|
||||
prop="UploadStudyList"
|
||||
:label="$t('upload:dicom:table:uploadStudyListNum')"
|
||||
>
|
||||
<template slot-scope="scope">{{
|
||||
scope.row.UploadStudyList && Array.isArray(scope.row.UploadStudyList)
|
||||
? scope.row.UploadStudyList.length
|
||||
: 0
|
||||
}}</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="
|
||||
scope.row.UploadStudyList && scope.row.UploadStudyList.length >= 1
|
||||
"
|
||||
type="text"
|
||||
@click="handleOpenDialog(scope.row, 'UploadStudyList', true)"
|
||||
>
|
||||
<span>{{ scope.row.UploadStudyList.length }}</span>
|
||||
</el-button>
|
||||
<span v-else>0</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
@@ -107,7 +114,8 @@
|
||||
circle
|
||||
:disabled="
|
||||
!scope.row.UploadStudyList ||
|
||||
scope.row.UploadStudyList.length <= 0
|
||||
scope.row.UploadStudyList.length <= 0 ||
|
||||
scope.row.ReadingTaskState === 2
|
||||
"
|
||||
icon="el-icon-delete"
|
||||
:title="$t('upload:dicom:button:delete')"
|
||||
@@ -436,6 +444,9 @@
|
||||
:IsDicom="true"
|
||||
:bodyPart="bodyPart"
|
||||
:modelList="modelList"
|
||||
:isUpload="openIsUpload"
|
||||
:TrialModality="TrialModality"
|
||||
@getList="getList"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
@@ -544,6 +555,8 @@ export default {
|
||||
errStudyUidList: [],
|
||||
open: null,
|
||||
bodyPart: [],
|
||||
openIsUpload: false,
|
||||
TrialModality: [],
|
||||
}
|
||||
},
|
||||
created() {
|
||||
@@ -580,6 +593,7 @@ export default {
|
||||
let res = await getSubjectImageUploadList(params)
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
this.TrialModality = res.OtherInfo.TrialModality.split('|')
|
||||
this.StudyInstanceUidList = []
|
||||
this.SopInstanceUidList = []
|
||||
this.UploadStudyList = []
|
||||
@@ -654,7 +668,8 @@ export default {
|
||||
}
|
||||
},
|
||||
// 打开弹窗
|
||||
handleOpenDialog(item, list) {
|
||||
handleOpenDialog(item, list, isUpload = false) {
|
||||
this.openIsUpload = isUpload
|
||||
this.model_cfg.title = `${item.SubjectCode || ''} > ${item.TaskBlindName}`
|
||||
this.modelList = item[list]
|
||||
this.model_cfg.visible = true
|
||||
@@ -1518,7 +1533,7 @@ export default {
|
||||
var token = getToken()
|
||||
let trialId = this.$route.query.trialId
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showvisitdicoms?trialId=${trialId}&visitTaskId=${row.VisitTaskId}&subjectVisitId=${row.SourceSubjectVisitId}&isReading=1&TokenKey=${token}`,
|
||||
path: `/showvisitdicoms?page=upload&trialId=${trialId}&visitTaskId=${row.VisitTaskId}&subjectVisitId=${row.SourceSubjectVisitId}&isReading=1&TokenKey=${token}`,
|
||||
})
|
||||
this.open = window.open(routeData.href, '_blank')
|
||||
},
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
<script>
|
||||
import dicomFile from './dicomFile.vue'
|
||||
import nonedicomFile from './nonedicomFile.vue'
|
||||
import store from '@/store'
|
||||
export default {
|
||||
name: 'uploadDicomAndNonedicom',
|
||||
components: { dicomFile, nonedicomFile },
|
||||
@@ -83,6 +84,7 @@ export default {
|
||||
},
|
||||
mounted() {
|
||||
this.title = `Upload Images:${this.SubjectCode}(${this.Criterion.TrialReadingCriterionName})`
|
||||
store.dispatch('trials/setUnLock', true)
|
||||
},
|
||||
methods: {
|
||||
beforeClose() {
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<span>{{
|
||||
scope.row.FileSize && scope.row.FileSize > 0
|
||||
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -139,7 +139,7 @@
|
||||
<span>{{
|
||||
scope.row.FileSize && scope.row.FileSize > 0
|
||||
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -203,7 +203,10 @@
|
||||
/>
|
||||
<!--删除--->
|
||||
<el-button
|
||||
:disabled="scope.row.UploadedFileCount <= 0"
|
||||
:disabled="
|
||||
scope.row.UploadedFileCount <= 0 ||
|
||||
scope.row.ReadingTaskState === 2
|
||||
"
|
||||
circle
|
||||
icon="el-icon-delete"
|
||||
:title="$t('upload:nonedicom:button:delete')"
|
||||
@@ -318,7 +321,7 @@
|
||||
<span>{{
|
||||
scope.row.size && scope.row.size > 0
|
||||
? `${(scope.row.size / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -1,120 +1,175 @@
|
||||
<template>
|
||||
<base-model :config="model_cfg">
|
||||
<div slot="dialog-body">
|
||||
<el-table :data="modelList" style="width: 100%" height="300">
|
||||
<!--检查编号-->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadImage:table:StudyCode')"
|
||||
/>
|
||||
<!--检查类型-->
|
||||
<el-table-column
|
||||
prop="ModalityForEdit"
|
||||
:label="$t('trials:uploadImage:table:ModalityForEdit')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--检查模态-->
|
||||
<el-table-column
|
||||
prop="Modalities"
|
||||
:label="$t('trials:uploadImage:table:Modalities')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--检查部位-->
|
||||
<el-table-column
|
||||
prop="BodyPartForEdit"
|
||||
:label="$t('trials:uploadImage:table:BodyPartForEdit')"
|
||||
v-if="IsDicom"
|
||||
<div v-if="model_cfg.visible">
|
||||
<base-model :config="model_cfg">
|
||||
<div slot="dialog-body">
|
||||
<el-table :data="modelList" style="width: 100%" height="300">
|
||||
<!--检查编号-->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadImage:table:StudyCode')"
|
||||
/>
|
||||
<!--检查类型-->
|
||||
<el-table-column
|
||||
prop="ModalityForEdit"
|
||||
:label="$t('trials:uploadImage:table:ModalityForEdit')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--检查模态-->
|
||||
<el-table-column
|
||||
prop="Modalities"
|
||||
:label="$t('trials:uploadImage:table:Modalities')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--检查部位-->
|
||||
<el-table-column
|
||||
prop="BodyPartForEdit"
|
||||
:label="$t('trials:uploadImage:table:BodyPartForEdit')"
|
||||
v-if="IsDicom"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
$fd(
|
||||
'Bodypart',
|
||||
scope.row.BodyPartForEdit,
|
||||
'Code',
|
||||
{ Bodypart: bodyPart },
|
||||
'Name'
|
||||
)
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--序列数量-->
|
||||
<el-table-column
|
||||
prop="SeriesCount"
|
||||
:label="$t('trials:uploadImage:table:SeriesCount')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--图像数量-->
|
||||
<el-table-column
|
||||
prop="InstanceCount"
|
||||
:label="$t('trials:uploadImage:table:InstanceCount')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--检查时间-->
|
||||
<el-table-column
|
||||
prop="StudyTime"
|
||||
:label="$t('trials:uploadImage:table:StudyTime')"
|
||||
v-if="IsDicom"
|
||||
min-width="130"
|
||||
/>
|
||||
<!--检查模态-->
|
||||
<el-table-column
|
||||
prop="Modality"
|
||||
:label="$t('trials:uploadImage:table:Modalities')"
|
||||
v-if="!IsDicom"
|
||||
/>
|
||||
<!--检查部位-->
|
||||
<el-table-column
|
||||
prop="BodyPart"
|
||||
:label="$t('trials:uploadImage:table:BodyPartForEdit')"
|
||||
v-if="!IsDicom"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
$fd(
|
||||
'Bodypart',
|
||||
scope.row.BodyPart,
|
||||
'Code',
|
||||
{ Bodypart: bodyPart },
|
||||
'Name'
|
||||
)
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--文件数量-->
|
||||
<el-table-column
|
||||
prop="FileCount"
|
||||
:label="$t('trials:uploadImage:table:FileCount')"
|
||||
v-if="!IsDicom"
|
||||
/>
|
||||
<!--检查时间-->
|
||||
<el-table-column
|
||||
prop="ImageDate"
|
||||
:label="$t('trials:uploadImage:table:StudyTime')"
|
||||
v-if="!IsDicom"
|
||||
min-width="130"
|
||||
/>
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
fixed="right"
|
||||
width="80"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!--预览--->
|
||||
<el-button
|
||||
circle
|
||||
icon="el-icon-view"
|
||||
:title="$t('trials:uploadImage:button:preview')"
|
||||
v-if="!isUpload"
|
||||
@click.stop="preview(scope.row)"
|
||||
/>
|
||||
<!--编辑--->
|
||||
<el-button
|
||||
circle
|
||||
icon="el-icon-edit-outline"
|
||||
:title="$t('trials:uploadImage:button:edit')"
|
||||
v-else
|
||||
@click.stop="openEdit(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</base-model>
|
||||
<!--新增检查部位-->
|
||||
<base-model v-if="editModality_model.visible" :config="editModality_model">
|
||||
<template slot="dialog-body">
|
||||
<el-form
|
||||
ref="editModalityform"
|
||||
:inline="true"
|
||||
:model="form"
|
||||
class="demo-form-inline"
|
||||
:rules="rules"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
$fd(
|
||||
'Bodypart',
|
||||
scope.row.BodyPartForEdit,
|
||||
'Code',
|
||||
{ Bodypart: bodyPart },
|
||||
'Name'
|
||||
)
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--序列数量-->
|
||||
<el-table-column
|
||||
prop="SeriesCount"
|
||||
:label="$t('trials:uploadImage:table:SeriesCount')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--图像数量-->
|
||||
<el-table-column
|
||||
prop="InstanceCount"
|
||||
:label="$t('trials:uploadImage:table:InstanceCount')"
|
||||
v-if="IsDicom"
|
||||
/>
|
||||
<!--检查时间-->
|
||||
<el-table-column
|
||||
prop="StudyTime"
|
||||
:label="$t('trials:uploadImage:table:StudyTime')"
|
||||
v-if="IsDicom"
|
||||
min-width="130"
|
||||
/>
|
||||
<!--检查模态-->
|
||||
<el-table-column
|
||||
prop="Modality"
|
||||
:label="$t('trials:uploadImage:table:Modalities')"
|
||||
v-if="!IsDicom"
|
||||
/>
|
||||
<!--检查部位-->
|
||||
<el-table-column
|
||||
prop="BodyPart"
|
||||
:label="$t('trials:uploadImage:table:BodyPartForEdit')"
|
||||
v-if="!IsDicom"
|
||||
<el-form-item
|
||||
:label="$t('trials:uploadImage:form:ModalityForEdit')"
|
||||
prop="Modality"
|
||||
label-width="150px"
|
||||
>
|
||||
<el-select v-model="form.Modality" placeholder="">
|
||||
<el-option
|
||||
v-for="item in TrialModality"
|
||||
:key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<template slot="dialog-footer">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="updateTaskStudyModality"
|
||||
:loading="loading"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
$fd(
|
||||
'Bodypart',
|
||||
scope.row.BodyPart,
|
||||
'Code',
|
||||
{ Bodypart: bodyPart },
|
||||
'Name'
|
||||
)
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--文件数量-->
|
||||
<el-table-column
|
||||
prop="FileCount"
|
||||
:label="$t('trials:uploadImage:table:FileCount')"
|
||||
v-if="!IsDicom"
|
||||
/>
|
||||
<!--检查时间-->
|
||||
<el-table-column
|
||||
prop="ImageDate"
|
||||
:label="$t('trials:uploadImage:table:StudyTime')"
|
||||
v-if="!IsDicom"
|
||||
min-width="130"
|
||||
/>
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
fixed="right"
|
||||
width="80"
|
||||
{{ $t('common:button:confirm') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
@click="editModality_model.visible = false"
|
||||
:loading="loading"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!--预览--->
|
||||
<el-button
|
||||
circle
|
||||
icon="el-icon-view"
|
||||
:title="$t('trials:uploadImage:button:preview')"
|
||||
@click.stop="preview(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</base-model>
|
||||
{{ $t('common:button:cancel') }}
|
||||
</el-button>
|
||||
</template>
|
||||
</base-model>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import baseModel from '@/components/BaseModel'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import { updateTaskStudyModality } from '@/api/load.js'
|
||||
export default {
|
||||
name: 'studyView',
|
||||
props: {
|
||||
@@ -136,15 +191,53 @@ export default {
|
||||
return []
|
||||
},
|
||||
},
|
||||
TrialModality: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
},
|
||||
},
|
||||
visitTaskId: {
|
||||
type: String,
|
||||
},
|
||||
IsDicom: {
|
||||
required: true,
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
isUpload: {
|
||||
required: true,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
components: {
|
||||
'base-model': baseModel,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
Modality: null,
|
||||
TaskStudyId: null,
|
||||
},
|
||||
editModality_model: {
|
||||
visible: false,
|
||||
title: this.$t('trials:uploadImage:button:edit'),
|
||||
width: '500px',
|
||||
appendToBody: true,
|
||||
},
|
||||
rules: {
|
||||
Modality: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t('trials:uploadImage:format:notModality'),
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
},
|
||||
loading: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 预览
|
||||
preview(row) {
|
||||
@@ -152,7 +245,7 @@ export default {
|
||||
if (this.IsDicom) {
|
||||
var token = getToken()
|
||||
routeData = this.$router.resolve({
|
||||
path: `/showdicom?studyId=${row.Id}&TokenKey=${token}&type=Study`,
|
||||
path: `/showdicom?studyId=${row.Id}&TokenKey=${token}&type=Study&visitTaskId=${this.visitTaskId}`,
|
||||
})
|
||||
} else {
|
||||
let trialId = this.$route.query.trialId
|
||||
@@ -163,6 +256,34 @@ export default {
|
||||
}
|
||||
window.open(routeData.href, '_blank')
|
||||
},
|
||||
// 打开编辑
|
||||
openEdit(row) {
|
||||
this.form.TaskStudyId = row.Id
|
||||
this.form.Modality = row.ModalityForEdit
|
||||
this.editModality_model.visible = true
|
||||
},
|
||||
// 修改检查类型
|
||||
async updateTaskStudyModality() {
|
||||
try {
|
||||
let validate = await this.$refs.editModalityform.validate()
|
||||
if (!validate) return false
|
||||
this.loading = true
|
||||
let res = await updateTaskStudyModality(this.form)
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
this.modelList.some((item) => {
|
||||
if (this.form.TaskStudyId === item.Id) {
|
||||
item.ModalityForEdit = this.form.Modality
|
||||
}
|
||||
return this.form.TaskStudyId === item.Id
|
||||
})
|
||||
this.editModality_model.visible = false
|
||||
this.$emit('getList')
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -113,10 +113,14 @@ export const parseDicom = (file, name = false) => {
|
||||
}
|
||||
})
|
||||
uintKey.forEach(key => {
|
||||
res[key] = data.uint16(dicom[key])
|
||||
if (res.hasOwnProperty(key)) {
|
||||
res[key] = data.uint16(dicom[key])
|
||||
}
|
||||
})
|
||||
intStringKey.forEach(key => {
|
||||
res[key] = data.intString(dicom[key])
|
||||
if (res.hasOwnProperty(key)) {
|
||||
res[key] = data.intString(dicom[key])
|
||||
}
|
||||
})
|
||||
defaultKey.forEach(key => {
|
||||
if (!res[key] && res.hasOwnProperty(key)) {
|
||||
|
||||
@@ -251,7 +251,7 @@ export default {
|
||||
},
|
||||
async loadPatientStudy() {
|
||||
try {
|
||||
let data = await getPatientSeriesList(this.studyId);
|
||||
const data = await getPatientSeriesList(this.studyId)
|
||||
if (data.IsSuccess) {
|
||||
const { Result } = data
|
||||
var seriesList = []
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="$t('trials:dicom-show:relatedVisit')" name="relation-study" class="pane-relation-wrapper">
|
||||
<el-tab-pane :label="$t('trials:dicom-show:relatedVisit')" name="relation-study" class="pane-relation-wrapper" v-if="!visitTaskId">
|
||||
<div class="viewerSidethumbinner">
|
||||
<el-collapse v-model="relationActiveName" @change="handelRelationActiveChange">
|
||||
<el-collapse-item v-for="(study,studyIndex) in relationStudyList" :key="`${study.StudyId}`" :name="`${study.StudyId}`">
|
||||
@@ -303,7 +303,8 @@ export default {
|
||||
showSeriesList: [],
|
||||
currentLoadIns: [],
|
||||
isFromCRCUpload: false,
|
||||
visitTaskId: null
|
||||
visitTaskId: null,
|
||||
page: ''
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -321,6 +322,7 @@ export default {
|
||||
this.showDelete = parseInt(this.$router.currentRoute.query.showDelete)
|
||||
this.isFromCRCUpload = !!this.$router.currentRoute.query.isFromCRCUpload
|
||||
this.visitTaskId = this.$router.currentRoute.query.visitTaskId
|
||||
this.page = this.$route.query.page
|
||||
// cornerstone.events.addEventListener('cornerstoneimageloaded', this.cornerstoneImageLoaded)
|
||||
this.getStudiesInfo()
|
||||
cornerstone.events.addEventListener('cornerstoneimageloadprogress', this.cornerstoneimageloadprogress)
|
||||
@@ -342,8 +344,10 @@ export default {
|
||||
this.studyList = []
|
||||
try {
|
||||
let res = null
|
||||
if (this.visitTaskId) {
|
||||
if (this.page === 'upload') {
|
||||
res = await getTaskUploadedDicomStudyList({ visitTaskId: this.visitTaskId })
|
||||
} else if (this.page === 'download'){
|
||||
res = await getVisitStudyList(this.trialId, this.subjectVisitId, this.isReading, this.visitTaskId)
|
||||
} else {
|
||||
res = await getVisitStudyList(this.trialId, this.subjectVisitId, this.isReading)
|
||||
}
|
||||
|
||||
@@ -355,11 +355,11 @@
|
||||
<el-radio v-for="item of $d.LimitEdit" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="全局阅片是否显示">
|
||||
<!-- <el-form-item label="全局阅片是否显示">
|
||||
<el-radio-group v-model="form.GlobalReadingShowType">
|
||||
<el-radio v-for="item of $d.GlobalReadingShowType" :key="item.id" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-radio-group>
|
||||
</el-form-item> -->
|
||||
</div>
|
||||
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;">
|
||||
<el-form-item>
|
||||
@@ -445,7 +445,7 @@ export default {
|
||||
DependParentId: '',
|
||||
QuestionMark: null,
|
||||
LimitEdit: 0,
|
||||
GlobalReadingShowType: null,
|
||||
// GlobalReadingShowType: null,
|
||||
QuestionClassify: null,
|
||||
HighlightAnswerList: []
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
size="mini"
|
||||
@click="getList"
|
||||
>
|
||||
{{ $t("common:button:search") }}
|
||||
{{ $t('common:button:search') }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button
|
||||
@@ -122,7 +122,7 @@
|
||||
icon="el-icon-refresh-left"
|
||||
@click="handleReset"
|
||||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
{{ $t('common:button:reset') }}
|
||||
</el-button>
|
||||
<!-- <el-button
|
||||
type="primary"
|
||||
@@ -141,7 +141,7 @@
|
||||
v-if="level > 7"
|
||||
:disabled="tableSelectData.length <= 0"
|
||||
>
|
||||
{{ $t("feedBack:button:resolve") }}
|
||||
{{ $t('feedBack:button:resolve') }}
|
||||
</el-button>
|
||||
</el-form>
|
||||
<el-table
|
||||
@@ -257,7 +257,7 @@
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag :type="['danger', 'success'][scope.row.State]">{{
|
||||
$fd("FeedBackStatus", scope.row.State)
|
||||
$fd('FeedBackStatus', scope.row.State)
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -278,7 +278,7 @@
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" @click="getDetail(scope.row)">
|
||||
{{ $t("common:button:view") }}
|
||||
{{ $t('common:button:view') }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -295,8 +295,8 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Pagination from "@/components/Pagination";
|
||||
import { batchUpdateFeedBackState, getUserFeedBackList } from "@/api/trials.js";
|
||||
import Pagination from '@/components/Pagination'
|
||||
import { batchUpdateFeedBackState, getUserFeedBackList } from '@/api/trials.js'
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
TrialKeyInfo: null,
|
||||
@@ -312,23 +312,23 @@ const searchDataDefault = () => {
|
||||
PageIndex: 1,
|
||||
PageSize: 20,
|
||||
Asc: false,
|
||||
SortField: "CreateTime",
|
||||
};
|
||||
};
|
||||
SortField: 'CreateTime',
|
||||
}
|
||||
}
|
||||
export default {
|
||||
components: { Pagination },
|
||||
props: {
|
||||
trialId: {
|
||||
type: String,
|
||||
default: "",
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
dicts: [
|
||||
"NoticeApplicableTrial",
|
||||
"NoteLevel",
|
||||
"NoteType",
|
||||
"NoticeState",
|
||||
"NoticeMode",
|
||||
'NoticeApplicableTrial',
|
||||
'NoteLevel',
|
||||
'NoteType',
|
||||
'NoticeState',
|
||||
'NoticeMode',
|
||||
],
|
||||
data() {
|
||||
return {
|
||||
@@ -340,100 +340,100 @@ export default {
|
||||
searchData: searchDataDefault(),
|
||||
tableSelectData: [],
|
||||
UserTypeOptins: [
|
||||
{ label: "CRC", value: 2 },
|
||||
{ label: "IR", value: 13 },
|
||||
{ label: 'CRC', value: 2 },
|
||||
{ label: 'IR', value: 13 },
|
||||
],
|
||||
};
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
level() {
|
||||
if (this.hasPermi(["role:dev", "role:admin"])) {
|
||||
return 9;
|
||||
if (this.hasPermi(['role:dev', 'role:admin'])) {
|
||||
return 9
|
||||
}
|
||||
if (this.hasPermi(["role:pm"])) {
|
||||
return 8;
|
||||
if (this.hasPermi(['role:pm', 'role:apm'])) {
|
||||
return 8
|
||||
}
|
||||
if (this.hasPermi(["role:ir", "role:crc"])) {
|
||||
return 7;
|
||||
if (this.hasPermi(['role:ir', 'role:crc'])) {
|
||||
return 7
|
||||
}
|
||||
return 0;
|
||||
return 0
|
||||
},
|
||||
QuestionTypeOptions() {
|
||||
if (this.level > 7) {
|
||||
return [
|
||||
...this.$d.FeedBackTypeToCRC.filter((item) => item.value > 0),
|
||||
...this.$d.FeedBackTypeToIR,
|
||||
];
|
||||
]
|
||||
}
|
||||
if (this.hasPermi(["role:ir"])) {
|
||||
return this.$d.FeedBackTypeToIR;
|
||||
if (this.hasPermi(['role:ir'])) {
|
||||
return this.$d.FeedBackTypeToIR
|
||||
}
|
||||
if (this.hasPermi(["role:crc"])) {
|
||||
return this.$d.FeedBackTypeToCRC;
|
||||
if (this.hasPermi(['role:crc'])) {
|
||||
return this.$d.FeedBackTypeToCRC
|
||||
}
|
||||
return [];
|
||||
return []
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
// 通过提交状态决定该行的 CheckBox 是否可以勾选
|
||||
handleSelectTable(row) {
|
||||
return row.State < 1;
|
||||
return row.State < 1
|
||||
},
|
||||
async getList() {
|
||||
try {
|
||||
if (this.trialId) {
|
||||
this.searchData.TrialId = this.trialId;
|
||||
this.searchData.TrialId = this.trialId
|
||||
}
|
||||
this.loading = true;
|
||||
let res = await getUserFeedBackList(this.searchData);
|
||||
this.loading = false;
|
||||
this.loading = true
|
||||
let res = await getUserFeedBackList(this.searchData)
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
this.list = res.Result.CurrentPageData;
|
||||
this.total = res.Result.TotalCount;
|
||||
this.list = res.Result.CurrentPageData
|
||||
this.total = res.Result.TotalCount
|
||||
}
|
||||
} catch (err) {
|
||||
this.loading = false;
|
||||
console.log(err);
|
||||
this.loading = false
|
||||
console.log(err)
|
||||
}
|
||||
},
|
||||
handleDatetimeChange(val) {
|
||||
if (val) {
|
||||
this.searchData.BeginCreatime = val[0];
|
||||
this.searchData.EndCreatime = val[1];
|
||||
this.searchData.BeginCreatime = val[0]
|
||||
this.searchData.EndCreatime = val[1]
|
||||
} else {
|
||||
this.searchData.BeginCreatime = "";
|
||||
this.searchData.EndCreatime = "";
|
||||
this.searchData.BeginCreatime = ''
|
||||
this.searchData.EndCreatime = ''
|
||||
}
|
||||
},
|
||||
// 重置列表查询
|
||||
handleReset() {
|
||||
this.datetimerange = null;
|
||||
this.handleDatetimeChange();
|
||||
this.searchData = searchDataDefault();
|
||||
this.getList();
|
||||
this.datetimerange = null
|
||||
this.handleDatetimeChange()
|
||||
this.searchData = searchDataDefault()
|
||||
this.getList()
|
||||
},
|
||||
// 设为解决
|
||||
async resolve() {
|
||||
try {
|
||||
let confirm = await this.$confirm(this.$t("feedBack:resolve:tip"), {
|
||||
type: "warning",
|
||||
let confirm = await this.$confirm(this.$t('feedBack:resolve:tip'), {
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true,
|
||||
});
|
||||
if (!confirm) return;
|
||||
})
|
||||
if (!confirm) return
|
||||
let data = {
|
||||
IdList: this.tableSelectData.map((item) => item.Id),
|
||||
state: 1,
|
||||
};
|
||||
let res = await batchUpdateFeedBackState(data);
|
||||
}
|
||||
let res = await batchUpdateFeedBackState(data)
|
||||
if (res.IsSuccess) {
|
||||
this.$message.success(this.$t("feedBack:resolve:success"));
|
||||
this.getList();
|
||||
this.$message.success(this.$t('feedBack:resolve:success'))
|
||||
this.getList()
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
console.log(err)
|
||||
}
|
||||
},
|
||||
// 导出
|
||||
@@ -441,32 +441,32 @@ export default {
|
||||
// 表格选择
|
||||
handleSelectChange(selection) {
|
||||
// console.log(selection, "handleSelectChange");
|
||||
this.tableSelectData = selection;
|
||||
this.tableSelectData = selection
|
||||
},
|
||||
// 排序
|
||||
handleSortByColumn(column) {
|
||||
if (column.order === "ascending") {
|
||||
this.searchData.Asc = true;
|
||||
if (column.order === 'ascending') {
|
||||
this.searchData.Asc = true
|
||||
} 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()
|
||||
},
|
||||
// 获取详情
|
||||
getDetail(row) {
|
||||
this.$FB({
|
||||
type: "detail",
|
||||
type: 'detail',
|
||||
Id: row.Id,
|
||||
callBack: () => {
|
||||
this.getList();
|
||||
this.$emit("success");
|
||||
this.getList()
|
||||
this.$emit('success')
|
||||
},
|
||||
});
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.role {
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
</p>
|
||||
<p style="margin-bottom: 20px" v-else>{{ $t('login:title:system') }}</p>
|
||||
<p style="margin-bottom: 20px">
|
||||
V{{ $Version.IsEnv_US ? $version.Version_US : $version.Version }}
|
||||
V{{ $version.IsEnv_US ? $version.Version_US : $version.Version }}
|
||||
</p>
|
||||
<p style="margin-bottom: 20px" v-if="language === 'zh'">
|
||||
Copyright © {{ new Date().getFullYear() }} 上海展影医疗科技有限公司
|
||||
|
||||
@@ -70,53 +70,21 @@
|
||||
width="150"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div
|
||||
v-if="
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i]
|
||||
.QuestionType === 1
|
||||
"
|
||||
>
|
||||
<span
|
||||
v-if="
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i]
|
||||
.DictionaryCode
|
||||
"
|
||||
>{{
|
||||
$fd(
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[
|
||||
i
|
||||
].DictionaryCode,
|
||||
parseInt(
|
||||
scope.row.VisitTaskInfoList[j.index]
|
||||
.JudgeQuestionList[i].Answer
|
||||
)
|
||||
)
|
||||
}}</span>
|
||||
<span v-else>{{
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i]
|
||||
.Answer
|
||||
}}</span>
|
||||
<div v-if="scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].QuestionType === 1">
|
||||
<span v-if="scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].DictionaryCode">
|
||||
{{ $fd(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].DictionaryCode,parseInt(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer))
|
||||
}}
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer }}
|
||||
</span>
|
||||
<span v-if="scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Unit && !isNaN(parseFloat(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer))">{{ $fd('ValueUnit', parseInt(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Unit)) }}</span>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i]
|
||||
.QuestionType === 2
|
||||
"
|
||||
>
|
||||
<div
|
||||
v-if="
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i]
|
||||
.Answer
|
||||
"
|
||||
>
|
||||
<span>{{
|
||||
$fd(
|
||||
"YesOrNo",
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[
|
||||
i
|
||||
].Answer
|
||||
)
|
||||
}}</span>
|
||||
<div v-else-if="scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].QuestionType === 2">
|
||||
<div v-if="scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer">
|
||||
<span>
|
||||
{{ $fd("YesOrNo",scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer) }}
|
||||
</span>
|
||||
<!-- 查看详情 -->
|
||||
<el-button
|
||||
type="text"
|
||||
@@ -143,10 +111,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{
|
||||
scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i]
|
||||
.Answer
|
||||
}}
|
||||
{{ scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -1039,7 +1039,7 @@ export default {
|
||||
loadImageStack(dicomSeries) {
|
||||
return new Promise(resolve => {
|
||||
this.isCurrentTask = dicomSeries.isCurrentTask
|
||||
this.isBaseline = dicomSeries.isBaseline
|
||||
this.isBaseline = dicomSeries.isBaseLineTask
|
||||
this.readingTaskState = dicomSeries.readingTaskState
|
||||
if (this.isCurrentTask && this.readingTaskState < 2) {
|
||||
this.activeTool = 1
|
||||
@@ -1088,16 +1088,16 @@ export default {
|
||||
var frame = imageInfo.frame
|
||||
this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null
|
||||
this.stack.instanceId = instanceId
|
||||
|
||||
const element = this.$refs.canvas
|
||||
cornerstone.enable(element)
|
||||
element.tabIndex = 0
|
||||
element.focus()
|
||||
const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager
|
||||
ToolStateManager.clearImageIdToolState(dicomSeries.imageIds)
|
||||
this.toggleClipPlay(false)
|
||||
this.toolState.viewportInvert = false
|
||||
this.toolState.dicomInfoVisible = false
|
||||
|
||||
const element = this.$refs.canvas
|
||||
cornerstone.enable(element)
|
||||
element.tabIndex = 0
|
||||
element.focus()
|
||||
var scope = this
|
||||
// var p = parseInt(new Date().getTime())
|
||||
// requestPoolManager.loadAndCacheImagePlus(this.stack.imageIds[this.stack.currentImageIdIndex], this.stack.seriesId, p*100).then(image=>{
|
||||
|
||||
@@ -758,7 +758,7 @@
|
||||
>
|
||||
<div slot="title">
|
||||
<span style="font-size:18px;">{{ $t('common:dialogTitle:sign') }}</span>
|
||||
<span style="font-size:12px;margin-left:5px">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span>
|
||||
<span style="font-size:12px;margin-left:5px;user-select: text !important;">{{ `(${$t('common:label:sign')}${ currentUser })` }}</span>
|
||||
</div>
|
||||
<SignForm ref="signForm" :sign-code-enum="signCode" @closeDialog="closeSignDialog" />
|
||||
</el-dialog>
|
||||
@@ -1221,8 +1221,8 @@ export default {
|
||||
if (idx > -1) {
|
||||
this.taskId = this.visitTaskList[idx].VisitTaskId
|
||||
}
|
||||
this.uploadSubjectCode = this.$route.query.subjectCode
|
||||
this.uploadSubjectId = this.$route.query.subjectId
|
||||
this.uploadSubjectCode = this.$route.query.subjectCode||localStorage.getItem("subjectCode")
|
||||
this.uploadSubjectId = this.$route.query.subjectId||localStorage.getItem("subjectId")
|
||||
this.uploadTrialCriterion = this.trialCriterion
|
||||
this.uploadStatus = status
|
||||
this[`${status}ImageVisible`] = true
|
||||
|
||||
@@ -81,8 +81,8 @@
|
||||
:render-header="renderHeader"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="q.Unit > 0">
|
||||
{{ `${scope.row[q.Id]}${$fd('ValueUnit', parseInt(q.Unit))}` }}
|
||||
<span v-if="q.Unit > 0 && !isNaN(parseFloat(scope.row[q.Id]))">
|
||||
{{ `${scope.row[q.Id]} ${$fd('ValueUnit', parseInt(q.Unit))}` }}
|
||||
</span>
|
||||
<span v-else-if="q.DictionaryCode">
|
||||
{{ `${$fd(q.DictionaryCode, parseInt(scope.row[q.Id]))}` }}
|
||||
@@ -721,7 +721,8 @@ export default {
|
||||
const span = document.createElement('span')
|
||||
span.innerText = column.label
|
||||
document.body.appendChild(span)
|
||||
column.minWidth = span.getBoundingClientRect().width + 20
|
||||
const w = span.getBoundingClientRect().width
|
||||
column.minWidth = w > 65 ? w + 10 : w > 60 ? w + 15 : w + 20
|
||||
document.body.removeChild(span)
|
||||
return h('span', column.label)
|
||||
}
|
||||
|
||||
@@ -81,8 +81,8 @@
|
||||
:render-header="renderHeader"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="q.Unit > 0">
|
||||
{{ `${scope.row[q.Id]}${$fd('ValueUnit', parseInt(q.Unit))}` }}
|
||||
<span v-if="q.Unit > 0 && !isNaN(parseFloat(scope.row[q.Id]))">
|
||||
{{ `${scope.row[q.Id]} ${$fd('ValueUnit', parseInt(q.Unit))}` }}
|
||||
</span>
|
||||
<span v-else-if="q.DictionaryCode">
|
||||
{{ `${$fd(q.DictionaryCode, parseInt(scope.row[q.Id]))}` }}
|
||||
@@ -732,7 +732,8 @@ export default {
|
||||
const span = document.createElement('span')
|
||||
span.innerText = column.label
|
||||
document.body.appendChild(span)
|
||||
column.minWidth = span.getBoundingClientRect().width + 30
|
||||
const w = span.getBoundingClientRect().width
|
||||
column.minWidth = w > 65 ? w + 10 : w > 60 ? w + 15 : w + 30
|
||||
document.body.removeChild(span)
|
||||
return h('span', column.label)
|
||||
}
|
||||
|
||||
@@ -1064,16 +1064,15 @@ export default {
|
||||
var frame = imageInfo.frame
|
||||
this.stack.frame = this.stack.isExistMutiFrames ? parseInt(frame) : null
|
||||
this.stack.instanceId = instanceId
|
||||
const element = this.$refs.canvas
|
||||
cornerstone.enable(element)
|
||||
element.tabIndex = 0
|
||||
element.focus()
|
||||
const ToolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager
|
||||
ToolStateManager.clearImageIdToolState(dicomSeries.imageIds)
|
||||
this.toggleClipPlay(false)
|
||||
this.toolState.viewportInvert = false
|
||||
this.toolState.dicomInfoVisible = false
|
||||
|
||||
const element = this.$refs.canvas
|
||||
cornerstone.enable(element)
|
||||
element.tabIndex = 0
|
||||
element.focus()
|
||||
var scope = this
|
||||
// var p = parseInt(new Date().getTime())
|
||||
// requestPoolManager.loadAndCacheImagePlus(this.stack.imageIds[this.stack.currentImageIdIndex], this.stack.seriesId, p*100).then(image=>{
|
||||
|
||||
@@ -1083,8 +1083,8 @@ export default {
|
||||
if (idx > -1) {
|
||||
this.taskId = this.visitTaskList[idx].VisitTaskId
|
||||
}
|
||||
this.uploadSubjectCode = this.$route.query.subjectCode
|
||||
this.uploadSubjectId = this.$route.query.subjectId
|
||||
this.uploadSubjectCode = this.$route.query.subjectCode||localStorage.getItem("subjectCode")
|
||||
this.uploadSubjectId = this.$route.query.subjectId||localStorage.getItem("subjectId")
|
||||
this.uploadTrialCriterion = this.trialCriterion
|
||||
this.uploadStatus = status
|
||||
this[`${status}ImageVisible`] = true
|
||||
|
||||
@@ -25,14 +25,14 @@
|
||||
</div>
|
||||
<div class="questions-footer">
|
||||
<i class="el-icon-question feedback-icon" @click="openFeedBackTable" />
|
||||
<el-button v-if="readingTaskState<2" style="margin-right: 10px" size="small" @click="handleSave(true)">
|
||||
<el-button v-if="readingTaskState<2" style="margin-right: 10px" type="primary" size="small" @click="handleSave(true)">
|
||||
{{$t('common:button:save')}}
|
||||
</el-button>
|
||||
<el-button v-if="readingTaskState<2 && IseCRFShowInDicomReading" type="primary" size="small" @click="skipTask">
|
||||
<el-button v-if="readingTaskState<2 && IseCRFShowInDicomReading" type="primary" style="margin-right: 10px" size="small" @click="skipTask">
|
||||
<!-- 跳过 -->
|
||||
{{ $t('trials:readingReport:button:skip') }}
|
||||
</el-button>
|
||||
<el-button style="margin-right: 10px" size="small" v-if="readingTaskState<2 && IseCRFShowInDicomReading" @click="handleConfirm">
|
||||
<el-button style="margin-right: 10px" type="primary" size="small" v-if="readingTaskState<2 && IseCRFShowInDicomReading" @click="handleConfirm">
|
||||
{{ $t('common:button:submit') }}</el-button>
|
||||
</div>
|
||||
<!-- 签名框 -->
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ export default {
|
||||
var answers = []
|
||||
for (const k in this.questionForm) {
|
||||
if (this.questionForm[k] instanceof Array) {} else {
|
||||
answers.push({ id: k, answer: this.questionForm[k].toString() })
|
||||
answers.push({ id: k, answer: this.questionForm[k] })
|
||||
}
|
||||
}
|
||||
var params = {
|
||||
|
||||
@@ -319,6 +319,7 @@ export default {
|
||||
// }
|
||||
// }
|
||||
this.subjectId = res.Result.SubjectId
|
||||
localStorage.setItem('subjectId', res.Result.SubjectId)
|
||||
this.subjectCode = res.Result.SubjectCode
|
||||
localStorage.setItem('subjectCode', res.Result.SubjectCode)
|
||||
this.taskBlindName = res.Result.TaskBlindName
|
||||
|
||||
@@ -45,7 +45,9 @@
|
||||
:label="$t('trials:sitesList:dicomAEList:table:action')"
|
||||
min-width="120"
|
||||
v-if="
|
||||
hasPermi(['trials:trials-panel:setting:personnel-manage:edit-site'])
|
||||
hasPermi([
|
||||
'trials:trials-panel:setting:personnel-manage:edit-dicom',
|
||||
])
|
||||
"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
|
||||
@@ -82,14 +82,15 @@
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-download"
|
||||
v-hasPermi="[
|
||||
'trials:trials-panel:setting:personnel-manage:download',
|
||||
]"
|
||||
@click="handleDownload"
|
||||
>
|
||||
{{ $t('common:button:downloadTpl') }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-hasPermi="[
|
||||
'trials:trials-panel:setting:personnel-manage:add-site',
|
||||
]"
|
||||
v-hasPermi="['trials:trials-panel:setting:personnel-manage:upload']"
|
||||
type="primary"
|
||||
icon="el-icon-upload2"
|
||||
@click="handleUpload"
|
||||
@@ -232,6 +233,7 @@
|
||||
hasPermi([
|
||||
'trials:trials-panel:setting:personnel-manage:edit-site',
|
||||
'trials:trials-panel:setting:personnel-manage:remove-site',
|
||||
'trials:trials-panel:setting:personnel-manage:edit-dicom',
|
||||
])
|
||||
"
|
||||
:label="$t('common:action:action')"
|
||||
@@ -261,7 +263,7 @@
|
||||
:title="$t('common:button:config')"
|
||||
icon="el-icon-setting"
|
||||
v-hasPermi="[
|
||||
'trials:trials-panel:setting:personnel-manage:edit-site',
|
||||
'trials:trials-panel:setting:personnel-manage:edit-dicom',
|
||||
]"
|
||||
@click="handleConfig(scope.row, 'add')"
|
||||
/>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -104,7 +104,7 @@
|
||||
? `${(scope.row.size / 1024 / 1024).toFixed(2)}MB`
|
||||
: scope.row.Size && scope.row.Size > 0
|
||||
? `${(scope.row.Size / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
<span>{{
|
||||
scope.row.FileSize && scope.row.FileSize > 0
|
||||
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -19,11 +19,11 @@
|
||||
size="small"
|
||||
style="margin-left: 10px"
|
||||
>
|
||||
( {{ $fd("TrialStatusEnum", trialInfo.TrialStatusStr) }} )
|
||||
( {{ $fd('TrialStatusEnum', trialInfo.TrialStatusStr) }} )
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="$t('trials:trials-list:form:trialType')">
|
||||
{{ $fd("TrialType", trialInfo.TrialType) }}
|
||||
{{ $fd('TrialType', trialInfo.TrialType) }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item
|
||||
@@ -70,8 +70,8 @@
|
||||
>
|
||||
<span v-if="trialInfo.DeclarationTypeEnumList">{{
|
||||
trialInfo.DeclarationTypeEnumList.map((v) =>
|
||||
$fd("DeclarationType", v)
|
||||
).join(", ")
|
||||
$fd('DeclarationType', v)
|
||||
).join(', ')
|
||||
}}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="$t('trials:trials-list:form:phase')">
|
||||
@@ -81,10 +81,10 @@
|
||||
<el-descriptions-item
|
||||
:label="$t('trials:trials-list:form:indicationType')"
|
||||
>
|
||||
{{ $fd("IndicationType", trialInfo.IndicationTypeId, "id") }}
|
||||
{{ $fd('IndicationType', trialInfo.IndicationTypeId, 'id') }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="$t('trials:trials-list:form:indication')">
|
||||
{{ $fd("Indication", trialInfo.IndicationEnum)
|
||||
{{ $fd('Indication', trialInfo.IndicationEnum)
|
||||
}}{{ trialInfo.Indication }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="$t('trials:trials-list:form:modality')">
|
||||
@@ -125,7 +125,7 @@
|
||||
<!-- </el-descriptions-item>-->
|
||||
|
||||
<el-descriptions-item :label="$t('trials:trials-list:form:expedited')">
|
||||
{{ $fd("YesOrNoForInt", trialInfo.Expedited) }}
|
||||
{{ $fd('YesOrNoForInt', trialInfo.Expedited) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="$t('trials:trials-list:form:projectCycle')">
|
||||
{{ trialInfo.ProjectCycle }}
|
||||
@@ -141,8 +141,8 @@
|
||||
>
|
||||
<span v-if="trialInfo.AttendedReviewerTypeEnumList">{{
|
||||
trialInfo.AttendedReviewerTypeEnumList.map((v) =>
|
||||
$fd("AttendedReviewerType", v)
|
||||
).join(", ")
|
||||
$fd('AttendedReviewerType', v)
|
||||
).join(', ')
|
||||
}}</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
@@ -151,53 +151,53 @@
|
||||
:value="trialInfo.UserFeedBackUnDealedCount || 0"
|
||||
:max="99"
|
||||
class="inBox"
|
||||
v-hasPermi="['role:pm']"
|
||||
v-hasPermi="['role:pm', 'role:admin', 'role:apm']"
|
||||
>
|
||||
<i class="el-icon-message" @click.stop="openFeedBack"></i>
|
||||
</el-badge>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getTrialInfo } from "@/api/trials";
|
||||
import { getTrialInfo } from '@/api/trials'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
trialInfo: {},
|
||||
trialId: "",
|
||||
trialStatus: "",
|
||||
trialId: '',
|
||||
trialStatus: '',
|
||||
formLoading: false,
|
||||
};
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.trialId = this.$route.query.trialId;
|
||||
this.initForm();
|
||||
this.trialId = this.$route.query.trialId
|
||||
this.initForm()
|
||||
},
|
||||
methods: {
|
||||
initForm() {
|
||||
this.formLoading = true;
|
||||
this.formLoading = true
|
||||
getTrialInfo(this.trialId)
|
||||
.then((res) => {
|
||||
this.formLoading = false;
|
||||
this.trialInfo = res.Result;
|
||||
this.formLoading = false
|
||||
this.trialInfo = res.Result
|
||||
this.trialInfo.ReviewTypeList =
|
||||
this.trialInfo.ReviewTypeList.length > 0
|
||||
? this.trialInfo.ReviewTypeList.join(", ")
|
||||
: "";
|
||||
var modalityArr = [];
|
||||
? this.trialInfo.ReviewTypeList.join(', ')
|
||||
: ''
|
||||
var modalityArr = []
|
||||
res.Result.ModalityIds.map((i) => {
|
||||
modalityArr.push(this.$fd("Modality", i, "id"));
|
||||
});
|
||||
this.trialInfo.ModalityList = modalityArr.join(", ");
|
||||
modalityArr.push(this.$fd('Modality', i, 'id'))
|
||||
})
|
||||
this.trialInfo.ModalityList = modalityArr.join(', ')
|
||||
this.trialInfo.Criterion =
|
||||
res.Result.CriterionList && res.Result.CriterionList.length > 0
|
||||
? res.Result.CriterionList.join(", ")
|
||||
: "";
|
||||
? res.Result.CriterionList.join(', ')
|
||||
: ''
|
||||
// this.trialInfo.Expedited = this.$fd('Trial_BasicInfo', res.Result.Expedited)
|
||||
// this.trialInfo.AttendedReviewerType = this.$fd('Trial_BasicInfo', res.Result.AttendedReviewerType)
|
||||
})
|
||||
.catch(() => {
|
||||
this.formLoading = false;
|
||||
});
|
||||
this.formLoading = false
|
||||
})
|
||||
},
|
||||
// 打开反馈意见列表
|
||||
openFeedBack() {
|
||||
@@ -208,12 +208,12 @@ export default {
|
||||
trialId: this.trialId,
|
||||
},
|
||||
callBack: () => {
|
||||
this.initForm();
|
||||
this.initForm()
|
||||
},
|
||||
});
|
||||
})
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.trial-information {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<!-- 中心编号 -->
|
||||
<el-form-item :label="$t('trials:uploadMonitor:table:siteId')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
v-model="searchData.TrialSiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 120px"
|
||||
@@ -387,7 +387,7 @@ const searchDataDefault = () => {
|
||||
PageIndex: 1,
|
||||
PageSize: 20,
|
||||
TrialId: '',
|
||||
SiteId: '',
|
||||
TrialSiteId: '',
|
||||
SubjectId: '',
|
||||
SubjectVisitId: '',
|
||||
SubjectInfo: '',
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
<span>{{
|
||||
scope.row.Size && scope.row.Size > 0
|
||||
? `${(scope.row.Size / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
<span>{{
|
||||
scope.row.FileSize && scope.row.FileSize > 0
|
||||
? `${(scope.row.FileSize / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -409,7 +409,7 @@
|
||||
<span>{{
|
||||
scope.row.size && scope.row.size > 0
|
||||
? `${(scope.row.size / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -329,7 +329,7 @@
|
||||
<span>{{
|
||||
scope.row.Size && scope.row.Size > 0
|
||||
? `${(scope.row.Size / 1024 / 1024).toFixed(2)}MB`
|
||||
: 0
|
||||
: ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
Reference in New Issue
Block a user