顶部资料卡新增签到按钮
This commit is contained in:
+77
-46
@@ -15,6 +15,7 @@
|
||||
return;
|
||||
}
|
||||
var activePoll = null;
|
||||
var signinBusy = false;
|
||||
|
||||
function api(path, options) {
|
||||
return window.AksrtRequest.request(path, options || {}).then(function (response) {
|
||||
@@ -36,15 +37,42 @@
|
||||
|
||||
// ===== 签到 =====
|
||||
function initSignin() {
|
||||
var root = document.querySelector('[data-aksrt-signin]');
|
||||
if (!root || root.dataset.aksrtSigninInitialized === '1') return;
|
||||
root.dataset.aksrtSigninInitialized = '1';
|
||||
var status = root.querySelector('[data-signin-status]');
|
||||
var btn = root.querySelector('[data-signin-btn]');
|
||||
if (!btn) return;
|
||||
var buttons = Array.prototype.slice.call(document.querySelectorAll('[data-signin-btn]'));
|
||||
var freshButtons = buttons.filter(function (button) {
|
||||
return button.dataset.aksrtSigninInitialized !== '1';
|
||||
});
|
||||
if (!freshButtons.length) return;
|
||||
freshButtons.forEach(function (button) {
|
||||
button.dataset.aksrtSigninInitialized = '1';
|
||||
});
|
||||
|
||||
function setStatus(text) { if (status) status.textContent = text; }
|
||||
function setStatusHtml(html) { if (status) status.innerHTML = html; }
|
||||
function statuses() {
|
||||
return document.querySelectorAll('[data-signin-status]');
|
||||
}
|
||||
|
||||
function currentButtons() {
|
||||
return document.querySelectorAll('[data-signin-btn]');
|
||||
}
|
||||
|
||||
function setStatus(text) {
|
||||
statuses().forEach(function (status) { status.textContent = text; });
|
||||
}
|
||||
|
||||
function setStatusHtml(html) {
|
||||
statuses().forEach(function (status) { status.innerHTML = html; });
|
||||
}
|
||||
|
||||
function setButtonState(state) {
|
||||
currentButtons().forEach(function (button) {
|
||||
var label = button.querySelector('[data-signin-label]');
|
||||
var text = state === 'done'
|
||||
? button.getAttribute('data-signin-done-label') || '已签到'
|
||||
: (state === 'busy' ? '…' : button.getAttribute('data-signin-idle-label') || '签到');
|
||||
if (label) label.textContent = text;
|
||||
button.disabled = state !== 'idle';
|
||||
button.classList.toggle('is-done', state === 'done');
|
||||
});
|
||||
}
|
||||
|
||||
function refresh() {
|
||||
api('/signin/today').then(function (r) {
|
||||
@@ -57,16 +85,15 @@
|
||||
var j = r.json;
|
||||
if (!j.enabled) {
|
||||
setStatus('签到功能未启用');
|
||||
btn.disabled = true;
|
||||
setButtonState('done');
|
||||
return;
|
||||
}
|
||||
if (j.signed) {
|
||||
setStatusHtml('已签到 <strong>' + j.streak + '</strong> 天 +' + j.reward_today);
|
||||
btn.disabled = true;
|
||||
btn.innerHTML = '已签到';
|
||||
setButtonState('done');
|
||||
} else {
|
||||
setStatusHtml('连续 <strong>' + j.streak + '</strong> 天,+' + j.reward_if_signin);
|
||||
btn.disabled = false;
|
||||
setButtonState('idle');
|
||||
}
|
||||
}).catch(function (err) {
|
||||
if (window.console) console.error('[AKSRT Credits] /signin/today 请求失败:', err);
|
||||
@@ -124,45 +151,49 @@
|
||||
onSuccess();
|
||||
}
|
||||
|
||||
btn.addEventListener('click', function () {
|
||||
btn.disabled = true;
|
||||
btn.innerHTML = '…';
|
||||
freshButtons.forEach(function (button) {
|
||||
button.addEventListener('click', function () {
|
||||
if (signinBusy) return;
|
||||
signinBusy = true;
|
||||
setButtonState('busy');
|
||||
|
||||
triggerCaptcha(function () {
|
||||
doSignin();
|
||||
}, function (msg) {
|
||||
resetCaptcha();
|
||||
if (msg) notyf(msg, 'danger');
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = '签到';
|
||||
});
|
||||
|
||||
function doSignin() {
|
||||
notyf('正在签到…', 'load', '', 'aksrt-balance-signin-toast');
|
||||
api('/signin', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ captcha: collectCaptcha() })
|
||||
}).then(function (r) {
|
||||
if (!r.ok) {
|
||||
resetCaptcha();
|
||||
notyf((r.json && r.json.message) || '签到失败', 'danger', 5, 'aksrt-balance-signin-toast');
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = '签到';
|
||||
return;
|
||||
}
|
||||
notyf('签到成功,获得 ' + r.json.reward + ' 积分(连续 ' + r.json.streak + ' 天)', 'success', 5, 'aksrt-balance-signin-toast');
|
||||
var balanceEls = document.querySelectorAll('[data-credits-value]');
|
||||
balanceEls.forEach(function (el) { el.textContent = r.json.balance.toLocaleString(); });
|
||||
refresh();
|
||||
}).catch(function () {
|
||||
triggerCaptcha(function () {
|
||||
doSignin();
|
||||
}, function (msg) {
|
||||
signinBusy = false;
|
||||
resetCaptcha();
|
||||
notyf('网络错误,请重试', 'danger', 5, 'aksrt-balance-signin-toast');
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = '签到';
|
||||
if (msg) notyf(msg, 'danger');
|
||||
setButtonState('idle');
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function doSignin() {
|
||||
notyf('正在签到…', 'load', '', 'aksrt-balance-signin-toast');
|
||||
api('/signin', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ captcha: collectCaptcha() })
|
||||
}).then(function (r) {
|
||||
signinBusy = false;
|
||||
if (!r.ok) {
|
||||
resetCaptcha();
|
||||
notyf((r.json && r.json.message) || '签到失败', 'danger', 5, 'aksrt-balance-signin-toast');
|
||||
setButtonState('idle');
|
||||
return;
|
||||
}
|
||||
notyf(r.json.message || '签到成功', 'success', 5, 'aksrt-balance-signin-toast');
|
||||
var balanceEls = document.querySelectorAll('[data-credits-value]');
|
||||
balanceEls.forEach(function (el) { el.textContent = r.json.balance.toLocaleString(); });
|
||||
setButtonState('done');
|
||||
refresh();
|
||||
}).catch(function () {
|
||||
signinBusy = false;
|
||||
resetCaptcha();
|
||||
notyf('网络错误,请重试', 'danger', 5, 'aksrt-balance-signin-toast');
|
||||
setButtonState('idle');
|
||||
});
|
||||
}
|
||||
|
||||
refresh();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user