修复
This commit is contained in:
+86
-2
@@ -118,6 +118,15 @@
|
||||
<span class="frame-title" id="current-service-name"></span>
|
||||
</div>
|
||||
<div class="frame-toolbar-actions">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary btn-toolbar-refresh"
|
||||
id="frame-gate-login"
|
||||
title="通过本地导航代登录 Gate 扫单(需配置 NAV_GATE_SCOUT_USERNAME / NAV_GATE_SCOUT_PASSWORD)"
|
||||
hidden
|
||||
>
|
||||
Gate 登录
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary btn-toolbar-refresh"
|
||||
@@ -159,6 +168,7 @@
|
||||
<script>
|
||||
(function () {
|
||||
var hubAutoLogin = {{ 'true' if hub_auto_login else 'false' }};
|
||||
var gateScoutAutoLogin = {{ 'true' if gate_scout_auto_login else 'false' }};
|
||||
var layoutMain = document.getElementById("layout-main");
|
||||
var btnSidebarCollapse = document.getElementById("sidebar-collapse");
|
||||
var btnSidebarExpand = document.getElementById("sidebar-expand");
|
||||
@@ -201,6 +211,7 @@
|
||||
var btnBack = document.getElementById("frame-back-overview");
|
||||
var btnBackHub = document.getElementById("frame-back-hub");
|
||||
var btnHubLogin = document.getElementById("frame-hub-login");
|
||||
var btnGateLogin = document.getElementById("frame-gate-login");
|
||||
var btnInstanceSso = document.getElementById("frame-instance-sso");
|
||||
var currentBaseUrl = "";
|
||||
var currentOpenUrl = "";
|
||||
@@ -240,6 +251,11 @@
|
||||
return (kind || "").toLowerCase() === "hub";
|
||||
}
|
||||
|
||||
function isGateScoutEmbed(kind) {
|
||||
var k = (kind || "").toLowerCase();
|
||||
return k === "gate_scout" || k === "gate_exec" || k === "scout" || k === "exec";
|
||||
}
|
||||
|
||||
function toggleInstanceBackBtn(show) {
|
||||
if (btnBackHub) btnBackHub.hidden = !show;
|
||||
}
|
||||
@@ -252,6 +268,10 @@
|
||||
if (btnHubLogin) btnHubLogin.hidden = !show;
|
||||
}
|
||||
|
||||
function toggleGateLoginBtn(show) {
|
||||
if (btnGateLogin) btnGateLogin.hidden = !show;
|
||||
}
|
||||
|
||||
function applyIframeUrl(url) {
|
||||
if (!url) return;
|
||||
frame.src = url;
|
||||
@@ -329,6 +349,36 @@
|
||||
});
|
||||
}
|
||||
|
||||
function gateScoutLoginViaProxy(done) {
|
||||
if (!currentServiceId && !currentOrigin) {
|
||||
if (done) done(false, "未选择 Gate 服务");
|
||||
return;
|
||||
}
|
||||
var body = { service_id: parseInt(currentServiceId, 10) || undefined, next: currentNextPath };
|
||||
fetch("/api/embed/gate-scout-login", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "Accept": "application/json" },
|
||||
body: JSON.stringify(body),
|
||||
})
|
||||
.then(function (r) {
|
||||
return r.json().then(function (j) {
|
||||
return { ok: r.ok, j: j };
|
||||
});
|
||||
})
|
||||
.then(function (res) {
|
||||
if (res.ok && res.j.ok && res.j.embed_auth_url) {
|
||||
applyIframeUrl(res.j.embed_auth_url);
|
||||
toggleGateLoginBtn(false);
|
||||
if (done) done(true);
|
||||
return;
|
||||
}
|
||||
if (done) done(false, (res.j && res.j.detail) || "Gate 登录失败");
|
||||
})
|
||||
.catch(function (e) {
|
||||
if (done) done(false, String(e));
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener("message", function (ev) {
|
||||
var data = ev.data;
|
||||
if (!data || !data.type) return;
|
||||
@@ -480,19 +530,36 @@
|
||||
instanceNavCtx = null;
|
||||
hubReturnState = null;
|
||||
toggleInstanceBackBtn(false);
|
||||
toggleGateLoginBtn(false);
|
||||
nameEl.textContent = name || "";
|
||||
dashboard.hidden = true;
|
||||
frameStack.hidden = false;
|
||||
frame.hidden = false;
|
||||
toggleHubLoginBtn(isHubEmbed(currentEmbedKind));
|
||||
toggleHubLoginBtn(isHubEmbed(currentEmbedKind) && !hubAutoLogin);
|
||||
toggleGateLoginBtn(isGateScoutEmbed(currentEmbedKind) && !gateScoutAutoLogin);
|
||||
if (isHubEmbed(currentEmbedKind) && hubAutoLogin) {
|
||||
hubLoginViaProxy(function (ok, err) {
|
||||
if (!ok) applyIframeUrl(url);
|
||||
if (!ok) {
|
||||
applyIframeUrl(url);
|
||||
toggleHubLoginBtn(true);
|
||||
}
|
||||
});
|
||||
var nav = preferredNav || findNavLink(url);
|
||||
setActive(nav);
|
||||
return;
|
||||
}
|
||||
if (isGateScoutEmbed(currentEmbedKind) && gateScoutAutoLogin) {
|
||||
gateScoutLoginViaProxy(function (ok, err) {
|
||||
if (!ok) {
|
||||
applyIframeUrl(url);
|
||||
toggleGateLoginBtn(true);
|
||||
if (err) console.warn("[LocalNav] Gate 代登录失败:", err);
|
||||
}
|
||||
});
|
||||
var navGate = preferredNav || findNavLink(url);
|
||||
setActive(navGate);
|
||||
return;
|
||||
}
|
||||
applyIframeUrl(url);
|
||||
var nav = preferredNav || findNavLink(url);
|
||||
setActive(nav);
|
||||
@@ -573,6 +640,7 @@
|
||||
frameStack.hidden = true;
|
||||
dashboard.hidden = false;
|
||||
toggleHubLoginBtn(false);
|
||||
toggleGateLoginBtn(false);
|
||||
toggleInstanceSsoBtn(false);
|
||||
setActive(null);
|
||||
}
|
||||
@@ -604,6 +672,22 @@
|
||||
});
|
||||
});
|
||||
|
||||
if (btnGateLogin) {
|
||||
btnGateLogin.addEventListener("click", function () {
|
||||
btnGateLogin.disabled = true;
|
||||
gateScoutLoginViaProxy(function (ok, err) {
|
||||
btnGateLogin.disabled = false;
|
||||
if (!ok && err) {
|
||||
window.alert(
|
||||
"Gate 登录失败:\n" +
|
||||
err +
|
||||
"\n\n请检查 LocalNav .env 的 NAV_GATE_SCOUT_USERNAME / NAV_GATE_SCOUT_PASSWORD,以及云端 PM2 的 NAV_EMBED_SESSION / NAV_EMBED_ORIGINS。"
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (btnHubLogin) {
|
||||
btnHubLogin.addEventListener("click", function () {
|
||||
btnHubLogin.disabled = true;
|
||||
|
||||
Reference in New Issue
Block a user