优化消息排序逻辑,调整置顶和时间戳的处理方式,以确保置顶消息优先显示,提升消息列表的可读性和用户体验。

This commit is contained in:
超级老白兔
2025-10-23 17:14:48 +08:00
parent 7f4bc0487e
commit 5c86c2fbf2
2 changed files with 7 additions and 10 deletions

View File

@@ -437,7 +437,7 @@ const MessageList: React.FC<MessageListProps> = () => {
const newSessions = [...prev];
newSessions[existingIndex] = updatedSession;
// 按sortKey降序重新排序最新的在前
// 按sortKey降序重新排序置顶在前,最新的在前)
return newSessions.sort((a, b) => {
const aKey = MessageManager["generateSortKey"](a);
const bKey = MessageManager["generateSortKey"](b);

View File

@@ -52,21 +52,18 @@ export class MessageManager {
* @returns 排序键
*/
private static generateSortKey(session: any): string {
const isTop = session.config?.top ? 0 : 1;
// 时间戳转换:使用9e15减去时间戳,这样最新的时间sortKey最小
// 9e15 是一个足够大的数字,确保结果为正数
const isTop = session.config?.top ? 1 : 0;
// 时间戳:使用正序时间戳,最新的时间值最大
const timestamp = new Date(session.lastUpdateTime || new Date()).getTime();
const time = 9e15 - timestamp;
const displayName = (
session.conRemark ||
session.nickname ||
""
).toLowerCase();
// 格式:置顶标识|时间反转值补齐15位|显示名称
// sortKey越小排序越靠
// 最新的消息time值最小所以排在最前面
const timeStr = String(Math.floor(time)).padStart(16, "0");
// 格式:置顶标识|时间补齐15位|显示名称
// 降序排序:置顶(1)在前,时间大的在前(即最新的在前),名称小的在
const timeStr = String(timestamp).padStart(16, "0");
return `${isTop}|${timeStr}|${displayName}`;
}
@@ -144,7 +141,7 @@ export class MessageManager {
*/
static async getUserSessions(userId: number): Promise<ChatSession[]> {
try {
// 按sortKey降序排序查询最新的在前
// 按sortKey降序排序查询置顶在前,最新的在前)
const sessions = await db.chatSessions
.where("userId")
.equals(userId)