微信小程序-购物车开发

简介: 微信小程序-购物车开发

主页:写程序的小王叔叔的博客欢迎来访👀

支持:点赞收藏关注


1、效果

image.png

2、wxml

3、wxjs

varbase=getApp();
varpreview=require('../../utils/preview.js');
Page({
data: {
WxMemberCart: [],
total: 0,
his: "",
plist:[],
loaded: true,
adminShow: true,//编辑或完成      totalPrice: 0,//总金额 allselect: false,//是否全选    selectArr: [], //已选择的商品  hadOnShow: false,
    },
onLoad: function (e) {
_this.onShow();
    },
onShow: function (e) {                       
let_this=thisif (_this.data.hadOnShow) {
return      }
_this.setData({
hadOnShow: true      })     
    },
goBack: function () {
var_this=this;
wx.navigateTo({
url: _this.data.his        })
    },
//-------------------------//计算价格calculateTotal: function () {
varselectArr=this.data.selectArr;   //已选择的商品vartotalPrice=0;
if (selectArr.length) {  //如果存在商品就计算价格for (vari=0; i<selectArr.length; i++) {
totalPrice+=selectArr[i].wx_goodsNum*selectArr[i].wx_productPrice;
      }
totalPrice=totalPrice.toFixed(2);  //乘法有点问题, 需要保留一下小数console.log("计算价格:", totalPrice)
this.setData({
totalPrice: totalPrice      })
    } else {  //不存在商品就把总价格置为 0this.setData({
totalPrice: 0      })
    }
  },
//判断是否为全选  judgmentAll: function () {
varWxMemberCart=this.data.WxMemberCart;  //初始数据varselectArr=this.data.selectArr;  //已选择的商品if (selectArr.length==WxMemberCart.length) {  //长度相等就是全部选上了this.setData({
allselect: true      })
    } else {
this.setData({
allselect: false      })
    }
  },
//全选allcheckTap: function () {
varthat=this;
varWxMemberCart=that.data.WxMemberCart;  //初始数据varselectArr= [];  //定义空数组varallselect=!that.data.allselect; //data里的是否全选先改变状态存着if (allselect) { //如果为真, 初始数据里的每条checked变为true, 然后push到定义的空数组里for (vari=0; i<WxMemberCart.length; i++) {
WxMemberCart[i].checked=true;
selectArr.push(WxMemberCart[i])
      }
    } else { //不为真就变成false, 定义的数组再置空一次for (vari=0; i<WxMemberCart.length; i++) {
WxMemberCart[i].checked=false;
      }
selectArr= [];
    }
that.setData({   //重新设置数据WxMemberCart: WxMemberCart,  //初始的数据allselect: allselect,  //全选的状态selectArr: selectArr//已选择的商品    })
that.calculateTotal();  // 最后计算一次价格 (计算价格放到重置数据之前会出问题)  },
//单个商品选择checkTap: function (e) {
varindex=e.currentTarget.dataset.index; //取到渲染的下标varWxMemberCart=this.data.WxMemberCart;  //初始数据varselectArr=this.data.selectArr; //已选择的商品数组WxMemberCart[index].checked=!WxMemberCart[index].checked//没选中的就要选中, 选中了的就取消选中状态if (WxMemberCart[index].checked) { //如果选中了, 就放到一选择的商品数组里for (vari=0; i<WxMemberCart.length; i++) {
if (WxMemberCart[i] ==WxMemberCart[index]) {
selectArr.push(WxMemberCart[index])
        }
      }
this.judgmentAll();  //计算价格    } else {  //取消选中就从已选择的商品数组里移除for (vari=0; i<selectArr.length; i++) {
if (selectArr[i].id==WxMemberCart[index].id) {
selectArr.splice(i, 1)
        }
      }
this.judgmentAll(); //选择的时候要判断是不是已经选择了全部的    }
this.calculateTotal(); //计算一次价格console.log("已选择的商品:", selectArr)
this.setData({  //重置数据WxMemberCart: WxMemberCart,
selectArr: selectArr    })
  },
//数量加减numchangeTap: function (e) {
vartypes=e.currentTarget.dataset.types;   //加和减的两张图片上分别设置了types属性   varindex=e.currentTarget.dataset.index;  //获取下标varWxMemberCart=this.data.WxMemberCart;  //初始数据if (types=='minus') {  //减varwx_goodsNum=WxMemberCart[index].wx_goodsNum;
if (wx_goodsNum<=1) {  //不允许商品数量小于1 ,  都添加到购物车了还要减到0是几个意思? 反正有个删除按钮return;
      } else {
WxMemberCart[index].wx_goodsNum--;
this.setData({
WxMemberCart: WxMemberCart        })
this.calculateTotal();  //计算价格             }
    }
if (types=="add") {  //加WxMemberCart[index].wx_goodsNum++;   //加就不判断了, 加到二十二世纪去都行this.setData({
WxMemberCart: WxMemberCart      })
this.calculateTotal();  //计算价格    }
//购物车实时更新某个商品的数量  },
//删除商品 deleteshopTap: function () {  
var_this=this;
varWxMemberCart=this.data.WxMemberCart;   //初始数据varselectArr=this.data.selectArr;  //已选择的商品数组if (selectArr.length) {  //如果以选择的商品数组里有长度for (vari=0; i<WxMemberCart.length; i++) {
for (varj=0; j<selectArr.length; j++) {
if (WxMemberCart[i].id==selectArr[j].id) {    //把初始数据的对应id的数据删掉就好了WxMemberCart.splice(i, 1);           
//后台同步删除当前购物车商品信息          }
        }
      }
this.setData({  //重置一下数据WxMemberCart: WxMemberCart,
selectArr: []   //已选择的数组置空      })
this.calculateTotal();  //计算价格    }
  },
//编辑或完成adminTap: function () {  //切换四个按钮的显示this.setData({
adminShow: !this.data.adminShow    })
  },
//结算toApply: function () {
console.log("已选择的商品:", this.data.selectArr)
if (this.data.selectArr.length>0) {
wx.navigateTo({
url: '../order/order?from=cart'      })
    } else {
base.modal({
title: '未选择商品',
showCancel: false      })
    }
  },
});

4、wxss

page {
padding: 0055px;
background-color: #f3f3f3;
}
.tit {
border-bottom: 1rpxsolid#ddd;
padding: 20rpx25rpx;
display: flex;
align-items: center;
background-color: #f0f0f0;
}
.tit-back {
flex: 1;
text-align: left;
color: #576b95;
}
.tit-text {
font-size: 11pt;
color: #999;
flex: 2;
}
.tit-tool {
flex: 1;
text-align: right;
color: #576b95;
}
.fs_12{
font-size: 12pt;
}
.fs_14{
font-size: 14pt;
}
.cart_body{
box-sizing: border-box;
/* padding: 0 32rpx; */}
.cart_item{
box-sizing: border-box;
padding-bottom: 100rpx;
}
.check_img{
width: 40rpx;
height: 40rpx;
margin-top: 32rpx;
}
label{
display: flex;
padding: 26rpx0;
background-color: #fff;
border-bottom: 1rpxsolid#eee;
}
.cart_item_w{
display: flex;
width:94vw;
margin:0auto;
}
.cart_image{
/* width: 192rpx; */width: 110rpx;
height: 110rpx;
margin-left: 32rpx;
}
.cart_img{
width: 100%;
height: 100%;
border-radius: 8rpx;
}
.cart_content{
margin-left: 20rpx;
flex:1;
display: flex;
flex-flow: columnwrap;
justify-content: space-between;
}
.content_title{
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp:2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
.quans{
width: 20vw;
display: flex;
color:#999;
justify-content: flex-start;
}
.content_price{
/* width: 40vw; *//* float: right; */display: flex;
justify-content: space-between;
}
.goods_number_container{
width: 170rpx;
display: flex;
/* justify-content: space-between; */justify-content: flex-end;
}
.goods_number_icon_container{
width: 50rpx;
height:50rpx;
}
.goods_number_icon{
width:100%;
height:100%;
}
.goods_number{
height: 50rpx;
width: 50rpx;
flex:1;
text-align: center;
}
.ft_color{
color: #ff6a00;
}
.cart_total_container{
font-size: 30rpx;
height: 100rpx;
line-height: 88rpx;
background: #fff;
position: fixed;
bottom:0;
left:0;
right:0;
box-sizing: border-box;
padding: 12rpx32rpx;
display: flex;
}
.checkAllBox{
border-radius: 50%;
height: 40rpx;
width: 40rpx;
margin-top: 23rpx;
margin-right: 8rpx;
}
.totalPrice{
flex:1;
margin-left: 40rpx;
}
.clearingBox{
width: 300rpx;
display: flex;
justify-content: space-between;
}
.btn{
width: 140rpx;
text-align: center;
border-radius: 36rpx;
line-height: 72rpx;
}
.editbtn{
border: 1pxsolid#666666;
background: #fff;
}
.clearbtn{
/* background: #ff5c4d;  color: #fff; */flex: 1;
height: 40px;
line-height: 40px;
text-align: center;
border-radius: 3px;
background-color: #576b95;
border: 1rpxsolid#576b95;
color: #fff;
margin: 00rpx010rpx;
}


转载声明:本文为博主原创文章,未经博主允许不得转载

⚠️注意 ~

💯本期内容就结束了,如果内容有误,麻烦大家评论区指出!

如有疑问❓可以在评论区💬或私信💬,尽我最大能力🏃‍♀️帮大家解决👨‍🏫!

如果我的文章有帮助到您,欢迎点赞+关注✔️鼓励博主🏃,您的鼓励是我分享的动力🏃🏃🏃~

相关文章
预约按摩小程序开发,为什么很多上门按摩平台根本招聘不到优秀技师?
上门按摩平台面临招不到优秀技师的问题,主要原因是平台众多,技师选择多样。为解决此问题,平台可引入技师等级制度,根据订单数量和好评率划分高、低等级技师。高等级技师可享受70%-90%的高提成及首页推荐,这不仅能激励技师的积极性,还能帮助平台筛选出优质技师,提升服务质量和口碑,形成良性循环。
|
1天前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
14天前
|
人工智能 小程序 IDE
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
随着AI技术的发展,各大厂商推出的AI运动APP如“乐动力”、“天天跳绳”等,使云上运动会、线上健身等概念大热。本文将指导你如何利用“云智AI运动识别小程序插件”,在微信小程序中实现类似功能,包括工具搭建、服务启动及数据回传等步骤,助力开发者高效开发AI运动小程序。
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
|
6天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
6天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
17天前
|
人工智能 JSON 小程序
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
随着AI技术的发展,各大厂商推出的如“乐动力”、“天天跳绳”等AI运动APP,使得云上运动会、线上健身等概念风靡一时。本文将引导读者从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”,介绍人体姿态检测规则、规则编写语法、执行检测规则运算及姿态检测实战等内容,助力开发者轻松实现AI运动小程序的开发。
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
|
8天前
|
数据采集 人工智能 小程序
【一步步开发AI运动小程序】十、姿态动作相似度比较
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,重点讲解姿态动作相似度比较功能的运用,包括样本动作帧的采集和姿态相似度的计算方法,以及在组合运动中的应用实例。
|
2天前
|
人工智能 小程序 JavaScript
【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?
本文介绍了如何从零开始开发一个AI运动小程序,重点讲解了通过分包技术解决程序包超过2M限制的问题。详细步骤包括在uni-app中创建分包、配置`manifest.json`和`pages.json`文件,并提供了分包前后代码大小对比,帮助开发者高效实现AI运动功能。
|
7天前
|
人工智能 小程序 开发者
【一步步开发AI运动小程序】十一、人体关键点跳跃追踪
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,涵盖云上运动会、健身打卡等热门应用场景。通过示例代码展示如何调用插件功能,实现动作追踪与分析,助力开发者快速上手。
|
17天前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。