feat: 优化首页帖子列表并新增右侧栏最新注册组件

首页列表精简 meta 与统计展示,板块色标前移并淡化;有回复时显示最后回复人。右侧栏新增最新注册(4 列头像网格),友链改为标签块并排换行。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-27 18:50:09 +08:00
parent 2208af7070
commit 7cc574f9a1
17 changed files with 594 additions and 113 deletions

View File

@@ -1,7 +1,7 @@
import type { AsideWidget, AsideWidgetId, ForumLimits, ForumLimitsPublic } from '../api/types';
import { DEFAULT_ASIDE_WIDGETS } from '../api/types';
const ASIDE_WIDGET_IDS: AsideWidgetId[] = ['tag_cloud', 'recent_comments', 'friend_links'];
const ASIDE_WIDGET_IDS: AsideWidgetId[] = ['tag_cloud', 'recent_comments', 'recent_users', 'friend_links'];
/** 从 limits 解析右侧栏组件列表(兼容仅有布尔开关的旧数据) */
export function resolveAsideWidgets(

View File

@@ -1,8 +1,9 @@
import type { Board, ForumStats, RecentComment, TagCount } from '../api/types';
import type { Board, ForumStats, RecentComment, RecentUser, TagCount } from '../api/types';
const BOARDS_KEY = 'j13-cache-boards';
const STATS_KEY = 'j13-cache-stats';
const RECENT_COMMENTS_KEY = 'j13-cache-recent-comments';
const RECENT_USERS_KEY = 'j13-cache-recent-users';
const TAGS_KEY = 'j13-cache-tags';
function readJson<T>(key: string): T | null {
@@ -38,6 +39,12 @@ export function getCachedRecentComments(): RecentComment[] {
return Array.isArray(list) ? list : [];
}
/** 读取缓存的最新注册用户 */
export function getCachedRecentUsers(): RecentUser[] {
const list = readJson<RecentUser[]>(RECENT_USERS_KEY);
return Array.isArray(list) ? list : [];
}
/** 读取缓存的标签云 */
export function getCachedTags(): TagCount[] {
const list = readJson<TagCount[]>(TAGS_KEY);
@@ -47,7 +54,9 @@ export function getCachedTags(): TagCount[] {
/** 右栏是否已有可展示的 session 缓存(含空列表) */
export function hasCachedAside(): boolean {
try {
return sessionStorage.getItem(RECENT_COMMENTS_KEY) != null;
return sessionStorage.getItem(RECENT_COMMENTS_KEY) != null
|| sessionStorage.getItem(RECENT_USERS_KEY) != null
|| sessionStorage.getItem(TAGS_KEY) != null;
} catch {
return false;
}
@@ -65,6 +74,10 @@ export function setCachedRecentComments(list: RecentComment[]) {
writeJson(RECENT_COMMENTS_KEY, list);
}
export function setCachedRecentUsers(list: RecentUser[]) {
writeJson(RECENT_USERS_KEY, list);
}
export function setCachedTags(tags: TagCount[]) {
writeJson(TAGS_KEY, tags);
}