328 lines
8.5 KiB
Vue
328 lines
8.5 KiB
Vue
![]() |
<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>
|