Skip to content

Commit

Permalink
feat: 明细表支持同名列渲染 closes #2502 #2510 (#2568)
Browse files Browse the repository at this point in the history
* feat: 明细表支持同名列渲染 close #2519

* chore: 还原

* fix: 修复刷选序号列然后复制时未携带序号

* test: 修复单测
  • Loading branch information
lijinke666 authored Feb 29, 2024
1 parent de7c97b commit e324c93
Show file tree
Hide file tree
Showing 11 changed files with 1,481 additions and 1,083 deletions.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

1,054 changes: 82 additions & 972 deletions packages/s2-core/__tests__/spreadsheet/spread-sheet-facet-layout-api-spec.ts

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions packages/s2-core/__tests__/spreadsheet/spread-sheet-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,23 @@ describe('SpreadSheet Tests', () => {
s2.destroy();
});

test('should generate header node by field value', async () => {
const s2 = new PivotSheet(container, mockDataConfig, s2Options);

await s2.render();

expect(s2.facet.getRowNodes().map((node) => node.id)).toEqual([
'root[&]浙江',
'root[&]浙江[&]义乌',
'root[&]浙江[&]杭州',
]);
expect(s2.facet.getColNodes().map((node) => node.id)).toEqual([
'root[&]笔',
'root[&]笔[&]price',
'root[&]笔[&]cost',
]);
});

test('should init sheet by selector container', async () => {
const CONTAINER_ID = 'container';

Expand Down
26 changes: 26 additions & 0 deletions packages/s2-core/__tests__/spreadsheet/table-sheet-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -259,4 +259,30 @@ describe('TableSheet normal spec', () => {

s2.destroy();
});

test('should generate col node by field id', async () => {
const s2 = new TableSheet(getContainer(), dataCfg, options);

await s2.render();

expect(s2.facet.getColNodes().map((node) => node.id)).toEqual([
'root[&]$$series_number$$',
'root[&]order_id',
'root[&]ship_date',
'root[&]express_type',
'root[&]customer_name',
'root[&]customer_type',
'root[&]city',
'root[&]province',
'root[&]counter',
'root[&]area',
'root[&]type',
'root[&]sub_type',
'root[&]product_name',
'root[&]sale_amt',
'root[&]count',
'root[&]discount',
'root[&]profit',
]);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,30 @@ exports[`List Table Core Data Process should copy all data 1`] = `
32 四川省 乐山市 办公用品 纸张 352"
`;

exports[`List Table Core Data Process should copy all data with header in table mode 1`] = `
"province city type sub_type number
浙江省 杭州市 家具 \\"### 问题摘要
- **会话地址**:\\" 7789
浙江省 绍兴市 家具 桌子 2367
浙江省 宁波市 家具 桌子 3877
浙江省 舟山市 家具 桌子 4342
浙江省 杭州市 家具 沙发 5343
浙江省 绍兴市 家具 沙发 632
浙江省 宁波市 家具 沙发 7234
浙江省 舟山市 家具 沙发 834
浙江省 杭州市 办公用品 笔 945
浙江省 绍兴市 办公用品 笔 1304
浙江省 宁波市 办公用品 笔 1145
浙江省 舟山市 办公用品 笔 1432
浙江省 杭州市 办公用品 纸张 1343
浙江省 绍兴市 办公用品 纸张 1354
浙江省 宁波市 办公用品 纸张 1523
浙江省 舟山市 办公用品 纸张 1634
四川省 成都市 家具 桌子 1723
四川省 绵阳市 家具 桌子 1822
四川省 南充市 家具 桌子 1943"
`;

exports[`List Table Core Data Process should copy correct data when selected diagonal cells 1`] = `
"浙江省
Expand All @@ -48,21 +72,54 @@ exports[`List Table Core Data Process should copy correct data when selected dia
宁波市"
`;

exports[`Pivot Table Core Data Process should copy format total data in grid mode:
" 总计 家具 家具 家具
小计 桌子 沙发
总计 78868元 49709元 26193元 23516元
浙江省 小计 43098元 32418元 18375元 14043元
浙江省 杭州市 number 15420元 13132元 7789元 5343元
浙江省 绍兴市 number 5657元 2999元 2367元 632元
浙江省 宁波市 number 13779元 11111元 3877元 7234元
浙江省 舟山市 number 8242元 5176元 4342元 834元
四川省 小计 35770元 17291元 7818元 9473元
四川省 成都市 number 10513元 4174元 1723元 2451元
四川省 绵阳市 number 7388元 4066元 1822元 2244元
四川省 南充市 number 10284元 4276元 1943元 2333元
四川省 乐山市 number 7585元 4775元 2330元 2445元"
1`] = `
exports[`List Table Core Data Process should copy correctly data with header in table mode if contain repeat column 1`] = `
"城市 城市 城市 城市 城市
浙江省 杭州市 家具 \\"### 问题摘要
- **会话地址**:\\" 7789
浙江省 绍兴市 家具 桌子 2367
浙江省 宁波市 家具 桌子 3877
浙江省 舟山市 家具 桌子 4342
浙江省 杭州市 家具 沙发 5343
浙江省 绍兴市 家具 沙发 632
浙江省 宁波市 家具 沙发 7234
浙江省 舟山市 家具 沙发 834
浙江省 杭州市 办公用品 笔 945
浙江省 绍兴市 办公用品 笔 1304
浙江省 宁波市 办公用品 笔 1145
浙江省 舟山市 办公用品 笔 1432
浙江省 杭州市 办公用品 纸张 1343
浙江省 绍兴市 办公用品 纸张 1354
浙江省 宁波市 办公用品 纸张 1523
浙江省 舟山市 办公用品 纸张 1634
四川省 成都市 家具 桌子 1723
四川省 绵阳市 家具 桌子 1822
四川省 南充市 家具 桌子 1943"
`;

exports[`List Table Core Data Process should copy series number data 1`] = `
"1 浙江省 杭州市 家具 ### 问题摘要
- **会话地址**: 7789
2 浙江省 绍兴市 家具 桌子 2367
3 浙江省 宁波市 家具 桌子 3877
4 浙江省 舟山市 家具 桌子 4342
5 浙江省 杭州市 家具 沙发 5343
6 浙江省 绍兴市 家具 沙发 632
7 浙江省 宁波市 家具 沙发 7234
8 浙江省 舟山市 家具 沙发 834
9 浙江省 杭州市 办公用品 笔 945
10 浙江省 绍兴市 办公用品 笔 1304
11 浙江省 宁波市 办公用品 笔 1145
12 浙江省 舟山市 办公用品 笔 1432
13 浙江省 杭州市 办公用品 纸张 1343
14 浙江省 绍兴市 办公用品 纸张 1354
15 浙江省 宁波市 办公用品 纸张 1523
16 浙江省 舟山市 办公用品 纸张 1634
17 四川省 成都市 家具 桌子 1723
18 四川省 绵阳市 家具 桌子 1822
19 四川省 南充市 家具 桌子 1943"
`;

exports[`Pivot Table Core Data Process should copy format total data in grid mode 1`] = `
" 总计 家具 家具 家具
小计 桌子 沙发
总计 78868元 49709元 26193元 23516元
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,89 @@ Array [
]
`;

exports[`TableSheet Export Test should export correct data with formatter if contain repeat column name 1`] = `
Array [
"省份,子类别,类别,子类别,子类别",
"浙江省,杭州市,家具,桌子,7789",
"浙江省,绍兴市,家具,桌子,2367",
"浙江省,宁波市,家具,桌子,3877",
"浙江省,舟山市,家具,桌子,4342",
"浙江省,杭州市,家具,沙发,5343",
"浙江省,绍兴市,家具,沙发,632",
"浙江省,宁波市,家具,沙发,7234",
"浙江省,舟山市,家具,沙发,834",
"浙江省,杭州市,办公用品,笔,945",
"浙江省,绍兴市,办公用品,笔,1304",
"浙江省,宁波市,办公用品,笔,1145",
"浙江省,舟山市,办公用品,笔,1432",
"浙江省,杭州市,办公用品,纸张,1343",
"浙江省,绍兴市,办公用品,纸张,1354",
"浙江省,宁波市,办公用品,纸张,1523",
"浙江省,舟山市,办公用品,纸张,1634",
"四川省,成都市,家具,桌子,1723",
"四川省,绵阳市,家具,桌子,1822",
"四川省,南充市,家具,桌子,1943",
"四川省,乐山市,家具,桌子,2330",
"四川省,成都市,家具,沙发,2451",
"四川省,绵阳市,家具,沙发,2244",
"四川省,南充市,家具,沙发,2333",
"四川省,乐山市,家具,沙发,2445",
"四川省,成都市,办公用品,笔,2335",
"四川省,绵阳市,办公用品,笔,245",
"四川省,南充市,办公用品,笔,2457",
"四川省,乐山市,办公用品,笔,2458",
"四川省,成都市,办公用品,纸张,4004",
"四川省,绵阳市,办公用品,纸张,3077",
"四川省,南充市,办公用品,纸张,3551",
"四川省,乐山市,办公用品,纸张,352",
",,家具,桌子,26193",
",,家具,,49709",
",,家具,沙发,23516",
",,办公用品,,29159",
",,办公用品,笔,12321",
",,办公用品,纸张,16838",
"浙江省,,家具,桌子,18375",
"浙江省,,家具,沙发,14043",
"浙江省,,办公用品,笔,4826",
"浙江省,,办公用品,纸张,5854",
"四川省,,家具,桌子,7818",
"四川省,,家具,沙发,9473",
"四川省,,办公用品,笔,7495",
"四川省,,办公用品,纸张,10984",
"浙江省,杭州市,家具,,13132",
"浙江省,杭州市,办公用品,,2288",
"浙江省,杭州市,,,15420",
"浙江省,绍兴市,家具,,2999",
"浙江省,绍兴市,办公用品,,2658",
"浙江省,绍兴市,,,5657",
"浙江省,宁波市,家具,,11111",
"浙江省,宁波市,办公用品,,2668",
"浙江省,宁波市,,,13779",
"浙江省,舟山市,家具,,5176",
"浙江省,舟山市,办公用品,,3066",
"浙江省,舟山市,,,8242",
"四川省,成都市,家具,,4174",
"四川省,成都市,办公用品,,6339",
"四川省,成都市,,,10513",
"四川省,绵阳市,家具,,4066",
"四川省,绵阳市,办公用品,,3322",
"四川省,绵阳市,,,7388",
"四川省,南充市,家具,,4276",
"四川省,南充市,办公用品,,6008",
"四川省,南充市,,,10284",
"四川省,乐山市,家具,,4775",
"四川省,乐山市,办公用品,,2810",
"四川省,乐山市,,,7585",
"浙江省,,家具,,32418",
"浙江省,,办公用品,,10680",
"浙江省,,,,43098",
"四川省,,家具,,17291",
"四川省,,办公用品,,18479",
"四川省,,,,35770",
",,,,78868",
]
`;

exports[`TableSheet Export Test should export correct data with series number 1`] = `
Array [
"序号 province city 产品类型 sub_type number",
Expand Down
91 changes: 75 additions & 16 deletions packages/s2-core/__tests__/unit/utils/export/copy-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,79 @@ describe('List Table Core Data Process', () => {
);
});

it('should copy normal data with header in table mode', async () => {
it('should copy all data with header in table mode', async () => {
s2.setOptions({
interaction: {
copy: {
withHeader: true,
withFormat: true,
},
},
seriesNumber: {
enable: false,
},
});

await s2.render();

s2.interaction.changeState({
cells: s2.facet.getDataCells().map((cell) => getCellMeta(cell)),
stateName: InteractionStateName.SELECTED,
});

expect(getCopyPlainContent(s2)).toMatchSnapshot();
});

it('should copy correctly data with header in table mode if contain repeat column', async () => {
s2.setOptions({
interaction: {
copy: {
withHeader: true,
withFormat: true,
},
},
seriesNumber: {
enable: false,
},
});
s2.setDataCfg({
meta: [
{ field: 'province', name: '城市' },
{ field: 'city', name: '城市' },
{ field: 'type', name: '城市' },
{ field: 'sub_type', name: '城市' },
{ field: 'number', name: '城市' },
],
});

await s2.render();

s2.interaction.changeState({
cells: s2.facet.getDataCells().map((cell) => getCellMeta(cell)),
stateName: InteractionStateName.SELECTED,
});

expect(getCopyPlainContent(s2)).toMatchSnapshot();
});

it('should copy series number data', async () => {
s2.setOptions({
seriesNumber: {
enable: true,
},
});

await s2.render();

s2.interaction.changeState({
cells: s2.facet.getDataCells().map((cell) => getCellMeta(cell)),
stateName: InteractionStateName.SELECTED,
});

expect(getCopyPlainContent(s2)).toMatchSnapshot();
});

it('should copy province data with header in table mode', async () => {
s2.setOptions({
interaction: {
copy: {
Expand Down Expand Up @@ -637,6 +709,7 @@ describe('Pivot Table Core Data Process', () => {
},
},
});

const meta = [
{ field: 'number', formatter: (v: string) => `${v}元` },
] as Meta[];
Expand All @@ -654,21 +727,7 @@ describe('Pivot Table Core Data Process', () => {
const copyContent = getCopyPlainContent(s2);

// 主要查看行列小计总计对应的值都格式化成功了
expect(copyContent).toMatchSnapshot(`
" 总计 家具 家具 家具
小计 桌子 沙发
总计 78868元 49709元 26193元 23516元
浙江省 小计 43098元 32418元 18375元 14043元
浙江省 杭州市 number 15420元 13132元 7789元 5343元
浙江省 绍兴市 number 5657元 2999元 2367元 632元
浙江省 宁波市 number 13779元 11111元 3877元 7234元
浙江省 舟山市 number 8242元 5176元 4342元 834元
四川省 小计 35770元 17291元 7818元 9473元
四川省 成都市 number 10513元 4174元 1723元 2451元
四川省 绵阳市 number 7388元 4066元 1822元 2244元
四川省 南充市 number 10284元 4276元 1943元 2333元
四川省 乐山市 number 7585元 4775元 2330元 2445元"
`);
expect(copyContent).toMatchSnapshot();
});

it('should copy col data in grid mode', () => {
Expand Down
Loading

0 comments on commit e324c93

Please sign in to comment.