mstool/js/main.js

257 lines
9.2 KiB
JavaScript
Raw Normal View History

2025-02-20 16:33:11 +08:00
// 密钥检测相关功能
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);
}
}
});