vxe-gantt 3.0.23 → 3.0.25

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.
@@ -10,7 +10,7 @@ import GanttViewComponent from './gantt-view'
10
10
  import { VxeTable as VxeTableComponent } from 'vxe-table'
11
11
 
12
12
  import type { ValueOf, VxeFormInstance, VxeFormItemProps, VxePagerInstance, VxePagerDefines, VxeComponentStyleType, VxeComponentSizeType, VxeFormDefines, VxeFormItemPropTypes } from 'vxe-pc-ui'
13
- import type { VxeTableMethods, VxeToolbarPropTypes, VxeTableProps, VxeTableConstructor, VxeTablePrivateMethods, VxeTableDefines, TableReactData, VxeToolbarInstance, TableInternalData, VxeTablePropTypes, VxeGridPropTypes } from 'vxe-table'
13
+ import type { VxeTableMethods, VxeToolbarPropTypes, VxeTableProps, VxeTableConstructor, VxeTablePrivateMethods, VxeTableDefines, TableReactData, VxeToolbarInstance, TableInternalData, VxeTablePropTypes, VxeGridPropTypes, VxeGridDefines } from 'vxe-table'
14
14
  import type { VxeGanttEmits, GanttReactData, GanttInternalData, VxeGanttPropTypes, VxeGanttViewInstance, VxeGanttDefines, VxeGanttConstructor } from '../../../types'
15
15
 
16
16
  const { getConfig, getIcon, getI18n, commands, globalMixins, createEvent, globalEvents, GLOBAL_EVENT_KEYS, renderEmptyElement } = VxeUI
@@ -76,6 +76,7 @@ XEUtils.each((VxeTableComponent as any).methods, (fn, name) => {
76
76
 
77
77
  function createInternalData (): GanttInternalData {
78
78
  return {
79
+ uFoot: false,
79
80
  resizeTableWidth: 0
80
81
  }
81
82
  }
@@ -103,6 +104,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
103
104
  editRules: PropType<VxeTablePropTypes.EditRules>
104
105
  animat: PropType<VxeTablePropTypes.Animat>
105
106
  scrollbarConfig: PropType<VxeTablePropTypes.ScrollbarConfig>
107
+ showFooter: PropType<VxeTablePropTypes.ShowFooter>
106
108
  params: PropType<VxeTablePropTypes.Params>
107
109
  }),
108
110
 
@@ -146,6 +148,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
146
148
  filterData: [],
147
149
  formData: {},
148
150
  sortData: [],
151
+ footerData: [],
149
152
  tZindex: 0,
150
153
  tablePage: {
151
154
  total: 0,
@@ -336,7 +339,9 @@ export default /* define-vxe-component start */ defineVxeComponent({
336
339
  const rest: any = {}
337
340
  const gridProps: any = props
338
341
  propKeys.forEach(key => {
339
- rest[key] = gridProps[key]
342
+ if (gridProps[key] !== undefined) {
343
+ rest[key] = gridProps[key]
344
+ }
340
345
  })
341
346
  return rest
342
347
  },
@@ -345,8 +350,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
345
350
  const props = $xeGantt
346
351
  const reactData = $xeGantt.reactData
347
352
 
348
- const { seqConfig, pagerConfig, editConfig, proxyConfig } = props
349
- const { isZMax, tablePage } = reactData
353
+ const { showFooter, seqConfig, pagerConfig, editConfig, proxyConfig } = props
354
+ const { isZMax, tablePage, footerData } = reactData
350
355
  const taskViewOpts = $xeGantt.computeTaskViewOpts
351
356
  const { tableStyle } = taskViewOpts
352
357
  const tableExtendProps = $xeGantt.computeTableExtendProps as any
@@ -365,8 +370,15 @@ export default /* define-vxe-component start */ defineVxeComponent({
365
370
  tProps.border = border
366
371
  }
367
372
  }
373
+ if (showFooter && !tProps.footerData) {
374
+ // 如果未设置自己的标位数据,则使用代理的
375
+ tProps.footerData = footerData
376
+ } else if (proxyOpts.footer && footerData.length) {
377
+ // 如果代理标为数据,且未请求到数据,则用自己的
378
+ tProps.footerData = footerData
379
+ }
368
380
  if (isZMax) {
369
- if (tableExtendProps.maxHeight) {
381
+ if (tProps.maxHeight) {
370
382
  tProps.maxHeight = '100%'
371
383
  } else {
372
384
  tProps.height = '100%'
@@ -710,6 +722,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
710
722
  const $xeGantt = this
711
723
  const props = $xeGantt
712
724
  const reactData = $xeGantt.reactData
725
+ const internalData = $xeGantt.internalData
713
726
  const $xeTable = $xeGantt.$refs.refTable as VxeTableConstructor & VxeTablePrivateMethods
714
727
 
715
728
  const { proxyConfig } = props
@@ -720,9 +733,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
720
733
  reactData.filterData = params.filterList
721
734
  if (proxyConfig && isEnableConf(proxyOpts)) {
722
735
  reactData.tablePage.currentPage = 1
736
+ internalData.uFoot = true
723
737
  $xeGantt.commitProxy('query').then((rest) => {
724
738
  $xeGantt.dispatchEvent('proxy-query', rest, params.$event)
725
739
  })
740
+ internalData.uFoot = false
741
+ $xeGantt.updateQueryFooter()
726
742
  }
727
743
  }
728
744
  },
@@ -742,6 +758,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
742
758
  const $xeGantt = this
743
759
  const props = $xeGantt
744
760
  const reactData = $xeGantt.reactData
761
+ const internalData = $xeGantt.internalData
745
762
 
746
763
  const { proxyConfig } = props
747
764
  const proxyOpts = $xeGantt.computeProxyOpts
@@ -749,15 +766,19 @@ export default /* define-vxe-component start */ defineVxeComponent({
749
766
  return
750
767
  }
751
768
  if (proxyConfig && isEnableConf(proxyOpts)) {
769
+ internalData.uFoot = true
752
770
  $xeGantt.commitProxy('reload').then((rest) => {
753
771
  $xeGantt.dispatchEvent('proxy-query', { ...rest, isReload: true }, params.$event)
754
772
  })
773
+ internalData.uFoot = false
774
+ $xeGantt.updateQueryFooter()
755
775
  }
756
776
  $xeGantt.dispatchEvent('form-submit', params, params.$event)
757
777
  },
758
778
  resetFormEvent (params: VxeFormDefines.ResetEventParams) {
759
779
  const $xeGantt = this
760
780
  const props = $xeGantt
781
+ const internalData = $xeGantt.internalData
761
782
 
762
783
  const $xeTable = $xeGantt.$refs.refTable as VxeTableConstructor & VxeTablePrivateMethods
763
784
  const { proxyConfig } = props
@@ -765,9 +786,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
765
786
  const proxyOpts = $xeGantt.computeProxyOpts
766
787
  if (proxyConfig && isEnableConf(proxyOpts)) {
767
788
  $xeTable.clearScroll()
789
+ internalData.uFoot = true
768
790
  $xeGantt.commitProxy('reload').then((rest) => {
769
791
  $xeGantt.dispatchEvent('proxy-query', { ...rest, isReload: true }, $event)
770
792
  })
793
+ internalData.uFoot = false
794
+ $xeGantt.updateQueryFooter()
771
795
  }
772
796
  $xeGantt.dispatchEvent('form-reset', params, $event)
773
797
  },
@@ -919,6 +943,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
919
943
  const $xeGantt = this
920
944
  const props = $xeGantt
921
945
  const reactData = $xeGantt.reactData
946
+ const internalData = $xeGantt.internalData
922
947
 
923
948
  const { proxyConfig, formConfig } = props
924
949
  const { proxyInited } = reactData
@@ -928,14 +953,31 @@ export default /* define-vxe-component start */ defineVxeComponent({
928
953
  if (isEnableConf(formConfig) && proxyOpts.form && formOpts.items) {
929
954
  reactData.formData = $xeGantt.getDefaultFormData()
930
955
  }
931
- if (!proxyInited && proxyOpts.autoLoad !== false) {
956
+ if (!proxyInited) {
932
957
  reactData.proxyInited = true
933
- $xeGantt.$nextTick().then(() => $xeGantt.commitProxy('initial')).then((rest) => {
934
- $xeGantt.dispatchEvent('proxy-query', { ...rest, isInited: true }, new Event('initial'))
935
- })
958
+ if (proxyOpts.autoLoad !== false) {
959
+ $xeGantt.$nextTick().then(() => {
960
+ internalData.uFoot = true
961
+ const rest = $xeGantt.commitProxy('initial')
962
+ internalData.uFoot = false
963
+ $xeGantt.updateQueryFooter()
964
+ return rest
965
+ }).then((rest) => {
966
+ $xeGantt.dispatchEvent('proxy-query', { ...rest, isInited: true }, new Event('initial'))
967
+ })
968
+ }
936
969
  }
937
970
  }
938
971
  },
972
+ updateQueryFooter () {
973
+ const $xeGantt = this
974
+
975
+ const proxyOpts = $xeGantt.computeProxyOpts
976
+ const { ajax } = proxyOpts
977
+ if (ajax && ajax.queryFooter) {
978
+ return $xeGantt.commitProxy('queryFooter')
979
+ }
980
+ },
939
981
  handleGlobalKeydownEvent (evnt: KeyboardEvent) {
940
982
  const $xeGantt = this
941
983
  const reactData = $xeGantt.reactData
@@ -959,6 +1001,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
959
1001
  const $xeGantt = this
960
1002
  const props = $xeGantt
961
1003
  const reactData = $xeGantt.reactData
1004
+ const internalData = $xeGantt.internalData
962
1005
 
963
1006
  /**
964
1007
  * 已废弃
@@ -966,15 +1009,15 @@ export default /* define-vxe-component start */ defineVxeComponent({
966
1009
  */
967
1010
  const toolbar = (props as any).toolbar
968
1011
 
969
- const { proxyConfig, toolbarConfig, pagerConfig, editRules, validConfig } = props
1012
+ const { showFooter, proxyConfig, toolbarConfig, pagerConfig, editRules, validConfig } = props
970
1013
  const { tablePage } = reactData
971
1014
  const isActiveMsg = $xeGantt.computeIsActiveMsg
972
1015
  const isRespMsg = $xeGantt.computeIsRespMsg
973
1016
  const proxyOpts = $xeGantt.computeProxyOpts
974
1017
  const pagerOpts = $xeGantt.computePagerOpts
975
1018
  const toolbarOpts = $xeGantt.computeToolbarOpts
976
- const { beforeQuery, afterQuery, beforeDelete, afterDelete, beforeSave, afterSave, ajax = {} } = proxyOpts
977
- const resConfigs = proxyOpts.response || proxyOpts.props || {}
1019
+ const { beforeQuery, afterQuery, beforeQueryFooter, afterQueryFooter, beforeDelete, afterDelete, beforeSave, afterSave, ajax = {} } = proxyOpts
1020
+ const resConfigs = (proxyOpts.response || proxyOpts.props || {}) as VxeGridDefines.ProxyConfigResponseConfig
978
1021
  const $xeTable = $xeGantt.$refs.refTable as VxeTableConstructor & VxeTablePrivateMethods
979
1022
  let formData = $xeGantt.getFormData()
980
1023
  let button: VxeToolbarPropTypes.ButtonConfig | null = null
@@ -1023,23 +1066,25 @@ export default /* define-vxe-component start */ defineVxeComponent({
1023
1066
  case 'initial':
1024
1067
  case 'reload':
1025
1068
  case 'query': {
1026
- const ajaxMethods = ajax.query
1027
- const querySuccessMethods = ajax.querySuccess
1028
- const queryErrorMethods = ajax.queryError
1029
- if (ajaxMethods) {
1069
+ const qMethods = ajax.query
1070
+ const qsMethods = ajax.querySuccess
1071
+ const qeMethods = ajax.queryError
1072
+ if (qMethods) {
1030
1073
  const isInited = code === 'initial'
1031
1074
  const isReload = code === 'reload'
1032
1075
  if (!isInited && reactData.tableLoading) {
1033
1076
  return $xeGantt.$nextTick()
1034
1077
  }
1078
+ let operPromise = null
1035
1079
  let sortList: any[] = []
1036
1080
  let filterList: VxeTableDefines.FilterCheckedParams[] = []
1037
1081
  let pageParams: any = {}
1038
1082
  if (pagerConfig) {
1039
1083
  if (isInited || isReload) {
1084
+ // 重置分页
1040
1085
  tablePage.currentPage = 1
1041
1086
  }
1042
- if (isEnableConf(pagerConfig)) {
1087
+ if (isEnableConf(pagerOpts)) {
1043
1088
  pageParams = { ...tablePage }
1044
1089
  }
1045
1090
  }
@@ -1083,7 +1128,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1083
1128
  } else {
1084
1129
  if ($xeTable) {
1085
1130
  if (isReload) {
1086
- $xeTable.clearAll()
1131
+ operPromise = $xeTable.clearAll()
1087
1132
  } else {
1088
1133
  sortList = $xeTable.getSortColumns()
1089
1134
  filterList = $xeTable.getCheckedFilters()
@@ -1103,58 +1148,111 @@ export default /* define-vxe-component start */ defineVxeComponent({
1103
1148
  sorts: sortList,
1104
1149
  filters: filterList,
1105
1150
  form: formData,
1106
- options: ajaxMethods
1151
+ options: qMethods
1107
1152
  }
1108
1153
  reactData.sortData = sortList
1109
1154
  reactData.filterData = filterList
1110
1155
  reactData.tableLoading = true
1111
- const applyArgs = [commitParams].concat(args)
1112
- return Promise.resolve((beforeQuery || ajaxMethods)(...applyArgs))
1113
- .then(rest => {
1114
- let tableData: any[] = []
1115
- reactData.tableLoading = false
1116
- if (rest) {
1117
- if (pagerConfig && isEnableConf(pagerOpts)) {
1118
- const totalProp = resConfigs.total
1119
- const total = (XEUtils.isFunction(totalProp) ? totalProp({ data: rest, $table: $xeTable, $grid: null, $gantt: $xeGantt }) : XEUtils.get(rest, totalProp || 'page.total')) || 0
1120
- tablePage.total = XEUtils.toNumber(total)
1121
- const resultProp = resConfigs.result
1122
- tableData = (XEUtils.isFunction(resultProp) ? resultProp({ data: rest, $table: $xeTable, $grid: null, $gantt: $xeGantt }) : XEUtils.get(rest, resultProp || 'result')) || []
1123
- // 检验当前页码,不能超出当前最大页数
1124
- const pageCount = Math.max(Math.ceil(total / tablePage.pageSize), 1)
1125
- if (tablePage.currentPage > pageCount) {
1126
- tablePage.currentPage = pageCount
1127
- }
1128
- } else {
1129
- const listProp = resConfigs.list
1130
- tableData = (listProp ? (XEUtils.isFunction(listProp) ? listProp({ data: rest, $table: $xeTable, $grid: null, $gantt: $xeGantt }) : XEUtils.get(rest, listProp)) : rest) || []
1156
+ return Promise.all([
1157
+ Promise.resolve((beforeQuery || qMethods)(commitParams, ...args)),
1158
+ operPromise
1159
+ ]).then(([rest]) => {
1160
+ let tableData: any[] = []
1161
+ reactData.tableLoading = false
1162
+ if (rest) {
1163
+ const reParams = { data: rest, $table: $xeTable, $grid: null, $gantt: $xeGantt }
1164
+ if (pagerConfig && isEnableConf(pagerOpts)) {
1165
+ const totalProp = resConfigs.total
1166
+ const total = (XEUtils.isFunction(totalProp) ? totalProp(reParams) : XEUtils.get(rest, totalProp || 'page.total')) || 0
1167
+ tablePage.total = XEUtils.toNumber(total)
1168
+ const resultProp = resConfigs.result
1169
+ tableData = (XEUtils.isFunction(resultProp) ? resultProp(reParams) : XEUtils.get(rest, resultProp || 'result')) || []
1170
+ // 检验当前页码,不能超出当前最大页数
1171
+ const pageCount = Math.max(Math.ceil(total / tablePage.pageSize), 1)
1172
+ if (tablePage.currentPage > pageCount) {
1173
+ tablePage.currentPage = pageCount
1131
1174
  }
1132
- }
1133
- if ($xeTable as any) {
1134
- $xeTable.loadData(tableData)
1135
1175
  } else {
1136
- $xeTable.$nextTick(() => {
1137
- if ($xeTable) {
1138
- $xeTable.loadData(tableData)
1139
- }
1140
- })
1141
- }
1142
- if (afterQuery) {
1143
- afterQuery(...applyArgs)
1144
- }
1145
- if (querySuccessMethods) {
1146
- querySuccessMethods({ ...commitParams, response: rest })
1176
+ const listProp = resConfigs.list
1177
+ if (XEUtils.isArray(rest)) {
1178
+ tableData = rest
1179
+ } else if (listProp) {
1180
+ tableData = (XEUtils.isFunction(listProp) ? listProp(reParams) : XEUtils.get(rest, listProp)) || []
1181
+ }
1147
1182
  }
1148
- return { status: true }
1149
- }).catch((rest) => {
1150
- reactData.tableLoading = false
1151
- if (queryErrorMethods) {
1152
- queryErrorMethods({ ...commitParams, response: rest })
1183
+ if (showFooter) {
1184
+ const fdProp = resConfigs.footerData
1185
+ const footerList = fdProp ? (XEUtils.isFunction(fdProp) ? fdProp(reParams) : XEUtils.get(rest, fdProp)) : []
1186
+ if (XEUtils.isArray(footerList)) {
1187
+ reactData.footerData = footerList
1188
+ }
1153
1189
  }
1154
- return { status: false }
1155
- })
1190
+ }
1191
+ if ($xeTable) {
1192
+ $xeTable.loadData(tableData)
1193
+ } else {
1194
+ $xeGantt.$nextTick(() => {
1195
+ const $xeTable = $xeGantt.$refs.refTable as VxeTableConstructor & VxeTablePrivateMethods
1196
+ if ($xeTable) {
1197
+ $xeTable.loadData(tableData)
1198
+ }
1199
+ })
1200
+ }
1201
+ if (afterQuery) {
1202
+ afterQuery(commitParams, ...args)
1203
+ }
1204
+ if (qsMethods) {
1205
+ qsMethods({ ...commitParams, response: rest })
1206
+ }
1207
+ return { status: true }
1208
+ }).catch((rest) => {
1209
+ reactData.tableLoading = false
1210
+ if (qeMethods) {
1211
+ qeMethods({ ...commitParams, response: rest })
1212
+ }
1213
+ return { status: false }
1214
+ })
1215
+ } else {
1216
+ errLog('vxe.error.notFunc', ['[gantt] proxy-config.ajax.query'])
1217
+ }
1218
+ break
1219
+ }
1220
+ case 'queryFooter': {
1221
+ const qfMethods = ajax.queryFooter
1222
+ const qfSuccessMethods = ajax.queryFooterSuccess
1223
+ const qfErrorMethods = ajax.queryFooterError
1224
+ if (qfMethods) {
1225
+ let filterList: VxeTableDefines.FilterCheckedParams[] = []
1226
+ if ($xeTable) {
1227
+ filterList = $xeTable.getCheckedFilters()
1228
+ }
1229
+ const commitParams = {
1230
+ $table: $xeTable,
1231
+ $grid: null,
1232
+ $gantt: $xeGantt,
1233
+ code,
1234
+ button,
1235
+ filters: filterList,
1236
+ form: formData,
1237
+ options: qfMethods
1238
+ }
1239
+ return Promise.resolve((beforeQueryFooter || qfMethods)(commitParams, ...args)).then(rest => {
1240
+ reactData.footerData = XEUtils.isArray(rest) ? rest : []
1241
+ if (afterQueryFooter) {
1242
+ afterQueryFooter(commitParams, ...args)
1243
+ }
1244
+ if (qfSuccessMethods) {
1245
+ qfSuccessMethods({ ...commitParams, response: rest })
1246
+ }
1247
+ return { status: true }
1248
+ }).catch((rest) => {
1249
+ if (qfErrorMethods) {
1250
+ qfErrorMethods({ ...commitParams, response: rest })
1251
+ }
1252
+ return { status: false }
1253
+ })
1156
1254
  } else {
1157
- errLog('vxe.error.notFunc', ['proxy-config.ajax.query'])
1255
+ errLog('vxe.error.notFunc', ['[gantt] proxy-config.ajax.queryFooter'])
1158
1256
  }
1159
1257
  break
1160
1258
  }
@@ -1197,7 +1295,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
1197
1295
  if (afterDelete) {
1198
1296
  afterDelete(...applyArgs)
1199
1297
  } else {
1298
+ internalData.uFoot = true
1200
1299
  $xeGantt.commitProxy('query')
1300
+ internalData.uFoot = false
1301
+ $xeGantt.updateQueryFooter()
1201
1302
  }
1202
1303
  if (deleteSuccessMethods) {
1203
1304
  deleteSuccessMethods({ ...commitParams, response: rest })
@@ -1285,7 +1386,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
1285
1386
  if (afterSave) {
1286
1387
  afterSave(...applyArgs)
1287
1388
  } else {
1389
+ internalData.uFoot = true
1288
1390
  $xeGantt.commitProxy('query')
1391
+ internalData.uFoot = false
1392
+ $xeGantt.updateQueryFooter()
1289
1393
  }
1290
1394
  if (saveSuccessMethods) {
1291
1395
  saveSuccessMethods({ ...commitParams, response: rest })
@@ -1623,13 +1727,25 @@ export default /* define-vxe-component start */ defineVxeComponent({
1623
1727
  },
1624
1728
  triggerToolbarCommitEvent (params: any, evnt: any) {
1625
1729
  const $xeGantt = this
1730
+ const internalData = $xeGantt.internalData
1626
1731
 
1627
1732
  const { code } = params
1628
- return $xeGantt.commitProxy(params, evnt).then((rest) => {
1629
- if (code && rest && rest.status && ['query', 'reload', 'delete', 'save'].includes(code)) {
1630
- $xeGantt.dispatchEvent(code === 'delete' || code === 'save' ? `proxy-${code as 'delete' | 'save'}` : 'proxy-query', { ...rest, isReload: code === 'reload' }, evnt)
1733
+ if (code) {
1734
+ const isUf = ['reload', 'delete', 'save'].includes(code)
1735
+ if (isUf) {
1736
+ internalData.uFoot = true
1631
1737
  }
1632
- })
1738
+ const rest = $xeGantt.commitProxy(params, evnt).then((rest) => {
1739
+ if (code && rest && rest.status && ['query', 'reload', 'delete', 'save'].includes(code)) {
1740
+ $xeGantt.dispatchEvent(code === 'delete' || code === 'save' ? `proxy-${code as 'delete' | 'save'}` : 'proxy-query', { ...rest, isReload: code === 'reload' }, evnt)
1741
+ }
1742
+ })
1743
+ if (isUf) {
1744
+ $xeGantt.updateQueryFooter()
1745
+ }
1746
+ internalData.uFoot = false
1747
+ return rest
1748
+ }
1633
1749
  },
1634
1750
  triggerToolbarBtnEvent (button: any, evnt: any) {
1635
1751
  const $xeGantt = this
@@ -49,3 +49,7 @@ export function eqEmptyValue (cellValue: any) {
49
49
  export function getStringValue (cellValue: any) {
50
50
  return eqEmptyValue(cellValue) ? '' : cellValue
51
51
  }
52
+
53
+ export function getClass (property: any, params: any) {
54
+ return property ? XEUtils.isFunction(property) ? property(params) : property : ''
55
+ }