import { THEME_CSS, escapeHtml, escapeAttr, tabNavHTML } from "../render/layout"; import type { TtsBackend } from "../config"; import type { UserRow } from "../store"; interface Flash { kind: "ok" | "err"; msg: string; } function backendCard(b: TtsBackend, defaultId: string): string { const isDefault = b.id === defaultId; const idAttr = escapeAttr(b.id); const action = `/admin/tts-backends/${encodeURIComponent(b.id)}/update`; const deleteForm = isDefault ? `默认后端不能删除(先在设置里改默认)` : `
`; return `
${escapeHtml(b.id)} ${isDefault ? `默认` : ""}
${deleteForm}
`; } export function buildTtsBackendsPage( viewer: UserRow, backends: TtsBackend[], defaultId: string, flash: Flash | null, ): string { const flashHtml = flash ? `
${escapeHtml(flash.msg)}
` : ""; const listHtml = backends.length ? backends.map((b) => backendCard(b, defaultId)).join("") : `
还没有任何后端,先添加一个。
`; return ` 朗读后端管理 · ework
🔊 朗读后端管理(管理员)
${tabNavHTML("projects", { login: viewer.login, is_admin: viewer.is_admin })}

朗读 (TTS) 后端

每个后端四个字段:id(机器标识,仅 A-Z a-z 0-9 _ -)、label(用户可见名)、url(OpenAI-compatible TTS API)、voice(声纹名)。改完保存立即生效,不入 .env、不重启。

${flashHtml}

添加新后端

现有后端(${backends.length})

${listHtml}
`; }