java-mall-app/pages/cart/cart.vue

2194 lines
61 KiB
Vue

<template>
<view class="page">
<!-- <status-bar :backgroundColor="'#fff'"></status-bar>
<uni-nav-bar title="购物车"></uni-nav-bar> -->
<view v-if="loadComplete">
<block v-if="isdata">
<view class="manage" @click="showDelBtn">{{
!showDelList ? "管理" : "退出管理"
}}</view>
<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="28"
/>
</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 }"
@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="28"
/>
</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>
<label
class="u-del iconfont icon-delete"
:data-id="item.cart_id"
@click.stop.prevent="delcart"
@touchstart.stop.prevent
@touchmove.stop.prevent
@touchend.stop.prevent="delcart"
>
</label>
</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>
</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="28"
/>
</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="28"
/>
</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="28"
/>
</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 m-footer-btn-item-left">
<view class="m-cart-ck" @click="ckall" :data-isck="isckall">
<uni-icons
:type="isckall ? 'circle-filled' : 'circle'"
:color="isckall ? theme_bg : '#e3e3e3'"
size="28"
/>
</view>
<view
style="
padding-right: 10rpx;
display: initial;
line-height: 48px;
"
>{{ __("全选") }}</view
>
<!-- <view class="m-cart-del" @click="delAll" v-show="showDelList">
<view class="btn-del">
删除
</view>
</view> -->
</view>
<view class="m-footer-btn-item m-cart-total" v-show="!showDelList">
<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"
v-show="!showDelList"
@click="submitorder"
>
{{ sprintf(__("结算(%s)"), cartlist.Total) }}
</view>
<view class="m-footer-btn-main" v-show="showDelList" @click="delAll">
删除
</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,
showDelList: 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",
]),
showDelBtn() {
this.showDelList = !this.showDelList;
},
//获取平台信息
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;
align-items: center;
}
.m-store-ck {
display: flex;
justify-content: center;
margin-left: 7px;
width: 27px;
}
.thin-border-right {
border-top-left-radius: 12rpx;
border-bottom-left-radius: 12rpx;
border: 1px solid #dddddd;
}
.thin-border-left {
border-top-right-radius: 12rpx;
border-bottom-right-radius: 12rpx;
border: 1px solid #dddddd;
}
.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;
font-size: 15px;
font-weight: bold;
}
/*.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;
}
.manage {
margin: 20rpx 60rpx;
font-weight: bold;
text-align: right;
}
.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;
}
.u-cart-num::after {
// z-index: 99;
// border: 1px solid #cacaca;
border: none;
}
/* .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;
margin-top: 12rpx;
z-index: 2;
}
.m-cart-ck {
// float: left;
// width: 48rpx;
//background-color: #fff;
// height: 100%;
// position: relative;
// padding-left: 0rpx;
// margin: auto 6rpx auto 14rpx;
display: flex;
align-items: center;
justify-content: center;
width: 27px;
margin: 0 7px;
margin-top: -16px;
}
.m-cart-ck icon,
.m-cart-ck .uni-icons {
// position: absolute;
// top: 50%;
// left: 50%;
// margin-top: -20rpx;
// margin-left: -20rpx;
}
.uniui-circle-filled {
font-size: 24px;
}
.m-product-info {
width: 60%;
max-width: 60%;
height: auto;
padding: 0px 18px 14px 5px;
}
@media screen and (max-width: 320px) {
.m-product-info {
width: 57%;
}
}
@media screen and (min-width: 321px) {
.m-product-info {
width: 60%;
}
}
.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 {
position: relative;
font-size: 20px;
top: -1px;
color: #888888;
}
/*底部按钮 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 {
display: flex;
flex: 1;
justify-content: space-between;
align-items: center;
margin: 0 8px;
height: 100%;
}
.m-footer-btn-item {
}
.m-footer-btn-item-left {
display: flex;
align-items: center;
.m-cart-ck {
margin-top: 0;
display: inline;
}
}
.m-footer-btn-main {
width: 23%;
height: 100%;
float: right;
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 {
}
.m-cart-total text {
font-size: 16px;
color: $default-skin-bg;
}
.m-cart-total label {
color: $default-skin-bg;
}
.m-cart-del {
display: flex;
align-items: center;
margin-left: 7px;
.icon-delete {
font-size: 20px;
}
}
/*底部按钮 end*/
.del {
-webkit-animation: mdel 0.2s 1;
animation: mdel 0.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: 34rpx;
font-size: 12px;
min-height: 34px;
}
.m-product-item {
padding: 0;
margin-top: 0;
display: block;
background-color: transparent;
}
.m-product-img {
width: 80px;
height: 80px;
image {
// padding: 14rpx;
width: 80px;
height: 80px;
padding: 0;
}
}
.m-act-img {
width: 59px;
height: 59px;
image {
width: 59px;
height: 59px;
}
}
.m-product-box {
display: flex;
margin-right: 10px;
}
.m-product-price {
line-height: 40px !important;
flex: 1;
font-size: 12px;
}
.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: 60rpx;
line-height: 56rpx;
height: 56rpx;
background: #f9f9f9;
}
.u-cart-num {
width: 90px;
height: 25px;
left: -20px;
.u-num-btn {
width: 29px;
line-height: 28px;
height: 28px;
font-weight: bold;
}
input {
font-size: 15px !important;
width: 28px;
height: 28px;
line-height: 28px;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}
}
.tag {
padding: 0 10rpx;
}
</style>