117 lines
3.7 KiB
JavaScript
117 lines
3.7 KiB
JavaScript
/**
|
|
* AKSRT Revenue Center Frontend
|
|
*
|
|
* @package AKSRT
|
|
*/
|
|
(function () {
|
|
'use strict';
|
|
|
|
var page = document.querySelector('[data-aksrt-revenue-page]');
|
|
var data = window.aksrtData || {};
|
|
if (!page || !data) return;
|
|
|
|
var rest = data.restUrl || data.apiUrl || ((data.siteUrl || '').replace(/\/$/, '') + '/wp-json/aksrt/v1');
|
|
if (!rest) return;
|
|
if (window.location.protocol === 'https:' && rest.substring(0, 5) === 'http:') {
|
|
rest = 'https:' + rest.substring(5);
|
|
}
|
|
rest = rest.replace(/\/?$/, '');
|
|
|
|
var form = page.querySelector('[data-aksrt-withdraw-form]');
|
|
var message = page.querySelector('[data-aksrt-withdraw-msg]');
|
|
var balance = page.querySelector('[data-aksrt-revenue-balance]');
|
|
var list = page.querySelector('[data-aksrt-withdraw-list]');
|
|
if (!form) return;
|
|
|
|
function setMessage(text, error) {
|
|
if (!message) return;
|
|
message.hidden = false;
|
|
message.textContent = text;
|
|
message.classList.toggle('is-error', !!error);
|
|
}
|
|
|
|
function request(payload) {
|
|
return fetch(rest + '/earnings/withdrawals', {
|
|
method: 'POST',
|
|
credentials: 'same-origin',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-WP-Nonce': data.restNonce || data.nonce || ''
|
|
},
|
|
body: JSON.stringify(payload)
|
|
}).then(function (response) {
|
|
return response.json().catch(function () {
|
|
return { message: '服务器返回了非 JSON 响应' };
|
|
}).then(function (json) {
|
|
return { ok: response.ok, json: json };
|
|
});
|
|
});
|
|
}
|
|
|
|
form.addEventListener('submit', function (event) {
|
|
event.preventDefault();
|
|
var values = new FormData(form);
|
|
var amount = Number(values.get('amount') || 0);
|
|
var method = String(values.get('method') || 'alipay');
|
|
var account = String(values.get('account') || values.get('account_info') || '').trim();
|
|
var minimum = Number(page.getAttribute('data-min-amount') || 50);
|
|
if (amount < minimum) {
|
|
setMessage('最低提现金额为 ' + minimum, true);
|
|
return;
|
|
}
|
|
if (!account) {
|
|
setMessage('请填写收款账户信息', true);
|
|
return;
|
|
}
|
|
|
|
var button = form.querySelector('button[type="submit"]');
|
|
if (button) {
|
|
button.disabled = true;
|
|
button.textContent = '提交中…';
|
|
}
|
|
request({ amount: amount, method: method, account: account }).then(function (result) {
|
|
if (button) {
|
|
button.disabled = false;
|
|
button.textContent = '提交提现申请';
|
|
}
|
|
if (!result.ok || !result.json || !result.json.success) {
|
|
setMessage((result.json && result.json.message) || '提现失败,请稍后重试。', true);
|
|
return;
|
|
}
|
|
var response = result.json.data || {};
|
|
setMessage(response.message || '提现申请已提交。', false);
|
|
if (balance && typeof response.wallet_balance !== 'undefined') {
|
|
balance.textContent = '¥' + Number(response.wallet_balance).toFixed(2);
|
|
}
|
|
if (list) {
|
|
var item = document.createElement('div');
|
|
item.className = 'aksrt-revenue-page__item';
|
|
var main = document.createElement('div');
|
|
var amountEl = document.createElement('strong');
|
|
amountEl.textContent = '¥' + Number(response.amount || amount).toFixed(2);
|
|
var methodEl = document.createElement('span');
|
|
methodEl.textContent = method;
|
|
main.appendChild(amountEl);
|
|
main.appendChild(methodEl);
|
|
var state = document.createElement('div');
|
|
var pending = document.createElement('span');
|
|
pending.textContent = 'pending';
|
|
var time = document.createElement('time');
|
|
time.textContent = 'just now';
|
|
state.appendChild(pending);
|
|
state.appendChild(time);
|
|
item.appendChild(main);
|
|
item.appendChild(state);
|
|
list.insertBefore(item, list.firstChild);
|
|
}
|
|
form.reset();
|
|
}).catch(function () {
|
|
if (button) {
|
|
button.disabled = false;
|
|
button.textContent = '提交提现申请';
|
|
}
|
|
setMessage('网络错误,请稍后重试。', true);
|
|
});
|
|
});
|
|
})();
|