feat(dnfs): 用户面板下移并新增无特效模式开关;管理员增加运维机器人/进程管理器入口
This commit is contained in:
1 parent
924c718005
commit
28894e48dc
2 files changed
+37
-3
No files matched your search
@@ -396,7 +396,7 @@ input[type="button"]:disabled {
|
|||||||
.userpanel {
|
.userpanel {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 1rem;
|
left: 1rem;
|
||||||
top: 1rem;
|
top: 4.5rem;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -499,6 +499,10 @@ function renderSpLink(container, sp, appendNote) {
|
|||||||
* - iframe 全屏铺底且 pointer-events:none,不拦截父页面点击,视觉特效悬浮展示在页面上方;
|
* - iframe 全屏铺底且 pointer-events:none,不拦截父页面点击,视觉特效悬浮展示在页面上方;
|
||||||
* - 不使用 new Function/eval(CSP 未开 unsafe-eval),srcdoc 内联脚本由 CSP 'unsafe-inline' 放行。
|
* - 不使用 new Function/eval(CSP 未开 unsafe-eval),srcdoc 内联脚本由 CSP 'unsafe-inline' 放行。
|
||||||
* 仅管理员可发布(后端强制)。 */
|
* 仅管理员可发布(后端强制)。 */
|
||||||
|
/* 无特效模式:true 为关闭自动执行(用户面板开关控制,localStorage 持久化) */
|
||||||
|
var sp_effects_disabled = (function() {
|
||||||
|
try { return localStorage.getItem('sp_effects_disabled') === '1'; } catch (e) { return false; }
|
||||||
|
})();
|
||||||
function renderSpJs(container, sp, appendNote) {
|
function renderSpJs(container, sp, appendNote) {
|
||||||
var bar = document.createElement('div');
|
var bar = document.createElement('div');
|
||||||
bar.className = 'sp-actions';
|
bar.className = 'sp-actions';
|
||||||
@@ -551,8 +555,8 @@ function renderSpJs(container, sp, appendNote) {
|
|||||||
container.appendChild(pre);
|
container.appendChild(pre);
|
||||||
container.appendChild(out);
|
container.appendChild(out);
|
||||||
appendNote();
|
appendNote();
|
||||||
/* 含前端内容的节点渲染到当前页面时自动执行 */
|
/* 含前端内容的节点渲染到当前页面时自动执行(无特效模式下跳过) */
|
||||||
startEffect();
|
if (!sp_effects_disabled) startEffect();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 图片节点:DataURL 直接显示(CSP img-src 允许 data:) */
|
/* 图片节点:DataURL 直接显示(CSP img-src 允许 data:) */
|
||||||
@@ -1039,6 +1043,36 @@ function renderUserPanel() {
|
|||||||
role_tag.textContent = current_user.is_admin ? "管理员" : "普通用户";
|
role_tag.textContent = current_user.is_admin ? "管理员" : "普通用户";
|
||||||
userpanel.appendChild(role_tag);
|
userpanel.appendChild(role_tag);
|
||||||
|
|
||||||
|
/* 无特效模式开关(所有用户):关闭后特效节点不再自动执行 */
|
||||||
|
let effect_btn = document.createElement("div");
|
||||||
|
effect_btn.className = "tag";
|
||||||
|
effect_btn.textContent = sp_effects_disabled ? "✨ 无特效模式" : "✨ 特效模式";
|
||||||
|
effect_btn.addEventListener("click", () => {
|
||||||
|
sp_effects_disabled = !sp_effects_disabled;
|
||||||
|
try { localStorage.setItem('sp_effects_disabled', sp_effects_disabled ? '1' : '0'); } catch (e) {}
|
||||||
|
effect_btn.textContent = sp_effects_disabled ? "✨ 无特效模式" : "✨ 特效模式";
|
||||||
|
/* 关闭时移除当前已运行的全部特效沙箱 */
|
||||||
|
if (sp_effects_disabled) {
|
||||||
|
document.querySelectorAll('.sp-effect-frame').forEach(function(f) { f.remove(); });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
userpanel.appendChild(effect_btn);
|
||||||
|
|
||||||
|
/* 管理员专属入口:运维机器人 / 进程管理器 */
|
||||||
|
if (current_user.is_admin) {
|
||||||
|
let ops_btn = document.createElement("div");
|
||||||
|
ops_btn.className = "tag";
|
||||||
|
ops_btn.textContent = "🤖 运维机器人";
|
||||||
|
ops_btn.addEventListener("click", () => { window.location.href = "/aibox.html"; });
|
||||||
|
userpanel.appendChild(ops_btn);
|
||||||
|
|
||||||
|
let mgmt_btn = document.createElement("div");
|
||||||
|
mgmt_btn.className = "tag";
|
||||||
|
mgmt_btn.textContent = "🛠 进程管理器";
|
||||||
|
mgmt_btn.addEventListener("click", () => { window.location.href = "/mgmt/mgmt.html"; });
|
||||||
|
userpanel.appendChild(mgmt_btn);
|
||||||
|
}
|
||||||
|
|
||||||
let logout_tag = document.createElement("div");
|
let logout_tag = document.createElement("div");
|
||||||
logout_tag.className = "tag back";
|
logout_tag.className = "tag back";
|
||||||
logout_tag.textContent = "退出登录";
|
logout_tag.textContent = "退出登录";
|
||||||
|
|||||||
Reference in new issue
Block a user