zoukankan      html  css  js  c++  java
  • vant2.0 列表上拉下拉加载(普通 or 带搜索条件)

    vant2.0 列表上拉下拉加载(普通)

    <!--
     * @Description: 首页
     * @Version: 2.0
     * @Autor: lhl
     * @Date: 2021-08-21 20:22:30
     * @LastEditors: lhl
     * @LastEditTime: 2021-08-22 15:20:36
    -->
    <template>
      <div class="home-box">
        <div class="top-box">
          sss
        </div>
        <div :style="{ height: divH }" class="scorll-wrap">
          <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
            <van-list
              v-model="loading"
              :finished="finished"
              finished-text="没有更多了"
              loading-text="loading...."
              :immediate-check="false"
              @load="onLoad"
              :offset="offset"
            >
              <template v-for="(item, index) in list">
                <div class="list-box" :key="index">
                  <div class="item">
                    <div class="left">
                      <p>{{ item.content }}</p>
                      <p>{{ item.meetingType }}</p>
                    </div>
                    <div class="right">
                      <p>{{ item.name }}</p>
                      <p>{{ item.openTime }}</p>
                    </div>
                  </div>
                </div>
              </template>
            </van-list>
          </van-pull-refresh>
        </div>
      </div>
    </template>
    
    <script>
    import { getMeetList } from "@/api";
    export default {
      data() {
        return {
          divH: "500px",
          list: [],
          loading: true,
          finished: false, // 是否已加载完成,加载完成后不再触发load事件
          refreshing: false,
          totol: 0, // 总条数
          pageCount: 0, // 总页数
          offset: 10, // 滚动条与底部距离小于 offset 时触发load事件
          pageData: {
            pageNo: 0,
            pageSize: 10,
          },
        };
      },
      created() {
        this.getMeetList();
      },
      mounted() {
        let h =
          window.innerHeight ||
          document.documentElement.clientHeight ||
          document.body.clientHeight; //浏览器高度
        this.divH = h - 46 - 37.5 - 50 + "px";
      },
      methods: {
        onLoad() {
          this.pageData.pageNo++;
          this.getMeetList();
        },
        // 刷新
        onRefresh() {
          this.list = []; // 清空数据
          this.pageData.pageNo = 0; // 重置页码
          this.finished = false;
          // 将 loading 设置为 true,表示处于加载状态
          this.loading = true;
          this.getMeetList();
        },
        getMeetList() {
          getMeetList(this.pageData).then((res) => {
            const resData = res.data.returnData;
            const pageList = resData.data;
            this.total = resData.recordCount; // 总条数
            this.loading = false;
            this.refreshing = false;
    
            if (pageList == null || pageList.length === 0) {
              // 加载结束
              this.finished = true;
              return;
            }
    
            // 将新数据与老数据进行合并
            this.list = this.list.concat(pageList);
    
            //如果列表数据条数>=总条数,不再触发滚动加载
            if (this.list.length >= this.total) {
              this.finished = true;
            }
          });
        },
      },
    };
    </script>
    
    <style lang="less">
    .scorll-wrap {
      overflow: scroll;
    }
    .home-box {
      .top-box {
        height: 100px;
        line-height: 100px;
        background: #ccc;
      }
      .list-box {
        padding: 0 20px;
        .item {
          background: #f5f5f5;
          margin: 30px 0;
          display: flex;
          justify-content: space-between;
          border-radius: 10px;
          padding: 20px;
          font-size: 36px;
        }
      }
    }
    </style>

     vant2.0 列表上拉下拉加载(带搜索条件的)

    <template>
      <div class="list-wrap">
        <!-- scroll-list 高度的话两个方案一个是计算动态高度 一个是flex布局 -->
          <div class="scroll-list">
            <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
              <van-list
                v-model="loading"
                :finished="finished"
                :loading-text="$t('loadingtxt') || 'Loading...'"
                :finished-text="finished && noMore ? $t('nodatatxt') || 'No More...' : ''"
                :offset="pageSize"
                @load="onLoad"
              >
                <div
                  v-for="item in list"
                  :key="item.id"
                  class="item-box"
                >
                  <div class="left-box">
                    <p class="left-top-text">
                      {{ item.id }}
                    </p>
                    <p class="left-bottom-text pdt8">
                      {{ item.cardNumber }}
                    </p>
                  </div>
                </div>
                <!-- 没有数据时候展示 -->
                <div
                  v-if="!loading && !list.length"
                  class="no-data-box"
                >
                  <img src="~/assets/images/content/nodata.png"/>
                  <p class="no-data-text">
                    No Data
                  </p>
                </div>
              </van-list>
            </van-pull-refresh>
          </div>
      </div>
    </template>
    <script>
    import API from 'API'
    export default {
      name: 'scorll',
      data () {
        return {
          // 上拉下拉列表相关
          loading: false, // 一开始 loading
          finished: false, // 是否已加载完成,加载完成后不再触发load事件
          refreshing: false,
          // 数据源
          list: [],
          // 当前页
          pageNumber: 1,
          // 一页有多少条
          pageSize: 20, // 滚动条与底部距离小于 offset 时触发load事件
          noMore: true // 是否显示 no more / no data
        }
      },
      methods: {
        // 上拉加载
        onLoad () {
          const data = {
            k2ID: 'XXX',
            pageNumber: this.pageNumber,
            pageSize: this.pageSize
          }
          API.getList(data)
            .then((res) => {
              // 刷新状态
              if (this.refreshing) {
                this.list = []
                this.refreshing = false
              }
    
              // 成功
              const { success, dataObj, message } = res
    
              if (success && dataObj && dataObj.list) {
                const { list, total } = dataObj
    
                // 是否显示 no more / no data
                if (this.pageNumber === 1 && list.length === 0) {
                  this.noMore = false
                } else {
                  this.noMore = true
                }
    
                // 数据处理
                const newList = list.map((item) => {
                  return {
                    ...item,
                    cardNumber: `*** **** **** ${item.cardNumber}`
                  }
                })
    
                // 合并数据
                this.list = [...this.list, ...newList]
    
                this.pageNumber++ // 分页追加
                this.loading = false // 加载状态结束
    
                // 判断是否还有下一页
                if (list.length < this.pageSize || total / this.pageSize <= this.pageNumber) {
                  this.finished = true
                }
              } else {
                // 失败
                message && this.$toast(message)
                this.loadError()
              }
            })
            .catch((e) => {
              this.$toast(e.message)
              this.loadError()
            })
        },
    
        // 列表加载 error
        loadError () {
          this.loading = false // 加载状态结束
          if (this.pageNumber === 1) {
            // 不影响后面继续加载,只有第一页加载抱错的时候直接结束
            this.finished = true // 加载状态结束
          }
          // 是否显示no more / no data
          if (this.pageNumber === 1 && this.list.length === 0) {
            this.noMore = false
          } else {
            this.noMore = true
          }
          // 刷新状态, 这里list不做清空处理
          this.refreshing = false
        },
    
        // 下拉刷新
        onRefresh () {
          // 清空列表数据
          this.pageNumber = 1
          this.finished = false
          this.loading = true
          this.onLoad()
        },
        // 查询回调
        handleSearch () {
          this.list = []
          this.pageNumber = 1
          this.onRefresh()
        }
      }
    }
    </script>
    
    <style lang="less" scoped></style>
  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/lhl66/p/15172381.html
Copyright © 2011-2022 走看看