feat: unify invite flow with referral ref

This commit is contained in:
2026-08-17 13:49:59 +08:00
parent f1d6809109
commit b501cf4611
47 changed files with 1083 additions and 2548 deletions
@@ -9,7 +9,6 @@ export const affiliateSchema = {
affiliate_ratio_vip_1: 5,
affiliate_ratio_vip_2: 5,
affiliate_order_types: ['membership', 'content'],
affiliate_touch_window_days: 30,
affiliate_settlement_days: 7,
affiliate_promotion_text: '',
},
@@ -24,7 +23,6 @@ export const affiliateSchema = {
{ key: 'affiliate_ratio_vip_1', label: '一级会员佣金比例(%)', type: 'number', default: 5, min: 0, max: 100, dependsOn: { key: 'affiliate_enabled', value: true } },
{ key: 'affiliate_ratio_vip_2', label: '二级会员佣金比例(%)', type: 'number', default: 5, min: 0, max: 100, dependsOn: { key: 'affiliate_enabled', value: true } },
{ key: 'affiliate_order_types', label: '适用订单类型', type: 'checkbox', default: ['membership', 'content'], sanitize_type: 'array', options: [{ label: '会员订单', value: 'membership' }, { label: '付费内容', value: 'content' }, { label: '购买积分', value: 'credits' }], dependsOn: { key: 'affiliate_enabled', value: true } },
{ key: 'affiliate_touch_window_days', label: '首次触达窗口(天)', type: 'number', default: 30, min: 1, max: 365, dependsOn: { key: 'affiliate_enabled', value: true } },
{ key: 'affiliate_settlement_days', label: '结算观察期(天)', type: 'number', default: 7, min: 0, max: 90, dependsOn: { key: 'affiliate_enabled', value: true } },
],
},
+16 -10
View File
@@ -37,10 +37,13 @@ export const authSchema = {
bind_reminder_expires: 24,
mandatory_bind: 'close',
email_set_captch: true,
invit_code_s: false,
invit_code_mode: 'open',
invit_code_open_desc: '邀请码为选填,没有邀请码也可以注册',
invit_code_must_desc: '请输入邀请码',
referral_registration_enabled: true,
referral_register_field: 'optional',
referral_reject_invalid: true,
referral_code_length: 12,
referral_window_days: 30,
referral_open_desc: '推广码为选填,没有推广码也可以注册',
referral_required_desc: '请输入推广码',
sign_page_background: [],
sign_theme_mode: 'default',
sign_show_header: true,
@@ -115,14 +118,17 @@ export const authSchema = {
],
},
{
key: 'invite_inline',
title: '邀请码注册',
key: 'referral_inline',
title: '推广码注册',
icon: 'fas fa-ticket-alt',
fields: [
{ key: 'invit_code_s', label: '启用邀请码', type: 'switch', default: false, help: '与「邀请码」子页联动,此处开关控制注册表单是否显示邀请码字段' },
{ key: 'invit_code_mode', label: '邀请模式', type: 'select', default: 'open', options: [{ label: '开放注册(邀请码选填)', value: 'open' }, { label: '必须邀请码', value: 'must' }], dependsOn: { key: 'invit_code_s', value: true } },
{ key: 'invit_code_open_desc', label: '开放注册提示', type: 'input', default: '邀请码为选填,没有邀请码也可以注册', dependsOn: { key: 'invit_code_s', value: true } },
{ key: 'invit_code_must_desc', label: '必填提示', type: 'input', default: '请输入邀请码', dependsOn: { key: 'invit_code_s', value: true } },
{ key: 'referral_registration_enabled', label: '开放推广码注册', type: 'switch', default: true },
{ key: 'referral_register_field', label: '注册页推广码字段', type: 'select', default: 'optional', options: [{ label: '隐藏', value: 'hidden' }, { label: '选填', value: 'optional' }, { label: '必填', value: 'required' }], dependsOn: { key: 'referral_registration_enabled', value: true } },
{ key: 'referral_reject_invalid', label: '拒绝无效推广码', type: 'switch', default: true, dependsOn: { key: 'referral_registration_enabled', value: true } },
{ key: 'referral_code_length', label: 'Ref 码长度', type: 'number', default: 12, min: 4, max: 12 },
{ key: 'referral_window_days', label: '首次触达窗口(天)', type: 'number', default: 30, min: 1, max: 365 },
{ key: 'referral_open_desc', label: '选填提示', type: 'input', default: '推广码为选填,没有推广码也可以注册', dependsOn: { key: 'referral_registration_enabled', value: true } },
{ key: 'referral_required_desc', label: '必填提示', type: 'input', default: '请输入推广码', dependsOn: { key: 'referral_registration_enabled', value: true } },
],
},
{
@@ -17,7 +17,6 @@ export const creditsSchema = {
points_free_comment_new: 1,
points_free_comment_like: 1,
points_free_followed: 1,
points_earn_invite: 10,
points_spend_comment: 0,
points_spend_download: 0,
points_spend_view_hidden: 0,
@@ -59,7 +58,6 @@ export const creditsSchema = {
{ key: 'points_free_comment_new', label: '发表评论', type: 'number', default: 1, min: 0, max: 100 },
{ key: 'points_free_comment_like', label: '评论被赞', type: 'number', default: 1, min: 0, max: 100 },
{ key: 'points_free_followed', label: '被关注', type: 'number', default: 1, min: 0, max: 100 },
{ key: 'points_earn_invite', label: '邀请注册奖励', type: 'number', default: 10, min: 0, max: 1000, help: '邀请不计入免费日上限' },
],
},
{
@@ -6,7 +6,6 @@ import { authSchema } from './auth.js'
import { oauthSchema } from './oauth.js'
import { notificationsSchema } from './notifications.js'
import { creditsSchema } from './credits.js'
import { inviteSchema } from './invite.js'
import { featuresSchema } from './features.js'
import { signinSchema } from './signin.js'
import { verifySchema } from './verify.js'
@@ -21,7 +20,6 @@ export const usersSchemas = {
oauth: oauthSchema,
notifications: notificationsSchema,
credits: creditsSchema,
invite: inviteSchema,
features: featuresSchema,
signin: signinSchema,
verify: verifySchema,
@@ -1,68 +0,0 @@
export const inviteSchema = {
key: 'users.invite',
title: '邀请码',
icon: 'fas fa-ticket-alt',
description: '邀请码生成、管理、奖励配置。',
defaults: {
invit_code_s: false,
invit_code_open_desc: '邀请码为选填,没有邀请码也可以注册',
invit_code_must_desc: '请输入邀请码',
invit_code_mode: 'open',
invit_code_length: 8,
invit_code_prefix: '',
invit_code_max_use: 1,
invit_code_expiry: 0,
invit_code_batch: 20,
invit_reward_points: 0,
invit_reward_level: 0,
invit_reward_vip_days: 0,
invit_invitee_reward: false,
invit_code_show_count: true,
invit_code_show_remain: true,
},
groups: [
{
key: 'basic',
title: '邀请设置',
icon: 'fas fa-cog',
fields: [
{ key: 'invit_code_s', label: '启用邀请码', type: 'switch', default: false },
{ key: 'invit_code_open_desc', label: '开放注册提示', type: 'input', default: '邀请码为选填,没有邀请码也可以注册' },
{ key: 'invit_code_must_desc', label: '必填提示', type: 'input', default: '请输入邀请码' },
{ key: 'invit_code_mode', label: '邀请模式', type: 'select', default: 'open', options: [{ label: '开放注册(邀请码选填)', value: 'open' }, { label: '必须邀请码', value: 'must' }] },
],
},
{
key: 'format',
title: '码面设置',
icon: 'fas fa-barcode',
fields: [
{ key: 'invit_code_length', label: '邀请码长度', type: 'number', default: 8, min: 4, max: 32 },
{ key: 'invit_code_prefix', label: '邀请码前缀', type: 'input', default: '' },
{ key: 'invit_code_max_use', label: '单码最大使用次数', type: 'number', default: 1, min: 1, max: 9999 },
{ key: 'invit_code_expiry', label: '有效期(天)', type: 'number', default: 0, min: 0, help: '0为永久有效' },
{ key: 'invit_code_batch', label: '批量生成数量', type: 'number', default: 20, min: 1, max: 500 },
],
},
{
key: 'reward',
title: '邀请奖励',
icon: 'fas fa-gift',
fields: [
{ key: 'invit_reward_points', label: '邀请奖励积分', type: 'number', default: 0, min: 0, max: 1000 },
{ key: 'invit_reward_level', label: '邀请奖励等级', type: 'number', default: 0, min: 0, max: 10 },
{ key: 'invit_reward_vip_days', label: '奖励VIP天数', type: 'number', default: 0, min: 0, max: 3650 },
{ key: 'invit_invitee_reward', label: '被邀请人奖励', type: 'switch', default: false },
],
},
{
key: 'display',
title: '展示设置',
icon: 'fas fa-eye',
fields: [
{ key: 'invit_code_show_count', label: '显示已使用次数', type: 'switch', default: true },
{ key: 'invit_code_show_remain', label: '显示剩余次数', type: 'switch', default: true },
],
},
],
}