server: 平台抽象层+bilibili、服务端加密凭据库、角色中间件;web: 精简页面/路由、macOS 客户端(Swift)与多份方案文档;移除误入库的编译产物
This commit is contained in:
@@ -13,6 +13,7 @@ document.querySelectorAll('.tab').forEach((tab) => {
|
||||
|
||||
// ---- 状态页 ----
|
||||
let currentServer = '';
|
||||
let currentWeb = 'http://127.0.0.1:3003';
|
||||
async function refreshStatus() {
|
||||
try {
|
||||
const s = await window.api.status();
|
||||
@@ -33,7 +34,7 @@ setInterval(refreshStatus, 3000);
|
||||
refreshStatus();
|
||||
|
||||
$('btn-open-web').addEventListener('click', () => {
|
||||
const url = currentServer || 'http://127.0.0.1:8090';
|
||||
const url = currentWeb || currentServer || 'http://127.0.0.1:3003';
|
||||
window.api.openWeb(url);
|
||||
});
|
||||
$('btn-open-data').addEventListener('click', () => window.api.openDataDir());
|
||||
@@ -66,35 +67,42 @@ $('btn-pair').addEventListener('click', async () => {
|
||||
// ---- 挑战页 ----
|
||||
let selectedChallenge = null;
|
||||
let pollTimer = null;
|
||||
let knownChallengeIds = new Set();
|
||||
const KIND_LABEL = { qr: '扫码', sms: '短信验证码', confirm: 'APP 确认', captcha: '图形验证码', pending: '等待设备' };
|
||||
|
||||
async function refreshChallenges() {
|
||||
try {
|
||||
const r = await window.api.challenges();
|
||||
const list = (r && r.list) || [];
|
||||
const fresh = list.filter((ch) => ch.challengeId && !knownChallengeIds.has(ch.challengeId));
|
||||
if (fresh.length && knownChallengeIds.size > 0 && window.api.notify) {
|
||||
window.api.notify('EveryPublish 需要处理挑战', fresh.map((ch) => ch.platform || '平台').join('、') + ' 有新的扫码或验证码任务');
|
||||
}
|
||||
knownChallengeIds = new Set(list.map((ch) => ch.challengeId).filter(Boolean));
|
||||
const badge = $('ch-badge');
|
||||
if (list.length > 0) { badge.textContent = list.length; badge.classList.remove('hidden'); }
|
||||
else badge.classList.add('hidden');
|
||||
const box = $('ch-list');
|
||||
box.innerHTML = '';
|
||||
box.replaceChildren();
|
||||
list.forEach((ch) => {
|
||||
const div = document.createElement('div');
|
||||
div.className = 'item' + (selectedChallenge && selectedChallenge.challengeId === ch.challengeId ? ' selected' : '');
|
||||
const inner = [
|
||||
'<span><b>',
|
||||
ch.platform || '?',
|
||||
'</b> · ',
|
||||
KIND_LABEL[ch.kind] || ch.kind,
|
||||
'</span><span class="p">',
|
||||
ch.prompt || '',
|
||||
'</span>',
|
||||
].join('');
|
||||
div.innerHTML = inner;
|
||||
const label = document.createElement('span');
|
||||
const platform = document.createElement('b');
|
||||
platform.textContent = ch.platform || '?';
|
||||
label.append(platform, document.createTextNode(' · ' + (KIND_LABEL[ch.kind] || ch.kind)));
|
||||
const prompt = document.createElement('span');
|
||||
prompt.className = 'p';
|
||||
prompt.textContent = ch.prompt || '';
|
||||
div.append(label, prompt);
|
||||
div.addEventListener('click', () => selectChallenge(ch));
|
||||
box.appendChild(div);
|
||||
});
|
||||
if (!list.length) {
|
||||
box.innerHTML = '<p class="hint">暂无待处理挑战</p>';
|
||||
const empty = document.createElement('p');
|
||||
empty.className = 'hint';
|
||||
empty.textContent = '暂无待处理挑战';
|
||||
box.appendChild(empty);
|
||||
}
|
||||
} catch (e) { /* 忽略 */ }
|
||||
}
|
||||
@@ -149,7 +157,9 @@ startPolling();
|
||||
async function loadSettings() {
|
||||
try {
|
||||
const cfg = await window.api.getConfig();
|
||||
$('set-server').value = (cfg && cfg.server) || '';
|
||||
$('set-server').value = (cfg && cfg.server) || 'http://127.0.0.1:8090';
|
||||
$('set-web').value = (cfg && cfg.webUrl) || 'http://127.0.0.1:3003';
|
||||
currentWeb = $('set-web').value;
|
||||
$('set-fake').checked = !!(cfg && cfg.fakeAll);
|
||||
$('set-autostart').checked = await window.api.getAutoStart();
|
||||
} catch (e) { /* 忽略 */ }
|
||||
@@ -158,12 +168,15 @@ loadSettings();
|
||||
|
||||
$('btn-save').addEventListener('click', async () => {
|
||||
const server = $('set-server').value.trim();
|
||||
const webUrl = $('set-web').value.trim();
|
||||
const res = $('set-result');
|
||||
if (!server) { res.textContent = '请填写服务器地址(内网部署填 http://服务器IP:8090)'; res.className = 'msg err'; return; }
|
||||
const cfg = { server: server, fakeAll: $('set-fake').checked };
|
||||
if (!webUrl) { res.textContent = '请填写网站地址'; res.className = 'msg err'; return; }
|
||||
const cfg = { server: server, webUrl: webUrl, fakeAll: $('set-fake').checked };
|
||||
await window.api.saveConfig(cfg);
|
||||
await window.api.setAutoStart($('set-autostart').checked);
|
||||
currentServer = server;
|
||||
currentWeb = webUrl;
|
||||
res.textContent = '已保存,核心进程已重启';
|
||||
res.className = 'msg ok';
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user