优化聊天会话排序逻辑:新增按置顶状态排序功能,优先显示置顶会话,其次按未读消息数量和显示名称排序,提升用户体验。
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user