fix: configure referral bonuses per tariff period

This commit is contained in:
3252a8
2026-05-29 22:30:31 +03:00
parent cab963dcdc
commit 6803c7801f
23 changed files with 604 additions and 90 deletions
@@ -501,7 +501,13 @@
<AdminButton
size="sm"
onclick={() =>
tariffsStore.addDraftRow("periodRows", { months: 1, rub: "", stars: "" })}
tariffsStore.addDraftRow("periodRows", {
months: 1,
rub: "",
stars: "",
referral_inviter: "",
referral_referee: "",
})}
>
<Plus size={13} />
{at("tariff_btn_period", {}, "Период")}
@@ -517,14 +523,16 @@
</p>
{:else}
<div class="admin-row-editor">
<div class="admin-row-editor-line admin-row-editor-4 admin-row-editor-header">
<div class="admin-row-editor-line admin-row-editor-6 admin-row-editor-header">
<span>{at("tariff_col_period_months", {}, "Срок, мес.")}</span>
<span>{at("tariff_col_price_rub", {}, "Цена, ₽")}</span>
<span>{at("tariff_col_price_stars_full", {}, "Цена, ⭐ Stars")}</span>
<span>{at("tariff_col_ref_inviter", {}, "Бонус приглашающему")}</span>
<span>{at("tariff_col_ref_referee", {}, "Бонус приглашённому")}</span>
<span></span>
</div>
{#each tariffDraft.periodRows as row, index}
<div class="admin-row-editor-line admin-row-editor-4">
<div class="admin-row-editor-line admin-row-editor-6">
<input
class="input"
type="number"
@@ -551,6 +559,24 @@
bind:value={row.stars}
aria-label={at("tariff_label_price_stars", {}, "Цена в Telegram Stars")}
/>
<input
class="input"
type="number"
min="0"
step="1"
placeholder="3"
bind:value={row.referral_inviter}
aria-label={at("tariff_label_ref_inviter", {}, "Бонус приглашающему")}
/>
<input
class="input"
type="number"
min="0"
step="1"
placeholder="1"
bind:value={row.referral_referee}
aria-label={at("tariff_label_ref_referee", {}, "Бонус приглашённому")}
/>
<AdminButton
size="sm"
variant="danger"
@@ -36,10 +36,38 @@
const TRIAL_RESET_KEYS = ["TRIAL_TRAFFIC_STRATEGY"];
const TRIAL_SQUAD_KEYS = ["TRIAL_SQUAD_UUIDS"];
const LEGACY_PERIODS = [
["1", "MONTH_1_ENABLED", "RUB_PRICE_1_MONTH", "STARS_PRICE_1_MONTH"],
["3", "MONTH_3_ENABLED", "RUB_PRICE_3_MONTHS", "STARS_PRICE_3_MONTHS"],
["6", "MONTH_6_ENABLED", "RUB_PRICE_6_MONTHS", "STARS_PRICE_6_MONTHS"],
["12", "MONTH_12_ENABLED", "RUB_PRICE_12_MONTHS", "STARS_PRICE_12_MONTHS"],
[
"1",
"MONTH_1_ENABLED",
"RUB_PRICE_1_MONTH",
"STARS_PRICE_1_MONTH",
"REFERRAL_BONUS_DAYS_INVITER_1_MONTH",
"REFERRAL_BONUS_DAYS_REFEREE_1_MONTH",
],
[
"3",
"MONTH_3_ENABLED",
"RUB_PRICE_3_MONTHS",
"STARS_PRICE_3_MONTHS",
"REFERRAL_BONUS_DAYS_INVITER_3_MONTHS",
"REFERRAL_BONUS_DAYS_REFEREE_3_MONTHS",
],
[
"6",
"MONTH_6_ENABLED",
"RUB_PRICE_6_MONTHS",
"STARS_PRICE_6_MONTHS",
"REFERRAL_BONUS_DAYS_INVITER_6_MONTHS",
"REFERRAL_BONUS_DAYS_REFEREE_6_MONTHS",
],
[
"12",
"MONTH_12_ENABLED",
"RUB_PRICE_12_MONTHS",
"STARS_PRICE_12_MONTHS",
"REFERRAL_BONUS_DAYS_INVITER_12_MONTHS",
"REFERRAL_BONUS_DAYS_REFEREE_12_MONTHS",
],
];
const LEGACY_TARIFF_SETTING_KEYS = [
...LEGACY_PERIODS.flatMap((row) => row.slice(1)),
@@ -794,8 +822,10 @@
<span>{at("tariffs_legacy_enabled", {}, "Enabled")}</span>
<span>{at("payment_rub", {}, "RUB")}</span>
<span>{at("payment_stars", {}, "Stars")}</span>
<span>{at("tariffs_legacy_ref_inviter", {}, "Inviter")}</span>
<span>{at("tariffs_legacy_ref_referee", {}, "Friend")}</span>
</div>
{#each LEGACY_PERIODS as [months, enabledKey, rubKey, starsKey]}
{#each LEGACY_PERIODS as [months, enabledKey, rubKey, starsKey, inviterKey, refereeKey]}
<div class="admin-legacy-tariff-row">
<strong>{months} {at("months_short", {}, "mo")}</strong>
<div class="admin-setting-switch">
@@ -823,6 +853,22 @@
value={valueForKey(starsKey, settingsDirty, settingsFieldMap)}
oninput={(event) => setSetting(starsKey, event.currentTarget.value)}
/>
<input
class="input"
type="number"
min="0"
step="1"
value={valueForKey(inviterKey, settingsDirty, settingsFieldMap)}
oninput={(event) => setSetting(inviterKey, event.currentTarget.value)}
/>
<input
class="input"
type="number"
min="0"
step="1"
value={valueForKey(refereeKey, settingsDirty, settingsFieldMap)}
oninput={(event) => setSetting(refereeKey, event.currentTarget.value)}
/>
</div>
{/each}
</div>