diff --git a/assets/js/cms-download.js b/assets/js/cms-download.js index 47d1ad1d..aab2de9d 100644 --- a/assets/js/cms-download.js +++ b/assets/js/cms-download.js @@ -160,6 +160,12 @@ if (data && data.credits_url) { extra = '' + tt('my_points', '我的积分') + ''; } + } else if (code === 'aksrt_download_limit') { + title = tt('quota_over', '今日免费额度已用完'); + msg = msg || tt('quota_hint', '您今日下载免费资源个数已超限,请明日再下载。'); + if (data && data.allow_limit_over && data.post_id) { + extra = ''; + } } else if (code === 'aksrt_captcha_failed') { title = tt('captcha_fail', '验证失败'); msg = msg || tt('captcha_retry', '人机验证失败,请重试。'); @@ -178,8 +184,9 @@ if (openCashierBtn) { openCashierBtn.addEventListener('click', function () { const pid = parseInt(openCashierBtn.getAttribute('data-aksrt-open-cashier'), 10) || 0; + const pt = openCashierBtn.getAttribute('data-price-type') || ''; close(); - if (pid) openCashier(pid, returnFocusEl); + if (pid) openCashier(pid, returnFocusEl, pt); }); } } @@ -321,6 +328,29 @@ }); } + function pollOrderPaid(orderNumber, returnFocusEl) { + if (!orderNumber) return; + let tries = 0; + const maxTries = 40; + const timer = setInterval(function () { + tries += 1; + fetch(REST_BASE + '/pay/content/order/' + encodeURIComponent(orderNumber), { + method: 'GET', + credentials: 'same-origin', + headers: restHeaders(), + }) + .then(function (resp) { return resp.json().then(function (j) { return { ok: resp.ok, json: j }; }); }) + .then(function (r) { + if (r.ok && r.json && r.json.paid) { + clearInterval(timer); + window.location.reload(); + } + }) + .catch(function () { /* ignore */ }); + if (tries >= maxTries) clearInterval(timer); + }, 3000); + } + // ===== 积分不足按钮(前置拦截,不发请求) ===== function showLowCreditModal(button) { const balance = parseInt(button.getAttribute('data-balance'), 10) || 0; @@ -336,15 +366,18 @@ }; } - function openCashier(postId, returnFocusEl) { + function openCashier(postId, returnFocusEl, priceType) { if (!postId) return; + priceType = priceType || ''; open( '
' + tt('loading', '加载中…') + '
', returnFocusEl ); - fetch(REST_BASE + '/pay/content/' + postId, { + var previewUrl = REST_BASE + '/pay/content/' + postId; + if (priceType) previewUrl += (previewUrl.indexOf('?') >= 0 ? '&' : '?') + 'price_type=' + encodeURIComponent(priceType); + fetch(previewUrl, { method: 'GET', credentials: 'same-origin', headers: restHeaders(), @@ -369,7 +402,9 @@ renderError((r.json && r.json.message) || tt('default_err', '请稍后重试'), data, returnFocusEl, code); return; } - renderCashier(r.json, returnFocusEl); + var prev = r.json || {}; + if (priceType) prev._price_type = priceType; + renderCashier(prev, returnFocusEl); }) .catch(function () { renderError(tt('network_err', '网络错误,请稍后重试'), {}, returnFocusEl); @@ -392,8 +427,15 @@ } const isPoints = preview.pay_modo === 'points'; - const amountLabel = escapeHtml(preview.amount_label || ''); - const baseLabel = escapeHtml(preview.base_label || ''); + const priceType = (preview._price_type || preview.price_type || ''); + let amountLabel = escapeHtml(preview.amount_label || ''); + let baseLabel = escapeHtml(preview.base_label || ''); + if (priceType === 'download_limit_over' && preview.download_limit_over_label) { + amountLabel = escapeHtml(preview.download_limit_over_label); + baseLabel = amountLabel; + preview.amount = preview.download_limit_over_price; + preview.base = preview.download_limit_over_price; + } const title = escapeHtml(preview.title || ''); const typeLabel = escapeHtml(preview.pay_type_label || ''); const balance = typeof preview.balance === 'number' ? preview.balance : 0; @@ -425,7 +467,7 @@ return; } body += '' + escapeHtml(data.message || tt('scan_hint', '请使用手机扫码完成支付,支付后刷新页面。')) + '
' + - '' + escapeHtml(data.qr_content || '') + '
' + escapeHtml(data.qr_content || '') + '