'use client'
import { useThemeStyles, cn } from '@/lib/ui-styles'
import type { DisplayTemplate } from './types'
interface CustomTemplateSectionProps {
loading: boolean
error: string | null
templates: DisplayTemplate[]
filteredTemplates: DisplayTemplate[]
deletingId: string | null
canManageCustomTemplates: boolean
onRequestUpgrade: () => void
onCreate: () => void
onPreview: (template: DisplayTemplate) => void
onActivate: (id: string) => void
onDeactivate: (id: string) => void
onEdit: (template: DisplayTemplate) => void
onDuplicate: (template: DisplayTemplate) => void
onDelete: (id: string) => void
}
export default function CustomTemplateSection({
loading,
error,
templates,
filteredTemplates,
deletingId,
canManageCustomTemplates,
onRequestUpgrade,
onCreate,
onPreview,
onActivate,
onDeactivate,
onEdit,
onDuplicate,
onDelete,
}: CustomTemplateSectionProps) {
const styles = useThemeStyles()
const runTemplateAction = (action: () => void) => {
if (!canManageCustomTemplates) {
onRequestUpgrade()
return
}
action()
}
return (
自定义模板
{!canManageCustomTemplates && (
授权受限
)}
{canManageCustomTemplates
? '这里列出你自己创建的模板,可继续编辑、复制或删除'
: '当前许可证未包含自定义模板功能,请联系管理员处理授权'}
{loading ? (
加载中...
) : error ? (
{error}
) : (
{templates.length === 0 ? (
暂无自定义模板。
) : filteredTemplates.length === 0 ? (
未找到匹配的模板名称,请调整搜索关键词。
) : (
filteredTemplates.map((tpl) => (
onPreview(tpl)}
className="group relative cursor-pointer rounded-lg border border-slate-200 bg-white px-4 py-3 transition-colors hover:border-slate-300 hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-900 dark:hover:border-slate-600 dark:hover:bg-slate-800/70"
>
{tpl.name}
{tpl.description && (
{tpl.description}
)}
{tpl.statusLabel}
{tpl.updatedLabel} · 版本 {tpl.version}
{tpl.status === 'active' ? (
) : (
)}
))
)}
)}
)
}