feat(admin): rebuild page display settings
This commit is contained in:
@@ -1,491 +0,0 @@
|
||||
/**
|
||||
* AKSRT CMS Home Module Schema
|
||||
*
|
||||
* 定义每类模块的:
|
||||
* - 元数据(label / icon / desc)
|
||||
* - 默认 config
|
||||
* - 表单字段(用于配置抽屉自动生成 UI)
|
||||
*
|
||||
* 字段类型 type:
|
||||
* - text n-input
|
||||
* - number n-input-number
|
||||
* - select n-select (options)
|
||||
* - radio n-radio-group (options)
|
||||
* - switch n-switch
|
||||
* - cats n-select (multiple, 动态加载分类)
|
||||
* - cat n-select (single, 动态加载分类)
|
||||
* - textarea n-input type=textarea
|
||||
*/
|
||||
|
||||
export const MODULE_TYPES = [
|
||||
'banner',
|
||||
'category',
|
||||
'tabs',
|
||||
'ranking',
|
||||
'recent',
|
||||
'tag_cloud',
|
||||
'friend_links',
|
||||
'html',
|
||||
'hotspot',
|
||||
'category_recommend_cards',
|
||||
'text_title',
|
||||
'button_group',
|
||||
'spacing',
|
||||
'faq',
|
||||
'data_grid',
|
||||
'highlight_cards',
|
||||
'partner_marquee',
|
||||
'product_showcase',
|
||||
'user',
|
||||
'more',
|
||||
]
|
||||
|
||||
export const MODULE_LIBRARY = [
|
||||
{
|
||||
type: 'banner',
|
||||
label: 'Banner 轮播',
|
||||
icon: 'rectangle',
|
||||
desc: '固定首页骨架:正文区轮播条。幻灯片内容在「页面&显示 → Banner 轮播」维护。',
|
||||
defaultConfig: {},
|
||||
fields: [],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: '分类块',
|
||||
icon: 'folder',
|
||||
desc: '指定分类的最新内容网格',
|
||||
defaultConfig: { cat_id: 0, count: 8, layout: 'card', columns: 4, title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题(留空用分类名)' },
|
||||
{ key: 'cat_id', type: 'cat', label: '分类' },
|
||||
{ key: 'count', type: 'number', label: '数量', min: 1, max: 20 },
|
||||
{ key: 'columns', type: 'number', label: '列数', min: 1, max: 6 },
|
||||
{
|
||||
key: 'layout', type: 'select', label: '布局',
|
||||
options: [
|
||||
{ label: '卡片', value: 'card' },
|
||||
{ label: '列表', value: 'list' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'tabs',
|
||||
label: '分类 Tabs',
|
||||
icon: 'switcher',
|
||||
desc: '多分类 Tab 切换',
|
||||
defaultConfig: { cat_ids: [], count: 8, layout: 'card', title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'cat_ids', type: 'cats', label: '分类列表' },
|
||||
{ key: 'count', type: 'number', label: '每个 Tab 数量', min: 1, max: 20 },
|
||||
{
|
||||
key: 'layout', type: 'select', label: '布局',
|
||||
options: [
|
||||
{ label: '卡片', value: 'card' },
|
||||
{ label: '列表', value: 'list' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'ranking',
|
||||
label: '排行榜',
|
||||
icon: 'trophy',
|
||||
desc: '按下载量 / 阅读量 / 评论数排序(普通文章)',
|
||||
defaultConfig: { metric: 'downloads', count: 6, title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{
|
||||
key: 'metric', type: 'radio', label: '排序依据',
|
||||
options: [
|
||||
{ label: '下载量', value: 'downloads' },
|
||||
{ label: '阅读量', value: 'views' },
|
||||
{ label: '评论数', value: 'comments' },
|
||||
],
|
||||
},
|
||||
{ key: 'count', type: 'number', label: '数量', min: 1, max: 20 },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'recent',
|
||||
label: '最新文章',
|
||||
icon: 'clock',
|
||||
desc: '按时间倒序的最新文章',
|
||||
defaultConfig: { count: 6, layout: 'card', title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'count', type: 'number', label: '数量', min: 1, max: 20 },
|
||||
{
|
||||
key: 'layout', type: 'select', label: '布局',
|
||||
options: [
|
||||
{ label: '卡片', value: 'card' },
|
||||
{ label: '列表', value: 'list' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'tag_cloud',
|
||||
label: '标签云',
|
||||
icon: 'tag',
|
||||
desc: '按使用频率展示热门标签',
|
||||
defaultConfig: { limit: 30, title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'limit', type: 'number', label: '数量', min: 5, max: 100 },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'friend_links',
|
||||
label: '友情链接',
|
||||
icon: 'link',
|
||||
desc: '展示已配置的友链',
|
||||
defaultConfig: { category: '', title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'category', type: 'text', label: '分类筛选(可空)' },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'html',
|
||||
label: '自定义 HTML',
|
||||
icon: 'code',
|
||||
desc: '自由插入 HTML 片段(受 wp_kses_post 清洗)',
|
||||
defaultConfig: { html: '', title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题(可空)' },
|
||||
{ key: 'html', type: 'textarea', label: 'HTML 内容', rows: 6 },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'hotspot',
|
||||
label: '热点推荐',
|
||||
icon: 'fire',
|
||||
desc: '文章推荐列表(纯文本,仅桌面端显示)',
|
||||
defaultConfig: { count: 6, source: 'auto', title: '' },
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'count', type: 'number', label: '数量', min: 3, max: 20 },
|
||||
{
|
||||
key: 'source', type: 'select', label: '数据来源',
|
||||
options: [
|
||||
{ label: '自动推荐(推荐文章优先)', value: 'auto' },
|
||||
{ label: '最新文章', value: 'recent' },
|
||||
{ label: '最热文章(按阅读量)', value: 'views' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'category_recommend_cards',
|
||||
label: '分类推荐卡片',
|
||||
icon: 'grid',
|
||||
desc: '4 张分类卡片 2×2 布局,含封面图、浏览量胶囊和文章列表',
|
||||
defaultConfig: {
|
||||
title: '分类推荐',
|
||||
cat_ids: [],
|
||||
show_views: true,
|
||||
show_dates: true,
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'cat_ids', type: 'cats', label: '分类(按选择顺序对应卡片 1-4)' },
|
||||
{ key: 'show_views', type: 'switch', label: '显示浏览量胶囊' },
|
||||
{ key: 'show_dates', type: 'switch', label: '显示发布时间' },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'text_title',
|
||||
label: '标题文案',
|
||||
icon: 'font-colors',
|
||||
desc: '带标题、副标题和可选按钮的文案区块',
|
||||
defaultConfig: {
|
||||
title: '',
|
||||
desc: '',
|
||||
align: 'left',
|
||||
style: 'default',
|
||||
button_text: '',
|
||||
button_url: '',
|
||||
button_style: 'primary',
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'desc', type: 'textarea', label: '副标题/描述', rows: 2 },
|
||||
{ key: 'align', type: 'radio', label: '对齐', options: [
|
||||
{ label: '左对齐', value: 'left' },
|
||||
{ label: '居中', value: 'center' },
|
||||
{ label: '右对齐', value: 'right' },
|
||||
]},
|
||||
{ key: 'style', type: 'select', label: '样式', options: [
|
||||
{ label: '默认', value: 'default' },
|
||||
{ label: '带左边框', value: 'bordered' },
|
||||
{ label: '带背景', value: 'bg' },
|
||||
]},
|
||||
{ key: 'button_text', type: 'text', label: '按钮文字(可空)' },
|
||||
{ key: 'button_url', type: 'text', label: '按钮链接' },
|
||||
{ key: 'button_style', type: 'select', label: '按钮样式', options: [
|
||||
{ label: '主色', value: 'primary' },
|
||||
{ label: '轮廓', value: 'outline' },
|
||||
{ label: '文字', value: 'text' },
|
||||
]},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'button_group',
|
||||
label: '按钮组',
|
||||
icon: 'th-large',
|
||||
desc: '多按钮横向排列,适合快捷入口',
|
||||
defaultConfig: {
|
||||
title: '',
|
||||
buttons: [],
|
||||
columns: 4,
|
||||
style: 'card',
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题(可空)' },
|
||||
{ key: 'columns', type: 'number', label: '每行列数', min: 2, max: 6 },
|
||||
{ key: 'style', type: 'select', label: '按钮样式', options: [
|
||||
{ label: '卡片', value: 'card' },
|
||||
{ label: '图标', value: 'icon' },
|
||||
{ label: '文字', value: 'text' },
|
||||
]},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'spacing',
|
||||
label: '间距分隔',
|
||||
icon: 'swap',
|
||||
desc: '模块间间距或分隔线',
|
||||
defaultConfig: {
|
||||
height: 40,
|
||||
divider: false,
|
||||
divider_style: 'solid',
|
||||
},
|
||||
fields: [
|
||||
{ key: 'height', type: 'number', label: '高度 (px)', min: 0, max: 200 },
|
||||
{ key: 'divider', type: 'switch', label: '显示分隔线' },
|
||||
{ key: 'divider_style', type: 'select', label: '分隔线样式', options: [
|
||||
{ label: '实线', value: 'solid' },
|
||||
{ label: '虚线', value: 'dashed' },
|
||||
{ label: '点线', value: 'dotted' },
|
||||
]},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'faq',
|
||||
label: '常见问题',
|
||||
icon: 'question-circle',
|
||||
desc: '折叠式 FAQ 列表',
|
||||
defaultConfig: {
|
||||
title: '常见问题',
|
||||
items: [],
|
||||
style: 'accordion',
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'style', type: 'radio', label: '样式', options: [
|
||||
{ label: '手风琴', value: 'accordion' },
|
||||
{ label: '卡片', value: 'card' },
|
||||
]},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'data_grid',
|
||||
label: '数据网格',
|
||||
icon: 'table',
|
||||
desc: '多列数据卡片展示(统计、特征等)',
|
||||
defaultConfig: {
|
||||
title: '',
|
||||
columns: 4,
|
||||
items: [],
|
||||
style: 'number',
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题(可空)' },
|
||||
{ key: 'columns', type: 'number', label: '列数', min: 2, max: 6 },
|
||||
{ key: 'style', type: 'select', label: '样式', options: [
|
||||
{ label: '数字突出', value: 'number' },
|
||||
{ label: '图标突出', value: 'icon' },
|
||||
{ label: '简洁', value: 'minimal' },
|
||||
]},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'highlight_cards',
|
||||
label: '高亮卡片',
|
||||
icon: 'star',
|
||||
desc: '带配色的特色卡片网格',
|
||||
defaultConfig: {
|
||||
title: '',
|
||||
columns: 3,
|
||||
cards: [],
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题(可空)' },
|
||||
{ key: 'columns', type: 'number', label: '列数', min: 2, max: 4 },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'partner_marquee',
|
||||
label: '合作伙伴',
|
||||
icon: 'handshake',
|
||||
desc: 'Logo 滚动展示(合作伙伴/品牌墙)',
|
||||
defaultConfig: {
|
||||
title: '合作伙伴',
|
||||
logos: [],
|
||||
speed: 30,
|
||||
pause_on_hover: true,
|
||||
columns: 5,
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'speed', type: 'number', label: '滚动速度', min: 10, max: 100 },
|
||||
{ key: 'pause_on_hover', type: 'switch', label: '鼠标悬停暂停' },
|
||||
{ key: 'columns', type: 'number', label: '可见列数', min: 3, max: 8 },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'product_showcase',
|
||||
label: '产品展示',
|
||||
icon: 'shopping-bag',
|
||||
desc: '产品/商品卡片网格(为商城 Phase 预留)',
|
||||
defaultConfig: {
|
||||
title: '产品展示',
|
||||
columns: 3,
|
||||
count: 6,
|
||||
source: 'manual',
|
||||
show_price: true,
|
||||
show_button: true,
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'columns', type: 'number', label: '列数', min: 2, max: 4 },
|
||||
{ key: 'count', type: 'number', label: '数量', min: 1, max: 12 },
|
||||
{ key: 'source', type: 'select', label: '数据来源', options: [
|
||||
{ label: '手动配置', value: 'manual' },
|
||||
{ label: '最新商品', value: 'latest' },
|
||||
{ label: '热门商品', value: 'popular' },
|
||||
]},
|
||||
{ key: 'show_price', type: 'switch', label: '显示价格' },
|
||||
{ key: 'show_button', type: 'switch', label: '显示购买按钮' },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'user',
|
||||
label: '用户卡片',
|
||||
icon: 'user',
|
||||
desc: '推荐用户卡片(头像、简介、关注按钮)',
|
||||
defaultConfig: {
|
||||
title: '推荐用户',
|
||||
user_ids: [],
|
||||
count: 4,
|
||||
columns: 4,
|
||||
order: 'recent',
|
||||
show_stats: true,
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'count', type: 'number', label: '用户数量', min: 1, max: 12 },
|
||||
{ key: 'columns', type: 'number', label: '列数', min: 2, max: 6 },
|
||||
{ key: 'order', type: 'select', label: '排序', options: [
|
||||
{ label: '最近注册', value: 'recent' },
|
||||
{ label: '文章最多', value: 'posts' },
|
||||
{ label: '手动指定', value: 'manual' },
|
||||
]},
|
||||
{ key: 'show_stats', type: 'switch', label: '显示统计数据' },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'more',
|
||||
label: '发现更多',
|
||||
icon: 'th',
|
||||
desc: '分类卡片网格(封面、文章数、最近文章)',
|
||||
defaultConfig: {
|
||||
title: '发现更多',
|
||||
cat_ids: [],
|
||||
count: 6,
|
||||
columns: 3,
|
||||
show_post_count: true,
|
||||
show_latest_posts: true,
|
||||
latest_count: 5,
|
||||
},
|
||||
fields: [
|
||||
{ key: 'title', type: 'text', label: '标题' },
|
||||
{ key: 'count', type: 'number', label: '分类数量', min: 1, max: 12 },
|
||||
{ key: 'columns', type: 'number', label: '列数', min: 2, max: 4 },
|
||||
{ key: 'show_post_count', type: 'switch', label: '显示文章数' },
|
||||
{ key: 'show_latest_posts', type: 'switch', label: '显示最近文章' },
|
||||
{ key: 'latest_count', type: 'number', label: '最近文章数', min: 1, max: 10 },
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export function getModuleMeta(type) {
|
||||
return MODULE_LIBRARY.find(m => m.type === type) || null
|
||||
}
|
||||
|
||||
export function makeDefaultModule(type) {
|
||||
const meta = getModuleMeta(type)
|
||||
if (!meta) return null
|
||||
return {
|
||||
type,
|
||||
config: JSON.parse(JSON.stringify(meta.defaultConfig || {})),
|
||||
}
|
||||
}
|
||||
|
||||
export const PRESET_TEMPLATES = [
|
||||
{
|
||||
key: 'resource_standard',
|
||||
label: '资源站标准',
|
||||
desc: 'Tabs + 最新文章 + 下载排行;头部幻灯由导航系统独立渲染',
|
||||
modules: [
|
||||
{ type: 'tabs', config: { count: 8, layout: 'card' } },
|
||||
{ type: 'recent', config: { count: 8, layout: 'card' } },
|
||||
{ type: 'ranking', config: { metric: 'downloads', count: 6 } },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'news',
|
||||
label: '资讯站',
|
||||
desc: 'Banner(固定骨架)+ 多个分类块 + 标签云',
|
||||
modules: [
|
||||
{ type: 'banner', config: {} },
|
||||
{ type: 'category', config: { count: 8, columns: 4, layout: 'card' } },
|
||||
{ type: 'category', config: { count: 8, columns: 4, layout: 'card' } },
|
||||
{ type: 'tag_cloud', config: { limit: 30 } },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'mixed',
|
||||
label: '混合站',
|
||||
desc: '最新文章 + 多个分类块;头部幻灯由导航系统独立渲染',
|
||||
modules: [
|
||||
{ type: 'recent', config: { count: 6, layout: 'card' } },
|
||||
{ type: 'category', config: { count: 6, columns: 3, layout: 'card' } },
|
||||
{ type: 'category', config: { count: 6, columns: 3, layout: 'card' } },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'landing',
|
||||
label: '落地页',
|
||||
desc: '标题 + 高亮卡片 + FAQ + 按钮组',
|
||||
modules: [
|
||||
{ type: 'text_title', config: { title: '为什么选择我们', align: 'center', style: 'default' } },
|
||||
{ type: 'highlight_cards', config: { columns: 3 } },
|
||||
{ type: 'spacing', config: { height: 40 } },
|
||||
{ type: 'faq', config: { title: '常见问题' } },
|
||||
{ type: 'button_group', config: { columns: 3, style: 'card' } },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'corporate',
|
||||
label: '企业站',
|
||||
desc: '数据网格 + 产品展示 + 合作伙伴',
|
||||
modules: [
|
||||
{ type: 'data_grid', config: { title: '核心数据', columns: 4, style: 'number' } },
|
||||
{ type: 'product_showcase', config: { title: '产品展示', columns: 3 } },
|
||||
{ type: 'partner_marquee', config: { title: '合作伙伴', speed: 30 } },
|
||||
],
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user