From a230e6a34bc06ab1f4bf612eee3092d30e28bd8c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Jul 2026 19:41:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?Schema=20=E6=94=B6=E5=8F=A3=E7=AC=AC?= =?UTF-8?q?=E4=BA=8C=E8=BD=AE=EF=BC=9A=E8=A1=A5=E9=BD=90=20PHP=20=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=A5=91=E7=BA=A6=E5=B9=B6=E7=BB=A7=E7=BB=AD=E6=94=B6?= =?UTF-8?q?=E6=95=9B=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 继续 Workstream C 全量字段比对,重点处理“前端 schema 已有 dependsOn、PHP schema 缺失” 的五层不一致问题,并顺手清理残留平台化文案。 本次完成: - global PHP schema:补齐 AI SEO / loading 动画 / 代码高亮相关 dependsOn,避免在总开关关闭时 子字段仍作为平铺配置暴露。 - permissions PHP schema:补齐 login captcha 基础开关的 dependsOn;将“审核和风控”改为“内容审核”, 将“基本权限 / 能力矩阵”改为“基本权限”;同步更新前端 schema 文案。 - users PHP schema:为 sms / report / wechat 三个典型兼容/治理域补齐 master-switch -> sub-config 的 dependsOn(严格贴合 stream-c §7.3),避免这些低优先级能力打断主线配置节奏。 - docs-mode PHP schema:补齐 docs_mode_enabled 下的子字段折叠逻辑,确保兼容域“默认不展开”。 - forum schema:将用户治理文案收紧为用户管理,并把 other section 调整到 forum 聚合末尾。 - payment revenue 前端 schema:去掉“台账”措辞,回到更轻的主题配置文案。 验证: - php -l 通过:global / permissions / users / extensions-docs-mode / forum / forum-basic - node --check 通过:permissions/index.js / payment/revenue.js - 与上一轮已完成的默认值对齐一起,当前 worktree 中 C 线改动已覆盖: default 收敛、level/badge 后移、以及一批高影响 dependsOn/文案修正 Co-Authored-By: Claude Fable 5 --- .../src/schema/sections/payment/revenue.js | 2 +- .../src/schema/sections/permissions/index.js | 8 +- ...ksrt-admin-schema-extensions-docs-mode.php | 22 ++-- .../class-aksrt-admin-schema-forum-basic.php | 2 +- .../schema/class-aksrt-admin-schema-forum.php | 4 +- .../class-aksrt-admin-schema-global.php | 18 +-- .../class-aksrt-admin-schema-permissions.php | 38 +++---- .../schema/class-aksrt-admin-schema-users.php | 106 +++++++++--------- 8 files changed, 100 insertions(+), 100 deletions(-) diff --git a/assets/admin/src/schema/sections/payment/revenue.js b/assets/admin/src/schema/sections/payment/revenue.js index 125b777c..50c969aa 100644 --- a/assets/admin/src/schema/sections/payment/revenue.js +++ b/assets/admin/src/schema/sections/payment/revenue.js @@ -11,7 +11,7 @@ export const revenueSchema = { payment_revenue_settlement_threshold: 100, payment_revenue_cycle_days: 30, payment_revenue_points_rule: '', - payment_revenue_note: '分成策略和台账结构已就绪,订单入账后自动按比例结算。', + payment_revenue_note: '分成规则已就绪,订单入账后自动按比例结算。', payment_revenue_desc_details: '', payment_revenue_desc_page: '', }, diff --git a/assets/admin/src/schema/sections/permissions/index.js b/assets/admin/src/schema/sections/permissions/index.js index d7732a91..97b726f9 100644 --- a/assets/admin/src/schema/sections/permissions/index.js +++ b/assets/admin/src/schema/sections/permissions/index.js @@ -102,9 +102,9 @@ export const permissionsSchemas = { */ capabilities: { key: 'permissions.capabilities', - title: '基本权限 / 能力矩阵', + title: '基本权限', icon: 'fas fa-user-shield', - description: '统一管理用户治理、投稿和评论的角色能力矩阵。', + description: '统一管理用户、投稿和评论的角色权限。', defaults: {}, groups: [], }, @@ -114,9 +114,9 @@ export const permissionsSchemas = { */ moderation: { key: 'permissions.moderation', - title: '审核和风控', + title: '内容审核', icon: 'fas fa-gavel', - description: '管理评论审核、反垃圾、限流与风控配置。', + description: '管理评论审核、反垃圾、限流与拦截配置。', defaults: { enabled: false, akismet_enabled: false, diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-extensions-docs-mode.php b/inc/classes/admin/schema/class-aksrt-admin-schema-extensions-docs-mode.php index 964b3a2f..1e609f4a 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-extensions-docs-mode.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-extensions-docs-mode.php @@ -18,34 +18,34 @@ class AKSRT_Admin_Schema_Extensions_Docs_Mode { 'groups' => [ ['key' => 'basic', 'title' => '基础配置', 'fields' => [ ['key' => 'docs_mode_enabled', 'label' => '启用文档模式', 'type' => 'switch', 'default' => false], - ['key' => 'docs_mode_default_template', 'label' => '文档首页模板', 'type' => 'select', 'default' => 'documentnav', 'options' => [ + ['key' => 'docs_mode_default_template', 'label' => '文档首页模板', 'type' => 'select', 'default' => 'documentnav', 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true], 'options' => [ ['label' => '文档导航页', 'value' => 'documentnav'], ['label' => '专题聚合页', 'value' => 'special'], ]], ]], ['key' => 'navigation', 'title' => '导航设置', 'fields' => [ - ['key' => 'docs_mode_toc_enabled', 'label' => '显示目录树', 'type' => 'switch', 'default' => true], - ['key' => 'docs_mode_chapter_nav_enabled', 'label' => '显示章节导航', 'type' => 'switch', 'default' => true], - ['key' => 'docs_mode_default_order', 'label' => '默认排序', 'type' => 'radio', 'default' => 'menu_order', 'options' => [ + ['key' => 'docs_mode_toc_enabled', 'label' => '显示目录树', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], + ['key' => 'docs_mode_chapter_nav_enabled', 'label' => '显示章节导航', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], + ['key' => 'docs_mode_default_order', 'label' => '默认排序', 'type' => 'radio', 'default' => 'menu_order', 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true], 'options' => [ ['label' => '按菜单顺序', 'value' => 'menu_order'], ['label' => '按发布时间', 'value' => 'date'], ['label' => '按标题排序', 'value' => 'title'], ]], - ['key' => 'docs_mode_toc_depth', 'label' => '目录深度', 'type' => 'number', 'default' => 3, 'min' => 1, 'max' => 6], - ['key' => 'docs_mode_chapter_title', 'label' => '章节标题', 'type' => 'input', 'default' => ''], + ['key' => 'docs_mode_toc_depth', 'label' => '目录深度', 'type' => 'number', 'default' => 3, 'min' => 1, 'max' => 6, 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], + ['key' => 'docs_mode_chapter_title', 'label' => '章节标题', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], ]], ['key' => 'filter', 'title' => '筛选设置', 'fields' => [ - ['key' => 'docs_mode_cats', 'label' => '文档分类', 'type' => 'taxonomy_select', 'taxonomy' => 'category', 'multiple' => true, 'default' => []], - ['key' => 'docs_mode_exclude', 'label' => '在首页排除此类内容', 'type' => 'switch', 'default' => true], + ['key' => 'docs_mode_cats', 'label' => '文档分类', 'type' => 'taxonomy_select', 'taxonomy' => 'category', 'multiple' => true, 'default' => [], 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], + ['key' => 'docs_mode_exclude', 'label' => '在首页排除此类内容', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], ]], ['key' => 'style', 'title' => '样式设置', 'fields' => [ - ['key' => 'docs_mode_style', 'label' => '文档样式', 'type' => 'select', 'default' => 'default', 'options' => [ + ['key' => 'docs_mode_style', 'label' => '文档样式', 'type' => 'select', 'default' => 'default', 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true], 'options' => [ ['label' => '默认', 'value' => 'default'], ['label' => '简洁', 'value' => 'simple'], ['label' => '卡片', 'value' => 'card'], ]], - ['key' => 'docs_mode_icon', 'label' => '显示图标', 'type' => 'switch', 'default' => true], - ['key' => 'docs_mode_count', 'label' => '显示文章数', 'type' => 'switch', 'default' => true], + ['key' => 'docs_mode_icon', 'label' => '显示图标', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], + ['key' => 'docs_mode_count', 'label' => '显示文章数', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'docs_mode_enabled', 'value' => true]], ]], ], ]; diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-forum-basic.php b/inc/classes/admin/schema/class-aksrt-admin-schema-forum-basic.php index 93ac628c..44845fa8 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-forum-basic.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-forum-basic.php @@ -20,7 +20,7 @@ class AKSRT_Admin_Schema_Forum_Basic { ['key' => 'bbs_s', 'label' => '启用论坛', 'type' => 'switch', 'default' => true, 'help' => '关闭后论坛页面将返回 404'], ]], ['key' => 'admin', 'title' => '论坛管理', 'fields' => [ - ['key' => 'bbs_admin_users', 'label' => '论坛管理员', 'type' => 'user_select', 'multiple' => true, 'default' => [], 'help' => '拥有跨版块全部治理权限,绕过 ban'], + ['key' => 'bbs_admin_users', 'label' => '论坛管理员', 'type' => 'user_select', 'multiple' => true, 'default' => [], 'help' => '拥有跨版块全部管理权限,绕过 ban'], ]], ], ]; diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-forum.php b/inc/classes/admin/schema/class-aksrt-admin-schema-forum.php index b441bf61..166c5e7e 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-forum.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-forum.php @@ -21,9 +21,9 @@ class AKSRT_Admin_Schema_Forum { 'post_page' => AKSRT_Admin_Schema_Forum_Post_Page::build(), 'reply' => AKSRT_Admin_Schema_Forum_Reply::build(), 'permissions' => AKSRT_Admin_Schema_Forum_Permissions::build(), - 'other' => AKSRT_Admin_Schema_Forum_Other::build(), 'upload' => AKSRT_Admin_Schema_Forum_Upload::build(), 'credits' => AKSRT_Admin_Schema_Forum_Credits::build(), + 'other' => AKSRT_Admin_Schema_Forum_Other::build(), ], ]; } @@ -59,7 +59,7 @@ class AKSRT_Admin_Schema_Forum { // Group caps by prefix $buckets = [ - 'user' => ['title' => __('用户治理', 'aksrt'), 'caps' => []], + 'user' => ['title' => __('用户管理', 'aksrt'), 'caps' => []], 'post' => ['title' => __('投稿权限', 'aksrt'), 'caps' => []], 'comment' => ['title' => __('评论权限', 'aksrt'), 'caps' => []], ]; diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-global.php b/inc/classes/admin/schema/class-aksrt-admin-schema-global.php index 48051e5a..f0503de9 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-global.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-global.php @@ -72,9 +72,9 @@ class AKSRT_Admin_Schema_Global { ['key' => 'seo_description', 'label' => 'SEO描述(description)', 'type' => 'textarea', 'default' => ''], ]], ['key' => 'ai-seo', 'title' => 'AI SEO', 'fields' => [ - ['key' => 'ai_seo_title_prompt', 'label' => '标题提示词', 'type' => 'textarea', 'default' => ''], - ['key' => 'ai_seo_keywords_prompt', 'label' => '关键词提示词', 'type' => 'textarea', 'default' => ''], - ['key' => 'ai_seo_description_prompt', 'label' => '描述提示词', 'type' => 'textarea', 'default' => ''], + ['key' => 'ai_seo_title_prompt', 'label' => '标题提示词', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'seo_ai_enabled', 'value' => true]], + ['key' => 'ai_seo_keywords_prompt', 'label' => '关键词提示词', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'seo_ai_enabled', 'value' => true]], + ['key' => 'ai_seo_description_prompt', 'label' => '描述提示词', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'seo_ai_enabled', 'value' => true]], ]], ['key' => 'baidu', 'title' => '百度SEO', 'fields' => [ ['key' => 'seo_baidu_push', 'label' => '百度链接自动提交', 'type' => 'switch', 'default' => false], @@ -190,7 +190,7 @@ class AKSRT_Admin_Schema_Global { ]], ['key' => 'performance', 'title' => '性能优化', 'fields' => [ ['key' => 'qj_loading', 'label' => '全站加载动画', 'type' => 'switch', 'default' => false], - ['key' => 'qj_dh_xs', 'label' => '加载动画样式', 'type' => 'select', 'default' => 'no1', 'options' => [ + ['key' => 'qj_dh_xs', 'label' => '加载动画样式', 'type' => 'select', 'default' => 'no1', 'dependsOn' => ['key' => 'qj_loading', 'value' => true], 'options' => [ ['label' => '样式 1', 'value' => 'no1'], ['label' => '样式 2', 'value' => 'no2'], ['label' => '样式 3', 'value' => 'no3'], @@ -220,12 +220,12 @@ class AKSRT_Admin_Schema_Global { 'groups' => [ ['key' => 'basic', 'title' => '代码高亮设置', 'fields' => [ ['key' => 'highlight_kg', 'label' => '代码高亮开关', 'type' => 'switch', 'default' => true], - ['key' => 'highlight_hh', 'label' => '显示行号', 'type' => 'switch', 'default' => false], - ['key' => 'highlight_btn', 'label' => '显示扩展按钮', 'type' => 'switch', 'default' => true], - ['key' => 'highlight_maxheight', 'label' => '最大高度(px,0=不限)', 'type' => 'number', 'default' => 400, 'min' => 0, 'max' => 2000], + ['key' => 'highlight_hh', 'label' => '显示行号', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'highlight_kg', 'value' => true]], + ['key' => 'highlight_btn', 'label' => '显示扩展按钮', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'highlight_kg', 'value' => true]], + ['key' => 'highlight_maxheight', 'label' => '最大高度(px,0=不限)', 'type' => 'number', 'default' => 400, 'min' => 0, 'max' => 2000, 'dependsOn' => ['key' => 'highlight_kg', 'value' => true]], ]], ['key' => 'theme', 'title' => '主题设置', 'fields' => [ - ['key' => 'highlight_zt', 'label' => '日间默认主题', 'type' => 'select', 'default' => 'enlighter', 'options' => [ + ['key' => 'highlight_zt', 'label' => '日间默认主题', 'type' => 'select', 'default' => 'enlighter', 'dependsOn' => ['key' => 'highlight_kg', 'value' => true], 'options' => [ ['label' => '浅色: Enlighter', 'value' => 'enlighter'], ['label' => '浅色: Bootstrap', 'value' => 'bootstrap4'], ['label' => '浅色: Classic', 'value' => 'classic'], @@ -240,7 +240,7 @@ class AKSRT_Admin_Schema_Global { ['label' => '深色: Atomic', 'value' => 'atomic'], ['label' => '深色: Monokai', 'value' => 'monokai'], ]], - ['key' => 'highlight_dark_zt', 'label' => '暗色默认主题', 'type' => 'select', 'default' => 'monokai', 'options' => [ + ['key' => 'highlight_dark_zt', 'label' => '暗色默认主题', 'type' => 'select', 'default' => 'monokai', 'dependsOn' => ['key' => 'highlight_kg', 'value' => true], 'options' => [ ['label' => '深色: Dracula', 'value' => 'dracula'], ['label' => '深色: Atomic', 'value' => 'atomic'], ['label' => '深色: Monokai', 'value' => 'monokai'], diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-permissions.php b/inc/classes/admin/schema/class-aksrt-admin-schema-permissions.php index 05942fb8..f429a38e 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-permissions.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-permissions.php @@ -22,16 +22,16 @@ class AKSRT_Admin_Schema_Permissions { 'groups' => [ ['key' => 'basic', 'title' => '基础开关', 'fields' => [ ['key' => 'enabled', 'label' => '启用人机验证', 'type' => 'switch', 'default' => false], - ['key' => 'active_provider', 'label' => '当前服务商', 'type' => 'radio', 'default' => '', 'options' => [ + ['key' => 'active_provider', 'label' => '当前服务商', 'type' => 'radio', 'default' => '', 'dependsOn' => ['key' => 'enabled', 'value' => true], 'options' => [ ['label' => '腾讯云 Captcha', 'value' => 'tencent'], ['label' => '阿里云 CAPTCHA 2.0', 'value' => 'aliyun'], ['label' => 'Cloudflare Turnstile', 'value' => 'cloudflare'], ['label' => '极验 GeeTest', 'value' => 'geetest'], ]], - ['key' => 'mode', 'label' => '触发模式', 'type' => 'radio', 'default' => 'always', 'options' => [ + ['key' => 'mode', 'label' => '触发模式', 'type' => 'radio', 'default' => 'always', 'dependsOn' => ['key' => 'enabled', 'value' => true], 'options' => [ ['label' => '始终显示', 'value' => 'always'], ]], - ['key' => 'disabled_scenarios', 'label' => '停用场景', 'type' => 'checkbox', 'default' => [], 'options' => [ + ['key' => 'disabled_scenarios', 'label' => '停用场景', 'type' => 'checkbox', 'default' => [], 'dependsOn' => ['key' => 'enabled', 'value' => true], 'options' => [ ['label' => '发表评论', 'value' => 'comment'], ['label' => '用户登录', 'value' => 'login'], ['label' => '用户注册', 'value' => 'register'], @@ -143,7 +143,7 @@ class AKSRT_Admin_Schema_Permissions { ], 'moderation' => [ 'key' => 'moderation', - 'title' => '审核和风控', + 'title' => '内容审核', 'version' => '1.0.0', 'option_key' => 'aksrt_moderation_config', 'groups' => [ @@ -152,38 +152,38 @@ class AKSRT_Admin_Schema_Permissions { ]], ['key' => 'akismet', 'title' => 'Akismet', 'fields' => [ ['key' => 'akismet_enabled', 'label' => '启用 Akismet', 'type' => 'switch', 'default' => false, 'dependsOn' => 'enabled'], - ['key' => 'akismet_site_url', 'label' => 'Site URL', 'type' => 'input', 'default' => '', 'dependsOn' => { 'key' => 'akismet_enabled', 'value' => true }], - ['key' => 'akismet_blog_lang', 'label' => '博客语言', 'type' => 'input', 'default' => 'zh-CN', 'dependsOn' => { 'key' => 'akismet_enabled', 'value' => true }], - ['key' => 'akismet_api_key', 'label' => 'API Key', 'type' => 'input', 'inputType' => 'password', 'default' => '', 'dependsOn' => { 'key' => 'akismet_enabled', 'value' => true }], + ['key' => 'akismet_site_url', 'label' => 'Site URL', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'akismet_enabled', 'value' => true]], + ['key' => 'akismet_blog_lang', 'label' => '博客语言', 'type' => 'input', 'default' => 'zh-CN', 'dependsOn' => ['key' => 'akismet_enabled', 'value' => true]], + ['key' => 'akismet_api_key', 'label' => 'API Key', 'type' => 'input', 'inputType' => 'password', 'default' => '', 'dependsOn' => ['key' => 'akismet_enabled', 'value' => true]], ]], ['key' => 'ai', 'title' => 'AI 审核', 'fields' => [ ['key' => 'ai_enabled', 'label' => '启用 AI 审核', 'type' => 'switch', 'default' => false, 'dependsOn' => 'enabled'], - ['key' => 'ai_api_hint', 'label' => '审核 API 配置', 'type' => 'notice', 'alertType' => 'info', 'alertContent' => 'API 接入(百度/阿里云等)在「扩展 → API内容审核」中统一配置,此处仅控制审核范围和策略。', 'dependsOn' => { 'key' => 'ai_enabled', 'value' => true }], - ['key' => 'ai_moderate_comments', 'label' => '用户评论', 'type' => 'switch', 'default' => true, 'dependsOn' => { 'key' => 'ai_enabled', 'value' => true }], - ['key' => 'ai_moderate_background', 'label' => '用户资料背景', 'type' => 'switch', 'default' => true, 'dependsOn' => { 'key' => 'ai_enabled', 'value' => true }], - ['key' => 'auto_approve_low_risk', 'label' => '低风险自动通过', 'type' => 'switch', 'default' => false, 'dependsOn' => { 'key' => 'ai_enabled', 'value' => true }], - ['key' => 'auto_reject_high_risk', 'label' => '高风险自动拒绝', 'type' => 'switch', 'default' => false, 'dependsOn' => { 'key' => 'ai_enabled', 'value' => true }], - ['key' => 'low_risk_max_score', 'label' => '低风险上限', 'type' => 'number', 'default' => 35, 'min' => 0, 'max' => 100, 'dependsOn' => { 'key' => 'ai_enabled', 'value' => true }], - ['key' => 'high_risk_min_score', 'label' => '高风险下限', 'type' => 'number', 'default' => 80, 'min' => 0, 'max' => 100, 'dependsOn' => { 'key' => 'ai_enabled', 'value' => true }], + ['key' => 'ai_api_hint', 'label' => '审核 API 配置', 'type' => 'notice', 'alertType' => 'info', 'alertContent' => 'API 接入(百度/阿里云等)在「扩展 → API内容审核」中统一配置,此处仅控制审核范围和策略。', 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], + ['key' => 'ai_moderate_comments', 'label' => '用户评论', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], + ['key' => 'ai_moderate_background', 'label' => '用户资料背景', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], + ['key' => 'auto_approve_low_risk', 'label' => '低风险自动通过', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], + ['key' => 'auto_reject_high_risk', 'label' => '高风险自动拒绝', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], + ['key' => 'low_risk_max_score', 'label' => '低风险上限', 'type' => 'number', 'default' => 35, 'min' => 0, 'max' => 100, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], + ['key' => 'high_risk_min_score', 'label' => '高风险下限', 'type' => 'number', 'default' => 80, 'min' => 0, 'max' => 100, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ]], ['key' => 'keywords', 'title' => '关键词拦截', 'fields' => [ ['key' => 'blocked_keywords', 'label' => '屏蔽关键词列表', 'type' => 'textarea', 'default' => '', 'rows' => 4, 'dependsOn' => 'enabled'], ]], ['key' => 'rate-limit', 'title' => '频率限制', 'fields' => [ ['key' => 'rate_limit_enabled', 'label' => '启用频率限制', 'type' => 'switch', 'default' => false, 'dependsOn' => 'enabled'], - ['key' => 'rate_limit_min_interval', 'label' => '最小间隔(秒)', 'type' => 'number', 'default' => 8, 'min' => 1, 'max' => 300, 'dependsOn' => { 'key' => 'rate_limit_enabled', 'value' => true }], - ['key' => 'rate_limit_max_per_hour', 'label' => '每小时上限', 'type' => 'number', 'default' => 15, 'min' => 1, 'max' => 200, 'dependsOn' => { 'key' => 'rate_limit_enabled', 'value' => true }], + ['key' => 'rate_limit_min_interval', 'label' => '最小间隔(秒)', 'type' => 'number', 'default' => 8, 'min' => 1, 'max' => 300, 'dependsOn' => ['key' => 'rate_limit_enabled', 'value' => true]], + ['key' => 'rate_limit_max_per_hour', 'label' => '每小时上限', 'type' => 'number', 'default' => 15, 'min' => 1, 'max' => 200, 'dependsOn' => ['key' => 'rate_limit_enabled', 'value' => true]], ]], ['key' => 'geoip', 'title' => 'GeoIP 拦截', 'fields' => [ ['key' => 'geoip_enabled', 'label' => '启用 GeoIP 拦截', 'type' => 'switch', 'default' => false, 'dependsOn' => 'enabled'], - ['key' => 'geoip_hint', 'label' => 'IP 数据源', 'type' => 'notice', 'alertType' => 'info', 'alertContent' => '复用「扩展 → IP归属地」中配置的数据源和 API Key。', 'dependsOn' => { 'key' => 'geoip_enabled', 'value' => true }], - ['key' => 'geoip_block_countries', 'label' => '屏蔽国家/地区', 'type' => 'custom', 'default' => [], 'sanitize_type' => 'array', 'dependsOn' => { 'key' => 'geoip_enabled', 'value' => true }], + ['key' => 'geoip_hint', 'label' => 'IP 数据源', 'type' => 'notice', 'alertType' => 'info', 'alertContent' => '复用「扩展 → IP归属地」中配置的数据源和 API Key。', 'dependsOn' => ['key' => 'geoip_enabled', 'value' => true]], + ['key' => 'geoip_block_countries', 'label' => '屏蔽国家/地区', 'type' => 'custom', 'default' => [], 'sanitize_type' => 'array', 'dependsOn' => ['key' => 'geoip_enabled', 'value' => true]], ]], ], ], 'capabilities' => [ 'key' => 'capabilities', - 'title' => '基本权限 / 能力矩阵', + 'title' => '基本权限', 'version' => '1.0.0', 'option_key' => 'aksrt_settings', 'groups' => self::build_cap_matrix_groups(), diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-users.php b/inc/classes/admin/schema/class-aksrt-admin-schema-users.php index 636328ea..d9dc12de 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-users.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-users.php @@ -318,66 +318,66 @@ class AKSRT_Admin_Schema_Users { 'groups' => [ ['key' => 'provider', 'title' => '供应商配置', 'fields' => [ ['key' => 'sms_enabled', 'label' => '启用短信', 'type' => 'switch', 'default' => false], - ['key' => 'sms_provider', 'label' => '短信服务商', 'type' => 'select', 'default' => 'aliyun', 'options' => [ + ['key' => 'sms_provider', 'label' => '短信服务商', 'type' => 'select', 'default' => 'aliyun', 'dependsOn' => ['key' => 'sms_enabled', 'value' => true], 'options' => [ ['label' => '阿里云短信', 'value' => 'aliyun'], ['label' => '腾讯云短信', 'value' => 'tencent'], ['label' => '华为云短信', 'value' => 'huawei'], ['label' => '自定义接口', 'value' => 'custom'], ]], - ['key' => 'sms_number_limit_ch', 'label' => '仅发国内', 'type' => 'switch', 'default' => true, 'desc' => '开启后仅支持发送国内短信,关闭后可发送港澳台及国际短信'], - ['key' => 'sms_access_key', 'label' => 'AccessKey / SecretId / AppKey', 'type' => 'input', 'default' => ''], - ['key' => 'sms_access_secret', 'label' => 'AccessSecret / SecretKey / AppSecret', 'type' => 'input', 'default' => ''], + ['key' => 'sms_number_limit_ch', 'label' => '仅发国内', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true], 'desc' => '开启后仅支持发送国内短信,关闭后可发送港澳台及国际短信'], + ['key' => 'sms_access_key', 'label' => 'AccessKey / SecretId / AppKey', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_access_secret', 'label' => 'AccessSecret / SecretKey / AppSecret', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], ]], ['key' => 'aliyun', 'title' => '阿里云配置', 'fields' => [ - ['key' => 'sms_ali_api_type', 'label' => '接口类型', 'type' => 'radio', 'default' => 'sms', 'options' => [ + ['key' => 'sms_ali_api_type', 'label' => '接口类型', 'type' => 'radio', 'default' => 'sms', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'aliyun'], 'options' => [ ['label' => '短信服务', 'value' => 'sms'], ['label' => '号码认证', 'value' => 'verify'], ]], - ['key' => 'sms_region_id', 'label' => 'RegionId', 'type' => 'input', 'default' => 'cn-hangzhou'], + ['key' => 'sms_region_id', 'label' => 'RegionId', 'type' => 'input', 'default' => 'cn-hangzhou', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'aliyun']], ]], ['key' => 'tencent', 'title' => '腾讯云配置', 'fields' => [ - ['key' => 'sms_tencent_app_id', 'label' => 'AppID', 'type' => 'input', 'default' => ''], - ['key' => 'sms_tencent_app_key', 'label' => 'AppKey', 'type' => 'input', 'default' => ''], - ['key' => 'sms_tencent_secret_id', 'label' => 'SecretId', 'type' => 'input', 'default' => ''], - ['key' => 'sms_tencent_secret_key', 'label' => 'SecretKey', 'type' => 'input', 'default' => ''], - ['key' => 'sms_tencent_region', 'label' => '地域', 'type' => 'input', 'default' => 'ap-guangzhou'], + ['key' => 'sms_tencent_app_id', 'label' => 'AppID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'tencent']], + ['key' => 'sms_tencent_app_key', 'label' => 'AppKey', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'tencent']], + ['key' => 'sms_tencent_secret_id', 'label' => 'SecretId', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'tencent']], + ['key' => 'sms_tencent_secret_key', 'label' => 'SecretKey', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'tencent']], + ['key' => 'sms_tencent_region', 'label' => '地域', 'type' => 'input', 'default' => 'ap-guangzhou', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'tencent']], ]], ['key' => 'huawei', 'title' => '华为云配置', 'fields' => [ - ['key' => 'sms_huawei_sender', 'label' => '通道号 (sender)', 'type' => 'input', 'default' => ''], - ['key' => 'sms_huawei_signature', 'label' => '短信签名', 'type' => 'input', 'default' => ''], - ['key' => 'sms_huawei_endpoint', 'label' => 'API Endpoint', 'type' => 'input', 'default' => ''], + ['key' => 'sms_huawei_sender', 'label' => '通道号 (sender)', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'huawei']], + ['key' => 'sms_huawei_signature', 'label' => '短信签名', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'huawei']], + ['key' => 'sms_huawei_endpoint', 'label' => 'API Endpoint', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'huawei']], ]], ['key' => 'custom', 'title' => '自定义接口配置', 'fields' => [ - ['key' => 'sms_custom_url', 'label' => '请求 URL', 'type' => 'input', 'default' => ''], - ['key' => 'sms_custom_method', 'label' => '请求方法', 'type' => 'select', 'default' => 'POST', 'options' => [ + ['key' => 'sms_custom_url', 'label' => '请求 URL', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom']], + ['key' => 'sms_custom_method', 'label' => '请求方法', 'type' => 'select', 'default' => 'POST', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom'], 'options' => [ ['label' => 'POST', 'value' => 'POST'], ['label' => 'GET', 'value' => 'GET'], ['label' => 'PUT', 'value' => 'PUT'], ]], - ['key' => 'sms_custom_auth_type', 'label' => '鉴权方式', 'type' => 'select', 'default' => 'header', 'options' => [ + ['key' => 'sms_custom_auth_type', 'label' => '鉴权方式', 'type' => 'select', 'default' => 'header', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom'], 'options' => [ ['label' => 'Header', 'value' => 'header'], ]], - ['key' => 'sms_custom_auth_key', 'label' => '鉴权 Header 名', 'type' => 'input', 'default' => ''], - ['key' => 'sms_custom_auth_value', 'label' => '鉴权 Header 值', 'type' => 'input', 'default' => ''], - ['key' => 'sms_custom_headers', 'label' => '自定义 Headers', 'type' => 'textarea', 'default' => ''], - ['key' => 'sms_custom_body', 'label' => '请求 Body', 'type' => 'textarea', 'default' => ''], - ['key' => 'sms_custom_success_rule', 'label' => '成功判定规则', 'type' => 'input', 'default' => ''], + ['key' => 'sms_custom_auth_key', 'label' => '鉴权 Header 名', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom']], + ['key' => 'sms_custom_auth_value', 'label' => '鉴权 Header 值', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom']], + ['key' => 'sms_custom_headers', 'label' => '自定义 Headers', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom']], + ['key' => 'sms_custom_body', 'label' => '请求 Body', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom']], + ['key' => 'sms_custom_success_rule', 'label' => '成功判定规则', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_provider', 'value' => 'custom']], ]], ['key' => 'template', 'title' => '短信模板', 'fields' => [ - ['key' => 'sms_sign_name', 'label' => '短信签名', 'type' => 'input', 'default' => ''], - ['key' => 'sms_template_code', 'label' => '验证码模板ID', 'type' => 'input', 'default' => ''], - ['key' => 'sms_code_length', 'label' => '验证码长度', 'type' => 'number', 'default' => 6, 'min' => 4, 'max' => 8], - ['key' => 'sms_code_expire', 'label' => '验证码有效期(秒)', 'type' => 'number', 'default' => 300, 'min' => 60, 'max' => 600], + ['key' => 'sms_sign_name', 'label' => '短信签名', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_template_code', 'label' => '验证码模板ID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_code_length', 'label' => '验证码长度', 'type' => 'number', 'default' => 6, 'min' => 4, 'max' => 8, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_code_expire', 'label' => '验证码有效期(秒)', 'type' => 'number', 'default' => 300, 'min' => 60, 'max' => 600, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], ]], ['key' => 'rate_limit', 'title' => '限流策略', 'fields' => [ - ['key' => 'sms_rate_limit', 'label' => '发送间隔(秒)', 'type' => 'number', 'default' => 60, 'min' => 10, 'max' => 300], - ['key' => 'sms_daily_limit', 'label' => '每日发送上限', 'type' => 'number', 'default' => 10, 'min' => 1, 'max' => 100], + ['key' => 'sms_rate_limit', 'label' => '发送间隔(秒)', 'type' => 'number', 'default' => 60, 'min' => 10, 'max' => 300, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_daily_limit', 'label' => '每日发送上限', 'type' => 'number', 'default' => 10, 'min' => 1, 'max' => 100, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], ]], ['key' => 'triggers', 'title' => '通知场景', 'fields' => [ - ['key' => 'sms_notify_bind', 'label' => '绑定手机验证', 'type' => 'switch', 'default' => true], - ['key' => 'sms_notify_login', 'label' => '短信登录', 'type' => 'switch', 'default' => false], - ['key' => 'sms_notify_register', 'label' => '注册验证', 'type' => 'switch', 'default' => true], - ['key' => 'sms_notify_reset_password', 'label' => '找回密码', 'type' => 'switch', 'default' => true], + ['key' => 'sms_notify_bind', 'label' => '绑定手机验证', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_notify_login', 'label' => '短信登录', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_notify_register', 'label' => '注册验证', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], + ['key' => 'sms_notify_reset_password', 'label' => '找回密码', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'sms_enabled', 'value' => true]], ]], ], ], @@ -643,21 +643,21 @@ class AKSRT_Admin_Schema_Users { 'groups' => [ ['key' => 'entry', 'title' => '前台入口', 'fields' => [ ['key' => 'user_report_enabled', 'label' => '启用举报/禁封结构', 'type' => 'switch', 'default' => false], - ['key' => 'user_report_public_entry', 'label' => '公开主页展示举报入口', 'type' => 'switch', 'default' => true], - ['key' => 'user_report_public_notice', 'label' => '公开显示限制提示', 'type' => 'switch', 'default' => true], - ['key' => 'user_report_ban_notice_text', 'label' => '限制提示文案', 'type' => 'input', 'default' => '当前账号处于限制状态,部分互动能力已关闭。'], + ['key' => 'user_report_public_entry', 'label' => '公开主页展示举报入口', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], + ['key' => 'user_report_public_notice', 'label' => '公开显示限制提示', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], + ['key' => 'user_report_ban_notice_text', 'label' => '限制提示文案', 'type' => 'input', 'default' => '当前账号处于限制状态,部分互动能力已关闭。', 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], ]], ['key' => 'taxonomy', 'title' => '举报分类', 'fields' => [ ['key' => 'user_report_categories', 'label' => '举报分类', 'type' => 'textarea', 'default' => "spam|垃圾信息\nabuse|人身攻击\ncopyright|版权投诉"], ]], ['key' => 'ban', 'title' => '禁封设置', 'fields' => [ - ['key' => 'ban_preset_reason', 'label' => '预设封禁原因', 'type' => 'textarea', 'default' => "spam|垃圾信息\nabuse|人身攻击\nviolation|违规操作"], - ['key' => 'ban_appeal_desc', 'label' => '申诉说明', 'type' => 'textarea', 'default' => ''], - ['key' => 'ban_appeal_keys', 'label' => '申诉关键词', 'type' => 'input', 'default' => ''], + ['key' => 'ban_preset_reason', 'label' => '预设封禁原因', 'type' => 'textarea', 'default' => "spam|垃圾信息\nabuse|人身攻击\nviolation|违规操作", 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], + ['key' => 'ban_appeal_desc', 'label' => '申诉说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], + ['key' => 'ban_appeal_keys', 'label' => '申诉关键词', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], ]], ['key' => 'image', 'title' => '图片举报', 'fields' => [ - ['key' => 'user_report_img_s', 'label' => '启用图片举报', 'type' => 'switch', 'default' => true], - ['key' => 'user_report_desc', 'label' => '举报说明', 'type' => 'textarea', 'default' => ''], + ['key' => 'user_report_img_s', 'label' => '启用图片举报', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], + ['key' => 'user_report_desc', 'label' => '举报说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'user_report_enabled', 'value' => true]], ]], ], ], @@ -669,25 +669,25 @@ class AKSRT_Admin_Schema_Users { 'groups' => [ ['key' => 'account', 'title' => '公众号配置', 'fields' => [ ['key' => 'wechat_notify_enabled', 'label' => '启用微信通知', 'type' => 'switch', 'default' => false], - ['key' => 'wechat_app_id', 'label' => 'AppID', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_app_secret', 'label' => 'AppSecret', 'type' => 'input', 'default' => ''], + ['key' => 'wechat_app_id', 'label' => 'AppID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_app_secret', 'label' => 'AppSecret', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], ]], ['key' => 'verify', 'title' => '服务器验证', 'fields' => [ - ['key' => 'wechat_token', 'label' => 'Token', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_encoding_aes_key', 'label' => 'EncodingAESKey', 'type' => 'input', 'default' => ''], + ['key' => 'wechat_token', 'label' => 'Token', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_encoding_aes_key', 'label' => 'EncodingAESKey', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], ]], ['key' => 'templates', 'title' => '模板消息', 'fields' => [ - ['key' => 'wechat_template_comment', 'label' => '评论通知模板', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_template_reply', 'label' => '回复通知模板', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_template_system', 'label' => '系统通知模板', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_template_order', 'label' => '订单通知模板', 'type' => 'input', 'default' => ''], + ['key' => 'wechat_template_comment', 'label' => '评论通知模板', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_template_reply', 'label' => '回复通知模板', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_template_system', 'label' => '系统通知模板', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_template_order', 'label' => '订单通知模板', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], ]], ['key' => 'triggers', 'title' => '通知触发器', 'fields' => [ - ['key' => 'wechat_notify_comment', 'label' => '新评论通知', 'type' => 'switch', 'default' => true], - ['key' => 'wechat_notify_reply', 'label' => '评论回复通知', 'type' => 'switch', 'default' => true], - ['key' => 'wechat_notify_system', 'label' => '系统通知', 'type' => 'switch', 'default' => true], - ['key' => 'wechat_notify_order', 'label' => '订单通知', 'type' => 'switch', 'default' => true], - ['key' => 'wechat_bind_entry', 'label' => '显示绑定入口', 'type' => 'switch', 'default' => true], + ['key' => 'wechat_notify_comment', 'label' => '新评论通知', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_notify_reply', 'label' => '评论回复通知', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_notify_system', 'label' => '系统通知', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_notify_order', 'label' => '订单通知', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], + ['key' => 'wechat_bind_entry', 'label' => '显示绑定入口', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'wechat_notify_enabled', 'value' => true]], ]], ], ], From ba61a20b34d493c6a8e21ad00bc48e5c86948d8e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Jul 2026 20:07:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?Schema=20=E6=94=B6=E5=8F=A3=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E8=BD=AE=EF=BC=9A=E7=BB=A7=E7=BB=AD=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=20payment/post-list=20=E9=BB=98=E8=AE=A4=E5=80=BC=E4=B8=8E?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 继续 Workstream C,对 payment 与 post-list 做高影响字段收口: - payment.recharge:对齐 Zibll pay_balance_s 默认=true,并在 PHP schema 层补齐 recharge 主开关下的 mode / desc / auto_to_balance / packages / product / transfer / pass-charge / exchange 等 dependsOn,恢复“总开关 -> 子配置”的配置展开节奏。 - payment.vip:对齐 Zibll 续费默认心智,payment_vip_renew_price_type 改为 discount, payment_vip_renew_discount 改为 8,payment_vip_renew_reduce 改为 20;同时补齐 renew / upgrade 在 PHP schema 层的 dependsOn,并补上 reduce 选项。 - post_list.list:将默认卡片样式从 AKSRT 自定义的 standard 收敛到更接近 Zibll 的 thumb, 同时补齐 card 选项,减少列表主线心智偏差。 验证: - php -l 通过:class-aksrt-admin-schema-payment.php / class-aksrt-admin-schema-post-list.php - node --check 通过:payment/recharge.js / payment/vip.js / post-list/list.js Co-Authored-By: Claude Fable 5 --- .../src/schema/sections/payment/recharge.js | 4 +- .../admin/src/schema/sections/payment/vip.js | 12 ++--- .../src/schema/sections/post-list/list.js | 7 +-- .../class-aksrt-admin-schema-payment.php | 49 ++++++++++--------- .../class-aksrt-admin-schema-post-list.php | 5 +- 5 files changed, 40 insertions(+), 37 deletions(-) diff --git a/assets/admin/src/schema/sections/payment/recharge.js b/assets/admin/src/schema/sections/payment/recharge.js index 2ef3c672..a59e65ec 100644 --- a/assets/admin/src/schema/sections/payment/recharge.js +++ b/assets/admin/src/schema/sections/payment/recharge.js @@ -4,7 +4,7 @@ export const rechargeSchema = { icon: 'fas fa-charging-station', description: '配置测试充值、手动确认和充值套餐结构。', defaults: { - payment_recharge_enabled: false, + payment_recharge_enabled: true, payment_recharge_mode: 'manual_review', payment_recharge_desc: '', payment_recharge_auto_to_balance: true, @@ -32,7 +32,7 @@ export const rechargeSchema = { title: '充值开关', icon: 'fas fa-wallet', fields: [ - { key: 'payment_recharge_enabled', label: '启用余额充值结构', type: 'switch', default: false }, + { key: 'payment_recharge_enabled', label: '启用余额充值结构', type: 'switch', default: true }, { key: 'payment_recharge_mode', label: '充值模式', type: 'radio', default: 'manual_review', options: [{ label: '人工确认', value: 'manual_review' }, { label: '测试网关', value: 'test_gateway' }], dependsOn: { key: 'payment_recharge_enabled', value: true } }, { key: 'payment_recharge_desc', label: '充值说明', type: 'textarea', default: '', dependsOn: { key: 'payment_recharge_enabled', value: true } }, { key: 'payment_recharge_auto_to_balance', label: '自动到账到余额', type: 'switch', default: true, dependsOn: { key: 'payment_recharge_enabled', value: true } }, diff --git a/assets/admin/src/schema/sections/payment/vip.js b/assets/admin/src/schema/sections/payment/vip.js index c0091770..e7a97c8d 100644 --- a/assets/admin/src/schema/sections/payment/vip.js +++ b/assets/admin/src/schema/sections/payment/vip.js @@ -17,9 +17,9 @@ export const vipSchema = { payment_vip_pass_charge_desc: '', payment_vip_renew: true, payment_vip_renew_desc: '', - payment_vip_renew_price_type: 'same', - payment_vip_renew_discount: 100, - payment_vip_renew_reduce: 0, + payment_vip_renew_price_type: 'discount', + payment_vip_renew_discount: 8, + payment_vip_renew_reduce: 20, payment_vip_upgrade: true, payment_vip_upgrade_desc: '', payment_vip_upgrade_product: '', @@ -70,9 +70,9 @@ export const vipSchema = { fields: [ { key: 'payment_vip_renew', label: '允许续费', type: 'switch', default: true, dependsOn: { key: 'payment_vip_enabled', value: true } }, { key: 'payment_vip_renew_desc', label: '续费说明', type: 'textarea', default: '', dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_renew_price_type', label: '续费价格类型', type: 'radio', default: 'same', options: [{ label: '相同价格', value: 'same' }, { label: '折扣价格', value: 'discount' }], dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_renew_discount', label: '续费折扣(%)', type: 'number', default: 100, min: 1, max: 100, dependsOn: { key: 'payment_vip_enabled', value: true } }, - { key: 'payment_vip_renew_reduce', label: '续费减免金额', type: 'number', default: 0, min: 0, max: 9999, dependsOn: { key: 'payment_vip_enabled', value: true } }, + { key: 'payment_vip_renew_price_type', label: '续费价格类型', type: 'radio', default: 'discount', options: [{ label: '相同价格', value: 'same' }, { label: '折扣价格', value: 'discount' }, { label: '优惠立减', value: 'reduce' }], dependsOn: { key: 'payment_vip_enabled', value: true } }, + { key: 'payment_vip_renew_discount', label: '续费折扣(%)', type: 'number', default: 8, min: 1, max: 100, dependsOn: { key: 'payment_vip_renew_price_type', value: 'discount' } }, + { key: 'payment_vip_renew_reduce', label: '续费减免金额', type: 'number', default: 20, min: 0, max: 9999, dependsOn: { key: 'payment_vip_renew_price_type', value: 'reduce' } }, ], }, { diff --git a/assets/admin/src/schema/sections/post-list/list.js b/assets/admin/src/schema/sections/post-list/list.js index ad7f8f2c..fdbad150 100644 --- a/assets/admin/src/schema/sections/post-list/list.js +++ b/assets/admin/src/schema/sections/post-list/list.js @@ -4,7 +4,7 @@ export const listSchema = { icon: 'fas fa-list', description: '配置文章列表的卡片样式、元信息显示、分页方式和排序规则。', defaults: { - post_card_style: 'standard', + post_card_style: 'thumb', post_show_author: true, post_show_date: true, post_show_views: true, @@ -41,13 +41,14 @@ export const listSchema = { title: '卡片样式', icon: 'fas fa-th-large', fields: [ - { key: 'post_card_style', label: '卡片样式', type: 'select', default: 'standard', options: [ - { label: '标准卡', value: 'standard' }, + { key: 'post_card_style', label: '卡片样式', type: 'select', default: 'thumb', options: [ + { label: '标准图文', value: 'thumb' }, { label: '紧凑卡', value: 'compact' }, { label: '大图卡', value: 'large_thumb' }, { label: '多图卡', value: 'multi_thumb' }, { label: '纯文字', value: 'text' }, { label: '有图则图文', value: 'thumb_if_has' }, + { label: '卡片模式', value: 'card' }, ]}, { key: 'post_excerpt_length', label: '摘要长度 (字)', type: 'number', default: 120, min: 20, max: 500 }, ], diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php b/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php index a66f425b..7e5f4498 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php @@ -59,40 +59,40 @@ class AKSRT_Admin_Schema_Payment { 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'basic', 'title' => '充值开关', 'fields' => [ - ['key' => 'payment_recharge_enabled', 'label' => '启用余额充值', 'type' => 'switch', 'default' => false], - ['key' => 'payment_recharge_mode', 'label' => '充值模式', 'type' => 'select', 'default' => 'manual_review', 'options' => [ + ['key' => 'payment_recharge_enabled', 'label' => '启用余额充值', 'type' => 'switch', 'default' => true], + ['key' => 'payment_recharge_mode', 'label' => '充值模式', 'type' => 'select', 'default' => 'manual_review', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true], 'options' => [ ['label' => '人工审核', 'value' => 'manual_review'], ['label' => '自动到账', 'value' => 'auto'], ]], - ['key' => 'payment_recharge_desc', 'label' => '充值说明', 'type' => 'textarea', 'default' => ''], - ['key' => 'payment_recharge_auto_to_balance', 'label' => '自动到账到余额', 'type' => 'switch', 'default' => true], + ['key' => 'payment_recharge_desc', 'label' => '充值说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_auto_to_balance', 'label' => '自动到账到余额', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], ]], ['key' => 'packages', 'title' => '充值套餐', 'fields' => [ - ['key' => 'payment_recharge_packages', 'label' => '套餐列表', 'type' => 'textarea', 'default' => "30|30|入门包\n98|108|推荐包"], - ['key' => 'payment_recharge_help', 'label' => '帮助文案', 'type' => 'textarea', 'default' => ''], + ['key' => 'payment_recharge_packages', 'label' => '套餐列表', 'type' => 'textarea', 'default' => "30|30|入门包\n98|108|推荐包", 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_help', 'label' => '帮助文案', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], ]], ['key' => 'product', 'title' => '充值产品', 'fields' => [ - ['key' => 'payment_recharge_product', 'label' => '充值产品', 'type' => 'input', 'default' => ''], - ['key' => 'payment_recharge_price', 'label' => '充值价格', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999], - ['key' => 'payment_recharge_tag', 'label' => '价格标签', 'type' => 'input', 'default' => '元'], - ['key' => 'payment_recharge_tag_class', 'label' => '标签样式', 'type' => 'input', 'default' => ''], - ['key' => 'payment_recharge_custom_s', 'label' => '自定义金额', 'type' => 'switch', 'default' => true], - ['key' => 'payment_recharge_custom_limit', 'label' => '自定义金额限制', 'type' => 'number', 'default' => 9999, 'min' => 1, 'max' => 99999], + ['key' => 'payment_recharge_product', 'label' => '充值产品', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_price', 'label' => '充值价格', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_tag', 'label' => '价格标签', 'type' => 'input', 'default' => '元', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_tag_class', 'label' => '标签样式', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_custom_s', 'label' => '自定义金额', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], + ['key' => 'payment_recharge_custom_limit', 'label' => '自定义金额限制', 'type' => 'number', 'default' => 9999, 'min' => 1, 'max' => 99999, 'dependsOn' => ['key' => 'payment_recharge_enabled', 'value' => true]], ]], ['key' => 'transfer', 'title' => '余额转账', 'fields' => [ ['key' => 'payment_balance_transfer_s', 'label' => '启用余额转账', 'type' => 'switch', 'default' => false], - ['key' => 'payment_balance_transfer_service_charge', 'label' => '转账手续费(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 50], - ['key' => 'payment_balance_transfer_desc', 'label' => '转账说明', 'type' => 'textarea', 'default' => ''], + ['key' => 'payment_balance_transfer_service_charge', 'label' => '转账手续费(%)', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 50, 'dependsOn' => ['key' => 'payment_balance_transfer_s', 'value' => true]], + ['key' => 'payment_balance_transfer_desc', 'label' => '转账说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_balance_transfer_s', 'value' => true]], ]], ['key' => 'pass-charge', 'title' => '充值卡免扣', 'fields' => [ ['key' => 'payment_recharge_pass_charge_s', 'label' => '启用充值卡免扣', 'type' => 'switch', 'default' => false], - ['key' => 'payment_recharge_pass_charge_desc', 'label' => '免扣说明', 'type' => 'textarea', 'default' => ''], - ['key' => 'payment_recharge_pass_charge_only_password', 'label' => '仅密码免扣', 'type' => 'switch', 'default' => false], + ['key' => 'payment_recharge_pass_charge_desc', 'label' => '免扣说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_pass_charge_s', 'value' => true]], + ['key' => 'payment_recharge_pass_charge_only_password', 'label' => '仅密码免扣', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'payment_recharge_pass_charge_s', 'value' => true]], ]], ['key' => 'exchange', 'title' => '积分兑换', 'fields' => [ ['key' => 'payment_recharge_exchange_s', 'label' => '启用积分兑换', 'type' => 'switch', 'default' => false], - ['key' => 'payment_recharge_exchange_rate', 'label' => '兑换比例', 'type' => 'number', 'default' => 100, 'min' => 1, 'max' => 10000], - ['key' => 'payment_recharge_exchange_desc', 'label' => '兑换说明', 'type' => 'textarea', 'default' => ''], + ['key' => 'payment_recharge_exchange_rate', 'label' => '兑换比例', 'type' => 'number', 'default' => 100, 'min' => 1, 'max' => 10000, 'dependsOn' => ['key' => 'payment_recharge_exchange_s', 'value' => true]], + ['key' => 'payment_recharge_exchange_desc', 'label' => '兑换说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_recharge_exchange_s', 'value' => true]], ]], ], ], @@ -121,18 +121,19 @@ class AKSRT_Admin_Schema_Payment { ]], ['key' => 'renew', 'title' => '续费设置', 'fields' => [ ['key' => 'payment_vip_renew', 'label' => '允许续费', 'type' => 'switch', 'default' => true], - ['key' => 'payment_vip_renew_desc', 'label' => '续费说明', 'type' => 'textarea', 'default' => ''], - ['key' => 'payment_vip_renew_price_type', 'label' => '续费价格类型', 'type' => 'radio', 'default' => 'same', 'options' => [ + ['key' => 'payment_vip_renew_desc', 'label' => '续费说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_vip_renew', 'value' => true]], + ['key' => 'payment_vip_renew_price_type', 'label' => '续费价格类型', 'type' => 'radio', 'default' => 'discount', 'dependsOn' => ['key' => 'payment_vip_renew', 'value' => true], 'options' => [ ['label' => '相同价格', 'value' => 'same'], ['label' => '折扣价格', 'value' => 'discount'], + ['label' => '优惠立减', 'value' => 'reduce'], ]], - ['key' => 'payment_vip_renew_discount', 'label' => '续费折扣(%)', 'type' => 'number', 'default' => 100, 'min' => 1, 'max' => 100], - ['key' => 'payment_vip_renew_reduce', 'label' => '续费减免金额', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 9999], + ['key' => 'payment_vip_renew_discount', 'label' => '续费折扣(%)', 'type' => 'number', 'default' => 8, 'min' => 1, 'max' => 100, 'dependsOn' => ['key' => 'payment_vip_renew_price_type', 'value' => 'discount']], + ['key' => 'payment_vip_renew_reduce', 'label' => '续费减免金额', 'type' => 'number', 'default' => 20, 'min' => 0, 'max' => 9999, 'dependsOn' => ['key' => 'payment_vip_renew_price_type', 'value' => 'reduce']], ]], ['key' => 'upgrade', 'title' => '升级设置', 'fields' => [ ['key' => 'payment_vip_upgrade', 'label' => '允许升级', 'type' => 'switch', 'default' => true], - ['key' => 'payment_vip_upgrade_desc', 'label' => '升级说明', 'type' => 'textarea', 'default' => ''], - ['key' => 'payment_vip_upgrade_product', 'label' => '升级产品', 'type' => 'input', 'default' => ''], + ['key' => 'payment_vip_upgrade_desc', 'label' => '升级说明', 'type' => 'textarea', 'default' => '', 'dependsOn' => ['key' => 'payment_vip_upgrade', 'value' => true]], + ['key' => 'payment_vip_upgrade_product', 'label' => '升级产品', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_vip_upgrade', 'value' => true]], ]], ['key' => 'price', 'title' => '价格设置', 'fields' => [ ['key' => 'payment_vip_month_price', 'label' => '月卡价格', 'type' => 'number', 'default' => 0, 'min' => 0, 'max' => 99999], diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php b/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php index 0626d76c..9fcecdd7 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-post-list.php @@ -21,13 +21,14 @@ class AKSRT_Admin_Schema_Post_List { 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'card', 'title' => '卡片样式', 'fields' => [ - ['key' => 'post_card_style', 'label' => '卡片样式', 'type' => 'select', 'default' => 'standard', 'options' => [ - ['label' => '标准卡', 'value' => 'standard'], + ['key' => 'post_card_style', 'label' => '卡片样式', 'type' => 'select', 'default' => 'thumb', 'options' => [ + ['label' => '标准图文', 'value' => 'thumb'], ['label' => '紧凑卡', 'value' => 'compact'], ['label' => '大图卡', 'value' => 'large_thumb'], ['label' => '多图卡', 'value' => 'multi_thumb'], ['label' => '纯文字', 'value' => 'text'], ['label' => '有图则图文', 'value' => 'thumb_if_has'], + ['label' => '卡片模式', 'value' => 'card'], ]], ['key' => 'post_excerpt_length', 'label' => '摘要长度', 'type' => 'number', 'default' => 120, 'min' => 20, 'max' => 500], ]], From 6a7bcc8bf752075cfceb2761da3ed091304b068d Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Jul 2026 23:46:41 +0800 Subject: [PATCH 3/3] =?UTF-8?q?Schema=20=E6=94=B6=E5=8F=A3=E7=AC=AC?= =?UTF-8?q?=E5=9B=9B=E8=BD=AE=EF=BC=9A=E8=A1=A5=E9=BD=90=20payment=20gatew?= =?UTF-8?q?ay=20=E7=9A=84=20PHP=20=E4=BE=9D=E8=B5=96=E5=A5=91=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 继续 Workstream C,对 payment.gateway 做 PHP schema 收口: - 为 wechat / alipay / paypal 三组网关配置补齐 dependsOn,确保 provider 配置只在对应 payment_*_enabled 开启后展开。 - 延续前几轮的目标:让 PHP schema 与前端 schema 一样,真正承担“总开关 -> 子配置”的 单一真理源角色,而不是仅前端层面做折叠展示。 说明:本轮原计划同时继续推进 page_display,但审阅后发现 page_display 的剩余问题以 结构性差异(缺少真正的 home 主 section、float-btn 在前端 schema 层未建模完整)为主, 不适合和本轮 payment gateway 的机械对齐混在一个提交里,因此先独立完成 gateway 收口。 验证: - php -l 通过:class-aksrt-admin-schema-payment.php - node --check 已复核 payment/post-list 前几轮前端 schema 文件仍通过 Co-Authored-By: Claude Fable 5 --- .../class-aksrt-admin-schema-payment.php | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php b/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php index 7e5f4498..9fbd9818 100644 --- a/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php +++ b/inc/classes/admin/schema/class-aksrt-admin-schema-payment.php @@ -228,24 +228,24 @@ class AKSRT_Admin_Schema_Payment { ['key' => 'payment_stripe_enabled', 'label' => 'Stripe', 'type' => 'switch', 'default' => false], ]], ['key' => 'wechat', 'title' => '微信支付配置', 'fields' => [ - ['key' => 'wechat_merchantid', 'label' => '商户号', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_jsapi', 'label' => 'JSAPI密钥', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_appsecret', 'label' => 'AppSecret', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_cert_path', 'label' => '证书路径', 'type' => 'input', 'default' => ''], - ['key' => 'wechat_key_path', 'label' => '密钥路径', 'type' => 'input', 'default' => ''], + ['key' => 'wechat_merchantid', 'label' => '商户号', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_wechat_enabled', 'value' => true]], + ['key' => 'wechat_jsapi', 'label' => 'JSAPI密钥', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_wechat_enabled', 'value' => true]], + ['key' => 'wechat_appsecret', 'label' => 'AppSecret', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_wechat_enabled', 'value' => true]], + ['key' => 'wechat_cert_path', 'label' => '证书路径', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_wechat_enabled', 'value' => true]], + ['key' => 'wechat_key_path', 'label' => '密钥路径', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_wechat_enabled', 'value' => true]], ]], ['key' => 'alipay', 'title' => '支付宝配置', 'fields' => [ - ['key' => 'alipay_appid', 'label' => 'AppID', 'type' => 'input', 'default' => ''], - ['key' => 'alipay_privatekey', 'label' => '应用私钥', 'type' => 'input', 'default' => ''], - ['key' => 'alipay_publickey', 'label' => '支付宝公钥', 'type' => 'input', 'default' => ''], - ['key' => 'alipay_return_url', 'label' => '同步回调地址', 'type' => 'input', 'default' => ''], - ['key' => 'alipay_notify_url', 'label' => '异步回调地址', 'type' => 'input', 'default' => ''], + ['key' => 'alipay_appid', 'label' => 'AppID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_alipay_enabled', 'value' => true]], + ['key' => 'alipay_privatekey', 'label' => '应用私钥', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_alipay_enabled', 'value' => true]], + ['key' => 'alipay_publickey', 'label' => '支付宝公钥', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_alipay_enabled', 'value' => true]], + ['key' => 'alipay_return_url', 'label' => '同步回调地址', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_alipay_enabled', 'value' => true]], + ['key' => 'alipay_notify_url', 'label' => '异步回调地址', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_alipay_enabled', 'value' => true]], ]], ['key' => 'paypal', 'title' => 'PayPal配置', 'fields' => [ - ['key' => 'paypal_client_id', 'label' => 'Client ID', 'type' => 'input', 'default' => ''], - ['key' => 'paypal_client_secret', 'label' => 'Client Secret', 'type' => 'input', 'default' => ''], - ['key' => 'paypal_currency', 'label' => '货币', 'type' => 'input', 'default' => 'USD'], - ['key' => 'paypal_sandbox', 'label' => '沙箱模式', 'type' => 'switch', 'default' => true], + ['key' => 'paypal_client_id', 'label' => 'Client ID', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_paypal_enabled', 'value' => true]], + ['key' => 'paypal_client_secret', 'label' => 'Client Secret', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'payment_paypal_enabled', 'value' => true]], + ['key' => 'paypal_currency', 'label' => '货币', 'type' => 'input', 'default' => 'USD', 'dependsOn' => ['key' => 'payment_paypal_enabled', 'value' => true]], + ['key' => 'paypal_sandbox', 'label' => '沙箱模式', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'payment_paypal_enabled', 'value' => true]], ]], ['key' => 'xunhupay', 'title' => '虎皮椒配置', 'fields' => [ ['key' => 'xunhupay_appid', 'label' => 'AppID', 'type' => 'input', 'default' => ''],