diff --git a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx index a45fc601c..ee03f16b5 100644 --- a/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx +++ b/apps/web/src/pages/generate/components/PreviewVideoPanel.tsx @@ -16,6 +16,7 @@ import { LoadingOutlined } from "@ant-design/icons" import type { AssetItem } from "@/api/assets" import type { EditingTemplate } from "@/api/editing-planner" import type { TitleSettings } from "../types" +import { getFontFamily } from "../constants" import FrontendPreviewPlayer from "./FrontendPreviewPlayer" interface PreviewVideoPanelProps { @@ -87,7 +88,7 @@ function buildTitleStyle(settings: TitleSettings, containerHeight: number): Reac : (Math.min(settings.size, 96) / ASS_VIDEO_HEIGHT) * 400 // fallback const base: React.CSSProperties = { - fontFamily: settings.font || "思源黑体", + fontFamily: getFontFamily(settings.font), fontSize: `${fontSizePx}px`, color: settings.color || "#ffffff", fontWeight: settings.bold ? 700 : 400, @@ -176,7 +177,12 @@ const TitleOverlay: React.FC<{ titleSettings: TitleSettings }> = ({ titleSetting position: "absolute", }} > - {displayTitle} + {displayTitle.split("/").map((part, i) => ( + + {i > 0 &&
} + {part} +
+ ))} ) diff --git a/apps/web/src/pages/generate/components/title/TitlePresetsGrid.tsx b/apps/web/src/pages/generate/components/title/TitlePresetsGrid.tsx index 424a9018b..90b8bd720 100644 --- a/apps/web/src/pages/generate/components/title/TitlePresetsGrid.tsx +++ b/apps/web/src/pages/generate/components/title/TitlePresetsGrid.tsx @@ -2,6 +2,7 @@ * 标题预设样式网格 */ import React from "react" +import { getFontFamily } from "../../constants" interface TitlePresetItem { key: string @@ -35,7 +36,7 @@ const TitlePresetsGrid: React.FC = ({ > 标题 diff --git a/apps/web/src/pages/generate/constants.ts b/apps/web/src/pages/generate/constants.ts index 74a7a3bf9..6810c6c49 100644 --- a/apps/web/src/pages/generate/constants.ts +++ b/apps/web/src/pages/generate/constants.ts @@ -56,6 +56,21 @@ export const FONT_OPTIONS = [ "华康俪金黑", ] +/* ── 标题字体 CSS font-family 映射(中文显示名 → 浏览器可识别的字体栈) ── */ +export const FONT_FAMILY_MAP: Record = { + 思源黑体: '"Source Han Sans SC", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif', + 思源宋体: '"Source Han Serif SC", "Noto Serif SC", "Songti SC", "SimSun", serif', + 苹方: '"PingFang SC", -apple-system, "Helvetica Neue", sans-serif', + PingFang: '"PingFang SC", -apple-system, "Helvetica Neue", sans-serif', + 微软雅黑: '"Microsoft YaHei", "PingFang SC", sans-serif', + 楷体: '"KaiTi", "STKaiti", "DFKai-SB", serif', + 华康俪金黑: '"华康俪金黑", "DFLiJinHei-W8", "Source Han Sans SC", "Microsoft YaHei", sans-serif', +} + +export function getFontFamily(font: string): string { + return FONT_FAMILY_MAP[font] || FONT_FAMILY_MAP["思源黑体"] +} + /* ── 标题样式预设 ── */ export const TITLE_PRESETS = [ {