欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue+vant 实现上拉加载 下拉刷新

程序员文章站 2024-03-23 23:16:22
...

先上js

// 页面首次加载数据列表
    getlist() {
      this.loading = true;
      this.apiGet("/order/order_list", {
        params: {
          order_status: Number(this.order_status),
          page: this.pagenum
        }
      }).then(res => {
        this.loading = false; // 加载状态结束
        this.total = res.data.count;
        this.list=this.list.concat(res.data.data)
        console.log('*页面首次加载数据列表*',this.list);
        this.refreshing = false;
        this.pagenum += 1;
      });
    },
    // 下拉刷新
    onRefresh() {
      console.log('触发下拉刷新');
      setTimeout(()=>{
      if(this.refreshing ){
          this.list = this.list;
          this.refreshing = false;
      }
       this.loading = false;
      },1000)
    },
    // 上拉加载
    onLoad() {
      console.log('触发上拉加载');
      this.loading = true;
      setTimeout(() => {
         this.order_status= 1;
      if(this.list.length<this.total ){
        this.getlist();
        this.loading = false;
      }else{
        this.loading = false;
        this.finished = true;
      }
      }, 1000);
    },

Html

      <van-tab title="全部订单" name="null">
        <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
          <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
            <van-cell v-for="(item , index ) in list" :key="index">
              <van-row type="flex" justify="space-between" class="box">
                <van-col span="9" style="margin-right:15px;height:70%" @click="active">
                  <van-image :src="item.activity_img" style="height: 100%;"></van-image>
                </van-col>
                <van-col span="16" class="right">
                  <div @click="details(item.order_id)">
                    <div style="flex-direction: column; justify-content: space-between;">
                      <h5>{{item.body}}</h5>
                      <div style="float: right;">
                        <span>{{item.price}}</span>
                        <span style="display:flex; margin-top:-10px;margin-left:40px">x{{item.sum}}</span>
                      </div>
                    </div>
                    <div>
                      <span>活动时间</span>
                      <h6>{{item.use_end_time | formatTime }}</h6>
                      <h6>{{item.use_start_time | formatTime}}</h6>
                    </div>
                    <div class="address">
                      <span
                        style="font-size: 10px"
                      >{{item.county_name}}{{item.address}}{{item.county_name}}{{item.address}}</span>
                    </div>
                    <div
                      style="margin-top:-6px;display:flex;float:right;font-size: 11px;"
                    >总价¥{{item.total_fee}}</div>
                  </div>
                  <div style="margin-top:10px">
                    <div class="btn" style="float:left" @click="refunds(item.order_id)">
                      <span>退款</span>
                    </div>
                    <div class="btn" style="margin-left:60px" @click="code">
                      <span>二维码</span>
                    </div>
                  </div>
                </van-col>
              </van-row>
            </van-cell>
          </van-list>
        </van-pull-refresh>
      </van-tab>

data数据

import IsEmpty from "@/components/include/empty/";
import { Toast } from "vant";
import { formatDateTime } from "../utils/date";
export default {

  data() {
    return {
      // 图
      fang: require("../assets/qita/fang.png"),
      // 视频图片
      // sp:require("../assets/qita/img.png"),
      order_status: 1, //标签默认
      pagenum: 1, //当前页数
      total: null, //总条数
      list: [],
      order_id: "", //活动id
      loading: false, //是否处于加载状态
      finished: false, //是否已加载完成
      refreshing: false //加载完成后的提示文案
    };
  },

时间转换

  // 时间转化
  filters: {
    formatTime(time) {
      if (time == null || time === "") {
        return "N/A";
      }
      return formatDateTime(time, "yyyy-MM-dd hh:mm:ss");
    }
  },
相关标签: vue