完善部分消息通知功能
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
// message.ts (适配最新数据库结构)
|
// message.ts (适配最新数据库结构)
|
||||||
|
|
||||||
|
import envConfig from "../../env";
|
||||||
|
|
||||||
// 接口:定义从API获取的原始消息数据结构 (与数据库完全一致)
|
// 接口:定义从API获取的原始消息数据结构 (与数据库完全一致)
|
||||||
interface IApiMessage {
|
interface IApiMessage {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -38,46 +40,87 @@ interface IApiMessage {
|
|||||||
},
|
},
|
||||||
|
|
||||||
fetchAndProcessMessages() {
|
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));
|
const viewList = apiResponse.map(msg => this.transformMessage(msg));
|
||||||
|
|
||||||
|
// 将处理过后的、符合 WXML 要求的 viewList 设置给页面
|
||||||
this.setData({
|
this.setData({
|
||||||
messageList: viewList
|
messageList: viewList
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// const viewList = apiResponse.map(msg => this.transformMessage(msg));
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
transformMessage(msg: IApiMessage): IViewMessage {
|
transformMessage(msg: IApiMessage): IViewMessage {
|
||||||
let title = '';
|
let title = '';
|
||||||
let content = '';
|
let finalContent = '';
|
||||||
const senderName = msg.sender_id;
|
|
||||||
|
// 在真实应用中,您应该根据 sender_id 从用户数据中查找真实的昵称
|
||||||
|
// 此处为了演示,我们先用 sender_id 的一部分作为临时名称
|
||||||
|
const senderName = msg.sender_id.substring(0, 8); // 取 sender_id 前8位做为临时昵称
|
||||||
|
|
||||||
// ⭐️ 现在根据 msg_type 判断
|
|
||||||
switch (msg.msg_type) {
|
switch (msg.msg_type) {
|
||||||
case 'comment': title = '新的评论'; content = `「${senderName}」评论了你:「${msg.content}」`; break;
|
case 'comment':
|
||||||
case 'like': title = '新的点赞'; content = `「${senderName}」赞了${msg.content}`; break;
|
title = '新的评论';
|
||||||
case 'follow': title = '新的关注'; content = `「${senderName}」关注了你`; break;
|
// ⭐️ 修正:使用 senderName (它等于 msg.sender_id)
|
||||||
case 'system': title = '系统通知'; content = msg.content; break;
|
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 {
|
return {
|
||||||
// ⭐️ 使用数据库的自增 id
|
|
||||||
id: msg.id,
|
id: msg.id,
|
||||||
// ⭐️ type 用于判断图标
|
|
||||||
type: msg.msg_type === 'system' ? 'system' : 'user',
|
type: msg.msg_type === 'system' ? 'system' : 'user',
|
||||||
title: title,
|
title: title,
|
||||||
content: content,
|
content: finalContent,
|
||||||
timestamp: this.formatDisplayTime(msg.created_at),
|
timestamp: this.formatDisplayTime(msg.created_at),
|
||||||
// ⭐️ is_read 用于判断未读红点
|
|
||||||
is_read: msg.is_read,
|
is_read: msg.is_read,
|
||||||
// ⭐️ target 用于点击跳转
|
|
||||||
target: msg.target,
|
target: msg.target,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -124,13 +167,26 @@ interface IApiMessage {
|
|||||||
},
|
},
|
||||||
|
|
||||||
formatDisplayTime(dateString: string): string {
|
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 now = new Date();
|
||||||
const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
||||||
const yesterdayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
|
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')}`;
|
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 `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
|
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')}`;
|
||||||
|
},
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user