Initial commit
This commit is contained in:
+161
@@ -0,0 +1,161 @@
|
||||
document.querySelectorAll('[data-amount]').forEach(function (button) {
|
||||
button.addEventListener('click', function () {
|
||||
var input = button.closest('form').querySelector('input[name="amount"]');
|
||||
if (input) input.value = button.dataset.amount;
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll('.alert').forEach(function (alert) {
|
||||
window.setTimeout(function () { alert.style.display = 'none'; }, 5000);
|
||||
});
|
||||
|
||||
document.querySelectorAll('.badge.rewarded').forEach(function (badge) {
|
||||
badge.classList.add('approved');
|
||||
});
|
||||
|
||||
document.querySelectorAll('[data-copy]').forEach(function (button) {
|
||||
button.addEventListener('click', function () {
|
||||
var input = document.querySelector(button.dataset.copy);
|
||||
if (!input) return;
|
||||
var original = button.textContent;
|
||||
var copied = function () {
|
||||
button.textContent = '已复制';
|
||||
window.setTimeout(function () { button.textContent = original; }, 1500);
|
||||
};
|
||||
if (navigator.clipboard && window.isSecureContext) {
|
||||
navigator.clipboard.writeText(input.value).then(copied);
|
||||
return;
|
||||
}
|
||||
input.select();
|
||||
document.execCommand('copy');
|
||||
copied();
|
||||
});
|
||||
});
|
||||
|
||||
var adminNavigation = document.querySelector('.admin-side nav');
|
||||
if (adminNavigation && !adminNavigation.querySelector('a[href="/admin/audits.php"]')) {
|
||||
var settingsLink = adminNavigation.querySelector('a[href*="view=settings"]');
|
||||
var auditLink = document.createElement('a');
|
||||
auditLink.href = '/admin/audits.php';
|
||||
auditLink.textContent = '操作审计';
|
||||
adminNavigation.insertBefore(auditLink, settingsLink || null);
|
||||
}
|
||||
|
||||
var cardManager = document.querySelector('[data-card-manager]');
|
||||
if (cardManager) {
|
||||
var cardStyles = document.createElement('link');
|
||||
cardStyles.rel = 'stylesheet';
|
||||
cardStyles.href = '/assets/cards-admin.css?v=20260722-2';
|
||||
document.head.appendChild(cardStyles);
|
||||
|
||||
var cardInputs = Array.prototype.slice.call(cardManager.querySelectorAll('.card-select:not(:disabled)'));
|
||||
var cardToggleAll = cardManager.querySelector('[data-card-toggle-all]');
|
||||
var cardSelectAll = cardManager.querySelector('[data-card-select-all]');
|
||||
var cardCopy = cardManager.querySelector('[data-card-copy]');
|
||||
var cardExport = cardManager.querySelector('[data-card-export]');
|
||||
var cardCount = cardManager.querySelector('[data-card-selected-count]');
|
||||
|
||||
function selectedCards() {
|
||||
return cardInputs.filter(function (input) { return input.checked; });
|
||||
}
|
||||
|
||||
function updateCardSelection() {
|
||||
var selected = selectedCards();
|
||||
cardCount.textContent = '已选 ' + selected.length + ' 张';
|
||||
cardCopy.disabled = selected.length === 0;
|
||||
cardExport.disabled = selected.length === 0;
|
||||
cardSelectAll.disabled = cardInputs.length === 0;
|
||||
cardSelectAll.textContent = selected.length === cardInputs.length && cardInputs.length ? '取消全选' : '全选可用卡';
|
||||
cardToggleAll.disabled = cardInputs.length === 0;
|
||||
cardToggleAll.checked = selected.length === cardInputs.length && cardInputs.length > 0;
|
||||
cardToggleAll.indeterminate = selected.length > 0 && selected.length < cardInputs.length;
|
||||
}
|
||||
|
||||
function setCardButtonFeedback(button, message) {
|
||||
var original = button.textContent;
|
||||
button.textContent = message;
|
||||
window.setTimeout(function () { button.textContent = original; }, 1500);
|
||||
}
|
||||
|
||||
function fallbackCopy(text) {
|
||||
var textarea = document.createElement('textarea');
|
||||
textarea.value = text;
|
||||
textarea.setAttribute('readonly', '');
|
||||
textarea.style.position = 'fixed';
|
||||
textarea.style.left = '-9999px';
|
||||
document.body.appendChild(textarea);
|
||||
textarea.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(textarea);
|
||||
}
|
||||
|
||||
cardInputs.forEach(function (input) { input.addEventListener('change', updateCardSelection); });
|
||||
cardSelectAll.addEventListener('click', function () {
|
||||
var shouldSelect = selectedCards().length !== cardInputs.length;
|
||||
cardInputs.forEach(function (input) { input.checked = shouldSelect; });
|
||||
updateCardSelection();
|
||||
});
|
||||
cardToggleAll.addEventListener('change', function () {
|
||||
cardInputs.forEach(function (input) { input.checked = cardToggleAll.checked; });
|
||||
updateCardSelection();
|
||||
});
|
||||
cardCopy.addEventListener('click', function () {
|
||||
var text = selectedCards().map(function (input) { return input.dataset.cardCode; }).join('\n');
|
||||
if (!text) return;
|
||||
if (navigator.clipboard && window.isSecureContext) {
|
||||
navigator.clipboard.writeText(text).then(function () { setCardButtonFeedback(cardCopy, '已复制'); }, function () {
|
||||
fallbackCopy(text);
|
||||
setCardButtonFeedback(cardCopy, '已复制');
|
||||
});
|
||||
} else {
|
||||
fallbackCopy(text);
|
||||
setCardButtonFeedback(cardCopy, '已复制');
|
||||
}
|
||||
});
|
||||
cardExport.addEventListener('click', function () {
|
||||
var rows = [['卡号', '类型', '面额', '状态', '生成时间']];
|
||||
selectedCards().forEach(function (input) {
|
||||
rows.push([input.dataset.cardCode, input.dataset.cardType, input.dataset.cardAmount, input.dataset.cardStatus, input.dataset.cardCreated]);
|
||||
});
|
||||
if (rows.length === 1) return;
|
||||
var csv = rows.map(function (row) {
|
||||
return row.map(function (value) { return '"' + String(value).replace(/"/g, '""') + '"'; }).join(',');
|
||||
}).join('\r\n');
|
||||
var url = URL.createObjectURL(new Blob(['\ufeff' + csv], {type: 'text/csv;charset=utf-8'}));
|
||||
var download = document.createElement('a');
|
||||
var stamp = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
|
||||
download.href = url;
|
||||
download.download = 'recharge-cards-' + stamp + '.csv';
|
||||
document.body.appendChild(download);
|
||||
download.click();
|
||||
document.body.removeChild(download);
|
||||
URL.revokeObjectURL(url);
|
||||
setCardButtonFeedback(cardExport, '已导出');
|
||||
});
|
||||
updateCardSelection();
|
||||
}
|
||||
|
||||
var cardCreateForm = document.querySelector('[data-card-create-form]');
|
||||
if (cardCreateForm) {
|
||||
var cardTypeInput = cardCreateForm.querySelector('[data-card-type]');
|
||||
var cardCountInput = cardCreateForm.querySelector('[data-card-count]');
|
||||
function updateCardCountInput() {
|
||||
if (cardTypeInput.value === 'shared') {
|
||||
cardCountInput.dataset.singleCount = cardCountInput.value;
|
||||
cardCountInput.value = '1';
|
||||
cardCountInput.readOnly = true;
|
||||
} else {
|
||||
cardCountInput.readOnly = false;
|
||||
if (cardCountInput.value === '1' && cardCountInput.dataset.singleCount) cardCountInput.value = cardCountInput.dataset.singleCount;
|
||||
}
|
||||
}
|
||||
cardTypeInput.addEventListener('change', updateCardCountInput);
|
||||
updateCardCountInput();
|
||||
}
|
||||
|
||||
if (document.querySelector('.game-config')) {
|
||||
var gameAdminStyles = document.createElement('link');
|
||||
gameAdminStyles.rel = 'stylesheet';
|
||||
gameAdminStyles.href = '/assets/game-admin.css?v=20260721';
|
||||
document.head.appendChild(gameAdminStyles);
|
||||
}
|
||||
Reference in New Issue
Block a user