216 lines
5.7 KiB
JavaScript
216 lines
5.7 KiB
JavaScript
![]() |
import HttpService from "~/services/httpService";
|
||
|
import repoApi from "~/apis/repoApi";
|
||
|
import chatApi from "~/apis/chatApi";
|
||
|
|
||
|
export const entityMixin = {
|
||
|
mounted() {
|
||
|
this.httpService = useNuxtApp()["$http"];
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
fetchingData: false,
|
||
|
|
||
|
showModal: false,
|
||
|
errors: {},
|
||
|
pagination: {
|
||
|
page: 1,
|
||
|
pages: 0,
|
||
|
total: 0,
|
||
|
offset: 0, // page * per_page
|
||
|
limit: 10, //per_page
|
||
|
},
|
||
|
sorting: {
|
||
|
sortby: "created",
|
||
|
sortorder: undefined, // asc | desc | none
|
||
|
},
|
||
|
};
|
||
|
},
|
||
|
methods: {
|
||
|
async addEntity(my_entity) {
|
||
|
let self = this;
|
||
|
|
||
|
let url = repoUrl() + this.$route.meta.slug + repoApi.entity.add;
|
||
|
return await this.httpService.postRequest(url, my_entity).then((res) => {
|
||
|
// self.entity.id = res._id;
|
||
|
// self.$emit("change", { item: self.entity, type: "entityList" });
|
||
|
// self.closeModal();
|
||
|
|
||
|
return res;
|
||
|
});
|
||
|
},
|
||
|
async updateEntity(id, my_entity) {
|
||
|
let self = this;
|
||
|
|
||
|
let url =
|
||
|
repoUrl() + this.$route.meta.slug + repoApi.entity.update + "/" + id;
|
||
|
return await this.httpService.postRequest(url, my_entity).then((res) => {
|
||
|
// self.entity.id = res._id;
|
||
|
// self.$emit("change", { item: self.entity, type: "entityList" });
|
||
|
// self.closeModal();
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// return "نامعین";
|
||
|
// },
|
||
|
getListSpecial(_entityType, _specialType) {
|
||
|
if (this.fetchingData) return;
|
||
|
this.fetchingData = true;
|
||
|
|
||
|
this.entity_type = _entityType;
|
||
|
|
||
|
let url = repoUrl() + this.$route.meta.slug + repoApi.entity.listSpecial;
|
||
|
url = url.replace("{{type}}", _entityType);
|
||
|
url = url.replace("{{specialtype}}", _specialType);
|
||
|
url = url + `/${this.pagination.offset}/${this.pagination.limit}`;
|
||
|
|
||
|
// url = this.addSubjectFilters(url);
|
||
|
// url = this.addCreationFilters(url);
|
||
|
|
||
|
const subjectFilters = this.subjectFilters.size;
|
||
|
const creationFilters = this.creationFilters.size;
|
||
|
|
||
|
if (subjectFilters || creationFilters) {
|
||
|
url += "/" + this.addSubjectFilters() + this.addCreationFilters();
|
||
|
}
|
||
|
|
||
|
this.httpService.getRequest(url).then((res) => {
|
||
|
this.listEntity = 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;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
getList(_entityType) {
|
||
|
if (this.fetchingData) return;
|
||
|
this.fetchingData = true;
|
||
|
|
||
|
this.entity_type = _entityType;
|
||
|
|
||
|
let url =
|
||
|
repoUrl() +
|
||
|
this.$route.meta.slug +
|
||
|
repoApi.entity.list.replace("{{type}}", _entityType) +
|
||
|
`/${this.pagination.offset}/${this.pagination.limit}`;
|
||
|
url += "/date_create/desc";
|
||
|
|
||
|
const subjectFilters = this.subjectFilters.size;
|
||
|
const creationFilters = this.creationFilters.size;
|
||
|
|
||
|
if (subjectFilters || creationFilters) {
|
||
|
// add subjects filters to url
|
||
|
url += "/" + this.addSubjectFilters() + this.addCreationFilters();
|
||
|
}
|
||
|
|
||
|
this.httpService.getRequest(url).then((res) => {
|
||
|
this.listEntity = 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;
|
||
|
});
|
||
|
},
|
||
|
addSubjectFilters() {
|
||
|
let url = "";
|
||
|
const filterSize = this.subjectFilters.size;
|
||
|
if (filterSize) {
|
||
|
let query = "";
|
||
|
let counter = 1;
|
||
|
|
||
|
for (const [key, value] of this.subjectFilters.entries()) {
|
||
|
query += value.id;
|
||
|
query += counter++ < filterSize ? "$" : "";
|
||
|
}
|
||
|
url += "&f_si=" + query;
|
||
|
}
|
||
|
return url;
|
||
|
},
|
||
|
addCreationFilters() {
|
||
|
let url = "";
|
||
|
|
||
|
const filterSize = this.creationFilters.size;
|
||
|
if (filterSize) {
|
||
|
let query = "";
|
||
|
let counter = 1;
|
||
|
|
||
|
for (const [key, value] of this.creationFilters.entries()) {
|
||
|
query += value.id;
|
||
|
query += counter++ < filterSize ? "$" : "";
|
||
|
}
|
||
|
url += "&f_ci=" + query;
|
||
|
}
|
||
|
return url;
|
||
|
},
|
||
|
|
||
|
pageLimitChanged(paging) {
|
||
|
this.resetPagination();
|
||
|
this.pagination.limit = paging.limit;
|
||
|
|
||
|
this.getList(this.entity_type);
|
||
|
},
|
||
|
pageChanged(paging) {
|
||
|
let page = paging.pageNumber;
|
||
|
page -= 1;
|
||
|
this.pagination.offset = page * paging.limit;
|
||
|
this.pagination.limit = paging.limit;
|
||
|
this.pagination.page = paging.pageNumber;
|
||
|
|
||
|
this.getList(this.entity_type);
|
||
|
},
|
||
|
sortChanged(sorting) {
|
||
|
this.pagination.page = this.pagination.offset = 0;
|
||
|
this.sorting = sorting;
|
||
|
|
||
|
this.getList(this.entity_type);
|
||
|
},
|
||
|
resetPagination() {
|
||
|
this.pagination = {
|
||
|
pages: 0,
|
||
|
total: 0,
|
||
|
page: 1,
|
||
|
offset: 0,
|
||
|
limit: 10,
|
||
|
};
|
||
|
},
|
||
|
//Creating new group when making a new answer/issue.
|
||
|
addToConversation(res, data) {
|
||
|
let conversation = {
|
||
|
refrence_id: res._id,
|
||
|
entity_type_id: this.$route.meta.entityType,
|
||
|
type: data.type_id,
|
||
|
desc: data.description,
|
||
|
title: data.title,
|
||
|
};
|
||
|
|
||
|
this.httpService.postRequest(
|
||
|
messageUrl() + chatApi.all.create,
|
||
|
conversation
|
||
|
);
|
||
|
},
|
||
|
},
|
||
|
watch: {
|
||
|
$route: {
|
||
|
handler(to) {
|
||
|
// this.httpService = new HttpService(import.meta.env.VITE_REPO_BASE_URL + to.meta.slug);
|
||
|
},
|
||
|
deep: true,
|
||
|
// immediate: true,
|
||
|
},
|
||
|
},
|
||
|
};
|