优化聊天会话排序逻辑:新增按置顶状态排序功能,优先显示置顶会话,其次按未读消息数量和显示名称排序,提升用户体验。

This commit is contained in:
超级老白兔
2025-10-15 14:08:53 +08:00
parent 7091adb6a0
commit 0275eea6e7

View File

@@ -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;