feat: 可配置站点 URL 风格
- 新增 urlStyle 工具与测试:postPath/userPath/sitePagePath 统一生成链接 - 管理端新增 UrlStylePanel 设置面板,settings 服务与 handler 适配 - 全站路由链接与 JSON-LD/sitemap 切换为统一 URL 生成 - middleware 与相关组件适配
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import Link from "next/link";
|
||||
import { CheckCircle2, CircleHelp, Coins } from "lucide-react";
|
||||
import type { AcceptedAnswer } from "@/lib/api";
|
||||
import { userPath } from "@/lib/urlStyle";
|
||||
import { getPublicSettingsCached } from "@/lib/serverData";
|
||||
import Avatar from "@/components/Avatar";
|
||||
import MarkdownBody from "@/components/MarkdownBody";
|
||||
|
||||
@@ -24,6 +26,8 @@ export default async function AcceptedAnswerCard({
|
||||
const answerLabel = isQuestion ? "最佳答案" : "采纳答案";
|
||||
const endTime = solvedAt || answer.created_at;
|
||||
const endLabel = formatEndsAt(endTime);
|
||||
const urlStyle = (await getPublicSettingsCached()).url_style;
|
||||
const authorHref = author ? userPath(urlStyle, author.id) : "";
|
||||
|
||||
return (
|
||||
<section
|
||||
@@ -51,12 +55,12 @@ export default async function AcceptedAnswerCard({
|
||||
</span>
|
||||
{author ? (
|
||||
<>
|
||||
<Link href={`/u/${author.id}`} className="shrink-0" aria-label={name}>
|
||||
<Link href={authorHref} className="shrink-0" aria-label={name}>
|
||||
<Avatar name={name} src={author.avatar || undefined} size={32} />
|
||||
</Link>
|
||||
<div className="min-w-0 flex flex-col gap-0.5">
|
||||
<Link
|
||||
href={`/u/${author.id}`}
|
||||
href={authorHref}
|
||||
className="truncate text-[13.5px] font-semibold hover:text-[var(--accent)] transition-colors"
|
||||
style={{ color: "var(--ink)" }}
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user