search_ui/pages/search/(show)/[key]/[id]/EntityQRule.vue

355 lines
10 KiB
Vue
Raw Permalink Normal View History

2025-02-01 11:06:10 +00:00
<!-- برای نمایش یک جزء از قانون استفاده می شود -->
<!-- don't change the class: problem-section__content,
otherwise the remove link will not work. -->
<template>
<main class="main" id="top">
<the-sidebar
:showUserAvatar="!isMajlesBuild"
:menu="sidbarMenu"
></the-sidebar>
<section
class="main-page__content"
:class="{ expanded: !isSidebarCollapsed }"
>
<div class="container-fluid">
<div
:class="buildName + '-header-color'"
class="row align-items-center"
>
<div class="col col-lg-auto order-1">
<div class="d-flex align-items-center">
<button
name="button"
type="button"
class="toggle-mobile-nav dropdown-hamburger d-md-none"
@click.prevent="toggleSidebarMenu()"
>
<span class="sr-only">باز کردن منوی کنار</span>
<svg class="s18" data-testid="sidebar-icon">
<use href="assets/common/img/icons.svg#sidebar"></use>
</svg>
</button>
<router-link
:to="{
name: 'defaultRoute',
}"
classes="btn me-3"
>
<img
:src="logoPhoto()"
:alt="appLongTitle"
class="img-fluid logo"
style="max-width: 2.5em"
/>
</router-link>
</div>
<!-- <div
class="d-flex align-items-center"
v-if="navigateChartSchemaGetter?.length"
>
<label for="repositories-desktop" class="ms-2 no-wrap">
بانک داده
</label>
<multiselect
:allow-empty="false"
:searchable="true"
:close-on-select="true"
:show-labels="false"
label="label"
track-by="key"
placeholder="انتخاب فهرست"
:value="selectedNavigation"
:options="navigateChartSchemaGetter"
@select="onSelectNavigation"
:hide-selected="false"
:max-height="200"
id="repositories-desktop"
>
</multiselect>
</div> -->
</div>
<div class="col-12 col-lg order-3 order-lg-2">
<div class="nav-tabs-container nav-tabs">
<ul v-if="navList" class="nav">
<li
class="nav-item desktop"
v-for="(navItem, index) in navList"
:key="index"
>
<button
:title="navItem.title"
type="button"
class="btn nav-link"
@click.prevent="setActiveTab(navItem)"
:class="{
active: qruleActiveTabGetter?.key == navItem.key,
}"
>
{{ navItem.title }}
</button>
</li>
<li
class="nav-item mobile tabs-more-btn d-lg-none"
v-if="navList?.length > 2"
>
<div class="dropdown">
<button
class="btn"
type="button"
id="dropdownMenuButton"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
<svg class="icon icon-Component-81--1">
<use xlink:href="#icon-Component-81--1"></use>
</svg>
</button>
<div
class="dropdown-menu"
aria-labelledby="dropdownMenuButton"
>
<!-- v-if="canSee(navItem.key + '_view') && index > 2" -->
<a
class="dropdown-item"
href="#"
v-for="(navItem, index) in navList"
:key="index"
@click.prevent="setActiveTab(navItem)"
:class="{
active: qruleActiveTabGetter?.key == navItem.key,
}"
v-if="index > 2"
>{{ navItem.title }}</a
>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="row mx-2">
<div class="col-12">
<component
v-if="mainComponentName"
:key="renderId"
:propText="mainComponentName"
:is="mainComponentName"
:slug="slug"
:schemaItems="tabSchemaItems"
:routeEntityid="myEntityid"
@changeEntityid="changeEntityid"
@set-active-tab="setActiveTab"
></component>
</div>
</div>
</div>
</section>
</main>
</template>
<script>
import sidbarMenuDefault from "~/json/entity/json/detailMenu.json";
import sidbarMenuMajles from "~/json/entity/json/detailMenuMajles.json";
import { mapActions, mapState } from "pinia";
import entityApi from "~/apis/entityApi";
import { useStorage } from "@vueuse/core";
export default {
name:'qrule',
props: {
slug: {
default: "qmodel",
},
},
beforeMount() {
this.httpService = new HttpService(import.meta.env.VITE_REPO_BASE_URL);
},
mounted() {
this.getSchemas();
if (this.qruleActiveSchemaGetter?.tabs)
this.setActiveTab(this.qruleActiveSchemaGetter?.tabs[0]);
// if (this.qruleSchemaGetter) {
// let qModelRuleIndex = this.qruleSchemaGetter.findIndex(
// (item) => item.key == "qmodelrule"
// );
// this.setActiveTab(this.qruleSchemaGetter[qModelRuleIndex]?.tabs[0]);
// }
this.myEntityid =
this.myEntityid == "" ? this.$route.params?.id : this.myEntityid;
},
data() {
return {
sidbarMenuDefault: sidbarMenuDefault,
sidbarMenuMajles: sidbarMenuMajles,
myEntityid: "",
renderId: 1,
mainComponentName: null,
tabSchemaItems: undefined,
};
},
computed: {
...mapState("entity", [
"selectedItemEntityGetter",
"qruleSchemaGetter",
"qruleActiveSchemaGetter",
"qruleActiveTabGetter",
"breadCrumbGetter",
]),
...mapState(["organNameGetter"]),
...mapState(["isSidebarCollapsed"]),
sidbarMenu() {
if (isMajlesBuild()) return this.sidbarMenuMajles;
else return this.sidbarMenuDefault;
},
navList() {
if (!isMajlesBuild()) return this.qruleActiveSchemaGetter?.tabs;
if (this.qruleActiveSchemaGetter?.tabs)
return this.qruleActiveSchemaGetter?.tabs.slice(
0,
this.qruleActiveSchemaGetter.tabs.length - 1
);
else return [];
},
},
methods: {
...mapActions("entity", [
"qruleActiveSchemaSetter",
"qruleSchemaSetter",
"qruleActiveTabSetter",
"breadCrumbSetter",
]),
...mapActions(["checkPermissions"]),
changeEntityid(newEntityid) {
this.myEntityid = newEntityid;
// this.renderId++;
},
getSchemas() {
let localStoageSchema = useStorage("qaSchema",undefined).value;
if (localStoageSchema) {
let schema = JSON.parse(localStoageSchema);
this.qruleActiveSchemaSetter(schema);
this.setActiveTab(this.qruleActiveSchemaGetter?.tabs[0]);
return;
}
this.httpService
.postRequest(entityApi.schema.list, {
organ: this.organNameGetter,
system: "entityView",
build_state: buildState(),
})
.then((response) => {
// console.log(response);
const routeParamsKey = this.$route.name;
let schemaBasedOnRouteKeyIndex = response.data.entityView.findIndex(
(item) => item.key == routeParamsKey
);
schemaBasedOnRouteKeyIndex =
schemaBasedOnRouteKeyIndex == -1 ? 0 : schemaBasedOnRouteKeyIndex;
this.qruleSchemaSetter(response.data.entityView);
this.qruleActiveSchemaSetter(
response.data.entityView[schemaBasedOnRouteKeyIndex]
);
this.setActiveTab(this.qruleActiveSchemaGetter?.tabs[0]);
// this.qruleActiveTabSetter(
// response.data.entityView[schemaBasedOnRouteKeyIndex].tabs[0]
// );
// this.updateMainContent();
})
},
setActiveTab(tab) {
this.renderId++;
this.qruleActiveTabSetter(tab);
this.tabSchemaItems = undefined;
this.mainComponentName = "EntityQModelRule";
this.tabSchemaItems = tab.items
? tab.items
: this.qruleActiveSchemaGetter.items;
if (tab.componentName) {
this.mainComponentName = tab.componentName;
}
this.resetBreadcrumb();
},
resetBreadcrumb() {
if (this.qruleActiveTabGetter.key == "rulelist") {
this.breadCrumbSetter();
} else if (this.qruleActiveTabGetter.key == "rulelogic") {
let bread = this.breadCrumbGetter;
bread.pop();
this.breadCrumbSetter(bread.length ?? undefined );
}
// else if(this.qruleActiveTabGetter.key == 'ruletriple')
},
},
};
</script>
<style scoped lang="scss">
.show-reports-button {
opacity: 0.6;
color: #92a2b2;
}
.problem-detail {
width: 98% !important;
margin: 0 !important;
}
.text-title-QSection1 {
color: #00abff !important;
&:hover {
// color: blue !important;
text-decoration: underline !important;
}
}
.text-title-nextItem {
color: #00abff !important;
&:hover {
color: #0575ad !important;
}
}
.text-title-prevItem {
color: #00abff !important;
&:hover {
color: #0575ad !important;
}
}
.text-title-QSection2 {
color: #00abff !important;
&:hover {
// color: blue !important;
text-decoration: underline !important;
}
}
.nav-tabs-container {
display: flex;
justify-content: center;
}
</style>