1839 lines
60 KiB
Vue
1839 lines
60 KiB
Vue
<template>
|
||
<NuxtLayout name="search-layout" :menu="sidbarMenu">
|
||
<!-- <Head> -->
|
||
<!-- <Title>{{ metaTitle }}</Title> -->
|
||
<!-- <Meta name="description" :content="title" /> -->
|
||
<!-- <Style type="text/css" children="body { background-color: green; }" ></Style> -->
|
||
<!-- </Head> -->
|
||
<div class="container-fluid">
|
||
<div class="row">
|
||
<!-- #region منو سمت راست -->
|
||
<div class="col-auto col-md-3">
|
||
<template v-if="!isMajlesBuild() && showListRight">
|
||
<div
|
||
class="filter-list-container"
|
||
:class="{ expanded: showFilter }"
|
||
>
|
||
<ul
|
||
:class="buildName() + '-header-color'"
|
||
v-if="$route.name != 'research'"
|
||
class="nav nav-tabs pt-1 d-none d-xl-flex"
|
||
>
|
||
<li class="nav-item desktop">
|
||
<button
|
||
title=""
|
||
type="button"
|
||
@click.prevent="setActiveListType('Navigation', 'simple')"
|
||
class="btn nav-link"
|
||
:class="{
|
||
active: activeListType == 'simple',
|
||
}"
|
||
>
|
||
{{ listTabTitle1 }}
|
||
</button>
|
||
</li>
|
||
<li class="nav-item desktop">
|
||
<button
|
||
title=""
|
||
type="button"
|
||
@click.prevent="setActiveListType('UserHistory', 'history')"
|
||
class="btn nav-link"
|
||
:class="{
|
||
active: activeListType == 'history',
|
||
}"
|
||
>
|
||
{{ listTabTitle2 }}
|
||
</button>
|
||
</li>
|
||
</ul>
|
||
<div class="mobile-mode d-lg-none">
|
||
<button
|
||
v-if="showFilter"
|
||
class="btn mb-1"
|
||
@click.prevnet="showFilter = !showFilter"
|
||
>
|
||
<svg class="icon icon-chevron-double-right ms-1">
|
||
<use xlink:href="#icon-chevron-double-right"></use>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
<component
|
||
:key="renderResearch"
|
||
class="main-filter"
|
||
:item="getPanelComponent"
|
||
:is="panelComponentName"
|
||
ref="panelComponent"
|
||
@fishHandlerInResearch="researchModalHandler"
|
||
@content-updated="updateMainContent"
|
||
></component>
|
||
</div>
|
||
</template>
|
||
</div>
|
||
<!-- #endregion -->
|
||
|
||
<!-- #region بخش محتوای اصلی سایت -->
|
||
<div :class="columnClass">
|
||
<!-- #region بخش هِدر -->
|
||
<div
|
||
class="row align-items-center"
|
||
:class="buildName() + '-header-color'"
|
||
>
|
||
<div class="pt-2 d-flex justify-content-between align-items-center">
|
||
<div class="d-md-none">
|
||
<div class="d-flex align-items-center">
|
||
<button
|
||
name="button"
|
||
type="button"
|
||
class="toggle-mobile-nav dropdown-hamburger pe-0"
|
||
@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>
|
||
</div>
|
||
</div>
|
||
<div class="">
|
||
<div class="nav-tabs-container nav-tabs justify-content-start">
|
||
<ul v-if="navList" class="nav al">
|
||
<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: activeTabGetter?.key == navItem.key,
|
||
}"
|
||
>
|
||
{{ navItem.title }}
|
||
</button>
|
||
</li>
|
||
|
||
<li
|
||
class="nav-item mobile tabs-more-btn d-lg-none d-flex align-items-center"
|
||
v-if="navList?.length > 3"
|
||
>
|
||
<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"
|
||
>
|
||
<a
|
||
class="dropdown-item"
|
||
href="#"
|
||
v-for="(navItem, index) in navList"
|
||
:key="index"
|
||
@click.prevent="setActiveTab(navItem)"
|
||
:class="{
|
||
active: activeTabGetter?.key == navItem.key,
|
||
}"
|
||
v-if="index > 2"
|
||
>{{ navItem.title }}</a
|
||
>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="d-none d-lg-block">
|
||
<auto-complation
|
||
:key="'auto' + renderAutoComplation"
|
||
:showAppend="false"
|
||
class="entityTheme entity-auto-complation"
|
||
ref="autoComplationRef"
|
||
:contentKey="activeEntityViewSchemaGetter?.key"
|
||
:textSearch="$route.query?.searchtext ?? ''"
|
||
:placeholder="autoComplationPlaceholder"
|
||
@onSelectHistory="onSelectHistory"
|
||
></auto-complation>
|
||
</div>
|
||
<div class="d-lg-none">
|
||
<a
|
||
class=""
|
||
type="button"
|
||
data-bs-toggle="collapse"
|
||
data-bs-target="#mobileCollapse"
|
||
aria-expanded="false"
|
||
aria-controls="collapseExample"
|
||
name="button"
|
||
>
|
||
<svg class="icon icon-Component-198--1">
|
||
<use xlink:href="#icon-Component-198--1"></use>
|
||
</svg>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<div id="mobileCollapse" class="collapse d-lg-none">
|
||
<div class="col-12 d-flex justify-content-center">
|
||
<div class="col-10 col-sm-6">
|
||
<auto-complation
|
||
:key="'auto' + renderAutoComplation"
|
||
:showAppend="false"
|
||
class="my-2 entityTheme entity-auto-complation"
|
||
ref="autoComplationRef"
|
||
:contentKey="activeEntityViewSchemaGetter?.key"
|
||
:textSearch="$route.query?.searchtext ?? ''"
|
||
:placeholder="autoComplationPlaceholder"
|
||
@onSelectHistory="onSelectHistory"
|
||
></auto-complation>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- #endregion -->
|
||
<!-- #region بخش محتوای متنی سایت -->
|
||
<div class="row">
|
||
<EntityHeader
|
||
v-if="
|
||
mainComponentName !== ('EntityCompareText2', 'EntityChartGantt')
|
||
"
|
||
@toggle-reading-mode="toggleReadingMode"
|
||
@groupEditComponent="EditComponent"
|
||
@selectedItem="selectedItemlevel"
|
||
@NewComponent="NewComponent"
|
||
@show-compare-modal="showCompareModal"
|
||
@showListHeadline="showListHeadline"
|
||
@close-compare="closeCompare()"
|
||
@change-compare="changeCompare($event)"
|
||
@switch-view="switchView"
|
||
:isCompareState="mainComponentName == 'EntityCompareText2'"
|
||
ref="headers"
|
||
class="col-12"
|
||
>
|
||
</EntityHeader>
|
||
<template v-if="!isMajlesBuild() && showListRight">
|
||
<div class="button-cloce">
|
||
<button
|
||
v-if="showFilter == false"
|
||
class="btn_close"
|
||
@click.prevnet="showFilter = !showFilter"
|
||
>
|
||
<svg class="icon icon-chevron-double-left">
|
||
<use xlink:href="#icon-chevron-double-left"></use>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
</template>
|
||
|
||
<div
|
||
v-if="hideCircleButton == false"
|
||
class="circle--button"
|
||
@click.prevent="circleButton()"
|
||
ref="circle"
|
||
>
|
||
<svg
|
||
class="icon-chevron-double-lg-left"
|
||
data-testid="chevron-double-lg-left-icon"
|
||
>
|
||
<use
|
||
href="~/assets/common/img/icons.svg#chevron-double-lg-left"
|
||
></use>
|
||
</svg>
|
||
</div>
|
||
|
||
<div class="col">
|
||
<div class="row mx-2">
|
||
<div
|
||
class="col-12"
|
||
:class="{
|
||
'col-lg':
|
||
mainComponentName != 'PropertyBuilder' &&
|
||
mainComponentName != 'EntityRepetitionWords' &&
|
||
mainComponentName !== 'EntityChartGantt',
|
||
}"
|
||
>
|
||
<component
|
||
v-if="mainComponentName"
|
||
:class="{
|
||
component_page:
|
||
mainComponentName !== 'EntityQaSection' ||
|
||
mainComponentName !== 'LibraryText' ||
|
||
mainComponentName !== 'EntityChartGantt',
|
||
}"
|
||
:readingMode="isReadingModeGetter"
|
||
:propText="mainComponentName"
|
||
:is="mainComponentName"
|
||
:slug="slug"
|
||
:selectedItem="selectedItemEntityGetter"
|
||
:editItem="editItem"
|
||
:editComponent="editComponent"
|
||
:text1Compare="text1Compare"
|
||
:text2Compare="text2Compare"
|
||
:copmareSideBySide="copmareSideBySide"
|
||
:compareLineByLine="compareLineByLine"
|
||
:routeEntityid="params.id"
|
||
:listBooks="listBooks"
|
||
:viewMode="viewMode"
|
||
@is-search-mode="closeSearchMode"
|
||
@fishHandler="fishHandler"
|
||
@termHandler="termHandler"
|
||
@statusEdit="statusEdit"
|
||
@annotationHandler="annotationHandler"
|
||
@editPropertyTags="editPropertyTags"
|
||
@close-compare="closeCompare()"
|
||
@click-node="chartGanttClickNode"
|
||
@linked-title-click="linkedTitleClick"
|
||
@column-title-click="columnTitleClick"
|
||
@handler-icon-click="handlerIconClick"
|
||
:propertyBuilderForm="
|
||
activeEntityViewSchemaGetter?.property
|
||
"
|
||
></component>
|
||
<!-- //:key="renderResearch" -->
|
||
<!-- این مقدار حذف شد به این دلیل که بعد از فیش زدن به اول صفحه میرفت -->
|
||
</div>
|
||
|
||
<div
|
||
:class="{ 'col-4': buildName() == 'hadith' }"
|
||
class="col-3 entity-tree-list"
|
||
v-if="isSearchMode || isHeadingMode"
|
||
>
|
||
<div class="container-fluid">
|
||
<!-- <div class="row">
|
||
<div
|
||
class="d-flex justify-content-between align-items-center w-100"
|
||
>
|
||
<div>سرفصل ها</div>
|
||
<button
|
||
class="close"
|
||
@click="showEntityHeading = false"
|
||
>
|
||
<span aria-hidden="true">×</span>
|
||
</button>
|
||
</div>
|
||
</div> -->
|
||
<div class="row">
|
||
<text-search
|
||
@is-search-mode="closeSearchMode"
|
||
@showListHeadline="showListHeadline"
|
||
v-if="isSearchMode"
|
||
class=""
|
||
></text-search>
|
||
|
||
<entity-tree-list
|
||
:dataTree="dataTree"
|
||
@showListHeadline="showListHeadline"
|
||
@is-treelist-mode="closeTreelistMode"
|
||
v-if="isHeadingMode"
|
||
class=""
|
||
></entity-tree-list>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- <base-modal
|
||
v-if="uploadForFirstTime"
|
||
@close="closeModal"
|
||
@save="saveBaseModal"
|
||
@canel="closeModal()"
|
||
:description="description"
|
||
:showHeaderCloseButton="true"
|
||
:modalTitle="modalTitle"
|
||
class="borhan-modal"
|
||
:height="getModalHeight()"
|
||
maxHeight="30em"
|
||
overflow="hidden"
|
||
:hasFooter="false"
|
||
:showSaveButton="false"
|
||
:showCloseButton="false"
|
||
>
|
||
<component
|
||
:is="slotComponentName"
|
||
:uploadForFirstTime="uploadForFirstTime"
|
||
:listData="listData"
|
||
:valueModal="valueResearchModal"
|
||
@canel="closeModal()"
|
||
@close="closeModal()"
|
||
@closeAfterSaving="closeAfterSaving"
|
||
@compare-text="compareText"
|
||
@load-text="loadText"
|
||
@word-file="wordFile"
|
||
@after-select-file="afterSelectFile()"
|
||
></component>
|
||
</base-modal> -->
|
||
<base-modal-v2
|
||
v-if="uploadForFirstTime"
|
||
@close="closeModal"
|
||
:showHeaderCloseButton="true"
|
||
:hasFooter="false"
|
||
:modalTitle="modalTitle"
|
||
:modalSize="modalWidthManagement"
|
||
:height="modalHeightManagement"
|
||
maxHeight="36em"
|
||
overflow="hidden"
|
||
:showSaveButton="true"
|
||
:showCloseButton="true"
|
||
:showDeleteButton="false"
|
||
>
|
||
<template v-slot:default> {{ modalTitle }}</template>
|
||
|
||
<template v-slot:body>
|
||
<component
|
||
:is="slotComponentName"
|
||
:uploadForFirstTime="uploadForFirstTime"
|
||
:listData="listData"
|
||
:valueModal="valueResearchModal"
|
||
:sectionItem="sectionItem"
|
||
:versionItem="versionItem"
|
||
:listItemsCompare="listItemsCompare"
|
||
:numberCurrentTab="2"
|
||
:showCurrentTab="false"
|
||
@edit-sections="editSections"
|
||
@canel="closeModal()"
|
||
@close="closeModal()"
|
||
@closeAfterSaving="closeAfterSaving"
|
||
@compare-text="compareText"
|
||
@load-text="loadText"
|
||
@word-file="wordFile"
|
||
@compare-versions-qanon="compareVersionsQanon"
|
||
:elements="dataOrganhMeta"
|
||
@after-select-file="afterSelectFile()"
|
||
height="100%"
|
||
></component>
|
||
</template>
|
||
</base-modal-v2>
|
||
</div>
|
||
<!-- #endregion -->
|
||
</div>
|
||
<!-- #endregion -->
|
||
</div>
|
||
</div>
|
||
</NuxtLayout>
|
||
</template>
|
||
|
||
<script>
|
||
import { mapActions, mapState } from "pinia";
|
||
|
||
import { useEntityStore } from "@search/stores/entityStore";
|
||
import { useSearchStore } from "~/stores/searchStore";
|
||
import { useCommonStore } from "~/stores/commonStore";
|
||
|
||
import sidbarMenuDefault from "~/json/entity/entityMenu.json";
|
||
import sidbarMenuMajles from "~/json/entity/entityMenuMajles.json";
|
||
|
||
import entityApi from "~/apis/entityApi";
|
||
import repoApi from "~/apis/repoApi";
|
||
|
||
export default {
|
||
setup() {
|
||
useHead({
|
||
title: import.meta.env.VITE_ENTITY_PAGE_TITLE,
|
||
meta: [{ name: "description", content: "My page description" }],
|
||
bodyAttrs: {
|
||
class: import.meta.env.VITE_ENTITY_SYSTEM,
|
||
},
|
||
});
|
||
|
||
definePageMeta({
|
||
// names: [
|
||
// "search/key/id",
|
||
// "search/key/id/show",
|
||
// "search/key/id/list",
|
||
// "search/key/id/research",
|
||
// ],
|
||
// middleware: "redirect",
|
||
// alias: [
|
||
// "/search/key/id",
|
||
// "/search/key/id/show",
|
||
// "/search/key/id/list",
|
||
// "/search/key/id/research",
|
||
// ],
|
||
layout: false,
|
||
});
|
||
},
|
||
created() {
|
||
this.routeKey = this.$route.params.key;
|
||
this.routeId = this.$route.params.id;
|
||
|
||
this.httpService = useNuxtApp()["$http"];
|
||
},
|
||
mounted() {
|
||
sidbarMenuDefault.entity.forEach((element) => {
|
||
if (element.link.includes("/key/id/") > 0)
|
||
element.link = element.link
|
||
.replace("id", this.$route.params.id)
|
||
.replace("key", this.$route.params.key);
|
||
});
|
||
|
||
console.info("sidbarMenuDefault", sidbarMenuDefault);
|
||
|
||
if (this.$route.query?.listkey == "branch")
|
||
this.listTabTitle1 = "جلسات دوره";
|
||
|
||
this.setPanelComponentName();
|
||
|
||
this.getEntityInfo(this.routeKey, this.routeId);
|
||
this.getListInformation();
|
||
|
||
this.listData = this.listEntityGetter;
|
||
this.setShowListRight();
|
||
|
||
var font = JSON.parse(localStorage.getItem("settings"));
|
||
this.progress = font?.fontSize;
|
||
|
||
// اگر شرط سوم فعال باشه، هر سری که کامپوننت (entityview1) لود بشه ، درخواست به سرور ارسال میشه
|
||
// گرفتن دوباره اسکیما
|
||
// این کامنت موقت
|
||
|
||
let isRouterKeyFixed =
|
||
this.activeEntityViewSchemaGetter &&
|
||
this.entityViewSchemaGetter &&
|
||
this.activeEntityViewSchemaGetter?.key == this.$route.params?.key;
|
||
|
||
if (isRouterKeyFixed) {
|
||
this.updateMainContent();
|
||
} else this.getSchemas();
|
||
|
||
if (window.outerWidth < 992) {
|
||
this.$store.commit("TOGGLE_SIDEBAR_MENU");
|
||
}
|
||
|
||
if (this.activeEntityViewSchemaGetter?.tabs) {
|
||
if (this.activeTabGetter) this.setActiveTab(this.activeTabGetter);
|
||
else this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
|
||
}
|
||
|
||
const { $eventBus } = useNuxtApp();
|
||
$eventBus.on("update-component-data", () => {
|
||
this.updateComponentData();
|
||
});
|
||
|
||
this.getDataTree();
|
||
if (buildName() == "hadith") {
|
||
this.getBooksList();
|
||
}
|
||
},
|
||
watch: {
|
||
mainComponentName(newVal) {
|
||
this.setShowListRight(newVal);
|
||
// if (this.$route.name !== "show") {
|
||
// if (
|
||
// // newVal === "PropertyBuilder" ||
|
||
// // newVal === "EntityRepetitionWords" ||
|
||
// newVal === "Gantt"
|
||
// ) {
|
||
// this.showListRight = false;
|
||
// } else {
|
||
// this.showListRight = true;
|
||
// }
|
||
// }
|
||
},
|
||
similarInfoGetter(newVal) {
|
||
if (newVal.show) {
|
||
this.openModal("EntitySimilar", newVal.label, newVal.text);
|
||
}
|
||
},
|
||
statusButtonGetter(newVal) {
|
||
this.statusPage = newVal;
|
||
},
|
||
// statusRemovCheckBoxGetter(newVal) {
|
||
// this.removCheckBox();
|
||
// },
|
||
$route: {
|
||
handler(to, from) {
|
||
this.setPanelComponentName();
|
||
},
|
||
deep: true,
|
||
nested: true,
|
||
},
|
||
},
|
||
data() {
|
||
return {
|
||
routeKey: "",
|
||
routeId: "",
|
||
|
||
dataOrganhMeta: "",
|
||
renderAutoComplation: 1,
|
||
listTabTitle1: "از جستجو",
|
||
listTabTitle2: "تاریخچه",
|
||
activeListType: "simple",
|
||
// readingMode: false,
|
||
renderResearch: 1,
|
||
httpService: undefined,
|
||
slotComponentName: null,
|
||
mainComponentName: null,
|
||
tempComponentName: null,
|
||
modalTitle: null,
|
||
slug: null,
|
||
statusPage: 1,
|
||
copmareSideBySide: true,
|
||
compareLineByLine: false,
|
||
uploadForFirstTime: false,
|
||
showFilter: true,
|
||
showListRight: true,
|
||
hideCircleButton: true,
|
||
showSimilar: false,
|
||
isSearchMode: false,
|
||
isHeadingMode: false,
|
||
showEntityHeading: false,
|
||
valueResearchModal: {},
|
||
firstItem: {},
|
||
sidbarMenuDefault: sidbarMenuDefault,
|
||
sidbarMenuMajles: sidbarMenuMajles,
|
||
params: this.$route.params,
|
||
firstList: [],
|
||
listData: [],
|
||
description: "",
|
||
editItem: "",
|
||
editComponent: "",
|
||
newComponent: "",
|
||
panelComponentName: "Navigation",
|
||
text1Compare: "",
|
||
text2Compare: "",
|
||
listBooks: [],
|
||
pagination: {
|
||
page: 0,
|
||
total: 0,
|
||
pageTop: 0,
|
||
pageBottom: 1,
|
||
offset: 0, // page * per_page
|
||
limit: 25, //per_page
|
||
},
|
||
path: this.$route.path,
|
||
dataTree: [],
|
||
listBooks: [],
|
||
pagination: {
|
||
page: 0,
|
||
total: 0,
|
||
pageTop: 0,
|
||
pageBottom: 1,
|
||
offset: 0, // page * per_page
|
||
limit: 25, //per_page
|
||
},
|
||
viewMode: "table",
|
||
sectionItem: {},
|
||
versionItem: [],
|
||
listItemsCompare: {},
|
||
isPrevComponent: "text",
|
||
// text: "",
|
||
// uuid: undefined,
|
||
// texts3: "تحلیل",
|
||
// editDescription: "",
|
||
// editData: "",
|
||
// bedtimeText: "",
|
||
// showchang: true,
|
||
// editTitle: "",
|
||
// editVersion: "",
|
||
// showFish: false,
|
||
// fishModalTitle: "",
|
||
};
|
||
},
|
||
computed: {
|
||
...mapState(useEntityStore, [
|
||
"selectedItemEntityGetter",
|
||
"listEntityGetter",
|
||
"statusButtonGetter",
|
||
"similarInfoGetter",
|
||
"entityViewSchemaGetter",
|
||
"activeEntityViewSchemaGetter",
|
||
"activeTabGetter",
|
||
"isReadingModeGetter",
|
||
]),
|
||
...mapState(useCommonStore, [
|
||
"organNameGetter",
|
||
"isSidebarCollapsed",
|
||
"currentUser",
|
||
]),
|
||
|
||
autoComplationPlaceholder() {
|
||
if (this.activeEntityViewSchemaGetter?.search_placeholder)
|
||
return this.activeEntityViewSchemaGetter.search_placeholder;
|
||
else return "جستجو در عنوان";
|
||
},
|
||
|
||
navList() {
|
||
if (!isMajlesBuild()) return this.activeEntityViewSchemaGetter?.tabs;
|
||
|
||
if (this.activeEntityViewSchemaGetter?.tabs) {
|
||
let list = this.activeEntityViewSchemaGetter?.tabs;
|
||
if (!this.isDevelopMode)
|
||
list = this.activeEntityViewSchemaGetter?.tabs.filter((item) => {
|
||
item?.isDevelopMode == 1;
|
||
});
|
||
return list;
|
||
} else return [];
|
||
},
|
||
columnClass() {
|
||
if (!isMajlesBuild() && this.showListRight) {
|
||
return "col-12 col-md-9"; // وقتی شرط برقرار باشد
|
||
}
|
||
return "col-12"; // در حالت عادی
|
||
},
|
||
sidbarMenu() {
|
||
if (isMajlesBuild()) return sidbarMenuMajles;
|
||
else return sidbarMenuDefault;
|
||
},
|
||
modalWidthManagement() {
|
||
switch (this.slotComponentName) {
|
||
case "EntitiyModalCompareVersionQa":
|
||
return "modal-md";
|
||
break;
|
||
|
||
default:
|
||
return "modal-xl";
|
||
break;
|
||
}
|
||
},
|
||
modalHeightManagement() {
|
||
switch (this.slotComponentName) {
|
||
case "EntitiyModalCompareVersionQa":
|
||
return "430px";
|
||
break;
|
||
|
||
default:
|
||
return "556px";
|
||
break;
|
||
}
|
||
},
|
||
},
|
||
methods: {
|
||
...mapActions(useEntityStore, [
|
||
"SET_ITEM_ENTITY",
|
||
"SET_LIST_ENTITY",
|
||
"SET_STATUS_ENTITY_VIEWPAGE",
|
||
"SET_STATUS_BUTTON",
|
||
"SET_FONT",
|
||
"activeEntityViewSchemaSetter",
|
||
"entityViewSchemaSetter",
|
||
"activeTabSetter",
|
||
]),
|
||
...mapActions(useCommonStore, ["TOGGLE_PANEL"]),
|
||
editProperty(innerGroupItem) {
|
||
this.dataOrganhMeta = innerGroupItem;
|
||
this.openModal("TagsEdit", "ویرایش " + innerGroupItem?.label);
|
||
},
|
||
onSelectHistory(payload) {
|
||
let _id = payload.searchItem._source.qanon_id;
|
||
let _listkey = this.$route.query.listkey;
|
||
let name = "navigationView";
|
||
|
||
if (_listkey) name = "navigation";
|
||
|
||
this.$router
|
||
.push({
|
||
name: name,
|
||
params: {
|
||
id: _id,
|
||
key: this.$route.params?.key,
|
||
},
|
||
query: {
|
||
searchtext: payload.textSearch ?? undefined,
|
||
listkey: _listkey,
|
||
},
|
||
})
|
||
.catch(() => {});
|
||
},
|
||
getBooksList() {
|
||
let field_collapse = "book_title"; //"normal"
|
||
|
||
let url = repoUrl() + libraryApi.search.volume;
|
||
url = url.replace("{{field_collapse}}", field_collapse);
|
||
url = url.replace("{{offset}}", this.pagination.offset);
|
||
url = url.replace("{{limit}}", this.pagination.limit);
|
||
url = url.replace("{{filter}}", "none");
|
||
|
||
this.httpService
|
||
.postRequest(url)
|
||
.then((response) => {
|
||
this.listBooks = [];
|
||
|
||
this.listBooks = response.hits?.hits.map((item) => {
|
||
const source = item._source;
|
||
const publishDate = item._source.publish_date
|
||
? new Date(source.publish_date).toLocaleDateString("fa-IR")
|
||
: null;
|
||
// console.log(publishDate);
|
||
|
||
return {
|
||
...item,
|
||
_source: {
|
||
...source,
|
||
publish_date: publishDate,
|
||
},
|
||
};
|
||
});
|
||
})
|
||
.catch((error) => {});
|
||
},
|
||
updateComponentData() {
|
||
if (this.$route.query?.listkey == "branch")
|
||
this.listTabTitle1 = "جلسات دوره";
|
||
|
||
this.setPanelComponentName();
|
||
|
||
this.getEntityInfo(this.routeKey, this.routeId);
|
||
this.getListInformation();
|
||
|
||
this.listData = this.listEntityGetter;
|
||
this.setShowListRight();
|
||
|
||
var font = JSON.parse(localStorage.getItem("settings"));
|
||
this.progress = font?.fontSize;
|
||
|
||
// اگر شرط سوم فعال باشه، هر سری که کامپوننت (entityview1) لود بشه ، درخواست به سرور ارسال میشه
|
||
// گرفتن دوباره اسکیما
|
||
// این کامنت موقت
|
||
|
||
let isRouterKeyFixed =
|
||
this.activeEntityViewSchemaGetter &&
|
||
this.entityViewSchemaGetter &&
|
||
this.activeEntityViewSchemaGetter?.key == this.$route.params?.key;
|
||
|
||
if (isRouterKeyFixed) {
|
||
this.updateMainContent();
|
||
} else this.getSchemas();
|
||
|
||
if (window.outerWidth < 992) {
|
||
this.$store.commit("TOGGLE_SIDEBAR_MENU");
|
||
}
|
||
|
||
if (this.activeEntityViewSchemaGetter?.tabs) {
|
||
if (this.activeTabGetter) this.setActiveTab(this.activeTabGetter);
|
||
else this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
|
||
}
|
||
},
|
||
// switchViewGraph(event) {
|
||
// if (event == "show") this.mainComponentName = "EntityChartGraph";
|
||
// else this.mainComponentName = "EntityQaRelation";
|
||
// },
|
||
|
||
switchView(event) {
|
||
if (event == "show") {
|
||
if (this.activeTabGetter?.key == "graph") {
|
||
this.mainComponentName = "EntityChartGraph";
|
||
} else if (this.activeTabGetter?.key == "gantt") {
|
||
this.mainComponentName = "EntityChartGantt";
|
||
this.viewMode = "table";
|
||
}
|
||
} else {
|
||
if (this.activeTabGetter?.key == "graph") {
|
||
this.mainComponentName = "EntityQaRelation";
|
||
} else if (this.activeTabGetter?.key == "gantt") {
|
||
this.mainComponentName = "EntityChartGantt";
|
||
this.viewMode = "chart";
|
||
}
|
||
}
|
||
},
|
||
setActiveListType(componentName, listType) {
|
||
this.panelComponentName = componentName;
|
||
this.activeListType = listType;
|
||
},
|
||
toggleReadingMode(event) {
|
||
// if (event) this.readingMode = false;
|
||
// else this.readingMode = true;
|
||
},
|
||
|
||
getModalHeight() {
|
||
return this.slotComponentName === "SelectEntityText" ? "30em" : "auto";
|
||
},
|
||
|
||
// removCheckBox() {
|
||
// let remov = this.statusRemovCheckBoxGetter;
|
||
// let index;
|
||
// this.listResearch.forEach((item) => {
|
||
// if (item === remov) {
|
||
// index = this.listItem.indexOf(item);
|
||
// this.listItem.splice(index, 1);
|
||
// }
|
||
// });
|
||
// },
|
||
// datefa(item) {
|
||
// var m = this.selectedItemEntityGetter.begin_date;
|
||
// var d = new Date(m).toLocaleDateString("fa-IR");
|
||
// return d;
|
||
// },
|
||
// updateFont(event) {
|
||
// if (this.progress == "15") {
|
||
// this.progress = JSON.parse(localStorage.getItem("settings"));
|
||
// } else {
|
||
// this.progress = event.target?.value;
|
||
// this.SET_FONT(this.progress);
|
||
// const settings = {
|
||
// fontSize: this.progress,
|
||
// };
|
||
// localStorage.setItem("settings", JSON.stringify(settings));
|
||
// }
|
||
// },
|
||
|
||
/**
|
||
* مدیریت نمایش مدال تحقیق.
|
||
* @param {Object} value - مقدار شامل اطلاعات ویرایش آیتم.
|
||
*/
|
||
researchModalHandler(value) {
|
||
if (value.itemEdit._source.research_key == "term") {
|
||
this.termHandler(value);
|
||
} else if (value.itemEdit._source.research_key == "note") {
|
||
this.annotationHandler(value);
|
||
} else if (value.itemEdit._source.research_key == "fish") {
|
||
this.fishHandler(value);
|
||
} else {
|
||
// let key = value.itemEdit._source?.research_key;
|
||
|
||
let schema = this.activeEntityViewSchemaGetter.contextMenu.find(
|
||
(item) => item.key === value.itemEdit._source?.research_key
|
||
);
|
||
this.valueResearchModal = value;
|
||
this.valueResearchModal.itemSchema = schema;
|
||
this.openModal("ComponentTextFish", schema.title);
|
||
}
|
||
},
|
||
/**
|
||
* مدیریت نمایش مدال حاشیهنویسی.
|
||
* @param {Object} item - آیتم شامل اطلاعات schema.
|
||
*/
|
||
|
||
annotationHandler(item) {
|
||
this.valueResearchModal = item;
|
||
this.openModal("ComponentTextFish", item.itemSchema.title);
|
||
},
|
||
/**
|
||
* مدیریت نمایش مدال فیش.
|
||
* @param {Object} item - آیتم شامل اطلاعات schema.
|
||
*/
|
||
fishHandler(item) {
|
||
this.valueResearchModal = item;
|
||
this.openModal("ComponentTextFish", item.itemSchema.title);
|
||
},
|
||
/**
|
||
* مدیریت نمایش مدال اصطلاح.
|
||
* @param {Object} item - آیتم شامل اطلاعات schema.
|
||
*/
|
||
termHandler(item) {
|
||
this.valueResearchModal = item;
|
||
this.openModal("SelectTerm", "انتخاب اصطلاح ", "", "term");
|
||
},
|
||
/**
|
||
* تغییر وضعیت نمایش سرخط نهاد.
|
||
*/
|
||
showListHeadline({ isSearchMode, isHeadingMode }) {
|
||
this.isSearchMode = isSearchMode;
|
||
this.isHeadingMode = isHeadingMode;
|
||
|
||
// this.showEntityHeading = !this.showEntityHeading;
|
||
},
|
||
/**
|
||
* بررسی اینکه آیا کاربر میتواند یک کلید خاص را ببیند.
|
||
* @param {String} keyName - نام کلید برای بررسی.
|
||
* @returns {Boolean} - اگر کاربر میتواند کلید را ببیند true و در غیر اینصورت false.
|
||
*/
|
||
canSee(keyName) {
|
||
if (this.currentUser?.user_level > 1) return true;
|
||
return this.userPermisionGetter.includes(keyName);
|
||
},
|
||
async getEntityText(id) {
|
||
let key = this.routeKey;
|
||
let url = "";
|
||
|
||
if (key == "qasection" || key == "rgsection") {
|
||
url = repoUrl() + entityApi.comparison.getParent;
|
||
url = url.replace("@index_key", key);
|
||
url = url.replace("@parent_id", id);
|
||
} else {
|
||
url = repoUrl() + entityApi.comparison.getText;
|
||
url = url.replace("@index_key", key);
|
||
url = url.replace("@id", id);
|
||
}
|
||
// console.log(url)
|
||
|
||
return await this.httpService
|
||
.getRequest(url)
|
||
.then((res) => {
|
||
return res.text;
|
||
})
|
||
.catch(() => {
|
||
return "";
|
||
});
|
||
},
|
||
|
||
/**
|
||
* بارگذاری متن برای مقایسه
|
||
* @param {String} text - متنی که باید بارگذاری شود.
|
||
*/
|
||
loadText(text) {
|
||
this.text2Compare = text;
|
||
let vm = this;
|
||
this.closeModal();
|
||
this.getEntityText(this.routeId).then((text) => {
|
||
vm.text1Compare = text;
|
||
vm.mainComponentName = "EntityCompareText2";
|
||
});
|
||
},
|
||
/**
|
||
* مدیریت مقایسه فایل ورد.
|
||
* @param {String} text - متنی که باید مقایسه شود.
|
||
*/
|
||
wordFile(text) {
|
||
this.text2Compare = text;
|
||
this.closeModal();
|
||
this.getEntityText(this.routeId).then((text) => {
|
||
this.text1Compare = text;
|
||
this.mainComponentName = "EntityCompareText2";
|
||
});
|
||
},
|
||
/**
|
||
* مدیریت مقایسه متن.
|
||
* @param {String} id - شناسه متنی که باید مقایسه شود.
|
||
*/
|
||
compareText(id) {
|
||
this.mainComponentName = "EntityCompareText2";
|
||
this.closeModal();
|
||
|
||
let vm = this;
|
||
|
||
this.getEntityText(id).then((text) => {
|
||
vm.text2Compare = text;
|
||
vm.getEntityText(vm.routeId).then((text) => {
|
||
vm.text1Compare = text;
|
||
vm.mainComponentName = "EntityCompareText2";
|
||
});
|
||
});
|
||
},
|
||
/**
|
||
* بستن نمای مقایسه.
|
||
*/
|
||
closeCompare() {
|
||
if (this.activeEntityViewSchemaGetter?.tabs) {
|
||
switch (this.isPrevComponent) {
|
||
case "text":
|
||
this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
|
||
break;
|
||
case "gantt":
|
||
this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[4]);
|
||
break;
|
||
default:
|
||
this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
|
||
}
|
||
}
|
||
},
|
||
/**
|
||
* بستن مدال.
|
||
*/
|
||
closeModal() {
|
||
// $("#base-modal").modal("hide");
|
||
this.slotComponentName = undefined;
|
||
this.modalTitle = undefined;
|
||
this.description = undefined;
|
||
this.listData = [];
|
||
this.valueResearchModal = {};
|
||
|
||
setTimeout(() => {
|
||
this.uploadForFirstTime = false;
|
||
}, 500);
|
||
},
|
||
closeAfterSaving() {
|
||
this.renderResearch++;
|
||
this.closeModal();
|
||
},
|
||
saveBaseModal() {},
|
||
/**
|
||
* باز کردن مدال با کامپوننت و عنوان مشخص.
|
||
* @param {String} componentName - نام کامپوننتی که باید در مدال نمایش داده شود.
|
||
* @param {String} title - عنوان مدال.
|
||
* @param {String} [description=""] - توضیحات مدال.
|
||
* @param {String} [key=undefined] - کلید برای مدال.
|
||
*/
|
||
openModal(componentName, title, description, key = undefined) {
|
||
this.slotComponentName = componentName;
|
||
this.modalTitle = title;
|
||
this.description = description;
|
||
this.uploadForFirstTime = true;
|
||
// setTimeout(() => {
|
||
// $("#base-modal").modal({ backdrop: "static", keyboard: false }, "show");
|
||
// }, 500);
|
||
},
|
||
/**
|
||
* تنظیم نمایش موارد مشابه.
|
||
* @param {Boolean} [isShow=true] - نشان میدهد که آیا باید موارد مشابه نمایش داده شوند یا خیر.
|
||
*/
|
||
setShowSimilar(isShow = true) {
|
||
this.showSimilar = isShow;
|
||
},
|
||
/**
|
||
* نمایش تجزیهگر در صورت صحیح بودن شرط.
|
||
* @param {Boolean} isShow - نشان میدهد که آیا باید تجزیهگر نمایش داده شود یا خیر.
|
||
*/
|
||
showParserIfTrue(isShow) {
|
||
if (!isShow) {
|
||
this.tempComponentName = this.mainComponentName;
|
||
this.mainComponentName = "EntityRepetitionWords";
|
||
} else {
|
||
this.mainComponentName = this.tempComponentName ?? "EntityText";
|
||
}
|
||
},
|
||
/**
|
||
* مدیریت دکمه دایرهای.
|
||
*/
|
||
circleButton() {
|
||
this.hideCircleButton = true;
|
||
this.isVisiablePanel = true;
|
||
},
|
||
/**
|
||
* مدیریت رویداد کامپوننت جدید.
|
||
* @param {Event} event - شیء رویداد.
|
||
*/
|
||
NewComponent(event) {
|
||
this.newComponent = event;
|
||
if (event == true) {
|
||
this.statusPage = 2;
|
||
} else {
|
||
this.statusPage = 1;
|
||
}
|
||
},
|
||
/**
|
||
* مدیریت رویداد ویرایش وضعیت.
|
||
* @param {Event} event - شیء رویداد.
|
||
*/
|
||
statusEdit(event) {
|
||
if (event == false) {
|
||
this.statusPage = 1;
|
||
}
|
||
},
|
||
|
||
/**
|
||
* مدیریت رویداد انتخاب سطح آیتم.
|
||
* @param {Event} event - شیء رویداد.
|
||
*/
|
||
selectedItemlevel(event) {
|
||
this.editItem = event;
|
||
},
|
||
/**
|
||
* مدیریت رویداد ویرایش کامپوننت.
|
||
* @param {Event} event - شیء رویداد.
|
||
*/
|
||
EditComponent(event) {
|
||
this.editComponent = event;
|
||
|
||
if (event.EditComponent == true || event.EditComponent == false) {
|
||
this.statusPage = 2;
|
||
} else {
|
||
this.statusPage = 1;
|
||
}
|
||
},
|
||
/**
|
||
* تنظیم تب فعال.
|
||
* @param {Object} tab - شیء تب که باید فعال شود.
|
||
*/
|
||
setActiveTab(tab) {
|
||
this.activeTabSetter(tab);
|
||
// close text headings and search section.
|
||
this.showListHeadline({
|
||
isSearchMode: false,
|
||
isHeadingMode: false,
|
||
});
|
||
|
||
if (this.showSimilar) this.showSimilar = tab?.key == "content";
|
||
|
||
this.mainComponentName = "EntityText";
|
||
if (tab?.key == "content") {
|
||
// if (this.activeEntityViewSchemaGetter?.key == this.routeKey)
|
||
if (this.activeEntityViewSchemaGetter?.type)
|
||
this.mainComponentName = this.activeEntityViewSchemaGetter?.type;
|
||
else this.mainComponentName = "EntityText";
|
||
} else if (tab.key == "meta") {
|
||
this.mainComponentName = "PropertyBuilder";
|
||
} else if (tab.key == "parser") {
|
||
this.mainComponentName = "EntityRepetitionWords";
|
||
} else if (tab.key == "gantt") {
|
||
this.mainComponentName = "EntityChartGantt";
|
||
} else if (tab.key == "graph") {
|
||
this.mainComponentName = "EntityChartGraph";
|
||
} else if (tab.key == "compare") {
|
||
this.mainComponentName = "EntityQaSection";
|
||
}
|
||
},
|
||
/**
|
||
* تنظیم وضعیت صفحه به ۱ برای ویرایش واگذاری.
|
||
*/
|
||
|
||
waiverEdit() {
|
||
this.statusPage = 1;
|
||
},
|
||
/**
|
||
* دریافت اطلاعات schema.
|
||
*/
|
||
getSchemas() {
|
||
let url = repoUrl() + entityApi.schema.list;
|
||
|
||
this.httpService
|
||
.postRequest(url, {
|
||
organ: this.organNameGetter,
|
||
system: "entityView",
|
||
build_state: buildState(),
|
||
})
|
||
.then((response) => {
|
||
const routeParamsKey = this.routeKey;
|
||
|
||
let schemaBasedOnRouteKeyIndex = response.data.entityView.findIndex(
|
||
(item) => item.key == routeParamsKey
|
||
);
|
||
schemaBasedOnRouteKeyIndex =
|
||
schemaBasedOnRouteKeyIndex == -1 ? 0 : schemaBasedOnRouteKeyIndex;
|
||
|
||
this.entityViewSchemaSetter(response.data.entityView);
|
||
this.activeEntityViewSchemaSetter(
|
||
response.data.entityView[schemaBasedOnRouteKeyIndex]
|
||
);
|
||
this.activeTabSetter(
|
||
response.data.entityView[schemaBasedOnRouteKeyIndex].tabs[0]
|
||
);
|
||
|
||
this.renderAutoComplation++;
|
||
this.updateMainContent();
|
||
});
|
||
},
|
||
/**
|
||
* تغییر وضعیت نمایش منوی سایدبار.
|
||
*/
|
||
toggleSidebarMenu() {
|
||
this.$store.commit("TOGGLE_SIDEBAR_MENU");
|
||
},
|
||
/**
|
||
* تغییر وضعیت نمایش پنل لیست.
|
||
*/
|
||
showToggleListPanel() {
|
||
this.showListPanel = !this.showListPanel;
|
||
},
|
||
/**
|
||
* دریافت مقدار یک داده بر اساس کلید و نوع آن (در صورت وجود).
|
||
* @param {String} key - کلید داده مورد نظر.
|
||
* @param {String} [type=""] - نوع داده (اختیاری).
|
||
* @returns {String} - مقدار داده.
|
||
*/
|
||
// getDataValue(key, type = "") {
|
||
// let value = "";
|
||
// if (this.selectedItemEntityGetter[key]) {
|
||
// value = this.selectedItemEntityGetter[key];
|
||
// if (type == "date") value = this.datefa(value);
|
||
// }
|
||
// return value;
|
||
// },
|
||
|
||
/**
|
||
* دریافت اطلاعات موجودیت بر اساس نوع و شناسه آن.
|
||
* @param {String} _entityType - نوع موجودیت.
|
||
* @param {String} _entityId - شناسه موجودیت.
|
||
*/
|
||
|
||
getEntityInfo(_entityType, _entityId) {
|
||
if (this.fetchingData) return;
|
||
this.fetchingData = true;
|
||
|
||
this.entity_type = _entityType;
|
||
|
||
if (_entityType == "qasection" || _entityType == "rgsection") {
|
||
//در این حالت استفاده ندارد تست کردم
|
||
// // برای تنظیم داده های هدر در تبهای مختلف غیر متن نیاز هست
|
||
// let url = repoUrl() + repoApi.entity.qanonList;
|
||
// url = url.replace("@index_key", _entityType);
|
||
// url = url.replace("@parent_key", "qanon_id");
|
||
// url = url.replace("@parent_id", _entityId);
|
||
// url = url.replace("@from", 0);
|
||
// url = url.replace("@countInPage", 1);
|
||
// this.httpService.getRequest(url).then((response) => {
|
||
// if (response.hits.total.value > 0) {
|
||
// let res = response.hits.hits[0];
|
||
// this.entity = { ...res, ...res._source };
|
||
// this.SET_ITEM_ENTITY(this.entity);
|
||
// setDocumentTitle(this.selectedItemEntityGetter);
|
||
// }
|
||
// this.fetchingData = false;
|
||
// });
|
||
} else {
|
||
let url = repoUrl() + repoApi.public.get;
|
||
url = url.replace("{{index_key}}", _entityType);
|
||
url = url.replace("{{entity_id}}", _entityId);
|
||
|
||
this.httpService.getRequest(url).then((res) => {
|
||
this.entity = { ...res, ...res._source };
|
||
|
||
this.SET_ITEM_ENTITY(this.entity);
|
||
this.fetchingData = false;
|
||
useHead({
|
||
title: this.selectedItemEntityGetter,
|
||
});
|
||
});
|
||
}
|
||
},
|
||
/**
|
||
* دریافت اطلاعات لیست موجودیتها از localStorage در صورت عدم وجود در getter.
|
||
*/
|
||
getListInformation() {
|
||
const myList = localStorage.getItem("myList");
|
||
this.jsonList = JSON.parse(myList);
|
||
const myItem = localStorage.getItem("myItem");
|
||
this.firstItem = JSON.parse(myItem);
|
||
this.SET_LIST_ENTITY(this.jsonList);
|
||
if (this.selectedItemEntityGetter === undefined) {
|
||
this.SET_ITEM_ENTITY(this.firstItem);
|
||
useHead({
|
||
title: this.selectedItemEntityGetter,
|
||
});
|
||
// setDocumentTitle(this.selectedItemEntityGetter);
|
||
}
|
||
},
|
||
/**
|
||
* بهروزرسانی تاریخ در عنصر با کلاس begin_date.
|
||
*/
|
||
updateDate() {
|
||
const myelement = document.getElementsByClassName("begin_date");
|
||
const date = myelement[0].innerHTML;
|
||
},
|
||
|
||
/**
|
||
* تنظیم نام کامپوننت پنل بر اساس مسیر جاری.
|
||
*/
|
||
setPanelComponentName() {
|
||
// if (this.$route.name == "entityEdit") {
|
||
// this.panelComponentName = "EntityTreeList";
|
||
// } else
|
||
|
||
if (this.$route.name == "navigationView") {
|
||
this.panelComponentName = "navigation";
|
||
} else if (this.$route.name == "entityResearch") {
|
||
this.panelComponentName = "research";
|
||
} else {
|
||
this.panelComponentName = this.$route.name;
|
||
}
|
||
},
|
||
setShowListRight(mainComponent = undefined) {
|
||
let routeName = this.$route.name;
|
||
|
||
if (mainComponent === "EntityChartGantt") {
|
||
this.showListRight = false;
|
||
} else if (routeName == "showEntity") {
|
||
this.showListRight = false;
|
||
} else if (routeName == "navigation" && !this.listEntityGetter) {
|
||
this.showListRight = false;
|
||
} else if (routeName == "research") {
|
||
this.showListRight = false;
|
||
} else this.showListRight = true;
|
||
},
|
||
/**
|
||
* دریافت کامپوننت پنل بر اساس مسیر جاری.
|
||
* @returns {String|null} - نام کامپوننت پنل.
|
||
*/
|
||
getPanelComponent() {
|
||
this.setShowListRight();
|
||
|
||
if (!this.showListRight) return null;
|
||
|
||
if (
|
||
this.activeEntityViewSchemaGetter?.entityPanel &&
|
||
this.activeEntityViewSchemaGetter?.entityPanel[this.$route.name]
|
||
)
|
||
return this.activeEntityViewSchemaGetter?.entityPanel[this.$route.name];
|
||
else return this.activeEntityViewSchemaGetter?.entityPanel[0];
|
||
},
|
||
/**
|
||
* بهروزرسانی محتوای اصلی بر اساس کلید موجود در مسیر.
|
||
*/
|
||
updateMainContent() {
|
||
if (this.routeKey) {
|
||
if (this.activeEntityViewSchemaGetter?.key == this.routeKey)
|
||
this.mainComponentName = this.activeEntityViewSchemaGetter?.type;
|
||
else this.mainComponentName = "EntityText";
|
||
} else this.mainComponentName = "EntityText";
|
||
},
|
||
/**
|
||
* یافتن ایندکس و بازگرداندن نام کامپوننت بر اساس کلید.
|
||
* @param {String} keyName - کلید موجودیت.
|
||
* @returns {String} - نام کامپوننت.
|
||
*/
|
||
findIndexAndReturnComponentName(keyName) {
|
||
const contentIndex = this.entityViewSchemaGetter?.findIndex(
|
||
(item) => item.key == keyName
|
||
);
|
||
return this.entityViewSchemaGetter[contentIndex]?.type;
|
||
},
|
||
/**
|
||
* پنهان کردن پنل.
|
||
*/
|
||
hidePanel() {
|
||
this.hideCircleButton = false;
|
||
this.isVisiablePanel = false;
|
||
},
|
||
/**
|
||
* تغییر حالت مقایسه.
|
||
* @param {Boolean} item - وضعیت مقایسه.
|
||
*/
|
||
changeCompare(item) {
|
||
if (!item) {
|
||
this.copmareSideBySide = false;
|
||
this.compareLineByLine = true;
|
||
} else {
|
||
this.copmareSideBySide = true;
|
||
this.compareLineByLine = false;
|
||
}
|
||
},
|
||
closeSearchMode() {
|
||
this.isSearchMode = false;
|
||
},
|
||
closeTreelistMode() {
|
||
this.isHeadingMode = false;
|
||
},
|
||
getDataTree() {
|
||
if (buildName() === "majles") {
|
||
let url = repoUrl() + buildName() + "/" + entityApi.edit.treeList;
|
||
url = url.replace("@index_key", this.routeKey);
|
||
url = url.replace("@qanon_id", this.routeId);
|
||
|
||
this.httpService.getRequest(url).then((res) => {
|
||
this.dataTree = res.data;
|
||
// this.loading = false;
|
||
});
|
||
} else if (buildName() === "hadith") {
|
||
let id = this.routeId;
|
||
let url = repoUrl() + libraryApi.tree.getDataTree;
|
||
url = url.replace("@offset", 0);
|
||
url = url.replace("@limit", 500);
|
||
url = url.replace("@vol_id", id);
|
||
url = url.replace("@q", "none");
|
||
|
||
this.httpService.getRequest(url).then((res) => {
|
||
this.dataTree = this.convertToTree(res.hits.hits);
|
||
// this.loading = false;
|
||
});
|
||
}
|
||
},
|
||
/**
|
||
* تبدیل دادههای خطی به ساختار درختی.
|
||
* @param {Array} rawData - آرایهای از دادههای ورودی که باید به ساختار درختی تبدیل شوند.
|
||
* @returns {Array} - ساختار درختی شامل آیتمهای سطح اول و زیرآیتمهایشان.
|
||
*/
|
||
convertToTree(rawData) {
|
||
let prevlevel = -1; // سطح قبلی برای مقایسه (مقدار اولیه -1 به معنای بدون سطح قبلی)
|
||
let pathItems = []; // آرایهای برای ذخیره مسیر آیتمها در ساختار درختی
|
||
let prevItem = undefined; // آیتم قبلی که در حال پردازش است
|
||
|
||
let list = []; // لیست نهایی که شامل آیتمهای سطح اول درخت است
|
||
|
||
rawData.forEach((el) => {
|
||
let jumpPage = el._source?.meta?.page;
|
||
// استخراج سطح و ایجاد آیتم جدید
|
||
let level = el._source?.meta?.level;
|
||
let item = {
|
||
id: el._id,
|
||
text: el._source?.content,
|
||
jumpPage: jumpPage,
|
||
children: [],
|
||
};
|
||
|
||
// قرار دادن آیتم در ساختار درختی بر اساس سطح آن
|
||
if (prevlevel == -1 || level == 1) {
|
||
// اگر این اولین آیتم است یا سطح آن 1 است، به سطح اول اضافه میشود
|
||
list.push(item);
|
||
pathItems.push(item);
|
||
} else if (level > prevlevel) {
|
||
// اگر سطح فعلی بیشتر از سطح قبلی باشد، آیتم فرزند آیتم قبلی میشود
|
||
prevItem.children.push(item);
|
||
pathItems.push(item);
|
||
} else if (level == prevlevel) {
|
||
// اگر سطح فعلی برابر با سطح قبلی باشد، آیتم به خواهر/برادر آیتم قبلی اضافه میشود
|
||
if (pathItems.length > 1) {
|
||
pathItems[pathItems.length - 2].children.push(item);
|
||
}
|
||
} else {
|
||
// اگر سطح فعلی کمتر از سطح قبلی باشد
|
||
let diff = prevlevel - level; // اختلاف سطح فعلی و قبلی
|
||
if (pathItems.length > diff + 1) {
|
||
pathItems[pathItems.length - 1 - diff].children.push(item);
|
||
}
|
||
}
|
||
|
||
// بهروزرسانی مقادیر قبلی برای پردازش آیتم بعدی
|
||
prevlevel = level;
|
||
prevItem = item;
|
||
});
|
||
|
||
return list; // بازگرداندن ساختار درختی نهایی
|
||
},
|
||
chartGanttClickNode(event) {
|
||
this.openModal("EntityQaSection", event.name, "");
|
||
// .then(
|
||
// () => {
|
||
// // this.name = event.name;
|
||
// // this.y = event.y;
|
||
// // this.getChartTreeItems(this.name, this.y);
|
||
// }
|
||
// );
|
||
},
|
||
linkedTitleClick(rowItem, tableColumn, index) {
|
||
this.sectionItem = rowItem;
|
||
setTimeout(() => {
|
||
this.openModal("EntityQaHistory", "وضعیت", "");
|
||
}, 500);
|
||
},
|
||
columnTitleClick(tableColumn) {
|
||
console.log("5555555555");
|
||
this.listItemsCompare = tableColumn;
|
||
|
||
let id = this.routeId;
|
||
|
||
let payload = {
|
||
qanon_id: id,
|
||
date: tableColumn.title,
|
||
};
|
||
|
||
let url = entityApi.chart.version;
|
||
let key = this.activeEntityViewSchemaGetter?.key;
|
||
url = url.replace("@index_key", key);
|
||
|
||
this.httpService.postRequest(url, payload).then((res) => {
|
||
this.versionItem = res.data;
|
||
let data = res.data;
|
||
data.forEach((element) => {
|
||
this.text1Compare = element._source.content;
|
||
this.text2Compare = element._source.content;
|
||
});
|
||
this.openModal("EntityShowVersionsQa", tableColumn.titleTooltip, "");
|
||
});
|
||
},
|
||
handlerIconClick(tableColumn) {
|
||
this.listItemsCompare = tableColumn;
|
||
this.openModal("EntitiyModalCompareVersionQa", "مقایسه نسخه ها");
|
||
},
|
||
compareVersionsQanon(versionOneContent, versionTwoContent) {
|
||
this.text1Compare = versionOneContent;
|
||
this.text2Compare = versionTwoContent;
|
||
|
||
this.isPrevComponent = "gantt";
|
||
this.closeModal();
|
||
this.mainComponentName = "EntityCompareText2";
|
||
},
|
||
showCompareModal() {
|
||
this.isPrevComponent = "text";
|
||
this.openModal("SelectEntityText", "انتخاب متن مقایسه");
|
||
},
|
||
editSections() {
|
||
this.openModal("DraftImportEffectModal", "ویرایش");
|
||
},
|
||
chartGanttClickNode(event) {
|
||
this.openModal("EntityQaSection", event.name, "");
|
||
// .then(
|
||
// () => {
|
||
// // this.name = event.name;
|
||
// // this.y = event.y;
|
||
// // this.getChartTreeItems(this.name, this.y);
|
||
// }
|
||
// );
|
||
},
|
||
linkedTitleClick(rowItem, tableColumn, index) {
|
||
this.sectionItem = rowItem;
|
||
setTimeout(() => {
|
||
this.openModal("EntityQaHistory", "وضعیت", "");
|
||
}, 500);
|
||
},
|
||
columnTitleClick(tableColumn) {
|
||
this.listItemsCompare = tableColumn;
|
||
|
||
let id = this.$route.params.id;
|
||
|
||
let payload = {
|
||
qanon_id: id,
|
||
date: tableColumn.title,
|
||
};
|
||
|
||
let url = entityApi.chart.version;
|
||
let key = this.activeEntityViewSchemaGetter?.key;
|
||
url = url.replace("@index_key", key);
|
||
|
||
this.httpService.postRequest(url, payload).then((res) => {
|
||
this.versionItem = res.data;
|
||
let data = res.data;
|
||
data.forEach((element) => {
|
||
this.text1Compare = element._source.content;
|
||
this.text2Compare = element._source.content;
|
||
});
|
||
this.openModal("EntityShowVersionsQa", tableColumn.titleTooltip, "");
|
||
});
|
||
},
|
||
handlerIconClick(tableColumn) {
|
||
this.listItemsCompare = tableColumn;
|
||
this.openModal("EntitiyModalCompareVersionQa", "مقایسه نسخه ها");
|
||
},
|
||
compareVersionsQanon(versionOneContent, versionTwoContent) {
|
||
this.text1Compare = versionOneContent;
|
||
this.text2Compare = versionTwoContent;
|
||
|
||
this.isPrevComponent = "gantt";
|
||
this.closeModal();
|
||
this.mainComponentName = "EntityCompareText2";
|
||
},
|
||
showCompareModal() {
|
||
this.isPrevComponent = "text";
|
||
this.openModal("SelectEntityText", "انتخاب متن مقایسه");
|
||
},
|
||
editSections() {
|
||
this.openModal("DraftImportEffectModal", "ویرایش");
|
||
},
|
||
},
|
||
|
||
components: {
|
||
AutoComplation: defineAsyncComponent(() =>
|
||
import("../../../../../../components/global/AutoComplation.vue")
|
||
),
|
||
EntityQaRelation: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityQaRelation.vue")
|
||
),
|
||
ComponentTextFish: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/ComponentTextFish.vue")
|
||
),
|
||
ComparisonEntity: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/ComparisonEntity.vue")
|
||
),
|
||
SelectEntityText: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/SelectEntityText.vue")
|
||
),
|
||
EntitySelectTerm: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntitySelectTerm.vue")
|
||
),
|
||
EntityText: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityText.vue")
|
||
),
|
||
EntityMqSection: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityMqSection.vue")
|
||
),
|
||
EntityQaSection: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityQaSection.vue")
|
||
),
|
||
EntityChartGraph: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityChartGraph.vue")
|
||
),
|
||
EntityChartGantt: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityChartGantt.vue")
|
||
),
|
||
EntityCompareText: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityCompareText.vue")
|
||
),
|
||
EntityCompareText2: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityCompareText2.vue")
|
||
),
|
||
EntitySimilar: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntitySimilar.vue")
|
||
),
|
||
EntitySanad: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntitySanad.vue")
|
||
),
|
||
EntityVoice: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityVoice.vue")
|
||
),
|
||
EntityVideo: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityVideo.vue")
|
||
),
|
||
EntityFile: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityFile.vue")
|
||
),
|
||
EntityRepetitionWords: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityRepetitionWords.vue")
|
||
),
|
||
LibraryText: defineAsyncComponent(() =>
|
||
import("~/components/library/components/LibraryText.vue")
|
||
),
|
||
EntityQaHistory: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityQaHistory.vue")
|
||
),
|
||
EntityShowVersionsQa: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntityShowVersionsQa.vue")
|
||
),
|
||
EntitiyModalCompareVersionQa: defineAsyncComponent(() =>
|
||
import("~/components/entity/components/EntitiyModalCompareVersionQa.vue")
|
||
),
|
||
UserHistory: defineAsyncComponent(() =>
|
||
import("~/components/entity/sidebar-panels/UserHistory.vue")
|
||
),
|
||
TextSearch: defineAsyncComponent(() =>
|
||
import("~/components/entity/sidebar-panels/TextSearch.vue")
|
||
),
|
||
NavigationView: defineAsyncComponent(() =>
|
||
import("~/components/entity/sidebar-panels/Navigation.vue")
|
||
),
|
||
Navigation: defineAsyncComponent(() =>
|
||
import("~/components/entity/sidebar-panels/Navigation.vue")
|
||
),
|
||
Research: defineAsyncComponent(() =>
|
||
import("~/components/entity/sidebar-panels/Research.vue")
|
||
),
|
||
EntityTreeList: defineAsyncComponent(() =>
|
||
import("~/components/entity/sidebar-panels/EntityTreeList.vue")
|
||
),
|
||
PropertyBuilder: defineAsyncComponent(() =>
|
||
import("~/components/other/PropertyBuilder.vue")
|
||
),
|
||
TagsEdit: defineAsyncComponent(() =>
|
||
import("~/components/other/TagsEdit.vue")
|
||
),
|
||
DraftImportEffectModal: defineAsyncComponent(() =>
|
||
import("~/components/entity/modals/DraftImportEffectModal.vue")
|
||
),
|
||
},
|
||
};
|
||
</script>
|
||
<style scoped lang="scss">
|
||
.button-cloce {
|
||
position: relative;
|
||
right: 3em;
|
||
top: 1em;
|
||
z-index: 100;
|
||
.btn_close {
|
||
border-radius: 50%;
|
||
font-size: 0.8rem;
|
||
width: 2.5em;
|
||
height: 2.5em;
|
||
box-shadow: 0px 0px 7px 1px #eee;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
transform: translateX(1.5em);
|
||
background-color: #eee;
|
||
|
||
&:hover {
|
||
filter: brightness(0.8);
|
||
}
|
||
}
|
||
}
|
||
|
||
.nav-tabs-container {
|
||
display: flex;
|
||
justify-content: center;
|
||
}
|
||
.filter-list-container {
|
||
// padding-top: 0.5em;
|
||
// // position: fixed;
|
||
|
||
// z-index: 9;
|
||
// width: 20em;
|
||
height: 100dvh;
|
||
.main-filter {
|
||
display: none;
|
||
}
|
||
.mobile-mode {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
|
||
.btn {
|
||
border-radius: 50%;
|
||
// font-size: 0.7rem;
|
||
width: 2.5em;
|
||
height: 2.5em;
|
||
box-shadow: 0px 0px 7px 1px #eee;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
transform: translateX(1.5em);
|
||
background-color: #eee;
|
||
|
||
&:hover {
|
||
filter: brightness(0.8);
|
||
}
|
||
}
|
||
}
|
||
|
||
&.expanded {
|
||
top: 0;
|
||
bottom: 0;
|
||
background: #fff;
|
||
justify-content: center;
|
||
box-shadow: -1px 0px 7px 1px #eee;
|
||
// width: 20em;
|
||
.main-filter {
|
||
display: block;
|
||
height: 90dvh;
|
||
}
|
||
}
|
||
}
|
||
.main-filter {
|
||
padding: 0 1em;
|
||
// overflow: auto;
|
||
}
|
||
.component_page {
|
||
height: calc(100dvh - 13em);
|
||
overflow: auto;
|
||
padding-left: 1em;
|
||
overflow-x: hidden;
|
||
scrollbar-width: thin;
|
||
scrollbar-color: #ccc #eee;
|
||
}
|
||
.entity-tree-list {
|
||
border-radius: 0.5em;
|
||
overflow-y: auto;
|
||
box-shadow: 0 0.4688rem 2.1875rem rgba(4, 9, 20, 0.03),
|
||
0 0.9375rem 1.4063rem rgba(4, 9, 20, 0.03),
|
||
0 0.25rem 0.5313rem rgba(4, 9, 20, 0.03),
|
||
0 0.125rem 0.1875rem rgba(4, 9, 20, 0.03);
|
||
}
|
||
|
||
@media (max-width: 575.98px) {
|
||
.component_page {
|
||
height: calc(100dvh - 15em);
|
||
padding-left: 0.5em;
|
||
}
|
||
.button-cloce {
|
||
right: 2em;
|
||
}
|
||
.filter-list-container {
|
||
margin-right: -1em;
|
||
}
|
||
.main-filter {
|
||
width: 20em !important;
|
||
}
|
||
}
|
||
@media only screen and (min-width: 576px) and (max-width: 767.98px) {
|
||
.component_page {
|
||
height: calc(100dvh - 16em);
|
||
}
|
||
.filter-list-container {
|
||
margin-right: -1em;
|
||
}
|
||
.main-filter {
|
||
width: 20em !important;
|
||
}
|
||
}
|
||
@media only screen and (min-width: 768px) and (max-width: 991.98px) {
|
||
.component_page {
|
||
height: calc(100dvh - 16em);
|
||
}
|
||
.filter-list-container {
|
||
width: 20em !important;
|
||
margin-right: -1em;
|
||
}
|
||
}
|
||
@media only screen and (min-width: 992px) and (max-width: 1199.98px) {
|
||
.main-filter {
|
||
height: calc(100dvh - 11em);
|
||
// overflow: auto;
|
||
}
|
||
.component_page {
|
||
height: calc(100dvh - 15em);
|
||
}
|
||
}
|
||
@media (min-width: 1200px) {
|
||
.main-filter {
|
||
height: calc(100dvh - 5em);
|
||
// overflow: auto;
|
||
}
|
||
}
|
||
</style>
|