优化消息排序逻辑,调整置顶和时间戳的处理方式,以确保置顶消息优先显示,提升消息列表的可读性和用户体验。
This commit is contained in:
@@ -437,7 +437,7 @@ const MessageList: React.FC<MessageListProps> = () => {
|
||||
const newSessions = [...prev];
|
||||
newSessions[existingIndex] = updatedSession;
|
||||
|
||||
// 按sortKey降序重新排序(最新的在前面)
|
||||
// 按sortKey降序重新排序(置顶在前,最新的在前)
|
||||
return newSessions.sort((a, b) => {
|
||||
const aKey = MessageManager["generateSortKey"](a);
|
||||
const bKey = MessageManager["generateSortKey"](b);
|
||||
|
||||
@@ -52,21 +52,18 @@ export class MessageManager {
|
||||
* @returns 排序键
|
||||
*/
|
||||
private static generateSortKey(session: any): string {
|
||||
const isTop = session.config?.top ? 0 : 1;
|
||||
// 时间戳转换:使用9e15减去时间戳,这样最新的时间sortKey最小
|
||||
// 9e15 是一个足够大的数字,确保结果为正数
|
||||
const isTop = session.config?.top ? 1 : 0;
|
||||
// 时间戳:使用正序时间戳,最新的时间值最大
|
||||
const timestamp = new Date(session.lastUpdateTime || new Date()).getTime();
|
||||
const time = 9e15 - timestamp;
|
||||
const displayName = (
|
||||
session.conRemark ||
|
||||
session.nickname ||
|
||||
""
|
||||
).toLowerCase();
|
||||
|
||||
// 格式:置顶标识|时间反转值(补齐15位)|显示名称
|
||||
// sortKey越小,排序越靠前
|
||||
// 最新的消息time值最小,所以排在最前面
|
||||
const timeStr = String(Math.floor(time)).padStart(16, "0");
|
||||
// 格式:置顶标识|时间戳(补齐15位)|显示名称
|
||||
// 降序排序:置顶(1)在前,时间大的在前(即最新的在前),名称小的在前
|
||||
const timeStr = String(timestamp).padStart(16, "0");
|
||||
return `${isTop}|${timeStr}|${displayName}`;
|
||||
}
|
||||
|
||||
@@ -144,7 +141,7 @@ export class MessageManager {
|
||||
*/
|
||||
static async getUserSessions(userId: number): Promise<ChatSession[]> {
|
||||
try {
|
||||
// 按sortKey降序排序查询(最新的在前面)
|
||||
// 按sortKey降序排序查询(置顶在前,最新的在前)
|
||||
const sessions = await db.chatSessions
|
||||
.where("userId")
|
||||
.equals(userId)
|
||||
|
||||
Reference in New Issue
Block a user