fix(admin): 后台列表切换保留当前内容,去掉加载占位

用户档案、用户列表、内容筛选与公告页等数据到达后再换视图,避免滚动条闪动。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-17 00:57:54 +08:00
parent a0a9aeed66
commit 442af625f6
7 changed files with 213 additions and 100 deletions

View File

@@ -1245,6 +1245,19 @@ export async function fetchAnnouncementDetail(
return res.json();
}
// SSR 后台公告列表(含草稿)
export async function fetchAdminAnnouncements(
cookieHeader?: string
): Promise<{ announcements: Announcement[] }> {
const res = await fetch(
`${API_BASE}/api/admin/announcements`,
ssrInit(cookieHeaders(cookieHeader))
);
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new Error(data.error || "获取公告列表失败");
return data as { announcements: Announcement[] };
}
// 后台:公告列表(含草稿)
export async function apiAdminListAnnouncements(): Promise<{ announcements: Announcement[] }> {
const res = await fetchWithRefresh("/api/admin/announcements", {
@@ -1524,6 +1537,20 @@ export async function fetchAdminUserAudit(
return data as AdminUserAuditProfile;
}
export async function fetchAdminUserAuditPosts(
id: number,
page = 1,
cookieHeader?: string
): Promise<AdminAuditListResponse<AdminAuditPostItem>> {
const res = await fetch(
`${API_BASE}/api/admin/users/${id}/posts?page=${page}`,
ssrInit(cookieHeaders(cookieHeader))
);
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new Error(data.error || "获取帖子失败");
return data as AdminAuditListResponse<AdminAuditPostItem>;
}
export async function apiAdminUserAudit(id: number): Promise<AdminUserAuditProfile> {
const res = await fetchWithRefresh(`/api/admin/users/${id}`, {
headers: clientHeaders(),