40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import type { Board } from '../api/types';
|
|
|
|
/** 板块图标背景色 */
|
|
const BOARD_COLORS = ['#2d8a55', '#3498db', '#9b59b6', '#e67e22', '#1abc9c', '#e74c3c', '#34495e'];
|
|
|
|
export function boardColor(id: number) {
|
|
return BOARD_COLORS[id % BOARD_COLORS.length];
|
|
}
|
|
|
|
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];
|
|
}
|