feat: 管理端板块管理与旧版数据导入,补充部署运营文档

- 新增管理端板块管理页面与后端接口(admin_board)
- 新增旧版数据导入:legacyimport 服务、导入面板、importusers 命令行工具
- 聊天用户卡片、板块图标等 UI 组件与界面优化
- 补充 about/公告/1Panel 部署等文档
- gitignore 排除 dist/ 构建产物与 .agents/ 本地工具目录
This commit is contained in:
2026-09-24 03:37:44 +08:00
parent c1f6a6636b
commit 3e55b5d230
53 changed files with 5078 additions and 409 deletions

View File

@@ -16,6 +16,7 @@ type Props = {
boardName: string;
boardId: number;
boardColorIndex?: number;
boardIcon?: string;
};
export default function EditPostClient({
@@ -31,6 +32,7 @@ export default function EditPostClient({
boardName,
boardId,
boardColorIndex = 0,
boardIcon,
}: Props) {
return (
<PostComposer
@@ -47,6 +49,7 @@ export default function EditPostClient({
boardName={boardName}
boardId={boardId}
boardColorIndex={boardColorIndex}
boardIcon={boardIcon}
cancelHref={`/post/${postId}`}
/>
);

View File

@@ -47,6 +47,7 @@ export default async function EditPostPage({ params }: PageProps) {
boardName={post.board?.name || "未知板块"}
boardId={post.board_id}
boardColorIndex={post.board?.color_index ?? 0}
boardIcon={post.board?.icon}
/>
</div>
);

View File

@@ -24,6 +24,7 @@ import {
type Board,
type CommentsResponse,
} from "@/lib/api";
import BoardIcon, { boardColor } from "@/components/BoardIcon";
import { postViewerCookieHeader } from "@/lib/cookies";
import { getMeCached, getPublicSettingsCached } from "@/lib/serverData";
import CommentSection from "@/components/CommentSection";
@@ -109,7 +110,7 @@ function formatDateTime(dateStr: string) {
============================================================ */
function BoardCard({ board }: { board: Board }) {
const colorIdx = Math.max(0, board.color_index ?? 0) % 8;
const colorIdx = boardColor(board);
return (
<section className="j13-module shrink-0" aria-labelledby="board-card-title">
<p className="j13-module-title mb-3" id="board-card-title">
@@ -117,9 +118,9 @@ function BoardCard({ board }: { board: Board }) {
</p>
<Link href={`/?board=${board.id}`} className="flex items-center gap-3 group">
<span
className={`av-${colorIdx} w-11 h-11 rounded-xl flex items-center justify-center text-lg font-extrabold shrink-0`}
className={`av-${colorIdx} w-11 h-11 rounded-xl flex items-center justify-center shrink-0`}
>
{board.name.slice(0, 1)}
<BoardIcon icon={board.icon} name={board.name} size={20} />
</span>
<span
className="font-semibold text-[14.5px] truncate group-hover:text-[var(--accent)] transition-colors"