You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							956 lines
						
					
					
						
							27 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							956 lines
						
					
					
						
							27 KiB
						
					
					
				
								<template>
							 | 
						|
								<view id="store-cart">
							 | 
						|
									<lf-nav title="购物车"></lf-nav>
							 | 
						|
								    <view class="discount-box">
							 | 
						|
								        <!--登录状态-->
							 | 
						|
								        <view class="is-login" v-if="(is_login && discounts.length) || (is_login && coupons.length)">
							 | 
						|
								            <view class="promotion-box">
							 | 
						|
								                <view class="promotion" @tap="changeDiscounts" v-if="discounts.length">
							 | 
						|
								                    <view class="title" :style="'color: ' + config.mainColor + '; border-color: ' + config.mainColor">
							 | 
						|
								                        {{discounts[0].tags}}
							 | 
						|
								                    </view>
							 | 
						|
								                    <view>
							 | 
						|
								                        {{discounts[0].label}} >
							 | 
						|
								                    </view>
							 | 
						|
								                </view>
							 | 
						|
								            </view>
							 | 
						|
								            <view class="coupon mx-1px-left" :style="'color: ' + config.mainColor + ';'" @tap="changeCoupons" v-if="coupons.length">
							 | 
						|
								                优惠券
							 | 
						|
								            </view>
							 | 
						|
								        </view>
							 | 
						|
								        <!--未登录状态-->
							 | 
						|
								        <div class="no-login" v-if="!is_login" @tap="goLogin">
							 | 
						|
								            <div class="left">
							 | 
						|
								                <i class="iconfont icon-warning"></i>
							 | 
						|
								                <div>
							 | 
						|
								                    <span>登录</span>后查看是否享受优惠
							 | 
						|
								                </div>
							 | 
						|
								            </div>
							 | 
						|
								            <div class="right">
							 | 
						|
								                登录 >
							 | 
						|
								            </div>
							 | 
						|
								        </div>
							 | 
						|
								    </view>
							 | 
						|
									<view class="no-goods" v-if="list && list.length == 0">
							 | 
						|
										<image mode="widthFix" src="https://cdn.guojiang.club/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20200323164958.png"></image>
							 | 
						|
									</view>
							 | 
						|
								    <view class="goods-box" v-if="list && list.length">
							 | 
						|
								        <checkbox-group @change="changeCheck">
							 | 
						|
								            <view class="goods-item mx-1px-bottom" v-for="(item, index) in list" :key="index">
							 | 
						|
								                <view class="input">
							 | 
						|
								                    <label class="checkbox">
							 | 
						|
								                        <!-- #ifdef APP-PLUS -->
							 | 
						|
								                        <checkbox :value="String(index)" color="red" :checked="item.checked"></checkbox>
							 | 
						|
								                        <!-- #endif -->
							 | 
						|
														<!-- #ifdef MP-WEIXIN -->
							 | 
						|
														<checkbox :value="String(index)" color="#FFFFFF" :checked="item.checked"></checkbox>
							 | 
						|
														<!-- #endif -->
							 | 
						|
														<!-- #ifdef H5 -->
							 | 
						|
														<checkbox :value="String(index)" color="red" :checked="item.checked"></checkbox>
							 | 
						|
														<!-- #endif -->
							 | 
						|
														{{item.value!=undefined?item.value:''}}
							 | 
						|
								                    </label>
							 | 
						|
								                </view>
							 | 
						|
								                <view class="img-box" :data-id="item.com_id" @tap.stop="jump">
							 | 
						|
								                    <image :src="item.img"></image>
							 | 
						|
								                </view>
							 | 
						|
								                <view class="item-info">
							 | 
						|
								                    <view class="name" :data-id="item.com_id" @tap.stop="jump">
							 | 
						|
								                        {{item.name}}
							 | 
						|
								                    </view>
							 | 
						|
								                    <view class="money-box" :data-id="item.com_id" @tap.stop="jump">
							 | 
						|
								                        <view class="model">
							 | 
						|
								                            {{item.color}} <span v-if="item.color && item.size">,</span> {{item.size}}
							 | 
						|
								                        </view>
							 | 
						|
								                        <view class="money">
							 | 
						|
								                            ¥{{item.total}}
							 | 
						|
								                        </view>
							 | 
						|
								                    </view>
							 | 
						|
								                    <view class="mun-box">
							 | 
						|
								                        <view class="change-num">
							 | 
						|
								                            <view class="ul-list-content">
							 | 
						|
								                                <view class="item" :data-index="index" data-change="0" @tap="changeCount">-</view>
							 | 
						|
								                                <view class="item"><input type="number" :value="item.qty" :data-index="index" @change="modifyCount" /></view>
							 | 
						|
								                                <view class="item" :data-index="index" data-change="1" @tap="changeCount">+</view>
							 | 
						|
								                            </view>
							 | 
						|
								                        </view>
							 | 
						|
								                        <view class="remove" @tap="removeFromCart" :data-index="index">
							 | 
						|
								                            移除
							 | 
						|
								
							 | 
						|
								                        </view>
							 | 
						|
								                    </view>
							 | 
						|
								                </view>
							 | 
						|
								            </view>
							 | 
						|
								
							 | 
						|
								        </checkbox-group>
							 | 
						|
								    </view>
							 | 
						|
								    <view class="buy-box">
							 | 
						|
								        <label class="checkbox">
							 | 
						|
								           <!-- #ifdef APP-PLUS -->
							 | 
						|
								            <checkbox value="all" color="red" :checked="allCheck" @tap="selectAll"></checkbox>
							 | 
						|
								           <!-- #endif -->
							 | 
						|
										   <!-- #ifdef MP-WEIXIN -->
							 | 
						|
										   <checkbox value="all" color="#FFFFFF" :checked="allCheck" @tap="selectAll"></checkbox>
							 | 
						|
										   <!-- #endif -->
							 | 
						|
										   <!-- #ifdef H5 -->
							 | 
						|
										   <checkbox value="all" color="red" :checked="allCheck" @tap="selectAll"></checkbox>
							 | 
						|
										   <!-- #endif -->
							 | 
						|
								            <text>全选</text>
							 | 
						|
								        </label>
							 | 
						|
								        <view class="money-box">
							 | 
						|
								            商品总计:<text>¥{{select_products.total!=undefined?select_products.total:''}}</text>
							 | 
						|
								        </view>
							 | 
						|
								        <button class="num-box" :style="'background: ' + config.mainColor" @tap="order" :loading="loading">
							 | 
						|
								            结算<text>{{'('+ select_products.count + ')' || 0}}</text>
							 | 
						|
								        </button>
							 | 
						|
								    </view>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    <!--选择优惠券部分-->
							 | 
						|
								    <view class="maks" :class="show_coupons ? 'cur' : ''" @tap="showCoupons">
							 | 
						|
								
							 | 
						|
								    </view>
							 | 
						|
								    <view class="select-coupon-box" :class="show_coupons ? 'cur' : ''">
							 | 
						|
								        <view class="select-coupon">
							 | 
						|
								            <view class="select-coupon-top">
							 | 
						|
								                <view class="title">
							 | 
						|
								                    领取优惠券
							 | 
						|
								
							 | 
						|
								                    <view class="close" @tap="showCoupons">
							 | 
						|
								                        X
							 | 
						|
								                    </view>
							 | 
						|
								                </view>
							 | 
						|
								            </view>
							 | 
						|
								
							 | 
						|
								            <view class="select-coupon-bottom">
							 | 
						|
								                <view class="title">
							 | 
						|
								                    可领优惠券
							 | 
						|
								                </view>
							 | 
						|
								                <view class="coupon-box">
							 | 
						|
								                    <view class="coupon-item" v-for="(item, index) in coupons" :key="index" v-if="item.is_open">
							 | 
						|
								                        <view class="coupon">
							 | 
						|
								                            <view class="coupon-left">
							 | 
						|
								                                <view class="text-wrap">
							 | 
						|
								                                    <view class="text-box">
							 | 
						|
								                                        <view class="text">
							 | 
						|
								                                            <span class="money" v-if="item.action_type.type == 'cash'">¥</span>
							 | 
						|
								                                            <span class="num">{{ item.action_type.value }}</span>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								                                            <span class="money" v-if="item.action_type.type == 'discount'">折</span>
							 | 
						|
								                                        </view>
							 | 
						|
								                                        <span class="label text">{{ item.label }}</span>
							 | 
						|
								                                    </view>
							 | 
						|
								
							 | 
						|
								                                </view>
							 | 
						|
								                                <view class="dot-wrap">
							 | 
						|
								                                    <view class="dot-item">
							 | 
						|
								
							 | 
						|
								                                    </view>
							 | 
						|
								                                    <view class="dot-item">
							 | 
						|
								
							 | 
						|
								                                    </view>
							 | 
						|
								                                    <view class="dot-item">
							 | 
						|
								
							 | 
						|
								                                    </view>
							 | 
						|
								                                    <view class="dot-item">
							 | 
						|
								
							 | 
						|
								                                    </view>
							 | 
						|
								                                    <view class="dot-item">
							 | 
						|
								
							 | 
						|
								                                    </view>
							 | 
						|
								                                </view>
							 | 
						|
								                            </view>
							 | 
						|
								                            <view class="coupon-right">
							 | 
						|
								                                <view class="top">
							 | 
						|
								                                <span>
							 | 
						|
								                                    <span class="type" v-if="item.channel == 'ec'">商店</span>
							 | 
						|
								                                    <span class="type" v-if="item.channel == 'shop'">门店</span>
							 | 
						|
								                                </span>
							 | 
						|
								                                    <span class="info">{{item.title}}</span>
							 | 
						|
								                                </view>
							 | 
						|
								                                <view class="bottom">
							 | 
						|
								                                    <view class="bottom-use">
							 | 
						|
								                                        <view class="tiem-box">
							 | 
						|
								                                            <text>{{item.use_start_time}}至{{item.use_end_time}}</text>
							 | 
						|
								                                        </view>
							 | 
						|
								                                        <view class="btn use" :style="'background: ' + config.mainColor + '; border-color: ' + config.mainColor" :data-code="item.code" :data-index="index" v-if="!coupons[index].receive" @tap="getCoupon">
							 | 
						|
								                                            点击领取
							 | 
						|
								
							 | 
						|
								                                        </view>
							 | 
						|
								                                        <view class="btn already" v-else>
							 | 
						|
								                                            已领取
							 | 
						|
								
							 | 
						|
								                                        </view>
							 | 
						|
								
							 | 
						|
								                                    </view>
							 | 
						|
								                                </view>
							 | 
						|
								                            </view>
							 | 
						|
								                        </view>
							 | 
						|
								                    </view>
							 | 
						|
								                </view>
							 | 
						|
								
							 | 
						|
								            </view>
							 | 
						|
								
							 | 
						|
								        </view>
							 | 
						|
								    </view>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    <!--查看促销部分-->
							 | 
						|
								
							 | 
						|
								    <view class="maks" :class="show_discounts ? 'cur' : ''" @tap="showDiscounts">
							 | 
						|
								
							 | 
						|
								    </view>
							 | 
						|
								
							 | 
						|
								    <view class="see-discounts-box" :class="show_discounts ? 'cur' : ''">
							 | 
						|
								        <view class="select-discounts">
							 | 
						|
								            <view class="select-discounts-top">
							 | 
						|
								                <view class="title">
							 | 
						|
								                    促销
							 | 
						|
								                    <view class="close" @tap="showDiscounts">
							 | 
						|
								                        X
							 | 
						|
								                    </view>
							 | 
						|
								                </view>
							 | 
						|
								            </view>
							 | 
						|
								
							 | 
						|
								            <view class="select-discounts-bottom">
							 | 
						|
								                <view class="discounts-box">
							 | 
						|
								                    <view class="disconts-item mx-1px-bottom" v-for="(item, index) in discounts" :key="index">
							 | 
						|
								                        <view class="discounts-tags-title" :style="'color: ' + config.mainColor + '; border-color: ' + config.mainColor">
							 | 
						|
								                            {{item.tags}}
							 | 
						|
								                        </view>
							 | 
						|
								                        <view class="tags-item">
							 | 
						|
								                            {{item.label}}
							 | 
						|
								                        </view>
							 | 
						|
								                    </view>
							 | 
						|
								                </view>
							 | 
						|
								            </view>
							 | 
						|
								
							 | 
						|
								        </view>
							 | 
						|
								    </view>
							 | 
						|
									<lf-tabbar></lf-tabbar>
							 | 
						|
								</view>
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								</template>
							 | 
						|
								<script>
							 | 
						|
								import {pageLogin, getUrl,config} from '@/common/js/utils.js';
							 | 
						|
								import lfNav from '@/components/lf-nav/lf-nav.vue';
							 | 
						|
								import lfTabbar from '@/components/lf-tabbar/lf-tabbar.vue';
							 | 
						|
								
							 | 
						|
								export default {
							 | 
						|
								  data() {
							 | 
						|
								    return {
							 | 
						|
								      is_login: '',
							 | 
						|
								      list: [],
							 | 
						|
								      groupList: [],
							 | 
						|
								      select_products: {},
							 | 
						|
								      allCheck: true,
							 | 
						|
								      channel: 'normal',
							 | 
						|
								      loading: false,
							 | 
						|
								      show_coupons: false,
							 | 
						|
								      // 领取优惠券
							 | 
						|
								      show_discounts: false,
							 | 
						|
								      // 查看促销活动
							 | 
						|
								      goodsList: [],
							 | 
						|
								      // 购物车里存在的商品id
							 | 
						|
								      config: '',
							 | 
						|
								      author: config.PACKAGES.author,
							 | 
						|
									  discounts:'',
							 | 
						|
									  coupons:''
							 | 
						|
								    };
							 | 
						|
								  },
							 | 
						|
								
							 | 
						|
								  onShow() {
							 | 
						|
								    // var oauth = Cache.get(cache_keys.token);
							 | 
						|
								    // var locals = Cache.get(cache_keys.cart);
							 | 
						|
								    var is_login = this.$cookieStorage.get('user_token');
							 | 
						|
								    this.setData({
							 | 
						|
								      is_login: is_login,
							 | 
						|
								      loading: false
							 | 
						|
								    });
							 | 
						|
								    var oauth = this.is_login; 
							 | 
						|
								
							 | 
						|
								    var locals = this.$cookieStorage.get('cart');
							 | 
						|
								
							 | 
						|
								    if (oauth && locals && locals.length) {
							 | 
						|
								      // 提交本地购物车
							 | 
						|
								      this.appendToCart(locals);
							 | 
						|
								    } else {
							 | 
						|
								      this.queryCartList();
							 | 
						|
								    } // let app =getApp();
							 | 
						|
								    // app.isBirthday().then(()=>{
							 | 
						|
								    //     if(this.$cookieStorage.get("birthday_gift")){
							 | 
						|
								    //         var giftData=this.$cookieStorage.get("birthday_gift").data;
							 | 
						|
								    //         new app.ToastPannel().__page.showText(giftData);
							 | 
						|
								    //     }
							 | 
						|
								    // });
							 | 
						|
								
							 | 
						|
								  },
							 | 
						|
								
							 | 
						|
								  onLoad() {
							 | 
						|
								    // 第三方平台配置颜色
							 | 
						|
								    var bgConfig = this.$cookieStorage.get('globalConfig') || '';
							 | 
						|
								    this.setData({
							 | 
						|
								      config: bgConfig
							 | 
						|
								    });
							 | 
						|
								  },
							 | 
						|
								
							 | 
						|
								  components: {
							 | 
						|
									  lfNav,
							 | 
						|
									  lfTabbar
							 | 
						|
								  },
							 | 
						|
								  props: {},
							 | 
						|
								  methods: {
							 | 
						|
								    jump(e) {
							 | 
						|
								      var id = e.currentTarget.dataset.id;
							 | 
						|
								      wx.navigateTo({
							 | 
						|
								        url: '/pages/store/detail/detail?id=' + id
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    select_product() {
							 | 
						|
								      var data = {
							 | 
						|
								        count: 0,
							 | 
						|
								        total: 0,
							 | 
						|
								        __ids: []
							 | 
						|
								      };
							 | 
						|
								      this.list.forEach(v => {
							 | 
						|
								        if (v.checked) {
							 | 
						|
								          data.count += parseInt(v.qty);
							 | 
						|
								          data.total += Number(v.total);
							 | 
						|
								
							 | 
						|
								          data.__ids.push(v.__raw_id || v.index);
							 | 
						|
								        } else {
							 | 
						|
								          this.setData({
							 | 
						|
								            allCheck: false
							 | 
						|
								          });
							 | 
						|
								        }
							 | 
						|
								      });
							 | 
						|
								      this.setData({
							 | 
						|
								        select_products: data
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    addCart(success, message) {
							 | 
						|
								      // this.$refs.button.finish();
							 | 
						|
									  
							 | 
						|
								      // this.setData({
							 | 
						|
								      //   loading: false
							 | 
						|
								      // });
							 | 
						|
									  
							 | 
						|
									  console.log(success);
							 | 
						|
									  
							 | 
						|
									  this.loading=false;
							 | 
						|
								
							 | 
						|
								      if (success) {
							 | 
						|
								        this.$cookieStorage.clear('cart'); // wx.removeStorageSync('cart')
							 | 
						|
								        // TODO
							 | 
						|
								        //this.$emit('readyCheckout');
							 | 
						|
								
							 | 
						|
								        this.queryCartList();
							 | 
						|
								      } else {
							 | 
						|
								        this.$cookieStorage.clear('cart'); // wx.removeStorageSync('cart')
							 | 
						|
								
							 | 
						|
								        wx.showModal({
							 | 
						|
								          title: message || '保存本地购物车失败,请重试!'
							 | 
						|
								        });
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    order() {
							 | 
						|
								      var data = this.select_products;
							 | 
						|
								
							 | 
						|
								      if (!data.count) {
							 | 
						|
								        // this.$refs.button.finish();
							 | 
						|
								        return;
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      ;
							 | 
						|
								      this.setData({
							 | 
						|
								        loading: true
							 | 
						|
								      });
							 | 
						|
								      var oauth = this.is_login;
							 | 
						|
								
							 | 
						|
								      if (!oauth) {
							 | 
						|
								        // 滚去登录
							 | 
						|
								        var url = getUrl(); // this.$router.go({ name: 'user-quick-login', query: { source: this.$route.path } });
							 | 
						|
								
							 | 
						|
								        wx.navigateTo({
							 | 
						|
								          url: '/pages/user/register/register?url=' + url
							 | 
						|
								        });
							 | 
						|
								        return;
							 | 
						|
								      } // var locals = wx.getStorageSync('cart');
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								      var locals = this.$cookieStorage.get('cart');
							 | 
						|
								
							 | 
						|
								      if (locals && locals.length) {
							 | 
						|
								        // 提交本地购物车
							 | 
						|
								        this.appendToCart(locals);
							 | 
						|
								        return;
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      this.readyCheckout();
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    readyCheckout() {
							 | 
						|
								      var ids = this.select_products.__ids;
							 | 
						|
								      var type = this.channel;
							 | 
						|
								      this.checkoutOrder(ids, type);
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    checkoutOrder(ids, type) {
							 | 
						|
								      var oauth = this.is_login;
							 | 
						|
								      var cart_ids = ids.filter(id => id);
							 | 
						|
								      var wechat_group_id = this.$cookieStorage.get('openGId') || '';
							 | 
						|
								      var that = this;
							 | 
						|
								      this.$http.post({
							 | 
						|
								        api: `api/shopping/order/checkout`,
							 | 
						|
								        data: {
							 | 
						|
								          cart_ids,
							 | 
						|
								          type,
							 | 
						|
								          wechat_group_id
							 | 
						|
								        },
							 | 
						|
								        header: {
							 | 
						|
								          Authorization: oauth
							 | 
						|
								        },
							 | 
						|
								        method: 'POST'
							 | 
						|
								      }).then(res => {
							 | 
						|
								        res = res.data;
							 | 
						|
								
							 | 
						|
								        if (res.status) {
							 | 
						|
								          // Cache.set(cache_keys.order, res.data);
							 | 
						|
								          // wx.setStorageSync('local_order',res.data)
							 | 
						|
								          this.$cookieStorage.set('local_order', res.data);
							 | 
						|
								          that.checkout(true);
							 | 
						|
								        } else {
							 | 
						|
								          that.checkout(false, res.message);
							 | 
						|
								        }
							 | 
						|
								      }).catch(() => {
							 | 
						|
								        that.checkout(false);
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    checkout(success, message) {
							 | 
						|
								      // this.$refs.button.finish();
							 | 
						|
								      this.setData({
							 | 
						|
								        loading: false
							 | 
						|
								      });
							 | 
						|
								
							 | 
						|
								      if (success) {
							 | 
						|
								        // this.$router.go({ name: 'store-order'});
							 | 
						|
								        wx.navigateTo({
							 | 
						|
								          url: '/pages/store/order/order'
							 | 
						|
								        });
							 | 
						|
								      } else {
							 | 
						|
								        // this.$Alert(message || '结算失败,请重试!');
							 | 
						|
								        if (message == 'User unbind mobile') {
							 | 
						|
								          wx.showModal({
							 | 
						|
								            content: '请先绑定手机号',
							 | 
						|
								            showCancel: false,
							 | 
						|
								            success: res => {
							 | 
						|
								              if (res.confirm || !res.cancel && !res.confirm) {
							 | 
						|
								                wx.navigateTo({
							 | 
						|
								                  url: '/pages/user/phone/phone?url=' + getUrl()
							 | 
						|
								                });
							 | 
						|
								              }
							 | 
						|
								            }
							 | 
						|
								          });
							 | 
						|
								        } else {
							 | 
						|
								          wx.showModal({
							 | 
						|
								            content: message || '结算失败,请重试!',
							 | 
						|
								            showCancel: false
							 | 
						|
								          });
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    queryCartList() {
							 | 
						|
								      // var data = wx.getStorageSync('cart') || [];
							 | 
						|
								      var data = this.$cookieStorage.get('cart') || []; // var oauth = Cache.get(cache_keys.token);
							 | 
						|
								
							 | 
						|
								      var oauth = this.is_login;
							 | 
						|
								
							 | 
						|
								      if (!oauth) {
							 | 
						|
								        this.setData({
							 | 
						|
								          list: data
							 | 
						|
								        });
							 | 
						|
								        this.select_product();
							 | 
						|
								        this.groupListF();
							 | 
						|
								        return;
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      var that = this;
							 | 
						|
								      this.$http.get({
							 | 
						|
								        api: `api/shopping/cart`,
							 | 
						|
								        header: {
							 | 
						|
								          Authorization: oauth
							 | 
						|
								        }
							 | 
						|
								      }).then(res => {
							 | 
						|
								        res = res.data;
							 | 
						|
								        var data = [];
							 | 
						|
								
							 | 
						|
								        if (res.status && res.data) {
							 | 
						|
								          data = Object.keys(res.data).map(key => {
							 | 
						|
								            res.data[key].checked = true;
							 | 
						|
								            return res.data[key];
							 | 
						|
								          }).concat(data); // 购物车领券
							 | 
						|
								
							 | 
						|
								          if (data.length) {
							 | 
						|
								            var list = [];
							 | 
						|
								            data.forEach(v => {
							 | 
						|
								              if (that.goodsList.indexOf(v.com_id) == -1) {
							 | 
						|
								                list.push(v.com_id);
							 | 
						|
								              }
							 | 
						|
								
							 | 
						|
								              ;
							 | 
						|
								            });
							 | 
						|
								            this.setData({
							 | 
						|
								              goodsList: list
							 | 
						|
								            });
							 | 
						|
								            this.cardDiscount(list);
							 | 
						|
								          }
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        that.setData({
							 | 
						|
								          list: data
							 | 
						|
								        });
							 | 
						|
								        that.select_product();
							 | 
						|
								        that.groupListF();
							 | 
						|
								      }).catch(rej=> {
							 | 
						|
								        this.addCart(false);
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    updated(success, data, item, index) {
							 | 
						|
								      if (success) {
							 | 
						|
								        item.qty = data.qty;
							 | 
						|
								        item.total = data.total;
							 | 
						|
								      } else {
							 | 
						|
								        // TODO;
							 | 
						|
								        item.qty = data.qty;
							 | 
						|
								        item.total = item.qty * Number(item.price);
							 | 
						|
								        wx.showToast({
							 | 
						|
								          title: '超过最大库存',
							 | 
						|
								          image: '../../../static/error.png'
							 | 
						|
								        });
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      var list = this.list;
							 | 
						|
								      list[index] = item;
							 | 
						|
								      this.setData({
							 | 
						|
								        list: list
							 | 
						|
								      });
							 | 
						|
								      this.select_product();
							 | 
						|
								      this.groupListF();
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    change(item, data, index) {
							 | 
						|
								      
							 | 
						|
								
							 | 
						|
								      if (item.local) {
							 | 
						|
								        var locals = uni.getStorageInfo('cart') || [];
							 | 
						|
								        locals[item.index].qty = data.qty;
							 | 
						|
								        locals[item.index].total = data.total; // Cache.set(cache_keys.cart, locals, 0, null);
							 | 
						|
								        // wx.setStorageSync('cart',locals)
							 | 
						|
								
							 | 
						|
								        this.$cookieStorage.set('cart', locals); // this.$emit('updated', true, data, item);
							 | 
						|
								
							 | 
						|
								        this.updated(true, data, item, index);
							 | 
						|
								      } else {
							 | 
						|
								        // clearTimeout(this.countTimer);
							 | 
						|
								        //
							 | 
						|
								        // this.countTimer = setTimeout(() => {
							 | 
						|
								        //     this.updateToCart(data, item);
							 | 
						|
								        // }, 200);
							 | 
						|
								        this.updateToCart(data, item, index);
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    modifyCount(e) {
							 | 
						|
								      var index = e.currentTarget.dataset.index;
							 | 
						|
								      var item = this.list[index];
							 | 
						|
								      var val = e.detail.value;
							 | 
						|
								      var store_count = item.store_count;
							 | 
						|
								
							 | 
						|
								      if (!val) {
							 | 
						|
								        val = 1;
							 | 
						|
								      } else if (!/^[1-9]\d*$/.test(val)) {
							 | 
						|
								        val = val.replace(/[^\d].*$/, '');
							 | 
						|
								        val = parseInt(val) || 1;
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      if (store_count != undefined) {
							 | 
						|
								        if (val > store_count) {
							 | 
						|
								          val = store_count;
							 | 
						|
								          wx.showToast({
							 | 
						|
								            title: '超过最大库存'
							 | 
						|
								          });
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      var data = {
							 | 
						|
								        qty: val,
							 | 
						|
								        total: val * Number(item.price)
							 | 
						|
								      };
							 | 
						|
								      this.change(item, data);
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    updateToCart(attr, data, index) {
							 | 
						|
								      var oauth = this.is_login;
							 | 
						|
								      var that = this;
							 | 
						|
								      this.$http.ajax({
							 | 
						|
								        api: `api/shopping/cart/${data.__raw_id}`,
							 | 
						|
								        data: {
							 | 
						|
								          attributes: {
							 | 
						|
								            qty: attr.qty
							 | 
						|
								          }
							 | 
						|
								        },
							 | 
						|
								        method: 'PUT',
							 | 
						|
								        header: {
							 | 
						|
								          Authorization: oauth
							 | 
						|
								        }
							 | 
						|
								      }).then(res => {
							 | 
						|
								        res = res.data;
							 | 
						|
								
							 | 
						|
								        if (res.status !== false) {
							 | 
						|
								          // this.$emit('updated', true, attr, data);
							 | 
						|
								          that.updated(true, attr, data, index);
							 | 
						|
								        } else {
							 | 
						|
								          // this.$emit('updated', false, { qty: res.data.stock_qty }, data);
							 | 
						|
								          that.updated(false, {
							 | 
						|
								            qty: res.data.stock_qty
							 | 
						|
								          }, data, index);
							 | 
						|
								        }
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    changeCount(e) {
							 | 
						|
										
							 | 
						|
										
							 | 
						|
								      var index = e.currentTarget.dataset.index,
							 | 
						|
								          change = e.currentTarget.dataset.change,
							 | 
						|
								          list = this.list,
							 | 
						|
								          val = (parseInt(list[index].qty) || 0) + (parseInt(change) ? 1 : -1),
							 | 
						|
								          store_count = list[index].store_count;
							 | 
						|
										  
							 | 
						|
								      if (store_count == undefined) {
							 | 
						|
								        if (val > 0 && val <= 99) {
							 | 
						|
								          var data = {
							 | 
						|
								            qty: val,
							 | 
						|
								            total: val * Number(list[index].price)
							 | 
						|
								          };
							 | 
						|
								          this.change(list[index], data, index);
							 | 
						|
								        }
							 | 
						|
								      } else {
							 | 
						|
								        if (val > 0 && val <= store_count) {
							 | 
						|
								          var data = {
							 | 
						|
								            qty: val,
							 | 
						|
								            total: val * Number(list[index].price)
							 | 
						|
								          };
							 | 
						|
								          this.change(list[index], data, index);
							 | 
						|
								        } else {
							 | 
						|
								          wx.showToast({
							 | 
						|
								            title: '超过最大库存',
							 | 
						|
								            image: '../../../static/error.png'
							 | 
						|
								          });
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    groupListF() {
							 | 
						|
								      if (this.list) {
							 | 
						|
								        var data = [];
							 | 
						|
								        var groups = {};
							 | 
						|
								        this.list.forEach((v, i) => {
							 | 
						|
								          let channel = v.channel || 'normal';
							 | 
						|
								
							 | 
						|
								          if (groups[channel] !== undefined) {
							 | 
						|
								            data[groups[channel]].items.push(v);
							 | 
						|
								            data[groups[channel]].index.push(i);
							 | 
						|
								          } else {
							 | 
						|
								            groups[channel] = data.length;
							 | 
						|
								            data.push({
							 | 
						|
								              channel,
							 | 
						|
								              items: [v],
							 | 
						|
								              checked: [],
							 | 
						|
								              index: [i]
							 | 
						|
								            });
							 | 
						|
								          }
							 | 
						|
								        });
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      this.setData({
							 | 
						|
								        groupList: data
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    appendToCart(data) {
							 | 
						|
								      // var oauth = Cache.get(cache_keys.token);
							 | 
						|
								      var oauth = this.is_login;
							 | 
						|
								      if (!oauth) return;
							 | 
						|
								
							 | 
						|
								      if (!Array.isArray(data)) {
							 | 
						|
								        data = [data];
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      var json = {};
							 | 
						|
								      data.forEach((v, i) => json[i] = v);
							 | 
						|
								      data = json;
							 | 
						|
								      var that = this;
							 | 
						|
								      this.$http.post({
							 | 
						|
								        api: `api/shopping/cart`,
							 | 
						|
								        data: data,
							 | 
						|
								        header: {
							 | 
						|
								          Authorization: oauth
							 | 
						|
								        }
							 | 
						|
								      }).then(res => {
							 | 
						|
								        res = res.data;
							 | 
						|
								
							 | 
						|
								        if (res.status) {
							 | 
						|
								          that.addCart(true);
							 | 
						|
								        } else {
							 | 
						|
								          that.addCart(false, res.message);
							 | 
						|
								        }
							 | 
						|
								      }).catch(rej => {
							 | 
						|
								        that.addCart(false);
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    removeFromCart(e) {
							 | 
						|
								      var oauth = this.is_login;
							 | 
						|
								      var index = e.currentTarget.dataset.index;
							 | 
						|
								      var list = this.list;
							 | 
						|
								      var data = list[index];
							 | 
						|
								
							 | 
						|
								      if (list[index].local) {
							 | 
						|
								        // var locals = wx.getStorageSync('cart') || [];
							 | 
						|
								        var locals = this.$cookieStorage.get('cart') || [];
							 | 
						|
								
							 | 
						|
								        for (let i = 0; i < locals.length; i++) {
							 | 
						|
								          if (locals[i].index === list[index].index) {
							 | 
						|
								            locals.splice(i, 1);
							 | 
						|
								            break;
							 | 
						|
								          }
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        if (locals.length) {
							 | 
						|
								          this.$cookieStorage.set('cart', locals); // wx.setStorageSync('cart',locals)
							 | 
						|
								        } else {
							 | 
						|
								          this.$cookieStorage.clear('cart'); // wx.removeStorageSync('cart')
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        this.removed(true, index);
							 | 
						|
								      } else {
							 | 
						|
								        this.$http.ajax({
							 | 
						|
								          api: `api/shopping/cart/${data.__raw_id}`,
							 | 
						|
								          header: {
							 | 
						|
								            Authorization: oauth
							 | 
						|
								          },
							 | 
						|
								          method: 'DELETE'
							 | 
						|
								        }).then(res => {
							 | 
						|
								          res = res.data;
							 | 
						|
								          this.removed(true, index);
							 | 
						|
								        }).catch(rej => {
							 | 
						|
								          this.removed(false);
							 | 
						|
								        });
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    removed(success, index) {
							 | 
						|
								      if (success) {
							 | 
						|
								        var list = this.list;
							 | 
						|
								        var product = list.splice(index, 1)[0];
							 | 
						|
								        this.setData({
							 | 
						|
								          list: list
							 | 
						|
								        });
							 | 
						|
								        this.select_product();
							 | 
						|
								        this.groupListF();
							 | 
						|
								      } else {
							 | 
						|
								        wx.showToast({
							 | 
						|
								          title: '删除购物车商品失败!',
							 | 
						|
								          image: '../../../static/error.png'
							 | 
						|
								        });
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    changeCheck(e) {
							 | 
						|
								      var ids = e.detail.value;
							 | 
						|
								      var list = this.list;
							 | 
						|
								      list.forEach(item => {
							 | 
						|
								        item.checked = false;
							 | 
						|
								      });
							 | 
						|
								      ids.forEach(item => {
							 | 
						|
								        list[item].checked = true;
							 | 
						|
								      });
							 | 
						|
								      this.setData({
							 | 
						|
								        list: list
							 | 
						|
								      });
							 | 
						|
								      this.select_product();
							 | 
						|
								      this.groupListF();
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    selectAll(e) {
							 | 
						|
								      var allCheck = this.allCheck;
							 | 
						|
								      var list = this.list;
							 | 
						|
								      this.setData({
							 | 
						|
								        allCheck: !allCheck
							 | 
						|
								      });
							 | 
						|
								      list.forEach(item => {
							 | 
						|
								        item.checked = this.allCheck ? true : false;
							 | 
						|
								      });
							 | 
						|
								      this.setData({
							 | 
						|
								        list: list
							 | 
						|
								      });
							 | 
						|
								      this.select_product();
							 | 
						|
								      this.groupListF();
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    showCoupons() {
							 | 
						|
								      this.setData({
							 | 
						|
								        show_coupons: !this.show_coupons
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    showDiscounts() {
							 | 
						|
								      this.setData({
							 | 
						|
								        show_discounts: !this.show_discounts
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    getCoupon(e) {
							 | 
						|
								      var is_login = this.$cookieStorage.get('user_token');
							 | 
						|
								      var code = e.currentTarget.dataset.code;
							 | 
						|
								      var index = e.currentTarget.dataset.index;
							 | 
						|
								
							 | 
						|
								      if (is_login) {
							 | 
						|
								        this.goodsConvertCoupon(code, index);
							 | 
						|
								      } else {
							 | 
						|
								        var url = getUrl();
							 | 
						|
								        wx.showModal({
							 | 
						|
								          tiele: '',
							 | 
						|
								          content: '请先登录',
							 | 
						|
								          success: res => {
							 | 
						|
								            if (res.confirm) {
							 | 
						|
								              wx.navigateTo({
							 | 
						|
								                url: '/pages/user/register/register?url=' + url
							 | 
						|
								              });
							 | 
						|
								            }
							 | 
						|
								          }
							 | 
						|
								        });
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    // 领取优惠券
							 | 
						|
								    goodsConvertCoupon(code, index) {
							 | 
						|
								      var token = this.$cookieStorage.get('user_token');
							 | 
						|
								      this.$http.post({
							 | 
						|
								        api: 'api/coupon/convert',
							 | 
						|
								        header: {
							 | 
						|
								          Authorization: token 
							 | 
						|
								        },
							 | 
						|
								        data: {
							 | 
						|
								          coupon_code: code
							 | 
						|
								        }
							 | 
						|
								      }).then(res => {
							 | 
						|
								        if (res.statusCode == 200) {
							 | 
						|
								          res = res.data;
							 | 
						|
								
							 | 
						|
								          if (res.status) {
							 | 
						|
											this.coupons[index].receive = true;
							 | 
						|
								            wx.showToast({
							 | 
						|
								              title: '领取成功'
							 | 
						|
								            });
							 | 
						|
								          } else {
							 | 
						|
								            wx.showToast({
							 | 
						|
								              title: res.message,
							 | 
						|
								              image: '../../../static/error.png'
							 | 
						|
								            });
							 | 
						|
								          }
							 | 
						|
								        } else {
							 | 
						|
								          wx.showToast({
							 | 
						|
								            title: '领取失败',
							 | 
						|
								            image: '../../../static/error.png'
							 | 
						|
								          });
							 | 
						|
								        }
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    goLogin() {
							 | 
						|
								      var url = getUrl();
							 | 
						|
								      wx.navigateTo({
							 | 
						|
								        url: '/pages/user/register/register?url=' + url
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    changeCoupons() {
							 | 
						|
								      this.setData({
							 | 
						|
								        show_coupons: !this.show_coupons
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    changeDiscounts() {
							 | 
						|
								      this.setData({
							 | 
						|
								        show_discounts: !this.show_discounts
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    // 购物车领券
							 | 
						|
								    cardDiscount(ids) {
							 | 
						|
								      var wechat_group_id = this.$cookieStorage.get('openGId') || '';
							 | 
						|
								      wx.request({
							 | 
						|
								        url: config.GLOBAL.baseUrl + 'api/shoppingCart/discount',
							 | 
						|
								        method: 'POST',
							 | 
						|
								        data: {
							 | 
						|
								          ids: ids,
							 | 
						|
								          wechat_group_id: wechat_group_id
							 | 
						|
								        },
							 | 
						|
								        success: res => {
							 | 
						|
								          if (res.statusCode == 200) {
							 | 
						|
								            res = res.data;
							 | 
						|
								
							 | 
						|
								            if (res.status && res.data) {
							 | 
						|
								              res.data.coupons.forEach(v => v.receive = false);
							 | 
						|
								              // this.setData({
							 | 
						|
								              //   coupons: res.data.coupons,
							 | 
						|
								              //   discounts: res.data.discounts
							 | 
						|
								              // });
							 | 
						|
											   this.coupons=res.data.coupons;
							 | 
						|
											   this.discounts=res.data.discounts;
							 | 
						|
								            }
							 | 
						|
								          }
							 | 
						|
								        }
							 | 
						|
								      });
							 | 
						|
								    },
							 | 
						|
								
							 | 
						|
								    setData: function (obj) {
							 | 
						|
								      let that = this;
							 | 
						|
								      let keys = [];
							 | 
						|
								      let val, data;
							 | 
						|
								      Object.keys(obj).forEach(function (key) {
							 | 
						|
								        keys = key.split('.');
							 | 
						|
								        val = obj[key];
							 | 
						|
								        data = that.$data;
							 | 
						|
								        keys.forEach(function (key2, index) {
							 | 
						|
								          if (index + 1 == keys.length) {
							 | 
						|
								            that.$set(data, key2, val);
							 | 
						|
								          } else {
							 | 
						|
								            if (!data[key2]) {
							 | 
						|
								              that.$set(data, key2, {});
							 | 
						|
								            }
							 | 
						|
								          }
							 | 
						|
								
							 | 
						|
								          data = data[key2];
							 | 
						|
								        });
							 | 
						|
								      });
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  computed: {},
							 | 
						|
								  watch: {}
							 | 
						|
								};
							 | 
						|
								</script>
							 | 
						|
								<style rel="stylesheet/less" lang="less">
							 | 
						|
								    @import "cart";
							 | 
						|
								</style>
							 |