From 250db090ab15dccd0104be34c200ab9fefba24ee Mon Sep 17 00:00:00 2001 From: augushong Date: Mon, 14 Sep 2026 17:58:34 +0000 Subject: [PATCH] =?UTF-8?q?feat(admin-table):=20=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=BD=A2=E6=80=81=E6=94=AF=E6=8C=81=E6=8C=89=E7=AB=AF=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=EF=BC=8ClayoutDefault=20=E6=BC=94=E8=BF=9B=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E5=BC=8F=E5=B9=B6=E5=85=BC=E5=AE=B9=E6=97=A7=E5=86=99?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/plugs/ulthon-admin/admin-table.js | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/public/static/plugs/ulthon-admin/admin-table.js b/public/static/plugs/ulthon-admin/admin-table.js index 38c2e21..eaae518 100644 --- a/public/static/plugs/ulthon-admin/admin-table.js +++ b/public/static/plugs/ulthon-admin/admin-table.js @@ -983,19 +983,42 @@ layoutByName[entry.name] = entry; }); - // 默认形态解析(任务 15 (a)):优先级 localStorage 按页记忆 > - // 显式 layoutDefault / 手机端自动检测 > 'table'。手机端默认 - // card 仅当 layoutList 含 card 条目;记忆值不在 layoutList 内 - // 时忽略(防脏数据);未配 layoutList 的页面恒 table,行为 - // 零变化。layoutDefault=true 旧协议即"自动判断",与新默认 - // 行为一致,无需单独分支。 + // 默认形态解析(按端三层链):a.localStorage 按页记忆(最 + // 高优先)> b.按端显式 layoutDefault > c.端缺省。layoutDefault + // 兼容三种写法:对象 {pc, mobile} 按当前端取值(端键缺省视为 + // 未配置)、字符串旧写法双端同值、true 旧协议即"自动判断"视 + // 为未配置。b/c 层取到的形态名不在 layoutByName 内一律忽略 + // (防脏数据,与记忆同规)。端缺省:pc 取 table、无则首条目; + // mobile 取 card、无则 table、再无则首条目。外层空清单守卫 + // 保持:非受控逃生口页或垃圾 layoutList 全无效时 layoutEntries + // 为空,恒 'table',任何分支不在空数组上取 [0]。 var defaultLayoutName = 'table'; if (layoutEntries.length > 0) { - if (options.layoutDefault && layoutByName[options.layoutDefault]) { - defaultLayoutName = options.layoutDefault; - } else if (ua.checkMobile() && layoutByName['card']) { - defaultLayoutName = 'card'; + var device = ua.checkMobile() ? 'mobile' : 'pc'; + // layoutDefault 规格化为按端对象:字符串双端同值;true + // 旧协议与未配置均视为 null(走端缺省) + var layoutDefaultByDevice = options.layoutDefault; + if (typeof layoutDefaultByDevice === 'string') { + layoutDefaultByDevice = {pc: layoutDefaultByDevice, mobile: layoutDefaultByDevice}; + } else if (layoutDefaultByDevice === null || typeof layoutDefaultByDevice !== 'object') { + layoutDefaultByDevice = null; } + var configuredLayout = layoutDefaultByDevice ? (layoutDefaultByDevice[device] || null) : null; + if (layoutByName[configuredLayout]) { + // b 层:按端显式配置生效(脏值已被清单内校验拦截) + defaultLayoutName = configuredLayout; + } else if (device === 'pc') { + // c 层 pc 端缺省:table 优先,无则首条目 + defaultLayoutName = layoutByName['table'] ? 'table' : layoutEntries[0].name; + } else if (layoutByName['card']) { + // c 层 mobile 端缺省:card 优先 + defaultLayoutName = 'card'; + } else if (layoutByName['table']) { + defaultLayoutName = 'table'; + } else { + defaultLayoutName = layoutEntries[0].name; + } + // a 层:记忆最高优先,值不在清单内忽略(防脏数据) var savedLayout = ua.getPageSetting('table-layout-default', ''); if (layoutByName[savedLayout]) { defaultLayoutName = savedLayout;