- 新增附件模型与上传服务,拆分头像上传/管理逻辑 - 重构用户资料接口,移除直接修改头像字段,改用专用上传接口 - 添加站点公开设置API与管理员外观配置页 - 全局替换hover背景为accent-soft,优化交互一致性 - 完善头像组件,支持图片加载失败回退与src更新重置 - 新增用户状态事件总线,解决同页头像更新不及时问题 - 调整依赖包顺序与CI依赖版本 - 重构板块列表接口,新增帖子计数 - 迁移账号设置到用户主页tab,合并重复代码
44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
import type { Metadata } from "next";
|
|
import Link from "next/link";
|
|
import { cookies } from "next/headers";
|
|
import { ShieldAlert } from "lucide-react";
|
|
import { authCookieHeader } from "@/lib/cookies";
|
|
import { getMeCached, getPublicSettingsCached } from "@/lib/serverData";
|
|
import AppearanceAdmin from "./AppearanceAdmin";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "外观设置",
|
|
robots: { index: false, follow: false },
|
|
};
|
|
|
|
// 站点外观(主题色)管理:权限以 Go 端 RequireAdmin 为唯一判定,
|
|
// 非管理员 SSR 直出无权限提示,写接口仍由后端 403 兜底。
|
|
export default async function AdminAppearancePage() {
|
|
const cookie = authCookieHeader(await cookies());
|
|
const me = await getMeCached(cookie || undefined);
|
|
|
|
if (me.user?.role !== "admin") {
|
|
return (
|
|
<div className="max-w-md mx-auto panel p-8 text-center mt-10">
|
|
<span
|
|
className="inline-flex w-14 h-14 rounded-full items-center justify-center mb-4"
|
|
style={{ background: "var(--gold-soft)", color: "var(--gold)" }}
|
|
>
|
|
<ShieldAlert size={26} />
|
|
</span>
|
|
<h1 className="text-lg font-extrabold" style={{ color: "var(--ink)" }}>
|
|
需要管理员权限
|
|
</h1>
|
|
<p className="meta mt-2 text-[13px]">仅站点管理员可以配置站点外观。</p>
|
|
<Link href="/" className="btn btn-primary mt-6">
|
|
返回首页
|
|
</Link>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
// 主题色为公开设置:当前已保存值随 SSR 直出,避免面板初始闪动
|
|
const { accent } = await getPublicSettingsCached();
|
|
return <AppearanceAdmin initialAccent={accent || ""} />;
|
|
}
|