+
list table
-
+
pivot table
-
+
+
+
pivot chart
+
+

+
gantt chart
+
- 基本表格是最简单的表格形态,它由行和列组成,每个单元格包含一个数据项。基本表格适用于对数据进行简单的排列和展示。
- 透视表格是一种用于多维数据分析的表格形态,它可以将数据按照多个维度进行聚合和汇总,为用户提供多角度的数据分析和探索。
- 透视组合图是一种将多维透视表格与其他图表形式(如柱状图、折线图等)结合起来的图表形态,它可以将透视表格中的数据转化为更直观、易懂的图形展示。
+- 甘特图是一种用于展示项目进度和资源分配的图表形态,它可以帮助用户更好地了解项目的进展情况和资源分配情况。
同时基本表格可以形变为转置表格,还可以用树形结构展示层次关系:
diff --git a/docs/assets/guide/zh/table_type/List_table/tree_list.md b/docs/assets/guide/zh/table_type/List_table/tree_list.md
index 35589bd01..ffad6e9f5 100644
--- a/docs/assets/guide/zh/table_type/List_table/tree_list.md
+++ b/docs/assets/guide/zh/table_type/List_table/tree_list.md
@@ -182,3 +182,126 @@ const records = [
3. 将获取到的数据回传到表格组件中,可调用接口`instance.setRecordChildren(childrenData, col, row)`;
具体示例可以看:https://visactor.io/vtable/demo/table-type/list-table-tree-lazy-load
+
+## 合并父节点
+
+在一些场景中,希望父节点整行作为一个合并单元格显示,可以在数据中,配置`vtableMerge`和`vtableMergeName`,其中`vtableMerge`为 true 时,表示该父节点为合并单元格,`vtableMergeName`为合并单元格中显示的名称;同时,需要在option中加入`enableTreeNodeMerge`配置为 true。
+
+```javascript livedemo template=vtable
+const records = [
+ {
+ group: 'Human Resources Department',
+ total_children: 30,
+ monthly_expense: '$45000',
+ new_hires_this_month: 6,
+ resignations_this_month: 3,
+ complaints_and_suggestions: 2,
+ vtableMerge: true,
+ vtableMergeName: 'Human Resources Department(merge)',
+ children: [
+ {
+ group: 'Recruiting Group',
+ vtableMerge: true,
+ vtableMergeName: 'Recruiting Group(merge)',
+ children: [
+ {
+ group: 'John Smith',
+ position: 'Recruiting Manager',
+ salary: '$8000'
+ },
+ {
+ group: 'Emily Johnson',
+ position: 'Recruiting Supervisor',
+ salary: '$6000'
+ },
+ {
+ group: 'Michael Davis',
+ position: 'Recruiting Specialist',
+ salary: '$4000'
+ }
+ ],
+ total_children: 15,
+ monthly_expense: '$25000',
+ new_hires_this_month: 4,
+ resignations_this_month: 2,
+ complaints_and_suggestions: 1
+ },
+ {
+ group: 'Training Group',
+ vtableMerge: true,
+ vtableMergeName: 'Training Group(merge)',
+ children: [
+ {
+ group: 'Jessica Brown',
+ position: 'Training Manager',
+ salary: '$8000'
+ },
+ {
+ group: 'Andrew Wilson',
+ position: 'Training Supervisor',
+ salary: '$6000'
+ }
+ ],
+ total_children: 15,
+ monthly_expense: '$20000',
+ new_hires_this_month: 2,
+ resignations_this_month: 1,
+ complaints_and_suggestions: 1
+ }
+ ]
+ }
+];
+const columns = [
+ {
+ field: 'group',
+ title: 'department',
+ width: 'auto',
+ tree: true
+ },
+ {
+ field: 'total_children',
+ title: 'memebers count',
+ width: 'auto',
+ fieldFormat(rec) {
+ if (rec?.['position']) {
+ return `position: ${rec['position']}`;
+ } else return rec?.['total_children'];
+ }
+ },
+ {
+ field: 'monthly_expense',
+ title: 'monthly expense',
+ width: 'auto',
+ fieldFormat(rec) {
+ if (rec?.['salary']) {
+ return `salary: ${rec['salary']}`;
+ } else return rec?.['monthly_expense'];
+ }
+ },
+ {
+ field: 'new_hires_this_month',
+ title: 'new hires this month',
+ width: 'auto'
+ },
+ {
+ field: 'resignations_this_month',
+ title: 'resignations this month',
+ width: 'auto'
+ },
+ {
+ field: 'complaints_and_suggestions',
+ title: 'recived complaints counts',
+ width: 'auto'
+ }
+];
+
+const option = {
+ records,
+ columns,
+ widthMode: 'standard',
+ enableTreeNodeMerge: true,
+ hierarchyExpandLevel: Infinity
+};
+const tableInstance = new VTable.ListTable(document.getElementById(CONTAINER_ID), option);
+window['tableInstance'] = tableInstance;
+```
\ No newline at end of file
diff --git a/packages/openinula-vtable/package.json b/packages/openinula-vtable/package.json
index 9fed20925..8c89d61d0 100644
--- a/packages/openinula-vtable/package.json
+++ b/packages/openinula-vtable/package.json
@@ -1,6 +1,6 @@
{
"name": "@visactor/openinula-vtable",
- "version": "1.7.1",
+ "version": "1.7.2",
"description": "The openinula version of VTable",
"keywords": [
"openinula",
diff --git a/packages/react-vtable/package.json b/packages/react-vtable/package.json
index 127e445d9..0e26590b5 100644
--- a/packages/react-vtable/package.json
+++ b/packages/react-vtable/package.json
@@ -1,6 +1,6 @@
{
"name": "@visactor/react-vtable",
- "version": "1.7.1",
+ "version": "1.7.2",
"description": "The react version of VTable",
"keywords": [
"react",
diff --git a/packages/vtable-editors/package.json b/packages/vtable-editors/package.json
index 049523c01..70c47703f 100644
--- a/packages/vtable-editors/package.json
+++ b/packages/vtable-editors/package.json
@@ -1,6 +1,6 @@
{
"name": "@visactor/vtable-editors",
- "version": "1.7.1",
+ "version": "1.7.2",
"description": "",
"sideEffects": false,
"main": "cjs/index.js",
diff --git a/packages/vtable-export/package.json b/packages/vtable-export/package.json
index 5d29466d4..82531ba35 100644
--- a/packages/vtable-export/package.json
+++ b/packages/vtable-export/package.json
@@ -1,6 +1,6 @@
{
"name": "@visactor/vtable-export",
- "version": "1.7.1",
+ "version": "1.7.2",
"description": "The export util of VTable",
"author": {
"name": "VisActor",
diff --git a/packages/vtable-gantt/README.md b/packages/vtable-gantt/README.md
index 29e87b01a..a4d08e7b7 100644
--- a/packages/vtable-gantt/README.md
+++ b/packages/vtable-gantt/README.md
@@ -5,22 +5,22 @@
-
VTable
+ VTable-Gantt
-VTable is not just a high-performance multidimensional data analysis table, but also a grid artist that creates art between rows and columns.
+VTable-Gantt create an efficient and flexible Gantt chart solution to make project management easier. Through simple configuration and custom layout, you can quickly get started and meet various complex needs. Improve team collaboration efficiency and achieve transparency of project progress.
- Introduction •
- demo •
- Tutorial •
- API•
+ Introduction •
+ Demo •
+ Tutorial •
+ API•
-[](https://www.npmjs.com/package/@visactor/vtable)
-[](https://www.npmjs.com/package/@visactor/vtable)
+[](https://www.npmjs.com/package/@visactor/vtable-gantt)
+[](https://www.npmjs.com/package/@visactor/vtable-gantt)
[](https://github.com/visactor/vtable/blob/main/LICENSE)
@@ -39,20 +39,25 @@ English| [简体中文](./README.zh-CN.md)
# Introduction
-VTable is a canvas table library based on visual rendering engine [VRender](https://github.com/VisActor/VRender).
+VTable-Gantt is a Gantt chart component library in the VisActor visualization system, based on the table component VTable and the visualization rendering engine VRender. It is designed specifically for project management and task tracking, providing powerful visualization and interaction features. The core capabilities are as follows:
-The core capabilities are as follows:
-
-1. Extreme performance: Supports fast computation and rendering of millions of data points.
-2. Multidimensional analysis: Automatically analyzes and presents multidimensional data.
-3. Strong expressiveness: Provides flexible and powerful graphic capabilities, seamlessly integrating with charts of [VChart](https://github.com/VisActor/VChart).
+1. High performance: Supports fast computation and rendering of large-scale project data, ensuring a smooth user experience.
+2. Flexible layout: Supports custom timeline, task bar styles, and layouts to meet different project management needs.
+3. Powerful interaction: Provides drag-and-drop, zoom, and edit functions for tasks, simplifying project management operations.
+4. Rich visualization capabilities: supports custom rendering of information cells and task bars, provides tree structure display, and improves the diversity and intuitiveness of data display.
# Repo Intro
This repository includes the following packages:
-1. vtable: VTable components
-2. vtable-docs: VTable documentation
+1. packages/vtable: The core code repository of VTable
+2. packages/vtable-gantt: Gantt chart component code
+3. packages/vtable-editors: Table editor component code
+4. packages/vtable-export: Table export tool code
+5. packages/vtable-search: Table search tool code
+6. packages/react-vtable: React version of the table component
+7. packages/vue-vtable: Vue version of the table component
+8. docs: Include VTable site tutorials, demos,apis and options, and also contains all Chinese and English documents.
# Usage
@@ -62,66 +67,122 @@ This repository includes the following packages:
```bash
// npm
-npm install @visactor/vtable
+npm install @visactor/vtable-gantt
// yarn
-yarn add @visactor/vtable
+yarn add @visactor/vtable-gantt
```
## Quick Start
```javascript
-import * as VTable from '@visactor/vtable';
-
-const columns =[
- {
- "field": "Order ID",
- "caption": "Order ID",
- },
- {
- "field": "Customer ID",
- "caption": "Customer ID",
- },
- {
- "field": "Product Name",
- "caption": "Product Name",
- },
- {
- "field": "Sales",
- "caption": "Sales",
- },
- {
- "field": "Profit",
- "caption": "Profit",
- }
+import {Gantt} from '@visactor/vtable-gantt';
+const records = [
+ {
+ id: 1,
+ title: 'Task 1',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '2024-07-24',
+ end: '2024-07-26',
+ progress: 31,
+ priority: 'P0',
+ },
+ {
+ id: 2,
+ title: 'Task 2',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '07/24/2024',
+ end: '08/04/2024',
+ progress: 60,
+ priority: 'P0'
+ },
+ {
+ id: 3,
+ title: 'Task 3',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '2024-08-04',
+ end: '2024-08-04',
+ progress: 100,
+ priority: 'P1'
+ },
+ {
+ id: 4,
+ title: 'Task 4',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '2024-07-26',
+ end: '2024-07-28',
+ progress: 31,
+ priority: 'P0'
+ }
];
-const option = {
- records:[
- {
- "Order ID": "CA-2018-156720",
- "Customer ID": "JM-15580",
- "Product Name": "Bagged Rubber Bands",
- "Sales": "3.024",
- "Profit": "-0.605"
+const columns = [
+ {
+ field: 'title',
+ title: 'title',
+ width: 'auto',
+ sort: true,
+ tree: true,
+ editor: 'input'
+ },
+ {
+ field: 'start',
+ title: 'start',
+ width: 'auto',
+ sort: true,
+ editor: 'date-input'
},
{
- "Order ID": "CA-2018-115427",
- "Customer ID": "EB-13975",
- "Product Name": "GBC Binding covers",
- "Sales": "20.72",
- "Profit": "6.475"
+ field: 'end',
+ title: 'end',
+ width: 'auto',
+ sort: true,
+ editor: 'date-input'
+ }
+];
+const option = {
+ overscrollBehavior: 'none',
+ records,
+ taskListTable: {
+ columns,
+ },
+ taskBar: {
+ startDateField: 'start',
+ endDateField: 'end',
+ progressField: 'progress'
+ },
+ timelineHeader: {
+ colWidth: 100,
+ backgroundColor: '#EEF1F5',
+ horizontalLine: {
+ lineWidth: 1,
+ lineColor: '#e1e4e8'
+ },
+ verticalLine: {
+ lineWidth: 1,
+ lineColor: '#e1e4e8'
+ },
+ scales: [
+ {
+ unit: 'day',
+ step: 1,
+ format(date) {
+ return date.dateIndex.toString();
+ },
+ style: {
+ fontSize: 20,
+ fontWeight: 'bold',
+ color: 'white',
+ strokeColor: 'black',
+ textAlign: 'right',
+ textBaseline: 'bottom',
+ backgroundColor: '#EEF1F5'
+ }
+ }
+ ]
},
- ...
- ],
- columns,
- widthMode:'standard'
};
-const tableInstance = new VTable.ListTable(document.getElementById(CONTAINER_ID), option);
-
-
-
-
+const ganttInstance = new Gantt(document.getElementById(CONTAINER_ID), option);
```
##
diff --git a/packages/vtable-gantt/README.zh-CN.md b/packages/vtable-gantt/README.zh-CN.md
new file mode 100644
index 000000000..73aac7bd6
--- /dev/null
+++ b/packages/vtable-gantt/README.zh-CN.md
@@ -0,0 +1,214 @@
+
+
+
+
VTable-Gantt
+
+
+
+
+VTable-Gantt 打造高效、灵活的甘特图解决方案,让项目管理更轻松。通过简单的配置和自定义布局,快速上手并满足各种复杂需求。提升团队协作效率,实现项目进度透明化。.
+
+
+ Introduction •
+ Demo •
+ Tutorial •
+ API•
+
+
+[](https://www.npmjs.com/package/@visactor/vtable-gantt)
+[](https://www.npmjs.com/package/@visactor/vtable-gantt)
+[](https://github.com/visactor/vtable/blob/main/LICENSE)
+
+
+
+
+
+简体中文| [English](./README.md)
+
+
+
+
+
+(video)
+
+
+
+# 介绍
+
+VTable-Gantt 是 VisActor 可视化体系中的甘特图组件库,基于表格组件VTabe和可视化渲染引擎 VRender 进行封装。它专为项目管理和任务跟踪设计,提供了强大的可视化和交互功能。核心能力如下:
+
+1. 高效性能:支持大规模项目数据的快速运算与渲染,确保流畅的用户体验。
+2. 灵活布局:支持自定义时间轴、任务条样式和布局,满足不同项目管理需求。
+3. 强大交互:提供任务的拖拽、缩放和编辑功能,简化项目管理操作。
+4. 丰富的可视化能力:支持信息单元格及任务条的自定义渲染,提供树形结构展示,提升数据展示的多样性和直观性。
+
+# 代码仓库介绍
+
+主要包含以下几个子项目:
+
+1. packages/vtable:表格组件代码
+2. packages/vtable-gantt: 甘特图组件代码
+3. packages/vtable-editors: 表格编辑器组件代码
+4. packages/vtable-export: 表格导出工具代码
+5. packages/vtable-search: 表格搜索工具代码
+6. packages/react-vtable: React 版本的表格组件
+7. packages/vue-vtable: Vue 版本的表格组件
+8. docs: 教程文档
+
+# 用法
+
+## 安装
+
+[npm package](https://www.npmjs.com/package/@visactor/vtable)
+
+```bash
+// npm
+npm install @visactor/vtable-gantt
+
+// yarn
+yarn add @visactor/vtable-gantt
+```
+
+## 快速上手
+
+```javascript
+import {Gantt} from '@visactor/vtable-gantt';
+
+const records = [
+ {
+ id: 1,
+ title: 'Task 1',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '2024-07-24',
+ end: '2024-07-26',
+ progress: 31,
+ priority: 'P0',
+ },
+ {
+ id: 2,
+ title: 'Task 2',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '07/24/2024',
+ end: '08/04/2024',
+ progress: 60,
+ priority: 'P0'
+ },
+ {
+ id: 3,
+ title: 'Task 3',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '2024-08-04',
+ end: '2024-08-04',
+ progress: 100,
+ priority: 'P1'
+ },
+ {
+ id: 4,
+ title: 'Task 4',
+ developer: 'liufangfang.jane@bytedance.com',
+ start: '2024-07-26',
+ end: '2024-07-28',
+ progress: 31,
+ priority: 'P0'
+ }
+];
+
+const columns = [
+ {
+ field: 'title',
+ title: 'title',
+ width: 'auto',
+ sort: true,
+ tree: true,
+ editor: 'input'
+ },
+ {
+ field: 'start',
+ title: 'start',
+ width: 'auto',
+ sort: true,
+ editor: 'date-input'
+ },
+ {
+ field: 'end',
+ title: 'end',
+ width: 'auto',
+ sort: true,
+ editor: 'date-input'
+ }
+];
+const option = {
+ overscrollBehavior: 'none',
+ records,
+ taskListTable: {
+ columns,
+ },
+ taskBar: {
+ startDateField: 'start',
+ endDateField: 'end',
+ progressField: 'progress'
+ },
+ timelineHeader: {
+ colWidth: 100,
+ backgroundColor: '#EEF1F5',
+ horizontalLine: {
+ lineWidth: 1,
+ lineColor: '#e1e4e8'
+ },
+ verticalLine: {
+ lineWidth: 1,
+ lineColor: '#e1e4e8'
+ },
+ scales: [
+ {
+ unit: 'day',
+ step: 1,
+ format(date) {
+ return date.dateIndex.toString();
+ },
+ style: {
+ fontSize: 20,
+ fontWeight: 'bold',
+ color: 'white',
+ strokeColor: 'black',
+ textAlign: 'right',
+ textBaseline: 'bottom',
+ backgroundColor: '#EEF1F5'
+ }
+ }
+ ]
+ },
+};
+const ganttInstance = new Gantt(document.getElementById(CONTAINER_ID), option);
+
+```
+
+##
+
+[更多 demo 和详细教程](https://visactor.io/vtable)
+
+# 相关链接
+
+- [官网](https://visactor.io/vtable)
+
+# 生态系统
+
+| Project | Description |
+| ----------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| [AI-generated Components](https://visactor.io/ai-vtable) | AI-generated table component. |
+
+# 参与贡献
+
+如想参与贡献,请先阅读 [行为准则](./CODE_OF_CONDUCT.md) 和 [贡献指南](./CONTRIBUTING.zh-CN.md)。
+
+细流成河,终成大海!
+
+

+
+# 许可证
+
+[MIT 协议](./LICENSE)
diff --git a/packages/vtable-gantt/package.json b/packages/vtable-gantt/package.json
index 209a237ee..76e9b6ac4 100644
--- a/packages/vtable-gantt/package.json
+++ b/packages/vtable-gantt/package.json
@@ -1,6 +1,6 @@
{
"name": "@visactor/vtable-gantt",
- "version": "1.7.1",
+ "version": "1.7.2",
"description": "canvas table width high performance",
"keywords": [
"vtable-gantt",
diff --git a/packages/vtable-search/package.json b/packages/vtable-search/package.json
index ff9f7805f..4247d5a56 100644
--- a/packages/vtable-search/package.json
+++ b/packages/vtable-search/package.json
@@ -1,6 +1,6 @@
{
"name": "@visactor/vtable-search",
- "version": "1.7.1",
+ "version": "1.7.2",
"description": "The search util of VTable",
"author": {
"name": "VisActor",
diff --git a/packages/vtable/CHANGELOG.json b/packages/vtable/CHANGELOG.json
index 5357b358d..396d6f223 100644
--- a/packages/vtable/CHANGELOG.json
+++ b/packages/vtable/CHANGELOG.json
@@ -1,6 +1,18 @@
{
"name": "@visactor/vtable",
"entries": [
+ {
+ "version": "1.7.2",
+ "tag": "@visactor/vtable_v1.7.2",
+ "date": "Mon, 02 Sep 2024 10:09:57 GMT",
+ "comments": {
+ "none": [
+ {
+ "comment": "fix: when use groupBy then all merged cells set cellType text #2331\n\n"
+ }
+ ]
+ }
+ },
{
"version": "1.7.1",
"tag": "@visactor/vtable_v1.7.1",
diff --git a/packages/vtable/CHANGELOG.md b/packages/vtable/CHANGELOG.md
index 1b00e9004..4fd7c2295 100644
--- a/packages/vtable/CHANGELOG.md
+++ b/packages/vtable/CHANGELOG.md
@@ -1,6 +1,15 @@
# Change Log - @visactor/vtable
-This log was last generated on Mon, 02 Sep 2024 03:26:48 GMT and should not be manually modified.
+This log was last generated on Mon, 02 Sep 2024 10:09:57 GMT and should not be manually modified.
+
+## 1.7.2
+Mon, 02 Sep 2024 10:09:57 GMT
+
+### Updates
+
+- fix: when use groupBy then all merged cells set cellType text #2331
+
+
## 1.7.1
Mon, 02 Sep 2024 03:26:48 GMT
diff --git a/packages/vtable/examples/list/list-tree-group.ts b/packages/vtable/examples/list/list-tree-group.ts
index 21abed69a..f0f2cb43b 100644
--- a/packages/vtable/examples/list/list-tree-group.ts
+++ b/packages/vtable/examples/list/list-tree-group.ts
@@ -10,7 +10,7 @@ export function createTable() {
销售额: '129.696',
数量: '2',
利润: '60.704',
- vTableMerge: true,
+ vtableMerge: true,
vtableMergeName: '办公用品办公用品办公用品类',
children: [
{
@@ -60,7 +60,7 @@ export function createTable() {
销售额: '229.696',
数量: '20',
利润: '90.704',
- vTableMerge: true,
+ vtableMerge: true,
vtableMergeName: '技术技术技术技术类',
children: [
{
@@ -94,7 +94,7 @@ export function createTable() {
销售额: '129.696',
数量: '2',
利润: '-60.704',
- vTableMerge: true,
+ vtableMerge: true,
vtableMergeName: '家具类',
children: [
{
diff --git a/packages/vtable/package.json b/packages/vtable/package.json
index 6790a443c..7baf7c403 100644
--- a/packages/vtable/package.json
+++ b/packages/vtable/package.json
@@ -1,6 +1,6 @@
{
"name": "@visactor/vtable",
- "version": "1.7.1",
+ "version": "1.7.2",
"description": "canvas table width high performance",
"keywords": [
"grid",
diff --git a/packages/vtable/src/core/style-helper.ts b/packages/vtable/src/core/style-helper.ts
index c1f4dbf5f..5fab420ea 100644
--- a/packages/vtable/src/core/style-helper.ts
+++ b/packages/vtable/src/core/style-helper.ts
@@ -180,7 +180,7 @@ export function getCellStyle(col: number, row: number, table: BaseTableAPI): Ful
const rawRecord = table.getCellOriginRecord(col, row);
//如果是主体部分,获取相应的style
- if (rawRecord?.vTableMerge) {
+ if (rawRecord?.vtableMerge) {
cacheKey = 'merge-title';
} else if (table.isSeriesNumberInBody(col, row)) {
// 如果是行序号
@@ -195,7 +195,7 @@ export function getCellStyle(col: number, row: number, table: BaseTableAPI): Ful
}
let cacheStyle;
- if (rawRecord?.vTableMerge) {
+ if (rawRecord?.vtableMerge) {
cacheStyle = table.bodyMergeTitleCache.get(cacheKey);
} else if (layoutMap.isBottomFrozenRow(row)) {
cacheStyle = table.bodyBottomStyleCache.get(cacheKey);
@@ -214,7 +214,7 @@ export function getCellStyle(col: number, row: number, table: BaseTableAPI): Ful
const style = column?.style;
cacheStyle =
columnStyleContents.of(
style,
- rawRecord?.vTableMerge && table.theme.groupTitleStyle
+ rawRecord?.vtableMerge && table.theme.groupTitleStyle
? table.theme.groupTitleStyle
: layoutMap.isBottomFrozenRow(row) && table.theme.bottomFrozenStyle
? table.theme.bottomFrozenStyle
diff --git a/packages/vtable/src/data/CachedDataSource.ts b/packages/vtable/src/data/CachedDataSource.ts
index 2b8dfe0ab..26d441490 100644
--- a/packages/vtable/src/data/CachedDataSource.ts
+++ b/packages/vtable/src/data/CachedDataSource.ts
@@ -261,7 +261,7 @@ function dealWithGroup(record: any, children: any[], map: Map, grou
} else {
map.set(value, children.length);
children.push({
- vTableMerge: true,
+ vtableMerge: true,
vtableMergeName: value,
children: [] as any,
map: new Map()
@@ -287,7 +287,7 @@ function syncGroupCollapseState(
oldGroupMap = new Map();
for (let i = 0; i < oldSource.length; i++) {
const record = oldSource[i];
- if (record.vTableMerge) {
+ if (record.vtableMerge) {
oldGroupMap.set(record.vtableMergeName, i);
}
}
@@ -297,7 +297,7 @@ function syncGroupCollapseState(
newGroupMap = new Map();
for (let i = 0; i < newSource.length; i++) {
const record = newSource[i];
- if (record.vTableMerge) {
+ if (record.vtableMerge) {
newGroupMap.set(record.vtableMergeName, i);
}
}
diff --git a/packages/vtable/src/layout/cell-range/simple-cell-range.ts b/packages/vtable/src/layout/cell-range/simple-cell-range.ts
index 8800a5a81..7da3d7a27 100644
--- a/packages/vtable/src/layout/cell-range/simple-cell-range.ts
+++ b/packages/vtable/src/layout/cell-range/simple-cell-range.ts
@@ -102,8 +102,8 @@ function getTreeTitleMerge(col: number, row: number, cellRange: CellRange, layou
}
const cellRecord = layout._table.getCellRawRecord(col, row);
- if (cellRecord?.vTableMerge) {
- // const vTableMergeName = cellRecord.vtableMergeName;
+ if (cellRecord?.vtableMerge) {
+ // const vtableMergeName = cellRecord.vtableMergeName;
cellRange.start.col = layout.rowHeaderLevelCount;
cellRange.end.col = layout.colCount - 1;
cellRange.start.row = cellRange.end.row = row;
diff --git a/packages/vtable/src/scenegraph/group-creater/cell-helper.ts b/packages/vtable/src/scenegraph/group-creater/cell-helper.ts
index 5f6d18426..adb85c1df 100644
--- a/packages/vtable/src/scenegraph/group-creater/cell-helper.ts
+++ b/packages/vtable/src/scenegraph/group-creater/cell-helper.ts
@@ -452,10 +452,11 @@ export function updateCell(col: number, row: number, table: BaseTableAPI, addNew
range = table.getCellRange(col, row);
isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;
}
-
+ let isvtableMerge = false;
if (table.internalProps.enableTreeNodeMerge && isMerge) {
- const { vtableMergeName, vTableMerge } = table.getCellRawRecord(range.start.col, range.start.row);
- if (vTableMerge) {
+ const { vtableMergeName, vtableMerge } = table.getCellRawRecord(range.start.col, range.start.row);
+ isvtableMerge = vtableMerge;
+ if (vtableMerge) {
mayHaveIcon = true;
if ((table.options as ListTableConstructorOptions).groupTitleCustomLayout) {
customResult = dealWithCustom(
@@ -585,7 +586,9 @@ export function updateCell(col: number, row: number, table: BaseTableAPI, addNew
return undefined;
}
- const type = table.isHeader(col, row)
+ const type = isvtableMerge
+ ? 'text'
+ : table.isHeader(col, row)
? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType
: table.getBodyColumnType(col, row);
diff --git a/packages/vtable/src/scenegraph/group-creater/column-helper.ts b/packages/vtable/src/scenegraph/group-creater/column-helper.ts
index b36a547f2..46f224a31 100644
--- a/packages/vtable/src/scenegraph/group-creater/column-helper.ts
+++ b/packages/vtable/src/scenegraph/group-creater/column-helper.ts
@@ -148,10 +148,11 @@ export function createComplexColumn(
cellHeight = mergeSize.cellHeight;
}
}
-
+ let isvtableMerge = false;
if (table.internalProps.enableTreeNodeMerge && isMerge) {
- const { vtableMergeName, vTableMerge } = table.getCellRawRecord(range.start.col, range.start.row);
- if (vTableMerge) {
+ const { vtableMergeName, vtableMerge } = table.getCellRawRecord(range.start.col, range.start.row);
+ isvtableMerge = vtableMerge;
+ if (vtableMerge) {
mayHaveIcon = true;
if ((table.options as ListTableConstructorOptions).groupTitleCustomLayout) {
customResult = dealWithCustom(
@@ -201,10 +202,11 @@ export function createComplexColumn(
}
// margin = getProp('margin', headerStyle, col, 0, table)
- const type =
- (table.isHeader(col, row)
- ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType
- : table.getBodyColumnType(col, row)) || 'text';
+ const type = isvtableMerge
+ ? 'text'
+ : (table.isHeader(col, row)
+ ? (table._getHeaderLayoutMap(col, row) as HeaderData).headerType
+ : table.getBodyColumnType(col, row)) || 'text';
// deal with promise data
if (isPromise(value)) {
diff --git a/packages/vtable/src/scenegraph/layout/update-height.ts b/packages/vtable/src/scenegraph/layout/update-height.ts
index 966259a55..0bc24050e 100644
--- a/packages/vtable/src/scenegraph/layout/update-height.ts
+++ b/packages/vtable/src/scenegraph/layout/update-height.ts
@@ -127,9 +127,11 @@ export function updateCellHeight(
cell.needUpdateHeight = false;
cell.setAttribute('height', distHeight);
-
+ const isvtableMerge = scene.table.getCellRawRecord(col, row)?.vtableMerge;
// 更新单元格布局
- const type = scene.table.isHeader(col, row)
+ const type = isvtableMerge
+ ? 'text'
+ : scene.table.isHeader(col, row)
? (scene.table._getHeaderLayoutMap(col, row) as HeaderData).headerType
: scene.table.getBodyColumnType(col, row);
if (type === 'progressbar') {
@@ -234,9 +236,9 @@ export function updateCellHeight(
let customRender;
let customLayout;
const cellLocation = scene.table.getCellLocation(col, row);
- const { vTableMerge } = scene.table.getCellRawRecord(col, row);
+ const { vtableMerge } = scene.table.getCellRawRecord(col, row);
- if (vTableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {
+ if (vtableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {
customLayout = (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout;
} else if (cellLocation !== 'body') {
const define = scene.table.getHeaderDefine(col, row);
diff --git a/packages/vtable/src/scenegraph/layout/update-width.ts b/packages/vtable/src/scenegraph/layout/update-width.ts
index 4467b6a46..7bfb1e86c 100644
--- a/packages/vtable/src/scenegraph/layout/update-width.ts
+++ b/packages/vtable/src/scenegraph/layout/update-width.ts
@@ -266,8 +266,11 @@ function updateCellWidth(
return false;
}
const autoRowHeight = scene.table.isAutoRowHeight(row);
+ const isvtableMerge = scene.table.getCellRawRecord(col, row)?.vtableMerge;
// 更新单元格布局
- const type = scene.table.isHeader(col, row)
+ const type = isvtableMerge
+ ? 'text'
+ : scene.table.isHeader(col, row)
? (scene.table._getHeaderLayoutMap(col, row) as HeaderData).headerType
: scene.table.getBodyColumnType(col, row);
let isHeightChange = false;
@@ -386,9 +389,9 @@ function updateCellWidth(
let customRender;
let customLayout;
const cellType = scene.table.getCellLocation(col, row);
- const { vTableMerge } = scene.table.getCellRawRecord(col, row);
+ const { vtableMerge } = scene.table.getCellRawRecord(col, row);
- if (vTableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {
+ if (vtableMerge && (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout) {
customLayout = (scene.table.options as ListTableConstructorOptions).groupTitleCustomLayout;
} else if (cellType !== 'body') {
const define = scene.table.getHeaderDefine(col, row);
diff --git a/packages/vtable/src/scenegraph/scenegraph.ts b/packages/vtable/src/scenegraph/scenegraph.ts
index 10a4e9b3f..44f02c331 100644
--- a/packages/vtable/src/scenegraph/scenegraph.ts
+++ b/packages/vtable/src/scenegraph/scenegraph.ts
@@ -1639,7 +1639,10 @@ export class Scenegraph {
}
updateCellContentWhileResize(col: number, row: number) {
- const type = this.table.isHeader(col, row)
+ const isvtableMerge = this.table.getCellRawRecord(col, row)?.vtableMerge;
+ const type = isvtableMerge
+ ? 'text'
+ : this.table.isHeader(col, row)
? (this.table._getHeaderLayoutMap(col, row) as HeaderData).headerType
: this.table.getBodyColumnType(col, row);
const cellGroup = this.getCell(col, row);