From 26af225fffff6a7dc2ced8d1f31ab532a929f583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Thu, 23 Oct 2025 18:00:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B6=88=E6=81=AF=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E9=80=BB=E8=BE=91=EF=BC=8C=E6=9B=B4=E6=96=B0=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=8E=92=E5=BA=8F=E9=94=AE=E7=9A=84=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=EF=BC=8C=E6=98=8E=E7=A1=AE=E7=BD=AE=E9=A1=B6=E6=A0=87=E8=AF=86?= =?UTF-8?q?=E3=80=81=E6=97=B6=E9=97=B4=E6=88=B3=E5=92=8C=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E7=9A=84=E5=A4=84=E7=90=86=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E5=8D=87=E4=BB=A3=E7=A0=81=E5=8F=AF=E8=AF=BB?= =?UTF-8?q?=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SidebarMenu/MessageList/index.tsx | 17 ++++++++++++----- Touchkebao/src/utils/dbAction/message.ts | 13 ++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) 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}`; } /**