This commit is contained in:
oneao committed 2026-10-13 17:29:55 +08:00
1 parent 7bd5f1dde9
commit f3936cec61
70 files changed
+13074 -187

No files matched your search

+31
View File
@@ -116,6 +116,7 @@ packages/ui/src/table/
| `seq` | `boolean \| object` | `true` | 序号列 |
| `activeRowKey` | `string \| number \| null` | `null` | 当前高亮行 |
| `editable` | `boolean` | `true` | 行内编辑总开关 |
| `editorSeamless` | `boolean` | `true` | 单元格内无外间距 + 无常驻边框(§5.3) |
| `noDataFull` / `showOverflow` | `boolean` | `true` | 空态铺满 / 溢出省略 |
| `autoFitWidth` | `boolean` | `false` | 非横向虚拟时铺满容器 |
| `theme` | `'light' \| 'dark'` | `undefined` | 不传则跟随全局主题(**按 §4.5 从 ConfigProvider 取,不依赖 pinia**) |
@@ -214,6 +215,36 @@ const displayColumns = computed(() => {
---
## 4.7 编辑器无缝嵌入单元格(`editorSeamless`,默认开启)
**形态**:单元格内部**无外间距** + 编辑器**无常驻边框**。适合整行编辑、键盘连续
录入、固定列宽以及专业用户(Excel / AG Grid / Handsontable 的表格态)。
**目标**:单元格保持稳定的几何结构,编辑器融进表格,**只有焦点、校验和特殊
交互状态才增强视觉提示**。
三条硬约束(改动这块前必读):
1. **编辑器盒高 = `var(--row-height)`**。td 是 border-box,指定 `height: 30px` 时
内容盒只有 `30 - padding`,而子元素 `height: 100%` 解析的基准是**内容盒**。
所以 td 垂直 padding 必须为 0,且编辑器不能靠 `height: 100%` 撑——
`G3Select` 的触发器自带 `min-height: 32px`,在 30px 的行里会直接把行顶高 2px。
显式 `height: var(--row-height)` + `min-height: 0` 把下限压死。
2. **水平内边距只能由 td 提供**(库的 `--cell-padding-x`)。若改成给编辑器加
透明边框,编辑器与纯文本格会各用一套逻辑像素取整,窄列下出现「编辑前文字
偏移 1px」的漂移;td padding 对两者一视同仁,**进出编辑态零位移**。
3. **无边框 ≠ 无提示**。焦点环画在**外层 td 的 `inset` 阴影**上(`:focus-within`):
内阴影在 padding box 内侧绘制,不参与 td 自身的盒模型计算,几何绝对稳定,
且天然铺满整格;hover 换成格内极淡填充,校验用文字色 + 1px 内描边。
三者都不占用布局空间。
去零的是 `padding` / `border` / `border-radius` / `background`,
**绝不动 height**;被移除的内边距由编辑器内层控件补回一次网格间距
(`space-1` / `space-2`,与纯文本格同一档),因此「无间距」的收益是
**格内不留空白**,而不是让文字失去网格对齐。
---
## 5. 与现有约定的对齐(必改项)
| 参考实现 | 我们必须改成 |