java-mall-app/pages/cart/cart.vue
2024-11-01 16:35:40 +08:00

1545 lines
43 KiB
Vue

<template>
<view class="page">
<status-bar></status-bar>
<view v-if="loadComplete">
<block v-if="isdata">
<view class="m-product-all" style="padding-bottom: 10rpx;">
<view class="m-product-list">
<block v-for="(store_items, storeindex) in cartlist.items" :key="storeindex">
<view class="store-box">
<view class="m-store" :data-id="(store_items.store_id)">
<view class="m-store-c">
<view class="m-store-ck" @click="ckStore" :data-id="(store_items.store_id)" :data-isck="(store_items.cart_select)" :data-checkable="(store_items.store_checkable)">
<uni-icons :type="(store_items.cart_select?'circle-filled':'circle') "
:color="(store_items.cart_select?theme_bg:'#e3e3e3')" size="20"/>
</view>
<navigator
:url="'/pagesub/index/store?store_id=' + (store_items.store_id)"
class="m-cell m-cell-access" style="" hover-class="none">
<view class="m-cell-bd m-cell-primary">
<p class="m-store-info">
{{store_items.store_name}}
</p>
</view>
<text class="m-cell-ft"></text>
</navigator>
</view>
</view>
<view v-for="(item, itemindex) in store_items.items" :key="itemindex" class="m-product-item">
<view :class="{'m-item-c':1, del:(item.cart_id==T_Id)}" @touchstart="removestart" @touchmove="removeload"
@touchend="removeend" :data-id="(item.cart_id)" @longpress.stop="pressDelCart">
<navigator hover-class="none" :url="'/pages/product/detail?pid=' + (item.item_id)" style="font-size:28rpx;line-height:2;display:flex;height:100%;width:100%;">
<view class="m-cart-ck" @click.stop="ckitem" :data-id="(item.cart_id)"
:data-isck="(item.cart_select)">
<uni-icons :type="(item.cart_select?'circle-filled':'circle') "
:color="(item.cart_select?theme_bg:'#e3e3e3')" size="20"/>
</view>
<view class="m-product-img">
<image lazy-load :src="($.img(item.product_image, 200, 200))" />
</view>
<view class="m-product-info">
<view class="m-product-name">
<image v-if="(item.product_state_id == 1002)" lazy-load
style="" class="off-shelf-simg"
src="http://static.lancerdt.com/xcxfile/appicon/xiajia.png"/>
<label>
<label><text v-if="(item.show_typename)" class="tag tag-orange">{{item.show_typename}}</text>{{item.product_name}}</label>
</label>
<label class="m-min-name"
style="">{{
item.item_spec_name ? item.item_spec_name : ""
}}</label>
</view>
<view class="m-product-box">
<view class="m-product-price">
<block v-if="item.item_sale_price">
<label>{{__('¥')}}</label> {{number_format(item.item_sale_price, 2)}} <label class="pre-info-price" v-if="(item.discount_sale_money)">-{{__('¥')}}{{number_format(item.discount_sale_money, 2)}}</label>
</block>
<block v-if="item.item_unit_points">
<label class="pre-info-price" style="margin: 0rpx 10rpx;">+</label><label style="font-size: 14px">{{item.item_unit_points}}</label><label >{{__('积分')}}</label>
</block>
<block v-if="item.item_unit_sp">
<label class="pre-info-price" style="margin: 0rpx 10rpx;">+</label><label style="font-size: 14px">{{item.item_unit_sp}}</label><label >{{__('众宝')}}</label>
</block>
</view>
<block>
<view class="u-cart-num">
<view class="u-num-btn thin-border-right" @click.stop="sub" :data-num="(item.cart_quantity)" :data-stock="(item.cart_quantity+item.buy_limit)"
:data-cid="(item.cart_id)" :data-skuid="(item.item_id)" :data-userid="(item.user_id)">-</view>
<input type="number" :value="(item.cart_quantity)" @click.stop @blur="writenum" :data-stock="(item.cart_quantity+item.buy_limit)"
:data-cid="(item.cart_id)" :data-skuid="(item.item_id)" :data-userid="(item.user_id)"/>
<view class="u-num-btn thin-border-left" @click.stop="add" :data-num="(item.cart_quantity)" :data-stock="(item.cart_quantity+item.buy_limit)"
:data-cid="(item.cart_id)" :data-skuid="(item.item_id)" :data-userid="(item.user_id)">+</view>
</view>
</block>
</view>
<!-- <block v-else>
<view class="u-cart-num">
<view class="u-num-btn">-</view>
<input type="text" :value="(item.cart_quantity)" />
<view class="u-num-btn">+</view>
</view>
</block> -->
</view>
<view class="u-del" :data-id="(item.cart_id)" @click.stop.prevent="delcart" @touchstart.stop.prevent @touchmove.stop.prevent @touchend.stop.prevent="delcart">
<view class="u-del-btn">{{ __('删除') }}</view>
</view>
</navigator>
</view>
<!-- 模板调用单品加价购、赠品、满减 -->
<!--
pulse_gift_cart
pulse_bargains
pulse_bargains_cart
pulse_reduction
-->
<!-- pulse_gift_cart -->
<view v-if="(item.pulse_gift_cart.length > 0)" v-for="(pluse, giftindex) in item.pulse_gift_cart" :key="giftindex"
class="m-item-act" :data-id="(pluse.cart_id)">
<view class="m-cart-ck" :data-id="(pluse.cart_id)" :data-isck="(pluse.cart_select)">
</view>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="m-product-img m-act-img">
<image lazy-load :src="($.img(pluse.product_image, 200, 200))" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="act-item-name" style="height:100rpx;line-height:100rpx;font-size: 28rpx;">
<label>【{{__('赠品')}}】{{pluse.product_item_name}}</label>
</navigator>
<view v-if="(pluse.selectable)" class="m-act-change" :data-storeindex="(storeindex)" :data-itemindex="(itemindex)"
:data-giftindex="(giftindex)" :data-isck="(pluse.cart_select)" @click="chooseItemGift">{{__('修改')}}</view>
</view>
<!-- pulse_reduction -->
<block v-if="(item.pulse_reduction.length > 0)" v-for="(pluse, reductionindex) in item.pulse_reduction" :key="reductionindex">
<view v-if="(pluse.reduceMoney > 0)" class="m-item-act">
<view class="m-cart-ck" @click="ckitem" :data-id="(pluse.cart_id)" :data-isck="(pluse.cart_select)">
</view>
<view class="m-product-img icon-activity icon-activity-reduction">
</view>
<view class="act-item-name" style="height:160rpx;line-height:160rpx;font-size: 28rpx;">
<label>【{{sprintf(__('满减 -¥%s'), mf(pluse.reduceMoney,2))}}】</label>
<!--(pluse.actName)-->
</view>
</view>
</block>
<!-- pulse_reduction -->
<block v-if="(item.pulse_multple.length > 0)" v-for="(pluse, reductionindex) in item.pulse_multple" :key="reductionindex">
<view v-if="(pluse.reduceMoney > 0)" class="m-item-act">
<view class="m-cart-ck" @click="ckitem" :data-id="(pluse.cart_id)" :data-isck="(pluse.cart_select)">
</view>
<view class="m-product-img icon-activity icon-activity-reduction">
</view>
<view class="act-item-name" style="height:160rpx;line-height:160rpx;font-size: 28rpx;">
<label>【{{sprintf(__('多件折 -¥%s'), mf(pluse.reduceMoney,2))}}】</label>
<!--(pluse.actName)-->
</view>
</view>
</block>
<!-- pulse_bargains_cart -->
<view v-if="(item.pulse_bargains_cart.length > 0)" v-for="(pluse, bargainsindex) in item.pulse_bargains_cart"
:key="bargainsindex" class="m-item-act" :data-id="(pluse.cart_id)">
<image v-if="(pluse.product_state_id == 1002)" lazy-load class="off-shelf-simg" src="http://static.lancerdt.com/xcxfile/appicon/xiajia.png" />
<view class="m-cart-ck" @click="ckitem" :data-id="(pluse.cart_id)" :data-isck="(pluse.cart_select)">
<uni-icons :type="(pluse.cart_select?'circle-filled':'circle') "
:color="(pluse.cart_select?theme_bg:'#e3e3e3')" size="20"/>
</view>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="m-product-img m-act-img">
<image lazy-load :src="($.img(pluse.product_image, 200, 200))" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="act-item-name" style="height:100rpx;line-height:100rpx;font-size: 28rpx;width:260rpx;">
<label>【{{__('加价购')}}】{{pluse.product_item_name}}</label>
</navigator>
<block>
<view class="u-cart-num" style="right:122rpx;">
<view class="u-num-btn" @click="sub" :data-num="(pluse.cart_quantity)" :data-stock="(pluse.cart_quantity + pluse.buy_limit)"
:data-cid="(pluse.cart_id)" :data-skuid="(pluse.item_id)" :data-userid="(pluse.user_id)">-</view>
<input :type="number" :value="(pluse.cart_quantity)" @blur="writenum" :data-stock="(pluse.cart_quantity + pluse.buy_limit)"
:data-cid="(pluse.cart_id)" :data-skuid="(pluse.item_id)" :data-userid="(pluse.user_id)"/>
<view class="u-num-btn" @click="add" :data-num="(pluse.cart_quantity)" :data-stock="(pluse.cart_quantity + pluse.buy_limit)"
:data-cid="(pluse.cart_id)" :data-skuid="(pluse.item_id)" :data-userid="(pluse.user_id)">+</view>
</view>
</block>
</view>
<!-- pulse_bargains -->
<block v-if="(item.pulse_bargains.length > 0)" v-for="(pluse, bargainsindex) in item.pulse_bargains" :key="bargainsindex">
<view class="m-item-act" v-if="(pluse.length > 0 || pluse.actId)" :data-id="(pluse.cart_id)">
<image v-if="(pluse.product_state_id == 1002)" lazy-load class="off-shelf-simg" src="http://static.lancerdt.com/xcxfile/appicon/xiajia.png" />
<view class="m-cart-ck" v-if="(pluse.selectable)" :data-storeindex="(storeindex)" :data-itemindex="(itemindex)"
:data-bargainsindex="(bargainsindex)" :data-isck="(pluse.cart_select)" @click="chooseItemBargains">
<uni-icons class="iconfont icon-add " style="font-size:44rpx;position:relative;top:10rpx;color:green;" />
</view>
<view class="m-cart-ck" v-else @click="chooseRaiseBuyItem" :data-item_id="(pluse.item_id)" :data-activity_id="(pluse.actId)"
:data-activity_item_id="(pluse.activity_item_id)" :data-cart_type="1" :data-isck="(pluse.cart_select)">
<uni-icons :type="(isckall?'circle-filled':'circle')" :color="(isckall?theme_bg:'#e3e3e3')"
size="20"/>
</view>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="m-product-img m-act-img">
<image lazy-load :src="($.img(pluse.product_image, 200, 200))" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="act-item-name" style="height:100rpx;line-height:100rpx;font-size: 28rpx;">
<label>【{{sprintf(__('加价 ¥%s 购买'), mf(pluse.item_sale_price,2))}}】</label>
</navigator>
</view>
</block>
</view>
<!-- 店铺加价购 pulse_bargains -->
<view class="m-product-item" v-if="(store_items.bargains.length > 0)" v-for="(pluse, bargainsindex) in store_items.bargains"
:key="bargainsindex">
<view class="m-item-act" v-if="(pluse.length > 0 || pluse.actId)" :data-id="(pluse.cart_id)">
<view class="m-cart-ck" v-if="(pluse.selectable)" :data-storeindex="(storeindex)" :data-itemindex="(itemindex)"
:data-bargainsindex="(bargainsindex)" :data-isck="(pluse.cart_select)" @click="chooseStoreBargains">
<uni-icons class="iconfont icon-add " style="font-size:44rpx;position:relative;top:10rpx;color:green;" />
</view>
<view class="m-cart-ck" v-else @click="chooseRaiseBuyItem" :data-item_id="(pluse.item_id)" :data-activity_id="(pluse.actId)"
:data-activity_item_id="(pluse.item_id)" :data-cart_type="1" :data-isck="(pluse.cart_select)">
<uni-icons :type="(isckall?'circle-filled':'circle')" :color="(isckall?theme_bg:'#e3e3e3')"
size="20"/>
</view>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="m-product-img m-act-img">
<image lazy-load :src="($.img(pluse.product_image, 200, 200))" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="act-item-name" style="height:100rpx;line-height:100rpx;font-size: 28rpx;">
<label>【{{sprintf(__('加价 ¥%s 购买'), mf(pluse.item_sale_price,2))}}】</label>
</navigator>
</view>
</view>
<!-- 店铺赠品 activitys.gift -->
<view class="m-product-item" v-if="(store_items.activitys.gift.length > 0)" v-for="(pluse, giftindex) in store_items.activitys.gift"
:key="giftindex">
<view class="m-item-act" v-if="(pluse.length > 0 || pluse.actId)" :data-id="(pluse.cart_id)">
<view class="m-cart-ck" :data-id="(pluse.cart_id)" :data-isck="(pluse.cart_select)">
</view>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="m-product-img m-act-img">
<image lazy-load :src="($.img(pluse.product_image, 200, 200))" />
</navigator>
<navigator hover-class="none" :url="'/pages/product/detail?pid='+(pluse.item_id)" class="act-item-name" style="height:100rpx;line-height:100rpx;font-size: 28rpx;">
<label>【{{__('赠品')}}】{{pluse.product_item_name}}</label>
</navigator>
<view v-if="(pluse.selectable)" class="m-act-change" :data-storeindex="(storeindex)" :data-itemindex="(itemindex)"
:data-giftindex="(giftindex)" :data-isck="(pluse.cart_select)" @click="chooseStoreGift">{{__('修改')}}</view>
</view>
</view>
<!-- 店铺满减 activitys.reduction -->
<view class="m-product-item" v-if="(store_items.activitys.reduction.length > 0)" v-for="(pluse, reductionindex) in store_items.activitys.reduction"
:key="reductionindex">
<view class="m-item-act" v-if="((pluse.length > 0 || pluse.actId) && (pluse.reduceMoney > 0) )" :data-id="(pluse.cart_id)">
<view class="m-cart-ck" @click="ckitem" :data-id="(pluse.cart_id)" :data-isck="(pluse.cart_select)">
</view>
<view class="m-product-img icon-activity icon-activity-reduction">
</view>
<view class="act-item-name" style="height:160rpx;line-height:160rpx;font-size: 28rpx;">
<label>【{{sprintf(__('满减 -¥%s'), mf(pluse.reduceMoney,2))}}】</label>
<!--(pluse.actName)-->
</view>
</view>
</view>
<!-- 店铺多件折 activitys.reduction -->
<view class="m-product-item" v-if="(store_items.activitys.multple.length > 0)" v-for="(pluse, reductionindex) in store_items.activitys.multple"
:key="reductionindex">
<view class="m-item-act" v-if="((pluse.length > 0 || pluse.actId) && (pluse.reduceMoney > 0) )" :data-id="(pluse.cart_id)">
<view class="m-cart-ck" @click="ckitem" :data-id="(pluse.cart_id)" :data-isck="(pluse.cart_select)">
</view>
<view class="m-product-img icon-activity icon-activity-reduction">
</view>
<view class="act-item-name" style="height:160rpx;line-height:160rpx;font-size: 28rpx;">
<label>【{{sprintf(__('多件折 -¥%s'), mf(pluse.reduceMoney,2))}}】</label>
<!--(pluse.actName)-->
</view>
</view>
</view>
</view>
</block>
</view>
</view>
<view class="u-cleanbox"></view>
<view class="m-footer-btn" :style="'bottom:' + barBottom + 'px'">
<view class="m-footer-btn-list">
<view class="m-footer-btn-item">
<view class="m-cart-ck" @click="ckall" :data-isck="(isckall)">
<uni-icons :type="(isckall?'circle-filled':'circle')" :color="(isckall?theme_bg:'#e3e3e3')" size="20"/>
</view>
<view style="padding-right: 10rpx;display: initial;line-height: 92rpx">{{ __("全选") }}</view>
<view class="m-cart-del" @click="delAll">
<label class="iconfont icon-delete"></label>
</view>
</view>
<view class="m-footer-btn-item m-cart-total">
<view style="line-height: 1.8;font-size: 12px;">{{__('合计:')}}
<block v-if="cartlist.orderSelMoneyAmount">
<label style="font-size: 12px;">{{__('¥')}}</label><text>{{number_format(cartlist.orderSelMoneyAmount, 2)}}</text>
</block>
<block v-if="cartlist.orderSelPointsAmount">
<label style="margin: auto 8rpx;">+</label><text v-if="cartlist.orderSelPointsAmount"> {{number_format(cartlist.orderSelPointsAmount)}}</text><label style="font-size: 12px;">{{__('积分')}}</label>
</block>
<block v-if="cartlist.orderSelSpAmount">
<label style="margin: auto 10rpx;">+</label><text v-if="cartlist.orderSelSpAmount"> {{number_format(cartlist.orderSelSpAmount)}}</text><label>{{__('众宝')}}</label>
</block>
</view>
<view style="font-size: 20rpx;line-height: 28rpx"><label style="margin-right: 10rpx;color:#888;">{{__('优惠:¥')}}{{number_format(cartlist.orderDiscountAmount, 2)}}</label> {{__('不含运费')}} </view>
</view>
</view>
<view class="m-footer-btn-main" @click="submitorder">
{{sprintf(__('结算(%s)'), cartlist.Total)}}
</view>
</view>
<view :class="{'m-panel-sp':1, hide:selectsp==0}" @click="closesp">
<view :style="'bottom:' + barBottom + 'px'" :class="'m-panel-sp-content ' + (selectct==0?'bounceOutDown animated':'bounceInUp animated')" catchtap>
<view class="m-panel-sp-pinfo">
<view class="m-panel-sp-pname">
<view class="m-pstock">{{__('选择商品')}}</view>
</view>
<uni-icons type="close" class="m-panel-sp-icon" color="#888" @click="closesp" />
</view>
<scroll-view class="m-panel-sp-listbox" scroll-y="true">
<block v-for="(select_items, key1) in spdata.selecInfo" :key="key1">
<view class="m-panel-sp-listbox-item" @click="chooseRaiseBuyItem" :data-item_id="(select_items.item_id)"
:data-activity_id="(spdata.actId)" :data-activity_item_id="(spdata.activity_item_id)" :data-cart_type="(cart_type)">
<view class="m-panel-sp-labellist" v-if="(true)">
<view class="m-panel-sp-pimg">
<image lazy-load :src="($.img(select_items.product_image, 200, 200))" />
</view>
<view class="m-panel-sp-pname">{{select_items.product_item_name}}
<view class="m-product-price">
<label>{{__('¥')}}</label>{{number_format(select_items.item_sale_price, 2)}} <label class="pre-info-price" v-if="(select_items.discount_sale_money)">-{{__('')}}{{number_format(select_items.discount_sale_money, 2)}}</label>
</view>
</view>
</view>
</view>
</block>
<!-- <view style="height:96rpx;width:100%;"></view> -->
</scroll-view>
</view>
</view>
</block>
<block v-else>
<navigator hover-class="none" url="/pages/index/index" open-type="switchTab" class="m-nullpage">
<view class="m-nullpage-middle">
<label class="iconfont icon-konggouwuche"></label>
<view class="m-null-tip">
<text>{{__('购物车空空如也')}}</text>
<text>{{__('去挑几件中意的商品吧')}}</text>
</view>
</view>
</navigator>
<guess-you-like ref="guessYouLike" :isGuessFlag="isGuessFlag" :isShowLoading="false" :titleText="__('——猜你喜欢——')"></guess-you-like>
</block>
</view>
</view>
</template>
<script>
import guessYouLike from '@/components/product-list.vue'
import statusBar from '../../components/status-bar.vue'
import {theme_bg} from "@/styles/_variables.scss";
import {
mapState,
mapMutations
} from 'vuex'
import statecode from '../../config/statecode'
export default {
data: function() {
return {
options: {},
selectsp: 0,
selectct: 0,
cart_type:0,
spdata: [],
flag:false,
isckall: false,
isck: false,
cartlist: {items:[]},
X_Start: 0,
X_End: 0,
T_Id: 0,
select_cart_ids: [],
isdata: false,
barBottom: 0,
itemindex:0,
theme_bg: theme_bg,
loadComplete: false, // 没有加载数据前不显示的对应内容
isGuessFlag: false
}
},
computed: mapState(['Config', 'StateCode', 'notice', 'plantformInfo', 'shopInfo', 'userInfo', 'hasLogin']),
components: {
statusBar,
guessYouLike
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: async function(options) {
uni.setNavigationBarTitle({
title:this.__('购物车')
});
await this.$onLaunched;
var that = this;
let bar_bottom = 0;
// #ifdef H5
bar_bottom = 50;
// #endif
that.setData({
options: options,
barBottom: bar_bottom
})
this.getPlantformInfo(function(plantformInfo) {
that.setData({
isGuessFlag: plantformInfo.config.esearch_enable || false
});
});
//console.log(this.tabBar)
this.notice.addNotification("RefreshCart", that.RefreshCart, that);
},
onShow: function() {
var that = this;
this.getUserInfo(function(user) {
that.getCartList()
});
this.showCartNum();
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
// 离开页面,注销事件
var that = this
this.notice.removeNotification("RefreshCart", that);
},
onPullDownRefresh: function() {
this.getCartList()
},
methods: {
...mapMutations(['login', 'logout', 'getPlantformInfo', 'forceUserInfo', 'getUserInfo', 'setCartNum', 'showCartNum']),
//获取平台信息
getPlatType:function(){
let platStr=null;
// #ifdef MP-WEIXIN
platStr="weiXin"
//#endif
// #ifdef H5
platStr="H5"
//#endif
// #ifdef APP-PLUS
platStr="APP"
//#endif
return platStr
},
//计算选中信息
ckalllength: function(data) {
var that = this,
selected_ids = [];
var total_sel = 0;
//循环所有店铺
if (!that.$.isNull(data.items) && data.items.length > 0) {
var isck = 0;
var isckall = 0;
var total = 0;
for (var store_item_index in data.items) {
//第一个店铺
//var cart_items = data.items[0].items, i = 0, s = cart_items.length;
var cart_items = data.items[store_item_index].items,
s = cart_items.length;
var i = 0;
for (var item in cart_items) {
//按照item计算 i
cart_items[item].cart_select && (i = i + cart_items[item].cart_quantity, selected_ids.push(cart_items[item].cart_id),
isck = 1);
}
total = total + i;
}
data.Total = total;
that.setData({
select_cart_ids: selected_ids
});
isckall = data.cart_select;
this.setData({
isckall: isckall
})
this.setData({
isck: isck
}),
this.setData({
isdata: true
})
} else {
this.setData({
isdata: false
})
}
return data;
},
//店铺全选
ckStore: function(e) {
if (!e.currentTarget.dataset.checkable) {
this.$.alert(this.__('商品都已下架'))
return false;
}
var param = {
//store_id: this.shopInfo.store_id,
UID: 0,
CID: e.currentTarget.dataset.id,
IsCK: e.currentTarget.dataset.isck ? 0 : 1,
action: 'store',
store_id: e.currentTarget.dataset.id,
cart_select: parseInt(e.currentTarget.dataset.isck) ? 0 : 1
},
that = this;
//发送购物车请求
that.$.request({
url: this.Config.URL.cart.sel,
data: param,
success: function(data, status, msg, code) {
that.getCartList()
if (200 != status) {
that.$.confirm(msg);
}
//data = that.ckalllength(data);
//that.setData({cartlist: data});
}
});
},
//单品选中
ckitem: function(e) {
// if (e.currentTarget.dataset.stateid != statecode.PRODUCT_STATE_NORMAL) {
// this.$.alert(this.__('该商品已下架'))
// return false;
// }
var param = {
//store_id: this.shopInfo.store_id,
CID: e.currentTarget.dataset.id,
IsCK: e.currentTarget.dataset.isck ? 0 : 1,
cart_id: e.currentTarget.dataset.id,
cart_select: parseInt(e.currentTarget.dataset.isck) ? 0 : 1
},
that = this;
//发送购物车请求
that.$.request({
url: this.Config.URL.cart.sel,
data: param,
success: function(data, status, msg, code) {
that.getCartList()
if (200 != status) {
that.$.confirm(msg);
}
//data = that.ckalllength(data);
//that.setData({cartlist: data});
}
});
},
//全选
ckall: function(e) {
var param = {
//store_id: this.shopInfo.store_id,
CID: e.currentTarget.dataset.id,
IsCK: e.currentTarget.dataset.isck ? 0 : 1,
action: 'all',
cart_select: parseInt(e.currentTarget.dataset.isck) ? 0 : 1
},
that = this;
//发送购物车请求
that.$.request({
url: this.Config.URL.cart.sel,
data: param,
success: function(data, status, msg, code) {
that.getCartList()
if (200 != status) {
that.$.confirm(msg);
}
//data = that.ckalllength(data);
//that.setData({cartlist: data});
}
});
},
sub: function(e) {
let that = this;
var t = {
btntype: 2,
numval: e.currentTarget.dataset.num,
CID: e.currentTarget.dataset.cid,
stock: e.currentTarget.dataset.stock,
skuId:e.currentTarget.dataset.skuid,
userId:e.currentTarget.dataset.userid
};
if (t.numval == 1) {
that.$.showModal({
title: that.__("提示"),
content: that.__("确认要删除这个商品吗?"),
success: function(n) {
if (n.confirm) {
that.unifiedNum(t)
}
}
})
}
else
{
that.unifiedNum(t)
}
},
add: function(e) {
let that = this;
var t = {
btntype: 1,
numval: e.currentTarget.dataset.num,
CID: e.currentTarget.dataset.cid,
stock: e.currentTarget.dataset.stock,
skuId:e.currentTarget.dataset.skuid,
userId:e.currentTarget.dataset.userid
};
if (t.numval >= t.stock) {
that.$.alert(that.__('不能再加了'));
return;
}
this.unifiedNum(t)
},
writenum: function(e) {
var t = {
btntype: 3,
numval: e.detail.value,
CID: e.currentTarget.dataset.cid,
stock: e.currentTarget.dataset.stock,
skuId:e.currentTarget.dataset.skuid,
userId:e.currentTarget.dataset.userid
};
this.unifiedNum(t)
},
unifiedNum: function(e) {
var num_obj = {
value: parseInt(e.numval),
stock: parseInt(e.stock)
};
var flagObj={
btntype:e.btntype,
skuId:e.skuId,
userId:e.userId
};
e.btntype == 1 && (num_obj.value = num_obj.value + 1);
e.btntype == 2 && (num_obj.value = num_obj.value - 1);
num_obj.value > num_obj.stock && (num_obj.value = num_obj.stock);
//num_obj.value <= 0 && (num_obj.value = 1);
var param = {
//store_id: this.shopInfo.store_id,
cart_id: e.CID,
cart_quantity: num_obj.value
};
var that = this;
flagObj.cart_quantity=num_obj.value;
//发送购物车请求
that.$.request({
url: this.Config.URL.cart.quantity,
data: param,
success: function(data, status, msg, code) {
if (status == 200) {
that.getCartList(flagObj)
} else {
that.$.alert(msg);
}
}
});
},
// 获取购物车信息
getCartList: function(flagObj) {
var that = this;
var param = {};
this.$store.dispatch(`getCartList`, function (data) {
data = that.ckalllength(data);
that.setData({
cartlist: data,
loadComplete: true
});
that.setCartNum(data.Total);
that.showCartNum();
that.$.stopPullDownRefresh()
})
return
//发送购物车请求
that.$.request({
url: this.Config.URL.cart.lists,
data: param,
success: function(data) {
/*
//统计加购数据
if(flagObj){
if(flagObj.btntype==1){
//加一
var _num=1;
}else if(flagObj.btntype==2){
//减一
var _num=-1;
}else{
var _num=flagObj.cart_quantity;
}
uni.request({
url:that.Config.statisticsPath+'/kafka/shopOrder/addCartKafka',
method:'POST',
data: {
goodsNum:_num,
skuId:flagObj.skuId,
userId:that.$.getStorageSync('uid')
},
success:function(data, status, msg, code){
//console.log(data,'+++++');
}
})
} */
data = that.ckalllength(data);
that.setData({
cartlist: data
});
that.setData({
loadComplete: true
});
that.setCartNum(data.Total);
that.showCartNum();
that.$.stopPullDownRefresh()
},
fail: function(data) {
that.setData({
loadComplete: true
});
that.$.alert("网络异常请重试!");
}
});
},
removestart: function(e) {
this.setData({
X_Start: e.touches[0].pageX
})
},
removeload: function(e) {
//console.info(e);
this.setData({
X_End: e.touches[0].pageX
})
},
removeend: function(e) {
this.setData({
X_End: e.mp.changedTouches[0].pageX
});
this.direction(e.currentTarget.dataset.id)
},
direction: function(e) {
var t = {
xstart: this.X_Start,
xend: this.X_End
};
if (t.xstart > t.xend) {
if (t.xstart - t.xend > 100) {
this.setData({
T_Id: e
})
}
} else {
this.setData({
T_Id: 0
})
}
},
pressDelCart: function(e) {
var that = this;
e.currentTarget.dataset.id;
let itemList = [that.__('删除')]
uni.showActionSheet({
itemList: itemList,
success: (res) => {
if (res.tapIndex == 0)
{
that.delcart(e);
}
else
{
}
}
})
},
// 删除购物车商品
delcart: function(e) {
var that = this;
that.$.showModal({
title: that.__("提示"),
content: that.__("确认要删除这个商品吗?"),
success: function(n) {
if (n.confirm) {
var param = {
cart_id: e.currentTarget.dataset.id
};
that.$.request({
url: that.Config.URL.cart.remove,
data: param,
success: function(data) {
that.getCartList()
}
});
}
}
})
},
// 结算
submitorder: function() {
let that = this;
this.isck ? that.$.navigateTo({
url: "/pages/checkout/checkout?ifcart=1"
}) : that.$.showModal({
title: that.__("提示"),
content: that.__("请选择需要结算商品!"),
showCancel: false
})
},
// 删除所有商品
delAll: function() {
var that = this;
that.select_cart_ids.length <= 0 ? that.$.confirm(that.__("请选择需要删除的商品!")) : that.$.confirm(that.__("是否删除选中商品?"), function(t) {
if (t.confirm) {
var param = {
cart_id: that.select_cart_ids.toString()
};
that.$.request({
url: that.Config.URL.cart.remove,
data: param,
success: function(data) {
that.getCartList()
}
});
}
},
true)
},
closesp: function() {
var that = this;
that.setData({
selectct: 0,
flag: false
}), setTimeout(function() {
that.setData({
selectsp: 0
})
},
1e3)
},
//选择礼品
chooseItemGift: function(e) {
var that = this;
var storeindex = e.currentTarget.dataset.storeindex;
var itemindex = e.currentTarget.dataset.itemindex;
var giftindex = e.currentTarget.dataset.giftindex;
var spdata = that.cartlist['items'][storeindex]['items'][itemindex]['pulse_gift_cart'][giftindex];
that.setData({
selectsp: 1,
selectct: 1,
cart_type: 3,
spdata: spdata
})
},
chooseStoreGift: function(e) {
var that = this;
var storeindex = e.currentTarget.dataset.storeindex;
var itemindex = e.currentTarget.dataset.itemindex;
var giftindex = e.currentTarget.dataset.giftindex;
var spdata = that.cartlist['items'][storeindex]['activitys']['gift'][giftindex];
that.setData({
selectsp: 1,
selectct: 1,
cart_type: 3,
spdata: spdata
})
},
//单品加价购
chooseItemBargains: function(e) {
var that = this;
var storeindex = e.currentTarget.dataset.storeindex;
var itemindex = e.currentTarget.dataset.itemindex;
var bargainsindex = e.currentTarget.dataset.bargainsindex;
var spdata = that.cartlist['items'][storeindex]['items'][itemindex]['pulse_bargains'][bargainsindex];
that.setData({
selectsp: 1,
selectct: 1,
cart_type: 1,
spdata: spdata
})
},
//店铺加价购
chooseStoreBargains: function(e) {
var that = this;
var storeindex = e.currentTarget.dataset.storeindex;
var itemindex = e.currentTarget.dataset.itemindex;
var bargainsindex = e.currentTarget.dataset.bargainsindex;
var spdata = that.cartlist['items'][storeindex]['bargains'][bargainsindex];
that.setData({
selectsp: 1,
selectct: 1,
cart_type: 1,
spdata: spdata
})
},
//选择礼品
chooseRaiseBuyItem: function(e) {
var that = this;
var item_id = e.currentTarget.dataset.item_id;
var activity_id = e.currentTarget.dataset.activity_id;
var cart_type = e.currentTarget.dataset.cart_type; //购买类型(ENUM):1-购买; 2-积分兑换; 3-赠品; 4-活动促销
var activity_item_id = e.currentTarget.dataset.activity_item_id;
var cart_quantity = 1;
that.addActivityItemToCart(item_id, activity_id, cart_type, activity_item_id, cart_quantity);
},
addActivityItemToCart: function(item_id, activity_id, cart_type, activity_item_id, cart_quantity) {
var that = this;
var param = {
item_id: item_id,
activity_id: activity_id,
cart_type: cart_type, //购买类型(ENUM):1-购买; 2-积分兑换; 3-赠品; 4-活动促销
activity_item_id: activity_item_id,
cart_quantity: cart_quantity,
};
that.$.request({
url: that.Config.URL.cart.add,
data: param,
success: function(data, status, msg, code) {
if (status == 200) {
that.$report('fb_mobile_add_to_cart', data);
that.getCartList()
that.setData({
selectct: 0,
flag: false
}), setTimeout(function() {
that.setData({
selectsp: 0
})
},
1e3)
} else {
that.$.alert(msg);
}
}
});
},
RefreshCart: function(e) {
this.getCartList();
},
}
}
</script>
<style lang="scss">
@import "../../styles/_variables.scss";
.m-product-all {
padding: 24rpx;
/* #ifdef MP */
padding-top: 0rpx;
/* #endif */
}
.m-product-list {
padding-top: 10rpx;
/* #ifdef MP */
padding-top: 0rpx;
/* #endif */
.store-box{
background-color: #fff;
border-radius: 20rpx;
margin-bottom: 30rpx;
.m-cell{
padding: 0;
}
.m-cell-access .m-cell-ft:after{
width: 4px;
height: 4px;
margin-top: -8rpx;
margin-left: 8rpx;
}
}
}
/*店铺信息 start*/
.m-store:after {
content: ' ';
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
//border-bottom: 1px solid #ebebe7;
color: #ebebe7;
transform-origin: 0 100%;
transform: scaleY(0.5);
}
.m-store {
height: 100rpx;
border-bottom: 0rpx solid #e3e3e3;
position: relative;
overflow: hidden;
}
.m-store-c {
display: flex;
}
.m-store-ck {
float: left;
width: 24px;
height: 100%;
position: relative;
padding-left: 0px;
margin: auto 3px auto 7px;
}
.m-store-ck icon,
.m-store-ck .uni-icons {
position: absolute;
top: 50%;
left: 50%;
margin-top: -40rpx;
margin-left: -20rpx;
}
.m-store-info {
height: 100rpx;
line-height: 100rpx;
margin-left:14rpx;
}
/*.m-store-info::before {content: " ";position: absolute;left: 0;bottom: 0;right: 0;height: 1rpx;border-bottom: 1rpx solid #e3e3e3;color: #CCCCCC;-webkit-transform-origin: 0 100%;transform-origin: 0 100%;-webkit-transform: scaleY(0.5);transform: scaleY(0.5);z-index: 3;}*/
.pre-info-price {
height: 18rpx!important;;
font-size: 12px!important;
color: #b0b0b0!important;
margin: 0 0 0 10rpx!important;
}
.m-act-img {
width: 100rpx;
height: 100rpx;
}
.m-item-act {
position: relative;
height: 100%;
width: 850rpx;
height: 100rpx;
}
.act-item-name {
width: 360rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.m-act-change {
float: right;
width: 100rpx;
background-color: #fff;
height: 100rpx;
line-height: 100rpx;
font-size: 28rpx;
position: absolute;
font-size: 28rpx;
top: 0rpx;
right: 100rpx;
color: #888;
text-align: center;
}
/*选择规格遮罩 start*/
.m-panel-sp {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 4;
background-color: rgba(0, 0, 0, 0.2)
}
.m-panel-sp-content {
background-color: #fff;
position: absolute;
width: 100%;
bottom: 0;
box-shadow: 0px -10rpx 15rpx rgba(0, 0, 0, 0.35);
}
.m-panel-sp-pinfo {
height: 80rpx;
box-sizing: border-box;
padding: 20rpx;
position: relative;
}
.m-panel-sp-pimg {
width: 100rpx;
height: 100rpx;
background-color: #fff;
border-radius: 8rpx;
box-sizing: border-box;
padding: 10rpx;
box-shadow: 0px 0rpx 10rpx rgba(0, 0, 0, 0.35);
float: left;
}
.m-panel-sp-pimg image {
width: 100%;
height: 100%;
}
.m-panel-sp-pname {
padding-left: 20rpx;
width: 580rpx;
/*float:right;*/
font-size: 28rpx;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
margin-top: 6rpx;
}
.m-panel-sp-pname .m-pprice {
color: $default-skin-bg;
font-size: 32rpx;
line-height: 50rpx;
font-weight: bold;
}
.m-panel-sp-icon {
position: absolute;
right: 20rpx;
top: 20rpx;
}
/* .m-panel-sp-listbox{height: 604rpx;} */
.m-panel-sp-listbox-item {
height: 130rpx;
border-top: 1rpx solid #e3e3e3;
box-sizing: border-box;
padding: 10rpx 20rpx;
}
/*选择规格遮罩 end*/
.u-cart-num {
position: relative;
z-index: 2;
margin-top:12rpx;
}
.m-cart-ck {
float: left;
width: 48rpx;
//background-color: #fff;
height: 100%;
position: relative;
padding-left: 0rpx;
margin:auto 6rpx auto 14rpx
}
.m-cart-ck icon,
.m-cart-ck .uni-icons {
position: absolute;
top: 50%;
left: 50%;
margin-top: -46rpx;
margin-left: -20rpx;
}
.uniui-circle-filled {
font-size: 24px;
}
.m-product-info {
width: 440rpx;
height: auto;
}
.m-product-info::before {
border: none;
}
.m-product-item::before {
content: "";
border: none;
}
.m-product-item:last-child::after {
content: "";
border: none;
}
.m-product-item:after {
content: ' ';
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
//border-bottom: 1px solid #ebebe7;
color: #ebebe7;
/*transform-origin: 0 100%;*/
transform: scaleY(0.5);
}
.m-product-item {
border-bottom: 0rpx solid #e3e3e3;
position: relative;
overflow: hidden;
height: auto;
}
.m-item-c {
position: relative;
height: 100%;
width: 850rpx;
//height: 212rpx;
}
.u-del {
width: 100rpx;
background-color: $default-skin-bg;
float: right;
color: #fff;
font-size: 28rpx;
text-align: center;
display: flex;
.u-del-btn {
margin:auto;
}
}
/*底部按钮 start*/
.m-footer-btn:before {
content: ' ';
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
border-bottom: 1px solid #ebebe7;
color: #ebebe7;
transform-origin: 0 100%;
transform: scaleY(0.5);
}
.m-footer-btn {
height: 112rpx;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
background-color: #fff;
border-top: 0rpx solid #e3e3e3;
z-index: 3;
display: flex;
}
.m-footer-btn-list {
width: 75%;
height: 100%;
position: relative;
float: left;
}
.m-footer-btn-item {
position: relative;
float: left;
width: 30%;
font-size: 24rpx;
color: #888;
line-height: 40rpx;
padding: 15rpx 0;
box-sizing: border-box;
height: 100%;
}
.m-footer-btn-main {
width: 25%;
height: 100%;
float: left;
background: $default-skin-bg;
color: #fff;
font-size: 32rpx;
text-align: center;
border-radius: 9px;
line-height: 80rpx;
height: auto;
text-align: center;
margin: auto;
margin-right: 20rpx;
}
.m-cart-total {
text-align: right;
padding-right: 24rpx;
width: 70%;
}
.m-cart-total text {
font-size: 16px;
color: $default-skin-bg;
}
.m-cart-total label {
color: $default-skin-bg;
}
.m-cart-del {
line-height: 70rpx;
font-size: 32rpx;
display: initial;
}
/*底部按钮 end*/
.del {
-webkit-animation: mdel .2s 1;
animation: mdel .2s 1;
left: -100rpx;
}
@-webkit-keyframes mdel {
0% {
left: 0;
}
100% {
left: -100rpx;
}
}
@keyframes mdel {
0% {
left: 0;
}
100% {
left: -100rpx
}
}
view {
font-size: 28rpx;
line-height: 2;
}
.m-product-name {
line-height: 40rpx;
font-size: 13px;
}
.m-product-item {
padding: 0;
margin-top: 0;
display: block;
background-color: transparent;
}
.m-product-img {
image {
padding: 14rpx;
}
}
.m-act-img {
width: 212rpx;
height: 100rpx;
image {
width: 100rpx;
height: 100rpx;
}
}
.m-product-box{
display: flex;
}
.m-product-price {
line-height: 74rpx !important;
flex:1;
}
.off-shelf-img {
width: 100rpx;
height: 100rpx;
float: right;
position: absolute;
right: 100rpx;
z-index: 3;
}
.off-shelf-simg {
width:100rpx;height:100rpx;
float: right;
position: absolute;
z-index: 3;
right: -16rpx;
top: -10px;
}
.m-footer-btn-list {
.m-cart-ck {
line-height: 24px;
margin-top: 24rpx;
margin-left: 10rpx;
}
}
.u-num-btn {
width: 52rpx;
line-height: 56rpx;
height: 56rpx;
}
.u-cart-num {
width: 160rpx;
}
.tag{
padding: 0 10rpx;
}
</style>