[Feature] 表头拖拽支持跨层级/跨分组移动
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- data-visualization, frontend
Direzione di ricerca
Inizia leggendo l’implementazione esistente di ListTable dragOrder e dragHeaderMode, inclusi frozenColDragHeaderMode e validateDragOrderOnEnd. Analizza come vengono rappresentate e riordinate le colonne annidate, quindi valuta il comportamento proposto di allowCrossGroupDrag. Il lavoro è completato quando le colonne foglia e i gruppi di primo livello possono essere spostati tra i gruppi, mantenendo il feedback visivo esistente, la gestione delle colonne bloccate e il callback di validazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What problem does this feature solve?
在实际业务中,表格列经常会通过多级表头分组来组织(例如:"销售" 分组下有 "Q1"、"Q2","市场" 分组下也有 "Q1"、"Q2")。目前 ListTable.dragOrder.dragHeaderMode 只支持同一层级或同一分组内的列顺序调整,无法直接将一个分组下的列拖拽到另一个分组下,也无法拖拽整个分组来改变其位置。
这就导致开发者必须自己额外实现一套列管理 UI(比如侧边栏树形拖拽),然后手动调用 table.setColumns(newColumns) 来更新表格。这样做的问题在于:
- 用户需要在两套交互之间切换,体验割裂;
- 拖拽提示、占位线、阴影等视觉效果都需要自行实现,成本高;
- 很难做到和 VTable 原生拖拽一致的手感。
期望的交互体验:
用户可以将某个分组下的叶子列(如 "销售-Q1")直接拖拽到另一个分组(如 "市场")下;
- 用户可以拖拽整个分组表头,调整顶层分组的顺序;
- 尽量复用现有 dragOrder 的拖拽视觉反馈(阴影、插入指示线、冻结列处理等)。
- 这种需求在数据分析平台、报表设计器、可配置表格等场景中非常常见。
What does the proposed API look like?
- 扩展现有 dragOrder 配置
可以在现有 dragHeaderMode 基础上增加跨分组拖拽能力,或者新增一个配置项:
interface DragOrderConfig {
dragHeaderMode?: 'none' | 'all' | 'column' | 'row';
// 新增:是否允许跨分组/跨层级拖拽
allowCrossGroupDrag?: boolean;
// 现有选项
frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';
validateDragOrderOnEnd?: (source: CellAddress, target: CellAddress) => boolean;
}
- 行为说明
当 allowCrossGroupDrag: true 时:
叶子列可以拖拽到另一个分组的子列位置;
顶层分组表头可以被拖拽,用于调整分组顺序;
拖拽完成后,表格内部自动重组 columns 的嵌套结构;
validateDragOrderOnEnd 仍然生效,返回 false 时取消此次拖拽。
- 使用示例
const table = new ListTable({
container: document.getElementById('container'),
records: data,
columns: [
{
title: '销售',
children: [
{ field: 'sales_q1', title: 'Q1' },
{ field: 'sales_q2', title: 'Q2' },
],
},
{
title: '市场',
children: [
{ field: 'mkt_q1', title: 'Q1' },
{ field: 'mkt_q2', title: 'Q2' },
],
},
],
dragOrder: {
dragHeaderMode: 'column',
allowCrossGroupDrag: true,
frozenColDragHeaderMode: 'fixedFrozenCount',
},
});
- Lingua principale
- TypeScript
- Stelle
- 3.7k
- Fork
- 492
- Merge medio
- 19h 48m
- PR unite (30g)
- 14
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di VisActor/VTable
-
bug
Difficoltà 3/5 Mezza giornata Idoneità per principianti 42/100
I maintainer di solito rispondono entro 1 giorno
-
feature
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
VisActor/VTable#5336 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
[Feature]Apertafeature
Difficoltà 5/5 Più di una settimana Idoneità per principianti 28/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di VisActor/VTable
Issue simili
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
lingdojo/kana-dojo#32663 · 1 commento · 5 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Admin: Title Separator field can't be cleared (input falls back to "|")Forse già presa @emdashbot l’ha presa oggi. Apertabot:bug bot:in-review
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
emdash-cms/emdash#4236 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
PHP workflow streaming requests buffer the full SSE responseForse già presa @Winoren l’ha presa oggi. Apertareview: medium
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
langgenius/dify#44270 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
area:holodeck review-finding
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
hyperdrive-technology/holodeck#142 ·
I maintainer di solito rispondono entro 1 giorno
-
session-worker-compile.yml uses a floating oven-sh/setup-bun@v2 tag instead of the pinned SHAAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
code-yeongyu/senpi#3573 ·
I maintainer di solito rispondono entro 1 giorno