Skip to content

Commit 3ea60d9

Browse files
authored
Merge pull request #5073 from VisActor/release/1.25.0
[Auto release] release 1.25.0
2 parents 2ba2040 + eba665b commit 3ea60d9

File tree

65 files changed

+2657
-409
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+2657
-409
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"definitionName":"lockStepVersion","policyName":"vtableMain","version":"1.24.0","mainProject":"@visactor/vtable","nextBump":"minor"}]
1+
[{"definitionName":"lockStepVersion","policyName":"vtableMain","version":"1.25.0","mainProject":"@visactor/vtable","nextBump":"minor"}]

docs/assets/changelog/en/release.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
# v1.24.0
2+
3+
2026-03-18
4+
5+
6+
**🆕 New feature**
7+
8+
- **@visactor/vtable-gantt**: gantt weekend column width support setting
9+
- **@visactor/vtable-sheet**: add undo/redo to sheet
10+
11+
**🐛 Bug fix**
12+
13+
- **@visactor/vtable**: groupBy with frozenColCount and enableTreeStickCell usage problem
14+
- **@visactor/vtable**: when just has only one column groupTitle not show
15+
- **@visactor/vtable**: checkbox cell render error when set groupBy with rowSeriesNumber
16+
17+
18+
19+
[more detail about v1.24.0](https://github.com/VisActor/VTable/releases/tag/v1.24.0)
20+
121
# v1.23.3
222

323
2026-03-05

docs/assets/changelog/zh/release.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
# v1.24.0
2+
3+
2026-03-18
4+
5+
6+
**🆕 新增功能**
7+
8+
- **@visactor/vtable-gantt**: 甘特图配置支持设置周末列宽度
9+
- **@visactor/vtable-sheet**: 电子表格新增撤销/重做功能
10+
11+
**🐛 功能修复**
12+
13+
- **@visactor/vtable**: 修复 groupBy 分组表配合使用 frozenColCount 和 enableTreeStickCell 时滚动错位的问题
14+
- **@visactor/vtable**: 修复当只有一列时,分组标题不显示问题
15+
- **@visactor/vtable**: 修复当设置分组表时,复选框单元格渲染错误问题
16+
17+
18+
19+
[更多详情请查看 v1.24.0](https://github.com/VisActor/VTable/releases/tag/v1.24.0)
20+
121
# v1.23.3
222

323
2026-03-05
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
category: examples
3+
group: gantt
4+
title: Task Bar Locate (Offscreen Indicator)
5+
cover: https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/gantt/gantt-locate-taskbar.gif
6+
link: gantt/Getting_Started
7+
option: Gantt#taskBar
8+
---
9+
10+
# Task Bar Locate (Offscreen Indicator)
11+
12+
When the timeline is long, task bars may be outside the current viewport. This demo shows how to enable the locate icon feature: when a task bar is horizontally outside the viewport, an icon is displayed at the left/right edge of the gantt view; hover highlights it, and click scrolls the task bar into view.
13+
14+
## Key Option
15+
16+
- `taskBar.locateIcon: true`
17+
18+
## Live Demo
19+
20+
```javascript livedemo template=vtable
21+
// import * as VTableGantt from '@visactor/vtable-gantt';
22+
let ganttInstance;
23+
24+
const records = [
25+
{ id: 1, title: 'Offscreen on the left', start: '2024-02-05', end: '2024-02-20', progress: 20 },
26+
{ id: 2, title: 'Offscreen on the left', start: '2024-03-10', end: '2024-03-18', progress: 60 },
27+
{ id: 5, title: 'Visible in viewport', start: '2024-05-28', end: '2024-06-05', progress: 50 },
28+
{ id: 3, title: 'Offscreen on the right', start: '2024-10-05', end: '2024-10-20', progress: 40 },
29+
{ id: 4, title: 'Offscreen on the right', start: '2024-11-10', end: '2024-11-25', progress: 80 }
30+
];
31+
32+
const columns = [
33+
{ field: 'title', title: 'title', width: 160, sort: true },
34+
{ field: 'start', title: 'start', width: 120, sort: true },
35+
{ field: 'end', title: 'end', width: 120, sort: true },
36+
{ field: 'progress', title: 'progress', width: 100, sort: true }
37+
];
38+
39+
const option = {
40+
records,
41+
taskKeyField: 'id',
42+
taskListTable: {
43+
columns,
44+
tableWidth: 280,
45+
minTableWidth: 240,
46+
maxTableWidth: 600
47+
},
48+
taskBar: {
49+
startDateField: 'start',
50+
endDateField: 'end',
51+
progressField: 'progress',
52+
locateIcon: true
53+
},
54+
minDate: '2024-01-01',
55+
maxDate: '2024-12-31',
56+
timelineHeader: {
57+
colWidth: 30,
58+
scales: [{ unit: 'day', step: 1 }]
59+
},
60+
scrollStyle: {
61+
visible: 'scrolling'
62+
},
63+
grid: {
64+
verticalLine: { lineWidth: 1, lineColor: '#e1e4e8' },
65+
horizontalLine: { lineWidth: 1, lineColor: '#e1e4e8' }
66+
}
67+
};
68+
69+
ganttInstance = new VTableGantt.Gantt(document.getElementById(CONTAINER_ID), option);
70+
window['ganttInstance'] = ganttInstance;
71+
72+
setTimeout(() => {
73+
const x = ganttInstance.getXByTime(new Date('2024-06-01 00:00:00').getTime());
74+
ganttInstance.scrollLeft = x;
75+
}, 0);
76+
```
77+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
category: examples
3+
group: Interaction
4+
title: Scrollbars In Frozen Areas
5+
cover: https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/preview/scroll-frozen.gif
6+
link: interaction/scroll-frozen
7+
option: ListTable#scrollFrozenCols
8+
---
9+
10+
# Scrollbars In Frozen Areas
11+
12+
This example shows horizontal scrolling inside frozen areas (both left and right) when the total width of frozen columns exceeds the maximum frozen width.
13+
14+
## Key Options
15+
16+
- `frozenColCount` / `rightFrozenColCount` set left/right frozen columns count
17+
- `maxFrozenWidth` / `maxRightFrozenWidth` set the maximum frozen area width
18+
- `scrollFrozenCols` / `scrollRightFrozenCols` enable horizontal scrolling inside frozen areas
19+
- `theme.scrollStyle.visible` can be used to observe scrollbar visibility behavior across multiple scrollable regions (e.g. `scrolling` / `focus`)
20+
21+
## Code
22+
23+
```javascript livedemo template=vtable
24+
let tableInstance;
25+
fetch('https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/North_American_Superstore_data.json')
26+
.then(res => res.json())
27+
.then(data => {
28+
const columns = [
29+
{ field: 'Order ID', title: 'Order ID', width: 160 },
30+
{ field: 'Customer ID', title: 'Customer ID', width: 160 },
31+
{ field: 'Product Name', title: 'Product Name', width: 220 },
32+
{ field: 'Category', title: 'Category', width: 140 },
33+
{ field: 'Sub-Category', title: 'Sub-Category', width: 160 },
34+
{ field: 'Region', title: 'Region', width: 120 },
35+
{ field: 'City', title: 'City', width: 140 },
36+
{ field: 'Order Date', title: 'Order Date', width: 140 },
37+
{ field: 'Region', title: 'Region', width: 120 },
38+
{ field: 'City', title: 'City', width: 140 },
39+
{ field: 'Order Date', title: 'Order Date', width: 140 },
40+
{ field: 'Quantity', title: 'Quantity', width: 120 },
41+
{ field: 'Sales', title: 'Sales', width: 120 },
42+
{ field: 'Profit', title: 'Profit', width: 120 },
43+
{ field: 'Segment', title: 'Segment', width: 140 },
44+
{ field: 'Ship Mode', title: 'Ship Mode', width: 140 }
45+
];
46+
47+
const option = {
48+
records: data,
49+
columns,
50+
widthMode: 'standard',
51+
frozenColCount: 4,
52+
rightFrozenColCount: 4,
53+
maxFrozenWidth: 320,
54+
maxRightFrozenWidth: 320,
55+
scrollFrozenCols: true,
56+
scrollRightFrozenCols: true,
57+
overscrollBehavior: 'none'
58+
};
59+
tableInstance = new VTable.ListTable(document.getElementById(CONTAINER_ID), option);
60+
window['tableInstance'] = tableInstance;
61+
});
62+
```

docs/assets/demo/menu.json

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,13 @@
314314
"en": "Gantt Basic"
315315
}
316316
},
317+
{
318+
"path": "gantt-locate-taskbar",
319+
"title": {
320+
"zh": "任务条定位(超出可视区)",
321+
"en": "Task Bar Locate"
322+
}
323+
},
317324
{
318325
"path": "gantt-customLayout",
319326
"title": {
@@ -439,8 +446,7 @@
439446
"zh": "甘特图缩放滚动条",
440447
"en": "Gantt DataZoomAxis Scrollbar"
441448
}
442-
}
443-
,
449+
},
444450
{
445451
"path": "gantt-baseline",
446452
"title": {
@@ -920,6 +926,13 @@
920926
"en": "scroll"
921927
}
922928
},
929+
{
930+
"path": "scroll-frozen",
931+
"title": {
932+
"zh": "冻结区可滚动",
933+
"en": "Scroll frozen area"
934+
}
935+
},
923936
{
924937
"path": "arrowkeys-move-select",
925938
"title": {
@@ -1845,4 +1858,4 @@
18451858
]
18461859
}
18471860
]
1848-
}
1861+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
category: examples
3+
group: gantt
4+
title: 甘特图任务条定位(超出可视区提示)
5+
cover: https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/gantt/gantt-locate-taskbar.gif
6+
link: gantt/Getting_Started
7+
option: Gantt#taskBar
8+
---
9+
10+
# 甘特图任务条定位(超出可视区提示)
11+
12+
当时间轴很长时,任务条可能不在当前可视区域内。本示例展示如何开启定位图标能力:当任务条横向超出可视区域时,在甘特图左右边缘显示定位图标;鼠标 hover 会高亮,点击后会自动滚动将任务条带入可视区域。
13+
14+
## 关键配置
15+
16+
- `taskBar.locateIcon: true`
17+
18+
## 代码演示
19+
20+
```javascript livedemo template=vtable
21+
// import * as VTableGantt from '@visactor/vtable-gantt';
22+
let ganttInstance;
23+
24+
const records = [
25+
{ id: 1, title: '任务条在左侧不可见', start: '2024-02-05', end: '2024-02-20', progress: 20 },
26+
{ id: 2, title: '任务条在左侧不可见', start: '2024-03-10', end: '2024-03-18', progress: 60 },
27+
{ id: 5, title: '任务条在可见区', start: '2024-05-28', end: '2024-06-05', progress: 50 },
28+
{ id: 3, title: '任务条在右侧不可见', start: '2024-10-05', end: '2024-10-20', progress: 40 },
29+
{ id: 4, title: '任务条在右侧不可见', start: '2024-11-10', end: '2024-11-25', progress: 80 }
30+
];
31+
32+
const columns = [
33+
{ field: 'title', title: 'title', width: 160, sort: true },
34+
{ field: 'start', title: 'start', width: 120, sort: true },
35+
{ field: 'end', title: 'end', width: 120, sort: true },
36+
{ field: 'progress', title: 'progress', width: 100, sort: true }
37+
];
38+
39+
const option = {
40+
records,
41+
taskKeyField: 'id',
42+
taskListTable: {
43+
columns,
44+
tableWidth: 280,
45+
minTableWidth: 240,
46+
maxTableWidth: 600
47+
},
48+
taskBar: {
49+
startDateField: 'start',
50+
endDateField: 'end',
51+
progressField: 'progress',
52+
locateIcon: true
53+
},
54+
minDate: '2024-01-01',
55+
maxDate: '2024-12-31',
56+
timelineHeader: {
57+
colWidth: 30,
58+
scales: [{ unit: 'day', step: 1 }]
59+
},
60+
scrollStyle: {
61+
visible: 'scrolling'
62+
},
63+
grid: {
64+
verticalLine: { lineWidth: 1, lineColor: '#e1e4e8' },
65+
horizontalLine: { lineWidth: 1, lineColor: '#e1e4e8' }
66+
}
67+
};
68+
69+
ganttInstance = new VTableGantt.Gantt(document.getElementById(CONTAINER_ID), option);
70+
window['ganttInstance'] = ganttInstance;
71+
72+
setTimeout(() => {
73+
const x = ganttInstance.getXByTime(new Date('2024-06-01 00:00:00').getTime());
74+
ganttInstance.scrollLeft = x;
75+
}, 0);
76+
```
77+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
category: examples
3+
group: Interaction
4+
title: 冻结区域滚动条
5+
cover: https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/preview/scroll-frozen.gif
6+
link: interaction/scroll-frozen
7+
option: ListTable#scrollFrozenCols
8+
---
9+
10+
# 冻结区域滚动条
11+
12+
该示例展示了当冻结区域的列宽总和超过最大冻结宽度时,开启冻结区域内部横向滚动的效果(左冻结与右冻结)。
13+
14+
## 关键配置
15+
16+
- `frozenColCount` / `rightFrozenColCount` 设置左右冻结列数
17+
- `maxFrozenWidth` / `maxRightFrozenWidth` 设置左右冻结区域最大宽度
18+
- `scrollFrozenCols` / `scrollRightFrozenCols` 开启冻结区域内部横向滚动
19+
- `theme.scrollStyle.visible` 可配合观察滚动条在多滚动区域下的显隐行为(如 `scrolling` / `focus`
20+
21+
## 代码演示
22+
23+
```javascript livedemo template=vtable
24+
let tableInstance;
25+
fetch('https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/North_American_Superstore_data.json')
26+
.then(res => res.json())
27+
.then(data => {
28+
const columns = [
29+
{ field: 'Order ID', title: 'Order ID', width: 160 },
30+
{ field: 'Customer ID', title: 'Customer ID', width: 160 },
31+
{ field: 'Product Name', title: 'Product Name', width: 220 },
32+
{ field: 'Category', title: 'Category', width: 140 },
33+
{ field: 'Sub-Category', title: 'Sub-Category', width: 160 },
34+
{ field: 'Region', title: 'Region', width: 120 },
35+
{ field: 'City', title: 'City', width: 140 },
36+
{ field: 'Order Date', title: 'Order Date', width: 140 },
37+
{ field: 'Region', title: 'Region', width: 120 },
38+
{ field: 'City', title: 'City', width: 140 },
39+
{ field: 'Order Date', title: 'Order Date', width: 140 },
40+
{ field: 'Quantity', title: 'Quantity', width: 120 },
41+
{ field: 'Sales', title: 'Sales', width: 120 },
42+
{ field: 'Profit', title: 'Profit', width: 120 },
43+
{ field: 'Segment', title: 'Segment', width: 140 },
44+
{ field: 'Ship Mode', title: 'Ship Mode', width: 140 }
45+
];
46+
47+
const option = {
48+
records: data,
49+
columns,
50+
widthMode: 'standard',
51+
frozenColCount: 4,
52+
rightFrozenColCount: 4,
53+
maxFrozenWidth: 320,
54+
maxRightFrozenWidth: 320,
55+
scrollFrozenCols: true,
56+
scrollRightFrozenCols: true,
57+
overscrollBehavior: 'none'
58+
};
59+
tableInstance = new VTable.ListTable(document.getElementById(CONTAINER_ID), option);
60+
window['tableInstance'] = tableInstance;
61+
});
62+
```

0 commit comments

Comments
 (0)