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 8ed31256..41743f87 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 @@ -93,9 +93,9 @@ const MessageList: React.FC = () => { const newPinned = !currentPinned; try { - // 1. 立即更新UI(乐观更新) - setSessions(prev => - prev.map(s => + // 1. 立即更新UI并重新排序(乐观更新) + setSessions(prev => { + const updatedSessions = prev.map(s => s.id === session.id ? { ...s, @@ -103,8 +103,15 @@ const MessageList: React.FC = () => { sortKey: "", // 会重新计算 } : s, - ), - ); + ); + + // 重新排序 + return updatedSessions.sort((a, b) => { + const aKey = MessageManager["generateSortKey"](a); + const bKey = MessageManager["generateSortKey"](b); + return bKey.localeCompare(aKey); + }); + }); // 2. 后台调用API await updateConfig({ diff --git a/Touchkebao/src/utils/dbAction/message.ts b/Touchkebao/src/utils/dbAction/message.ts index bd5f7f97..34b883fb 100644 --- a/Touchkebao/src/utils/dbAction/message.ts +++ b/Touchkebao/src/utils/dbAction/message.ts @@ -52,19 +52,22 @@ export class MessageManager { * @returns 排序键 */ private static generateSortKey(session: any): string { + // 1. 置顶标识:置顶为1,普通为0(降序时置顶在前) const isTop = session.config?.top ? 1 : 0; - // 时间戳:使用正序时间戳,最新的时间值最大 + + // 2. 时间戳:直接使用时间戳,数值越大表示越新 const timestamp = new Date(session.lastUpdateTime || new Date()).getTime(); + + // 3. 显示名称:用于稳定排序 const displayName = ( session.conRemark || session.nickname || "" ).toLowerCase(); - // 格式:置顶标识|时间戳(补齐15位)|显示名称 - // 降序排序:置顶(1)在前,时间大的在前(即最新的在前),名称小的在前 - const timeStr = String(timestamp).padStart(16, "0"); - return `${isTop}|${timeStr}|${displayName}`; + // 格式:置顶标识|时间戳|显示名称 + // 降序排序:置顶(1)在前,时间大的在前,名称小的在前 + return `${isTop}|${timestamp}|${displayName}`; } /**