公开页补齐自引用 Canonical 与按类型的结构化数据,图片补上说明文字。

后台设置和内容编辑改成可导航布局;部署用访客 origin 生成 Canonical,避免落到容器地址。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-20 00:11:24 +08:00
parent 2b3d122e56
commit 40bbad2c82
51 changed files with 3042 additions and 1318 deletions

View File

@@ -183,19 +183,24 @@ function PendingActions({
);
}
/** 策略项:标题与控件同一行,供横向策略条复用 */
/** 策略项:标题、控件与保存按钮成组换行,不拆散单项 */
function PolicyChip({
title,
hint,
control,
instant,
}: {
title: string;
hint?: string;
control: ReactNode;
instant?: boolean;
}) {
return (
<div className="admin-content-policy-chip" data-tip={hint || undefined}>
<span className="admin-content-policy-chip-label">{title}</span>
<span className="admin-content-policy-chip-copy">
<span className="admin-content-policy-chip-label">{title}</span>
{instant ? <span className="admin-content-policy-chip-how">立即生效</span> : null}
</span>
<div className="admin-content-policy-chip-ctrl shrink-0 flex items-center gap-1.5">{control}</div>
</div>
);
@@ -904,16 +909,22 @@ export default function ContentAdmin({
<AdminPageHeader
icon={FolderOpen}
title="内容管理"
description="审核与管理帖子、评论;下方策略为全站共用"
description="审核与管理帖子、评论。共用策略作用于全站发帖与评论,与下方列表筛选无关。"
/>
{canConfigureSettings && (
<div className="admin-content-policy" role="group" aria-label="全站内容策略">
<span className="admin-content-policy-title">共用策略</span>
<div className="admin-content-policy-lead">
<span className="admin-content-policy-title">共用策略</span>
<span className="admin-content-policy-scope">
过审免审与外链开关改完立即写入;冷静期需点保存。失败时恢复为已确认值。
</span>
</div>
<div className="admin-content-policy-row">
<PolicyChip
title="过审免审"
hint="帖子 / 评论:用户曾有过审内容后,后续发帖与评论直接公开,不再进待审。"
instant
hint="帖子 / 评论:用户曾有过审内容后,后续发帖与评论直接公开,不再进待审。修改后立即生效。"
control={
<AdminSwitch
checked={trustOn}
@@ -925,7 +936,7 @@ export default function ContentAdmin({
/>
<PolicyChip
title="新用户冷静期"
hint="帖子:新注册用户在冷静期内不可发帖(0=关闭,上限 168 小时)。评论不受此限制。"
hint="仅限制新注册用户发帖(0=关闭,上限 168 小时)。评论与聊天不受此限制。需点保存后生效。"
control={
<div className="flex items-center gap-1.5">
<AdminStepper
@@ -943,14 +954,15 @@ export default function ContentAdmin({
disabled={savingPolicy}
onClick={() => void saveCooldown()}
>
保存
{savingPolicy ? "保存中…" : "保存"}
</button>
</div>
}
/>
<PolicyChip
title="外链新开"
hint="帖子与评论中的外链在新标签打开"
instant
hint="帖子与评论中的外链在新标签打开。修改后立即生效。"
control={
<AdminSwitch
checked={postLinkNewTab}