feat: 装扮购买增加数量输入弹窗(参照补签卡样式)

This commit is contained in:
pllx
2026-04-28 13:12:56 +08:00
parent 2be7e6caef
commit d63aeef45b
+51 -2
View File
@@ -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<string, any>} item 装饰品数据
* @returns {Promise<number|null>} 返回数量,取消返回 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;
}
/**
* 通用数量输入弹窗。
*