vue 后台返回列表H5点击按钮加载更多分页数据与van-tab记住选中状态

news2024/11/29 12:34:15

效果图(点击更多订单加载,一次加载10条):

<template>
  <div id="order" class="wap-el page-container wap-com-page">
    <section>
      <com-header></com-header>
    </section>
    <div class="com-top-blue-bg">
      <div class="com-top-blue-bg-cont"></div>
    </div>
    <div class="order-box">
      <div class="com-title-box">
        <!-- 返回按钮 -->
        <div class="wap-page-return" @click="$router.go(-1)"></div>
        <div class="com-page-title">我的订单</div>
      </div>
      <van-tabs v-model="activeStatus" @change="changeTab" animated>
        <van-tab
          v-for="item in orderTitle"
          :key="item.orderStatus"
          :title="item.name"
        >
          <div class="order-cont" v-show="isData">
            <div
              class="order-tab-content"
              v-for="(item1, index1) in list"
              :key="index1"
              @click="goDetail(item1)"
            >
              <div class="order-tab-box">
                <div class="order-tab-title-box">
                  <div class="order-tab-title flex-center-start">
                    <img
                      class="order-tab-title-img"
                      :src="item1.toolApplicationIcon"
                      alt=""
                    />
                    <div class="order-tab-title-text">
                      {{ item1.toolApplicationName }}
                    </div>
                  </div>
                  <div class="order-status-box">
                    <div
                      class="order-status 1"
                      :class="`order-status${item1.orderStatus == 1 ? 1 : 0}`"
                    >
                      {{ orderStatusVal[item1.orderStatus] }}
                    </div>
                  </div>
                </div>
                <div class="order-tab-item-box">
                  <div class="order-tab-item flex-center-between">
                    <div class="order-tab-item-name">订单总金额</div>
                    <div class="order-tab-item-cont">
                      {{ item1.totalPrice }}
                    </div>
                  </div>
                  <div class="order-tab-item flex-center-between">
                    <div class="order-tab-item-name">实付金额</div>
                    <div class="order-tab-item-cont">{{ item1.realPrice }}</div>
                  </div>
                  <div class="order-tab-item flex-center-between">
                    <div class="order-tab-item-name">下单时间</div>
                    <div class="order-tab-item-cont">
                      {{ item1.createDate }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <div class="flex-center-center" v-if="list.length < total">
              <div class="more-order flex-center-center" @click="moreOrder">
                <span>更多订单</span>
                <img
                  class="blue-double-right-arrow"
                  :src="`${NEW_ASSET_IMG}/common/blue_double_right_arrow.png`"
                  alt=""
                />
              </div>
            </div>
          </div>
          <!-- 无订单 -->
          <div
            class="wap-not-data-box flex-column-center-center"
            v-show="!isData"
          >
            <img
              class="wap-not-data-img"
              :src="`${NEW_ASSET_IMG}/common/wap_not_data.png`"
            />
            <p class="wap-not-data-text">暂无订单</p>
          </div>
        </van-tab>
      </van-tabs>
    </div>
  </div>
</template>

<script>
export default {
  name: "order",
  components: {
    "com-header": () => import("@/components/common/com-header"),
  },
  data() {
    return {
      page: 1,
      pageSize: 10,
      total: "", //页总数
      nav_index: 0,
      activeStatus: this.$route.query.orderStatus
        ? Number(this.$route.query.orderStatus)
        : "", //订单状态(-3 已退款-2 退款申请中-1:已取消 0:待支付 1:已支付)
      orderStatus: "",
      orderStatusVal: {
        "-3": "已退款",
        "-2": "退款申请中",
        "-1": "已取消",
        0: "待支付",
        1: "已支付",
      }, //订单状态
      orderTitle: [
        { orderStatus: "", name: "全部" }, //status自定义
        { orderStatus: "1", name: "已支付" },
        { orderStatus: "0", name: "待支付" },
        { orderStatus: "-2", name: "退款申请中" },
        { orderStatus: "-3", name: "已退款" },
        { orderStatus: "-1", name: "已取消" },
      ],
      list: [], //订单数据
      isData: true, //是否有数据
    };
  },
  computed: {},
  watch: {},
  methods: {
    getOrderList(isMore) {
      const params = `?page=${this.page}&pageSize=${this.pageSize}&orderStatus=${this.orderStatus}`;
      this.$orderAPI.getOrders(params).then(({ code, msg, data }) => {
        if (code) {
          this.$message.warning(msg);
          return;
        }
        this.total = Number(data.pageNumVO.total);
        if (isMore) {
           //isMore==1为点击更多
          if (data.list.length <= this.total) {
            this.list.push(...data.list);
          } else {
            this.list = data.list;
          }
        } else {
          this.list = data.list;
        }
        this.isData = data.list.length <= 0 ? false : true; //是否显示无数据
      });
    },
    changeTab(e) {
      this.nav_index = e;
      let data = {
        0: "",
        1: 1,
        2: 0,
        3: -2,
        4: -3,
        5: -1,
      };
      this.orderStatus = data[e];
      this.getOrderList(0);
      let orderStatusIdx = {
        "": 0,
        1: 1,
        0: 2,
        "-2": 3,
        "-3": 4,
        "-1": 5,
      };
      window.sessionStorage.setItem(
        "order_idx",
        `${orderStatusIdx[this.orderStatus]}`
      );
    },
    goDetail(item) {
      this.$router.push({
        path: `/order-detail?toolOrderId=${item.toolOrderId}&orderStatus=${item.orderStatus}`,
      });
    },
    //点击加载更多
    moreOrder() {
      this.page++;
      this.getOrderList(1);
    },
  },
  created() {},
  mounted() {
    this.getOrderList(0);
    let order_idx = window.sessionStorage.getItem("order_idx") || "";
    if (order_idx != "") {
      this.activeStatus = Number(order_idx);
    }
    this.changeTab(this.nav_index);
  },
  beforeCreate() {},
  beforeMount() {},
  beforeUpdate() {},
  updated() {},
  beforeDestroy() {},
  destroyed() {},
  activated() {},
};
</script>
<style lang='scss' scoped>
#order {
  ::v-deep .van-tab {
    padding: 0;
  }
  ::v-deep .van-tabs__nav {
    background-color: transparent;
  }
  .order-box {
    position: relative;
    z-index: 10;
  }

  .order-tab-title-box {
    padding: 0.31rem 0.33rem;
    background: linear-gradient(310deg, #ddebff 0%, #ece8ff 48%, #f3f1fd 100%);
    border-radius: 0.16rem 0.16rem 0 0;
    position: relative;
  }
  .order-status-box {
    position: absolute;
    top: 0;
    right: -0.11rem;
  }
  .order-status {
    width: fit-content;
    position: relative;
    padding: 0.06rem 0.15rem;
    font-size: 0.16rem;
    font-family: SourceHanSansCN-Medium, SourceHanSansCN;
    font-weight: 500;
    line-height: 0.27rem;
    letter-spacing: 0.02rem;
    border-radius: 0.06rem 0.06rem 0px 0.06rem;
  }
  .order-status1 {
    background: linear-gradient(315deg, #4265fe 0%, #10f7ff 100%);
    color: #ffffff;
  }
  .order-status0 {
    background: linear-gradient(315deg, #8e8e8e 0%, #d7d7d7 100%);
    color: #ffffff;
  }
  .clip-triangle {
    -webkit-clip-path: polygon(50% 40%, 0% 100%, 100% 100%);
    clip-path: polygon(50% 40%, 0% 100%, 100% 100%);
  }
  .order-status0,
  .order-status1 {
    &::after {
      content: "";
      position: absolute;
      bottom: -0.08rem;
      right: 0.0178rem;
      width: 0.16rem;
      height: 0.14rem;
      transform: rotate(-45deg);
      @extend .clip-triangle;
    }
  }
  .order-status0::after {
    background-color: rgba(123, 123, 123, 1);
  }
  .order-status1::after {
    background-color: rgba(8, 53, 182, 1);
  }
  .order-cont {
    padding: 0 0.32rem 0.7rem 0.32rem;
  }
  .order-tab-title-img {
    width: 0.64rem;
    height: 0.64rem;
  }
  .order-tab-content {
    margin-top: 0.32rem;
  }
  .order-tab-title-text {
    font-size: 0.32rem;
    font-family: SourceHanSansCN-Medium, SourceHanSansCN;
    font-weight: 500;
    color: #000000;
    line-height: 0.48rem;
    letter-spacing: 0.02rem;
    margin-left: 0.16rem;
  }
  .order-tab-item-box {
    padding: 0 0.32rem 0.4rem 0.32rem;
    background: rgba(255, 255, 255, 1);
    border-radius: 0 0 0.16rem 0.16rem;
    border: 1px solid #979797;
    border-top: none;
  }
  .order-tab-item {
    font-size: 0.28rem;
    font-family: PingFangSC-Regular, PingFang SC;
    font-weight: 400;
    color: #242424;
    line-height: 0.36rem;
    letter-spacing: 0.01rem;
    padding-top: 0.32rem;
  }
  // 暂无数据
  .wap-not-data-box {
    padding: 1.74rem 0 0 0;
    .wap-not-data-img {
      width: 2.58rem;
      height: 2.52rem;
    }
    .wap-not-data-text {
      font-size: 0.26rem;
      font-family: PingFangSC-Regular, PingFang SC;
      font-weight: 400;
      color: #242424;
      line-height: 0.37rem;
      letter-spacing: 1px;
      margin-top: 0.32rem;
    }
  }
  .more-order {
    font-size: 0.26rem;
    font-family: PingFangSC-Medium, PingFang SC;
    font-weight: 500;
    color: #0064ff;
    line-height: 0.26rem;
    margin-top: 0.4rem;
    .blue-double-right-arrow {
      width: 0.27rem;
      height: 0.27rem;
    }
  }
}
</style>

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

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

相关文章

6.1Java EE——Spring介绍

一、Spring概述 String框架的核心技术 Spring是由Rod Johnson组织和开发的一个分层的Java SE/EE一站式&#xff08;full-stack&#xff09;轻量级开源框架。它最为核心的理念是IoC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;&#xff0c;其中&…

声音合成与克隆——制作用于训练的声音数据集

前言 1.PaddleSpeech 是一个简单易用的all-in-one 的语音工具箱&#xff0c;支持语音处理的相关操作&#xff0c;如语音知别&#xff0c;语音合成&#xff0c;声纹识别&#xff0c;声音分类&#xff0c;语音翻译&#xff0c;语音唤醒等多个方向的应用开发。 这里只使用到语音…

C++之模板类重写基类构造函数(一百五十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

matlab[1,1]生成100个随机点

close all; clc; x linspace(0,1,200); y 0 rand(1,200); sz 25; c linspace(1,10,length(x)); scatter(x,y,sz,c,filled)

IO流学习07(Java)

序列化流&#xff08;对象操作输出流&#xff09;&#xff1a; 可以把java中的对象写到本地文件中。 public objectoutputstream(outputstream out) 把基本流包装成高级流。 public final void writeobject(object obj) 把对象序列化&#xff08;写出&#xff09;到文…

如何在Docker和Kubernetes中使用代理IP?

Docker和Kubernetes是目前非常流行的容器化技术&#xff0c;这些技术被广泛用于开发、部署和管理应用程序。在某些情况下&#xff0c;需要使用代理IP来访问特定的网络资源。本文将介绍如何在Docker和Kubernetes中使用代理IP&#xff0c;并提供详细的举例说明。 一、在Docker中使…

如何增强农业防灾减灾能力,加强灾情监测与风险预估

近日&#xff0c;农业农村部会同各部门联合下发通知&#xff0c;要求各地坚持问题导向&#xff0c;分区分类指导&#xff0c;细化实化措施&#xff0c;千方百计夺取秋粮和全年粮食丰收。文件中提到要通过加强灾害风险预报预警和灾情监测调度、分区分类做好灾情防范应对来应对气…

ASEMI整流桥GBU808参数和应用

编辑-Z 整流桥GBU808是一种常见的电子元件&#xff0c;用于将交流电转换为直流电。它由四个二极管组成&#xff0c;可以全波整流。GBU808具有高电流和高电压的特点&#xff0c;适用于各种电源和电路应用。 GBU808的主要特点之一是其高电流能力。它可以承受高达8安培的电流&…

嵌入式开发之串口通讯

串口通信(Serial Communication)&#xff0c; 是指外设和计算机间&#xff0c;通过数据信号线 、地线、控制线等&#xff0c;按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少&#xff0c;在远距离通信中可以节约通信成本&#xff0c;但其传输速度比并行传输低&…

springboot会员制医疗预约服务管理信息系统

针对会员制医疗预约服务行业的管理现状&#xff0c;本会员制医疗预约服务管理信息系统主要实现以下几个目标&#xff1a; 1.系统界面简洁&#xff0c;操作简便。 2.拥有精准&#xff0c;高效的查询功能。 3.使管理人员能够及时的获得精确的报表。 4.对数据…

docker入门(Linux环境下安装Docker,Docker构建镜像)

docker入门(利用docker部署web应用) 一:什么是Docker 1.1 官方解释 Docker is the world’s leading software containerization platform。 Docker公司开发&#xff0c;开源&#xff0c;托管在github跨平台&#xff0c; 支持Windows、Macos、Linux。 1.2 抽象解释 docker…

【状态设计优化DP】ABC307 E

E - Distinct Adjacent (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 组合问题&#xff0c;考虑DP或组合数 组合数不好考虑&#xff0c;我们去考虑DP 因为是个环&#xff0c;我们把环拆成一条链&#xff0c;然后加一个N1&#xff0c;颜色和起点1相同&#xff0c;在这条…

天台玻璃折叠门可实现室内外空间的无缝连接

天玻璃折叠门是指安装在天台上的可折叠开合的玻璃门&#xff0c;可用于将室外空间与室内空间进行隔离或连接。设计天台玻璃折叠门时需要注意以下几点&#xff1a; 1. 结构稳固性&#xff1a;选择坚固、稳定的材料和结构设计&#xff0c;确保门体在风力和其他外力作用下不易摇晃…

如何规范的设计数据库表

前言对于后端开发同学来说&#xff0c;访问数据库&#xff0c;是代码中必不可少的一个环节。系统中收集到用户的核心数据&#xff0c;为了安全性&#xff0c;我们一般会存储到数据库&#xff0c;比如&#xff1a;mysql&#xff0c;oracle等。后端开发的日常工作&#xff0c;需要…

制作搭建宠物商城小程序,打造便捷的宠物购物体验

随着宠物市场的不断发展&#xff0c;宠物商城小程序成为了满足宠物爱好者需求的重要工具。在现代社会&#xff0c;宠物已经成为人们生活中不可或缺的一部分。作为宠物爱好者&#xff0c;我们对于宠物食品、用品、医疗保健品等需求日益增长。而宠物商城小程序则为我们提供了一个…

python_day5_file

open()打开函数&#xff1a; f open(name,mode,encoding) name:要打开的目标文件名 mode:访问模式&#xff1a;只读r、写入w、追加a 等 encoding:编码格式&#xff0c;常为UTF-8 f open("D:\Test.txt", "r", encoding"UTF-8") print(type(f))r…

Dbeaver 显示字段备注信息

一、全局设置显示字段描述

@所有人,酷雷曼年中答卷,请查收!

2023 酷雷曼VR年中答卷 顺势而行 携手共赢 七月既至&#xff0c;年过已半。 半年来&#xff0c; 我们持续以优质的产品研发、 专业的客户服务、 不断交付的技术方案&#xff0c; 将那些关于VR的美好向往&#xff0c; 变成真实可感的确定&#xff0c; 让每一种相信&am…

Vue+element实现el-table行内编辑并校验

el-table行内编辑情况情况概要&#xff1a;之前在开发过程中对于element数据的新增&#xff0c;修改&#xff0c;删除。一般直接结合el-form使用。也就是新增的时候点新增然后出来一个弹框&#xff0c;里面嵌套一个表单&#xff0c;然后保存就好了。这次项目中要求所有的新增&a…

如何学习编写安全的PHP代码? - 易智编译EaseEditing

学习编写安全的PHP代码是保证应用程序安全的重要一环。下面是几个建议来帮助你学习编写安全的PHP代码&#xff1a; 学习安全编程原则&#xff1a; 了解常见的安全漏洞类型&#xff0c;如跨站脚本攻击&#xff08;XSS&#xff09;、SQL注入、跨站请求伪造&#xff08;CSRF&…