feat: 可配置站点 URL 风格

- 新增 urlStyle 工具与测试:postPath/userPath/sitePagePath 统一生成链接
- 管理端新增 UrlStylePanel 设置面板,settings 服务与 handler 适配
- 全站路由链接与 JSON-LD/sitemap 切换为统一 URL 生成
- middleware 与相关组件适配
This commit is contained in:
2026-09-27 04:01:42 +08:00
parent 1d862a0dd3
commit 7a44c1f2cf
64 changed files with 1183 additions and 200 deletions

View File

@@ -13,6 +13,7 @@ import {
type FooterLinksAlign,
} from "./brand";
import { DEFAULT_LEVEL_DEFS, LEVEL_COLOR_KEYS, MAX_LEVEL_COUNT, type LevelDef } from "./levels";
import { normalizeUrlStyle, type UrlStyle } from "./urlStyle";
import { CSRF_COOKIE, hasAuthCookieHint } from "./cookies";
import { publishPublicMetaSnapshot } from "./publicMetaSnapshot";
import { emitForceLogout } from "./userEvents";
@@ -1009,6 +1010,8 @@ export interface PublicSettings {
levels: LevelDef[];
/** 等级特效动画总开关(流光动画);缺省开 */
levels_fx: boolean;
/** 详情页伪静态风格;缺省 default(标准 /post/123) */
url_style: UrlStyle;
}
/** 与后端 DefaultAttachmentExts 保持同步 */
@@ -1073,6 +1076,7 @@ const DEFAULT_PUBLIC_SETTINGS: PublicSettings = {
necro_reply_penalty: 0,
levels: [...DEFAULT_LEVEL_DEFS],
levels_fx: true,
url_style: "default",
};
function normalizeAttachmentExts(raw: unknown): string[] {
@@ -1160,6 +1164,7 @@ function normalizePublicSettings(data: Partial<PublicSettings> | null | undefine
bg_admin_mode: typeof data?.bg_admin_mode === "string" ? data.bg_admin_mode : "cover",
...normalizePointsSettings(data),
...normalizeLockSettings(data),
url_style: normalizeUrlStyle(data?.url_style),
levels: normalizeLevels(data?.levels),
levels_fx: data?.levels_fx !== false,
};
@@ -3361,6 +3366,7 @@ export type UpdateSiteSettingsBody = {
footer_links?: FooterLink[];
allow_register?: boolean;
allow_comments?: boolean;
url_style?: UrlStyle;
comments_require_login?: boolean;
allow_messages?: boolean;
post_cooldown_hours?: number;