/** * Page Display domain schemas. * Each key corresponds to a sub-page under the "页面&显示" section. */ /** Theme asset base for layout previews (admin SPA). */ function themeAsset(path) { const base = (typeof window !== 'undefined' && window.aksrtAdminData && window.aksrtAdminData.themeUri) ? String(window.aksrtAdminData.themeUri).replace(/\/$/, '') : '' return base ? `${base}/${path.replace(/^\//, '')}` : path } /** Homepage sort options — keep in sync with AKSRT_Settings_Home_Cms::homepage_allowed_sorts() */ const sortOptions = [ { label: '最近更新', value: 'modified' }, { label: '发布时间', value: 'date' }, { label: '浏览量', value: 'views' }, { label: '点赞数', value: 'likes' }, { label: '评论数', value: 'comments' }, { label: '收藏数', value: 'favorites' }, { label: '下载量', value: 'downloads' }, { label: '随机', value: 'rand' }, ] export const pageDisplaySchemas = { /** * Header navigation settings */ 'header-nav': { key: 'page_display.header-nav', title: '顶部导航栏', icon: 'fas fa-bars', description: '配置导航栏布局、菜单结构、搜索入口和用户入口。', defaults: { header_fixed: true, header_search_enabled: true, header_user_menu: true, header_mobile_drawer: true, header_nav_style: 'default', header_max_width: 1200, header_scroll_down_hide: true, header_layout: '1', header_nav_pay_vip: true, header_nav_user_pay_vip: true, header_newposts_types: ['post'], header_user_newposts_btn: 'post', header_user_newposts_text: '发布内容', mobile_header_layout: 'center', mobile_navbar_align: 'left', header_newposts_enabled: true, header_newposts_text: ' 发布', header_newposts_radius: true, header_newposts_class: 'jb-blue', header_theme_custom: false, header_theme_bg_custom: '', header_theme_bg: '', header_theme_color_custom: '', }, groups: [ { key: 'layout', title: '导航栏布局', icon: 'fas fa-th-large', fields: [ { key: 'header_fixed', label: '固定导航栏', type: 'switch', default: true, help: '页面滚动时导航栏保持在顶部' }, { key: 'header_nav_style', label: '导航栏风格', type: 'radio', default: 'default', options: [ { label: '默认', value: 'default' }, { label: '透明', value: 'transparent' }, { label: '毛玻璃', value: 'blur' }, ]}, { key: 'header_max_width', label: '导航栏最大宽度', type: 'select', default: 1200, options: [ { label: '跟随内容', value: 0 }, { label: '1080px', value: 1080 }, { label: '1200px', value: 1200 }, { label: '1320px', value: 1320 }, ]}, { key: 'header_scroll_down_hide', label: '下滑隐藏导航', type: 'switch', default: true, help: '下滚动隐藏,上滚动显示(需开启固定导航)' }, ], }, { key: 'layout-type', title: '布局类型', icon: 'fas fa-columns', fields: [ { key: 'header_layout', label: '电脑端布局', type: 'image_select', default: '1', options: [ { label: '布局 1(经典)', value: '1', image: themeAsset('assets/images/header-layout/header_layout_1.png') }, { label: '布局 2(内联搜索)', value: '2', image: themeAsset('assets/images/header-layout/header_layout_2.png') }, { label: '布局 3(紧凑)', value: '3', image: themeAsset('assets/images/header-layout/header_layout_3.png') }, ], help: '不同布局切换导航 DOM 结构(与 zibll image_select 一致)', }, { key: 'mobile_header_layout', label: '移动端布局', type: 'image_select', default: 'center', options: [ { label: '居中(含搜索按钮)', value: 'center', image: themeAsset('assets/images/header-layout/mobile_header_layout_center.png') }, { label: '靠左', value: 'left', image: themeAsset('assets/images/header-layout/mobile_header_layout_left.png') }, ], }, { key: 'mobile_navbar_align', label: '移动端菜单方向', type: 'radio', default: 'left', options: [ { label: '顶部(关闭手势)', value: 'top' }, { label: '左侧滑出', value: 'left' }, { label: '右侧滑出', value: 'right' }, ], }, ], }, { key: 'newposts', title: '发布按钮', icon: 'fas fa-pen', fields: [ { key: 'header_newposts_enabled', label: '启用发布按钮', type: 'switch', default: true, help: '顶部导航显示发布入口(对齐 zibll nav_newposts)' }, { key: 'header_newposts_text', label: '按钮文案', type: 'input', default: ' 发布', dependsOn: { key: 'header_newposts_enabled', value: true } }, { key: 'header_newposts_radius', label: '按钮圆角(胶囊)', type: 'switch', default: true, dependsOn: { key: 'header_newposts_enabled', value: true }, help: '开启后两端大圆角,对齐 zibll nav_newposts_radius' }, { key: 'header_newposts_class', label: '按钮颜色', type: 'select', default: 'jb-blue', options: [ { label: '蓝色', value: 'jb-blue' }, { label: '红色', value: 'jb-red' }, { label: '绿色', value: 'jb-green' }, { label: '黄色', value: 'jb-yellow' }, { label: '紫色', value: 'jb-purple' }, { label: '粉色', value: 'jb-pink' }, ], dependsOn: { key: 'header_newposts_enabled', value: true } }, { key: 'header_newposts_types', label: '发布类型', type: 'select', multiple: true, default: ['post'], options: [ { label: '文章', value: 'post' }, { label: '帖子', value: 'topic' }, { label: '商品', value: 'product' }, ], dependsOn: { key: 'header_newposts_enabled', value: true }, help: '未开启的模块不会显示' }, { key: 'header_user_newposts_btn', label: '用户卡发布类型', type: 'select', default: 'post', options: [ { label: '文章', value: 'post' }, { label: '帖子', value: 'topic' }, { label: '商品', value: 'product' }, ] }, { key: 'header_user_newposts_text', label: '用户卡发布文案', type: 'input', default: '发布内容' }, { key: 'header_nav_pay_vip', label: '导航栏开通会员按钮', type: 'switch', default: true, help: '顶部导航显示开通会员' }, { key: 'header_nav_user_pay_vip', label: '用户框开通会员按钮', type: 'switch', default: true }, ], }, { key: 'color', title: '导航配色', icon: 'fas fa-palette', fields: [ { key: 'header_theme_custom', label: '自定义导航配色', type: 'switch', default: false, help: '启用后覆盖导航栏默认配色' }, { key: 'header_theme_bg_custom', label: '导航背景色', type: 'color', default: '', dependsOn: { key: 'header_theme_custom', value: true } }, { key: 'header_theme_bg', label: '导航背景色(备选)', type: 'color', default: '', dependsOn: { key: 'header_theme_custom', value: true } }, { key: 'header_theme_color_custom', label: '导航文字色', type: 'color', default: '', dependsOn: { key: 'header_theme_custom', value: true } }, ], }, { key: 'components', title: '导航组件', icon: 'fas fa-puzzle-piece', fields: [ { key: 'header_search_enabled', label: '搜索入口', type: 'switch', default: true }, { key: 'header_user_menu', label: '用户菜单', type: 'switch', default: true }, { key: 'header_mobile_drawer', label: '移动端抽屉导航', type: 'switch', default: true }, ], }, ], }, /** * Category page settings */ category: { key: 'page_display.category', title: '分类页面', icon: 'fas fa-folder-open', description: '为分类归档页配置头图、简介、列表模式、筛选条和侧边栏。', defaults: { category_cover_enabled: true, category_desc_enabled: true, category_header_style: 'cover', category_list_mode: 'grid', category_filter_bar: true, category_sidebar: true, category_per_page: 12, category_default_cover: '', category_post_count: true, category_orderby: 'modified', }, groups: [ { key: 'header', title: '分类头图', icon: 'fas fa-image', fields: [ { key: 'category_header_style', label: '头部风格', type: 'radio', default: 'cover', options: [ { label: '封面图', value: 'cover' }, { label: '简洁标题', value: 'simple' }, { label: '隐藏', value: 'none' }, ]}, { key: 'category_cover_enabled', label: '显示封面图', type: 'switch', default: true, dependsOn: { key: 'category_header_style', value: 'cover' } }, { key: 'category_desc_enabled', label: '显示分类简介', type: 'switch', default: true }, { key: 'category_default_cover', label: '默认封面图', type: 'upload', default: '', help: '未设置分类封面时使用的默认图片' }, ], }, { key: 'list', title: '列表设置', icon: 'fas fa-list', fields: [ { key: 'category_list_mode', label: '列表模式', type: 'radio', default: 'grid', options: [ { label: '网格', value: 'grid' }, { label: '列表', value: 'list' }, { label: '紧凑', value: 'compact' }, ]}, { key: 'category_per_page', label: '每页文章数', type: 'number', default: 12, min: 4, max: 48 }, { key: 'category_filter_bar', label: '筛选条', type: 'switch', default: true, help: '子分类筛选和排序' }, { key: 'category_sidebar', label: '侧边栏', type: 'switch', default: true }, { key: 'category_post_count', label: '显示文章数', type: 'switch', default: true, help: '在分类列表中显示每篇文章的浏览次数' }, ], }, { key: 'orderby', title: '排序设置', icon: 'fas fa-sort', fields: [ { key: 'category_orderby', label: '默认排序', type: 'select', default: 'modified', options: [ { label: '最近更新', value: 'modified' }, { label: '发布时间', value: 'date' }, { label: '浏览数', value: 'views' }, { label: '评论数', value: 'comments' }, { label: '点赞数', value: 'likes' }, ]}, ], }, ], }, /** * Tag page settings */ tag: { key: 'page_display.tag', title: '标签页面', icon: 'fas fa-tags', description: '为标签归档页配置展示样式和布局。', defaults: { tag_header_style: 'simple', tag_default_cover: '', tag_list_mode: 'grid', tag_sidebar: true, tag_per_page: 12, tag_post_count: true, tag_orderby: 'count', }, groups: [ { key: 'header', title: '标签头图', icon: 'fas fa-tag', fields: [ { key: 'tag_header_style', label: '头部风格', type: 'radio', default: 'simple', options: [ { label: '简洁标题', value: 'simple' }, { label: '封面图', value: 'cover' }, { label: '隐藏', value: 'none' }, ]}, { key: 'tag_default_cover', label: '默认封面图', type: 'upload', default: '' }, ], }, { key: 'list', title: '列表设置', icon: 'fas fa-list', fields: [ { key: 'tag_list_mode', label: '列表模式', type: 'radio', default: 'grid', options: [ { label: '网格', value: 'grid' }, { label: '列表', value: 'list' }, ]}, { key: 'tag_per_page', label: '每页文章数', type: 'number', default: 12, min: 4, max: 48 }, { key: 'tag_sidebar', label: '侧边栏', type: 'switch', default: true }, { key: 'tag_post_count', label: '显示文章数', type: 'switch', default: true }, ], }, { key: 'orderby', title: '排序设置', icon: 'fas fa-sort', fields: [ { key: 'tag_orderby', label: '默认排序', type: 'select', default: 'count', options: [ { label: '文章数', value: 'count' }, { label: '名称', value: 'name' }, { label: '最近更新', value: 'modified' }, ]}, ], }, ], }, /** * User homepage settings */ 'user-home': { key: 'page_display.user-home', title: '用户主页', icon: 'fas fa-user-circle', description: '公开用户主页对齐 Zibll 作者页:通栏头图 + Tab 计数;交易/快捷入口仅在用户中心。', defaults: { user_home_tabs: 'posts,favorites,comments,follow', user_home_tabs_order: 'posts,favorites,comments,follow', user_home_tabs_pc_hide: '', user_home_tabs_mobile_hide: '', user_home_sidebar: false, user_home_cover: true, user_home_follow: true, user_home_posts_per_page: 10, user_home_avatar: true, user_home_name: true, user_home_desc: true, user_home_stats: false, user_home_social: true, author_main_tab_swiper: false, user_home_message: true, user_home_private: true, user_home_paging_ajax: true, }, groups: [ { key: 'layout', title: '主页布局', icon: 'fas fa-th-large', fields: [ { key: 'user_home_cover', label: '封面区域', type: 'switch', default: true, help: '用户主页顶部封面图' }, { key: 'user_home_sidebar', label: '侧边栏(已弃用)', type: 'switch', default: false, help: '公开主页为通栏布局(对齐 Zibll author);运行时强制关闭。交易服务请去用户中心。' }, { key: 'user_home_follow', label: '关注按钮', type: 'switch', default: true }, { key: 'user_home_posts_per_page', label: '每页文章数', type: 'number', default: 10, min: 5, max: 50 }, { key: 'user_home_paging_ajax', label: 'AJAX 翻页', type: 'switch', default: true, help: '使用 AJAX 加载替代传统翻页' }, ], }, { key: 'tabs', title: 'Tab 配置', icon: 'fas fa-columns', fields: [ { key: 'user_home_tabs', label: '显示的 Tab', type: 'input', default: 'posts,favorites,comments,follow', help: '逗号分隔;默认 posts,favorites,comments,follow(粉丝)。可选 credits,product,plate,forum' }, { key: 'user_home_tabs_order', label: 'Tab 显示顺序', type: 'input', default: 'posts,favorites,comments,follow', help: '逗号分隔,控制栏目顺序' }, { key: 'user_home_tabs_pc_hide', label: 'PC 端隐藏', type: 'input', default: '', help: '逗号分隔要在 PC 端隐藏的栏目' }, { key: 'user_home_tabs_mobile_hide', label: '移动端隐藏', type: 'input', default: '', help: '逗号分隔要在移动端隐藏的栏目' }, { key: 'author_main_tab_swiper', label: '移动端滑动切换', type: 'switch', default: false, help: '移动端左右滑动切换栏目' }, ], }, { key: 'display', title: '展示设置', icon: 'fas fa-eye', fields: [ { key: 'user_home_avatar', label: '显示头像', type: 'switch', default: true }, { key: 'user_home_name', label: '显示用户名', type: 'switch', default: true }, { key: 'user_home_desc', label: '显示个人简介', type: 'switch', default: true }, { key: 'user_home_stats', label: '显示统计数据(已弃用)', type: 'switch', default: false, help: '计数已并入 Tab 角标,头图内不再重复文章/评论/收藏。' }, { key: 'user_home_social', label: '显示社交链接', type: 'switch', default: true }, { key: 'user_home_message', label: '私信/消息按钮', type: 'switch', default: true, help: '本人显示消息中心入口;访客显示私信入口' }, { key: 'user_home_private', label: '留言按钮', type: 'switch', default: true, help: '预留开关,公开主页留言入口' }, ], }, ], }, /** * Other pages settings (404, search results, etc.) */ other: { key: 'page_display.other', title: '其它页面', icon: 'fas fa-file', description: '配置 404 页面、搜索结果页等特殊页面的展示。', defaults: { page_header_style: '1', page_header_cover_img: '', page_404_search: true, page_404_popular: true, page_404_message: '页面未找到', page_404_back: true, page_search_sidebar: true, page_search_per_page: 12, page_author_cover: true, page_author_sidebar: true, page_author_posts_per_page: 12, }, groups: [ { key: 'page-header', title: '统一页头', icon: 'fas fa-heading', fields: [ { key: 'page_header_style', label: '页面标题样式', type: 'select', default: '1', options: [ { label: '不显示', value: '' }, { label: '简单', value: '1' }, { label: '卡片', value: '2' }, { label: '封面', value: '3' }, ], help: '控制归档/搜索/页面的页头样式,单页可通过 post meta 覆盖' }, { key: 'page_header_cover_img', label: '默认封面图', type: 'upload', default: '', help: '封面样式(样式3)的默认背景图,单页可覆盖' }, ], }, { key: 'page_404', title: '404 页面', icon: 'fas fa-exclamation-triangle', fields: [ { key: 'page_404_message', label: '404 提示文字', type: 'input', default: '页面未找到' }, { key: 'page_404_search', label: '显示搜索框', type: 'switch', default: true }, { key: 'page_404_popular', label: '显示热门文章', type: 'switch', default: true }, { key: 'page_404_back', label: '显示返回首页', type: 'switch', default: true }, ], }, { key: 'search_results', title: '搜索结果页', icon: 'fas fa-search', fields: [ { key: 'page_search_sidebar', label: '搜索结果侧边栏', type: 'switch', default: true }, { key: 'page_search_per_page', label: '每页结果数', type: 'number', default: 12, min: 4, max: 48 }, ], }, { key: 'author', title: '作者页面', icon: 'fas fa-user-edit', fields: [ { key: 'page_author_cover', label: '显示封面', type: 'switch', default: true }, { key: 'page_author_sidebar', label: '显示侧边栏', type: 'switch', default: true }, { key: 'page_author_posts_per_page', label: '每页文章数', type: 'number', default: 12, min: 4, max: 48 }, ], }, ], }, /** * Global background settings */ background: { key: 'page_display.background', title: '全局背景', icon: 'fas fa-image', description: '配置站点全局背景图、背景色、暗色模式背景和遮罩。', defaults: { bg_color: '', bg_image: '', bg_size: '100%', bg_position: 'center center', bg_repeat: 'no-repeat', bg_attachment: 'fixed', bg_dark_color: '', bg_dark_image: '', bg_overlay: false, bg_overlay_color: 'rgba(0, 0, 0, 0.3)', page_bg_color: '', page_bg_image: '', }, groups: [ { key: 'light', title: '亮色背景', icon: 'fas fa-sun', fields: [ { key: 'bg_color', label: '背景颜色', type: 'color', default: '', help: '留空则使用主题默认背景色' }, { key: 'bg_image', label: '背景图片', type: 'media', help: '推荐使用高分辨率图片' }, { key: 'bg_size', label: '图片尺寸', type: 'select', default: 'cover', options: [ { label: '覆盖 (Cover)', value: 'cover' }, { label: '包含 (Contain)', value: 'contain' }, { label: '原始大小', value: 'auto' }, { label: '拉伸填充', value: '100% 100%' }, { label: '100% 宽度(旧版兼容)', value: '100%' }, ]}, { key: 'bg_position', label: '图片位置', type: 'select', default: 'center center', options: [ { label: '居中', value: 'center center' }, { label: '顶部居中', value: 'top center' }, { label: '底部居中', value: 'bottom center' }, ]}, { key: 'bg_repeat', label: '图片重复', type: 'select', default: 'no-repeat', options: [ { label: '不重复', value: 'no-repeat' }, { label: '平铺', value: 'repeat' }, { label: '水平平铺', value: 'repeat-x' }, { label: '垂直平铺', value: 'repeat-y' }, ]}, { key: 'bg_attachment', label: '固定方式', type: 'select', default: 'fixed', options: [ { label: '固定 (视差)', value: 'fixed' }, { label: '随内容滚动', value: 'scroll' }, ]}, ], }, { key: 'dark', title: '暗色背景', icon: 'fas fa-moon', fields: [ { key: 'bg_dark_color', label: '暗色背景颜色', type: 'color', default: '', help: '留空则使用主题默认暗色背景' }, { key: 'bg_dark_image', label: '暗色背景图片', type: 'media', help: '暗色模式下显示的背景图' }, ], }, { key: 'overlay', title: '遮罩设置', icon: 'fas fa-layer-group', fields: [ { key: 'bg_overlay', label: '启用背景遮罩', type: 'switch', default: false, help: '在背景图上方叠加半透明遮罩,提升文字可读性' }, { key: 'bg_overlay_color', label: '遮罩颜色', type: 'input', default: 'rgba(0, 0, 0, 0.3)', dependsOn: { key: 'bg_overlay', value: true }, help: '支持 rgba/hex 色值' }, ], }, { key: 'page', title: '页面背景', icon: 'fas fa-file', fields: [ { key: 'page_bg_color', label: '内容区背景色', type: 'color', default: '', help: '主内容区域的背景色' }, { key: 'page_bg_image', label: '内容区背景图', type: 'media' }, ], }, ], }, /** * Menu decoration settings */ 'menu-decoration': { key: 'page_display.menu-decoration', title: '菜单装饰', icon: 'fas fa-bars', description: '配置导航菜单的图标、徽章、下拉样式和图文卡片子菜单。', defaults: { menu_icon_enabled: true, menu_badge_enabled: true, menu_submenu_style: 'dropdown', menu_submenu_columns: 1, menu_submenu_width: 220, menu_mobile_style: 'drawer', menu_item_padding: 12, menu_hover_effect: 'underline', }, groups: [ { key: 'icon', title: '菜单图标', icon: 'fas fa-icons', fields: [ { key: 'menu_icon_enabled', label: '显示菜单图标', type: 'switch', default: true, help: '在菜单项文字前显示图标(需在菜单管理中设置 CSS 类)' }, { key: 'menu_badge_enabled', label: '显示菜单徽章', type: 'switch', default: true, help: '在菜单项上显示 "新"、"热" 等徽章标记' }, ], }, { key: 'submenu', title: '下拉子菜单', icon: 'fas fa-caret-square-down', fields: [ { key: 'menu_submenu_style', label: '子菜单样式', type: 'radio', default: 'dropdown', options: [ { label: '普通下拉', value: 'dropdown' }, { label: '多列下拉', value: 'mega' }, { label: '图文卡片', value: 'cards' }, ], }, { key: 'menu_submenu_columns', label: '多列列数', type: 'number', default: 1, min: 1, max: 5, dependsOn: { key: 'menu_submenu_style', value: 'mega' } }, { key: 'menu_submenu_width', label: '子菜单宽度 (px)', type: 'number', default: 220, min: 160, max: 800, dependsOn: { key: 'menu_submenu_style', value: 'mega' } }, ], }, { key: 'effect', title: '交互效果', icon: 'fas fa-magic', fields: [ { key: 'menu_hover_effect', label: 'Hover 效果', type: 'radio', default: 'underline', options: [ { label: '下划线', value: 'underline' }, { label: '背景色', value: 'background' }, { label: '文字变色', value: 'color' }, { label: '无效果', value: 'none' }, ], }, { key: 'menu_item_padding', label: '菜单项内边距 (px)', type: 'number', default: 12, min: 4, max: 32 }, ], }, { key: 'mobile', title: '移动端菜单', icon: 'fas fa-mobile-alt', fields: [ { key: 'menu_mobile_style', label: '移动端菜单样式', type: 'radio', default: 'drawer', options: [ { label: '抽屉', value: 'drawer' }, { label: '全屏', value: 'fullscreen' }, { label: '下拉', value: 'dropdown' }, ], }, ], }, ], }, /** * Header components */ 'header-components': { key: 'page_display.header-components', title: '顶部多功能组件', icon: 'fas fa-th', description: '配置顶部组件的显示范围、设备规则、轮播参数、搜索覆盖层与图标卡片。幻灯片图片/文案内容请到「Hero 轮播」「Banner 轮播」管理。', defaults: { header_components_search_enabled: true, header_components_cards_enabled: false, header_components_nav_color: '#ffffff', header_components_show_on: ['home'], header_components_device_visibility: '', header_components_filter_blur_devices: [], header_components_card_show_devices: ['pc', 'mobile'], header_components_card_shared_bg: false, header_components_card_blur: true, header_components_card_icon_shape: 'circle', header_components_icon_cards: [], header_components_search_pc: true, header_components_search_mobile: true, header_components_search_show_keywords: false, header_components_search_popular_limit: 5, header_components_search_show_input_cat: false, header_components_search_show_type: false, header_components_search_before_html: '