Add files via upload

This commit is contained in:
公明
2026-06-30 11:55:32 +08:00
committed by GitHub
parent 6d390e80d5
commit bf44cf58d3
+33 -9
View File
@@ -6621,10 +6621,15 @@ function renderConversationsPagination(visibleCount) {
} }
function goConversationsPage(page) { function goConversationsPage(page) {
const next = Math.min(Math.max(1, page), getConversationsTotalPages()); const requestedPage = Math.max(1, parseInt(page, 10) || 1);
const scrollToTop = next !== conversationsPagination.page; const scrollToTop = requestedPage !== conversationsPagination.page;
conversationsPagination.page = next; conversationsPagination.page = requestedPage;
loadConversationsWithGroups(conversationsSearchQuery, { refreshMeta: false, scrollToTop }); // intentPage:用户主动翻页,不在此处用可能已被并发刷新污染的 total 做钳制
loadConversationsWithGroups(conversationsSearchQuery, {
refreshMeta: false,
scrollToTop,
intentPage: requestedPage,
});
} }
function changeConversationsPageSize() { function changeConversationsPageSize() {
@@ -6737,12 +6742,17 @@ async function loadGroups() {
async function loadConversationsWithGroups(searchQuery = '', options = {}) { async function loadConversationsWithGroups(searchQuery = '', options = {}) {
const refreshMeta = options.refreshMeta !== false; const refreshMeta = options.refreshMeta !== false;
const scrollToTop = options.scrollToTop === true; const scrollToTop = options.scrollToTop === true;
const intentPage = Number.isFinite(options.intentPage) ? options.intentPage : null;
const loadSeq = ++conversationsListLoadSeq; const loadSeq = ++conversationsListLoadSeq;
try { try {
conversationsSearchQuery = searchQuery || ''; conversationsSearchQuery = searchQuery || '';
conversationsPagination.pageSize = getConversationsPageSize(); const pageSize = getConversationsPageSize();
const pageSize = conversationsPagination.pageSize; conversationsPagination.pageSize = pageSize;
const offset = (conversationsPagination.page - 1) * pageSize; const activePage = intentPage != null ? intentPage : conversationsPagination.page;
if (intentPage != null) {
conversationsPagination.page = intentPage;
}
const offset = (activePage - 1) * pageSize;
const convParams = new URLSearchParams({ limit: String(pageSize), offset: String(offset) }); const convParams = new URLSearchParams({ limit: String(pageSize), offset: String(offset) });
if (conversationSortBy === 'created_at') { if (conversationSortBy === 'created_at') {
convParams.set('sort_by', 'created_at'); convParams.set('sort_by', 'created_at');
@@ -6789,10 +6799,24 @@ async function loadConversationsWithGroups(searchQuery = '', options = {}) {
const data = await response.json(); const data = await response.json();
if (loadSeq !== conversationsListLoadSeq) return; if (loadSeq !== conversationsListLoadSeq) return;
const parsed = parseConversationsListResponse(data); const parsed = parseConversationsListResponse(data);
conversationsPagination.total = await resolveConversationsListTotal(convParams, parsed, pageSize, offset); const resolvedTotal = await resolveConversationsListTotal(convParams, parsed, pageSize, offset);
if (loadSeq !== conversationsListLoadSeq) return; if (loadSeq !== conversationsListLoadSeq) return;
conversationsPagination.total = resolvedTotal;
if (clampConversationsPageToTotal()) { const totalPages = getConversationsTotalPages();
if (activePage > totalPages) {
conversationsPagination.page = totalPages;
if (loadSeq !== conversationsListLoadSeq) return;
loadConversationsWithGroups(searchQuery, {
...options,
intentPage: null,
scrollToTop: options.scrollToTop === true || activePage !== totalPages,
});
return;
}
conversationsPagination.page = activePage;
if (intentPage == null && clampConversationsPageToTotal()) {
if (loadSeq !== conversationsListLoadSeq) return;
loadConversationsWithGroups(searchQuery, options); loadConversationsWithGroups(searchQuery, options);
return; return;
} }