356 lines
9.1 KiB
JavaScript
356 lines
9.1 KiB
JavaScript
![]() |
import { mapActions, mapState } from "pinia";
|
||
|
import { useCommonStore } from "~/stores/commonStore";
|
||
|
import { useAuthStore } from "~/stores/authStore";
|
||
|
import adminApi from "~/apis/adminApi";
|
||
|
|
||
|
export default {
|
||
|
data() {
|
||
|
return {
|
||
|
activeTab: "all",
|
||
|
|
||
|
canView: false,
|
||
|
fetchingData: false,
|
||
|
listUnseen: [],
|
||
|
countUnseen: undefined,
|
||
|
list: [],
|
||
|
counts: "",
|
||
|
notificationItem: undefined,
|
||
|
buttonLoading: false,
|
||
|
pagination: {
|
||
|
page: 1,
|
||
|
pages: 0,
|
||
|
total: 0,
|
||
|
offset: 0,
|
||
|
limit: 5,
|
||
|
},
|
||
|
};
|
||
|
},
|
||
|
computed: {
|
||
|
...mapState(useAuthStore, ["currentUser", "isGuest"]),
|
||
|
},
|
||
|
|
||
|
methods: {
|
||
|
...mapActions(useCommonStore, ["checkPermissions"]),
|
||
|
filterNotifications(newTab) {
|
||
|
this.activeTab = newTab;
|
||
|
this.list = [];
|
||
|
this.getList();
|
||
|
},
|
||
|
async checkPermisionBeforGetList(permission) {
|
||
|
if (this.fetchingData) return;
|
||
|
this.fetchingData = true;
|
||
|
|
||
|
return await this.checkPermissions({ permission, _this: this })
|
||
|
.then(() => {
|
||
|
this.canView = true;
|
||
|
// this.fetchingData = false;
|
||
|
})
|
||
|
.catch(() => {
|
||
|
this.canView = false;
|
||
|
this.fetchingData = false;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
// detelte item.
|
||
|
async deleteItem({ _id }) {
|
||
|
if (this.buttonLoading) return;
|
||
|
this.buttonLoading = true;
|
||
|
|
||
|
var url = adminApi.notification.delete;
|
||
|
url = url.replace("{{id}}", _id);
|
||
|
url = url.replace("{{entity_type}}", "notif");
|
||
|
|
||
|
try {
|
||
|
const { $api } = useNuxtApp();
|
||
|
const res = await $api(url, {
|
||
|
method: "POST",
|
||
|
baseURL: repoUrl(),
|
||
|
});
|
||
|
this.mySwalToast({
|
||
|
title: "تبریک",
|
||
|
html: res.message,
|
||
|
icon: "success",
|
||
|
});
|
||
|
return res;
|
||
|
} catch (err) {
|
||
|
this.fetchingData = false;
|
||
|
}
|
||
|
|
||
|
// return await this.httpService
|
||
|
// .postRequest(url)
|
||
|
// .then((res) => {
|
||
|
// this.mySwalToast({
|
||
|
// title: "تبریک",
|
||
|
// html: res.message,
|
||
|
// icon: "success",
|
||
|
// });
|
||
|
// })
|
||
|
// .catch((error) => {})
|
||
|
// .finally(() => {
|
||
|
// this.buttonLoading = false;
|
||
|
// });
|
||
|
},
|
||
|
|
||
|
// Getting notification item.
|
||
|
async getNotificationItem(id) {
|
||
|
let url = adminApi.notification.get;
|
||
|
url = url.replace("{{id}}", id);
|
||
|
|
||
|
// this.httpService
|
||
|
// .getRequest(url)
|
||
|
// .then((res) => {
|
||
|
// this.notificationItem = res;
|
||
|
// })
|
||
|
// .catch(() => {})
|
||
|
// .finally(() => {
|
||
|
// this.fetchingData = false;
|
||
|
// });
|
||
|
|
||
|
try {
|
||
|
const { $api } = useNuxtApp();
|
||
|
const res = await $api(url, {
|
||
|
method: "get",
|
||
|
baseURL: repoUrl(),
|
||
|
});
|
||
|
this.notificationItem = res;
|
||
|
} catch (err) {
|
||
|
this.fetchingData = false;
|
||
|
}
|
||
|
},
|
||
|
// admin
|
||
|
async getList() {
|
||
|
let url = adminApi.notification[this.activeTab];
|
||
|
url = url.replace("{{offset}}", this.pagination.offset);
|
||
|
url = url.replace("{{limit}}", this.pagination.limit);
|
||
|
|
||
|
// this.httpService
|
||
|
// .getRequest(url)
|
||
|
// .then((res) => {
|
||
|
// this.list = res.hits.hits;
|
||
|
// this.numberOfMark();
|
||
|
// 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 };
|
||
|
// })
|
||
|
// .catch(() => {})
|
||
|
// .finally(() => {
|
||
|
// this.fetchingData = false;
|
||
|
// });
|
||
|
|
||
|
try {
|
||
|
const { $api } = useNuxtApp();
|
||
|
const res = await $api(url, {
|
||
|
method: "get",
|
||
|
baseURL: repoUrl(),
|
||
|
});
|
||
|
this.list = res.hits.hits;
|
||
|
this.numberOfMark();
|
||
|
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 };
|
||
|
} catch (err) {
|
||
|
this.fetchingData = false;
|
||
|
}
|
||
|
},
|
||
|
//user
|
||
|
async getListUnseen() {
|
||
|
let url = adminApi.notification.listUnseen;
|
||
|
|
||
|
url = url.replace("{{offset}}", this.pagination.offset);
|
||
|
url = url.replace("{{limit}}", this.pagination.limit);
|
||
|
|
||
|
// this.httpService
|
||
|
// .getRequest(url)
|
||
|
// .then((res) => {
|
||
|
// this.listUnseen = 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 };
|
||
|
// })
|
||
|
// .catch(() => {})
|
||
|
// .finally(() => {
|
||
|
// this.fetchingData = false;
|
||
|
// });
|
||
|
|
||
|
try {
|
||
|
const { $api } = useNuxtApp();
|
||
|
const res = await $api(url, {
|
||
|
method: "get",
|
||
|
baseURL: repoUrl(),
|
||
|
});
|
||
|
this.listUnseen = 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;
|
||
|
} catch (err) {
|
||
|
this.fetchingData = false;
|
||
|
}
|
||
|
},
|
||
|
// user
|
||
|
async getCountUnseen() {
|
||
|
const url = adminApi.notification.countUnseen;
|
||
|
|
||
|
// this.httpService
|
||
|
// .getRequest(url)
|
||
|
// .then((res) => {
|
||
|
// this.countUnseen = res.count;
|
||
|
// })
|
||
|
// .catch(() => {})
|
||
|
// .finally(() => {});
|
||
|
|
||
|
try {
|
||
|
const { $api } = useNuxtApp();
|
||
|
const res = await $api(url, {
|
||
|
method: "get",
|
||
|
baseURL: repoUrl(),
|
||
|
});
|
||
|
|
||
|
this.countUnseen = res.data.count;
|
||
|
} catch (err) {}
|
||
|
},
|
||
|
goToNotificationShowPage(item) {
|
||
|
this.$router.push({
|
||
|
name: "notificationsShow",
|
||
|
params: {
|
||
|
id: item._id,
|
||
|
},
|
||
|
});
|
||
|
},
|
||
|
goToNotificationPage() {
|
||
|
this.$router.push({
|
||
|
name: "notifications",
|
||
|
});
|
||
|
},
|
||
|
resetPagination() {
|
||
|
this.pagination = {
|
||
|
pages: 0,
|
||
|
total: 0,
|
||
|
page: 1,
|
||
|
offset: 0,
|
||
|
limit: 10,
|
||
|
};
|
||
|
},
|
||
|
pageLimitChanged(paging) {
|
||
|
this.resetPagination();
|
||
|
this.pagination.limit = paging.limit;
|
||
|
|
||
|
this.getList();
|
||
|
},
|
||
|
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();
|
||
|
},
|
||
|
sortChanged(sorting) {
|
||
|
// keep limit status.
|
||
|
// reset page and offset values.
|
||
|
|
||
|
this.pagination.page = this.pagination.offset = 0;
|
||
|
this.sorting = sorting;
|
||
|
|
||
|
this.getList();
|
||
|
},
|
||
|
timeSince(timeStamp) {
|
||
|
var date = new Date(timeStamp * 1000);
|
||
|
var seconds = Math.floor((new Date() - date) / 1000);
|
||
|
var interval = seconds / 31536000;
|
||
|
if (interval > 1) {
|
||
|
return Math.floor(interval) + " سال";
|
||
|
}
|
||
|
interval = seconds / 2592000;
|
||
|
if (interval > 1) {
|
||
|
return Math.floor(interval) + " ماه";
|
||
|
}
|
||
|
interval = seconds / 86400;
|
||
|
if (interval > 1) {
|
||
|
return Math.floor(interval) + " روز";
|
||
|
}
|
||
|
interval = seconds / 3600;
|
||
|
if (interval > 1) {
|
||
|
return Math.floor(interval) + " ساعت";
|
||
|
}
|
||
|
interval = seconds / 60;
|
||
|
if (interval > 1) {
|
||
|
return Math.floor(interval) + " دقیقه";
|
||
|
}
|
||
|
return Math.floor(seconds) + " ثانیه";
|
||
|
},
|
||
|
async markAll() {
|
||
|
let url = adminApi.notification.markAllAsRead;
|
||
|
|
||
|
// this.httpService
|
||
|
// .postRequest(url)
|
||
|
// .then((res) => {
|
||
|
// this.getList();
|
||
|
// this.mySwalToast({
|
||
|
// html: res?.message ?? "با موفقیت تغییر یافت.",
|
||
|
// });
|
||
|
// this.numberOfMark();
|
||
|
// })
|
||
|
// .catch(() => {})
|
||
|
// .finally(() => {});
|
||
|
|
||
|
try {
|
||
|
const { $api } = useNuxtApp();
|
||
|
const res = await $api(url, {
|
||
|
method: "get",
|
||
|
baseURL: repoUrl(),
|
||
|
});
|
||
|
this.getList();
|
||
|
this.mySwalToast({
|
||
|
html: res?.message ?? "با موفقیت تغییر یافت.",
|
||
|
});
|
||
|
this.numberOfMark();
|
||
|
} catch (err) {}
|
||
|
},
|
||
|
async numberOfMark() {
|
||
|
let url = adminApi.notification.counts;
|
||
|
url = url.replace("{{data_type}}", this.data_type);
|
||
|
|
||
|
// this.httpService
|
||
|
// .getRequest(url)
|
||
|
// .then((res) => {
|
||
|
// this.counts = res.data;
|
||
|
// })
|
||
|
// .catch(() => {})
|
||
|
// .finally(() => {});
|
||
|
|
||
|
try {
|
||
|
const { $api } = useNuxtApp();
|
||
|
const res = await $api(url, {
|
||
|
method: "get",
|
||
|
baseURL: repoUrl(),
|
||
|
});
|
||
|
this.counts = res.data;
|
||
|
} catch (err) {}
|
||
|
},
|
||
|
},
|
||
|
};
|