From ac2508e8dd75397ba0e6333642c59e7443e89a04 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Sat, 17 Oct 2026 12:35:29 +0800 Subject: [PATCH] feat(huya): raise recharge quantity limit to 10000 --- web/backend/services/huya_runner_recharge.py | 2 +- web/frontend/src/pages/HuyaElitePage.tsx | 20 +++++++++++--------- web/frontend/src/pages/HuyaTasksPage.tsx | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/web/backend/services/huya_runner_recharge.py b/web/backend/services/huya_runner_recharge.py index f5e5f5c..b6dc114 100644 --- a/web/backend/services/huya_runner_recharge.py +++ b/web/backend/services/huya_runner_recharge.py @@ -491,7 +491,7 @@ class RechargeMixin: return count = self._to_int(self.payload.get("count")) or 1 - count = max(1, min(count, 999)) + count = max(1, min(count, 10000)) pay_channel = self._normalize_pay_channel( self.payload.get("pay_channel") or config_info.get("pay_channel") ) diff --git a/web/frontend/src/pages/HuyaElitePage.tsx b/web/frontend/src/pages/HuyaElitePage.tsx index e49b217..79b07c0 100644 --- a/web/frontend/src/pages/HuyaElitePage.tsx +++ b/web/frontend/src/pages/HuyaElitePage.tsx @@ -29,6 +29,8 @@ const ELITE_SPU_KEY = 'huya_elite_elite_spu'; // 与后端 ELITE_HANDBOOK_SPU_IDS 对齐:精英宝典单独一块,不和其他开通商品混在一个下拉里 const ELITE_HANDBOOK_SPU_IDS = ['hy-8328015', 'hy-5879340', 'hy-3845257', 'hy-2947756']; const ELITE_HANDBOOK_NAME_KEYWORD = '精英宝典'; +// 单个账号一次可开通的份数上限(与后端 clamp 对齐) +const RECHARGE_COUNT_MAX = 10000; const TASK_LABELS: Record = { query_act_tasks: '读取宝典任务', get_bind_qr: '获取绑定二维码', query_game_name: '查询游戏角色', @@ -66,10 +68,10 @@ function savedRechargeSpu(): string { return localStorage.getItem(RECHARGE_SPU_KEY) || ''; } -/** 上次填的开通数量(后端 clamp 1~999)。 */ +/** 上次填的开通数量(后端 clamp 1~10000)。 */ function savedRechargeCount(): number { const value = Number(localStorage.getItem(RECHARGE_COUNT_KEY)); - return Number.isInteger(value) && value >= 1 && value <= 999 ? value : 1; + return Number.isInteger(value) && value >= 1 && value <= RECHARGE_COUNT_MAX ? value : 1; } /** 上次选的精英宝典商品(就一个时基本用不上)。 */ @@ -173,7 +175,7 @@ export default function HuyaElitePage() { const [selectedRechargeSpu, setSelectedRechargeSpu] = useState(savedRechargeSpu); // 精英宝典单独一块:和自己的商品选择分开记 const [selectedEliteSpu, setSelectedEliteSpu] = useState(savedEliteSpu); - // 开通/充值数量:一个账号按这个份数下单(后端 payload.count,1~999),记住上次填的值 + // 开通/充值数量:一个账号按这个份数下单(后端 payload.count,1~10000),记住上次填的值 const [rechargeCount, setRechargeCount] = useState(savedRechargeCount); const [search, setSearch] = useState(''); const [loading, setLoading] = useState(false); @@ -266,12 +268,12 @@ export default function HuyaElitePage() { const eliteRechargeGoods = rechargeGoodsSorted.filter(isEliteHandbookGood); const otherRechargeGoods = rechargeGoodsSorted.filter((item) => !isEliteHandbookGood(item)); const selectedEliteGoods = eliteRechargeGoods.find((item) => item.spu_id === selectedEliteSpu) || eliteRechargeGoods[0]; - const rechargeEliteLimit = Math.max(1, Math.min(999, selectedEliteGoods?.buy_limit || 999)); + const rechargeEliteLimit = Math.max(1, Math.min(RECHARGE_COUNT_MAX, selectedEliteGoods?.buy_limit || RECHARGE_COUNT_MAX)); // 其他开通商品的数量:上限取商品的 buy_limit(限购商品只能 1 份), - // 下单时作为后端 payload.count(1~999,走 createOrder 的 item_count)。 + // 下单时作为后端 payload.count(1~10000,走 createOrder 的 item_count)。 const selectedRechargeGoods = otherRechargeGoods.find((item) => item.spu_id === selectedRechargeSpu); - const rechargeBuyLimit = Math.max(1, Math.min(999, selectedRechargeGoods?.buy_limit || 999)); + const rechargeBuyLimit = Math.max(1, Math.min(RECHARGE_COUNT_MAX, selectedRechargeGoods?.buy_limit || RECHARGE_COUNT_MAX)); const rechargeCountValue = Math.max(1, Math.min(rechargeCount, rechargeBuyLimit)); const rechargeAmountText = selectedRechargeGoods?.price ? `单价 ¥${(selectedRechargeGoods.price / 100).toFixed(2)} × ${rechargeCountValue}` @@ -279,7 +281,7 @@ export default function HuyaElitePage() { // 换商品:按新商品的限购把数量压回合法范围,并把这次选择写进浏览器,下次进来还是它 const selectRechargeGoods = (spu: string) => { - const limit = Math.max(1, Math.min(999, otherRechargeGoods.find((item) => item.spu_id === spu)?.buy_limit || 999)); + const limit = Math.max(1, Math.min(RECHARGE_COUNT_MAX, otherRechargeGoods.find((item) => item.spu_id === spu)?.buy_limit || RECHARGE_COUNT_MAX)); const nextCount = Math.max(1, Math.min(rechargeCount, limit)); setSelectedRechargeSpu(spu); setRechargeCount(nextCount); @@ -457,8 +459,8 @@ export default function HuyaElitePage() {
兑换
({ value: item.spu_id, label: rechargeGoodsLabel(item) }))} style={{ width: '100%' }} /> : {selectedEliteGoods ? `${rechargeGoodsLabel(selectedEliteGoods)}${rechargeEliteLimit < 999 ? ` · 限购 ${rechargeEliteLimit} 份` : ''}` : '列表里还没有精英宝典,请先刷新开通商品'}}
-
其他开通商品
({ value: item.spu_id, label: rechargeGoodsLabel(item) }))} style={{ width: '100%' }} /> : {selectedEliteGoods ? `${rechargeGoodsLabel(selectedEliteGoods)}${rechargeEliteLimit < RECHARGE_COUNT_MAX ? ` · 限购 ${rechargeEliteLimit} 份` : ''}` : '列表里还没有精英宝典,请先刷新开通商品'}}
+
其他开通商品