164 lines
4.5 KiB
JavaScript
Raw Permalink Normal View History

/**
*
* 铸渊封面工作室 · 模板注册表
*
*
* 所有模板在此注册新增模板只需
* 1. templates/ 下创建模板文件
* 2. 在此文件 import + 注册
* 3. 核心代码零改动
*/
import { xiaohongshuCard } from './xiaohongshu.js'
/**
* 模板注册表
*/
export const TEMPLATE_REGISTRY = {
xiaohongshu: {
id: 'xiaohongshu',
name: '小红书封面',
description: '1080×1440 · 3:4 竖版 · 适合小红书笔记封面',
icon: '📕',
sizes: { width: 1080, height: 1440 },
category: '封面',
isDefault: true,
instructions: '输入标题和正文,自动排版生成小红书封面。支持金句、干货列表、教程等多种布局。',
features: ['智能排版', '金句模式', '干货列表', '多页轮播'],
presets: [
{
id: 'tech',
name: '科技蓝',
cssVars: {
'--bg': '#0a0e27',
'--primary': '#e0e6ff',
'--accent': '#4f8cff',
'--highlight': '#00d4ff',
'--gold': '#ffb347',
'--warm': '#1a1f3a',
'--text': '#c8d6e5',
'--textMuted': '#6b7d99',
'--cardBg': '#121838',
'--border': '#1e2a4a',
},
},
{
id: 'warm',
name: '奶油暖调',
cssVars: {
'--bg': '#fef7f0',
'--primary': '#5d4037',
'--accent': '#e07a5f',
'--highlight': '#d4a373',
'--gold': '#c9a96e',
'--warm': '#fae1dd',
'--text': '#3e2723',
'--textMuted': '#8d6e63',
'--cardBg': '#ffffff',
'--border': '#f0e6d3',
},
},
{
id: 'minimal',
name: '极简黑白',
cssVars: {
'--bg': '#ffffff',
'--primary': '#111111',
'--accent': '#333333',
'--highlight': '#ff4757',
'--gold': '#999999',
'--warm': '#f5f5f5',
'--text': '#222222',
'--textMuted': '#888888',
'--cardBg': '#fafafa',
'--border': '#e0e0e0',
},
},
{
id: 'rose',
name: '玫瑰粉调',
cssVars: {
'--bg': '#fdf2f8',
'--primary': '#4a1942',
'--accent': '#9d4e8d',
'--highlight': '#e8435e',
'--gold': '#c9a96e',
'--warm': '#fce4ec',
'--text': '#311b2e',
'--textMuted': '#8e6290',
'--cardBg': '#ffffff',
'--border': '#f0d4e0',
},
},
{
id: 'green',
name: '文艺绿植',
cssVars: {
'--bg': '#f5f9f2',
'--primary': '#1b3a1b',
'--accent': '#5a8f5a',
'--highlight': '#c78b5c',
'--gold': '#b8a06e',
'--warm': '#e8f0e0',
'--text': '#2d3e2f',
'--textMuted': '#6b8b6b',
'--cardBg': '#ffffff',
'--border': '#d4e4cc',
},
},
],
render: xiaohongshuCard,
},
/* ── 后续接入(模板文件待创建时取消注释即可)── */
// poster: { ... },
// jike: { ... },
// dynamic: { ... },
}
/** 获取所有可用模板列表 */
export function listTemplates() {
return Object.values(TEMPLATE_REGISTRY).map(t => ({
id: t.id,
name: t.name,
description: t.description,
icon: t.icon,
sizes: t.sizes,
category: t.category,
features: t.features,
instructions: t.instructions,
presets: t.presets.map(p => ({ id: p.id, name: p.name })),
isDefault: t.isDefault,
}))
}
/** 获取单个模板 */
export function getTemplate(id) {
return TEMPLATE_REGISTRY[id] || null
}
/** 获取默认模板 */
export function getDefaultTemplate() {
return Object.values(TEMPLATE_REGISTRY).find(t => t.isDefault)
|| Object.values(TEMPLATE_REGISTRY)[0]
}
/** 根据模板+预设+内容,准备渲染数据 */
export function prepareRenderData(templateId, presetId, contentData) {
const template = getTemplate(templateId)
if (!template) return null
const preset = template.presets.find(p => p.id === presetId)
|| template.presets[0]
return {
...contentData,
templateId,
presetId: preset?.id || 'default',
cssVars: preset?.cssVars || {},
sizes: template.sizes,
}
}