shoppingcart.js
// 引入配置文件config const urlList = require('../../utils/config.js'); var app = getApp(); Page({ /** * 页面的初始数据 */ data: { orders: [], //加入到购物车里的商品集合 selectedAll: false, //全选按钮标志位,true代表全选选中,false代表全选未选中 totalPrice: 0 //总金额 }, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { this.loadOrders(); wx.setNavigationBarTitle({ //动态修改页面标题文字 title: '购物车' }) wx.setNavigationBarColor({ frontColor: '#000000', //导航文字颜色 backgroundColor: '#ffffff', //导航背景色 animation: { //动画效果 duration: 400, timingFunc: 'easeIn' } }) }, loadOrders: function() { //加载购物车里的商品 var orders = wx.getStorageSync('orders'); //从本地缓存数据orders里获取数据 //var orders = new Array(); // 生成模拟数据 if (orders.length == 0) { var obj0 = new Object(); obj0.id = 1; obj0.name = 'CTS项目'; obj0.pic = '../../images/1.png'; obj0.quantity = 3; obj0.nowPrice = 77; obj0.selected = true; orders[0] = obj0; var obj1 = new Object(); obj1.id = 2; obj1.name = 'WMS项目'; obj1.pic = '../../images/2.png'; obj1.quantity = 5; obj1.nowPrice = 66; obj1.selected = true; orders[1] = obj1; wx.setStorageSync("orders", orders); } var newOrders = []; var totalPrice = 0; var selectedAll = true; for (var i = 0; i < orders.length; i++) { var order = orders[i]; if (order.selected) { //购物车里的每件商品都有一个selected属性,selected等于true时代表这件商品被选中,要计算金额 totalPrice += order.nowPrice * order.quantity; //计算选中商品的金额, } else { selectedAll = false; //购物车里的商品,如果有一件是未选中的,selectedAll全选标志位就等于false } newOrders.push(order); } wx.setStorageSync("orders", newOrders); //重新加入缓存 this.setData({ totalPrice: totalPrice, orders: newOrders, selectedAll: selectedAll }); //数据绑定到页面里 }, checkboxChange: function(e) { //每件商品前的复选框操作函数 var ids = e.detail.value; //会把选中的复选框的id值,以数组集合的形式传递过来 var orders = wx.getStorageSync("orders"); var totalPrice = 0; var newOrders = []; for (var i = 0; i < orders.length; i++) { var order = orders[i]; var flag = true; for (var j = 0; j < ids.length; j++) { if (order.id == ids[j]) { //传递过来的ids数组集合值,都是选中的商品,需要计算总的金额 totalPrice += order.nowPrice * order.quantity; order.selected = true; //代表该件商品是选中状态 flag = false; //代表该件商品是选中状态 } } if (flag) { //代表改件商品是未选中状态 order.selected = false; } newOrders.push(order); } wx.setStorageSync("orders", newOrders); //重新加入缓存数据 this.loadOrders(); //重新加载页面 }, checkAll: function(e) { //全选复选框操作函数 var orders = wx.getStorageSync("orders"); console.log(e); var newOrders = []; var selectedAll = this.data.selectedAll; for (var i = 0; i < orders.length; i++) { var order = orders[i]; if (selectedAll) { //如果当前状态值是全选中,那么再单击的时候,全选复选框应该为未选中状态 order.selected = false; } else { order.selected = true; } newOrders.push(order); } wx.setStorageSync("orders", newOrders) //重新加入缓存数据 this.loadOrders(); //重新加载页面 }, addOrders: function(e) { //添加商品数量函数 var id = e.currentTarget.id; var orders = wx.getStorageSync('orders'); var addOrders = new Array(); for (var i = 0; i < orders.length; i++) { var order = orders[i]; if (order.id == id) { var quantity = order.quantity; order.quantity = quantity + 1; //找到该件商品数量加1 } addOrders[i] = order; } wx.setStorageSync('orders', addOrders); //重新加入缓存数据 this.loadOrders(); //重新加载页面 }, minusOrders: function(e) { //减少商品数量函数 console.log(e); var id = e.currentTarget.id; var orders = wx.getStorageSync('orders'); var addOrders = new Array(); var add = true; for (var i = 0; i < orders.length; i++) { var order = orders[i]; if (order.id == id) { var count = order.quantity; if (count >= 2) { order.quantity = count - 1; //找到该件商品数量减1 } } addOrders[i] = order; } wx.setStorageSync('orders', addOrders); //重新加入缓存数据 this.loadOrders(); //重新加载页面 }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function() { }, /** * 生命周期函数--监听页面显示 */ onShow: function() { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function() { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function() { }, /** * 用户点击右上角分享 */ onShareAppMessage: function() { } })
shoppingcart.wxml
<!--pages/shoppingcart/shoppingcart.wxml--> <view class="content"> <view class="info"> <view class="line"></view> <view class="receive"> 购物车 </view> <view class="line"></view> <view class="items"> <checkbox-group bindchange="checkboxChange"> <block wx:for="{{orders}}"> <view class="item"> <view class="icon"> <label for="{{item.id}}"> <checkbox id="{{item.id}}" value="{{item.id}}" checked="{{item.selected}}" hidden/> <icon type="{{item.selected==true?'success':'circle'}}" color="#E4393C" data-value="{{item.id}}" size="20" /> </label> </view> <view class="pic"> <image src="{{item.pic}}" style="width:80px;height:80px;"></image> </view> <view class="order"> <view class="title">{{item.name}}</view> <view class="desc"> <view>数量:{{item.quantity}}</view> </view> <view class="priceInfo"> <view class="price">¥{{item.nowPrice}}</view> <view class="minus" id="{{item.id}}" bindtap="minusOrders">-</view> <view class="count">{{item.quantity}}</view> <view class="add" id="{{item.id}}" bindtap="addOrders">+</view> </view> </view> </view> <view class="line"></view> </block> </checkbox-group> <checkbox-group bindchange="checkAll"> <view class="totalInfo"> <view class="all"> <view> <label for="boxAll"> <checkbox checked="{{selectedAll}}" id="boxAll" hidden/> <icon type="{{selectedAll==true?'success':'circle'}}" color="#E4393C" data-value="{{item.id}}" size="20" /> </label> </view> <view> 全选 </view> </view> <view class="amount"> <view class="total"> 总计:¥{{totalPrice}}元 </view> <view> 不含运费,已优惠¥0.00 </view> </view> <view class="opr">去结算</view> </view> </checkbox-group> </view> </view> </view>
shoppingcart.wxss
/* pages/shoppingcart/shoppingcart.wxss */ .content{ font-family: "Microsoft YaHei"; height: 600px; background-color: #F9F9F8; } .info{ background-color: #ffffff; } .line{ border: 1px solid #cccccc; opacity: 0.2; } .receive{ display: flex; flex-direction: row; padding: 10px; } .item{ display: flex; flex-direction: row; padding: 10px; align-items: center; } .order{ width:100%; height: 87px; } .title{ font-size: 15px; } .desc{ display: flex; flex-direction: row; font-size: 13px; color: #cccccc; } .desc view{ margin-right: 10px; } .priceInfo{ display: flex; flex-direction: row; margin-top:10px; } .price{ width: 65%; font-size: 15px; color: #ff0000; text-align: left; } .minus,.add{ border: 1px solid #cccccc; width: 25px; text-align: center; } .count{ border-top: 1px solid #cccccc; border-bottom: 1px solid #cccccc; width: 40px; text-align: center; } .totalInfo{ display: flex; flex-direction: row; height: 60px; } .all{ align-items: center; padding-left: 10px; width: 20%; font-size: 12px; margin-top: 10px; } .amount{ width:50%; font-size: 13px; text-align: right; } .total{ font-size: 16px; color: #ff0000; font-weight: bold; margin-bottom: 10px; } .opr{ position: absolute; right: 0px; width: 80px; font-size: 15px; font-weight: bold; background-color: #E4393C; height: 60px; text-align: center; line-height: 60px; color:#ffffff; } .icon{ margin-right: 10px; }