分页几种使用方式.md

分页(element-ui)使用方式

  1. 第一种方式(分段数据请求回来)

    • 页面布局(显示)。

      <div class="awrap-content">
         <el-table :data="resPage.data" style="width: 100%" max-height="90vh">
           <el-table-column prop="operationTime" label="操作时间" align="center" sortable>
           </el-table-column>
           <el-table-column prop="userPhone" label="客户手机号" align="center">
           </el-table-column>
           <el-table-column prop="operationName" label="操作名称" align="center">
           </el-table-column>
           <el-table-column prop="operationType" label="操作类型" align="center">
           </el-table-column>
           <el-table-column prop="requestParams" label="请求参数" align="center" show-overflow-tooltip>
           </el-table-column>
           <el-table-column prop="responseData" label="响应结果" align="center" show-overflow-tooltip>
           </el-table-column>
         </el-table>
      </div>
      
    • 后台根据请求的当前页数和一页的数量进行数据处理后返回给前台数据。

      	 // 请求数据
            reqPage: {
              pageNum: 1,
              pageSize: 10
            },
            // 响应数据
            resPage: {
              data: [],
              count: ""
            }
      
    • 前台接受当前页数的数据和所有数据的数量。

      // 请求日志数据
         findAllPage(reqPage) {
           let self = this;
           self
             .axios({
               method: "GET",
               url: "operation/findAllByPage",
               params: reqPage
             })
             .then(function(res) {
               // 接口访问成功后对数据进行处理显示
               if (res.code === 0) {
                 self.resPage.count = res.data.totalCount;
                 self.resPage.data = res.data.data;
               }
             })
             .catch();
      
    • 页面布局(操作)。

      <div class="awrap-footer">
         <div class="left-wrapper">
         	<span>共 {{Math.ceil(resPage.count/10)}} 页</span>
         </div>
         <div class="right-wrapper">
             <span @click="prePage">上一页</span>
             <el-input-number v-model="reqPage.pageNum" @blur="numberPage" :min="1" :max="Math.ceil(resPage.count/10)" :controls="false"></el-input-number>
             <span @click="nextPage">下一页</span>
         </div>
      </div>
      
    • 操作事件

          // 上一页
          prePage() {
            this.reqPage.pageNum--;
            this.findAllPage(this.reqPage);
          },
          // 下一页
          nextPage() {
            this.reqPage.pageNum++;
            this.findAllPage(this.reqPage);
          },
          // 输入页码
          numberPage() {
            this.findAllPage(this.reqPage);
          }
      
    • 筛选页面布局

      <div class="block">
          <div class="filterPhone">
              <el-select v-model="phoneValue" @change="filterPhonePage" @clear="clearPhone" clearable placeholder="筛选客户手机号">
                  <el-option
                  v-for="item in filterPhone"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                  </el-option>
              </el-select>
          </div>
          <div class="filterName">
              <el-select v-model="nameValue" @change="filterNamePage" @clear="clearName" clearable placeholder="筛选操作名称">
                  <el-option
                  v-for="item in filterName"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                  </el-option>
              </el-select>
          </div>
          <div class="filterType">
              <el-select v-model="typeValue" @change="filterTypePage" @clear="clearType" clearable placeholder="筛选操作类型">
                  <el-option
                  v-for="item in filterType"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                  </el-option>
              </el-select>
          </div>
          <span class="demonstration">操作时间</span>
          <el-date-picker v-model="operationDate" type="daterange" align="right" @change="datePage" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
          </el-date-picker>
      </div>
      
    • 筛选数据事件

      // 筛选操作时间事件
         datePage() {
           let isDate =
             this.operationDate == null ||
             !this.operationDate[0] ||
             !this.operationDate[1];
           if (isDate) {
             delete this.reqPage["startTime"];
             delete this.reqPage["endTime"];
             this.findAllPage(this.reqPage);
             this.$message({
               message: "请重新选择时间段",
               type: "warning"
             });
             return;
           }
           let startTime = moment(this.operationDate[0]).format(
             "YYYY-MM-DD HH:mm:ss"
           );
           let endTime = moment(this.operationDate[1]).format("YYYY-MM-DD HH:mm:ss");
           this.reqPage["startTime"] = startTime;
           this.reqPage["endTime"] = endTime;
           this.findAllPage(this.reqPage);
         },
         // 筛选客户手机号事件
         filterPhonePage() {
           this.reqPage["userPhone"] = this.phoneValue;
           this.findAllPage(this.reqPage);
         },
         // 筛选操作名称事件
         filterNamePage() {
           this.reqPage["operationName"] = this.nameValue;
           this.findAllPage(this.reqPage);
         },
         // 筛选操作类型事件
         filterTypePage() {
           this.reqPage["operationType"] = this.typeValue;
           this.findAllPage(this.reqPage);
         },
         // 清除筛选客户手机号事件
         clearPhone() {
           delete this.reqPage["userPhone"];
           this.findAllPage(this.reqPage);
         },
         // 清除筛选操作名称事件
         clearName() {
           delete this.reqPage["operationName"];
           this.findAllPage(this.reqPage);
         },
         // 清除筛选操作类型事件
         clearType() {
           delete this.reqPage["operationType"];
           this.findAllPage(this.reqPage);
         }
      
  2. 第二种方式(全部数据请求回来)

    • 页面布局

         <div class="table_container">
            <el-table
              v-if="tableData.length > 0"
              :data="tableData"
              max-height="450"
              border
              style="width: 100%">
              <el-table-column type="index" label="序号" width="70" align="center">
              </el-table-column>
              <el-table-column prop="date" label="创建时间" width="250" align="center">
                <template slot-scope="scope">
                  <i class="el-icon-time"></i>
                  <span style="margin-left: 10px">{{ scope.row.date }}</span>
                </template>
              </el-table-column>
              <el-table-column prop="type" label="收支类型" width="150" align="center">
              </el-table-column>
              <el-table-column prop="describe" label="收支描述" width="180" align="center">
              </el-table-column>
              <el-table-column prop="income" label="收入" width="170" align="center">
                <template slot-scope="scope">
                  <span style="color:#00d053">+{{ scope.row.income }}</span>
                </template>
              </el-table-column>
              <el-table-column prop="expend" label="支出" width="170" align="center">
                <template slot-scope="scope">
                  <span style="color:#f56767">-{{ scope.row.expend }}</span>
                </template>
              </el-table-column>
              <el-table-column prop="cash" label="账户现金" width="170" align="center">
                <template slot-scope="scope">
                  <span style="color:#4db3ff">{{ scope.row.cash }}</span>
                </template>
              </el-table-column>
              <el-table-column prop="remark" label="备注" width="220" align="center">
              </el-table-column>
              <el-table-column label="操作" v-if="user.identity == 'manager'" prop="operation" width="320" fixed="right" align="center">
                <template slot-scope="scope">
                  <el-button
                    size="small"
                    type="warning"
                    icon="edit"
                    @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
                  <el-button
                    size="small"
                    type="danger"
                    icon="delete"
                    @click="handleDelete(scope.$index, scope.row)">删除</el-button>
                </template>
              </el-table-column>
            </el-table>
            <!-- 分页 -->
            <el-row>
              <el-col :span="24">
                <div class="pagination">
                  <el-pagination
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :current-page.sync="paginations.page_index"
                    :page-sizes="paginations.page_sizes"
                    :page-size="paginations.page_size"
                    :layout="paginations.layout"
                    :total="paginations.total">
                  </el-pagination>
                </div>
              </el-col>
            </el-row>
          </div>
      
    • 数据定义和请求获取

      	  tableData: [], // 最终呈现的数据
            allTableData: [], // 分页过滤的数据
            filterTableData: [], // 筛选过滤的数据
            
            getProfile() {
            // 获取表格数据
            this.$axios({
              method: "GET",
              url: "/api/profiles"
            })
            .then(res => {
              this.allTableData = res.data;
              this.filterTableData = res.data;
              // 设置分页数据
              this.setPaginations();
            })
            .catch(err => console.log(err));
            }
            
            setPaginations() {
            // 分页属性设置
            this.paginations.total = this.allTableData.length;
            this.paginations.page_index = 1;
            this.paginations.page_size = 5;
            // 设置默认的分页数据
            this.tableData = this.allTableData.filter((item, index) => {
              return index < this.paginations.page_size;
            });
           },
            handleSizeChange(page_size) {
            // 切换size,就是每页显示多少条事件
            this.paginations.page_index = 1;
            this.paginations.page_size = page_size;
            // 设置默认的分页数据
            this.tableData = this.allTableData.filter((item, index) => {
              return index < page_size;
            });
          },
          handleCurrentChange(page) {
            // 获取当前页
            let index = this.paginations.page_size * (page - 1);
            // 数据的总数
            let nums = this.paginations.page_size * page;
            // 容器
            let tables = [];
            for (let i = index; i < nums; i++) {
              if (this.allTableData[i]) {
                tables.push(this.allTableData[i]);
              }
              this.tableData = tables;
            }
          }
      
  3. 总结

  • 相比较第二种方式,第一种方式会比较容易,就是各种的操作就调用各种的接口,然后显示。第二种就是自己处理数据显示出来,如果可以我会选择第一种方式,可能要后台配合吧,第二种也可以,可以锻炼自己的逻辑能力吧。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值