• ElementUI如何实现分页查询?html如何实现分页查询?vue如何实现分页查询?


    本文采用的vue+elementUI+axios发送请求+SptingBoot搭建后台

    整体样式:

    一、导入ElementUI组件库,以及VUE.js和axios文件:

    1、导入ElementUI组件库:

    只需要在html标签中写两个导入标签即可:

    1. <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    2. <script src="https://unpkg.com/element-ui/lib/index.js">script>

    2、导入VUE.js和axios文件:

    如果没有的话可以在下面的网盘下载。

     https://pan.baidu.com/s/1seCfwBByh1P9nOCiSjVijQ?pwd=6cq7    提取码: 6cq7

    下载后导入两个js文件:

    1. <script src="page/axios-0.18.0.js">script>
    2. <script src="page/vue.js">script>

    二、在ElementUI官网找到分页组件:

    ElementUI官网地址。

    找到我们要使用的那个组件将HTML部分复制过来。(下面一些注释,自己删除就好)

    1. <el-table
    2. :data="tableData"
    3. style="width: 100%"
    4. :row-class-name="tableRowClassName" //处理颜色的
    5. @selection-change="handleSelectionChange" //处理复选框选中了的元素
    6. >
    7. <el-table-column
    8. type="selection"
    9. >el-table-column>
    10. <el-table-column
    11. align="center"
    12. type="index"
    13. :index="indexMethod" //序号部分,不写这个函数每页都是从1开始的序号
    14. label="序号">
    15. el-table-column>
    16. <el-table-column
    17. align="center"
    18. prop="brandName"
    19. label="品牌名称">
    20. el-table-column>
    21. <el-table-column
    22. align="center"
    23. prop="companyName"
    24. label="公司名称">
    25. el-table-column>
    26. <el-table-column
    27. align="center"
    28. prop="orders"
    29. label="排序">
    30. el-table-column>
    31. <el-table-column
    32. align="center"
    33. prop="statu"
    34. label="当前状态">
    35. el-table-column>
    36. <el-table-column
    37. align="center"
    38. label="操作">
    39. //这两个功能暂未实现
    40. <el-button type="primary">修改el-button>
    41. <el-button type="danger">删除el-button>
    42. el-table-column>
    43. el-table>

    三、VUEjs部分:

    注意:

    1、每次点击每页显示多少条要进行一次列表更新

    2、点击页码时要进行一次页码更新

    1. new Vue({
    2. el: "#app",
    3. //页面加载完成之后执行的逻辑
    4. mounted() {
    5. //初始化第一个页面的数据
    6. this.updateCurrentData(1, this.currentSize)
    7. },
    8. methods: {
    9. //(el自带函数)
    10. tableRowClassName({row, rowIndex}) {
    11. if (rowIndex === 1) {
    12. return 'warning-row';
    13. } else if (rowIndex === 3) {
    14. return 'success-row';
    15. }
    16. return '';
    17. },
    18. //复选框选中之后执行的逻辑
    19. handleSelectionChange(val) {
    20. this.multipleSelection = val;
    21. },
    22. //更新当前页码的数据: 向后台获取数据的逻辑
    23. updateCurrentData(start, length) {
    24. let that = this;
    25. let data = {
    26. status: this.searchForm.status === "启用" ? 1 : this.searchForm.status === "禁用"?0:'',
    27. companyName: this.searchForm.companyName,
    28. brandName: this.searchForm.brandName,
    29. start:start,
    30. size:length
    31. }
    32. axios({
    33. method: "POST",
    34. url: 'http://127.0.0.1:8080/study/vueElement/searchInfo',
    35. data:data
    36. }).then(function (resp) {
    37. that.tableData = resp.data.pageData.form; //将返回的表单数据赋值
    38. that.totalSize = resp.data.pageData.size;
    39. })
    40. },
    41. //每页显示多少条数据
    42. handleSizeChange(val) {
    43. this.currentSize = val;
    44. this.updateCurrentData(this.currentPage, this.currentSize);
    45. },
    46. //当前在第几页
    47. handleCurrentChange(val) {
    48. this.currentPage = val;
    49. this.updateCurrentData(this.currentPage, this.currentSize);
    50. },
    51. //更新每一页的序号索引
    52. indexMethod(index) {
    53. return (this.currentPage - 1) * this.currentSize + index + 1;
    54. },
    55. },
    56. data() {
    57. return {
    58. //搜索的表单
    59. searchForm: {
    60. status: '',
    61. companyName: '',
    62. brandName: '',
    63. start:1,
    64. size:5
    65. },
    66. multipleSelection: [],//多选框选了什么
    67. currentPage: 1,//当前页码
    68. currentSize: 5,//默认每页展示5条数据
    69. totalSize: 0,//共多少条信息
    70. tableData: [] //当前页的表单数据
    71. }
    72. }
    73. }

    四)后台SpringBoot:

    1、分页查询时前端传来的是start和size,写SQL时候start要进行一次修改,start=(start-1)*size

    controller类:

    1. @RestController
    2. @RequestMapping("/vueElement")
    3. @Tag(name = "vue-element学习")
    4. @CrossOrigin()//加上这个注解。否则前台发送请求之后无法访问
    5. public class VueElement {
    6. @Autowired
    7. private vueElementImpl vueElementService;
    8. @PostMapping("/searchInfo")
    9. @Operation(summary = "条件查询")
    10. public R searchInfo(@RequestBody searchForm form){
    11. pageReturn list = vueElementService.searchInfo(form);
    12. return new R().put("pageData",list);
    13. }
    14. }

    service类:

    1. @Override
    2. public pageReturn searchInfo(searchForm form) {
    3. //处理分页数据:
    4. form.setStart((form.getStart()-1)*form.getSize());
    5. //设置模糊查询字符串
    6. if(form.getBrandName()!="" && form.getBrandName()!=null)
    7. form.setBrandName("%"+form.getBrandName()+"%");
    8. if(form.getCompanyName()!="" && form.getCompanyName()!=null)
    9. form.setCompanyName("%"+form.getCompanyName()+"%");
    10. ArrayList list = brandDao.searchInfo(form.getBrandName(),form.getCompanyName(),form.getStatus(),form.getStart(),form.getSize());
    11. Long cnt = brandDao.searchCondationCnt(form.getBrandName(),form.getCompanyName(),form.getStatus());
    12. pageReturn page = new pageReturn();
    13. page.setSize(cnt);
    14. page.setForm(list);
    15. return page;
    16. }

    MyBatis部分:

    1. <select id="searchInfo" resultType="java.util.HashMap">
    2. select
    3. b.id,
    4. b.brand_name as brandName,
    5. b.company_name as companyName,
    6. b.ordered as orders,
    7. if(b.status = 1, "启用", "禁用") as statu
    8. from tb_brand b
    9. <where>
    10. <if test="brandName!=null and brandName!=''">
    11. and b.brand_name like #{brandName}
    12. if>
    13. <if test="companyName!=null and companyName!=''">
    14. and b.company_name like #{companyName}
    15. if>
    16. <if test="status!=null">
    17. and b.status = #{status}
    18. if>
    19. where>
    20. limit #{start},#{size};
    21. select>
    22. <select id="searchCondationCnt" resultType="java.lang.Long">
    23. select count(*)
    24. from tb_brand b
    25. <where>
    26. <if test="brandName!=null and brandName!=''">
    27. and b.brand_name like #{brandName}
    28. if>
    29. <if test="companyName!=null and companyName!=''">
    30. and b.company_name like #{companyName}
    31. if>
    32. <if test="status!=null">
    33. and b.status = #{status}
    34. if>
    35. where>
    36. select>

  • 相关阅读:
    Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第5章 Vue.js组件 5.3 动画组件 && 5.4 组件传值
    StarRocks实战——欢聚集团极速的数据分析能力
    4、SpringBoot_Mybatis、Druid、Juint整合
    公开课|“技术+法律”隐私计算如何助力数据合规
    并查集的学习
    园子开店记-周边第一款:收到鼠标垫样品(新增另外3款照片)
    前端基础建设与架构17 学习 axios:封装一个结构清晰的 Fetch 库
    java毕业设计导师交流系统Mybatis+系统+数据库+调试部署
    2023电赛E题视觉部分
    安装部署ELK收集nginx日志
  • 原文地址:https://blog.csdn.net/weixin_60414376/article/details/126119122