257 lines
9.2 KiB
JavaScript
257 lines
9.2 KiB
JavaScript
![]() |
// 密钥检测相关功能
|
|||
|
function initKeyCheck() {
|
|||
|
const iidInput = document.getElementById('iid');
|
|||
|
const indicator = document.getElementById('iid-indicator');
|
|||
|
const checkBtn = document.getElementById('btn-get-cid');
|
|||
|
|
|||
|
if (iidInput) {
|
|||
|
iidInput.addEventListener('input', function() {
|
|||
|
let value = this.value.replace(/[^\w]/g,'');
|
|||
|
|
|||
|
if (value.length === 25) {
|
|||
|
indicator.textContent = '5位数';
|
|||
|
indicator.className = 'badge badge-blue';
|
|||
|
checkBtn.disabled = false;
|
|||
|
this.className = 'form-input';
|
|||
|
} else {
|
|||
|
this.value = value;
|
|||
|
checkBtn.disabled = true;
|
|||
|
indicator.textContent = value.length > 0 ? '错误Key' : '未输入';
|
|||
|
indicator.className = value.length > 0 ? 'badge badge-orange' : 'badge badge-black';
|
|||
|
this.className = 'form-input ' + (value.length > 0 ? 'invalid' : 'noiid');
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 确认ID检测相关功能
|
|||
|
function initCidCheck() {
|
|||
|
const iidInput = document.getElementById('iid');
|
|||
|
const indicator = document.getElementById('iid-indicator');
|
|||
|
const checkBtn = document.getElementById('btn-get-cid');
|
|||
|
|
|||
|
if (iidInput) {
|
|||
|
iidInput.addEventListener('input', function() {
|
|||
|
let value = this.value.replace(/\D/g, '');
|
|||
|
|
|||
|
if (value.length === 54 || value.length === 63) {
|
|||
|
this.value = value.match(new RegExp('.{1,' + value.length / 9 + '}', 'g')).join('-');
|
|||
|
indicator.textContent = value.length / 9 + '位数';
|
|||
|
indicator.className = 'badge badge-blue';
|
|||
|
checkBtn.disabled = false;
|
|||
|
this.className = 'form-input';
|
|||
|
} else {
|
|||
|
this.value = value;
|
|||
|
checkBtn.disabled = true;
|
|||
|
indicator.textContent = value.length > 0 ? '错误IID' : '没有IID';
|
|||
|
indicator.className = value.length > 0 ? 'badge badge-orange' : 'badge badge-black';
|
|||
|
this.className = 'form-input ' + (value.length > 0 ? 'invalid' : 'noiid');
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 加密的API配置
|
|||
|
const _0x2f8a = ['aHR0cHM6Ly9waWRrZXkuY29tL2FqYXgvcGlkbXNfYXBp', 'aHR0cHM6Ly9waWRrZXkuY29tL2FqYXgvY2lkbXNfYXBp', 'blZIQnozUklzSHBYSG9mTHYzQjg5aUZLOA=='];
|
|||
|
const _0xd3c9 = str => atob(str);
|
|||
|
|
|||
|
// 检测密钥
|
|||
|
function checkKey() {
|
|||
|
const iid = document.getElementById('iid').value;
|
|||
|
const checkBtn = document.getElementById('btn-get-cid');
|
|||
|
const loadingIndicator = document.getElementById('loading-indicator');
|
|||
|
|
|||
|
checkBtn.disabled = true;
|
|||
|
checkBtn.textContent = '检测中';
|
|||
|
loadingIndicator.style.display = 'flex';
|
|||
|
|
|||
|
// 清空结果
|
|||
|
document.getElementById('pid-name').value = '';
|
|||
|
document.getElementById('pid-prd').value = '';
|
|||
|
document.getElementById('pid-code').value = '';
|
|||
|
document.getElementById('pid-time').value = '';
|
|||
|
|
|||
|
fetch(`${_0xd3c9(_0x2f8a[0])}?keys=${iid}&justforcheck=0&apikey=${_0xd3c9(_0x2f8a[2])}`)
|
|||
|
.then(response => response.json())
|
|||
|
.then(data => {
|
|||
|
if (data[0].is_retail === 1 || data[0].is_retail === 2) {
|
|||
|
document.getElementById('pid-name').value = data[0].keyname_with_dash;
|
|||
|
document.getElementById('pid-prd').value = data[0].prd;
|
|||
|
|
|||
|
if (data[0].is_retail === 2 && data[0].remaining >= 0) {
|
|||
|
document.getElementById('pid-code').value = data[0].remaining;
|
|||
|
document.getElementById('err').textContent = '次数';
|
|||
|
} else {
|
|||
|
document.getElementById('pid-code').value = data[0].errorcode;
|
|||
|
document.getElementById('err').textContent = '代码';
|
|||
|
}
|
|||
|
|
|||
|
document.getElementById('pid-time').value = data[0].datetime_checked_done;
|
|||
|
} else {
|
|||
|
document.getElementById('pid-name').value = '请求超时,请稍后重试';
|
|||
|
}
|
|||
|
})
|
|||
|
.catch(() => {
|
|||
|
showError('请求超时,请稍后重试');
|
|||
|
})
|
|||
|
.finally(() => {
|
|||
|
checkBtn.disabled = false;
|
|||
|
checkBtn.textContent = '检测密钥';
|
|||
|
loadingIndicator.style.display = 'none';
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// 获取确认ID
|
|||
|
function getCid() {
|
|||
|
const iid = document.getElementById('iid').value;
|
|||
|
const checkBtn = document.getElementById('btn-get-cid');
|
|||
|
const loadingIndicator = document.getElementById('loading-indicator');
|
|||
|
|
|||
|
checkBtn.disabled = true;
|
|||
|
checkBtn.textContent = '获取中';
|
|||
|
loadingIndicator.style.display = 'flex';
|
|||
|
|
|||
|
// 清空结果
|
|||
|
document.getElementById('cid-cont').value = '';
|
|||
|
document.getElementById('cid-split').value = '';
|
|||
|
|
|||
|
fetch(`${_0xd3c9(_0x2f8a[1])}?iids=${iid}&justforcheck=0&apikey=${_0xd3c9(_0x2f8a[2])}`)
|
|||
|
.then(response => response.json())
|
|||
|
.then(data => {
|
|||
|
const cidCont = document.getElementById('cid-cont');
|
|||
|
const cidSplit = document.getElementById('cid-split');
|
|||
|
|
|||
|
if (data.typeiid === 1) {
|
|||
|
cidCont.value = data.confirmation_id_no_dash;
|
|||
|
cidSplit.value = data.confirmation_id_with_dash;
|
|||
|
} else if (data.typeiid === 4) {
|
|||
|
cidCont.value = data.short_result === "IID is not correct!!"
|
|||
|
? '安装ID错误,请检查后重新输入'
|
|||
|
: '密钥失效,请更换密钥激活';
|
|||
|
} else if (data.typeiid === 3) {
|
|||
|
cidCont.value = '无法获取确认ID,建议不要使用020密钥';
|
|||
|
} else {
|
|||
|
cidCont.value = '检测失败,请稍后重试';
|
|||
|
}
|
|||
|
})
|
|||
|
.catch(() => {
|
|||
|
showError('请求超时,请稍后重试');
|
|||
|
})
|
|||
|
.finally(() => {
|
|||
|
checkBtn.disabled = false;
|
|||
|
checkBtn.textContent = '获取确认ID';
|
|||
|
loadingIndicator.style.display = 'none';
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// 复制确认ID
|
|||
|
function copyCid() {
|
|||
|
const cidSplit = document.getElementById('cid-split');
|
|||
|
cidSplit.select();
|
|||
|
document.execCommand('copy');
|
|||
|
alert('已复制好,可贴粘。');
|
|||
|
}
|
|||
|
|
|||
|
// 清除输入框内容
|
|||
|
function clearInput() {
|
|||
|
const iidInput = document.getElementById('iid');
|
|||
|
const indicator = document.getElementById('iid-indicator');
|
|||
|
const checkBtn = document.getElementById('btn-get-cid');
|
|||
|
const pageType = document.body.dataset.page;
|
|||
|
|
|||
|
// 清空输入
|
|||
|
iidInput.value = '';
|
|||
|
iidInput.className = 'form-input noiid';
|
|||
|
|
|||
|
// 重置状态指示器
|
|||
|
indicator.textContent = pageType === 'key' ? '未输入' : '没有IID';
|
|||
|
indicator.className = 'badge badge-black';
|
|||
|
|
|||
|
// 禁用检测按钮
|
|||
|
checkBtn.disabled = true;
|
|||
|
|
|||
|
// 聚焦输入框
|
|||
|
iidInput.focus();
|
|||
|
}
|
|||
|
|
|||
|
// 显示错误信息
|
|||
|
function showError(message) {
|
|||
|
const errorContainer = document.createElement('div');
|
|||
|
errorContainer.setAttribute('role', 'alert');
|
|||
|
errorContainer.className = 'error-message';
|
|||
|
errorContainer.textContent = message;
|
|||
|
|
|||
|
const form = document.querySelector('.form-group');
|
|||
|
form.appendChild(errorContainer);
|
|||
|
|
|||
|
setTimeout(() => {
|
|||
|
errorContainer.remove();
|
|||
|
}, 5000);
|
|||
|
}
|
|||
|
|
|||
|
// 表格排序功能
|
|||
|
function sortTable(button) {
|
|||
|
const table = button.closest('table');
|
|||
|
const tbody = table.querySelector('tbody');
|
|||
|
const rows = Array.from(tbody.querySelectorAll('tr'));
|
|||
|
const isAsc = button.getAttribute('data-order') === 'desc';
|
|||
|
|
|||
|
// 添加排序动画效果
|
|||
|
rows.forEach(row => row.classList.add('sorting'));
|
|||
|
|
|||
|
// 排序行
|
|||
|
rows.sort((a, b) => {
|
|||
|
const aValue = parseInt(a.cells[1].textContent.trim()) || 0;
|
|||
|
const bValue = parseInt(b.cells[1].textContent.trim()) || 0;
|
|||
|
return isAsc ? aValue - bValue : bValue - aValue;
|
|||
|
});
|
|||
|
|
|||
|
// 更新排序方向和按钮状态
|
|||
|
button.setAttribute('data-order', isAsc ? 'asc' : 'desc');
|
|||
|
button.classList.toggle('active');
|
|||
|
|
|||
|
// 更新箭头方向
|
|||
|
const sortIcon = button.querySelector('.sort-icon');
|
|||
|
sortIcon.textContent = isAsc ? '↑' : '↓';
|
|||
|
|
|||
|
// 清空并重新插入排序后的行
|
|||
|
while (tbody.firstChild) {
|
|||
|
tbody.removeChild(tbody.firstChild);
|
|||
|
}
|
|||
|
rows.forEach(row => tbody.appendChild(row));
|
|||
|
|
|||
|
// 移除排序动画效果
|
|||
|
setTimeout(() => {
|
|||
|
rows.forEach(row => row.classList.remove('sorting'));
|
|||
|
}, 300);
|
|||
|
}
|
|||
|
|
|||
|
// 展开/折叠产品组
|
|||
|
function toggleProduct(header) {
|
|||
|
const content = header.nextElementSibling;
|
|||
|
header.classList.toggle('active');
|
|||
|
const isExpanded = header.classList.contains('active');
|
|||
|
header.setAttribute('aria-expanded', isExpanded);
|
|||
|
content.classList.toggle('show');
|
|||
|
}
|
|||
|
|
|||
|
// 初始化页面功能
|
|||
|
document.addEventListener('DOMContentLoaded', function() {
|
|||
|
const pageType = document.body.dataset.page;
|
|||
|
|
|||
|
if (pageType === 'key') {
|
|||
|
initKeyCheck();
|
|||
|
} else if (pageType === 'cid') {
|
|||
|
initCidCheck();
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// 添加键盘支持
|
|||
|
document.addEventListener('keydown', function(e) {
|
|||
|
if (e.target.classList.contains('product-header')) {
|
|||
|
if (e.key === 'Enter' || e.key === ' ') {
|
|||
|
e.preventDefault();
|
|||
|
toggleProduct(e.target);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|