• 加入购物车清单的处理


    1.当商品不为空时

     <!-- 商品不为空 -->
      <block wx:if="{{shoppingCardPrdNum==1}}">
          
        <view class="shopping-card-top">
            <view class="product-title">
                <text>共{{onSalePrdList.length + saleOutPrdList.length}}个商品</text>
                <view @tap="toggleOperation" class="manage">
                <text hidden="{{operating}}">管理</text>
                <text hidden="{{!operating}}">完成</text>
                </view>
            </view>
    
            <view wx:if="{{onSalePrdList.length > 0}}" class="list-wraper">
              <repeat for="{{onSalePrdList}}" key="index" index="index" item="item">
    
                <view class="slide-item" :class="{'mb-24':(index < onSalePrdList.length-1) || saleOutPrdList.length != 0}">
    
                    <view class="delete-btn flex-container horizontal-center vertical-center" @tap="handleDeleteProduct({{item}})">
                        <text>删除</text>
                    </view>
                    
                    <movable-area style="height:231rpx;" :class="{'show-left':edit_flag}">
                        <movable-view style="height:231rpx;" disabled="{{edit_flag}}" out-of-bounds="true" direction="horizontal" x="{{item.xmove}}" 
                        inertia="true" 
                        damping="40" 
                        friction="5"
                        data-productIndex="{{index}}" 
                        bind:touchstart = "touchS('onsale')" 
                        bind:touchend = "touchE" 
                        bindchange="handleMovableChange('onsale')">
    
                        <view @tap="jumpshoppingdetail({{item.prdId}})" class="padding-ver-30">
                            <view class="product-item flex-container">
                                <view @tap.stop="selectOnsalePrd({{item}},{{index}})" class="product-item-left flex-container horizontal-center vertical-center">
                                <view wx:if="{{item.buy_limit_remain!=0 || operating}}" :class="{'selected':item.selected}" class="common-radio"></view>
                                </view>
                                <orderpanel :prdData.sync="item" class="flex-one">
                                <view slot="prdDesc" @tap.stop="nothing" class="product-counter">
                                    <view class="item-amount flex-container">
                                        <view @tap.stop="reducePrdNum({{item}},{{index}})" class="counter-inner reduce" :class="{'unclickable' : item.buy_num <= 1}">-</view>
                                        <view class="counter-inner text-amount">{{item.buy_num}}</view>
                                        <view @tap.stop="plusPrdNum({{item}},{{index}})" class="counter-inner plus" :class="{'unclickable' : item.buy_num >= item.buy_limit_remain || item.buy_num >= item.buy_limit || item.buy_num >= item.stock_num}">+</view>
                                    </view>
                                </view>
                                </orderpanel>
                            </view>
                        </view>
                        
                        </movable-view>
                    </movable-area>
                </view>
                
                
              </repeat>
            </view>
    
    
            <!-- 已达最大限购数 -->
            <view wx:if="{{overlimitPrdList.length > 0}}" class="sale-out-title">
              <text>已达最大限购数</text>
              <view @tap="clearOverlimitPrd" hidden="{{!operating}}" class="clear-sale-out">清空已购商品</view>
            </view>
    
            <view wx:if="{{overlimitPrdList.length > 0}}" class="list-wraper">
              <repeat for="{{overlimitPrdList}}" key="index" index="index" item="item">
    
                <view class="slide-item mb-1">
    
                    <view class="delete-btn flex-container horizontal-center vertical-center" @tap="handleDeleteProduct({{item}})">
                        <text>删除</text>
                    </view>
                    
                    <movable-area style="height:231rpx;">
                        <movable-view style="height:231rpx;" out-of-bounds="true" direction="horizontal" x="{{item.xmove}}" 
                        inertia="true" 
                        damping="40" 
                        friction="5"
                        data-productIndex="{{index}}" 
                        bind:touchstart = "touchS('overlimit')" 
                        bind:touchend = "touchE" 
                        bindchange="handleMovableChange('overlimit')">
    
                        <view @tap="jumpshoppingdetail({{item.prdId}})" class="product-item flex-container padding-ver-30">
                            <view @tap.stop="selectOverlimitPrd({{item}},{{index}})" class="product-item-left flex-container horizontal-center vertical-center">
                            <view hidden="{{!operating}}" :class="{'selected':item.selected}" class="common-radio"></view>
                            </view>
                            <orderpanel :prdData.sync="item" :isSaleOut.sync="true" class="flex-one">
                                <view slot="prdState" class="sale-out-icon">已购</view>
                                <view slot="prdDesc" class="sale-out-text">已达最大限购数</view>
                            </orderpanel>
                        </view>
                        
    
                        </movable-view>
                    </movable-area>
                </view>
    
              </repeat>
            </view>
    
    
            <!-- 已售罄 -->
            <view wx:if="{{saleOutPrdList.length > 0}}" class="sale-out-title">
              <text>已售罄</text>
              <view @tap="clearSaleoutPrd" hidden="{{!operating}}" class="clear-sale-out">清空售罄商品</view>
            </view>
    
            <view wx:if="{{saleOutPrdList.length > 0}}" class="list-wraper">
              <repeat for="{{saleOutPrdList}}" key="index" index="index" item="item">
    
                <view class="slide-item mb-1">
    
                    <view class="delete-btn flex-container horizontal-center vertical-center" @tap="handleDeleteProduct({{item}})">
                        <text>删除</text>
                    </view>
                    
                    <movable-area style="height:231rpx;">
                        <movable-view style="height:231rpx;" out-of-bounds="true" direction="horizontal" x="{{item.xmove}}" 
                        inertia="true" 
                        damping="40" 
                        friction="5"
                        data-productIndex="{{index}}" 
                        bind:touchstart = "touchS('saleout')" 
                        bind:touchend = "touchE" 
                        bindchange="handleMovableChange('saleout')">
    
                        <view @tap="jumpshoppingdetail({{item.prdId}})" class="product-item flex-container padding-ver-30">
                            <view @tap.stop="selectSaleoutPrd({{item}},{{index}})" class="product-item-left flex-container horizontal-center vertical-center">
                            <view hidden="{{!operating}}" :class="{'selected':item.selected}" class="common-radio"></view>
                            </view>
                            <orderpanel :prdData.sync="item" :isSaleOut.sync="true" class="flex-one">
                                <view slot="prdState" class="sale-out-icon">售罄</view>
                                <view slot="prdDesc" class="sale-out-text">已售罄</view>
                            </orderpanel>
                        </view>
                        
    
                        </movable-view>
                    </movable-area>
                </view>
    
              </repeat>
            </view>
    
        </view>
    
        <view class="shopping-card-bottom">
            <view class="left flex-container">
                <view @tap="selectAll" class="left-part1 flex-container vertical-center" :class="{'hidden':!operating&&onSalePrdList.length==0}">
                  <view :class="{'selected':selectAllFlag}" class="radio-all"></view><text class="select-all-text">全选</text>
                </view>
                <view hidden="{{operating}}" class="left-part2">
                  <view class="left-part2-top"><text>实付</text><text style="padding-left:18rpx;">¥ {{actuallyPay}}</text></view>
                  <view class="left-part2-bottom">
                    <text>原价¥<text style="text-decoration:line-through;">{{originalPrice}}</text></text>
                    <text style="padding-left:12rpx;">补贴¥{{discount}}</text>
                    <text wx:if="{{freight>0}}" style="padding-left:12rpx;">邮费¥{{freight}}</text>
                    <text wx:if="{{freight==0}}" style="padding-left:12rpx;">包邮</text>
                    
                  </view>
                </view>
            </view>
            <view @tap="handleOperation" class="right" :class="{'delete': operating}">
              <text hidden="{{operating}}">结算  ({{userSelectPrdNum}})</text>
              <text hidden="{{!operating}}">删除所选</text>
            </view>
        </view>
      </block>
    

    商品为空时

     <view wx:if="{{shoppingCardPrdNum == 0}}" class="no-order-wraper">
          <image class="no-order-icon" src="https://try.fishqc.com/img/no.png"></image>
          <view class="no-order-title">购物车空空如也,去逛逛吧~</view>
          <!-- <view class="no-order-desc">可以去看看有哪些想买的</view> -->
          <!-- <view class="normal-btn" @tap="toIndex">去逛逛</view> -->
    
          <view wx:if="{{guessdata.length > 0 }}">
              <view class="jianxi"></view>
              <view class="reporttitle center">猜你喜欢</view>
              <view class="navcontain">
                  <view class="productlist"> 
                      <repeat  for="{{guessdata}}" key="index" index="index"  item="aitem">
                          <purchaselist :item="aitem" :listtype="1"></purchaselist>
                      </repeat>
                      
                      <view wx:if="{{guessmoretap}}" class="center maincolor morebtn" @tap="fetchproductlist(1)"><text>查看更多</text></view>
                     <!--  <view wx:if="{{!guessmoretap}}" class="center maincolor morebtn"><text>暂无更多数据了</text></view> -->
                     
                  </view>
              </view>
          </view>
      </view>
    

    2.js部分

      shoppingCardPrdNum: 2,        //1代表购物车有数据,0代表购物车没有数据
      fetchShoppingCardList(){
          return new Promise((resolve, reject) => {
                this.$parent.getshoppingCardData(true).then((res) => {
                    // console.log(res)
                    if(res.data.code == 200){
                        this.isLogin = true
                        
                        this.onSalePrdList = res.data.data.onsale.map((elem,index) => {
                            if(elem.img){
                                elem.img = JSON.parse(elem.img)
                            }
                            elem.buy_limit = Number(elem.buy_limit)
                            elem.buy_limit_remain = Number(elem.buy_limit_remain)
                            elem.buy_num = Number(elem.buy_num)
                            elem.original_price = JSON.parse(elem.original_price)
                            elem.price = JSON.parse(elem.price)
                            elem.stock_num = Number(elem.stock_num)
                            if(elem.freight){
                                elem.freight = JSON.parse(elem.freight)
                            }
                            if(this.selectPrdIdList.has(elem.prdId)){
                                elem.selected = true
                            }else{
                                elem.selected = false
                            }
                            return elem
                        })
    
                        if(res.data.data.overlimit && res.data.data.overlimit.length > 0){
                            this.overlimitPrdList = res.data.data.overlimit.map((elem,index) => {
                                if(elem.img){
                                    elem.img = JSON.parse(elem.img)
                                }
                                if(this.selectPrdIdList.has(elem.prdId)){
                                    elem.selected = true
                                }else{
                                    elem.selected = false
                                }
                                return elem
                            })
                        }
                        
                        
                        
                        this.saleOutPrdList = res.data.data.sellout.map((elem,index) => {
                            if(elem.img){
                                elem.img = JSON.parse(elem.img)
                            }
                            if(this.selectPrdIdList.has(elem.prdId)){
                                elem.selected = true
                            }else{
                                elem.selected = false
                            }
                            return elem
                        })
    
                        // 把售罄的商品从用户选择列表剔除
                        if(this.selectPrdIdList.size > 0 && this.saleOutPrdList.length > 0){
                            this.saleOutPrdList.forEach(elem => {
                                if(this.selectPrdIdList.has(elem.prdId)){
                                    this.selectPrdIdList.delete(elem.prdId)
                                }
                            });
                        }
    
                        // 把超出购买限制的商品从用户选择列表剔除
                        if(this.selectPrdIdList.size > 0 && this.overlimitPrdList.length > 0){
                            this.overlimitPrdList.forEach(elem => {
                                if(this.selectPrdIdList.has(elem.prdId)){
                                    this.selectPrdIdList.delete(elem.prdId)
                                }
                            });
                        }
                        
                        
                        this.$nextTick(() => {
                            resolve(res)
                        })
                        this.shoppingCardPrdNum = 1
                        
                    }
                    else if(res.data.code == 204){
                        //没有数据
                        this.isLogin = true
                        this.onSalePrdList = []
                        this.saleOutPrdList = []
                        this.overlimitPrdList = []
                        this.shoppingCardPrdNum = 0
    
                        //获取 猜你喜欢数据
                        this.fetchproductlist(0);
    
                        resolve(res)
    
                    }
                    else if(res.data.code == 401){
                        //需要登录
                        this.onSalePrdList = []
                        this.saleOutPrdList = []
                        this.overlimitPrdList = []
                        this.isLogin = false
                        resolve(res)
                    }
                    else{
                        this.$parent.toasttips(res.data.message)
                        resolve(res)
                    }
                    this.$apply()
                    
                    
    
                }).catch((err) => {
                    reject(err)
                });
          })
          
        }
    
  • 相关阅读:
    [转]C++ Operator Overloading Guidelines
    SICP学习笔记(2.2.1)
    .net中模拟键盘和鼠标操作
    javaScript系列 [17]运算符
    javaScript系列 [24]Math
    javaScript系列 [19]string
    javaScript系列 [22]引用类型
    javaScript系列 [12]Canvas绘图(曲线)
    javaScript系列 [15]Canvas绘图(压缩)
    javaScript系列 [21]Array
  • 原文地址:https://www.cnblogs.com/antyhouse/p/9851447.html
Copyright © 2020-2023  润新知