appointment_system/miniprogram/unpackage/dist/dev/mp-weixin/pages/me/notification-page.js
2025-12-19 00:37:31 +08:00

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