表格分页处理

This commit is contained in:
gary.fu
2024-01-04 10:13:16 +08:00
parent 8c76462093
commit e2aa0c8238
5 changed files with 61 additions and 38 deletions

View File

@@ -81,6 +81,10 @@ html, body, #app, .index-container {
text-align: center; text-align: center;
} }
.no_flex {
display: block;
}
/** /**
* slide-fade动画 * slide-fade动画
*/ */

View File

@@ -64,6 +64,10 @@ const props = defineProps({
type: Object, type: Object,
default: null default: null
}, },
pageAlign: {
type: String,
default: 'center'
},
pageAttrs: { pageAttrs: {
type: Object, type: Object,
default () { default () {
@@ -93,7 +97,16 @@ const calcColumns = computed(() => {
return _columns return _columns
}) })
defineEmits(['pageSizeChange', 'currentPageChange']) const emit = defineEmits(['pageSizeChange', 'currentPageChange', 'update:page'])
const pageSizeChange = (pageSize) => {
emit('update:page', { ...props.page, pageSize })
emit('pageSizeChange', pageSize)
}
const currentPageChange = (pageNumber) => {
emit('update:page', { ...props.page, pageNumber })
emit('currentPageChange', pageNumber)
}
</script> </script>
@@ -126,19 +139,20 @@ defineEmits(['pageSizeChange', 'currentPageChange'])
</common-table-column> </common-table-column>
</el-table> </el-table>
<el-pagination <el-pagination
v-if="page && page.totalCount" v-if="page &&page.pageCount&&page.pageCount>1"
class="common-pagination" class="common-pagination"
v-bind="pageAttrs" v-bind="pageAttrs"
:total="page.totalCount" :total="page.totalCount"
:page-size="page.pageSize" :page-size="page.pageSize"
:current-page="page.pageIndex" :current-page="page.pageNumber"
@size-change="$emit('pageSizeChange', $event)" @size-change="pageSizeChange($event)"
@current-change="$emit('currentPageChange', $event)" @current-change="currentPageChange($event)"
/> />
</template> </template>
<style scoped> <style scoped>
.common-pagination { .common-pagination {
margin-top: 15px; margin-top: 15px;
justify-content: v-bind(pageAlign);
} }
</style> </style>

View File

@@ -8,11 +8,11 @@ export const PAGE_SIZE = 10
* 默认分页数据 * 默认分页数据
* *
* @param pageSize * @param pageSize
* @return {{pageIndex: number, pageSize: number, totalCount: number, pageNumber:number}} * @return {{pageCount: number, pageSize: number, totalCount: number, pageNumber:number}}
*/ */
export const useDefaultPage = (pageSize = PAGE_SIZE) => { export const useDefaultPage = (pageSize = PAGE_SIZE) => {
return { return {
pageSize, pageSize,
pageIndex: 1 pageNumber: 1
} }
} }

View File

@@ -13,8 +13,8 @@ import { $httpPost } from '@/vendors/axios'
* 加载用户数据 * 加载用户数据
* @return {{success:boolean, message:string,userList: [UserDto]}} * @return {{success:boolean, message:string,userList: [UserDto]}}
*/ */
export const loadUsersResult = async config => { export const loadUsersResult = async (data, config) => {
const usersResult = await $httpPost('/api/users', config) const usersResult = await $httpPost('/api/users', data, config)
console.info('==================', usersResult) console.info('==================', usersResult)
return usersResult return usersResult
} }

View File

@@ -7,14 +7,17 @@ const page = ref(useDefaultPage())
const tableData = ref([]) const tableData = ref([])
onMounted(async () => { const loadUsers = async () => {
const usersResult = await loadUsersResult() const usersResult = await loadUsersResult({ page: page.value })
console.info('=================', usersResult)
if (usersResult.success && usersResult.resultData) { if (usersResult.success && usersResult.resultData) {
const resultData = usersResult.resultData const resultData = usersResult.resultData
tableData.value = resultData.userList tableData.value = resultData.userList
Object.assign(page.value, resultData.page) Object.assign(page.value, resultData.page)
} }
}
onMounted(() => {
loadUsers()
}) })
/** /**
@@ -67,32 +70,34 @@ const buttons = ref([{
</script> </script>
<template> <template>
<common-table <el-container class="no_flex">
:data="tableData" <common-table
:columns="columns" v-model:page="page"
:buttons="buttons" :data="tableData"
buttons-slot="buttons" :columns="columns"
:page="page" :buttons="buttons"
:buttons-column-attrs="{width:'300px'}" buttons-slot="buttons"
@page-size-change="console.info" :buttons-column-attrs="{width:'300px'}"
@current-page-change="console.info" @page-size-change="loadUsers()"
> @current-page-change="loadUsers()"
<template #gender="{item}"> >
<el-tag <template #gender="{item}">
:type="item.gender === 'male' ? '' : 'success'" <el-tag
> :type="item.gender === 'male' ? '' : 'success'"
{{ item.gender }} >
</el-tag> {{ item.gender }}
</template> </el-tag>
<template #buttons="{item}"> </template>
<el-button <template #buttons="{item}">
size="small" <el-button
@click="console.info(item)" size="small"
> @click="console.info(item)"
测试 >
</el-button> 测试
</template> </el-button>
</common-table> </template>
</common-table>
</el-container>
</template> </template>
<style scoped> <style scoped>