feat: 增加友链申请、独立页面、投票/悬赏/抽奖帖与侧栏签到,并统一开发数据目录

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-27 06:23:54 +08:00
parent df19752a1e
commit 2208af7070
80 changed files with 9620 additions and 641 deletions

View File

@@ -1,3 +1,5 @@
import type { Board } from '../api/types';
/** 板块图标背景色 */
const BOARD_COLORS = ['#2d8a55', '#3498db', '#9b59b6', '#e67e22', '#1abc9c', '#e74c3c', '#34495e'];
@@ -8,3 +10,30 @@ export function boardColor(id: number) {
export function boardInitial(name: string) {
return (name?.trim()?.[0] || '?').toUpperCase();
}
/** 是否为公告类板块(名称含「公告」或 megaphone 图标) */
function isAnnouncementBoard(board: Board): boolean {
if (board.name.includes('公告')) return true;
return (board.icon || '').trim() === 'megaphone';
}
/** 是否为闲聊类板块(名称含「闲聊」) */
function isCasualBoard(board: Board): boolean {
return board.name.includes('闲聊');
}
/**
* 发帖页板块排序:闲聊置顶、公告置底,其余保持 API 原序。
* 仅用于发帖选择器,不影响侧栏/导航排序。
*/
export function sortBoardsForCompose(boards: Board[]): Board[] {
const casual: Board[] = [];
const middle: Board[] = [];
const announcement: Board[] = [];
for (const b of boards) {
if (isCasualBoard(b)) casual.push(b);
else if (isAnnouncementBoard(b)) announcement.push(b);
else middle.push(b);
}
return [...casual, ...middle, ...announcement];
}