diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx index cb2083bf..dec222c6 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx @@ -437,7 +437,7 @@ const MessageList: React.FC = () => { const newSessions = [...prev]; newSessions[existingIndex] = updatedSession; - // 按sortKey降序重新排序(最新的在前面) + // 按sortKey降序重新排序(置顶在前,最新的在前) return newSessions.sort((a, b) => { const aKey = MessageManager["generateSortKey"](a); const bKey = MessageManager["generateSortKey"](b); diff --git a/Touchkebao/src/utils/dbAction/message.ts b/Touchkebao/src/utils/dbAction/message.ts index d741c75a..bd5f7f97 100644 --- a/Touchkebao/src/utils/dbAction/message.ts +++ b/Touchkebao/src/utils/dbAction/message.ts @@ -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 { try { - // 按sortKey降序排序查询(最新的在前面) + // 按sortKey降序排序查询(置顶在前,最新的在前) const sessions = await db.chatSessions .where("userId") .equals(userId)