Vue3+ElementPlus纯前端分页(手撕分页),无需修改后端

前提:先把pagination安装上先

1、在script中加上

        

// 实现分页
const currentPage = ref(1);
const pageSize = ref(10);
const totalItems = computed(() => tableData.value.length);
const paginatedData = computed(() => {const start = (currentPage.value - 1) * pageSize.value;const end = start + pageSize.value;return tableData.value.slice(start, end);
});const handleCurrentChange = (newPage) => {currentPage.value = newPage;
};const handleSizeChange = (newSize) => {pageSize.value = newSize;
};

2.如果有查询的,调用查询后重置页码

currentPage.value = 1; // 重置页码

3.<el-table>中的数据由原本的tableData更换为分页处理后的:paginatedData

4.紧接着<el-table>标签下面加上el-pagination

<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange":current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" :total="totalItems"></el-pagination>

修改前和修改后对比

修改前:

<template><el-card class="box-card"><el-row><el-col :span="5"><el-input v-model="searchVal" placeholder="请输入需要查询内容" @change="Search" /></el-col><el-col :span="12"><el-button :disabled="!Sagency" type="primary" @click="Search">查询</el-button><el-button :disabled="!Iagency" @click="open" type="primary">新增</el-button><el-button type="primary" @click="handleExport">导出Excel</el-button></el-col></el-row><br><el-row><el-col><el-table :data="tableData" style="width: 100%;height: 65vh;" border ref="tb"><el-table-column type="selection" width="55" /><el-table-column prop="Ano" label="编号" width="150" /><el-table-column prop="Aname" label="姓名" width="150" /><el-table-column prop="Asex" label="性别" width="150" /><el-table-column prop="Aphone" label="电话" width="150" /><el-table-column prop="Aremark" label="备注" width="190" /><el-table-column label="操作" align="center"><template #default="scope"><!-- 将这一行的数据都传出去 --><el-button :disabled="!Fagency" size="small" @click="handleEdit(scope.$index, scope.row)">修改</el-button><el-button :disabled="!Dagency" size="small" type="danger"@click="handleDelete(scope.$index, scope.row)">删除</el-button></template></el-table-column></el-table><!-- <el-pagination style="margin-top: 10px;" background layout="prev, pager, next" :total="total" /> --><!-- <el-pagination style="margin-top: 10px;" background layout="prev, pager, next" :total="pageSize"@current-change="handlePageChange" /> --><el-pagination style="margin-top: 10px;" background layout="prev, pager, next" :total="total":current-page="parms.PageIndex" :page-size="pageSize" @current-change="handlePageChange" /></el-col></el-row><add :isShow="isShow" :info="info" @closeAdd="closeAdd" @success="success"></add></el-card>
</template>
<script lang="ts" setup>
import { ElMessage, ElTable } from 'element-plus';
import { onMounted, Ref, ref, toRefs } from 'vue';
import Agency from '../../../class/Agency';
import { delAgency, getAgency } from '../../../http';
import add from './add.vue';
import useStore from '../../../store';
import { exportToExcel } from '../../../tool/report'const store = useStore()
const total = ref(10)
const parms = ref({Id: 0,Ano: "",Aname: "",Asex: "",Aphone: "",Aremark: "",PageIndex: 2,PageSize: 10
})// -------------------- 载入数据 --------------------
const tableData: Ref<Array<Agency>> = ref<Array<Agency>>([])
const load = async () => {console.log("load中:" + parms.value.Aname)let res = await getAgency(parms.value) as any// console.log("查询结果:" + res as Array<Agency>)tableData.value = res as Array<Agency>
}
// 查询
const searchVal = ref("")
const Search = async () => {parms.value.Aname = searchVal.value// console.log("parms.value.Aname:" + parms.value.Aname)await load()
}onMounted(async () => {await load()
})// -------------------- 新增、修改、删除逻辑 Start --------------------
const isShow = ref(false)
const open = () => {isShow.value = true
}
const closeAdd = () => {isShow.value = falseinfo.value = new Agency()
}
const info: Ref<Agency> = ref<Agency>(new Agency());    //响应式对象
const handleEdit = (index: number, row: Agency) => {info.value = rowindex ++isShow.value = true
}
const success = async (message: string) => {isShow.value = falseinfo.value = new Agency()ElMessage.success(message)await load()
}
const handleDelete = async (index: number, row: Agency) => {await delAgency(row.Id)index ++await load()
}const tb = ref<InstanceType<typeof ElTable>>()// -------------------- 设置分页 ----------------------
const pageSize = ref(10); // Number of records to display per page// Handle page change
const handlePageChange = async (page: number) => {// parms.PageIndex = page;page ++;// page = 10;await load();
};const { Permission } = toRefs(store);
const Dagency = ref(Permission.value.Dagency);
const Fagency = ref(Permission.value.Fagency);
const Iagency = ref(Permission.value.Iagency);
const Sagency = ref(Permission.value.Sagency);// Excel
const handleExport = () => {const columnHeaders = ['经办人编号', '姓名', '性别', '电话', '备注'];exportToExcel(tableData.value, '经办人信息', columnHeaders);
};</script>

修改后:

<template><el-card class="box-card"><el-row><el-col :span="5"><el-input v-model="searchVal" placeholder="请输入需要查询内容" @change="Search" /></el-col><el-col :span="12"><el-button :disabled="!Sagency" type="primary" @click="Search">查询</el-button><el-button :disabled="!Iagency" @click="open" type="primary">新增</el-button><el-button type="primary" @click="handleExport">导出Excel</el-button></el-col></el-row><br><el-row><el-col><el-table :data="paginatedData" style="width: 100%;height: 65vh;" border ref="tb"><el-table-column type="selection" width="55" /><el-table-column prop="Ano" label="编号" width="150" /><el-table-column prop="Aname" label="姓名" width="150" /><el-table-column prop="Asex" label="性别" width="150" /><el-table-column prop="Aphone" label="电话" width="150" /><el-table-column prop="Aremark" label="备注" width="190" /><el-table-column label="操作" align="center"><template #default="scope"><!-- 将这一行的数据都传出去 --><el-button :disabled="!Fagency" size="small" @click="handleEdit(scope.$index, scope.row)">修改</el-button><el-button :disabled="!Dagency" size="small" type="danger"@click="handleDelete(scope.$index, scope.row)">删除</el-button></template></el-table-column></el-table><el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange":current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" :total="totalItems"></el-pagination></el-col></el-row><add :isShow="isShow" :info="info" @closeAdd="closeAdd" @success="success"></add></el-card>
</template>
<script lang="ts" setup>
import { ElMessage, ElTable } from 'element-plus';
import { onMounted, Ref, ref, toRefs } from 'vue';
import Agency from '../../../class/Agency';
import { delAgency, getAgency } from '../../../http';
import add from './add.vue';
import useStore from '../../../store';
import { exportToExcel } from '../../../tool/report'
import { computed } from 'vue';
const store = useStore()
const total = ref(10)
const parms = ref({Id: 0,Ano: "",Aname: "",Asex: "",Aphone: "",Aremark: "",PageIndex: 2,PageSize: 10
})// -------------------- 载入数据 --------------------
const tableData: Ref<Array<Agency>> = ref<Array<Agency>>([])
const load = async () => {console.log("load中:" + parms.value.Aname)let res = await getAgency(parms.value) as any// console.log("查询结果:" + res as Array<Agency>)tableData.value = res as Array<Agency>
}
// 查询
const searchVal = ref("")
const Search = async () => {parms.value.Aname = searchVal.value// console.log("parms.value.Aname:" + parms.value.Aname)await load()currentPage.value = 1; // 重置页码
}onMounted(async () => {await load()
})// -------------------- 新增、修改、删除逻辑 Start --------------------
const isShow = ref(false)
const open = () => {isShow.value = true
}
const closeAdd = () => {isShow.value = falseinfo.value = new Agency()
}
const info: Ref<Agency> = ref<Agency>(new Agency());    //响应式对象
const handleEdit = (index: number, row: Agency) => {info.value = rowindex ++isShow.value = true
}
const success = async (message: string) => {isShow.value = falseinfo.value = new Agency()ElMessage.success(message)await load()
}
const handleDelete = async (index: number, row: Agency) => {await delAgency(row.Id)index ++await load()
}const tb = ref<InstanceType<typeof ElTable>>()const { Permission } = toRefs(store);
const Dagency = ref(Permission.value.Dagency);
const Fagency = ref(Permission.value.Fagency);
const Iagency = ref(Permission.value.Iagency);
const Sagency = ref(Permission.value.Sagency);// Excel
const handleExport = () => {const columnHeaders = ['编号', '姓名', '性别', '电话', '备注'];exportToExcel(tableData.value, '经办人信息', columnHeaders);
};// 实现分页
const currentPage = ref(1);
const pageSize = ref(10);
const totalItems = computed(() => tableData.value.length);
const paginatedData = computed(() => {const start = (currentPage.value - 1) * pageSize.value;const end = start + pageSize.value;return tableData.value.slice(start, end);
});const handleCurrentChange = (newPage) => {currentPage.value = newPage;
};const handleSizeChange = (newSize) => {pageSize.value = newSize;
};</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

想做副业在哪里找?做好这些副业平台就够了

每个人在生活中都有一些额外的需求和理想&#xff0c;所以越来越多的人开始寻找副业来实现小目标。但是&#xff0c;但是寻找副业的过程并不容易&#xff0c;需要考虑到自己的时间和能力&#xff0c;还有选择一个靠谱的平台。其实&#xff0c;副业平台并不太难&#xff0c;只要…

2024年全网最全的Jmeter+ant+jenkins实现持续集成教程

jmeterantjenkins持续集成 一、下载并配置jmeter 首先下载jmeter工具&#xff0c;并配置好环境变量&#xff1b;参考&#xff1a;https://www.cnblogs.com/YouJeffrey/p/16029894.html jmeter默认保存的是.jtl格式的文件&#xff0c;要设置一下bin/jmeter.properties,文件内容…

八股文-TCP的四次挥手

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;它的连接的建立和关闭过程都是经过精心设计的。在TCP连接关闭时&#xff0c;使用四次挥手来保证数据的完整传输和连接的正常终止。 漫画TCP的四次挥手 第一次挥手&#…

Linux下快速确定目标服务器支持哪些协议和密码套件

实现原理是利用TLS协议的特点和握手过程来进行测试和解析响应来确定目标服务器支持哪些TLS协议和密码套件。 在TLS握手过程中&#xff0c;客户端和服务器会协商并使用相同的TLS协议版本和密码套件来进行通信。通过发送特定的握手请求并分析响应&#xff0c;可以确定目标服务器…

财报中连创佳绩,饿了么做对了什么?

双十一刚刚过去&#xff0c;相较于往年定时网购、等待收货的固定流程&#xff0c;这两年&#xff0c;越来越多的消费者开始通过“外卖”形式参与这场消费狂欢&#xff1a;从下单到收货&#xff0c;只有30分钟的等待。而伴随消费者收获越来越多的便利&#xff0c;即时电商业态也…

Vue3 使用教程

目录 一、创建vue3工程1. 使用vue-cli创建2.使用 vite 创建 二、setup使用三、ref函数四、reactive函数五、计算属性与监视属性5.1 computed函数5.2 watch函数5.3 watchEffect函数 六、自定义hook函数七、toRef函数八、shallowReactive 与 shallowRef九、readonly 与 shallowRe…

nodejs你应该知道的13个库 | Sequelize CORS Nodemailer Async Lodash Axios

1. Sequelize Sequelize 是一种基于 promise 的 Node.js 对象关系映射器 &#xff08;ORM&#xff09; 使用&#xff0c;它使开发人员更容易使用关系数据库。 2. CORS CORS 是一个 Node.js 包&#xff0c;它使用 Connect/Express 提供跨域资源共享 &#xff08;CORS&#xff…

Netty源码学习4——服务端是处理新连接的netty的reactor模式

零丶引入 在前面的源码学习中&#xff0c;梳理了服务端的启动&#xff0c;以及NioEventLoop事件循环的工作流程&#xff0c;并了解了Netty处理网络io重要的Channel &#xff0c;ChannelHandler&#xff0c;ChannelPipeline。 这一篇将学习服务端是如何构建新的连接。 一丶网络包…

企业spark案例 —— 出租车轨迹分析(Python)

第1关&#xff1a;SparkSql 数据清洗 # -*- coding: UTF-8 -*- from pyspark.sql import SparkSession if __name__ __main__:spark SparkSession.builder.appName("demo").master("local").getOrCreate()#**********begin**********#df spark.read.opt…

开发知识点-uniapp微信小程序-开发指南

uniapp Vue的原型链生命周期函数onLoaduni.chooseLocationgetCurrentPages美团外卖微信小程序开发uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端&#xff0c;学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样…

flink的window和windowAll的区别

背景 在flink的窗口函数运用中&#xff0c;window和windowAll方法总是会引起混淆&#xff0c;特别是结合上GlobalWindow的组合时&#xff0c;更是如此&#xff0c;本文就来梳理下他们的区别和常见用法 window和windowAll的区别 window是KeyStream数据流的方法&#xff0c;其…

【运维篇】Redis常见运维命令详解

文章目录 1. 前言2. 连接管理命令详解2.1 AUTH命令2.2 PING命令2.3 SELECT命令2.4 QUIT命令 3. 服务器管理命令详解3.1 FLUSHALL命令3.2 SAVE/BGSAVE命令3.3 SHUTDOWN命令 4. 安全管理命令详解4.1 CONFIG命令4.1.1 CONFIG SET命令用法4.1.2 CONFIG GET命令用法 4.2 AUTH命令 5.…

QT多线程项目中子线程无法修改主线程的ui组件

情况描述 今天我创建了一个QT多线程的工程&#xff0c;框架如下。我希望通过指针的方式&#xff0c;让子线程去直接修改主线程的ui组件&#xff0c;但事与愿违。 class ChildThread : public QThread {Q_OBJECT public:ChildThread (MainThread* par):m_Par(par){}; protecte…

什么是美颜SDK?直播美颜SDK技术深度剖析

在实现实时美颜的过程中&#xff0c;美颜SDK扮演着关键的角色&#xff0c;它为开发者提供了一套强大的工具&#xff0c;使得实时美颜效果能够轻松应用于直播平台。 一、美颜SDK的基本概念 美颜SDK是一种软件工具包&#xff0c;通过集成了丰富的图像处理算法和实时计算技术&a…

mysql使用--子查询

1.标量子查询 将一个查询结果集中只含一行&#xff0c;行中只有一列的结果集称为标量结果集。 标量结果集可以作为数值参与到另一个查询中。 如&#xff1a;SELECT * FROM student_score WHERE number (SELECT number FROM student_info WHERE name ‘狗哥’); 2.列子查询 将…

springboot使用MongoTemplate根据正则表达式查询日期数据

一、日期正则表达式测试 匹配HH:mm:ss正则表达式写法有很多列举两个 .(点)代表任意匹配 ^必须以xxx开头, 如^[a-z],必须以a-z的字母开头 : 精确匹配,必须是: ([0-1]?[0-9]|2[0-3]).([0-5][0-9]).([0-5][0-9]) ^([0-1]?[0-9]|2[0-3]).([0-5][0-9]).([0-5][0-9])$ ([0-1]?…

MIUI查看当前手机电池容量

MIUI查看当前手机电池容量 1. 按如下步骤操作生成bug报告 2. 按如下操作解压bug报告 Last learned battery capacity

BLE协议栈入门学习

蓝牙LE栈 物理层 频带 蓝牙LE在2400MHz到2483.5MHz范围内的2.4GHz免授权频段工作&#xff0c;该频段分为40个信道&#xff0c;每个信道间隔为2MHz。 时分 蓝牙LE是半双工的&#xff0c;可以发送和接收&#xff0c;但不能同时发送和接收&#xff0c;然而&#xff0c;所有的设…

产品经理必须知道的电商API接口对接流程注意事项

接口对接流程梳理 产品经理 知晓自己负责系统做什么&#xff0c;外接三方系统做什么。 系统对接产品经理实操步骤&#xff1a; ①与公司业务人员沟通&#xff0c;与系统对接方产品/技术描述业务场景&#xff0c;沟通发放接口文档材料 ②拿到材料之后电商API接口过多请对方…

牛客剑指offer刷题动态规划篇

文章目录 连续子数组的最大和题目思路代码实现 连续子数组的最大和(二)题目思路代码实现 连续子数组的最大和 题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组…