fix: 「用户与角色」模块切换到 FBA UI 承载(Epic #159 遗漏收尾)
This commit is contained in:
@@ -102,6 +102,20 @@
|
|||||||
</main>
|
</main>
|
||||||
<script src="user_store.js"></script>
|
<script src="user_store.js"></script>
|
||||||
<script src="../shared/session.js"></script>
|
<script src="../shared/session.js"></script>
|
||||||
|
<script>
|
||||||
|
/* Epic #159:FBA 轨道下「用户与角色」由 FBA UI(/fba-admin/)承载。
|
||||||
|
* 直接访问/书签/iframe 直达本页时,若 FBA 在线且已有 FBA 登录态,
|
||||||
|
* 顶层跳转到 FBA UI;否则保留本页(本地演示降级)。 */
|
||||||
|
(function () {
|
||||||
|
if (!window.IAOP_SESSION || !IAOP_SESSION.fbaStatus) return;
|
||||||
|
IAOP_SESSION.fbaStatus().then(function (st) {
|
||||||
|
if (!st.available) return;
|
||||||
|
if (!localStorage.getItem("iaop.fba.token.v1")) return;
|
||||||
|
try { window.top.location.href = "/fba-admin/"; }
|
||||||
|
catch (e) { location.href = "/fba-admin/"; }
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
<script src="../shared/pro-header.js"></script>
|
<script src="../shared/pro-header.js"></script>
|
||||||
<script src="users.js"></script>
|
<script src="users.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -182,14 +182,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ---- 菜单渲染(需要登录角色,异步) ----------------------------------- */
|
/* ---- 菜单渲染(需要登录角色,异步) ----------------------------------- */
|
||||||
function addLeafItem(key, icon, text, href) {
|
function addLeafItem(key, icon, text, href, external) {
|
||||||
var a = el("a", "pro-menu-item" + (key === active ? " active" : ""));
|
var a = el("a", "pro-menu-item" + (key === active ? " active" : ""));
|
||||||
a.href = href;
|
a.href = href;
|
||||||
a.title = text;
|
a.title = text;
|
||||||
a.setAttribute("data-module", key);
|
a.setAttribute("data-module", key);
|
||||||
a.appendChild(el("span", "pro-menu-icon", icon));
|
a.appendChild(el("span", "pro-menu-icon", icon));
|
||||||
a.appendChild(el("span", "pro-menu-text", text));
|
a.appendChild(el("span", "pro-menu-text", text));
|
||||||
if (SHELL) {
|
if (external) {
|
||||||
|
// 外部承载模块(FBA UI 等):新标签打开,不进 iframe 外壳
|
||||||
|
a.target = "_blank";
|
||||||
|
a.rel = "noopener";
|
||||||
|
} else if (SHELL) {
|
||||||
a.addEventListener("click", function (e) {
|
a.addEventListener("click", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
go(href);
|
go(href);
|
||||||
@@ -250,7 +254,8 @@
|
|||||||
// 输出(FBA 服务端按角色授权过滤,本地角色过滤兜底)
|
// 输出(FBA 服务端按角色授权过滤,本地角色过滤兜底)
|
||||||
(mods || []).forEach(function (m) {
|
(mods || []).forEach(function (m) {
|
||||||
if (m.children && m.children.length) addSubMenu(m);
|
if (m.children && m.children.length) addSubMenu(m);
|
||||||
else addLeafItem(m.key, m.icon, m.title, prefix + m.url);
|
else addLeafItem(m.key, m.icon, m.title,
|
||||||
|
m.external ? m.url : prefix + m.url, !!m.external);
|
||||||
});
|
});
|
||||||
if (!SHELL) syncSubHighlight();
|
if (!SHELL) syncSubHighlight();
|
||||||
// 菜单(重)渲染完成事件:shell.js 据此重放当前高亮,
|
// 菜单(重)渲染完成事件:shell.js 据此重放当前高亮,
|
||||||
|
|||||||
+13
-3
@@ -62,8 +62,11 @@ var IAOP_SESSION = (function () {
|
|||||||
{ key: "audit", title: "审计查询", hash: "#audit" }
|
{ key: "audit", title: "审计查询", hash: "#audit" }
|
||||||
] },
|
] },
|
||||||
{ key: "users", title: "用户与角色", icon: "👤", url: "auth/users.html",
|
{ key: "users", title: "用户与角色", icon: "👤", url: "auth/users.html",
|
||||||
desc: "用户管理、角色分配(readonly / engineer / admin)、审计(PRD 8.2)",
|
desc: "用户管理、角色分配、菜单授权(Epic #159 起由 FBA UI 承载)",
|
||||||
roles: ["admin"], tag: "管理员", tagColor: "gold" },
|
roles: ["admin"], tag: "管理员", tagColor: "gold",
|
||||||
|
/* FBA 模式下该模块由 FBA UI(/fba-admin/)承载,新标签打开;
|
||||||
|
* fbaUrl 由 menuTree() 在 FBA 轨道生效时注入 */
|
||||||
|
fbaUrl: "/fba-admin/" },
|
||||||
{ key: "mobile", title: "移动端驾驶舱", icon: "📱", url: "mobile/",
|
{ key: "mobile", title: "移动端驾驶舱", icon: "📱", url: "mobile/",
|
||||||
desc: "移动端只读驾驶舱与交接班摘要(iOS14+ / Android 10+)",
|
desc: "移动端只读驾驶舱与交接班摘要(iOS14+ / Android 10+)",
|
||||||
roles: ["readonly", "engineer", "admin"], tag: "移动端", tagColor: "default" }
|
roles: ["readonly", "engineer", "admin"], tag: "移动端", tagColor: "default" }
|
||||||
@@ -441,7 +444,14 @@ var IAOP_SESSION = (function () {
|
|||||||
return copy;
|
return copy;
|
||||||
});
|
});
|
||||||
// 服务端树里没有任何 iAOP 模块(未播种)→ 本地角色过滤兜底
|
// 服务端树里没有任何 iAOP 模块(未播种)→ 本地角色过滤兜底
|
||||||
return mods.length ? mods : modulesFor(user.role);
|
if (!mods.length) return modulesFor(user.role);
|
||||||
|
// FBA 轨道生效:带 fbaUrl 的模块(用户与角色)指向 FBA UI,新标签打开
|
||||||
|
return mods.map(function (m) {
|
||||||
|
if (m.fbaUrl) {
|
||||||
|
return Object.assign({}, m, { url: m.fbaUrl, external: true });
|
||||||
|
}
|
||||||
|
return m;
|
||||||
|
});
|
||||||
})
|
})
|
||||||
.catch(function () { return modulesFor(user.role); });
|
.catch(function () { return modulesFor(user.role); });
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user