// 密钥检测相关功能 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); } } });