Files
hir_web/src/components/TrialsTab/index.vue
T
wangxiaoshuang bb8a1f84a4
continuous-integration/drone/push Build is passing
重置密码
2025-08-18 14:33:17 +08:00

350 lines
10 KiB
Vue

<!-- eslint-disable vue/no-use-v-if-with-v-for -->
<template>
<div class="trialsTab">
<el-tabs v-model="trialsTab" @tab-click="clickTab">
<el-tab-pane v-for="item of trialsRouter.children.find((v) => {
return v.name == 'TrialsPanel';
}).children" :key="`tab${item.path}`" :disabled="TotalNeedSignTrialDocCount !== 0 ||
(TrialStatusStr === 'Initializing' && item.PermissionStr !== 'trials:trials-panel:trial-information')
" :label="$t(item.LanguageMark)" :name="item.path">
<el-tabs v-if="!item.tabHiddn" v-model="trialsTabChild" @tab-click="clickTab">
<template v-for="item1 of item.children">
<el-tab-pane v-if="TrialConfig && isShow(item1.path)" :key="`tab1${item1.path}`" :disabled="TotalNeedSignTrialDocCount !== 0 ||
(TrialStatusStr === 'Initializing' &&
(item1.path ===
'/trials/trials-panel/setting/personnel-manage' ||
item1.path === '/trials/trials-panel/setting/qc-question' ||
item1.path ===
'/trials/trials-panel/setting/reading-unit' ||
item1.path ===
'/trials/trials-panel/setting/medical-audit' ||
item1.path === '/trials/trials-panel/setting/email-manage'))
" :label="$t(item1.LanguageMark)" :name="item1.path" />
</template>
</el-tabs>
</el-tab-pane>
</el-tabs>
<div style="
position: absolute;
top: 0;
right: 0;
display: flex;
justify-content: space-between;
align-items: center;
">
<trials-select />
<div>
<i class="iconfont" style="font-size: 30px; color: #ccc">&#xe680;</i>
</div>
<!-- 返回项目列表 -->
<div class="my_icon_box" :title="$t('trials:trials:title:backTrialList')" @click="goBack">
<i class="iconfont">&#xe670;</i>
<!-- 返回 -->
<span>{{ $t("trials:trials:title:back") }}</span>
</div>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { getTrialSelect, getTrialInfoHir } from "@/api/trials";
import TrialsSelect from "@/components/TrialsSelect/index.vue";
import store from "@/store";
export default {
name: "TrialsTab",
components: {
TrialsSelect,
},
data() {
return {
trialsRouter: this.$store.getters.routes.find((v) => {
return v.name === "Trials";
}),
trialsTab: null,
trialsTabChild: null,
tabTrialsId: null,
options: [],
TrialConfig: {},
TrialStatusStr: "Initializing",
trialId: null,
IsAdditionalAssessment: false,
IsAllOnlySRReading: false,
};
},
computed: {
...mapGetters(["TotalNeedSignTrialDocCount"]),
},
watch: {
$route(v, ov) {
this.trialId = this.$route.query.trialId;
this.selectedTab();
var query = ``;
var url = window.location.href;
if (~url.indexOf("?")) {
query = url.split("?")[1];
}
zzSessionStorage.setItem(
"lastWorkbench",
`${v.path}${query ? "?" : ""}${query}`
);
var firstGoIn = this.trialsRouter.children.find((v) => {
return v.name === "TrialsPanel";
}).children[0];
// var firstGoIn = this.trialsRouter.children.find(v => { return v.name === 'TrialsPanel' }).children.find(v => this.isShow(v.path))
if (this.trialsTab === "/trials/trials-panel") {
this.$router.replace({
path: `${firstGoIn.path}${query ? "?" : ""}${query}`,
});
if (firstGoIn.children && firstGoIn.children.length > 0) {
this.$router.replace({
path: `${firstGoIn.children[0].path}${query ? "?" : ""}${query}`,
});
}
}
// document.cookie = 'TrialId=' + this.$route.query.trialId + ';path=/'
},
trialId(v) {
getTrialInfoHir(this.trialId).then(
async (res) => {
var TrialStatusStr = res.Result.TrialStatusStr;
this.TrialStatusStr = TrialStatusStr;
await store.dispatch("user/setTrialStatusStr", TrialStatusStr);
}
);
},
},
mounted() {
// console.log(this.trialsRouter);
var query = ``;
var url = window.location.href;
if (~url.indexOf("?")) {
query = url.split("?")[1];
}
getTrialInfoHir(this.$route.query.trialId).then(
async (res) => {
var TrialStatusStr = res.Result.TrialStatusStr;
this.TrialStatusStr = TrialStatusStr;
await store.dispatch("user/setTrialStatusStr", TrialStatusStr);
}
);
this.selectedTab();
this.getTrialList();
var firstGoIn = this.trialsRouter.children.find((v) => {
return v.name === "TrialsPanel";
}).children[0];
// var firstGoIn = this.trialsRouter.children.find(v => { return v.name === 'TrialsPanel' }).children.find(v => this.isShow(v.path))
if (this.trialsTab === "/trials/trials-panel") {
this.$router.replace({
path: `${firstGoIn.path}${query ? "?" : ""}${query}`,
});
if (firstGoIn.children && firstGoIn.children.length > 0) {
this.$router.replace({
path: `${firstGoIn.children[0].path}${query ? "?" : ""}${query}`,
});
}
}
},
methods: {
isShow(path) {
var isShow = true;
var qualityList = [
"/trials/trials-panel/visit/crc-question",
"/trials/trials-panel/visit/qc-check",
"/trials/trials-panel/visit/qc-question",
"/trials/trials-panel/setting/qc-question",
];
var consistencyList = ["/trials/trials-panel/visit/consistency-check"];
var additionalAssessmentList = [
"/trials/trials-panel/subject/brain-metastasis",
];
var medicalAuditList = [
"/trials/trials-panel/setting/medical-audit",
"/trials/trials-panel/reading/medicalFeedback",
"/trials/trials-panel/reading/mimMedicalAudit",
"/trials/trials-panel/reading/pmMedicalFeedback",
];
var piReadingList = [
"/trials/trials-panel/reading/readingTask",
"/trials/trials-panel/reading/read-task",
"/trials/trials-panel/reading/medicalFeedback",
"/trials/trials-panel/reading/rereadTask",
];
var mmConfirmList = ["/trials/trials-panel/reading/confirmation"];
if (this.TrialConfig.QCProcessEnum === 0 && ~qualityList.indexOf(path)) {
isShow = false;
}
if (
!this.TrialConfig.IsImageConsistencyVerification &&
~consistencyList.indexOf(path)
) {
isShow = false;
}
if (
!this.IsAdditionalAssessment &&
~additionalAssessmentList.indexOf(path)
) {
isShow = false;
}
if (
!this.TrialConfig.IsMedicalReview &&
~medicalAuditList.indexOf(path)
) {
isShow = false;
}
if (
this.IsAllOnlySRReading &&
~piReadingList.indexOf(path) &&
this.hasPermi(["role:pi"])
) {
isShow = false;
}
if (
this.TrialConfig.EnrollConfirmDefaultUserType !== 10 &&
this.TrialConfig.PDProgressDefaultUserType !== 10 &&
mmConfirmList.includes(path)
) {
isShow = false;
}
return isShow;
},
goBack() {
this.$router.push({ path: "/trials/trials-list" });
},
selectTrials(v) {
var trial = this.options.find((o) => {
return o.Id === v;
});
this.$router.push({
path: `/trials/trials-panel?trialId=${trial.Id}&trialCode=${trial.TrialCode}`,
});
},
getTrialList() {
getTrialSelect()
.then((res) => {
this.options = res.Result;
this.tabTrialsId = this.$route.query.trialId;
})
.catch(() => { });
},
selectedTab() {
var path = this.$route.path;
if (this.$route.path.split("/").length > 4) {
this.trialsTab = this.getValue(path);
this.trialsTabChild = path;
} else {
this.trialsTab = path;
}
},
getValue(url) {
var site = url.lastIndexOf("/");
return url.substring(0, site);
},
clickTab(v) {
try {
var query = ``;
var url = window.location.href;
if (~url.indexOf("?")) {
query = url.split("?")[1];
}
this.$router.push({ path: `${v.name}${query ? "?" : ""}${query}` });
var trialsPanelList = this.trialsRouter.children.find((v) => {
return v.name === "TrialsPanel";
}).children;
var isHasChild =
trialsPanelList.find((c) => {
return c.path === v.name;
}) &&
trialsPanelList.find((c) => {
return c.path === v.name;
}).children;
if (
trialsPanelList.find((c) => {
return c.path === v.name;
}) &&
trialsPanelList.find((c) => {
return c.path === v.name;
}).tabHiddn
) {
return;
}
isHasChild = isHasChild
? isHasChild.filter((i) => this.isShow(i.path))
: [];
if (isHasChild && isHasChild.length > 0) {
this.trialsTabChild = isHasChild[0].path;
this.$router.push({
path: `${this.trialsTabChild}${query ? "?" : ""}${query}`,
});
}
} catch (e) {
console.log(e);
}
},
},
};
</script>
<style lang="scss">
.trialsTab {
.my_icon_box {
padding: 0 20px 0 0;
transition: color, transform 0.3s;
cursor: pointer;
color: #666;
display: flex;
justify-content: center;
align-items: center;
&:hover {
color: #428bca;
}
span {
margin-left: 3px;
font-size: 14px;
}
}
.el-tabs__header {
margin-bottom: 3px;
}
position: relative;
.el-input--medium .el-input__inner {
height: 44px;
line-height: 44px;
width: 280px;
border: none;
text-align: right;
}
}
.base-model-wrapper {
.el-dialog__header {
padding: 10px;
.el-dialog__headerbtn {
top: 10px;
right: 10px;
}
}
.el-dialog__body {
padding: 10px 10px 10px 10px;
.base-modal-body {
min-height: 100px;
max-height: 650px;
overflow-y: auto;
padding: 10px;
border: 1px solid #e0e0e0;
}
}
.el-dialog__footer {
padding: 10px;
}
}
</style>