feat: 装扮购买增加数量输入弹窗(参照补签卡样式)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用数量输入弹窗。
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user