/** * VIP会员 — 结构 1:1 对照参考主题 Zibll:会员等级(开关)、会员权益 * (普通/一级/二级 tab)、会员购买选项(一级/二级/续费/升级 tab)、 * 积分兑换会员与界面文案。 * * 会员商品 / 续费商品 / 升级价格 / 积分兑换明细均为结构化 group 或 * accordion,不再使用 `|` 分隔的 textarea。等级 Tab 标题通过 titleKey * 绑定「会员显示名称」,改名即改 Tab 名。 */ const VIP_EQUITY_DEFAULT = '
  • 全站资源折扣购买
  • 部分内容免费阅读
  • 一对一技术指导
  • VIP用户专属QQ群
  • '; const vipTagPalette = [ { label: '#f74b3d', value: 'b-red' }, { label: '#f3920a', value: 'b-yellow' }, { label: '#08c4c1', value: 'b-cyan' }, { label: '#0a8cf3', value: 'b-blue' }, { label: '#1fd05a', value: 'b-green' }, { label: '#c133f5', value: 'b-purple' }, { label: '#121517', value: 'b-black' }, { label: 'linear-gradient(135deg, #ffbeb4 10%, #f61a1a 100%)', value: 'jb-red' }, { label: 'linear-gradient(135deg, #ff5e7f 30%, #ff967e 100%)', value: 'jb-pink' }, { label: 'linear-gradient(135deg, #ffd6b2 10%, #ff651c 100%)', value: 'jb-yellow' }, { label: 'linear-gradient(140deg, #039ab3 10%, #58dbcf 90%)', value: 'jb-cyan' }, { label: 'linear-gradient(135deg, #b6e6ff 10%, #198aff 100%)', value: 'jb-blue' }, { label: 'linear-gradient(135deg, #ccffcd 10%, #52bb51 100%)', value: 'jb-green' }, { label: 'linear-gradient(135deg, #fec2ff 10%, #d000de 100%)', value: 'jb-purple' }, { label: 'linear-gradient(25deg, #eab869 10%, #fbecd4 60%, #ffe0ae 100%)', value: 'jb-vip1' }, { label: 'linear-gradient(317deg, #4d4c4c 30%, #878787 70%, #5f5c5c 100%)', value: 'jb-vip2' }, ]; const vipUnitOptions = [ { label: '天', value: 'day' }, { label: '月', value: 'month' }, ]; // 会员商品/续费商品的手风琴配置:默认收起,标题行显示价格与时长摘要。 const vipProductGroupOptions = { collapsible: true, defaultCollapsed: true, listPreview: { prefix: '价格:', titleKey: 'price', descKey: 'time', descUnitKey: 'unit' }, }; // 积分兑换明细的手风琴配置:默认收起,标题行显示积分与时长摘要。 const vipPointsGroupOptions = { collapsible: true, defaultCollapsed: true, listPreview: { prefix: '积分:', titleKey: 'points', descKey: 'time', descUnitKey: 'unit' }, }; /** * 会员商品字段集(参考主题 CFS_Module::vip_product)。 */ function vipProductFields() { return [ { key: 'price', label: '执行价', type: 'number', sanitize_type: 'money_decimal', default: '699.00', min: 0, suffix: '元', help: '会员的实际购买价格' }, { key: 'show_price', label: '原价', type: 'number', sanitize_type: 'money_decimal', default: '999.00', min: 0, suffix: '元', help: '显示在执行价格前面,并划掉' }, { key: 'tag', label: '促销标签', type: 'textarea', sanitize_type: 'html', default: '', rows: 1, help: '支持HTML,请注意控制长度' }, { key: 'tag_class', label: '标签颜色', type: 'palette', default: 'jb-yellow', dependsOn: { key: 'tag', operator: 'not_empty' }, options: vipTagPalette }, { key: 'time', label: '会员有效时间', type: 'spinner', default: 3, min: 0, max: 3600, step: 1, help: '开通会员的时长。填0则为永久会员' }, { key: 'unit', label: '时长单位', type: 'radio', default: 'month', inline: true, dependsOn: { key: 'time', operator: 'truthy' }, options: vipUnitOptions }, { key: '_time_permanent_hint', label: '', type: 'alert', alertType: 'success', ui_only: true, dependsOn: { key: 'time', operator: 'eq', value: 0 }, content: '会员有效时间已设置为:永久会员' }, ]; } /** * 会员等级 Tab 字段集(参考主题 CFS_Module::vip_tab,显示名称并入 Tab)。 */ function vipLevelTabFields(level) { const dep = { key: `pay_user_vip_${level}_s`, value: true }; return [ { key: `pay_user_vip_${level}_name`, label: '会员显示名称', type: 'input', default: level === 1 ? '黄金会员' : '钻石会员', dependsOn: dep, help: '会员名称(例如“黄金会员”、“超级会员”)' }, { key: `pay_user_vip_${level}_desc`, label: '一句话简介', type: 'input', default: '尊享专属特权', dependsOn: dep }, { key: `pay_user_vip_${level}_equity`, label: '会员权益 HTML', type: 'textarea', sanitize_type: 'html', default: VIP_EQUITY_DEFAULT, rows: 4, dependsOn: dep, help: '建议使用
  • 列表项' }, { key: `vip_${level}_product_s`, label: '购买会员', type: 'switch', default: true, dependsOn: dep, help: '关闭后则不能付费购买会员,但可通过积分兑换会员,请确保已开启积分以及积分兑换会员功能' }, { key: `vip_${level}_product`, label: '会员商品', type: 'group', max: 8, button_title: '添加会员商品', default: [ { price: 99, show_price: 199, tag: ' 限时特惠', time: 3, unit: 'month' }, { price: 199, show_price: 299, tag: ' 站长推荐', time: 6, unit: 'month' }, ], ...vipProductGroupOptions, dependsOn: { all: [dep, { key: `vip_${level}_product_s`, value: true }] }, help: '会员购买价格配置:执行价、原价、促销标签、标签颜色与会员有效时间', fields: vipProductFields(), }, { key: `vip_${level}_img_icon`, label: '会员图标', type: 'upload', default: '', dependsOn: dep, help: `留空使用内置 vip-${level}.svg 图标;建议尺寸300x300` }, ]; } export const vipSchema = { key: 'payment.vip', title: 'VIP会员', icon: 'fa fas fa-gem', description: '双级会员:等级开关、权益(下载次数与限速)、会员商品、续费/升级与积分兑换。', defaults: { nav_pay_vip: true, nav_user_pay_vip: true, pay_user_vip_1_s: true, pay_user_vip_1_name: '黄金会员', pay_user_vip_1_desc: '尊享专属特权', pay_user_vip_1_equity: VIP_EQUITY_DEFAULT, vip_1_product_s: true, vip_1_product: [ { price: 99, show_price: 199, tag: ' 限时特惠', time: 3, unit: 'month' }, { price: 199, show_price: 299, tag: ' 站长推荐', time: 6, unit: 'month' }, ], vip_1_img_icon: '', pay_user_vip_2_s: true, pay_user_vip_2_name: '钻石会员', pay_user_vip_2_desc: '尊享专属特权', pay_user_vip_2_equity: VIP_EQUITY_DEFAULT, vip_2_product_s: true, vip_2_product: [ { price: 99, show_price: 199, tag: ' 限时特惠', time: 3, unit: 'month' }, { price: 199, show_price: 299, tag: ' 站长推荐', time: 6, unit: 'month' }, ], vip_2_img_icon: '', pay_user_vip_desc: '开通VIP会员,享受会员专属折扣以及多项特权', pay_user_vip_more: '
    购买后不支持退款
    VIP权益仅适用于本站
    欢迎与站长联系
    ', pay_download_limit: 0, pay_download_speed: 0, pay_download_limit_vip_1: 0, pay_download_speed_vip_1: 0, pay_download_limit_vip_2: 0, pay_download_speed_vip_2: 0, vip_1_product_s: true, vip_renew: true, vip_renew_desc: '立即续费会员,畅享VIP权益', vip_renew_price_type: 'discount', vip_renew_discount: 8, vip_renew_reduce: '20.00', vip_1_renew_product: [ { price: 69, show_price: 199, tag: ' 限时特惠', time: 3, unit: 'month' }, { price: 169, show_price: 299, tag: ' 站长推荐', time: 6, unit: 'month' }, ], vip_2_renew_product: [ { price: 269, show_price: 599, tag: ' 限时特惠', time: 3, unit: 'month' }, { price: 369, show_price: 899, tag: ' 站长推荐', time: 6, unit: 'month' }, ], vip_2_product_s: true, vip_renew: true, vip_renew_discount: 8, vip_renew_reduce: '20.00', vip_upgrade: true, vip_upgrade_desc: '升级VIP会员,享更多会员权益', vip_upgrade_product: { month_to_month_s: true, unit_price: '10.00', unit_tag: ' 站长推荐', unit_tag_class: 'jb-yellow', jump_s: false, jump_price: '199.00', jump_show_price: '299.00', jump_tag: ' 升级特惠', jump_tag_class: 'jb-red', permanent_price: '199.00', permanent_show_price: '299.00', permanent_tag: ' 升级特惠', permanent_tag_class: 'jb-red', }, pay_vip_points_exchange_s: false, pay_vip_points_exchange_product: [ { points: 500, level: 1, time: 30, unit: 'day' }, { points: 5000, level: 1, time: 'Permanent' }, ], pay_vip_points_exchange_desc: '', }, groups: [ { key: 'notice', title: '说明', icon: 'fa fas fa-info-circle', fields: [ { key: 'vip_notice', label: '', type: 'content', ui_only: true, content: '', }, ], }, { key: 'basic', title: '会员等级', icon: 'fa fas fa-user', fields: [ { key: 'nav_pay_vip', label: '导航栏购买按钮', type: 'switch', default: true, help: '在顶部导航栏显示开通会员按钮;请注意顶部导航的整体宽度。' }, { key: 'nav_user_pay_vip', label: '用户框购买按钮', type: 'switch', default: true, help: '在导航栏用户框内显示开通会员按钮。' }, { key: 'pay_user_vip_1_s', label: '启用一级会员', type: 'switch', default: true }, { key: 'vip_level_order_notice', label: '', type: 'notice', ui_only: true, alertType: 'danger', dependsOn: { all: [{ key: 'pay_user_vip_2_s', value: true }, { key: 'pay_user_vip_1_s', operator: 'falsy' }] }, content: '
    必须先开启一级会员后才能开启二级会员!
    ', }, { key: 'pay_user_vip_2_s', label: '启用二级会员', type: 'switch', default: true }, ], }, { key: 'benefit', title: '会员权益', icon: 'fa fas fa-gift', fields: [ { key: 'vip_benefit', label: '会员权益', type: 'tabbed', tabs: [ { key: 'ordinary', title: '普通用户', fields: [ { key: 'pay_download_limit', label: '付费资源:免费资源每日可下载(个)', type: 'number', default: 0, min: 0, max: 9999, help: '普通用户每日最多可下载几个免费资源(为0则不限制)' }, { key: 'pay_download_speed', label: '付费资源:下载限速(KB/s)', type: 'number', default: 0, min: 0, help: '付费下载限制最大下载速度(为0则不限制);只对本地服务器文件有效' }, ], }, { key: 'vip1', title: '一级会员', titleKey: 'pay_user_vip_1_name', titleFallback: '一级会员', fields: [ { key: 'pay_download_limit_vip_1', label: '付费资源:免费资源每日可下载(个)', type: 'number', default: 0, min: 0, max: 9999, dependsOn: { key: 'pay_user_vip_1_s', value: true }, help: '一级会员每日最多可下载几个免费资源(为0则不限制)' }, { key: 'pay_download_speed_vip_1', label: '付费资源:下载限速(KB/s)', type: 'number', default: 0, min: 0, dependsOn: { key: 'pay_user_vip_1_s', value: true }, help: '付费下载限制最大下载速度(为0则不限制);只对本地服务器文件有效' }, ], }, { key: 'vip2', title: '二级会员', titleKey: 'pay_user_vip_2_name', titleFallback: '二级会员', fields: [ { key: 'pay_download_limit_vip_2', label: '付费资源:免费资源每日可下载(个)', type: 'number', default: 0, min: 0, max: 9999, dependsOn: { key: 'pay_user_vip_2_s', value: true }, help: '二级会员每日最多可下载几个免费资源(为0则不限制)' }, { key: 'pay_download_speed_vip_2', label: '付费资源:下载限速(KB/s)', type: 'number', default: 0, min: 0, dependsOn: { key: 'pay_user_vip_2_s', value: true }, help: '付费下载限制最大下载速度(为0则不限制);只对本地服务器文件有效' }, ], }, ], }, ], }, { key: 'opt', title: '会员购买选项', icon: 'fa fas fa-shopping-cart', fields: [ { key: 'vip_opt', label: '会员购买选项', type: 'tabbed', tabs: [ { key: 'vip1', title: '一级会员', titleKey: 'pay_user_vip_1_name', titleFallback: '一级会员', fields: [ ...vipLevelTabFields(1), ], }, { key: 'vip2', title: '二级会员', titleKey: 'pay_user_vip_2_name', titleFallback: '二级会员', fields: [ ...vipLevelTabFields(2), ], }, { key: 'renew', title: '会员续费', fields: [ { key: 'vip_renew', label: '允许续费', type: 'switch', default: true, help: '关闭后则不能续费,只能会员到期之后再购买。永久会员不需要续费', }, { key: 'vip_renew_desc', label: '续费介绍', type: 'input', default: '立即续费会员,畅享VIP权益', dependsOn: { key: 'vip_renew', value: true }, help: '续费会员的一句话简介', }, { key: 'vip_renew_price_type', label: '续费价格类型', type: 'select', default: 'discount', dependsOn: { key: 'vip_renew', value: true }, options: [ { label: '相同价格', value: 'same' }, { label: '折扣价格', value: 'discount' }, { label: '优惠立减', value: 'reduce' }, { label: '自定义商品', value: 'customize' }, ], help: '自定义商品时,按下方「一级会员续费」「二级会员续费」的商品选项计价', }, { key: 'vip_renew_discount', label: '续费折扣', type: 'slider', sanitize_type: 'float', default: 8, min: 0.1, max: 9.9, step: 0.1, unit: '折', dependsOn: { key: 'vip_renew_price_type', value: 'discount' }, help: '在会员商品基础上打几折,如 8 = 八折', }, { key: 'vip_renew_reduce', label: '续费减免金额', type: 'spinner', sanitize_type: 'money_decimal', default: '20.00', min: 0, max: 500, step: 5, unit: '元', dependsOn: { key: 'vip_renew_price_type', value: 'reduce' }, help: '在会员商品基础上优惠的金额,优惠后总金额不能为0元', }, { key: 'vip_1_renew_product', label: '一级会员续费', type: 'group', max: 8, button_title: '添加续费商品', default: [ { price: 69, show_price: 199, tag: ' 限时特惠', time: 3, unit: 'month' }, { price: 169, show_price: 299, tag: ' 站长推荐', time: 6, unit: 'month' }, ], dependsOn: { key: 'vip_renew_price_type', value: 'customize' }, help: '一级会员续费的商品选项', ...vipProductGroupOptions, fields: vipProductFields(), }, { key: 'vip_2_renew_product', label: '二级会员续费', type: 'group', max: 8, button_title: '添加续费商品', default: [ { price: 269, show_price: 599, tag: ' 限时特惠', time: 3, unit: 'month' }, { price: 369, show_price: 899, tag: ' 站长推荐', time: 6, unit: 'month' }, ], dependsOn: { key: 'vip_renew_price_type', value: 'customize' }, help: '二级会员续费的商品选项', ...vipProductGroupOptions, fields: vipProductFields(), }, ], }, { key: 'upgrade', title: '会员升级', fields: [ { key: 'vip_upgrade', label: '允许升级', type: 'switch', default: true }, { key: 'vip_upgrade_desc', label: '升级介绍', type: 'input', default: '升级VIP会员,享更多会员权益', dependsOn: { key: 'vip_upgrade', value: true }, help: '升级会员的一句话简介' }, { key: 'vip_upgrade_product', label: '升级价格', type: 'accordion', default: { month_to_month_s: true, unit_price: '10.00', unit_tag: ' 站长推荐', unit_tag_class: 'jb-yellow', jump_s: false, jump_price: '199.00', jump_show_price: '299.00', jump_tag: ' 升级特惠', jump_tag_class: 'jb-red', permanent_price: '199.00', permanent_show_price: '299.00', permanent_tag: ' 升级特惠', permanent_tag_class: 'jb-red', }, dependsOn: { key: 'vip_upgrade', value: true }, help: '会员升级的商品选项', sections: [ { title: '月费会员升级月费会员', keys: ['_upgrade_unit_notice', 'month_to_month_s', 'unit_price', 'unit_tag', 'unit_tag_class'] }, { title: '月费会员升级永久会员', keys: ['_upgrade_jump_notice', 'jump_s', 'jump_price', 'jump_show_price', 'jump_tag', 'jump_tag_class'] }, { title: '永久会员升级永久会员', keys: ['permanent_price', 'permanent_show_price', 'permanent_tag', 'permanent_tag_class'] }, ], fields: [ { key: '_upgrade_unit_notice', label: '', type: 'notice', ui_only: true, alertType: 'warning', content: '月费会员升级为月费会员,用户会员有效期不会改变;价格按照会员剩余天数计算升级价格,请在下方设置每天的单价' }, { key: 'month_to_month_s', label: '月费会员升级月费会员', type: 'switch', default: true }, { key: 'unit_price', label: '天单价', type: 'number', sanitize_type: 'money_decimal', default: '10.00', min: 0, unit: '元', dependsOn: { key: 'month_to_month_s', value: true } }, { key: 'unit_tag', label: '促销标签', type: 'textarea', sanitize_type: 'html', default: ' 站长推荐', rows: 1, dependsOn: { key: 'month_to_month_s', value: true }, help: '支持HTML,请注意控制长度' }, { key: 'unit_tag_class', label: '标签颜色', type: 'palette', default: 'jb-yellow', dependsOn: { all: [{ key: 'month_to_month_s', value: true }, { key: 'unit_tag', operator: 'not_empty' }] }, options: vipTagPalette }, { key: '_upgrade_jump_notice', label: '', type: 'notice', ui_only: true, alertType: 'warning', content: '如果网站可以购买月费会员和永久会员,则可以开启此项;允许用户由月费会员直接升级到更高一级的永久会员,用户之前还未到期的部分将自动一起转为永久会员,可能会涉及到差价问题,请自行告知用户;如果网站没有永久会员的购买选项请务必关闭此项' }, { key: 'jump_s', label: '月费会员升级永久会员', type: 'switch', default: false }, { key: 'jump_price', label: '执行价', type: 'number', sanitize_type: 'money_decimal', default: '199.00', min: 0, unit: '元', dependsOn: { key: 'jump_s', value: true }, help: '月费会员升级永久会员的价格' }, { key: 'jump_show_price', label: '原价', type: 'number', sanitize_type: 'money_decimal', default: '299.00', min: 0, unit: '元', dependsOn: { key: 'jump_s', value: true }, help: '显示在执行价格前面,并划掉' }, { key: 'jump_tag', label: '促销标签', type: 'textarea', sanitize_type: 'html', default: ' 升级特惠', rows: 1, dependsOn: { key: 'jump_s', value: true }, help: '支持HTML,请注意控制长度' }, { key: 'jump_tag_class', label: '标签颜色', type: 'palette', default: 'jb-red', dependsOn: { all: [{ key: 'jump_s', value: true }, { key: 'jump_tag', operator: 'not_empty' }] }, options: vipTagPalette }, { key: 'permanent_price', label: '执行价', type: 'number', sanitize_type: 'money_decimal', default: '199.00', min: 0, unit: '元', help: '永久会员升级永久会员的价格' }, { key: 'permanent_show_price', label: '原价', type: 'number', sanitize_type: 'money_decimal', default: '299.00', min: 0, unit: '元', help: '显示在执行价格前面,并划掉' }, { key: 'permanent_tag', label: '促销标签', type: 'textarea', sanitize_type: 'html', default: ' 升级特惠', rows: 1, help: '支持HTML,请注意控制长度' }, { key: 'permanent_tag_class', label: '标签颜色', type: 'palette', default: 'jb-red', dependsOn: { key: 'permanent_tag', operator: 'not_empty' }, options: vipTagPalette }, ], }, ], }, ], }, ], }, { key: 'points-exchange', title: '积分兑换会员', icon: 'fa fas fa-database', fields: [ { key: 'pay_vip_points_exchange_s', label: '启用积分兑换', type: 'switch', default: false, help: '开启后用户可使用积分兑换会员;由于积分可免费获取,所以积分兑换会员功能不支持升级及续费' }, { key: 'pay_vip_points_exchange_product', label: '积分兑换明细', type: 'group', max: 16, button_title: '添加积分兑换商品', default: [ { points: 500, level: 1, time: 30, unit: 'day' }, { points: 5000, level: 1, time: 'Permanent' }, ], dependsOn: { key: 'pay_vip_points_exchange_s', value: true }, help: '每一行为一个可兑换的会员套餐', ...vipPointsGroupOptions, fields: [ { key: 'points', label: '使用积分', type: 'number', default: 100, min: 0, unit: '积分' }, { key: 'level', label: '兑换会员', type: 'radio', default: 1, inline: true, options: [ { label: '一级会员', value: 1 }, { label: '二级会员', value: 2 }, ], }, { key: 'time', label: '兑换时长', type: 'input', default: '', help: '填 Permanent 为永久' }, { key: 'unit', label: '时长单位', type: 'radio', default: 'day', inline: true, dependsOn: { key: 'time', operator: 'neq', value: 'Permanent' }, options: vipUnitOptions, }, ], }, { key: 'pay_vip_points_exchange_desc', label: '兑换说明', type: 'textarea', sanitize_type: 'html', default: '', rows: 2, dependsOn: { key: 'pay_vip_points_exchange_s', value: true }, help: '显示在积分兑换弹窗底部,可以为提醒事项、兑换协议等,支持HTML代码' }, ], }, { key: 'modal-copy', title: '界面文案', icon: 'fa fas fa-align-left', fields: [ { key: 'pay_user_vip_desc', label: '会员介绍', type: 'input', default: '开通VIP会员,享受会员专属折扣以及多项特权', dependsOn: { any: [{ key: 'pay_user_vip_1_s', value: true }, { key: 'pay_user_vip_2_s', value: true }] }, help: '显示在开通界面顶部一句话简介,可以为会员权益简介或者活动介绍', }, { key: 'pay_user_vip_more', label: '开通会员更多内容', type: 'textarea', sanitize_type: 'html', default: '
    购买后不支持退款
    VIP权益仅适用于本站
    欢迎与站长联系
    ', rows: 4, dependsOn: { any: [{ key: 'pay_user_vip_1_s', value: true }, { key: 'pay_user_vip_2_s', value: true }] }, help: '显示在开通界面底部位置,可以为提醒事项、用户协议等,支持HTML代码', }, ], }, ], }