小程序--购物车全选与单选的实现

之前不会,现在弄懂了,就记录下来哈,看代码

## wxml代码

	<!-- 当购物车有商品时 -->
	<view>
		<!-- 旗舰店标题 -->
		<view class="cartTitleBigView">
			<view class="text1">
				<image src="/images/indexImages/icon13.png" class="img1"></image>
				<view>青岛啤酒官方旗舰店</view>
				<image src="/images/indexImages/icon2.png" class="img2"></image>
			</view>
			<view class="text2" bindtap="editorGoods">{{editor}}</view>
		</view>
		<!-- 购物车商品 -->
		<checkbox-group bindchange="checkboxChange">
			<view class="cartGoodsBigView" wx:for="{{cartGoodsList}}" wx:key="key">
				<!-- 换购 -->
				<!-- <view class="buyBigView">
					<checkbox class="radio" value="{{item.goods_id}}" checked="{{item.checked}}"></checkbox>
					<view class="text1">换购</view>
					<view class="text2">
						<text>再购40元,立享【满99元可换购】</text>
						<image src="/images/indexImages/icon11.png"></image>
					</view>
					<view class="text3">
						<text>去凑单</text>
						<image src="/images/indexImages/icon12.png"></image>
					</view>
				</view> -->
				<!-- 商品信息 -->
				<view class="goodsInfoBigView">
					<view style="display:flex;height:180rpx;align-items: center;">
							<checkbox class="radio" value="{{item.goods_id}}" checked="{{item.checked}}"></checkbox>		
						<image src="/images/indexImages/img02.png" class="goodsInfoImage"></image>
					</view>
					<view class="goodsInfoView">
						<view class="text1">青岛啤酒10度500ml*12福禧罐/箱</view>
						<view class="text2">
							<text>500ml*12听</text>
							<image src="/images/indexImages/smartIdentify.png"></image>
						</view>
						<view class="text3">担保</view>
						<view class="goodsInfoPriceView">
							<view><text class="price">59</text></view>
							<view class="goodsInfoNumberView">
								<view style="{{num==0?'backcolor:#f7f8fa;color:#c8c9cc;':''}}" bindtap="reduceNum">-</view>
								<view>{{num}}</view>
								<view bindtap="increaseNum">+</view>
							</view>
						</view>
					</view>
				</view>
			</view>
		</checkbox-group>
	</view>
<!-- 编辑商品 弹出框 -->
<view class="edtiorBigView">
	<checkbox-group class="checkAllView" bindtap="checkAll">
		<label>
			<checkbox checked="{{select_all}}"></checkbox>全选
		</label>
	</checkbox-group>
	<view class="delete {{select_single?'deleteSelect':''}}" wx:if="{{editor=='完成'}}" bindtap="delete_car">删除</view>
	<view wx:else class="settlementView">
		<view class="totalView">
			<view class="text1">合计:<text class="text2"></text><text class="text3">59</text></view>
			<view class="text4">不含运费</view>
		</view>
		<view class="settlement {{select_single?'settlementSelect':''}}">结算</view>
	</view>
</view>

## wxssl代码

/* 旗舰店标题 */
.cartTitleBigView{
  width: 100%;
  height: 100rpx;
  background-color: white;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 30rpx;
  box-sizing: border-box;
}
.cartTitleBigView .text1{
  height: 100%;
  display: flex;
  align-items: center;
  font-size: 37rpx;
  color: #333333;
}
.cartTitleBigView .text1 .img1{
  width:33rpx ;
  height: 33rpx;
  margin:5rpx 15rpx 0 0;
}
.cartTitleBigView .text1 .img2{
  width: 30rpx;
  height: 30rpx;
  margin:5rpx 0 0 15rpx;
}
.cartTitleBigView .text2{
  font-size: 32rpx;
  color: #505050;
}
/* 购物车商品 */
.cartGoodsBigView{
  width: 95%;
  margin: 30rpx auto;
  background-color: white;
  border-radius: 20rpx;
  padding: 30rpx 20rpx;
  box-sizing: border-box;
}
/* 换购 */
.buyBigView{
  width: 100%;
  display: flex;
  align-items: center;
  box-sizing: border-box;
  margin-bottom: 40rpx;
}
checkbox .wx-checkbox-input {
  /* 自定义样式.... */
  height: 35rpx;
  width: 35rpx;
  border-radius: 50%;
  border: 2rpx solid #6cbe72;
  background: transparent;
  margin-bottom: 5rpx;
}

checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
  border-radius: 50%; /* 圆角 */
  width: 35rpx; /* 选中对勾后,对勾背景的大小,不要超过背景的尺寸 */
  height: 35rpx; /* 选中对勾后,对勾背景的大小,不要超过背景的尺寸 */
  line-height: 35rpx;
  text-align: center;
  font-size: 25rpx; /* 对勾大小 30rpx */
  color: #fff; /* 对勾颜色 白色 */
  background: #6cbe72;
  transform: translate(-50%, -50%) scale(1);
  -webkit-transform: translate(-50%, -50%) scale(1);
}
.buyBigView .text1{
   padding: 3rpx 8rpx;
   box-sizing: border-box;
   background-color: #f0f9f1;  
   border-radius: 50rpx;
   font-size: 26rpx;
   color: #6cbe72;
   margin-right: 10rpx;
}
.buyBigView .text2{
  flex: 1;
  display: flex;
  align-items: center;
  font-size: 27rpx;
  color: #333333;
}
.buyBigView .text2 image{
    width: 35rpx;
    height: 35rpx;  
}
.buyBigView .text3{
  display: flex;
  align-items: center;
  font-size: 27rpx;
  color:#6cbe72 ;
}
.buyBigView .text3 image{
  width: 25rpx;
  height: 25rpx;
  margin-top: 5rpx;
}
/* 商品信息 */
.goodsInfoBigView{
  width: 100%;
  display: flex;
}
.goodsInfoImage{
  width: 190rpx;
  height:190rpx;
  border-radius: 20rpx;
  margin-right: 15rpx;
}
.goodsInfoView{
  flex:1;
  height: 100%;
  font-size: 28rpx;
  word-break: break-all;
}
.goodsInfoView .text2{
  width: 220rpx;
  background-color: #f7f8fa;
  padding: 0 20rpx;
  box-sizing: border-box;
  height: 50rpx;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 20rpx 0;
  font-size: 26rpx;
  color: #969799;
  border-radius: 10rpx;
}
.goodsInfoView .text2 image{
  width: 25rpx;
  height: 25rpx;
}
.goodsInfoView .text3{
  font-size: 26rpx;
  color: #0cc363;
  margin-bottom: 20rpx;
}
.goodsInfoPriceView{
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 30rpx;
  color:#7ac47f;
}
.goodsInfoPriceView .price{
  font-size: 40rpx;
  font-weight: bold;
}
.goodsInfoNumberView{
  display: flex;
  align-items: center;
  color: #323233;
}
.goodsInfoNumberView>view{
  width: 70rpx;
  height: 60rpx;
  background-color:#f7f8fa;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-left: 5rpx;
  font-size:35rpx;
  border-radius: 5rpx;
}

/* 编辑弹出框 */
pages{
  position: relative;
}
.edtiorBigView{
  width: 100%;
  background-color: white;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding:15rpx 30rpx;
  box-sizing: border-box;
  position: fixed;
  bottom: 0;
  left: 0;
}
.checkAllView{
  display: flex;
  align-items: center;
  font-size: 33rpx;
  color: #585858;
}
.edtiorBigView .delete{
  width: 220rpx;
  height: 90rpx;
  font-size: 40rpx;
  font-weight: bold;
  background-color: #e7e9ec;
  color: #969799;
  text-align: center;
  line-height: 80rpx;
  border-radius: 50rpx;
}
.edtiorBigView .deleteSelect{
  background-color: #6cbe72;
  color: white;
}
/* 结算 */
.settlementView{
  display: flex;
  align-items: center;
}
.totalView{
  margin-right: 20rpx;
  text-align: right;
}
.totalView .text1{
  font-size: 28rpx;
  font-weight: bold;
}
.totalView .text2{
  color:#6cbe72 ;
}
.totalView .text3{
  font-size: 35rpx;
  color:#6cbe72 ;
}
.totalView .text4{
  color:gray ;
  font-size: 30rpx;
}
.settlementView .settlement{
  width: 220rpx;
  height: 90rpx;
  font-size: 40rpx;
  font-weight: bold;
  background-color: #e7e9ec;
  color: #969799;
  text-align: center;
  line-height: 80rpx;
  border-radius: 50rpx;
}
.settlementView .settlementSelect{
  background-color: #6cbe72;
  color: white;
}

JS代码

data:{
// 购物车商品
cartGoodsList:[
{},
{},
{},
],
// 全选
select_all: false,
select_single:false, //单选
checkbox_goodsid:'',
// 商品数量
num:0,
// 编辑
editor:'编辑',
},

// 编辑商品
  editorGoods:function(){
    var that=this;
    var arr='0';
    if(this.data.editor=='编辑'){  //所有商品不被选中
      for (let i = 0; i < that.data.cartGoodsList.length; i++) {
        //循环给每个商品的checked赋值
          that.data.cartGoodsList[i].checked =false
        }
        console.log("arr="+arr)
        //赋值
         that.setData({
          cartGoodsList: that.data.cartGoodsList,
           select_all:false,
           editor:'完成'
         })
    }else{
      this.setData({
        editor:'编辑'
      })
    }
  },
  // 全选
  checkAll:function(){
    this.setData({
      checkAll:!this.data.checkAll,
    })
    var that=this;
    var arr='0';
      //that.data.cartGoodsList.length是商品的个数
    for (let i = 0; i < that.data.cartGoodsList.length; i++) {
      //循环给每个商品的checked赋值
        that.data.cartGoodsList[i].checked = (!that.data.select_all)
        if (that.data.cartGoodsList[i].checked == true) {
          // 全选获取选中的值  以字符串拼接的形式 拼成一个字符串
           arr = arr  +","+ that.data.cartGoodsList[i].goods_id;
        }
      }
      console.log("arr="+arr)
      //赋值
       that.setData({
        cartGoodsList: that.data.cartGoodsList,
         select_all: (!that.data.select_all),
         checkbox_goodsid: arr
       })
      //  设置按钮的颜色
       if(that.data.select_all==true){
          that.setData({
            select_single:true
          })
       }else{
        that.setData({
          select_single:false
        })
       }
  },
  
   // 单选
   checkboxChange: function (e) {
    var that =this;
    //这加个0 是我为了方便后台处理。
    var checkbox_goodsid = 0+ ','+that.data.checkbox_goodsid;
    this.setData({
      checkbox_goodsid: checkbox_goodsid,//单个选中的值
    })
    console.log("checkbox_goodsid=" +that.data.checkbox_goodsid)
  
    // 计算选中了多少个商品   //  设置按钮的颜色
    var value=e.detail.value;
    console.log(value.length);
    console.log(that.data.cartGoodsList.length);  //总商品的个数
   if(value.length>0 &&value.length<that.data.cartGoodsList.length){
       //选中有但没有完全选中时
       that.setData({
        select_single:true,
        select_all:false,
         })
   }else if(value.length==that.data.cartGoodsList.length){
     //商品全部选中的时候
      that.setData({
         select_single:true,
         select_all:true,
        })
   }else{  //没有选中商品时
    that.setData({
      select_single:false,
      select_all:false,
     })
   }
   
  },

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值