iter(g302): 表头接上多列排序(Shift 叠加)

This commit is contained in:
HIsheR
2026-10-27 00:30:36 +08:00
parent ddd6f9305a
commit 9cb953e562
6 changed files with 40 additions and 25 deletions
+9
View File
@@ -3104,6 +3104,15 @@
"motivation": "库里有 list 展示列表、virtualList 长列表,但缺「可调整顺序」的交互件:任务排优先级、字段顺序、看板列这类场景每次都得自己写一遍拖放,dragstart/dragover 的边界(不拦 dragover 就没 drop、拖拽中重建节点会中断手势)反复踩。",
"acceptance": "① 整行可拖,指针越过邻行中线即换位,dragend 落定;② 键盘等价 Alt+↑↓ 上下搬一格、Alt+Home/End 搬首尾,裸 ↑↓ 留给页面滚动;③ 顺序写回 value 信号并触发 onChange,拖拽期间跳过外部重排避免中断手势;④ 句柄 { el, move, order },下标越界与禁用时静默忽略;⑤ 样式只消费 --ua-* 令牌,禁止新增硬编码阴影/时长/字号;⑥ manifest/docs/README/demo/llms-full 同步,npm run check 全绿。",
"notes": "新增 src/sortableList.ts(118 行)+ types 两项 + index 导出 + ui.css 六条(只消费令牌);整行可拖、越过邻行中线换位、dragend 落定,Alt+↑↓/Home/End 键盘搬位;顺序写回 value 信号并触发 onChange,拖拽中跳过外部重排;句柄 { el, move, order } 越界静默忽略;组件 87→88,README/AGENTS/ARCHITECTURE 计数与 docs 同步"
},
{
"id": "g302",
"domain": "tune",
"status": "open",
"title": "dataTable 接上内核的多列排序:Shift+点击叠加第二列",
"motivation": "table-core 的 toggleSort 早就支持 action.multi(按 rules 顺序逐列比较),但皮肤层 dispatch 时从不传 multi,用户按住 Shift 点第二个表头毫无反应,多列排序只能靠手写 setSorting;表头标记也只反映单列方向,看不出比较优先级。",
"acceptance": "① 表头点击与键盘 Enter / 空格都读 shiftKey 并透传 multi;② 参与排序的列 ≥ 2 时标记追加优先级序号(↑1 / ↓2),单列时保持原箭头;③ manifest 手把手与 demo 描述同步;④ npm run check 全绿。",
"notes": ""
}
]
}
+2 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "ui-arch-registry-index/0.1",
"generatedAt": "2026-10-26T16:28:37.124Z",
"generatedAt": "2026-10-26T16:30:17.353Z",
"repoRoot": ".",
"packages": [
{
@@ -2134,6 +2134,7 @@
"steps": [
"准备行数据,确保每行有唯一 id(跨页选择与刷新不丢行靠它)",
"定义 columns:sortable: true 的列表头可点击排序(升 → 降 → 取消循环),标记箭头 ↑↓↕",
"多列排序:按住 Shift 点第二个可排序列即叠加——内核按 rules 顺序逐列比较,表头标记带优先级(↑1 / ↓2),不按 Shift 则回到单列语义",
"列展示细节用皮肤字段:align 控制表头与单元格对齐,format(value, row) 返回纯文本(走 textContent,不需要转义)",
"数据源可以给信号或 computed(如筛选结果):变化时内核整体换源,选择状态按 rowKey 剔除已消失的行,排序与页码不被打断",
"列宽用内核字段 width:数字(像素)固定该列,'flex' 或不设则按内容自适应",