elementui分页功能(当后端将所有数据全部返回,由前端处理)

在这里插入图片描述
摘要:

实现数据导入的时候,后端会返回上传成功数量、更新成功数量、更新失败数量、以及更新失败的原因,但是数据是全部返回来的,所以封装了一个组件了提示,但是数据多的时候会太长了,所以使用table了模拟分页的效果!因为数据是全部在前端处理的!

在使用 Element Plus 的 Table 组件时,如果想要模拟分页而不是一次性加载所有数据,你可以使用 Table 组件的 pagination 属性来控制分页功能,并在后端请求数据时传递当前页和每页显示条数的参数。

<template>
  <Dialog v-model="dialogVisible" :title="dialogTitle" :close-on-click-modal="false" width="1100">
    <el-form-item label="上传成功数量:" label-width="110px">
      {{ successNum }}
    </el-form-item>
    <el-form-item label="更新成功数量:" label-width="110px">
      {{ updateNum }}
    </el-form-item>
    <el-form-item label="更新失败数量:" label-width="110px">
      {{ updateFailNum }}
    </el-form-item>
    <el-form-item label="" label-width="110px">
      <el-table border :data="tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize)" :show-overflow-tooltip="true" :stripe="true">
        <el-table-column align="center" label="名称" prop="name" min-width="100" />
        <el-table-column align="center" label="失败原因" prop="message" min-width="100" />
      </el-table>
      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[5, 10]" :page-size="pageSize" :total="tableData.length" layout="total, sizes, prev, pager, next, jumper" class="mt-15px"/>
    </el-form-item>
  </Dialog>
</template>

<script lang="ts" setup>
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗

const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('导入结果') // 弹窗的标题
const successNum = ref(0) //上传成功数量
const updateNum = ref(0) //更新成功数量
const updateFailNum = ref(0) //更新失败数量
const tableData = ref() //更新失败的数据
/** 打开弹窗 */
const open = async (data: any) => {
  dialogVisible.value = true
  successNum.value = data.createCustomerNames.length;
  updateNum.value = data.updateCustomerNames.length;
  updateFailNum.value = Object.keys(data.failureCustomerNames).length;
  const errorMessages = data.failureCustomerNames;
  tableData.value = Object.keys(errorMessages).map(key => ({
    name: key,
    message: errorMessages[key]
  }));
  console.log(tableData.value)
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗

const currentPage = ref(1);
const pageSize = ref(10);

function handleSizeChange(val) {
  pageSize.value = val;
}

function handleCurrentChange(val) {
  currentPage.value = val;
}

</script>

在这个示例中,tableData 是包含所有数据的数组。currentPage 和 pageSize 分别用于跟踪当前页码和每页显示的条数。handleSizeChange 和 handleCurrentChange 方法用于更新页码和每页条数。

Table 组件的 :data 属性使用计算属性来根据当前页码和每页条数来切片 tableData,以模拟分页效果。el-pagination 组件则用于控制分页的界面和逻辑,并且与 currentPage 和 pageSize 变量进行绑定。这样,用户在界面上进行分页操作时,Table 组件会展示对应页码的数据。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值