feat(ops): allow cross-strategy lucky gift experiments
This commit is contained in:
parent
f6a647e0ff
commit
0be72eaff1
@ -180,7 +180,7 @@ export function LuckyGiftConfigDialog({ appOptions = [], config, mode = "edit",
|
|||||||
<small>
|
<small>
|
||||||
{form.app_code || "-"} / {form.pool_id || "default"} /{" "}
|
{form.app_code || "-"} / {form.pool_id || "default"} /{" "}
|
||||||
{isExperiment
|
{isExperiment
|
||||||
? `对照组为当前版本 v${config.rule_version ?? "-"},本表单发布为实验组新版本`
|
? `对照组为 ${config.strategy_version || "fixed_v2"} v${config.rule_version ?? "-"},本表单发布为实验组新版本`
|
||||||
: config.is_default || isCreate
|
: config.is_default || isCreate
|
||||||
? "默认草稿"
|
? "默认草稿"
|
||||||
: `当前版本 v${config.rule_version ?? "-"}`}
|
: `当前版本 v${config.rule_version ?? "-"}`}
|
||||||
|
|||||||
@ -171,9 +171,8 @@ export function LuckyGiftConfigSections({ appOptions, experimentMode = false, fo
|
|||||||
onChange={(event) => onChange("pool_id", event.target.value)}
|
onChange={(event) => onChange("pool_id", event.target.value)}
|
||||||
/>
|
/>
|
||||||
<TextField
|
<TextField
|
||||||
// 实验两组必须同策略族(owner 强制校验):分组会随放量/白名单漂移,
|
// 奖池身份仍被实验锁定,但策略属于每个不可变规则版本;开放选择才能直接对照
|
||||||
// 混合策略会击穿 room saga 对 dynamic_v3 的扣费前拦截。策略迁移走常规发布。
|
// fixed_v2 与 dynamic_v3。切换策略时由表单归一化清理另一代策略的专属字段。
|
||||||
disabled={experimentMode}
|
|
||||||
fullWidth
|
fullWidth
|
||||||
label={<LuckyGiftFieldLabel field="strategy_version" label="策略版本" />}
|
label={<LuckyGiftFieldLabel field="strategy_version" label="策略版本" />}
|
||||||
select
|
select
|
||||||
@ -210,7 +209,11 @@ export function LuckyGiftConfigSections({ appOptions, experimentMode = false, fo
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<p className="ops-field-note">修改奖池 ID 会发布到新奖池,不影响原奖池。</p>
|
<p className="ops-field-note">
|
||||||
|
{experimentMode
|
||||||
|
? "对照组保持当前版本;实验组可选择 fixed_v2 或 dynamic_v3。"
|
||||||
|
: "修改奖池 ID 会发布到新奖池,不影响原奖池。"}
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section
|
<section
|
||||||
@ -318,8 +321,8 @@ export function LuckyGiftConfigSections({ appOptions, experimentMode = false, fo
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<p className="ops-field-note">
|
<p className="ops-field-note">
|
||||||
V2 高水位加权:奖池水位越过阈值后,中奖返奖按系数放大(150 表示 RTP
|
V2 高水位加权:奖池水位越过阈值后,中奖返奖按系数放大(150 表示 RTP 变为原来的
|
||||||
变为原来的 150%),直到水位跌破恢复水位才恢复正常;阈值填 0 表示关闭。
|
150%),直到水位跌破恢复水位才恢复正常;阈值填 0 表示关闭。
|
||||||
</p>
|
</p>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
@ -431,9 +434,7 @@ export function LuckyGiftConfigSections({ appOptions, experimentMode = false, fo
|
|||||||
required
|
required
|
||||||
size="small"
|
size="small"
|
||||||
value={form.jackpot_multipliers}
|
value={form.jackpot_multipliers}
|
||||||
onChange={(event) =>
|
onChange={(event) => onChange("jackpot_multipliers", event.target.value)}
|
||||||
onChange("jackpot_multipliers", event.target.value)
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
<NumberField
|
<NumberField
|
||||||
form={form}
|
form={form}
|
||||||
|
|||||||
@ -12,7 +12,8 @@ export function LuckyGiftExperimentFields({ disabled = false, draft, onChange })
|
|||||||
<h3>实验设置</h3>
|
<h3>实验设置</h3>
|
||||||
<span>
|
<span>
|
||||||
创建实验会把下方配置原子发布为实验组新版本,当前最新启用版本自动成为对照组;按用户 ID
|
创建实验会把下方配置原子发布为实验组新版本,当前最新启用版本自动成为对照组;按用户 ID
|
||||||
哈希分流,放量单调(调大不会把已进入实验组的用户踢回)。实验进行中,该奖池的常规发布会被拒绝。
|
哈希分流,实验组可与对照组选择不同策略(fixed_v2 / dynamic_v3)。放量单调(调大不会把已进入
|
||||||
|
实验组的用户踢回);实验进行中,该奖池的常规发布会被拒绝。
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="ops-form-grid ops-experiment-setup__grid">
|
<div className="ops-form-grid ops-experiment-setup__grid">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user