201 lines
7.7 KiB
JavaScript
201 lines
7.7 KiB
JavaScript
"use strict";
|
|
const common_vendor = require("../../common/vendor.js");
|
|
const modules_api_AppServer = require("../../modules/api/AppServer.js");
|
|
const common_assets = require("../../common/assets.js");
|
|
const _sfc_main = {
|
|
data() {
|
|
return {
|
|
activeTab: "all",
|
|
loading: false,
|
|
notificationList: [],
|
|
unreadCount: { all: 0, system: 0, activity: 0, service: 0 },
|
|
pagination: { page: 1, limit: 10, total: 0 },
|
|
hasMore: true
|
|
};
|
|
},
|
|
onLoad() {
|
|
this.fetchUnreadCount();
|
|
this.fetchNotifications();
|
|
},
|
|
methods: {
|
|
back() {
|
|
common_vendor.index.navigateBack({ delta: 1 });
|
|
},
|
|
switchTab(tab) {
|
|
if (this.activeTab === tab)
|
|
return;
|
|
this.activeTab = tab;
|
|
this.pagination.page = 1;
|
|
this.notificationList = [];
|
|
this.hasMore = true;
|
|
this.fetchNotifications();
|
|
},
|
|
async fetchUnreadCount() {
|
|
try {
|
|
const appserver = new modules_api_AppServer.AppServer();
|
|
const res = await appserver.GetNotificationUnreadCount();
|
|
if (res.code === 0 && res.data) {
|
|
this.unreadCount = res.data;
|
|
}
|
|
} catch (e) {
|
|
common_vendor.index.__f__("error", "at pages/me/notification-page.vue:103", "获取未读数量失败:", e);
|
|
}
|
|
},
|
|
async fetchNotifications() {
|
|
var _a;
|
|
if (this.loading)
|
|
return;
|
|
this.loading = true;
|
|
try {
|
|
const appserver = new modules_api_AppServer.AppServer();
|
|
const params = {
|
|
page: this.pagination.page,
|
|
limit: this.pagination.limit
|
|
};
|
|
if (this.activeTab !== "all") {
|
|
params.type = this.activeTab;
|
|
}
|
|
const res = await appserver.GetNotifications(params);
|
|
if (res.code === 0) {
|
|
const newList = res.data || [];
|
|
if (this.pagination.page === 1) {
|
|
this.notificationList = newList;
|
|
} else {
|
|
this.notificationList = [...this.notificationList, ...newList];
|
|
}
|
|
this.pagination.total = ((_a = res.pagination) == null ? void 0 : _a.total) || 0;
|
|
this.hasMore = newList.length >= this.pagination.limit;
|
|
}
|
|
} catch (e) {
|
|
common_vendor.index.__f__("error", "at pages/me/notification-page.vue:130", "获取通知列表失败:", e);
|
|
} finally {
|
|
this.loading = false;
|
|
}
|
|
},
|
|
loadMore() {
|
|
if (!this.hasMore || this.loading)
|
|
return;
|
|
this.pagination.page++;
|
|
this.fetchNotifications();
|
|
},
|
|
async readNotification(item) {
|
|
if (item.isRead)
|
|
return;
|
|
try {
|
|
const appserver = new modules_api_AppServer.AppServer();
|
|
await appserver.MarkNotificationAsRead(item.id);
|
|
item.isRead = true;
|
|
this.unreadCount.all = Math.max(0, this.unreadCount.all - 1);
|
|
this.unreadCount[item.type] = Math.max(0, this.unreadCount[item.type] - 1);
|
|
} catch (e) {
|
|
common_vendor.index.__f__("error", "at pages/me/notification-page.vue:150", "标记已读失败:", e);
|
|
}
|
|
},
|
|
async markAllRead() {
|
|
if (this.unreadCount.all === 0) {
|
|
common_vendor.index.showToast({ title: this.$t("notification.allRead") || "已全部已读", icon: "none" });
|
|
return;
|
|
}
|
|
try {
|
|
const appserver = new modules_api_AppServer.AppServer();
|
|
await appserver.MarkAllNotificationsAsRead();
|
|
this.notificationList.forEach((item) => {
|
|
item.isRead = true;
|
|
});
|
|
this.unreadCount = { all: 0, system: 0, activity: 0, service: 0 };
|
|
common_vendor.index.showToast({ title: this.$t("common.success"), icon: "success" });
|
|
} catch (e) {
|
|
common_vendor.index.__f__("error", "at pages/me/notification-page.vue:166", "标记全部已读失败:", e);
|
|
common_vendor.index.showToast({ title: this.$t("common.failed") || "操作失败", icon: "none" });
|
|
}
|
|
},
|
|
formatTime(timestamp) {
|
|
if (!timestamp)
|
|
return "";
|
|
const now = Date.now();
|
|
const time = new Date(timestamp).getTime();
|
|
const diff = now - time;
|
|
const minutes = Math.floor(diff / (1e3 * 60));
|
|
const hours = Math.floor(diff / (1e3 * 60 * 60));
|
|
const days = Math.floor(diff / (1e3 * 60 * 60 * 24));
|
|
if (minutes < 1)
|
|
return this.$t("notification.justNow") || "刚刚";
|
|
if (minutes < 60)
|
|
return (this.$t("notification.minutesAgo") || "{n}分钟前").replace("{n}", minutes);
|
|
if (hours < 24)
|
|
return (this.$t("notification.hoursAgo") || "{n}小时前").replace("{n}", hours);
|
|
return (this.$t("notification.daysAgo") || "{n}天前").replace("{n}", days);
|
|
}
|
|
}
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
return common_vendor.e({
|
|
a: common_assets._imports_0,
|
|
b: common_vendor.o((...args) => $options.back && $options.back(...args)),
|
|
c: common_vendor.t(_ctx.$t("me.notification")),
|
|
d: common_vendor.t(_ctx.$t("notification.markAllRead")),
|
|
e: common_vendor.o((...args) => $options.markAllRead && $options.markAllRead(...args)),
|
|
f: common_vendor.t(_ctx.$t("notification.all")),
|
|
g: $data.activeTab === "all" ? 1 : "",
|
|
h: $data.unreadCount.all > 0
|
|
}, $data.unreadCount.all > 0 ? {
|
|
i: common_vendor.t($data.unreadCount.all)
|
|
} : {}, {
|
|
j: $data.activeTab === "all" ? 1 : "",
|
|
k: common_vendor.o(($event) => $options.switchTab("all")),
|
|
l: common_vendor.t(_ctx.$t("notification.system")),
|
|
m: $data.activeTab === "system" ? 1 : "",
|
|
n: $data.unreadCount.system > 0
|
|
}, $data.unreadCount.system > 0 ? {
|
|
o: common_vendor.t($data.unreadCount.system)
|
|
} : {}, {
|
|
p: $data.activeTab === "system" ? 1 : "",
|
|
q: common_vendor.o(($event) => $options.switchTab("system")),
|
|
r: common_vendor.t(_ctx.$t("notification.activity")),
|
|
s: $data.activeTab === "activity" ? 1 : "",
|
|
t: $data.unreadCount.activity > 0
|
|
}, $data.unreadCount.activity > 0 ? {
|
|
v: common_vendor.t($data.unreadCount.activity)
|
|
} : {}, {
|
|
w: $data.activeTab === "activity" ? 1 : "",
|
|
x: common_vendor.o(($event) => $options.switchTab("activity")),
|
|
y: common_vendor.t(_ctx.$t("notification.service")),
|
|
z: $data.activeTab === "service" ? 1 : "",
|
|
A: $data.unreadCount.service > 0
|
|
}, $data.unreadCount.service > 0 ? {
|
|
B: common_vendor.t($data.unreadCount.service)
|
|
} : {}, {
|
|
C: $data.activeTab === "service" ? 1 : "",
|
|
D: common_vendor.o(($event) => $options.switchTab("service")),
|
|
E: common_vendor.f($data.notificationList, (item, k0, i0) => {
|
|
return common_vendor.e({
|
|
a: common_vendor.t(item.title),
|
|
b: !item.isRead
|
|
}, !item.isRead ? {} : {}, {
|
|
c: common_vendor.t(item.content),
|
|
d: common_vendor.t($options.formatTime(item.createdAt)),
|
|
e: !item.isRead ? 1 : "",
|
|
f: item.id,
|
|
g: common_vendor.o(($event) => $options.readNotification(item), item.id)
|
|
});
|
|
}),
|
|
F: $data.loading
|
|
}, $data.loading ? {
|
|
G: common_vendor.t(_ctx.$t("common.loading"))
|
|
} : {}, {
|
|
H: !$data.loading && !$data.hasMore && $data.notificationList.length > 0
|
|
}, !$data.loading && !$data.hasMore && $data.notificationList.length > 0 ? {
|
|
I: common_vendor.t(_ctx.$t("common.noMore") || "没有更多了")
|
|
} : {}, {
|
|
J: $data.notificationList.length === 0 && !$data.loading
|
|
}, $data.notificationList.length === 0 && !$data.loading ? {
|
|
K: common_assets._imports_1$1,
|
|
L: common_vendor.t(_ctx.$t("notification.noNotification"))
|
|
} : {}, {
|
|
M: common_vendor.o((...args) => $options.loadMore && $options.loadMore(...args))
|
|
});
|
|
}
|
|
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
|
|
wx.createPage(MiniProgramPage);
|
|
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/me/notification-page.js.map
|