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

@@ -14,7 +14,9 @@ import {
} from "@/lib/api";
import { formatDate, formatRelative } from "@/lib/format";
import Avatar from "@/components/Avatar";
import { useUrlStyle } from "@/components/SiteBrandProvider";
import RoleBadge from "@/components/RoleBadge";
import { postPath, userPath } from "@/lib/urlStyle";
import {
AdminEmpty,
AdminPager,
@@ -72,6 +74,7 @@ export default function UserAuditClient({
initialPostsTotal: number;
initError: string;
}) {
const urlStyle = useUrlStyle();
const [profile] = useState(initial);
const [tab, setTab] = useState<TabKey>("posts");
const [loading, setLoading] = useState(false);
@@ -231,7 +234,7 @@ export default function UserAuditClient({
</p>
</div>
<Link
href={`/u/${u.id}`}
href={userPath(urlStyle, u.id)}
className="btn btn-line btn-sm gap-1.5 shrink-0"
target="_blank"
>
@@ -318,7 +321,7 @@ export default function UserAuditClient({
</p>
) : (
<Link
href={`/post/${p.id}`}
href={postPath(urlStyle, p.id)}
className="text-[14px] font-medium hover:underline"
style={{ color: "var(--ink)" }}
>
@@ -353,7 +356,7 @@ export default function UserAuditClient({
<span className="text-[11.5px] meta">帖子 #{c.post_id}</span>
) : (
<Link
href={`/post/${c.post_id}#comment-${c.id}`}
href={`${postPath(urlStyle, c.post_id)}#comment-${c.id}`}
className="text-[11.5px] hover:underline"
style={{ color: "var(--accent)" }}
>