diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/main.ts b/Touchkebao/src/pages/pc/ckbox/weChat/main.ts index 93bee0a9..917118fb 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/main.ts +++ b/Touchkebao/src/pages/pc/ckbox/weChat/main.ts @@ -70,19 +70,40 @@ export const chatInitAPIdata = async () => { const filterGroupSessions = groupList?.filter( v => v?.config && v.config?.chat, ); + // 获取显示名称的辅助函数(优先 conRemark,其次 nickname) + const getDisplayName = (session: any) => { + return session.conRemark || session.nickname || ""; + }; + //排序功能 const sortedSessions = [...filterUserSessions, ...filterGroupSessions].sort( (a, b) => { - // 获取未读消息数量 + // 获取置顶状态 + const aTop = a.config?.top || false; + const bTop = b.config?.top || false; + + // 首先按置顶状态排序(置顶的排在前面) + if (aTop !== bTop) { + return aTop ? -1 : 1; + } + + // 如果都是置顶或都不是置顶,则按未读消息数量降序排列(未读消息多的排在前面) const aUnread = a.config?.unreadCount || 0; const bUnread = b.config?.unreadCount || 0; - // 首先按未读消息数量降序排列(未读消息多的排在前面) if (aUnread !== bUnread) { return bUnread - aUnread; } - // 如果未读消息数量相同,则按时间降序排列(最新的在前面) + // 如果未读消息数量相同,则按显示名称排序(字母排序) + const aName = getDisplayName(a).toLowerCase(); + const bName = getDisplayName(b).toLowerCase(); + + if (aName !== bName) { + return aName.localeCompare(bName, "zh-CN"); + } + + // 如果名称也相同,则按时间降序排列(最新的在前面) // 如果lastUpdateTime不存在,则将其排在最后 if (!a.lastUpdateTime) return 1; if (!b.lastUpdateTime) return -1;