fix(admin): 修复移动端后台侧栏错位与子菜单不收起
根因:此前为移动端手写的一段折叠逻辑直接给 body 加 pear-mini,
绕过了 admin.js 里唯一的同步入口 collapse(),导致三处状态错位——
布局层认为已折叠(侧栏宽 0、菜单文字被 CSS 隐藏),
菜单 DOM 仍是展开态(#side 没有 pear-nav-mini),于是"文字看不见、
但子菜单又在原地铺开"。
处理:
- templates/system/index.html 还原为框架原始版本,删除手写的
foldSidebar() IIFE 与首屏强制加类逻辑
- 删除无引用的死文件 templates/system/common/{head,side}.html
- 新增插件 plugins/mobileUI,以运行时注入 mobile.js 的方式实现移动端增强:
* 首屏折叠只通过框架的 li.collapse 点击完成,不手写 class
* 轮询等待菜单异步渲染就绪后再折叠
* 补齐 framework 内部状态 isCollapse(后端 /rights/configs 把键拼成了
"collaspe",admin.js 读 collapse 恒为 undefined,窄屏 resize 会反向展开)
* 触屏下点击菜单外区域收起 mini 浮层(触屏没有可靠的 mouseleave)
* 展开态点击叶子菜单后自动收起侧栏
- applications/config.py 的 PLUGIN_ENABLE_FOLDERS 追加 cookieManager、mobileUI
framework 业务逻辑零改动,仅 config.py 一行配置。
This commit is contained in:
@@ -8,14 +8,6 @@
|
||||
</head>
|
||||
<!-- 结 构 代 码 -->
|
||||
<body class="layui-layout-body pear-admin">
|
||||
<!-- 首屏即折叠侧边栏:避免移动端加载期间 sidebar 展开遮挡内容(后续 admin.js 会再次同步状态) -->
|
||||
<script>
|
||||
(function () {
|
||||
if (window.innerWidth <= 768) {
|
||||
document.body.classList.add('pear-mini');
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<!-- 布 局 框 架 -->
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
<!-- 顶 部 样 式 -->
|
||||
@@ -153,32 +145,6 @@
|
||||
// 渲染
|
||||
admin.render();
|
||||
|
||||
// 移动端初始化:窗口较窄时默认折叠左侧菜单,避免内容被侧边栏挡住
|
||||
(function () {
|
||||
function foldSidebar() {
|
||||
if ($(window).width() > 768) return;
|
||||
var body = $('body');
|
||||
var admin = $('.pear-admin');
|
||||
// 直接加 class:不依赖 .collapse 按钮是否存在或是否响应点击
|
||||
if (!admin.hasClass('pear-mini')) {
|
||||
admin.addClass('pear-mini');
|
||||
body.addClass('pear-mini');
|
||||
}
|
||||
// 同步 menu 实例状态,防止后续交互异常
|
||||
if (window.PearAdmin && window.PearAdmin.instances && window.PearAdmin.instances.menu) {
|
||||
try {
|
||||
window.PearAdmin.instances.menu.collapse();
|
||||
} catch (e) {}
|
||||
window.PearAdmin.instances.menu.isCollapse = true;
|
||||
}
|
||||
}
|
||||
// 立即 + 多次延迟:覆盖 admin.js 异步初始化和菜单渲染滞后
|
||||
foldSidebar();
|
||||
setTimeout(foldSidebar, 300);
|
||||
setTimeout(foldSidebar, 800);
|
||||
setTimeout(foldSidebar, 1500);
|
||||
})();
|
||||
|
||||
// 注销
|
||||
admin.logout(function () {
|
||||
let loading = layer.load()
|
||||
|
||||
Reference in New Issue
Block a user