vxe-table 3.19.19 → 3.19.21

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 (38) hide show
  1. package/es/grid/src/grid.js +148 -33
  2. package/es/style.css +1 -1
  3. package/es/table/render/index.js +113 -4
  4. package/es/table/src/cell.js +3 -3
  5. package/es/table/src/methods.js +36 -16
  6. package/es/ui/index.js +3 -2
  7. package/es/ui/src/dom.js +1 -1
  8. package/es/ui/src/log.js +1 -1
  9. package/lib/grid/src/grid.js +166 -48
  10. package/lib/grid/src/grid.min.js +1 -1
  11. package/lib/index.umd.js +329 -74
  12. package/lib/index.umd.min.js +1 -1
  13. package/lib/style.css +1 -1
  14. package/lib/table/render/index.js +140 -10
  15. package/lib/table/render/index.min.js +1 -1
  16. package/lib/table/src/cell.js +6 -3
  17. package/lib/table/src/cell.min.js +1 -1
  18. package/lib/table/src/methods.js +35 -15
  19. package/lib/table/src/methods.min.js +1 -1
  20. package/lib/ui/index.js +3 -2
  21. package/lib/ui/index.min.js +1 -1
  22. package/lib/ui/src/dom.js +1 -1
  23. package/lib/ui/src/dom.min.js +1 -1
  24. package/lib/ui/src/log.js +1 -1
  25. package/lib/ui/src/log.min.js +1 -1
  26. package/package.json +2 -2
  27. package/packages/grid/src/grid.ts +148 -35
  28. package/packages/table/render/index.ts +115 -4
  29. package/packages/table/src/cell.ts +3 -3
  30. package/packages/table/src/methods.ts +35 -14
  31. package/packages/ui/index.ts +2 -1
  32. package/packages/ui/src/dom.ts +1 -1
  33. /package/es/{iconfont.1764033994654.ttf → iconfont.1764298141619.ttf} +0 -0
  34. /package/es/{iconfont.1764033994654.woff → iconfont.1764298141619.woff} +0 -0
  35. /package/es/{iconfont.1764033994654.woff2 → iconfont.1764298141619.woff2} +0 -0
  36. /package/lib/{iconfont.1764033994654.ttf → iconfont.1764298141619.ttf} +0 -0
  37. /package/lib/{iconfont.1764033994654.woff → iconfont.1764298141619.woff} +0 -0
  38. /package/lib/{iconfont.1764033994654.woff2 → iconfont.1764298141619.woff2} +0 -0
@@ -40,7 +40,9 @@ XEUtils.each(VxeTableComponent.methods, (fn, name) => {
40
40
  };
41
41
  });
42
42
  function createInternalData() {
43
- return {};
43
+ return {
44
+ uFoot: false
45
+ };
44
46
  }
45
47
  export default {
46
48
  name: 'VxeGrid',
@@ -70,6 +72,7 @@ export default {
70
72
  filterData: [],
71
73
  formData: {},
72
74
  sortData: [],
75
+ footerData: [],
73
76
  tZindex: 0,
74
77
  tablePage: {
75
78
  total: 0,
@@ -173,7 +176,9 @@ export default {
173
176
  const rest = {};
174
177
  const gridProps = props;
175
178
  propKeys.forEach(key => {
176
- rest[key] = gridProps[key];
179
+ if (gridProps[key] !== undefined) {
180
+ rest[key] = gridProps[key];
181
+ }
177
182
  });
178
183
  return rest;
179
184
  },
@@ -181,15 +186,23 @@ export default {
181
186
  const $xeGrid = this;
182
187
  const props = $xeGrid;
183
188
  const reactData = $xeGrid.reactData;
184
- const { seqConfig, pagerConfig, editConfig, proxyConfig } = props;
185
- const { isZMax, tablePage } = reactData;
189
+ const { showFooter, seqConfig, pagerConfig, editConfig, proxyConfig } = props;
190
+ const { isZMax, tablePage, footerData } = reactData;
186
191
  const tableExtendProps = $xeGrid.computeTableExtendProps;
187
192
  const proxyOpts = $xeGrid.computeProxyOpts;
188
193
  const pagerOpts = $xeGrid.computePagerOpts;
189
194
  const isLoading = $xeGrid.computeIsLoading;
190
195
  const tProps = Object.assign({}, tableExtendProps);
196
+ if (showFooter && !tProps.footerData) {
197
+ // 如果未设置自己的标位数据,则使用代理的
198
+ tProps.footerData = footerData;
199
+ }
200
+ else if (proxyOpts.footer && footerData.length) {
201
+ // 如果代理标为数据,且未请求到数据,则用自己的
202
+ tProps.footerData = footerData;
203
+ }
191
204
  if (isZMax) {
192
- if (tableExtendProps.maxHeight) {
205
+ if (tProps.maxHeight) {
193
206
  tProps.maxHeight = '100%';
194
207
  }
195
208
  else {
@@ -432,6 +445,7 @@ export default {
432
445
  const $xeGrid = this;
433
446
  const props = $xeGrid;
434
447
  const reactData = $xeGrid.reactData;
448
+ const internalData = $xeGrid.internalData;
435
449
  const { proxyConfig, formConfig } = props;
436
450
  const { proxyInited } = reactData;
437
451
  const proxyOpts = $xeGrid.computeProxyOpts;
@@ -440,14 +454,30 @@ export default {
440
454
  if (isEnableConf(formConfig) && proxyOpts.form && formOpts.items) {
441
455
  reactData.formData = $xeGrid.getDefaultFormData();
442
456
  }
443
- if (!proxyInited && proxyOpts.autoLoad !== false) {
457
+ if (!proxyInited) {
444
458
  reactData.proxyInited = true;
445
- $xeGrid.$nextTick().then(() => $xeGrid.commitProxy('initial')).then((rest) => {
446
- $xeGrid.dispatchEvent('proxy-query', Object.assign(Object.assign({}, rest), { isInited: true }), new Event('initial'));
447
- });
459
+ if (proxyOpts.autoLoad !== false) {
460
+ $xeGrid.$nextTick().then(() => {
461
+ internalData.uFoot = true;
462
+ const rest = $xeGrid.commitProxy('initial');
463
+ internalData.uFoot = false;
464
+ $xeGrid.updateQueryFooter();
465
+ return rest;
466
+ }).then((rest) => {
467
+ $xeGrid.dispatchEvent('proxy-query', Object.assign(Object.assign({}, rest), { isInited: true }), new Event('initial'));
468
+ });
469
+ }
448
470
  }
449
471
  }
450
472
  },
473
+ updateQueryFooter() {
474
+ const $xeGrid = this;
475
+ const proxyOpts = $xeGrid.computeProxyOpts;
476
+ const { ajax } = proxyOpts;
477
+ if (ajax && ajax.queryFooter) {
478
+ return $xeGrid.commitProxy('queryFooter');
479
+ }
480
+ },
451
481
  handleGlobalKeydownEvent(evnt) {
452
482
  const $xeGrid = this;
453
483
  const reactData = $xeGrid.reactData;
@@ -521,20 +551,21 @@ export default {
521
551
  const $xeGrid = this;
522
552
  const props = $xeGrid;
523
553
  const reactData = $xeGrid.reactData;
554
+ const internalData = $xeGrid.internalData;
524
555
  /**
525
556
  * 已废弃
526
557
  * @deprecated
527
558
  */
528
559
  const toolbar = props.toolbar;
529
- const { proxyConfig, toolbarConfig, pagerConfig, editRules, validConfig } = props;
560
+ const { showFooter, proxyConfig, toolbarConfig, pagerConfig, editRules, validConfig } = props;
530
561
  const { tablePage } = reactData;
531
562
  const isActiveMsg = $xeGrid.computeIsActiveMsg;
532
563
  const isRespMsg = $xeGrid.computeIsRespMsg;
533
564
  const proxyOpts = $xeGrid.computeProxyOpts;
534
565
  const pagerOpts = $xeGrid.computePagerOpts;
535
566
  const toolbarOpts = $xeGrid.computeToolbarOpts;
536
- const { beforeQuery, afterQuery, beforeDelete, afterDelete, beforeSave, afterSave, ajax = {} } = proxyOpts;
537
- const resConfigs = proxyOpts.response || proxyOpts.props || {};
567
+ const { beforeQuery, afterQuery, beforeQueryFooter, afterQueryFooter, beforeDelete, afterDelete, beforeSave, afterSave, ajax = {} } = proxyOpts;
568
+ const resConfigs = (proxyOpts.response || proxyOpts.props || {});
538
569
  const $xeTable = $xeGrid.$refs.refTable;
539
570
  let formData = $xeGrid.getFormData();
540
571
  let button = null;
@@ -582,10 +613,10 @@ export default {
582
613
  case 'initial':
583
614
  case 'reload':
584
615
  case 'query': {
585
- const ajaxMethods = ajax.query;
586
- const querySuccessMethods = ajax.querySuccess;
587
- const queryErrorMethods = ajax.queryError;
588
- if (ajaxMethods) {
616
+ const qMethods = ajax.query;
617
+ const qsMethods = ajax.querySuccess;
618
+ const qeMethods = ajax.queryError;
619
+ if (qMethods) {
589
620
  const isInited = code === 'initial';
590
621
  const isReload = code === 'reload';
591
622
  if (!isInited && reactData.tableLoading) {
@@ -665,24 +696,25 @@ export default {
665
696
  sorts: sortList,
666
697
  filters: filterList,
667
698
  form: formData,
668
- options: ajaxMethods
699
+ options: qMethods
669
700
  };
670
701
  reactData.sortData = sortList;
671
702
  reactData.filterData = filterList;
672
703
  reactData.tableLoading = true;
673
704
  return Promise.all([
674
- Promise.resolve((beforeQuery || ajaxMethods)(commitParams, ...args)),
705
+ Promise.resolve((beforeQuery || qMethods)(commitParams, ...args)),
675
706
  operPromise
676
707
  ]).then(([rest]) => {
677
708
  let tableData = [];
678
709
  reactData.tableLoading = false;
679
710
  if (rest) {
711
+ const reParams = { data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null };
680
712
  if (pagerConfig && isEnableConf(pagerOpts)) {
681
713
  const totalProp = resConfigs.total;
682
- const total = (XEUtils.isFunction(totalProp) ? totalProp({ data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null }) : XEUtils.get(rest, totalProp || 'page.total')) || 0;
714
+ const total = (XEUtils.isFunction(totalProp) ? totalProp(reParams) : XEUtils.get(rest, totalProp || 'page.total')) || 0;
683
715
  tablePage.total = XEUtils.toNumber(total);
684
716
  const resultProp = resConfigs.result;
685
- tableData = (XEUtils.isFunction(resultProp) ? resultProp({ data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null }) : XEUtils.get(rest, resultProp || 'result')) || [];
717
+ tableData = (XEUtils.isFunction(resultProp) ? resultProp(reParams) : XEUtils.get(rest, resultProp || 'result')) || [];
686
718
  // 检验当前页码,不能超出当前最大页数
687
719
  const pageCount = Math.max(Math.ceil(total / tablePage.pageSize), 1);
688
720
  if (tablePage.currentPage > pageCount) {
@@ -691,7 +723,19 @@ export default {
691
723
  }
692
724
  else {
693
725
  const listProp = resConfigs.list;
694
- tableData = (listProp ? (XEUtils.isFunction(listProp) ? listProp({ data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null }) : XEUtils.get(rest, listProp)) : rest) || [];
726
+ if (XEUtils.isArray(rest)) {
727
+ tableData = rest;
728
+ }
729
+ else if (listProp) {
730
+ tableData = (XEUtils.isFunction(listProp) ? listProp(reParams) : XEUtils.get(rest, listProp)) || [];
731
+ }
732
+ }
733
+ if (showFooter) {
734
+ const fdProp = resConfigs.footerData;
735
+ const footerList = fdProp ? (XEUtils.isFunction(fdProp) ? fdProp(reParams) : XEUtils.get(rest, fdProp)) : [];
736
+ if (XEUtils.isArray(footerList)) {
737
+ reactData.footerData = footerList;
738
+ }
695
739
  }
696
740
  }
697
741
  if ($xeTable) {
@@ -708,14 +752,14 @@ export default {
708
752
  if (afterQuery) {
709
753
  afterQuery(commitParams, ...args);
710
754
  }
711
- if (querySuccessMethods) {
712
- querySuccessMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
755
+ if (qsMethods) {
756
+ qsMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
713
757
  }
714
758
  return { status: true };
715
759
  }).catch((rest) => {
716
760
  reactData.tableLoading = false;
717
- if (queryErrorMethods) {
718
- queryErrorMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
761
+ if (qeMethods) {
762
+ qeMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
719
763
  }
720
764
  return { status: false };
721
765
  });
@@ -725,11 +769,51 @@ export default {
725
769
  }
726
770
  break;
727
771
  }
772
+ case 'queryFooter': {
773
+ const qfMethods = ajax.queryFooter;
774
+ const qfSuccessMethods = ajax.queryFooterSuccess;
775
+ const qfErrorMethods = ajax.queryFooterError;
776
+ if (qfMethods) {
777
+ let filterList = [];
778
+ if ($xeTable) {
779
+ filterList = $xeTable.getCheckedFilters();
780
+ }
781
+ const commitParams = {
782
+ $table: $xeTable,
783
+ $grid: $xeGrid,
784
+ $gantt: null,
785
+ code,
786
+ button,
787
+ filters: filterList,
788
+ form: formData,
789
+ options: qfMethods
790
+ };
791
+ return Promise.resolve((beforeQueryFooter || qfMethods)(commitParams, ...args)).then(rest => {
792
+ reactData.footerData = XEUtils.isArray(rest) ? rest : [];
793
+ if (afterQueryFooter) {
794
+ afterQueryFooter(commitParams, ...args);
795
+ }
796
+ if (qfSuccessMethods) {
797
+ qfSuccessMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
798
+ }
799
+ return { status: true };
800
+ }).catch((rest) => {
801
+ if (qfErrorMethods) {
802
+ qfErrorMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
803
+ }
804
+ return { status: false };
805
+ });
806
+ }
807
+ else {
808
+ errLog('vxe.error.notFunc', ['[grid] proxy-config.ajax.queryFooter']);
809
+ }
810
+ break;
811
+ }
728
812
  case 'delete': {
729
- const ajaxMethods = ajax.delete;
813
+ const dMethods = ajax.delete;
730
814
  const deleteSuccessMethods = ajax.deleteSuccess;
731
815
  const deleteErrorMethods = ajax.deleteError;
732
- if (ajaxMethods) {
816
+ if (dMethods) {
733
817
  const selectRecords = $xeTable.getCheckboxRecords();
734
818
  const removeRecords = selectRecords.filter((row) => !$xeTable.isInsertByRow(row));
735
819
  const body = { removeRecords };
@@ -741,7 +825,7 @@ export default {
741
825
  button,
742
826
  body,
743
827
  form: formData,
744
- options: ajaxMethods
828
+ options: dMethods
745
829
  };
746
830
  const applyArgs = [commitParams].concat(args);
747
831
  if (selectRecords.length) {
@@ -750,7 +834,7 @@ export default {
750
834
  return $xeTable.remove(selectRecords);
751
835
  }
752
836
  reactData.tableLoading = true;
753
- return Promise.resolve((beforeDelete || ajaxMethods)(...applyArgs))
837
+ return Promise.resolve((beforeDelete || dMethods)(...applyArgs))
754
838
  .then(rest => {
755
839
  reactData.tableLoading = false;
756
840
  $xeTable.setPendingRow(removeRecords, false);
@@ -763,7 +847,10 @@ export default {
763
847
  afterDelete(...applyArgs);
764
848
  }
765
849
  else {
850
+ internalData.uFoot = true;
766
851
  $xeGrid.commitProxy('query');
852
+ internalData.uFoot = false;
853
+ $xeGrid.updateQueryFooter();
767
854
  }
768
855
  if (deleteSuccessMethods) {
769
856
  deleteSuccessMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
@@ -848,7 +935,10 @@ export default {
848
935
  afterSave(...applyArgs);
849
936
  }
850
937
  else {
938
+ internalData.uFoot = true;
851
939
  $xeGrid.commitProxy('query');
940
+ internalData.uFoot = false;
941
+ $xeGrid.updateQueryFooter();
852
942
  }
853
943
  if (saveSuccessMethods) {
854
944
  saveSuccessMethods(Object.assign(Object.assign({}, commitParams), { response: rest }));
@@ -1023,12 +1113,25 @@ export default {
1023
1113
  },
1024
1114
  triggerToolbarCommitEvent(params, evnt) {
1025
1115
  const $xeGrid = this;
1116
+ const internalData = $xeGrid.internalData;
1026
1117
  const { code } = params;
1027
- return $xeGrid.commitProxy(params, evnt).then((rest) => {
1028
- if (code && rest && rest.status && ['query', 'reload', 'delete', 'save'].includes(code)) {
1029
- $xeGrid.dispatchEvent(code === 'delete' || code === 'save' ? `proxy-${code}` : 'proxy-query', Object.assign(Object.assign({}, rest), { isReload: code === 'reload' }), evnt);
1118
+ if (code) {
1119
+ const isUf = ['reload', 'delete', 'save'].includes(code);
1120
+ if (isUf) {
1121
+ internalData.uFoot = true;
1030
1122
  }
1031
- });
1123
+ const rest = $xeGrid.commitProxy(params, evnt).then((rest) => {
1124
+ if (code && rest && rest.status && ['query', 'reload', 'delete', 'save'].includes(code)) {
1125
+ $xeGrid.dispatchEvent(code === 'delete' || code === 'save' ? `proxy-${code}` : 'proxy-query', Object.assign(Object.assign({}, rest), { isReload: code === 'reload' }), evnt);
1126
+ }
1127
+ });
1128
+ if (isUf) {
1129
+ $xeGrid.updateQueryFooter();
1130
+ }
1131
+ internalData.uFoot = false;
1132
+ return rest;
1133
+ }
1134
+ return $xeGrid.$nextTick();
1032
1135
  },
1033
1136
  triggerToolbarBtnEvent(button, evnt) {
1034
1137
  const $xeGrid = this;
@@ -1090,6 +1193,7 @@ export default {
1090
1193
  const $xeGrid = this;
1091
1194
  const props = $xeGrid;
1092
1195
  const reactData = $xeGrid.reactData;
1196
+ const internalData = $xeGrid.internalData;
1093
1197
  const $xeTable = $xeGrid.$refs.refTable;
1094
1198
  const { proxyConfig } = props;
1095
1199
  const proxyOpts = $xeGrid.computeProxyOpts;
@@ -1099,9 +1203,12 @@ export default {
1099
1203
  reactData.filterData = params.filterList;
1100
1204
  if (proxyConfig && isEnableConf(proxyOpts)) {
1101
1205
  reactData.tablePage.currentPage = 1;
1206
+ internalData.uFoot = true;
1102
1207
  $xeGrid.commitProxy('query').then((rest) => {
1103
1208
  $xeGrid.dispatchEvent('proxy-query', rest, params.$event);
1104
1209
  });
1210
+ internalData.uFoot = false;
1211
+ $xeGrid.updateQueryFooter();
1105
1212
  }
1106
1213
  }
1107
1214
  },
@@ -1119,30 +1226,38 @@ export default {
1119
1226
  const $xeGrid = this;
1120
1227
  const props = $xeGrid;
1121
1228
  const reactData = $xeGrid.reactData;
1229
+ const internalData = $xeGrid.internalData;
1122
1230
  const { proxyConfig } = props;
1123
1231
  const proxyOpts = $xeGrid.computeProxyOpts;
1124
1232
  if (reactData.tableLoading) {
1125
1233
  return;
1126
1234
  }
1127
1235
  if (proxyConfig && isEnableConf(proxyOpts)) {
1236
+ internalData.uFoot = true;
1128
1237
  $xeGrid.commitProxy('reload').then((rest) => {
1129
1238
  $xeGrid.dispatchEvent('proxy-query', Object.assign(Object.assign({}, rest), { isReload: true }), params.$event);
1130
1239
  });
1240
+ internalData.uFoot = false;
1241
+ $xeGrid.updateQueryFooter();
1131
1242
  }
1132
1243
  $xeGrid.dispatchEvent('form-submit', params, params.$event);
1133
1244
  },
1134
1245
  resetFormEvent(params) {
1135
1246
  const $xeGrid = this;
1136
1247
  const props = $xeGrid;
1248
+ const internalData = $xeGrid.internalData;
1137
1249
  const $xeTable = $xeGrid.$refs.refTable;
1138
1250
  const { proxyConfig } = props;
1139
1251
  const { $event } = params;
1140
1252
  const proxyOpts = $xeGrid.computeProxyOpts;
1141
1253
  if (proxyConfig && isEnableConf(proxyOpts)) {
1142
1254
  $xeTable.clearScroll();
1255
+ internalData.uFoot = true;
1143
1256
  $xeGrid.commitProxy('reload').then((rest) => {
1144
1257
  $xeGrid.dispatchEvent('proxy-query', Object.assign(Object.assign({}, rest), { isReload: true }), $event);
1145
1258
  });
1259
+ internalData.uFoot = false;
1260
+ $xeGrid.updateQueryFooter();
1146
1261
  }
1147
1262
  $xeGrid.dispatchEvent('form-reset', params, $event);
1148
1263
  },