feat(render): 布局模板画廊 —— live 缩略预览 + 点选完整预览
- LayoutGallery 升级:每模板卡片 = 真实渲染缩略图(scale 0.4),点选看完整预览 - demoPageFrom:由 preview.demoBlocks 构造可渲染 demo 页(预览即真实) - playground 新增 dashboard 布局 + stat-grid widget;app-shell 验证 DefaultLayout 兜底 - 三个模板(admin/dashboard/app-shell)全部 live 渲染验证通过
This commit is contained in:
@@ -70,3 +70,33 @@ export function NavMenu({ items = [] }: { items?: Array<{ label: string; active?
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
/** 统计卡片(仪表盘用) */
|
||||
export function StatCard({
|
||||
label,
|
||||
value,
|
||||
delta,
|
||||
}: {
|
||||
label?: string
|
||||
value?: unknown
|
||||
delta?: string
|
||||
}): React.ReactElement {
|
||||
return React.createElement(
|
||||
'div',
|
||||
{ style: { border: '1px solid #e5e7eb', borderRadius: 8, padding: 16, background: '#fff' } },
|
||||
React.createElement('div', { style: { fontSize: 12, color: '#6b7280' } }, label ?? ''),
|
||||
React.createElement('div', { style: { fontSize: 24, fontWeight: 700, margin: '4px 0' } }, String(value ?? '-')),
|
||||
delta ? React.createElement('div', { style: { fontSize: 12, color: delta.startsWith('-') ? '#dc2626' : '#16a34a' } }, delta) : null,
|
||||
)
|
||||
}
|
||||
|
||||
/** 指标格子容器(dashboard 布局的内容区 demo 用) */
|
||||
export function StatGrid({ stats = [] }: { stats?: Array<{ label?: string; value?: unknown; delta?: string }> }): React.ReactElement {
|
||||
return React.createElement(
|
||||
'div',
|
||||
{ style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(160px, 1fr))', gap: 12 } },
|
||||
...(stats as Array<{ label?: string; value?: unknown; delta?: string }>).map((s, i) =>
|
||||
React.createElement(StatCard, { key: i, label: s.label, value: s.value, delta: s.delta }),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user