优化消息排序逻辑,更新生成排序键的注释,明确置顶标识、时间戳和显示名称的处理方式,提升代码可读性。

This commit is contained in:
超级老白兔
2025-10-23 18:00:07 +08:00
parent 1c9f986a97
commit 26af225fff
2 changed files with 20 additions and 10 deletions

View File

@@ -93,9 +93,9 @@ const MessageList: React.FC<MessageListProps> = () => {
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<MessageListProps> = () => {
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({

View File

@@ -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}`;
}
/**