vxe-table 3.12.10-beta.21 → 3.12.10-beta.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/export/mixin.js +50 -37
  6. package/es/table/src/body.js +7 -5
  7. package/es/table/src/header.js +27 -2
  8. package/es/table/style.css +13 -7
  9. package/es/table/style.min.css +1 -1
  10. package/es/ui/index.js +1 -1
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-table/style.css +13 -7
  13. package/es/vxe-table/style.min.css +1 -1
  14. package/lib/index.css +1 -1
  15. package/lib/index.min.css +1 -1
  16. package/lib/index.umd.js +78 -45
  17. package/lib/index.umd.min.js +1 -1
  18. package/lib/style.css +1 -1
  19. package/lib/style.min.css +1 -1
  20. package/lib/table/module/export/mixin.js +53 -37
  21. package/lib/table/module/export/mixin.min.js +1 -1
  22. package/lib/table/src/body.js +6 -5
  23. package/lib/table/src/body.min.js +1 -1
  24. package/lib/table/src/header.js +17 -1
  25. package/lib/table/src/header.min.js +1 -1
  26. package/lib/table/style/style.css +13 -7
  27. package/lib/table/style/style.min.css +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/lib/vxe-table/style/style.css +13 -7
  33. package/lib/vxe-table/style/style.min.css +1 -1
  34. package/package.json +1 -1
  35. package/packages/table/module/export/mixin.ts +88 -53
  36. package/packages/table/src/body.ts +7 -7
  37. package/packages/table/src/header.ts +27 -2
  38. package/styles/components/table.scss +14 -8
  39. /package/es/{iconfont.1737182271148.ttf → iconfont.1737201503534.ttf} +0 -0
  40. /package/es/{iconfont.1737182271148.woff → iconfont.1737201503534.woff} +0 -0
  41. /package/es/{iconfont.1737182271148.woff2 → iconfont.1737201503534.woff2} +0 -0
  42. /package/lib/{iconfont.1737182271148.ttf → iconfont.1737201503534.ttf} +0 -0
  43. /package/lib/{iconfont.1737182271148.woff → iconfont.1737201503534.woff} +0 -0
  44. /package/lib/{iconfont.1737182271148.woff2 → iconfont.1737201503534.woff2} +0 -0
@@ -623,7 +623,18 @@ function getTxtCellValue(val, vMaps) {
623
623
  const rest = replaceTxtCell(val, vMaps);
624
624
  return rest.replace(/^"+$/g, (qVal) => '"'.repeat(Math.ceil(qVal.length / 2)));
625
625
  }
626
- function parseCsvAndTxt(columns, content, cellSeparator) {
626
+ function toExportField(tableConf, field) {
627
+ const { fieldMaps, titleMaps } = tableConf;
628
+ // title 转 field
629
+ if (!fieldMaps[field]) {
630
+ const teCol = titleMaps[field];
631
+ if (teCol && teCol.field) {
632
+ field = teCol.field;
633
+ }
634
+ }
635
+ return field;
636
+ }
637
+ function parseCsvAndTxt(tableConf, content, cellSeparator) {
627
638
  const list = content.split(enterSymbol);
628
639
  const rows = [];
629
640
  let fields = [];
@@ -644,12 +655,12 @@ function parseCsvAndTxt(columns, content, cellSeparator) {
644
655
  });
645
656
  const cells = rVal.split(cellSeparator);
646
657
  if (!fields.length) {
647
- fields = cells.map((val) => getTxtCellValue(val.trim(), vMaps));
658
+ fields = cells.map((val) => toExportField(tableConf, getTxtCellValue(val.trim(), vMaps)));
648
659
  }
649
660
  else {
650
661
  cells.forEach((val, colIndex) => {
651
662
  if (colIndex < fields.length) {
652
- item[fields[colIndex]] = getTxtCellValue(val, vMaps);
663
+ item[fields[colIndex]] = getTxtCellValue(val.trim(), vMaps);
653
664
  }
654
665
  });
655
666
  rows.push(item);
@@ -659,13 +670,13 @@ function parseCsvAndTxt(columns, content, cellSeparator) {
659
670
  }
660
671
  return { fields, rows };
661
672
  }
662
- function parseCsv(columns, content) {
663
- return parseCsvAndTxt(columns, content, ',');
673
+ function parseCsv(tableConf, content) {
674
+ return parseCsvAndTxt(tableConf, content, ',');
664
675
  }
665
- function parseTxt(columns, content) {
666
- return parseCsvAndTxt(columns, content, '\t');
676
+ function parseTxt(tableConf, content) {
677
+ return parseCsvAndTxt(tableConf, content, '\t');
667
678
  }
668
- function parseHTML(columns, content) {
679
+ function parseHTML(tableConf, content) {
669
680
  const domParser = new DOMParser();
670
681
  const xmlDoc = domParser.parseFromString(content, 'text/html');
671
682
  const bodyNodes = getElementsByTagName(xmlDoc, 'body');
@@ -676,9 +687,9 @@ function parseHTML(columns, content) {
676
687
  if (tableNodes.length) {
677
688
  const theadNodes = getElementsByTagName(tableNodes[0], 'thead');
678
689
  if (theadNodes.length) {
679
- XEUtils.arrayEach(getElementsByTagName(theadNodes[0], 'tr'), (rowNode) => {
680
- XEUtils.arrayEach(getElementsByTagName(rowNode, 'th'), (cellNode) => {
681
- fields.push(cellNode.textContent);
690
+ XEUtils.arrayEach(getElementsByTagName(theadNodes[0], 'tr'), rowNode => {
691
+ XEUtils.arrayEach(getElementsByTagName(rowNode, 'th'), cellNode => {
692
+ fields.push(toExportField(tableConf, cellNode.textContent || ''));
682
693
  });
683
694
  });
684
695
  const tbodyNodes = getElementsByTagName(tableNodes[0], 'tbody');
@@ -698,7 +709,7 @@ function parseHTML(columns, content) {
698
709
  }
699
710
  return { fields, rows };
700
711
  }
701
- function parseXML(columns, content) {
712
+ function parseXML(tableConf, content) {
702
713
  const domParser = new DOMParser();
703
714
  const xmlDoc = domParser.parseFromString(content, 'application/xml');
704
715
  const sheetNodes = getElementsByTagName(xmlDoc, 'Worksheet');
@@ -709,8 +720,8 @@ function parseXML(columns, content) {
709
720
  if (tableNodes.length) {
710
721
  const rowNodes = getElementsByTagName(tableNodes[0], 'Row');
711
722
  if (rowNodes.length) {
712
- XEUtils.arrayEach(getElementsByTagName(rowNodes[0], 'Cell'), (cellNode) => {
713
- fields.push(cellNode.textContent);
723
+ XEUtils.arrayEach(getElementsByTagName(rowNodes[0], 'Cell'), cellNode => {
724
+ fields.push(toExportField(tableConf, cellNode.textContent || ''));
714
725
  });
715
726
  XEUtils.arrayEach(rowNodes, (rowNode, index) => {
716
727
  if (index) {
@@ -729,52 +740,54 @@ function parseXML(columns, content) {
729
740
  }
730
741
  return { fields, rows };
731
742
  }
732
- /**
733
- * 检查导入的列是否完整
734
- * @param {Array} fields 字段名列表
735
- * @param {Array} rows 数据列表
736
- */
737
- function checkImportData(columns, fields) {
738
- const tableFields = [];
739
- columns.forEach((column) => {
743
+ function handleImport($xeTable, content, opts) {
744
+ const internalData = $xeTable;
745
+ const { tableFullColumn, _importResolve, _importReject } = internalData;
746
+ let rest = { fields: [], rows: [] };
747
+ const tableFieldMaps = {};
748
+ const tableTitleMaps = {};
749
+ tableFullColumn.forEach((column) => {
740
750
  const field = column.field;
751
+ const title = column.getTitle();
741
752
  if (field) {
742
- tableFields.push(field);
753
+ tableFieldMaps[field] = column;
754
+ }
755
+ if (title) {
756
+ tableTitleMaps[column.getTitle()] = column;
743
757
  }
744
758
  });
745
- return fields.some(field => tableFields.indexOf(field) > -1);
746
- }
747
- function handleImport($xetable, content, opts) {
748
- const { tableFullColumn, _importResolve, _importReject } = $xetable;
749
- let rest = { fields: [], rows: [] };
759
+ const tableConf = {
760
+ fieldMaps: tableFieldMaps,
761
+ titleMaps: tableTitleMaps
762
+ };
750
763
  switch (opts.type) {
751
764
  case 'csv':
752
- rest = parseCsv(tableFullColumn, content);
765
+ rest = parseCsv(tableConf, content);
753
766
  break;
754
767
  case 'txt':
755
- rest = parseTxt(tableFullColumn, content);
768
+ rest = parseTxt(tableConf, content);
756
769
  break;
757
770
  case 'html':
758
- rest = parseHTML(tableFullColumn, content);
771
+ rest = parseHTML(tableConf, content);
759
772
  break;
760
773
  case 'xml':
761
- rest = parseXML(tableFullColumn, content);
774
+ rest = parseXML(tableConf, content);
762
775
  break;
763
776
  }
764
777
  const { fields, rows } = rest;
765
- const status = checkImportData(tableFullColumn, fields);
778
+ const status = fields.some(field => tableFieldMaps[field] || tableTitleMaps[field]);
766
779
  if (status) {
767
- $xetable.createData(rows)
780
+ $xeTable.createData(rows)
768
781
  .then((data) => {
769
782
  let loadRest;
770
783
  if (opts.mode === 'insert' || opts.mode === 'insertBottom') {
771
- loadRest = $xetable.insertAt(data, -1);
784
+ loadRest = $xeTable.insertAt(data, -1);
772
785
  }
773
786
  if (opts.mode === 'insertTop') {
774
- loadRest = $xetable.insert(data);
787
+ loadRest = $xeTable.insert(data);
775
788
  }
776
789
  else {
777
- loadRest = $xetable.reloadData(data);
790
+ loadRest = $xeTable.reloadData(data);
778
791
  }
779
792
  if (opts.message !== false) {
780
793
  // 检测弹窗模块
@@ -316,13 +316,11 @@ function renderTdColumn(h, _vm, seq, rowid, fixedType, isOptimizeMode, rowLevel,
316
316
  ]));
317
317
  }
318
318
  }
319
+ let showAreaRowStatus = false;
319
320
  if (mouseConfig && mouseOpts.area && selectCellToRow) {
320
- if ((!$columnIndex && selectCellToRow === true) ||
321
+ if ((!_columnIndex && selectCellToRow === true) ||
321
322
  (selectCellToRow === column.field)) {
322
- tdVNs.push(h('div', {
323
- key: 'tca',
324
- class: 'vxe-cell--area-status'
325
- }));
323
+ showAreaRowStatus = true;
326
324
  }
327
325
  }
328
326
  if (rowResize && rowOpts.resizable) {
@@ -347,6 +345,7 @@ function renderTdColumn(h, _vm, seq, rowid, fixedType, isOptimizeMode, rowLevel,
347
345
  'col--tree-node': treeNode,
348
346
  'col--edit': isEdit,
349
347
  'col--ellipsis': hasEllipsis,
348
+ 'col--to-row': showAreaRowStatus,
350
349
  'col--auto-height': isVNAutoHeight,
351
350
  'fixed--width': !isAutoCellWidth,
352
351
  'fixed--hidden': fixedHiddenColumn,
@@ -777,6 +776,9 @@ export default {
777
776
  }),
778
777
  h('span', {
779
778
  class: 'vxe-table--cell-active-area'
779
+ }),
780
+ h('span', {
781
+ class: 'vxe-table--cell-row-status-area'
780
782
  })
781
783
  ])
782
784
  : renderEmptyElement($xeTable),
@@ -249,9 +249,10 @@ export default {
249
249
  const { xID } = $xeTable;
250
250
  const { fixedType, fixedColumn, tableColumn } = props;
251
251
  const { headerColumn } = this;
252
- const { showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps;
252
+ const { mouseConfig, showHeaderOverflow: allColumnHeaderOverflow, spanMethod, footerSpanMethod } = tableProps;
253
253
  const { isGroup, scrollXLoad, scrollYLoad, dragCol } = tableReactData;
254
254
  const { visibleColumn, fullColumnIdData } = tableInternalData;
255
+ const mouseOpts = $xeTable.computeMouseOpts;
255
256
  let renderHeaderList = headerColumn;
256
257
  let renderColumnList = tableColumn;
257
258
  let isOptimizeMode = false;
@@ -354,7 +355,31 @@ export default {
354
355
  */
355
356
  h('thead', {
356
357
  ref: 'refHeaderTHead'
357
- }, renderHeads(h, this, isGroup, isOptimizeMode, renderHeaderList))
358
+ }, renderHeads(h, this, isGroup, isOptimizeMode, renderHeaderList)),
359
+ mouseConfig && mouseOpts.area
360
+ ? h('div', {
361
+ class: 'vxe-table--cell-area'
362
+ }, [
363
+ h('span', {
364
+ class: 'vxe-table--cell-main-area'
365
+ }),
366
+ h('span', {
367
+ class: 'vxe-table--cell-copy-area'
368
+ }),
369
+ h('span', {
370
+ class: 'vxe-table--cell-extend-area'
371
+ }),
372
+ h('span', {
373
+ class: 'vxe-table--cell-multi-area'
374
+ }),
375
+ h('span', {
376
+ class: 'vxe-table--cell-active-area'
377
+ }),
378
+ h('span', {
379
+ class: 'vxe-table--cell-col-status-area'
380
+ })
381
+ ])
382
+ : renderEmptyElement($xeTable)
358
383
  ]),
359
384
  /**
360
385
  * 其他
@@ -1901,19 +1901,17 @@
1901
1901
  .vxe-table--cell-extend-area,
1902
1902
  .vxe-table--cell-active-area,
1903
1903
  .vxe-table--cell-copy-area,
1904
- .vxe-table--cell-status {
1904
+ .vxe-table--cell-col-status-area,
1905
+ .vxe-table--cell-row-status-area {
1905
1906
  display: none;
1906
1907
  position: absolute;
1907
1908
  pointer-events: none;
1908
1909
  z-index: 1;
1909
1910
  }
1910
1911
 
1911
- .vxe-table--cell-status {
1912
+ .vxe-table--header-wrapper .vxe-table--cell-col-status-area {
1912
1913
  top: 0;
1913
- left: 0;
1914
- width: var(--vxe-ui-table-cell-area-status-border-width);
1915
- height: 0;
1916
- background-color: var(--vxe-ui-font-primary-color);
1914
+ height: 100%;
1917
1915
  }
1918
1916
 
1919
1917
  .vxe-table--fixed-left-wrapper .vxe-table--checkbox-range,
@@ -1921,11 +1919,15 @@
1921
1919
  .vxe-table--fixed-left-wrapper .vxe-table--cell-extend-area,
1922
1920
  .vxe-table--fixed-left-wrapper .vxe-table--cell-active-area,
1923
1921
  .vxe-table--fixed-left-wrapper .vxe-table--cell-copy-area,
1922
+ .vxe-table--fixed-left-wrapper .vxe-table--cell-col-status-area,
1923
+ .vxe-table--fixed-left-wrapper .vxe-table--cell-row-status-area,
1924
1924
  .vxe-table--fixed-right-wrapper .vxe-table--checkbox-range,
1925
1925
  .vxe-table--fixed-right-wrapper .vxe-table--cell-main-area,
1926
1926
  .vxe-table--fixed-right-wrapper .vxe-table--cell-extend-area,
1927
1927
  .vxe-table--fixed-right-wrapper .vxe-table--cell-active-area,
1928
- .vxe-table--fixed-right-wrapper .vxe-table--cell-copy-area {
1928
+ .vxe-table--fixed-right-wrapper .vxe-table--cell-copy-area,
1929
+ .vxe-table--fixed-right-wrapper .vxe-table--cell-col-status-area,
1930
+ .vxe-table--fixed-right-wrapper .vxe-table--cell-row-status-area {
1929
1931
  z-index: 2;
1930
1932
  }
1931
1933
 
@@ -1979,6 +1981,10 @@
1979
1981
  .vxe-table--cell-area .vxe-table--cell-extend-area {
1980
1982
  border: var(--vxe-ui-table-cell-extend-area-border-width) solid var(--vxe-ui-table-cell-extend-area-border-color);
1981
1983
  }
1984
+ .vxe-table--cell-area .vxe-table--cell-col-status-area,
1985
+ .vxe-table--cell-area .vxe-table--cell-row-status-area {
1986
+ background-color: var(--vxe-ui-table-checkbox-range-background-color);
1987
+ }
1982
1988
 
1983
1989
  @keyframes moveCopyCellBorder {
1984
1990
  to {