From c4da898efef6e1799e070e8e9238998b8778bc6f Mon Sep 17 00:00:00 2001 From: mayiming <1627832236@qq.com> Date: Sun, 28 Sep 2025 20:22:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=83=A8=E5=88=86=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E9=80=9A=E7=9F=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/notifications/notifications.ts | 112 +++++++++++++----- 1 file changed, 84 insertions(+), 28 deletions(-) diff --git a/miniprogram/pages/notifications/notifications.ts b/miniprogram/pages/notifications/notifications.ts index 337e295..ae73619 100644 --- a/miniprogram/pages/notifications/notifications.ts +++ b/miniprogram/pages/notifications/notifications.ts @@ -1,5 +1,7 @@ // message.ts (适配最新数据库结构) +import envConfig from "../../env"; + // 接口:定义从API获取的原始消息数据结构 (与数据库完全一致) interface IApiMessage { id: number; @@ -38,46 +40,87 @@ interface IApiMessage { }, fetchAndProcessMessages() { - // 1. 模拟从您的后端API获取的、符合最新数据库结构的原始数据 - const apiResponse: IApiMessage[] = [ - { id: 101, sender_id: "user_1001", receiver_id: "me", msg_type: "comment", status: 1, sequence: "seq_001", created_at: "2025-09-28 15:30:00", content: "这张照片的构图太棒了!", is_read: 0, target: "post:abc-123" }, - { id: 102, sender_id: "user_2035", receiver_id: "me", msg_type: "like", status: 1, sequence: "seq_002", created_at: "2025-09-28 09:15:00", content: "你的帖子「周末徒步之旅」", is_read: 0, target: "post:def-456" }, - { id: 103, sender_id: "user_3110", receiver_id: "me", msg_type: "follow", status: 1, sequence: "seq_003", created_at: "2025-09-27 20:05:00", content: "", is_read: 1, target: "user:user-3110" }, - { id: 104, sender_id: "system", receiver_id: "me", msg_type: "system", status: 1, sequence: "seq_004", created_at: "2025-09-26 10:00:00", content: "恭喜你获得了「创作新星」徽章,再接再厉!", is_read: 1, target: "/pages/my-badges/index" }, - { id: 105, sender_id: "user_1001", receiver_id: "me", msg_type: "like", status: 1, sequence: "seq_005", created_at: "2025-09-25 11:45:00", content: "你的帖子「美食探店分享」", is_read: 1, target: "post:ghi-789" }, - ]; + + const app = getApp(); + console.log("全局userinfo",app.globalData.userInfo) + const userInfo = app.globalData.userInfo || {}; + console.log("userInfo 的数据类型:", typeof userInfo); + console.log("user中的userInfo:",userInfo) + let userInfoObj = userInfo; + if (typeof userInfo === "string") { + try { + userInfoObj = JSON.parse(userInfo); // 字符串转对象 + } catch (e) { + console.error("解析 userInfo 字符串失败:", e); + return; + } + } + wx.request({ + url: `${envConfig.apiBaseUrl}/notification/get`, // 替换为你的后端接口地址 + method: 'POST', + data: { + "uid": userInfoObj.uid + }, + success: (res) => { + console.log("该用户消息通知:",res) + const apiResponse = res.data.data as IApiMessage[]; + + // ⭐️ 关键步骤:调用 transformMessage 对每条消息进行处理 + const viewList = apiResponse.map(msg => this.transformMessage(msg)); + + // 将处理过后的、符合 WXML 要求的 viewList 设置给页面 + this.setData({ + messageList: viewList + }); + }, + fail: (err) => { + + + } + }); - const viewList = apiResponse.map(msg => this.transformMessage(msg)); + // const viewList = apiResponse.map(msg => this.transformMessage(msg)); - this.setData({ - messageList: viewList - }); + }, transformMessage(msg: IApiMessage): IViewMessage { let title = ''; - let content = ''; - const senderName = msg.sender_id; + let finalContent = ''; + + // 在真实应用中,您应该根据 sender_id 从用户数据中查找真实的昵称 + // 此处为了演示,我们先用 sender_id 的一部分作为临时名称 + const senderName = msg.sender_id.substring(0, 8); // 取 sender_id 前8位做为临时昵称 - // ⭐️ 现在根据 msg_type 判断 switch (msg.msg_type) { - case 'comment': title = '新的评论'; content = `「${senderName}」评论了你:「${msg.content}」`; break; - case 'like': title = '新的点赞'; content = `「${senderName}」赞了${msg.content}`; break; - case 'follow': title = '新的关注'; content = `「${senderName}」关注了你`; break; - case 'system': title = '系统通知'; content = msg.content; break; + case 'comment': + title = '新的评论'; + // ⭐️ 修正:使用 senderName (它等于 msg.sender_id) + finalContent = `「${senderName}」评论了你:「${msg.content}」`; + break; + case 'like': + title = '新的点赞'; + // ⭐️ 修正:使用 senderName + finalContent = `「${senderName}」赞了您的动态:${msg.content}`; + break; + case 'follow': + title = '新的关注'; + // ⭐️ 修正:使用 senderName + finalContent = `「${senderName}」关注了你`; + break; + case 'system': + title = '系统通知'; + finalContent = msg.content; + break; } return { - // ⭐️ 使用数据库的自增 id id: msg.id, - // ⭐️ type 用于判断图标 type: msg.msg_type === 'system' ? 'system' : 'user', title: title, - content: content, + content: finalContent, timestamp: this.formatDisplayTime(msg.created_at), - // ⭐️ is_read 用于判断未读红点 is_read: msg.is_read, - // ⭐️ target 用于点击跳转 target: msg.target, }; }, @@ -124,13 +167,26 @@ interface IApiMessage { }, formatDisplayTime(dateString: string): string { - const date = new Date(dateString.replace(/-/g, '/')); + // ⭐️ 修正:直接解析标准日期字符串,不再需要 replace + const date = new Date(dateString); + + // 检查日期是否有效 + if (isNaN(date.getTime())) { + return "日期无效"; // 返回一个友好的错误提示 + } + const now = new Date(); const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()); const yesterdayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1); + const time = `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`; - if (date.getTime() >= todayStart.getTime()) return `今天 ${time}`; - if (date.getTime() >= yesterdayStart.getTime()) return `昨天 ${time}`; + + if (date.getTime() >= todayStart.getTime()) { + return `今天 ${time}`; + } + if (date.getTime() >= yesterdayStart.getTime()) { + return `昨天 ${time}`; + } return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`; - } + }, }); \ No newline at end of file