From d99b78fc6f50da826900b0abc8c600642c6c959b Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Mon, 22 Jun 2026 19:24:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(datatable):=20=E4=BF=AE=E5=A4=8D=20scope=20?= =?UTF-8?q?=E4=BB=8E=20@web=20=E7=BB=9F=E4=B8=80=E4=B8=BA=20@apigo.cc?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=BC=BA=20editable=20=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=8F=8A=E7=BC=96=E8=BE=91=E5=99=A8=E4=BA=A4=E4=BA=92=EF=BC=88?= =?UTF-8?q?by=20AI=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: deepseek-v4-pro[1m] --- README.md | 10 ++++----- dist/datatable.js | 20 ++++++++++++------ dist/datatable.min.js | 2 +- package-lock.json | 4 ++-- package.json | 5 +++-- scripts/publish.js | 48 ++++++++++++++++++++++++++++++++++++++++++ src/DataTable.js | 20 ++++++++++++------ test/diagnostic.html | 2 +- test/index.html | 6 +++--- test/lib/base.js | 6 +++--- test/lib/bootstrap.js | 13 ++++++------ test/lib/datatable.js | 20 ++++++++++++------ test/lib/state.js | 3 ++- test/minimal_perf.html | 7 +++--- vite.config.js | 16 +++++++------- 15 files changed, 129 insertions(+), 53 deletions(-) create mode 100644 scripts/publish.js diff --git a/README.md b/README.md index dd150ac..7320f57 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# @web/datatable AI 开发指南 +# @apigo.cc/datatable AI 开发指南 -`@web/datatable` 是一个高性能、无状态的 Web 数据表格组件,支持万级数据虚拟滚动、多维编辑及固定列。 +`@apigo.cc/datatable` 是一个高性能、无状态的 Web 数据表格组件,支持万级数据虚拟滚动、多维编辑及固定列。 --- @@ -11,9 +11,9 @@ diff --git a/dist/datatable.js b/dist/datatable.js index b40601f..d264b62 100644 --- a/dist/datatable.js +++ b/dist/datatable.js @@ -356,6 +356,7 @@ globalThis.Component.register("DataTable", (container) => { if (!container.state) container.state = globalThis.NewState({}); const state = container.state; + container.editable = container.hasAttribute("editable"); Object.assign(state, { list: [], fields: [], @@ -376,7 +377,8 @@ _fieldsDirty: false, _masterCellNodes: null, isDirty: false, - isBulkEdit: null + isBulkEdit: null, + editable: container.editable }); const perf = createPerfMonitor(); state.perf = perf.stats; @@ -404,6 +406,7 @@ perf.onScroll(); scroll.refresh(); container.hideColumnMenu(); + container.hideEditor(true); const prev = container.querySelector(".dt-spacer-prev"), post = container.querySelector(".dt-spacer-post"); if (prev) { prev.style.height = (state.prevHeight || 0) + "px"; @@ -466,6 +469,11 @@ container.showColumnMenu = (field, event) => { var _a; const btn = event.currentTarget, menu = container.querySelector(".dt-column-menu"); + if (menu.style.display === "block" && state.activeFieldId === field.id) { + container.hideColumnMenu(); + container.applySortFilter(); + return; + } const type = ((_a = field.settings) == null ? void 0 : _a.formType) || field.type || "text"; state.activeModes = MODE_MAP[type] || (["boolean", "switch", "checkbox", "radio"].includes(type) ? [] : MODE_MAP.text); if (!state.filterConfig[field.id]) state.filterConfig[field.id] = { mode: state.activeModes[0] || "contains", value: "", selectedValues: [] }; @@ -713,6 +721,7 @@ }; container.onMainDblClick = (e) => { var _a, _b, _c; + if (!container.editable) return; const cell = e.target.closest(".dt-cell"), row = cell == null ? void 0 : cell.closest(".dt-row"); if (row && !row.classList.contains("dt-header-row")) { const item = (_a = row._ref) == null ? void 0 : _a.item, fIdx = cell.dataset.fidx ? parseInt(cell.dataset.fidx) : Array.from(row.querySelectorAll(".dt-cell")).indexOf(cell); @@ -930,7 +939,6 @@
-
TOP FREQUENT VALUES
-
TOP FREQUENT VALUES