From d63aeef45b29de9fc68f1bd062508cefa47037a9 Mon Sep 17 00:00:00 2001 From: pllx Date: Tue, 28 Apr 2026 13:12:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A3=85=E6=89=AE=E8=B4=AD=E4=B9=B0?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E9=87=8F=E8=BE=93=E5=85=A5=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=EF=BC=88=E5=8F=82=E7=85=A7=E8=A1=A5=E7=AD=BE=E5=8D=A1?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/chat-room/shop-controls.js | 53 ++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/resources/js/chat-room/shop-controls.js b/resources/js/chat-room/shop-controls.js index d6fa2f4..e7d9e4a 100644 --- a/resources/js/chat-room/shop-controls.js +++ b/resources/js/chat-room/shop-controls.js @@ -548,9 +548,17 @@ async function confirmAndBuyItem(item) { } } - const validityText = buildValidityText(item); const isDecoration = DECORATION_TYPE_TO_SLOT[item.type] && item.type !== "sign_repair"; - const stackingHint = isDecoration ? "\\n\\n💡 已激活的同款续购自动叠加天数,可多次购买" : ""; + if (isDecoration) { + const unitPrice = Number(item.price || 0); + quantity = await promptDecorationQuantity(item); + if (quantity === null || quantity === undefined) { + return; + } + } + + const validityText = buildValidityText(item); + const stackingHint = isDecoration ? "\\n💡 已激活同款续购自动叠加天数,可多次购买" : ""; const confirmMessage = `确认花费 💰 ${Number(Number(item.price || 0) * quantity).toLocaleString()} 金币购买\\n【${item.name}】${quantity > 1 ? ` × ${quantity}` : ""}${validityText ? `\\n${validityText}` : ""}${stackingHint}\\n\\n确定购买吗?`; const confirmed = await confirmShopPurchase(confirmMessage); @@ -559,6 +567,47 @@ async function confirmAndBuyItem(item) { } } +/** + * 装饰品数量输入弹窗(参照补签卡样式)。 + * + * @param {Record} item 装饰品数据 + * @returns {Promise} 返回数量,取消返回 null + */ +async function promptDecorationQuantity(item) { + const unitPrice = Number(item.price || 0); + const validityText = buildValidityText(item); + const validHint = validityText ? `\\n有效期:${validityText}` : ""; + const promptPromise = window.chatDialog?.prompt( + `请输入要购买的份数(1-99份):\\n单价 ${unitPrice.toLocaleString()} 金币${validHint}\\n💡 已激活同款续购自动叠加天数,可多次购买`, + '1', + `购买 ${item.name}`, + '#7c3aed', + ); + + const inputEl = document.getElementById('global-dialog-input'); + const previousInputStyle = inputEl?.getAttribute('style') || ''; + + if (inputEl) { + inputEl.style.minHeight = '40px'; + inputEl.style.height = '40px'; + inputEl.style.resize = 'none'; + inputEl.style.overflow = 'hidden'; + } + + const rawQuantity = await promptPromise; + + if (inputEl) inputEl.setAttribute('style', previousInputStyle); + if (rawQuantity === null || rawQuantity === undefined) return null; + + const quantity = Number.parseInt(String(rawQuantity).trim(), 10); + if (!Number.isInteger(quantity) || quantity < 1 || quantity > 99) { + window.chatDialog?.alert('购买数量必须是 1 到 99 之间的整数。', '数量不正确', '#cc4444'); + return null; + } + + return quantity; +} + /** * 通用数量输入弹窗。 *