Skip to content

Commit aaa32e4

Browse files
committed
releases 4.17.21
1 parent 33b02ff commit aaa32e4

File tree

6 files changed

+280
-51
lines changed

6 files changed

+280
-51
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vxe-table",
3-
"version": "4.17.20",
3+
"version": "4.17.21",
44
"description": "A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.",
55
"scripts": {
66
"update": "npm install --legacy-peer-deps",
@@ -66,7 +66,7 @@
6666
"typescript": "~4.7.4",
6767
"vue": "3.4.27",
6868
"vue-router": "~4.5.1",
69-
"vxe-gantt": "~4.0.21"
69+
"vxe-gantt": "~4.0.25"
7070
},
7171
"vetur": {
7272
"tags": "helper/vetur/tags.json",

packages/grid/src/grid.ts

Lines changed: 132 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const tableComponentMethodKeys: (keyof VxeTableMethods)[] = ['clearAll', 'syncDa
2323

2424
function createInternalData (): GridInternalData {
2525
return {
26+
uFoot: false
2627
}
2728
}
2829

@@ -51,6 +52,7 @@ export default defineVxeComponent({
5152
filterData: [],
5253
formData: {},
5354
sortData: [],
55+
footerData: [],
5456
tZindex: 0,
5557
tablePage: {
5658
total: 0,
@@ -149,21 +151,30 @@ export default defineVxeComponent({
149151
const computeTableExtendProps = computed(() => {
150152
const rest: Record<string, any> = {}
151153
tableComponentPropKeys.forEach((key) => {
152-
rest[key] = props[key]
154+
if (props[key] !== undefined) {
155+
rest[key] = props[key]
156+
}
153157
})
154158
return rest
155159
})
156160

157161
const computeTableProps = computed(() => {
158-
const { seqConfig, pagerConfig, editConfig, proxyConfig } = props
159-
const { isZMax, tablePage } = reactData
162+
const { showFooter, seqConfig, pagerConfig, editConfig, proxyConfig } = props
163+
const { isZMax, tablePage, footerData } = reactData
160164
const tableExtendProps = computeTableExtendProps.value
161165
const proxyOpts = computeProxyOpts.value
162166
const pagerOpts = computePagerOpts.value
163167
const isLoading = computeIsLoading.value
164168
const tProps = Object.assign({}, tableExtendProps)
169+
if (showFooter && !tProps.footerData) {
170+
// 如果未设置自己的标位数据,则使用代理的
171+
tProps.footerData = footerData
172+
} else if (proxyOpts.footer && footerData.length) {
173+
// 如果代理标为数据,且未请求到数据,则用自己的
174+
tProps.footerData = footerData
175+
}
165176
if (isZMax) {
166-
if (tableExtendProps.maxHeight) {
177+
if (tProps.maxHeight) {
167178
tProps.maxHeight = '100%'
168179
} else {
169180
tProps.height = '100%'
@@ -423,9 +434,12 @@ export default defineVxeComponent({
423434
reactData.filterData = params.filterList
424435
if (proxyConfig && isEnableConf(proxyOpts)) {
425436
reactData.tablePage.currentPage = 1
437+
internalData.uFoot = true
426438
$xeGrid.commitProxy('query').then((rest) => {
427439
$xeGrid.dispatchEvent('proxy-query', rest, params.$event)
428440
})
441+
internalData.uFoot = false
442+
updateQueryFooter()
429443
}
430444
}
431445
}
@@ -447,9 +461,12 @@ export default defineVxeComponent({
447461
return
448462
}
449463
if (proxyConfig && isEnableConf(proxyOpts)) {
464+
internalData.uFoot = true
450465
$xeGrid.commitProxy('reload').then((rest) => {
451466
$xeGrid.dispatchEvent('proxy-query', { ...rest, isReload: true }, params.$event)
452467
})
468+
internalData.uFoot = false
469+
updateQueryFooter()
453470
}
454471
$xeGrid.dispatchEvent('form-submit', params, params.$event)
455472
}
@@ -463,9 +480,12 @@ export default defineVxeComponent({
463480
if ($xeTable) {
464481
$xeTable.clearScroll()
465482
}
483+
internalData.uFoot = true
466484
$xeGrid.commitProxy('reload').then((rest) => {
467485
$xeGrid.dispatchEvent('proxy-query', { ...rest, isReload: true }, $event)
468486
})
487+
internalData.uFoot = false
488+
updateQueryFooter()
469489
}
470490
$xeGrid.dispatchEvent('form-reset', params, $event)
471491
}
@@ -917,14 +937,28 @@ export default defineVxeComponent({
917937
if (!proxyInited) {
918938
reactData.proxyInited = true
919939
if (proxyOpts.autoLoad !== false) {
920-
nextTick().then(() => $xeGrid.commitProxy('initial')).then((rest) => {
940+
nextTick().then(() => {
941+
internalData.uFoot = true
942+
const rest = $xeGrid.commitProxy('initial')
943+
internalData.uFoot = false
944+
updateQueryFooter()
945+
return rest
946+
}).then((rest) => {
921947
dispatchEvent('proxy-query', { ...rest, isInited: true }, new Event('initial'))
922948
})
923949
}
924950
}
925951
}
926952
}
927953

954+
const updateQueryFooter = () => {
955+
const proxyOpts = computeProxyOpts.value
956+
const { ajax } = proxyOpts
957+
if (ajax && ajax.queryFooter) {
958+
return $xeGrid.commitProxy('queryFooter')
959+
}
960+
}
961+
928962
const handleGlobalKeydownEvent = (evnt: KeyboardEvent) => {
929963
const zoomOpts = computeZoomOpts.value
930964
const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE)
@@ -947,15 +981,15 @@ export default defineVxeComponent({
947981
* @param {String/Object} code 字符串或对象
948982
*/
949983
commitProxy (proxyTarget: string | VxeToolbarPropTypes.ButtonConfig, ...args: any[]) {
950-
const { proxyConfig, toolbarConfig, pagerConfig, editRules, validConfig } = props
984+
const { showFooter, proxyConfig, toolbarConfig, pagerConfig, editRules, validConfig } = props
951985
const { tablePage } = reactData
952986
const isActiveMsg = computeIsActiveMsg.value
953987
const isRespMsg = computeIsRespMsg.value
954988
const proxyOpts = computeProxyOpts.value
955989
const pagerOpts = computePagerOpts.value
956990
const toolbarOpts = computeToolbarOpts.value
957-
const { beforeQuery, afterQuery, beforeDelete, afterDelete, beforeSave, afterSave, ajax = {} } = proxyOpts
958-
const resConfigs = proxyOpts.response || proxyOpts.props || {}
991+
const { beforeQuery, afterQuery, beforeQueryFooter, afterQueryFooter, beforeDelete, afterDelete, beforeSave, afterSave, ajax = {} } = proxyOpts
992+
const resConfigs = (proxyOpts.response || proxyOpts.props || {}) as VxeGridDefines.ProxyConfigResponseConfig
959993
const $xeTable = refTable.value
960994
if (!$xeTable) {
961995
return nextTick()
@@ -1006,10 +1040,10 @@ export default defineVxeComponent({
10061040
case 'initial':
10071041
case 'reload':
10081042
case 'query': {
1009-
const ajaxMethods = ajax.query
1010-
const querySuccessMethods = ajax.querySuccess
1011-
const queryErrorMethods = ajax.queryError
1012-
if (ajaxMethods) {
1043+
const qMethods = ajax.query
1044+
const qsMethods = ajax.querySuccess
1045+
const qeMethods = ajax.queryError
1046+
if (qMethods) {
10131047
const isInited = code === 'initial'
10141048
const isReload = code === 'reload'
10151049
if (!isInited && reactData.tableLoading) {
@@ -1089,32 +1123,44 @@ export default defineVxeComponent({
10891123
sorts: sortList,
10901124
filters: filterList,
10911125
form: formData,
1092-
options: ajaxMethods
1126+
options: qMethods
10931127
}
10941128
reactData.sortData = sortList
10951129
reactData.filterData = filterList
10961130
reactData.tableLoading = true
10971131
return Promise.all([
1098-
Promise.resolve((beforeQuery || ajaxMethods)(commitParams, ...args)),
1132+
Promise.resolve((beforeQuery || qMethods)(commitParams, ...args)),
10991133
operPromise
11001134
]).then(([rest]) => {
11011135
let tableData: any[] = []
11021136
reactData.tableLoading = false
11031137
if (rest) {
1138+
const reParams = { data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null }
11041139
if (pagerConfig && isEnableConf(pagerOpts)) {
11051140
const totalProp = resConfigs.total
1106-
const total = (XEUtils.isFunction(totalProp) ? totalProp({ data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null }) : XEUtils.get(rest, totalProp || 'page.total')) || 0
1141+
const total = (XEUtils.isFunction(totalProp) ? totalProp(reParams) : XEUtils.get(rest, totalProp || 'page.total')) || 0
11071142
tablePage.total = XEUtils.toNumber(total)
11081143
const resultProp = resConfigs.result
1109-
tableData = (XEUtils.isFunction(resultProp) ? resultProp({ data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null }) : XEUtils.get(rest, resultProp || 'result')) || []
1144+
tableData = (XEUtils.isFunction(resultProp) ? resultProp(reParams) : XEUtils.get(rest, resultProp || 'result')) || []
11101145
// 检验当前页码,不能超出当前最大页数
11111146
const pageCount = Math.max(Math.ceil(total / tablePage.pageSize), 1)
11121147
if (tablePage.currentPage > pageCount) {
11131148
tablePage.currentPage = pageCount
11141149
}
11151150
} else {
11161151
const listProp = resConfigs.list
1117-
tableData = (listProp ? (XEUtils.isFunction(listProp) ? listProp({ data: rest, $table: $xeTable, $grid: $xeGrid, $gantt: null }) : XEUtils.get(rest, listProp)) : rest) || []
1152+
if (XEUtils.isArray(rest)) {
1153+
tableData = rest
1154+
} else if (listProp) {
1155+
tableData = (XEUtils.isFunction(listProp) ? listProp(reParams) : XEUtils.get(rest, listProp)) || []
1156+
}
1157+
}
1158+
if (showFooter) {
1159+
const fdProp = resConfigs.footerData
1160+
const footerList = fdProp ? (XEUtils.isFunction(fdProp) ? fdProp(reParams) : XEUtils.get(rest, fdProp)) : []
1161+
if (XEUtils.isArray(footerList)) {
1162+
reactData.footerData = footerList
1163+
}
11181164
}
11191165
}
11201166
if ($xeTable) {
@@ -1130,14 +1176,14 @@ export default defineVxeComponent({
11301176
if (afterQuery) {
11311177
afterQuery(commitParams, ...args)
11321178
}
1133-
if (querySuccessMethods) {
1134-
querySuccessMethods({ ...commitParams, response: rest })
1179+
if (qsMethods) {
1180+
qsMethods({ ...commitParams, response: rest })
11351181
}
11361182
return { status: true }
11371183
}).catch((rest) => {
11381184
reactData.tableLoading = false
1139-
if (queryErrorMethods) {
1140-
queryErrorMethods({ ...commitParams, response: rest })
1185+
if (qeMethods) {
1186+
qeMethods({ ...commitParams, response: rest })
11411187
}
11421188
return { status: false }
11431189
})
@@ -1146,11 +1192,50 @@ export default defineVxeComponent({
11461192
}
11471193
break
11481194
}
1195+
case 'queryFooter': {
1196+
const qfMethods = ajax.queryFooter
1197+
const qfSuccessMethods = ajax.queryFooterSuccess
1198+
const qfErrorMethods = ajax.queryFooterError
1199+
if (qfMethods) {
1200+
let filterList: VxeTableDefines.FilterCheckedParams[] = []
1201+
if ($xeTable) {
1202+
filterList = $xeTable.getCheckedFilters()
1203+
}
1204+
const commitParams = {
1205+
$table: $xeTable,
1206+
$grid: $xeGrid,
1207+
$gantt: null,
1208+
code,
1209+
button,
1210+
filters: filterList,
1211+
form: formData,
1212+
options: qfMethods
1213+
}
1214+
return Promise.resolve((beforeQueryFooter || qfMethods)(commitParams, ...args)).then(rest => {
1215+
reactData.footerData = XEUtils.isArray(rest) ? rest : []
1216+
if (afterQueryFooter) {
1217+
afterQueryFooter(commitParams, ...args)
1218+
}
1219+
if (qfSuccessMethods) {
1220+
qfSuccessMethods({ ...commitParams, response: rest })
1221+
}
1222+
return { status: true }
1223+
}).catch((rest) => {
1224+
if (qfErrorMethods) {
1225+
qfErrorMethods({ ...commitParams, response: rest })
1226+
}
1227+
return { status: false }
1228+
})
1229+
} else {
1230+
errLog('vxe.error.notFunc', ['[grid] proxy-config.ajax.queryFooter'])
1231+
}
1232+
break
1233+
}
11491234
case 'delete': {
1150-
const ajaxMethods = ajax.delete
1235+
const dMethods = ajax.delete
11511236
const deleteSuccessMethods = ajax.deleteSuccess
11521237
const deleteErrorMethods = ajax.deleteError
1153-
if (ajaxMethods) {
1238+
if (dMethods) {
11541239
const selectRecords = $xeGrid.getCheckboxRecords()
11551240
const removeRecords = selectRecords.filter(row => !$xeTable.isInsertByRow(row))
11561241
const body = { removeRecords }
@@ -1162,15 +1247,15 @@ export default defineVxeComponent({
11621247
button,
11631248
body,
11641249
form: formData,
1165-
options: ajaxMethods
1250+
options: dMethods
11661251
}
11671252
if (selectRecords.length) {
11681253
return handleDeleteRow(code, 'vxe.grid.deleteSelectRecord', () => {
11691254
if (!removeRecords.length) {
11701255
return $xeTable.remove(selectRecords)
11711256
}
11721257
reactData.tableLoading = true
1173-
return Promise.resolve((beforeDelete || ajaxMethods)(commitParams, ...args))
1258+
return Promise.resolve((beforeDelete || dMethods)(commitParams, ...args))
11741259
.then(rest => {
11751260
reactData.tableLoading = false
11761261
$xeTable.setPendingRow(removeRecords, false)
@@ -1182,7 +1267,10 @@ export default defineVxeComponent({
11821267
if (afterDelete) {
11831268
afterDelete(commitParams, ...args)
11841269
} else {
1270+
internalData.uFoot = true
11851271
$xeGrid.commitProxy('query')
1272+
internalData.uFoot = false
1273+
updateQueryFooter()
11861274
}
11871275
if (deleteSuccessMethods) {
11881276
deleteSuccessMethods({ ...commitParams, response: rest })
@@ -1263,7 +1351,10 @@ export default defineVxeComponent({
12631351
if (afterSave) {
12641352
afterSave(commitParams, ...args)
12651353
} else {
1354+
internalData.uFoot = true
12661355
$xeGrid.commitProxy('query')
1356+
internalData.uFoot = false
1357+
updateQueryFooter()
12671358
}
12681359
if (saveSuccessMethods) {
12691360
saveSuccessMethods({ ...commitParams, response: rest })
@@ -1501,11 +1592,23 @@ export default defineVxeComponent({
15011592
},
15021593
triggerToolbarCommitEvent (params, evnt) {
15031594
const { code } = params
1504-
return $xeGrid.commitProxy(params, evnt).then((rest) => {
1505-
if (code && rest && rest.status && ['query', 'reload', 'delete', 'save'].includes(code)) {
1506-
$xeGrid.dispatchEvent(code === 'delete' || code === 'save' ? `proxy-${code as 'delete' | 'save'}` : 'proxy-query', { ...rest, isReload: code === 'reload' }, evnt)
1595+
if (code) {
1596+
const isUf = ['reload', 'delete', 'save'].includes(code)
1597+
if (isUf) {
1598+
internalData.uFoot = true
15071599
}
1508-
})
1600+
const rest = $xeGrid.commitProxy(params, evnt).then((rest) => {
1601+
if (rest && rest.status && ['query', 'reload', 'delete', 'save'].includes(code)) {
1602+
$xeGrid.dispatchEvent(code === 'delete' || code === 'save' ? `proxy-${code as 'delete' | 'save'}` : 'proxy-query', { ...rest, isReload: code === 'reload' }, evnt)
1603+
}
1604+
})
1605+
internalData.uFoot = false
1606+
if (isUf) {
1607+
updateQueryFooter()
1608+
}
1609+
return rest
1610+
}
1611+
return nextTick()
15091612
},
15101613
triggerToolbarBtnEvent (button, evnt) {
15111614
$xeGrid.triggerToolbarCommitEvent(button, evnt)

0 commit comments

Comments
 (0)