微信小程序简单实现购物车功能

微信小程序简单实现购物车结算和购物车列表展示功能

实现在微信小程序中对每一个购物车界面的商品订单,进行勾选结算和取消结算的功能,相关界面截图如下:
购物车

具体实现示例代码为:
1、js代码:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    checked: false,
    checkAll: false,
    dataList: [{
        id: '000',
        img: 'https://img-blog.csdnimg.cn/img_convert/0e449547f8e5354646f76af0d1b4800a.png',
        content: '生活百般滋味,编写不易,关注博主,分享更多内容呦',
        price: 3289,
        showPrice: '32.89',
        number: 1
      },
      {
        id: '111',
        img: 'https://img2.baidu.com/it/u=2681955314,221996905&fm=253&fmt=auto&app=138&f=JPEG?w=450&h=300',
        content: '努力学习,天天向上,进我主也查看更多内容',
        price: 2456,
        showPrice: '24.56',
        number: 2
      }, {
        id: '222',
        img: 'https://img-blog.csdnimg.cn/img_convert/0e449547f8e5354646f76af0d1b4800a.png',
        content: '关注博主,分享更多内容,欢迎批评指导',
        price: 3289,
        showPrice: '89.89',
        number: 5
      },
    ],
    totalMoney: '0.00',
    selectDatas: []
  },
  // 查看详情
  detailClick(e) {
    let data = e.currentTarget.dataset.item;
    wx.showToast({
      title: '点击了查看详情',
      icon: 'none'
    })
    console.log('详情数据:', data)
  },
  // 单选
  checkboxChange(e) {
    let money = 0,
      str = [];
    let attr = e.detail.value;
    let list = this.data.dataList;
    for (let i = 0; i < list.length; i++) {
      for (let k = 0; k < attr.length; k++) {
        if (list[i].id === attr[k]) {
          money += list[i].price * list[i].number;
          str.push(list[i]);
        }
      }
    }
    this.setData({
      selectDatas: str,
      totalMoney: (money / 100).toFixed(2),
      checkAll: (list.length == attr.length && list.length > 0) ? true : false
    })
  },
  // 全选
  checkboxChangeAll(e) {
    let money = 0,
      str = [];
    let val = e.detail.value;
    let list = this.data.dataList;
    if (val.length > 0) {
      for (let i = 0; i < list.length; i++) {
        money += list[i].price * list[i].number;
        str.push(list[i]);
      }
      this.setData({
        checked: true,
        selectDatas: str,
        totalMoney: (money / 100).toFixed(2)
      })
    } else {
      this.setData({
        checked: false,
        selectDatas: [],
        totalMoney: '0.00'
      })
    }
  },
  // 结算
  totalClick() {
    let list = this.data.selectDatas;
    if (list.length < 1) {
      wx.showToast({
        title: '无结算订单',
        icon: 'error'
      })
      return false;
    }
    wx.showModal({
      title: '提示',
      content: '确定结算当前订单吗?',
      complete: (res) => {
        if (res.confirm) {
          wx.showToast({
            title: '结算完成',
          })
        }
      }
    })
  },
})

2、wxml代码:

<view class="bg-color"></view>
<view class="car-box">
  <checkbox-group bindchange="checkboxChange">
    <view class="row-data" wx:for="{{dataList}}" wx:for-index="index" wx:key="item">
      <view class="row-btn">
        <checkbox value="{{item.id}}" checked="{{checked}}" />
      </view>
      <view class="row-list" bind:tap="detailClick" data-item="{{item}}">
        <view class="row-img">
          <image src="{{item.img}}" mode="aspectFill" />
        </view>
        <view class="row-info">
          <view class="row-text">{{item.content}}</view>
          <view class="row-price">
            <view>
              <text class="row-icon"></text>
              <text class="row-money">{{item.showPrice}}</text>
            </view>
            <view>
              <text class="btn">x{{item.number}}</text>
            </view>
          </view>
        </view>
      </view>
    </view>
  </checkbox-group>
</view>
<!-- 结算 -->
<view class="footer-box">
  <view>
    <checkbox-group bindchange="checkboxChangeAll">
      <label class="level">
        <checkbox value="all" checked="{{checkAll}}" />全选
      </label>
    </checkbox-group>
  </view>
  <view class="level">
    <view>
      <text>合计:</text>
      <text class="total-btn row-icon"></text>
      <text class="total-btn row-money">{{totalMoney}}</text>
    </view>
    <view class="total-end" bind:tap="totalClick">结 算</view>
  </view>
</view>

3、wxss代码:

page {
  font-size: 32rpx;
  background-color: #f1f1f1;
}

.bg-color {
  background-color: #008B8B;
  height: 200rpx;
  width: 100%;
}

.car-box {
  min-height: 300rpx;
  border-radius: 20rpx;
  background-color: white;
  margin: -190rpx 20rpx 20rpx 20rpx;
  padding: 20rpx 10rpx;
}

.row-data {
  display: flex;
  flex-direction: row;
  align-items: center;
  margin-top: 20rpx;
}

.row-btn {
  width: 10%;
  text-align: center;
}

.row-list {
  width: 90%;
  display: flex;
  flex-direction: row;
}

.row-img {
  width: 30%;
  background-color: #f1f1f1;
}

.row-info {
  width: 70%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  margin-left: 20rpx;
}

.row-img image {
  width: 100%;
  height: 200rpx;
}

.row-text {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  text-overflow: ellipsis;
  overflow: hidden;
  font-size: 30rpx;
}

.row-price {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}

.row-price view:first-child {
  color: #FA5422;
}

.row-icon {
  font-size: 26rpx;
}

.row-money {
  font-weight: bold;
}

.btn {
  padding: 5rpx 20rpx;
  font-size: 28rpx;
  color: gray;
}

checkbox {
  zoom: .8;
}

.footer-box {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 999;
  height: 100rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  background-color: white;
  padding: 0 20rpx;
}

.level {
  display: flex;
  flex-direction: row;
  align-items: center;
}

.total-btn {
  color: #FA5422;
}

.total-end {
  background-color: #008B8B;
  margin-left: 20rpx;
  padding: 15rpx 50rpx;
  border-radius: 50rpx;
  font-size: 30rpx;
  color: white;
}

本示例代码较为简单,适合初学的友友们借鉴,编写不易,关注博主,分享更多实用好用示例代码给大家,谢谢大家的支持和指导。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloudAlibaba:2.1nacos

概述 概述 简介 Nacos是阿里巴巴开源的服务注册中心以及配置中心 Nacos注册中心Eureka 服务配置Config 服务总线Bus 官网 Nacos官网 | Nacos 官方社区 | Nacos 下载 | Nacos 名字由来 Naming&#xff1a;名字 Configurations&#xff1a;配置 Service&#xff1a;服务 功能…

【基础篇】Git 基础命令与核心概念

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 一&#xff0c;Git 初识 1.1&#xff0c;问题引入 不知道你工作或学习时&#xff0c;有没有遇到…

Centos8操作系统安装mysql5.7版本以及报错解决

目录 一、卸载MySql 1.首先查看已安装的mysql 2.逐个或者执行一下命令统一卸载掉 注意&#xff1a; 3. 卸载其他相关文件 二、安装MySql 1.安装mysql的rpm源 2.安装MySql 如果遇到以下错误&#xff1a; 问题一: 解决方法&#xff1a; 问题二、 解决方法&#xff1…

国产麒麟v10系统下打包electron+vue程序,报错unknown output format set

报错如下&#xff1a; 报错第一时间想到可能是代码配置原因报错&#xff0c;查看代码似乎感觉没啥问题 又查看具体报错原因可能是因为icon的原因报错&#xff0c;后面查阅发现ico在各系统平台会不兼容&#xff0c;也就是ico是给win下使用的&#xff0c;此处改下图标格式就ok&am…

1、Qt简介

文章目录 前言一、pySide2 / pySide6 ,PyQt5 / PyQt6二、安装包1 安装pyside22 安装pyqt5三、从一个简单的例子开始三、界面动作处理---信号(signal)与槽(slot)(Qt最核心的机制)--- 绑定事件封装到类中总结前言 参考文章:Qt简介 本文开始就开始进入到qt的开发笔记书写…

【论文解读】QUEST: Query Stream for Practical Cooperative Perception

QUEST 摘要引言QUERY COOPERATION PARADIGMQUEST FRAMEWORKA. Overall ArchitectureB. Cross-agent Query Interaction 实验结论 摘要 合作感知通过提供额外的视点和扩展感知领域&#xff0c;可以有效地提高个体感知性能。现有的合作模式要么是可解释的(结果合作)&#xff0c;…

计算机视觉——OpenCV 使用分水岭算法进行图像分割

分水岭算法 分水岭算法&#xff1a;模拟地理形态的图像分割 分水岭算法通过模拟自然地形来实现图像中物体的分类。在这一过程中&#xff0c;每个像素的灰度值被视作其高度&#xff0c;灰度值较高的像素形成山脊&#xff0c;即分水岭&#xff0c;而二值化阈值则相当于水平面&am…

LabVIEW高效目标跟踪系统

LabVIEW高效目标跟踪系统 随着机器视觉技术的飞速发展&#xff0c;设计和实现高效的目标跟踪系统成为了众多领域关注的焦点。基于LabVIEW平台&#xff0c;结合NI Vision机器视觉库&#xff0c;开发了一种既高效又灵活的目标跟踪系统。通过面向对象编程方法和队列消息处理器程序…

以更多架构核心专利,推进 SDS 产业创新创造

今天是第 24 个世界知识产权日&#xff0c;今年世界知识产权日活动的主题是&#xff1a;“知识产权和可持续发展目标&#xff1a;立足创新创造&#xff0c;构建共同未来。” 这也正是 XSKY 在软件定义存储领域的目标之一。以“数据常青”为使命的 XSKY&#xff0c;始终立足于软…

济宁市中考报名照片要求及手机拍照采集证件照方法

随着中考报名季的到来&#xff0c;并且进入了中考报名演练阶段&#xff0c;济宁市的广大考生和家长都开始忙碌起来。报名过程中&#xff0c;上传一张符合要求的证件照是必不可少的环节。本文将详细介绍济宁市中考报名照片的具体要求&#xff0c;并提供一些实用的手机拍照采集证…

LeetCode in Python 74/240. Search a 2D Matrix I/II (搜索二维矩阵I/II)

搜索二维矩阵I其实可以转换为搜索一维数组&#xff0c;原因在于&#xff0c;只要先确定搜索的整数应该在哪一行&#xff0c;即可对该行进行二分查找。 搜索二维矩阵II中矩阵元素排列方式与I不同&#xff0c;但思想大致相同。 目录 LeetCode in Python 74. LeetCode in Pyth…

html表格导出为word文档,导出的部分表格内无法填写文字

导出技术实现&#xff1a;fileSaver.jshtml-docx-js 1.npm安装 npm install --save html-docx-js npm install --save file-saver 2.页面引入 import htmlDocx from html-docx-js/dist/html-docx; import saveAs from file-saver;components: {htmlDocx,saverFile, }, 3.页…

(MSFT.O)微软2024财年Q3营收619亿美元

在科技的浩渺宇宙中&#xff0c;一颗璀璨星辰再度闪耀其光芒——(MSFT.O)微软公司于2024财政年度第三季展现出惊人的财务表现&#xff0c;实现总营业收入达到令人咋舌的6190亿美元。这一辉煌成就不仅突显了微软作为全球技术领导者之一的地位&#xff0c;更引发了业界内外对这家…

Vue从0-1学会如何自定义封装v-指令

文章目录 介绍使用1. 理解指令2. 创建自定义指令3. 注册指令4. 使用自定义指令5. 自定义指令的钩子函数6. 传递参数和修饰符7. 总结 介绍 自定义封装 v-指令是 Vue.js 中非常强大的功能之一&#xff0c;它可以让我们扩展 Vue.js 的模板语法&#xff0c;为 HTML 元素添加自定义行…

在Elasticsearch 7.9.2中安装IK分词器并进行自定义词典配置

Elasticsearch是一个强大的开源搜索引擎&#xff0c;而IK分词器是针对中文文本分析的重要插件。本文将引导您完成在Elasticsearch 7.9.2版本中安装IK分词器、配置自定义词典以及验证分词效果的全过程。 步骤一&#xff1a;下载IK分词器 访问IK分词器的GitHub发布页面&#xf…

【网络编程】TCP流套接字编程 | Socket类 | ServerSocket类 | 文件资源泄露 | TCP回显服务器 | 网络编程

文章目录 TCP流套接字编程1.ServerSocket类2.Socket类3.文件资源泄露4.**TCP回显服务器** TCP流套接字编程 ​ ServerSocket类和Socket类这两个类都是用来表示socket文件&#xff08;抽象了网卡这样的硬件设备&#xff09;。 TCP是面向字节流的&#xff0c;传输的基本单位是b…

MySQL B+索引的工作原理及应用

引言 在数据库系统中&#xff0c;索引是优化查询、提高性能的关键技术之一。特别是在MySQL数据库中&#xff0c;B树索引作为最常用的索引类型&#xff0c;对数据库性能有着至关重要的影响。本文旨简单解析MySQL中B树索引的工作原理&#xff0c;帮助学生朋友们更好地理解和利用…

Kubernetes学习-核心概念篇(一) 初识Kubernetes

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Kubernetes渐进式学习-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 什么是Kubernetes 3. 为什么需要Kubernetes 3.1. 应…

ArcGIS批量寻找图层要素中的空洞

空洞指的是图层中被要素包围所形成的没有被要素覆盖的地方&#xff0c;当图层要素数量非常庞大时&#xff0c;寻找这些空洞就不能一个一个的通过目测去寻找了&#xff0c;需要通过使用工具来实现这一目标。 一、【要素转线】工具 利用【要素转线】工具可以将空洞同图层要素处于…

HTML网页自动播放背景音乐和全屏背景图代码

HTML网页自动播放背景音乐的代码 背景音乐代码及分析代码的应用背景图代码及分析下期更新预报 背景音乐代码及分析 能使网站上自动循环的背景音乐代码如下&#xff1a; <audio src"music.mid" autostart"true" loop"true" hidden"true…