Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
commit
6d4ae0a616
|
@ -1,9 +1,12 @@
|
|||
<template>
|
||||
<div class="study-info">
|
||||
<div class="functions" style="text-align:right">
|
||||
<div class="functions" style="text-align: right">
|
||||
<!-- 删除 -->
|
||||
<el-button
|
||||
v-if="(data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload))"
|
||||
v-if="
|
||||
data.SubmitState * 1 < 2 ||
|
||||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
||||
"
|
||||
v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']"
|
||||
:disabled="deleteArr.length === 0"
|
||||
type="primary"
|
||||
|
@ -11,7 +14,7 @@
|
|||
icon="el-icon-delete"
|
||||
@click="handleBatchDelete"
|
||||
>
|
||||
{{ $t('trials:uploadedDicoms:action:delete') }}
|
||||
{{ $t("trials:uploadedDicoms:action:delete") }}
|
||||
</el-button>
|
||||
<!-- 预览 -->
|
||||
<el-button
|
||||
|
@ -21,7 +24,7 @@
|
|||
icon="el-icon-view"
|
||||
@click="handlePreviewAllFiles"
|
||||
>
|
||||
{{ $t('trials:uploadedDicoms:action:preview') }}
|
||||
{{ $t("trials:uploadedDicoms:action:preview") }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
|
@ -33,7 +36,7 @@
|
|||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
v-if="!(data.SubmitState*1 === 2) || data.IsQCConfirmedReupload"
|
||||
v-if="!(data.SubmitState * 1 === 2) || data.IsQCConfirmedReupload"
|
||||
type="selection"
|
||||
width="55"
|
||||
/>
|
||||
|
@ -62,7 +65,7 @@
|
|||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ getBodyPart(scope.row.BodyPartForEdit)}}
|
||||
{{ getBodyPart(scope.row.BodyPartForEdit) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 序列数量 -->
|
||||
|
@ -87,7 +90,7 @@
|
|||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ moment(scope.row.StudyTime).format('YYYY-MM-DD') }}
|
||||
{{ moment(scope.row.StudyTime).format("YYYY-MM-DD") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 上传时间 -->
|
||||
|
@ -97,7 +100,11 @@
|
|||
min-width="80"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column :label="$t('common:action:action')" min-width="100" fixed="right">
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
min-width="100"
|
||||
fixed="right"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 预览 -->
|
||||
<el-button
|
||||
|
@ -107,10 +114,25 @@
|
|||
circle
|
||||
@click="handleViewStudy(scope.row)"
|
||||
/>
|
||||
<!-- 预览PET-CT数据 -->
|
||||
<el-button
|
||||
icon="el-icon-folder"
|
||||
:title="$t('trials:audit:tab:clinicalData')"
|
||||
v-if="
|
||||
['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) &&
|
||||
relationInfo.IsHaveStudyClinicalData
|
||||
"
|
||||
circle
|
||||
:disabled="scope.row.IsDeleted"
|
||||
@click="handlePreviewClinicalData(scope.row)"
|
||||
/>
|
||||
<!-- 编辑 -->
|
||||
<el-button
|
||||
icon="el-icon-edit-outline"
|
||||
v-if=" (data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload))"
|
||||
v-if="
|
||||
data.SubmitState * 1 < 2 ||
|
||||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
||||
"
|
||||
v-hasPermi="['trials:trials-panel:visit:crc-upload:edit']"
|
||||
title="编辑"
|
||||
circle
|
||||
|
@ -119,7 +141,10 @@
|
|||
/>
|
||||
<!-- 删除 -->
|
||||
<el-button
|
||||
v-if=" (data.SubmitState*1 < 2 || (data.SubmitState === 2 && data.IsQCConfirmedReupload))"
|
||||
v-if="
|
||||
data.SubmitState * 1 < 2 ||
|
||||
(data.SubmitState === 2 && data.IsQCConfirmedReupload)
|
||||
"
|
||||
v-hasPermi="['trials:trials-panel:visit:crc-upload:delete']"
|
||||
icon="el-icon-delete"
|
||||
:title="$t('trials:uploadedDicoms:action:delete')"
|
||||
|
@ -138,14 +163,24 @@
|
|||
custom-class="base-dialog-wrapper"
|
||||
width="600px"
|
||||
>
|
||||
<div style="padding:10px;border: 1px solid #e0e0e0;max-height:650px;overflow-y: auto;">
|
||||
<div
|
||||
style="
|
||||
padding: 10px;
|
||||
border: 1px solid #e0e0e0;
|
||||
max-height: 650px;
|
||||
overflow-y: auto;
|
||||
"
|
||||
>
|
||||
<el-form ref="studyForm" :model="studyForm" label-width="100px">
|
||||
<!-- 检查编号 -->
|
||||
<el-form-item :label="$t('trials:audit:table:studyId')">
|
||||
<el-input v-model="studyForm.StudyCode" disabled />
|
||||
</el-form-item>
|
||||
<!-- 检查类型 -->
|
||||
<el-form-item v-if="studyForm.IsDicomData" :label="$t('trials:audit:table:modality')">
|
||||
<el-form-item
|
||||
v-if="studyForm.IsDicomData"
|
||||
:label="$t('trials:audit:table:modality')"
|
||||
>
|
||||
<el-input v-model="studyForm.Modalities" disabled />
|
||||
</el-form-item>
|
||||
<!-- 检查类型 -->
|
||||
|
@ -154,11 +189,21 @@
|
|||
:label="$t('trials:audit:table:modality')"
|
||||
prop="Modalities"
|
||||
:rules="[
|
||||
{ required: true, message: $t('common:ruleMessage:specify'), trigger: 'blur' }
|
||||
]"
|
||||
{
|
||||
required: true,
|
||||
message: $t('common:ruleMessage:specify'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
]"
|
||||
>
|
||||
<el-radio-group v-model="studyForm.Modalities">
|
||||
<el-radio v-for="m in trialModalitys" v-show="m !== ''" :key="m" :label="m" style="margin-bottom: 15px;" />
|
||||
<el-radio
|
||||
v-for="m in trialModalitys"
|
||||
v-show="m !== ''"
|
||||
:key="m"
|
||||
:label="m"
|
||||
style="margin-bottom: 15px"
|
||||
/>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<!-- 检查部位 -->
|
||||
|
@ -166,11 +211,20 @@
|
|||
:label="$t('trials:audit:table:bodyPart')"
|
||||
prop="BodyPartForEdit"
|
||||
:rules="[
|
||||
{ required: true, message: $t('common:ruleMessage:specify'), trigger: 'blur' }
|
||||
]"
|
||||
{
|
||||
required: true,
|
||||
message: $t('common:ruleMessage:specify'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
]"
|
||||
>
|
||||
<el-checkbox-group v-model="studyForm.BodyPartForEdit">
|
||||
<el-checkbox v-for="bodyPart in trialBodyPartTypes" :key="bodyPart" :label="bodyPart">{{$fd('Bodypart',bodyPart)}}</el-checkbox>
|
||||
<el-checkbox
|
||||
v-for="bodyPart in trialBodyPartTypes"
|
||||
:key="bodyPart"
|
||||
:label="bodyPart"
|
||||
>{{ $fd("Bodypart", bodyPart) }}</el-checkbox
|
||||
>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<!-- 序列数量 -->
|
||||
|
@ -178,7 +232,10 @@
|
|||
<el-input v-model="studyForm.SeriesCount" disabled />
|
||||
</el-form-item>
|
||||
<!-- 图像数量 -->
|
||||
<el-form-item v-if="studyForm.InstanceCount" :label="$t('trials:audit:table:instanceCount')">
|
||||
<el-form-item
|
||||
v-if="studyForm.InstanceCount"
|
||||
:label="$t('trials:audit:table:instanceCount')"
|
||||
>
|
||||
<el-input v-model="studyForm.InstanceCount" disabled />
|
||||
</el-form-item>
|
||||
<!-- 检查日期 -->
|
||||
|
@ -189,40 +246,77 @@
|
|||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd"
|
||||
style="width:100%;"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button :disabled="btnLoading" size="small" type="primary" @click="editStudyInfoVisible = false">
|
||||
{{ $t('common:button:cancel') }}
|
||||
<el-button
|
||||
:disabled="btnLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="editStudyInfoVisible = false"
|
||||
>
|
||||
{{ $t("common:button:cancel") }}
|
||||
</el-button>
|
||||
<el-button :loading="btnLoading" size="small" type="primary" @click="handleUpdateStudyInfo">
|
||||
{{ $t('common:button:save') }}
|
||||
<el-button
|
||||
:loading="btnLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleUpdateStudyInfo"
|
||||
>
|
||||
{{ $t("common:button:save") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!--pet-ct临床数据上传-->
|
||||
<el-dialog
|
||||
v-if="petVisible"
|
||||
:show-close="true"
|
||||
:visible.sync="petVisible"
|
||||
append-to-body
|
||||
>
|
||||
<uploadPetClinicalData
|
||||
:subject-visit-id="data.Id"
|
||||
:data="data"
|
||||
:studyData="rowData"
|
||||
:allow-add-or-edit="false"
|
||||
/>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getSubjectVisitUploadedStudyList, deleteStudyList, updateModality } from '@/api/trials'
|
||||
import moment from 'moment'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import {
|
||||
getSubjectVisitUploadedStudyList,
|
||||
deleteStudyList,
|
||||
updateModality,
|
||||
} from "@/api/trials";
|
||||
import moment from "moment";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import uploadPetClinicalData from "./uploadPetClinicalData.vue";
|
||||
export default {
|
||||
name: 'StudyInfo',
|
||||
name: "StudyInfo",
|
||||
components: { uploadPetClinicalData },
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
return {};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
editStudyInfoVisible: false,
|
||||
studyForm: { StudyCode: '', IsDicomData: true, Modalities: '', BodyPartForEdit: [], SeriesCount: null, StudyTime: '' },
|
||||
studyForm: {
|
||||
StudyCode: "",
|
||||
IsDicomData: true,
|
||||
Modalities: "",
|
||||
BodyPartForEdit: [],
|
||||
SeriesCount: null,
|
||||
StudyTime: "",
|
||||
},
|
||||
deleteArr: [],
|
||||
studyLoading: false,
|
||||
studyList: [],
|
||||
|
@ -231,169 +325,198 @@ export default {
|
|||
relationInfo: null,
|
||||
trialBodyPartTypes: [],
|
||||
trialModalitys: [],
|
||||
btnLoading: false
|
||||
}
|
||||
btnLoading: false,
|
||||
|
||||
// pet-ctlinc数据
|
||||
petVisible: false,
|
||||
rowData: {},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getStudyInfo()
|
||||
this.getStudyInfo();
|
||||
},
|
||||
methods: {
|
||||
// 预览临床数据
|
||||
handlePreviewClinicalData(row) {
|
||||
this.rowData = row;
|
||||
this.petVisible = true;
|
||||
},
|
||||
// 打开检查信息编辑框
|
||||
handleEditStudy(row) {
|
||||
this.editStudyInfoVisible = true
|
||||
this.studyForm = { ...row }
|
||||
var bodyPart = []
|
||||
if (this.studyForm.BodyPartForEdit.indexOf('|') !== -1) {
|
||||
bodyPart = this.studyForm.BodyPartForEdit.split('|')
|
||||
} else if (this.studyForm.BodyPartForEdit !== '') {
|
||||
bodyPart.push(this.studyForm.BodyPartForEdit)
|
||||
this.editStudyInfoVisible = true;
|
||||
this.studyForm = { ...row };
|
||||
var bodyPart = [];
|
||||
if (this.studyForm.BodyPartForEdit.indexOf("|") !== -1) {
|
||||
bodyPart = this.studyForm.BodyPartForEdit.split("|");
|
||||
} else if (this.studyForm.BodyPartForEdit !== "") {
|
||||
bodyPart.push(this.studyForm.BodyPartForEdit);
|
||||
}
|
||||
this.studyForm.BodyPartForEdit = bodyPart
|
||||
this.studyForm.BodyPartForEdit = bodyPart;
|
||||
},
|
||||
// 更新拍片部位/拍片类型信息
|
||||
handleUpdateStudyInfo() {
|
||||
this.$refs['studyForm'].validate((valid) => {
|
||||
if (!valid) return
|
||||
this.btnLoading = true
|
||||
this.studyForm.BodyPart = this.studyForm.BodyPartForEdit.join('|')
|
||||
this.studyForm.Modality = this.studyForm.Modalities
|
||||
this.$refs["studyForm"].validate((valid) => {
|
||||
if (!valid) return;
|
||||
this.btnLoading = true;
|
||||
this.studyForm.BodyPart = this.studyForm.BodyPartForEdit.join("|");
|
||||
this.studyForm.Modality = this.studyForm.Modalities;
|
||||
var params = {
|
||||
id: this.studyForm.StudyId,
|
||||
subjectVisitId: this.data.Id,
|
||||
type: 1,
|
||||
modality: this.studyForm.Modality,
|
||||
bodyPart: this.studyForm.BodyPart
|
||||
}
|
||||
updateModality(this.data.TrialId, params).then(res => {
|
||||
this.btnLoading = false
|
||||
if (res.IsSuccess) {
|
||||
this.getStudyInfo()
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
this.editStudyInfoVisible = false
|
||||
}
|
||||
}).catch(() => { this.btnLoading = false })
|
||||
})
|
||||
bodyPart: this.studyForm.BodyPart,
|
||||
};
|
||||
updateModality(this.data.TrialId, params)
|
||||
.then((res) => {
|
||||
this.btnLoading = false;
|
||||
if (res.IsSuccess) {
|
||||
this.getStudyInfo();
|
||||
this.$message.success(
|
||||
this.$t("common:message:savedSuccessfully")
|
||||
);
|
||||
this.editStudyInfoVisible = false;
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
this.btnLoading = false;
|
||||
});
|
||||
});
|
||||
},
|
||||
getStudyInfo() {
|
||||
this.studyLoading = true
|
||||
getSubjectVisitUploadedStudyList(this.data.Id).then(res => {
|
||||
this.studyList = res.Result
|
||||
this.studyLoading = false
|
||||
this.relationInfo = res.OtherInfo
|
||||
console.log(this.relationInfo)
|
||||
this.trialBodyPartTypes =
|
||||
this.relationInfo.BodyPartTypes ? this.relationInfo.BodyPartTypes.split('|') : []
|
||||
this.trialModalitys =
|
||||
this.relationInfo.Modalitys ? this.relationInfo.Modalitys.split('|') : []
|
||||
console.log(this.trialBodyPartTypes)
|
||||
console.log(this.trialModalitys)
|
||||
}).catch(() => { this.studyLoading = false })
|
||||
this.studyLoading = true;
|
||||
getSubjectVisitUploadedStudyList(this.data.Id)
|
||||
.then((res) => {
|
||||
this.studyList = res.Result;
|
||||
this.studyLoading = false;
|
||||
this.relationInfo = res.OtherInfo;
|
||||
console.log(this.relationInfo);
|
||||
this.trialBodyPartTypes = this.relationInfo.BodyPartTypes
|
||||
? this.relationInfo.BodyPartTypes.split("|")
|
||||
: [];
|
||||
this.trialModalitys = this.relationInfo.Modalitys
|
||||
? this.relationInfo.Modalitys.split("|")
|
||||
: [];
|
||||
console.log(this.trialBodyPartTypes);
|
||||
console.log(this.trialModalitys);
|
||||
})
|
||||
.catch(() => {
|
||||
this.studyLoading = false;
|
||||
});
|
||||
},
|
||||
// 批量删除
|
||||
handleBatchDelete() {
|
||||
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
this.$confirm(this.$t("trials:uploadedDicoms:message:deleteMes"), {
|
||||
type: "warning",
|
||||
distinguishCancelAndClose: true,
|
||||
})
|
||||
.then(() => {
|
||||
this.studyLoading = true
|
||||
this.studyLoading = true;
|
||||
deleteStudyList(this.trialId, this.data.Id, this.deleteArr)
|
||||
.then(res => {
|
||||
.then((res) => {
|
||||
if (res.IsSuccess) {
|
||||
this.getStudyInfo()
|
||||
this.$emit('getList')
|
||||
this.$message.success(this.$t('trials:uploadedDicoms:message:deleteSuccessfully'))
|
||||
this.getStudyInfo();
|
||||
this.$emit("getList");
|
||||
this.$message.success(
|
||||
this.$t("trials:uploadedDicoms:message:deleteSuccessfully")
|
||||
);
|
||||
}
|
||||
}).catch(() => {
|
||||
this.studyLoading = true
|
||||
})
|
||||
}).catch(() => {})
|
||||
.catch(() => {
|
||||
this.studyLoading = true;
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
// 预览所有影像
|
||||
handlePreviewAllFiles() {
|
||||
var tokenKey = getToken()
|
||||
var tokenKey = getToken();
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showvisitdicoms?trialId=${this.data.TrialId}&visitInfo=${this.data.VisitName}(${this.data.VisitNum})&subjectVisitId=${this.data.Id}&TokenKey=${tokenKey}`
|
||||
})
|
||||
var newWindow = window.open(routeData.href, '_blank')
|
||||
this.$emit('setOpenWindow',newWindow)
|
||||
path: `/showvisitdicoms?trialId=${this.data.TrialId}&visitInfo=${this.data.VisitName}(${this.data.VisitNum})&subjectVisitId=${this.data.Id}&TokenKey=${tokenKey}`,
|
||||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
},
|
||||
// 预览影像
|
||||
handleViewStudy(row) {
|
||||
var token = getToken()
|
||||
var token = getToken();
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showdicom?studyId=${row.StudyId}&TokenKey=${token}&type=Study`
|
||||
})
|
||||
var newWindow =window.open(routeData.href, '_blank')
|
||||
this.$emit('setOpenWindow',newWindow)
|
||||
path: `/showdicom?studyId=${row.StudyId}&TokenKey=${token}&type=Study`,
|
||||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
},
|
||||
// 删除某个检查
|
||||
handleDeleteStudy(row) {
|
||||
this.$confirm(this.$t('trials:uploadedDicoms:message:deleteMes'), {
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
this.$confirm(this.$t("trials:uploadedDicoms:message:deleteMes"), {
|
||||
type: "warning",
|
||||
distinguishCancelAndClose: true,
|
||||
})
|
||||
.then(() => {
|
||||
this.studyLoading = true
|
||||
this.studyLoading = true;
|
||||
deleteStudyList(this.trialId, this.data.Id, [row.StudyId])
|
||||
.then(res => {
|
||||
.then((res) => {
|
||||
if (res.IsSuccess) {
|
||||
this.getStudyInfo()
|
||||
this.$emit('getList')
|
||||
this.$message.success(this.$t('trials:uploadedDicoms:message:deleteSuccessfully'))
|
||||
this.getStudyInfo();
|
||||
this.$emit("getList");
|
||||
this.$message.success(
|
||||
this.$t("trials:uploadedDicoms:message:deleteSuccessfully")
|
||||
);
|
||||
}
|
||||
}).catch(() => {
|
||||
this.studyLoading = true
|
||||
})
|
||||
}).catch(() => {})
|
||||
.catch(() => {
|
||||
this.studyLoading = true;
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
getBodyPart(bodyPart) {
|
||||
if (!bodyPart) return ''
|
||||
var separator = ','
|
||||
if (bodyPart.indexOf('|') > -1) {
|
||||
separator = '|'
|
||||
} else if (bodyPart.indexOf(',') > -1) {
|
||||
separator = ','
|
||||
} else if (bodyPart.indexOf(',') > -1) {
|
||||
separator = ','
|
||||
if (!bodyPart) return "";
|
||||
var separator = ",";
|
||||
if (bodyPart.indexOf("|") > -1) {
|
||||
separator = "|";
|
||||
} else if (bodyPart.indexOf(",") > -1) {
|
||||
separator = ",";
|
||||
} else if (bodyPart.indexOf(",") > -1) {
|
||||
separator = ",";
|
||||
}
|
||||
var arr = bodyPart.split(separator)
|
||||
var newArr = arr.map(i => {
|
||||
return this.$fd('Bodypart', i.trim())
|
||||
})
|
||||
return newArr.join(' | ')
|
||||
var arr = bodyPart.split(separator);
|
||||
var newArr = arr.map((i) => {
|
||||
return this.$fd("Bodypart", i.trim());
|
||||
});
|
||||
return newArr.join(" | ");
|
||||
},
|
||||
// 获取勾选项
|
||||
handleSelectionChange(val) {
|
||||
this.deleteArr = []
|
||||
val.forEach(item => {
|
||||
this.deleteArr.push(item.StudyId)
|
||||
})
|
||||
this.deleteArr = [];
|
||||
val.forEach((item) => {
|
||||
this.deleteArr.push(item.StudyId);
|
||||
});
|
||||
},
|
||||
// 设置已删除行勾选状态
|
||||
hasDeleted(row) {
|
||||
if (row.IsDeleted) {
|
||||
return false
|
||||
return false;
|
||||
} else {
|
||||
return true
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// 设置已删除序列行样式
|
||||
tableRowClassName({ row, rowIndex }) {
|
||||
if (row.IsDeleted) {
|
||||
return 'delete-row'
|
||||
return "delete-row";
|
||||
} else {
|
||||
return ''
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.study-info{
|
||||
.delete-row{
|
||||
text-decoration-line: line-through;
|
||||
color: #c0c4cc;
|
||||
}
|
||||
.study-info {
|
||||
.delete-row {
|
||||
text-decoration-line: line-through;
|
||||
color: #c0c4cc;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div class="study-info">
|
||||
<div class="functions" style="text-align:right">
|
||||
<div class="functions" style="text-align: right">
|
||||
<!-- 预览 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
|
@ -9,7 +9,7 @@
|
|||
icon="el-icon-view"
|
||||
@click="handlePreviewAllFiles"
|
||||
>
|
||||
{{ $t('trials:audit:action:preview') }}
|
||||
{{ $t("trials:audit:action:preview") }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
|
@ -27,25 +27,25 @@
|
|||
min-width="80"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- <!– 检查类型 –>-->
|
||||
<!-- <el-table-column-->
|
||||
<!-- prop="Modalities"-->
|
||||
<!-- :label="$t('trials:audit:table:modality')"-->
|
||||
<!-- min-width="80"-->
|
||||
<!-- show-overflow-tooltip-->
|
||||
<!-- />-->
|
||||
<!-- <!– 检查部位 –>-->
|
||||
<!-- <el-table-column-->
|
||||
<!-- prop="BodyPartExamined"-->
|
||||
<!-- :label="$t('trials:audit:table:bodyPart')"-->
|
||||
<!-- min-width="100"-->
|
||||
<!-- show-overflow-tooltip-->
|
||||
<!-- >-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- {{ getBodyPart(scope.row.BodyPartExamined) }}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <!– 检查类型 –>-->
|
||||
<!-- <!– 检查类型 –>-->
|
||||
<!-- <el-table-column-->
|
||||
<!-- prop="Modalities"-->
|
||||
<!-- :label="$t('trials:audit:table:modality')"-->
|
||||
<!-- min-width="80"-->
|
||||
<!-- show-overflow-tooltip-->
|
||||
<!-- />-->
|
||||
<!-- <!– 检查部位 –>-->
|
||||
<!-- <el-table-column-->
|
||||
<!-- prop="BodyPartExamined"-->
|
||||
<!-- :label="$t('trials:audit:table:bodyPart')"-->
|
||||
<!-- min-width="100"-->
|
||||
<!-- show-overflow-tooltip-->
|
||||
<!-- >-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- {{ getBodyPart(scope.row.BodyPartExamined) }}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <!– 检查类型 –>-->
|
||||
<el-table-column
|
||||
prop="ModalityForEdit"
|
||||
:label="$t('trials:audit:table:modality')"
|
||||
|
@ -63,7 +63,7 @@
|
|||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ getBodyPart(scope.row.BodyPartForEdit)}}
|
||||
{{ getBodyPart(scope.row.BodyPartForEdit) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 序列数量 -->
|
||||
|
@ -88,7 +88,7 @@
|
|||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ moment(scope.row.StudyTime).format('YYYY-MM-DD') }}
|
||||
{{ moment(scope.row.StudyTime).format("YYYY-MM-DD") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 上传时间 -->
|
||||
|
@ -98,7 +98,11 @@
|
|||
min-width="80"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column :label="$t('common:action:action')" min-width="100" fixed="right">
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
min-width="100"
|
||||
fixed="right"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 预览 -->
|
||||
<el-button
|
||||
|
@ -108,129 +112,178 @@
|
|||
circle
|
||||
@click="handleViewStudy(scope.row)"
|
||||
/>
|
||||
<!-- 预览PET-CT数据 -->
|
||||
<el-button
|
||||
icon="el-icon-folder"
|
||||
:title="$t('trials:audit:tab:clinicalData')"
|
||||
v-if="
|
||||
['PT、CT', 'CT、PT', 'PET-CT'].includes(scope.row.Modalities) &&
|
||||
relationInfo.IsHaveStudyClinicalData
|
||||
"
|
||||
circle
|
||||
:disabled="scope.row.IsDeleted"
|
||||
@click="handlePreviewClinicalData(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--pet-ct临床数据预览-->
|
||||
<el-dialog
|
||||
v-if="petVisible"
|
||||
:show-close="true"
|
||||
:visible.sync="petVisible"
|
||||
append-to-body
|
||||
>
|
||||
<uploadPetClinicalData
|
||||
:subject-visit-id="data.Id"
|
||||
:data="data"
|
||||
:studyData="rowData"
|
||||
:allow-add-or-edit="false"
|
||||
/>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getSubjectVisitUploadedStudyList, deleteStudyList } from '@/api/trials'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import moment from 'moment'
|
||||
import {
|
||||
getSubjectVisitUploadedStudyList,
|
||||
deleteStudyList,
|
||||
} from "@/api/trials";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import uploadPetClinicalData from "@/views/trials/trials-panel/visit/crc-upload/components/uploadPetClinicalData.vue";
|
||||
import moment from "moment";
|
||||
export default {
|
||||
name: 'StudyInfo',
|
||||
name: "StudyInfo",
|
||||
components: { uploadPetClinicalData },
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
return {};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
|
||||
userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
|
||||
deleteArr: [],
|
||||
studyLoading: false,
|
||||
studyList: [],
|
||||
trialId: this.$route.query.trialId,
|
||||
moment
|
||||
}
|
||||
moment,
|
||||
// pet-ct临床数据
|
||||
petVisible: false,
|
||||
rowData: {},
|
||||
relationInfo: {},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getStudyInfo()
|
||||
this.getStudyInfo();
|
||||
},
|
||||
methods: {
|
||||
// 预览临床数据
|
||||
handlePreviewClinicalData(row) {
|
||||
this.rowData = row;
|
||||
this.petVisible = true;
|
||||
},
|
||||
getStudyInfo() {
|
||||
this.studyLoading = true
|
||||
getSubjectVisitUploadedStudyList(this.data.Id).then(res => {
|
||||
this.studyList = res.Result
|
||||
this.studyLoading = false
|
||||
}).catch(() => { this.studyLoading = false })
|
||||
this.studyLoading = true;
|
||||
getSubjectVisitUploadedStudyList(this.data.Id)
|
||||
.then((res) => {
|
||||
this.studyList = res.Result;
|
||||
this.relationInfo = res.OtherInfo;
|
||||
this.studyLoading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.studyLoading = false;
|
||||
});
|
||||
},
|
||||
// 批量删除
|
||||
handleBatchDelete() {
|
||||
this.$confirm(this.$t('trials:qcCheck:message:delete'), {
|
||||
type: 'warning',
|
||||
distinguishCancelAndClose: true
|
||||
this.$confirm(this.$t("trials:qcCheck:message:delete"), {
|
||||
type: "warning",
|
||||
distinguishCancelAndClose: true,
|
||||
})
|
||||
.then(() => {
|
||||
this.studyLoading = true
|
||||
this.studyLoading = true;
|
||||
deleteStudyList(this.trialId, this.data.Id, this.deleteArr)
|
||||
.then(res => {
|
||||
.then((res) => {
|
||||
if (res.IsSuccess) {
|
||||
this.getStudyInfo()
|
||||
this.$emit('getList')
|
||||
this.$message.success(this.$t('trials:qcCheck:message:deletedSuccessfully'))
|
||||
this.getStudyInfo();
|
||||
this.$emit("getList");
|
||||
this.$message.success(
|
||||
this.$t("trials:qcCheck:message:deletedSuccessfully")
|
||||
);
|
||||
}
|
||||
}).catch(() => {
|
||||
this.studyLoading = true
|
||||
})
|
||||
}).catch(() => {})
|
||||
.catch(() => {
|
||||
this.studyLoading = true;
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
// 预览所有影像
|
||||
handlePreviewAllFiles() {
|
||||
var token = getToken()
|
||||
var token = getToken();
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showvisitdicoms?trialId=${this.data.TrialId}&visitInfo=${this.data.VisitName}(${this.data.VisitNum})&subjectVisitId=${this.data.Id}&TokenKey=${token}`
|
||||
})
|
||||
window.open(routeData.href, '_blank')
|
||||
path: `/showvisitdicoms?trialId=${this.data.TrialId}&visitInfo=${this.data.VisitName}(${this.data.VisitNum})&subjectVisitId=${this.data.Id}&TokenKey=${token}`,
|
||||
});
|
||||
window.open(routeData.href, "_blank");
|
||||
},
|
||||
// 预览影像
|
||||
handleViewStudy(row) {
|
||||
var token = getToken()
|
||||
var token = getToken();
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showdicom?studyId=${row.StudyId}&TokenKey=${token}&type=Study`
|
||||
})
|
||||
window.open(routeData.href, '_blank')
|
||||
path: `/showdicom?studyId=${row.StudyId}&TokenKey=${token}&type=Study`,
|
||||
});
|
||||
window.open(routeData.href, "_blank");
|
||||
},
|
||||
getBodyPart(bodyPart) {
|
||||
if (!bodyPart) return ''
|
||||
var separator = ','
|
||||
if (bodyPart.indexOf('|') > -1) {
|
||||
separator = '|'
|
||||
} else if (bodyPart.indexOf(',') > -1) {
|
||||
separator = ','
|
||||
} else if (bodyPart.indexOf(',') > -1) {
|
||||
separator = ','
|
||||
if (!bodyPart) return "";
|
||||
var separator = ",";
|
||||
if (bodyPart.indexOf("|") > -1) {
|
||||
separator = "|";
|
||||
} else if (bodyPart.indexOf(",") > -1) {
|
||||
separator = ",";
|
||||
} else if (bodyPart.indexOf(",") > -1) {
|
||||
separator = ",";
|
||||
}
|
||||
var arr = bodyPart.split(separator)
|
||||
var newArr = arr.map(i => {
|
||||
return this.$fd('Bodypart', i.trim())
|
||||
})
|
||||
return newArr.join(' | ')
|
||||
var arr = bodyPart.split(separator);
|
||||
var newArr = arr.map((i) => {
|
||||
return this.$fd("Bodypart", i.trim());
|
||||
});
|
||||
return newArr.join(" | ");
|
||||
},
|
||||
// 获取勾选项
|
||||
handleSelectionChange(val) {
|
||||
this.deleteArr = []
|
||||
val.forEach(item => {
|
||||
this.deleteArr.push(item.StudyId)
|
||||
})
|
||||
this.deleteArr = [];
|
||||
val.forEach((item) => {
|
||||
this.deleteArr.push(item.StudyId);
|
||||
});
|
||||
},
|
||||
// 设置已删除行勾选状态
|
||||
hasDeleted(row) {
|
||||
if (row.IsDeleted) {
|
||||
return false
|
||||
return false;
|
||||
} else {
|
||||
return true
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// 设置已删除序列行样式
|
||||
tableRowClassName({ row, rowIndex }) {
|
||||
if (row.IsDeleted) {
|
||||
return 'delete-row'
|
||||
return "delete-row";
|
||||
} else {
|
||||
return ''
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.study-info{
|
||||
.delete-row{
|
||||
text-decoration-line: line-through;
|
||||
color: #c0c4cc;
|
||||
}
|
||||
.study-info {
|
||||
.delete-row {
|
||||
text-decoration-line: line-through;
|
||||
color: #c0c4cc;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
Loading…
Reference in New Issue