Files
jiang13-bbs/frontend/app/admin/media/page.tsx
freefire 1d862a0dd3 feat: 站点媒体库与移动端底部导航,服务测试补强
- 新增媒体库:media_library/media_thumbs 服务(WebP 缩略图)、管理端 media 页面
- 移动端底部导航 MobileTabBar 替换 MobilePostBar
- 旧数据导入增强与测试、路由与登录会话/板块侧边栏测试补强
- site-doc 组件精简(移除 Breadcrumb),文档新增迁移公告说明
2026-09-27 02:36:11 +08:00

50 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Metadata } from "next";
import { Suspense } from "react";
import { cookies } from "next/headers";
import MediaLibrary from "./MediaLibrary";
import { authCookieHeader } from "@/lib/cookies";
import { fetchAdminMediaLibrary, type MediaLibraryItem } from "@/lib/api";
import { getMeCached } from "@/lib/serverData";
import { isSuperOrOwner } from "@/lib/roles";
import Forbidden from "../Forbidden";
import AdminPageHeader from "@/components/admin/AdminPageHeader";
import { Images } from "lucide-react";
export const metadata: Metadata = {
title: "媒体库",
};
export default async function AdminMediaPage() {
const cookie = authCookieHeader(await cookies());
const me = await getMeCached(cookie || undefined);
if (!me.user || !isSuperOrOwner(me.user.role)) {
return <Forbidden text="媒体库仅超级管理员及以上角色可查看。" />;
}
let items: MediaLibraryItem[] = [];
let counts: Record<string, number> = {};
let total = 0;
let initError = "";
try {
const res = await fetchAdminMediaLibrary(cookie || undefined);
items = res.items ?? [];
counts = res.counts ?? {};
total = res.total ?? 0;
} catch (e) {
initError = e instanceof Error ? e.message : "加载失败";
}
return (
<div>
<AdminPageHeader
icon={Images}
title="媒体库"
description={`站点内全部图片资源盘点(共 ${total} 张)。同名图片同时存在原图与 WebP 时仅展示 WebP,点开可查看原图。`}
/>
<Suspense fallback={<p className="meta px-1 py-6">加载中…</p>}>
<MediaLibrary items={items} counts={counts} total={total} initError={initError} />
</Suspense>
</div>
);
}