diff --git a/assets/admin/src/constants/sections/page-display.js b/assets/admin/src/constants/sections/page-display.js index 7a679f75..7c5ec35d 100644 --- a/assets/admin/src/constants/sections/page-display.js +++ b/assets/admin/src/constants/sections/page-display.js @@ -55,14 +55,25 @@ export const pageDisplaySection = { desc: '页脚布局、友链、版权信息配置。', component: 'FooterSettings', }), - customPage({ + schemaPage({ key: 'page-display-homepage', name: 'PageDisplayHomepage', label: '首页配置', route: '/page-display/homepage', title: '首页配置', - desc: '首页模块、布局、推荐位配置。', - component: 'HomepageSettings', + desc: '首页内容模型、主列表、分类 Tab 与首页交互配置。', + canonicalDomain: 'page_display', + section: 'homepage', + }), + schemaPage({ + key: 'page-display-float-btn', + name: 'PageDisplayFloatBtn', + label: '悬浮按钮', + route: '/page-display/float-btn', + title: '悬浮按钮', + desc: '悬浮按钮的显示规则、样式与滚动隐藏设置。', + canonicalDomain: 'page_display', + section: 'float-btn', }), schemaPage({ key: 'page-display-category', diff --git a/assets/admin/src/schema/sections/page-display/index.js b/assets/admin/src/schema/sections/page-display/index.js index 8ff6af73..b74e4f6a 100644 --- a/assets/admin/src/schema/sections/page-display/index.js +++ b/assets/admin/src/schema/sections/page-display/index.js @@ -21,7 +21,7 @@ export const pageDisplaySchemas = { header_nav_style: 'default', header_max_width: 1200, header_scroll_down_hide: false, - header_layout: '2', + header_layout: '1', mobile_header_layout: 'center', mobile_navbar_align: 'left', header_newposts_enabled: true, @@ -731,8 +731,73 @@ export const pageDisplaySchemas = { }, /** - * Footer settings (already has a real Vue page) + * Floating button settings */ + 'float-btn': { + key: 'page_display.float-btn', + title: '悬浮按钮', + icon: 'fas fa-circle-chevron-up', + description: '配置页面悬浮按钮的显示规则、样式和滚动隐藏行为。', + defaults: { + float_btn_style: 'round', + float_btn_position: 'bottom', + float_btn_scroll_hide: false, + float_btn_scroll_down_hide: true, + float_btn_max: 5, + float_btn_size: 44, + float_btn_spacing: 10, + float_btn_shadow: true, + float_btn_animation: true, + float_btn_opacity: 100, + float_btn_active_color: '', + float_btn_bg_color: '', + float_btn_pc_s: true, + float_btn_m_s: true, + float_btn_filter_css: '', + }, + groups: [ + { + key: 'basic', + title: '悬浮按钮设置', + icon: 'fas fa-circle-notch', + fields: [ + { + key: 'float_btn_style', + label: '按钮风格', + type: 'radio', + default: 'round', + options: [ + { label: '圆形', value: 'round' }, + { label: '方形', value: 'square' }, + ], + }, + { + key: 'float_btn_position', + label: '按钮位置', + type: 'radio', + default: 'bottom', + options: [ + { label: '底部', value: 'bottom' }, + { label: '居中', value: 'center' }, + ], + }, + { key: 'float_btn_scroll_hide', label: '滚动时隐藏', type: 'switch', default: false }, + { key: 'float_btn_scroll_down_hide', label: '下滑时隐藏', type: 'switch', default: true }, + { key: 'float_btn_max', label: '最大显示数', type: 'number', default: 5, min: 1, max: 10 }, + { key: 'float_btn_size', label: '按钮尺寸', type: 'number', default: 44, min: 32, max: 64 }, + { key: 'float_btn_spacing', label: '按钮间距', type: 'number', default: 10, min: 4, max: 24 }, + { key: 'float_btn_shadow', label: '显示阴影', type: 'switch', default: true }, + { key: 'float_btn_animation', label: '悬停动画', type: 'switch', default: true }, + { key: 'float_btn_opacity', label: '按钮透明度', type: 'number', default: 100, min: 30, max: 100 }, + { key: 'float_btn_active_color', label: '激活颜色', type: 'color', default: '' }, + { key: 'float_btn_bg_color', label: '背景颜色', type: 'color', default: '' }, + { key: 'float_btn_pc_s', label: 'PC端显示', type: 'switch', default: true }, + { key: 'float_btn_m_s', label: '移动端显示', type: 'switch', default: true }, + { key: 'float_btn_filter_css', label: '过滤 CSS', type: 'textarea', default: '' }, + ], + }, + ], + }, footer: { key: 'page_display.footer', title: '底部页脚', @@ -852,9 +917,113 @@ export const pageDisplaySchemas = { key: 'page_display.homepage', title: '首页配置', icon: 'fas fa-home', - description: '首页模块、布局、推荐位配置。', - defaults: {}, - groups: [], + description: '配置首页内容模型、主列表、分类 Tab、卡片样式与首页交互。实际编辑界面在 HomepageSettings.vue(customPage),此处补齐 page_display 的 schema 契约。', + defaults: { + homepage_content_model: 'mixed', + homepage_tabs: [], + homepage_card_style: 'default', + homepage_multi_thumb_enabled: true, + homepage_multi_thumb_min_images: 3, + homepage_sidebar_mini_enabled: true, + homepage_default_sort: 'modified', + homepage_default_view: 'list', + homepage_sort_ajax_enabled: true, + homepage_sticky_tabs_enabled: true, + home_posts_list_enabled: true, + home_list_title: '最新发布', + home_list_sort_enabled: true, + home_list_sort_options: ['modified', 'date', 'views', 'likes', 'comments'], + home_list_sort_dropdown: false, + home_exclude_post_ids: [], + home_exclude_category_ids: [], + homepage_tab_posts_per_page: 6, + homepage_tab_limit: 4, + }, + groups: [ + { + key: 'content-model', + title: '内容模型', + icon: 'fas fa-stream', + fields: [ + { + key: 'homepage_content_model', + label: '首页内容模型', + type: 'radio', + default: 'mixed', + options: [ + { label: '混合模式', value: 'mixed' }, + { label: '纯文章', value: 'post' }, + ], + help: '混合模式显示文章 + 资源,纯文章模式仅显示标准文章。', + }, + ], + }, + { + key: 'main-stream', + title: '主列表', + icon: 'fas fa-list', + fields: [ + { key: 'home_posts_list_enabled', label: '启用主列表', type: 'switch', default: true }, + { key: 'home_list_title', label: '区块标题', type: 'input', default: '最新发布', dependsOn: { key: 'home_posts_list_enabled', value: true } }, + { key: 'homepage_default_sort', label: '默认排序', type: 'select', default: 'modified', dependsOn: { key: 'home_posts_list_enabled', value: true }, options: sortOptions }, + { key: 'home_list_sort_enabled', label: '启用排序栏', type: 'switch', default: true, dependsOn: { key: 'home_posts_list_enabled', value: true } }, + { key: 'home_list_sort_dropdown', label: '排序栏下拉模式', type: 'switch', default: false, dependsOn: { key: 'home_list_sort_enabled', value: true } }, + { key: 'home_list_sort_options', label: '可用排序选项', type: 'checkbox', default: ['modified', 'date', 'views', 'likes', 'comments'], dependsOn: { key: 'home_list_sort_enabled', value: true }, options: sortOptions }, + ], + }, + { + key: 'exclude', + title: '排除规则', + icon: 'fas fa-filter', + fields: [ + { key: 'home_exclude_post_ids', label: '排除文章 ID', type: 'array', default: [], help: '主列表和 Tab 查询均排除这些文章。' }, + { key: 'home_exclude_category_ids', label: '排除分类 ID', type: 'array', default: [], help: '主列表排除这些分类。' }, + ], + }, + { + key: 'tabs', + title: '首页 Tab', + icon: 'fas fa-tags', + fields: [ + { key: 'homepage_tabs', label: '首页 Tab', type: 'array', default: [], help: '分类 Tab 由 HomepageSettings.vue 中的可视化编辑器维护。' }, + { key: 'homepage_tab_limit', label: 'Tab 数量上限', type: 'number', default: 4, min: 1, max: 12 }, + { key: 'homepage_tab_posts_per_page', label: '每 Tab 文章数', type: 'number', default: 6, min: 1, max: 20 }, + { key: 'homepage_sticky_tabs_enabled', label: 'Tab 吸顶', type: 'switch', default: true }, + ], + }, + { + key: 'cards-sidebar', + title: '卡片与侧栏', + icon: 'fas fa-columns', + fields: [ + { + key: 'homepage_card_style', + label: '卡片风格', + type: 'radio', + default: 'default', + options: [ + { label: '默认', value: 'default' }, + { label: '风格 2', value: 'style2' }, + { label: '风格 3', value: 'style3' }, + ], + }, + { key: 'homepage_multi_thumb_enabled', label: '多图卡片', type: 'switch', default: true }, + { key: 'homepage_multi_thumb_min_images', label: '最少图片数', type: 'number', default: 3, min: 2, max: 4, dependsOn: { key: 'homepage_multi_thumb_enabled', value: true } }, + { + key: 'homepage_default_view', + label: '默认视图', + type: 'radio', + default: 'list', + options: [ + { label: '列表', value: 'list' }, + { label: '卡片', value: 'card' }, + ], + }, + { key: 'homepage_sidebar_mini_enabled', label: '迷你侧栏列表', type: 'switch', default: true }, + { key: 'homepage_sort_ajax_enabled', label: '排序栏 AJAX', type: 'switch', default: true }, + ], + }, + ], }, /** diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php b/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php index 7204a61c..ac1f00e0 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-page-display.php @@ -49,7 +49,7 @@ class AKSRT_Admin_Schema_Page_Display { ['key' => 'header_theme_color_custom', 'label' => '自定义文字颜色', 'type' => 'color', 'default' => ''], ]], ['key' => 'layout-type', 'title' => '布局类型', 'fields' => [ - ['key' => 'header_layout', 'label' => '桌面端布局', 'type' => 'radio', 'default' => '2', 'options' => [ + ['key' => 'header_layout', 'label' => '桌面端布局', 'type' => 'radio', 'default' => '1', 'options' => [ ['label' => '布局 1(经典)', 'value' => '1'], ['label' => '布局 2(内联搜索)', 'value' => '2'], ['label' => '布局 3(紧凑)', 'value' => '3'], @@ -95,16 +95,16 @@ class AKSRT_Admin_Schema_Page_Display { ['key' => 'header_components_nav_color', 'label' => '导航栏文字颜色', 'type' => 'color', 'default' => '#ffffff'], ]], ['key' => 'slider-config', 'title' => '幻灯片配置', 'fields' => [ - ['key' => 'slider_config_direction', 'label' => '滑动方向', 'type' => 'radio', 'default' => 'horizontal', 'options' => [ + ['key' => 'slider_config_direction', 'label' => '滑动方向', 'type' => 'radio', 'default' => 'horizontal', 'dependsOn' => ['key' => 'header_components_show_on', 'not' => []], 'options' => [ ['label' => '水平', 'value' => 'horizontal'], ['label' => '垂直', 'value' => 'vertical'], ]], - ['key' => 'slider_config_speed', 'label' => '切换速度(ms)', 'type' => 'number', 'default' => 300, 'min' => 100, 'max' => 3000], - ['key' => 'slider_config_button', 'label' => '显示前进后退按钮', 'type' => 'switch', 'default' => true], - ['key' => 'slider_config_scale_height', 'label' => '缩放高度', 'type' => 'switch', 'default' => false], - ['key' => 'slider_config_scale', 'label' => '缩放效果', 'type' => 'switch', 'default' => false], - ['key' => 'slider_config_max_height', 'label' => '最大高度', 'type' => 'input', 'default' => ''], - ['key' => 'slider_config_min_height', 'label' => '最小高度', 'type' => 'input', 'default' => ''], + ['key' => 'slider_config_speed', 'label' => '切换速度(ms)', 'type' => 'number', 'default' => 300, 'min' => 100, 'max' => 3000, 'dependsOn' => ['key' => 'header_components_show_on', 'not' => []]], + ['key' => 'slider_config_button', 'label' => '显示前进后退按钮', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'header_components_show_on', 'not' => []]], + ['key' => 'slider_config_scale_height', 'label' => '缩放高度', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'header_components_show_on', 'not' => []]], + ['key' => 'slider_config_scale', 'label' => '缩放效果', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'header_components_show_on', 'not' => []]], + ['key' => 'slider_config_max_height', 'label' => '最大高度', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'header_components_show_on', 'not' => []]], + ['key' => 'slider_config_min_height', 'label' => '最小高度', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'header_components_show_on', 'not' => []]], ]], ['key' => 'search', 'title' => '搜索组件', 'fields' => [ ['key' => 'header_components_search_pc', 'label' => 'PC 端显示搜索', 'type' => 'switch', 'default' => true],