mirror of
https://github.com/sotam0316/drawNET.git
synced 2026-04-25 03:58:37 +09:00
104 lines
4.1 KiB
JavaScript
104 lines
4.1 KiB
JavaScript
import { t } from '../../i18n.js';
|
|
import { checkLicenseStatus } from '../../ui/license.js';
|
|
|
|
export async function renderLicense(container) {
|
|
const status = await checkLicenseStatus();
|
|
container.innerHTML = `
|
|
<h3><i class="fas fa-certificate" style="color: #3b82f6; margin-right: 8px;"></i> ${t('license_management')}</h3>
|
|
<p class="settings-intro">${t('license_intro')}</p>
|
|
|
|
<div class="license-status-card">
|
|
<div class="status-header">
|
|
<div class="edition-info">
|
|
<span class="edition-label">${t('current_edition')}</span>
|
|
<h2 class="edition-name">${status.valid ? status.data.level : t('trial_community')}</h2>
|
|
</div>
|
|
<div class="status-icon ${status.valid ? 'valid' : 'expired'}">
|
|
<i class="fas ${status.valid ? 'fa-crown' : 'fa-info-circle'}"></i>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="hwid-section">
|
|
<div class="hwid-label-row">
|
|
<span>${t('machine_id')}</span>
|
|
<button class="text-link-btn" id="copy-hwid-btn"><i class="fas fa-copy"></i> ${t('copy')}</button>
|
|
</div>
|
|
<div class="hwid-value-box">
|
|
<code>${status.hwid}</code>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
${status.valid ? `
|
|
<div class="setting-row" style="border-bottom: none;">
|
|
<div class="setting-info">
|
|
<span class="label">${t('expiry_info')}</span>
|
|
<span class="desc">${t('valid_until', { date: `<strong>${status.data.expiry}</strong>` })}</span>
|
|
</div>
|
|
</div>
|
|
` : ''}
|
|
|
|
<div class="divider"></div>
|
|
|
|
<div class="license-action-section">
|
|
<h4 style="margin-bottom: 12px;">${t('activate_license_title')}</h4>
|
|
<div class="key-input-wrapper">
|
|
<textarea id="license-key-input" placeholder="${t('license_key_placeholder')}"></textarea>
|
|
</div>
|
|
<button id="activate-license-btn" class="primary-btn-premium">
|
|
<i class="fas fa-key"></i> ${t('activate_license_btn')}
|
|
</button>
|
|
</div>
|
|
`;
|
|
|
|
bindLicenseEvents(container);
|
|
}
|
|
|
|
function bindLicenseEvents(container) {
|
|
const copyBtn = container.querySelector('#copy-hwid-btn');
|
|
if (copyBtn) {
|
|
copyBtn.onclick = () => {
|
|
const hwid = container.querySelector('code').textContent;
|
|
navigator.clipboard.writeText(hwid);
|
|
// Simple visual feedback
|
|
const icon = copyBtn.querySelector('i');
|
|
icon.className = 'fas fa-check';
|
|
setTimeout(() => icon.className = 'fas fa-copy', 2000);
|
|
};
|
|
}
|
|
|
|
const activateBtn = container.querySelector('#activate-license-btn');
|
|
if (activateBtn) {
|
|
activateBtn.onclick = async () => {
|
|
const key = container.querySelector('#license-key-input').value.trim();
|
|
if (!key) {
|
|
alert(t('enter_license_key'));
|
|
return;
|
|
}
|
|
|
|
activateBtn.disabled = true;
|
|
activateBtn.innerHTML = `<i class="fas fa-spinner fa-spin"></i> ${t('verifying')}`;
|
|
|
|
try {
|
|
const res = await fetch('/api/license/activate', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ key })
|
|
});
|
|
const result = await res.json();
|
|
if (result.success) {
|
|
alert(t('license_activated_success'));
|
|
location.reload();
|
|
} else {
|
|
alert(t('activation_failed') + result.message);
|
|
}
|
|
} catch (err) {
|
|
alert(t('connection_error') + err.message);
|
|
} finally {
|
|
activateBtn.disabled = false;
|
|
activateBtn.innerHTML = `<i class="fas fa-key"></i> ${t('activate_license_btn')}`;
|
|
}
|
|
};
|
|
}
|
|
}
|