<template> <div class="row"> <div class="col-12 py-3"> <div class="d-flex align-items-center"> <div class="col"> <h3 class="m-0"> {{ activeSchemaGetter?.label }} </h3> </div> <div class="col-auto"> <router-link class="btn btn-primary" :to="{ name: 'addDraft', key: activeSchemaGetter?.index_key, }" > <svg class="icon icon-Component-133--1"> <use xlink:href="#icon-Component-133--1"></use> </svg> جدید </router-link> </div> </div> </div> <div class="col-12"> <my-table :hasSearch="false" :fetchingData="fetchingData" :items="listDrafts" :tableActions="tableActions" :tableColumns="activeSchemaGetter?.table_columns" :paginationInfo="pagination" :sortingInfo="sorting" @edit-table-item="onEditTableItem" @delete-table-item="onDeleteTableItem" @on-linked-title-click="onLinkedTitleClick" /> </div> </div> </template> <script> import sidbarMenuDefault from "~/json/entity/json/entityMenu.json"; import sidbarMenuMajles from "~/json/entity/json/entityMenuMajles.json"; import { mapState, mapActions } from "pinia"; // import entityViewMixin from "~/entity/mixins/entityViewMixin.js"; import entityApi from "~/apis/entityApi"; import repoApi from "~/apis/repoApi"; import searchApi from "~/apis/searchApi"; /** * @vue-data {String} [readingMode="false"] - حالت مطالعه */ export default { beforeMount() { this.httpService = new HttpService(import.meta.env.VITE_BASE_URL); }, mounted() { let schemaExist = typeof this.draftSchemaGetter == "object"; if (!schemaExist) { this.getSchemas().then(() => { this.initData(); }); } else { this.initData(); } if (window.outerWidth < 992) { this.$store.commit("TOGGLE_SIDEBAR_MENU"); } // setDocumentTitle(); }, data() { return { tableActions: [ { showOutside: true, show: true, icon: "tavasi tavasi-Component-242--1", title: "ویرایش", to: { name: "undefined", }, selected: false, disabled: false, howToOpen: "", href: "", class: "edit-btn", action: "edit-table-item", // can: "subject-", }, { showOutside: true, show: true, icon: "tavasi tavasi-Component-295--1", title: "حذف", to: { name: "undefined", }, selected: false, disabled: false, howToOpen: "", href: "", class: "delete-btn", action: "delete-table-item", }, ], pagination: { pages: 0, total: 0, page: 1, offset: 0, limit: 10, }, sorting: { sortby: "created", sortorder: undefined, // asc | desc | none }, listDrafts: [], currentDraft: {}, activeSchemaGetter: [], httpService: undefined, fetchingData: false, sidbarMenuDefault: sidbarMenuDefault, sidbarMenuMajles: sidbarMenuMajles, }; }, computed: { ...mapState("entity", ["draftSchemaGetter"]), ...mapState(["isSidebarCollapsed", "currentUser"]), sidbarMenu() { if (isMajlesBuild()) return this.sidbarMenuMajles; else return this.sidbarMenuDefault; }, }, methods: { ...mapActions("entity", [ "SET_ITEM_ENTITY", "draftSchemaSetter", "draftActiveSchemaSetter", "draftActiveStepSetter", ]), ...mapActions(["TOGGLE_PANEL"]), initData() { this.setActiveSchema(); this.getDrafts(); }, setActiveSchema() { this.activeSchemaGetter = []; this.activeSchemaGetter = this.draftSchemaGetter.find( (item) => item.key == "list" ); }, async getSchemas() { let url = repoUrl() + entityApi.schema.list; return await this.httpService .postRequest(url, { organ: "majles", system: "edit", }) .then((response) => { // console.log(response.data.edit); this.draftSchemaSetter(response.data.edit); let sch = response.data.edit.find((item) => item.key == "list"); if (sch) this.draftActiveSchemaSetter(sch); }) }, getDrafts() { if (this.fetchingData) return; this.fetchingData = true; let url = repoUrl() + repoApi.entity.draftList; let key = this.activeSchemaGetter?.index_key ?? "dfqanon"; url = url.replace("{{appname}}", buildName()); url = url.replace("{{index_key}}", key); url = url.replace("{{sortKey}}", "lasttitle"); url = url.replace("/{{filter}}", ""); url = url.replace("{{offset}}", this.pagination.offset); url = url.replace("{{limit}}", this.pagination.limit); this.httpService.getRequest(url).then((res) => { this.listDrafts = res.hits.hits ?? []; const total = res.hits.total.value; const pages = Math.ceil(total / this.pagination.limit); const pagination = { total: total, pages: pages == 0 ? 1 : pages, }; this.pagination = { ...this.pagination, ...pagination }; this.fetchingData = false; }); }, deleteEntity(index) { if (index < 0 || index >= this.listDrafts.length) return; this.currentDraft = this.listDrafts[index]; if (!this.currentDraft || !this.currentDraft._id) return; let key = this.activeSchemaGetter?.index_key ?? "dfqanon"; let url = repoUrl() + repoApi.entity.delete; url = url.replace("{{index_key}}", key); url = url.replace("{{entity_id}}", this.currentDraft._id); this.httpService .postRequest(url) .then((res) => { this.listDrafts = this.listDrafts.slice(index, 1); this.mySwalToast({ html: res.data.message, icon: "success", }); // this.getListSpecial(this.entity_type, this.listType); // this.updateListSpecial() }) .catch((err) => { // this.mySwalToast({ // title: "خطا!!!", // html: err.message, // icon: "error", // }); }); }, onLinkedTitleClick(data) { this.activeRowItem = data.rowItem; // let index = data.index; // let item = this.listDrafts[index]; this.$router.push({ name: "editDraft", params: { id: this.activeRowItem._id, key: this.activeSchemaGetter?.index_key, }, }); }, onEditTableItem(index) { if (index < 0 || index >= this.listDrafts.length) return; this.currentDraft = this.listDrafts[index]; this.$router.push({ name: "editDraft", params: { id: this.currentDraft._id, key: this.activeSchemaGetter?.index_key, }, }); }, onDeleteTableItem(index) { if (index < 0 || index >= this.listDrafts.length) return; this.currentDraft = this.listDrafts[index]; if (this.currentDraft?._source?.islock) { this.mySwalToast({ title: "ممنوع!!!", html: "این مورد بخاطر ثبت نهایی قفل شده است و امکان حذف ندارد", icon: "error", }); return; } this.mySwalConfirm({ title: "هشدار!!!", html: `از حذف اطلاعات جاری اطمینان دارید؟ `, icon: "warning", }).then((result) => { if (result.isConfirmed) { this.deleteEntity(index); } }); }, /** * تغییر وضعیت نمایش منوی سایدبار. */ toggleSidebarMenu() { this.$store.commit("TOGGLE_SIDEBAR_MENU"); }, resetPagination() { this.pagination = { pages: 0, total: 0, page: 0, offset: 0, limit: 10, }; }, pageLimitChanged(paging) { this.resetPagination(); this.pagination.limit = paging.limit; }, pageChanged(paging) { let page = paging.pageNumber; page -= 1; this.pagination.offset = this.pagination.page * paging.limit; this.pagination.limit = paging.limit; this.pagination.page = paging.pageNumber; }, sortChanged(sorting) { this.resetPagination(); this.sorting = sorting; }, }, }; </script> <style scoped lang="scss"></style>