From 119c601063d2e5cb0de9befac74ce4bb45fb9356 Mon Sep 17 00:00:00 2001 From: augushong Date: Mon, 14 Sep 2026 16:03:36 +0000 Subject: [PATCH] =?UTF-8?q?feat(admin-table):=20=E5=8F=97=E6=8E=A7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B5=81=E8=BD=AC=E4=B8=BA=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=EF=BC=8Ccontrolled:false=20=E4=BD=9C=E4=B8=BA=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E9=80=83=E7=94=9F=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/plugs/ulthon-admin/admin-table.js | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/public/static/plugs/ulthon-admin/admin-table.js b/public/static/plugs/ulthon-admin/admin-table.js index 0cff24c..efac88c 100644 --- a/public/static/plugs/ulthon-admin/admin-table.js +++ b/public/static/plugs/ulthon-admin/admin-table.js @@ -734,10 +734,12 @@ } // 受控表形态清单规范化须先于引擎渲染:视图切换按钮的注入条件 - // (条目数>1)依赖它,受控分支直接复用。非受控表不 normalize。 + // (条目数>1)依赖它,受控分支直接复用。非受控(逃生口)表不 + // normalize。 var layoutEntries = []; var mobileLayoutInjected = false; - if (options.controlled === true) { + // 受控是默认数据流,仅显式 controlled:false 的逃生口页跳过 + if (options.controlled !== false) { // 手机端未配置 layoutList 时自动启用内置 card(计划 // table-multiform-rendering Success criteria 2):内置 card // 无需页面模板(数据全来自渲染上下文),自动注入可行。 @@ -878,13 +880,15 @@ parseData = options.parseData; } - if (options.controlled === true) { - // 受控灰度模式:数据请求与分页职责移交 UA_TABLE_STORE,引擎只做 + // 受控是默认数据流(store 取数 + 引擎纯渲染),controlled:false + // 是逃生口:依赖引擎 url 模式行为(如自定义 parseData)的下游 + // 页面可显式传 controlled:false 退回。 + if (options.controlled !== false) { + // 受控数据流:数据请求与分页职责移交 UA_TABLE_STORE,引擎只做 // 纯渲染(空数据起步、关闭引擎分页,由 store 的 laypage 自绘)。 // 选择态注入(rowDisableCallback / URL selectedIds / LAY_CHECKED // 跨页回显)由 store.fetch 的 injectSelectionMarks 承接,故不装 - // 引擎 parseData。默认关闭——未显式 controlled:true 的页面保持 - // 引擎 url 模式,行为与历史版本完全一致。 + // 引擎 parseData。 delete options.url; delete options.parseData; options.data = []; @@ -947,11 +951,12 @@ // 监听表格选择器 ua.table.listenTableSelectConfirm(options); - // 受控模式接线(在共享监听挂载之后):注册 store、自建分页容器、 - // 同步勾选事件、首屏取数。搜索/排序/switch/编辑等既有监听的 - // table.reloadData 调用经 shim 自动分流到 store.reload(渲染由顶部 - // 接线层注入的 done 承接),此处无需逐点改造。 - if (options.controlled === true) { + // 受控接线(默认数据流,在共享监听挂载之后):注册 store、自建 + // 分页容器、同步勾选事件、首屏取数。搜索/排序/switch/编辑等既有 + // 监听的 table.reloadData 调用经 shim 自动分流到 store.reload(渲染 + // 由顶部接线层注入的 done 承接),此处无需逐点改造。 + // controlled:false 的逃生口页不走此分支,保持引擎 url 模式。 + if (options.controlled !== false) { // 分页容器挂在引擎视图容器之后(表格容器外),不与引擎分页共存。 // 注意 layui render 后原 table 元素被移出视图(成为 view 的兄弟 // 节点),不能用 closest 向上找 view