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.
high-mini/physical-merchants/classify/cart/cart.vue

699 lines
15 KiB

2 years ago
<template>
2 years ago
<view class="">
2 years ago
<view class="cart-container backcor9" @touchmove.stop>
<scroll-view v-if="cartList.length>0" :scroll-y="true" class="cart-list">
2 years ago
<uni-swipe-action>
<!-- 从这里开始遍历-->
<view v-for="(item,index) in cartList"
:class="(item.loseEfficacy?' loseEfficacy ':' ')+'marb10 border-8r backcolorfff pdtlb'"
2 years ago
:key="item.id" @click="goGoodsDetail(item.goodsId)">
2 years ago
2 years ago
<!-- :disabled="item.loseEfficacy" -->
2 years ago
<uni-swipe-action-item :auto-close="autoClose" :right-options="swipe_options"
@click="swipe_opt_event($event,item.id)" @change="swipe_change($event, item.id)">
2 years ago
<view class="cart-container2">
<checkbox-group @change="checkClick(item)">
<checkbox @click.stop class="mycheck checkContainer" :disabled="!isEdit&&item.loseEfficacy" color="#FFC71E"
2 years ago
value="item.id" :checked="item.whetherCheck" />
2 years ago
</checkbox-group>
2 years ago
<view class="cart-detail">
2 years ago
<view class="cart-img">
<image :src="imageUrl+item.img" class="img border-8r" mode="aspectFill"></image>
2 years ago
</view>
2 years ago
<view class="cart-msg">
<view class="">
<view class="cart-msg-title font16 marb10 mart5">{{item.title}}</view>
<view class="cart-msg-parm font13 marb10 fcor777">{{item.skuName|| ''}}
</view>
2 years ago
</view>
2 years ago
<view class="cart-msg-price">
2 years ago
<view class="dis-flex">
2 years ago
<view class="cart-price font18 fcorred">
2 years ago
<!-- ¥ <text class="font20">18 </text>.8 -->
¥{{item.price}}
</view>
<!-- <view class="fcor666 margle10 font14 text-lt">
¥{{item.originalPrice}}
</view> -->
2 years ago
</view>
2 years ago
2 years ago
<view @click.stop :class="'cart-num'+(item.loseEfficacy?' pont-event ':' ')">
2 years ago
2 years ago
<uni-number-box v-model="item.num" :min="1"
@noMoreLess="noMoreLess(item.id+'')"
@change="changeNumValue($event,item.id)" :max="999999999" />
2 years ago
</view>
2 years ago
</view>
2 years ago
2 years ago
</view>
</view>
</view>
2 years ago
</uni-swipe-action-item>
</view>
</uni-swipe-action>
2 years ago
<noMore ></noMore>
2 years ago
</scroll-view>
2 years ago
<view v-else class="empy-cart fcor666 fotct cart-list backcor9">
2 years ago
<view class="icon cart fcor666 font48"></view>
<view class=" mart30">
购物车内暂无商品快去逛逛吧
</view>
<view @click="goClassify" class="btn-go mart20">
去逛逛
</view>
</view>
2 years ago
<view class="cart-tool bg-white font16">
<view class="select-all dis-flex height100">
2 years ago
<checkbox-group @change="checkAllClick">
2 years ago
<label class="dis-flex">
2 years ago
<!-- :disabled="cartList.length == 0" -->
<checkbox class="mycheck" color="#FFC71E" :value="allCheck.value"
2 years ago
:checked="allCheck.whetherCheck" style="transform: scale(1.1);"/>
2 years ago
<view class="paddleft5 fcor777">全选</view>
2 years ago
</label>
<!-- -->
</checkbox-group>
2 years ago
<view v-if="!isEdit" class="paddleft5 fcorred " @click="editDelete">编辑</view>
<view v-if="isEdit" class="icon-ymt delete paddleft5 fcorred font16" @click="deleteCart">删除</view>
2 years ago
2 years ago
</view>
2 years ago
<view v-if="isEdit" class="tool-right paddleft5 fcorred " @click="editDelete">退出编辑</view>
2 years ago
<view v-if="!isEdit" class="tool-right ">
2 years ago
<view class="tool-jiesuan marRight10 dis-flex">
2 years ago
<!-- <text v-if="priceOrigin > 0" class="fcor666 margle10 marRight10 font14 text-lt">¥{{priceOrigin}}</text> -->
2 years ago
<text>合计:</text> <text v-if="priceAll>0" class="fcorred font20">¥{{priceAll | numFormat}}</text>
2 years ago
<text v-if="priceAll==0" class="fcorred">¥{{priceAll}}</text>
2 years ago
2 years ago
</view>
<view class="jiesuan-btn fcorfff " @click="settleAccount">
结算
</view>
2 years ago
</view>
2 years ago
2 years ago
</view>
</view>
2 years ago
2 years ago
2 years ago
</view>
2 years ago
2 years ago
</template>
<script>
2 years ago
import noMore from '@/components/no-more/no-more.vue'
2 years ago
import uniNumberBox from '@/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue'
2 years ago
import {
getShoppingCartList,
2 years ago
goodsEditNum,
2 years ago
deleteShoppingCart
} from '@/Utils/physicalObject.js'
const app = getApp();
2 years ago
export default {
2 years ago
data() {
return {
imageUrl: app.globalData.imgUrl, //图片地址
cartList: [],
checkList: [],
allCheck: {
name: '全选',
whetherCheck: false,
value: 'all'
2 years ago
},
2 years ago
2 years ago
//
2 years ago
swipe_options: [{
2 years ago
text: '删除',
icon: ' delete ',
style: {
backgroundColor: '#E64340'
}
},
// {
// isCheck: false,
// text: "收藏",
// icon: ' shoucang32 ',
// style: {
// backgroundColor: '#f6c133'
// }
// },
2 years ago
2 years ago
],
2 years ago
swipe_item_index: null,
2 years ago
numberValue: 0,
cartList: [],
autoClose: false,
2 years ago
// listSelect:[],
2 years ago
isEdit: false,
showAction: 'none'
2 years ago
}
},
2 years ago
components: {
2 years ago
// cartList,
noMore,
2 years ago
"uni-number-box": uniNumberBox
2 years ago
},
2 years ago
computed: {
2 years ago
//现价金额
2 years ago
priceAll() {
2 years ago
let str = 0;
// for (var i = 0; i < this.cartList.length; i++) {
// if (this.cartList[i].whetherCheck) {
// str += this.cartList[i].num * this.cartList[i].price;
// }
// }
if (this.cartList.length > 0) {
this.cartList.map(item => {
if (item.whetherCheck) {
str =parseFloat((str + (item.num*item.price)).toFixed(2))
}
})
return str;
} else {
return 0;
2 years ago
}
2 years ago
2 years ago
},
// 原价
2 years ago
// priceOrigin(){
// var str = 0;
// for (var i = 0; i < this.cartList.length; i++) {
// if (this.cartList[i].whetherCheck) {
// str += this.cartList[i].num * this.cartList[i].originalPrice;
// }
// }
// return str;
// }
2 years ago
},
2 years ago
2 years ago
onShow(){
this.initData();
},
2 years ago
methods: {
initData(status) {
if(!status){
uni.showLoading({
title: '加载中',
mask:true,
duration:2000
});
2 years ago
// console.log(20)
}
2 years ago
getShoppingCartList().then(res => {
if(!status){
uni.hideLoading();
}
2 years ago
if (res.return_code == '000000') {
this.allCheck.whetherCheck = false;
2 years ago
this.cartList = res.return_data;
// this.allCheckInit();
2 years ago
2 years ago
} else {
uni.showToast({
title: res.return_msg,
icon: 'none',
duration: 2000
})
}
})
},
editDelete() {
2 years ago
this.isEdit = !this.isEdit;
2 years ago
if (!this.isEdit) { //退出编辑
this.cartList.map(item => {
2 years ago
if (item.whetherCheck && item.loseEfficacy) {
2 years ago
item.whetherCheck = false;
}
})
} else { //进入编辑
if (this.allCheck.whetherCheck) {
this.cartList.map(item => {
item.whetherCheck = true;
2 years ago
})
}
}
2 years ago
2 years ago
},
// 全选的点击事件
checkAllClick(e) {
2 years ago
this.allCheck.whetherCheck = !this.allCheck.whetherCheck;
if (this.allCheck.whetherCheck) {
this.cartList.map(item => {
2 years ago
if (!this.isEdit) { //商品的全选事件,loseEfficacy商品的失效,默认undefined
if (!item.loseEfficacy) {
2 years ago
item.whetherCheck = true
2 years ago
}
2 years ago
} else { //编辑的全选事件
item.whetherCheck = true
}
})
} else {
this.cartList.map(item => {
item.whetherCheck = false
})
}
2 years ago
},
2 years ago
2 years ago
// 单个商品的选择
checkClick(item) {
2 years ago
item.whetherCheck = !item.whetherCheck;
2 years ago
2 years ago
if (!item.whetherCheck) {
2 years ago
if (!this.isEdit && !item.loseEfficacy) { //商品
2 years ago
this.allCheck.whetherCheck = false;
} else if (this.isEdit) {
this.allCheck.whetherCheck = false;
2 years ago
}
2 years ago
2 years ago
} else {
2 years ago
// // 判断每一个商品是否是被选择的状态
// const goods = this.cartList.every(item => {
// if(!this.isEdit){//商品
2 years ago
// if(item.loseEfficacy){
2 years ago
// return true;
// }
// }
// return item.whetherCheck === true
// })
// if (goods) {
// this.allCheck.whetherCheck = true
// } else {
// this.allCheck.whetherCheck = false
// }
this.allCheckInit()
2 years ago
}
},
2 years ago
allCheckInit() {
2 years ago
if (this.cartList.length == 0) {
2 years ago
this.allCheck.whetherCheck = false;
return
}
2 years ago
2 years ago
// 判断每一个商品是否是被选择的状态
const goods = this.cartList.every(item => {
if (!this.isEdit&&item.loseEfficacy) { //商品
2 years ago
return true;
}
2 years ago
return item.whetherCheck === true
})
if (goods) {
this.allCheck.whetherCheck = true
} else {
this.allCheck.whetherCheck = false
}
2 years ago
2 years ago
},
// 判断购物车内是否有商品
isHaveGoods() {
if (this.cartList.length == 0) {
2 years ago
uni.showToast({
title: '购物车内暂无商品喔',
duration: 1000,
2 years ago
icon: 'none'
2 years ago
});
2 years ago
2 years ago
return false
}
return true;
},
2 years ago
2 years ago
// 购物车删除
deleteCart() {
2 years ago
if (!this.isHaveGoods()) return;
2 years ago
var select = [];
for (var i = 0; i < this.cartList.length; i++) {
2 years ago
if (this.cartList[i].whetherCheck) {
2 years ago
select.push(this.cartList[i].id)
}
}
2 years ago
if (select.length == 0) {
2 years ago
uni.showToast({
title: '请勾选要移除购物车的商品',
duration: 1000,
2 years ago
icon: 'none'
2 years ago
});
return
2 years ago
} else {
// console.log(select.join(), "要移除的商品id")
2 years ago
let str = select.join();
2 years ago
this.noMoreLess(str)
2 years ago
}
2 years ago
2 years ago
},
// 结算
2 years ago
settleAccount() {
2 years ago
2 years ago
if (!this.isHaveGoods()) return;
if (this.priceAll > 0) {
2 years ago
let selestArr = this.cartList.filter(item => item.whetherCheck == true)
2 years ago
selestArr = JSON.stringify(selestArr)
2 years ago
// console.log(selestArr,"选择的商品")
2 years ago
uni.navigateTo({
2 years ago
url: '/physical-merchants/settleAccounts/settleAccounts?goodsList=' + selestArr
2 years ago
})
2 years ago
} else {
2 years ago
uni.showToast({
title: '请勾选要购买的商品',
duration: 1000,
2 years ago
icon: 'none'
2 years ago
});
}
2 years ago
2 years ago
},
// 滑动点击
2 years ago
swipe_opt_event(e, id) {
// console.log(e, "dianji")
2 years ago
2 years ago
if (e.index == 1) { //收藏
2 years ago
2 years ago
// console.log(e.content.isCheck)
// e.content.isCheck=!e.content.isCheck
2 years ago
2 years ago
// if(e.content.isCheck){
// e.content.icon=" shoucang32-select "
// }else{
// e.content.icon=" shoucang32 "
// }
this.showAction = 'right'
2 years ago
2 years ago
return
}
2 years ago
if (e.index == 0) { //删除
this.noMoreLess(id + "")
2 years ago
return
}
2 years ago
2 years ago
},
// 滑动事件
swipe_change(e, id) {
// console.log(e, id)
2 years ago
// this.swipe_item_index= (e == 'none') ? null : v
2 years ago
},
2 years ago
noMoreLess(ids) {
2 years ago
let _this = this;
uni.showModal({
title: '提示',
content: '确定把该商品移除购物车吗?',
2 years ago
success: function(res) {
2 years ago
if (res.confirm) {
// console.log('用户点击确定,要删除的id', ids);
2 years ago
let params = {
ids: ids
};
deleteShoppingCart(params).then(res => {
let title;
2 years ago
if (res.return_code == '000000') {
2 years ago
title = res.return_data;
} else {
2 years ago
title = res.return_msg;
}
uni.showToast({
title: title,
icon: 'none',
duration: 2000
2 years ago
})
2 years ago
_this.initData();
2 years ago
2 years ago
})
2 years ago
2 years ago
} else if (res.cancel) {
2 years ago
// console.log('用户点击取消');
2 years ago
}
}
});
2 years ago
2 years ago
},
2 years ago
// 点击去商品详情
goGoodsDetail(goodsId){
uni.navigateTo({
url: '/physical-merchants/classify/goodsDetail/goodsDetail?goodsId=' + goodsId
})
},
2 years ago
2 years ago
changeNumValue(v, id) {
let params = {
2 years ago
id: id,
2 years ago
num: v
2 years ago
}
2 years ago
2 years ago
goodsEditNum(params).then(res => {
2 years ago
if (res.return_code == '000000') {
//重新刷新数据
this.initData();
2 years ago
} else {
2 years ago
//增加数量失败
2 years ago
uni.showToast({
title: res.return_msg,
icon: 'none',
duration: 2000
})
//重新刷新数据
this.initData(2);
2 years ago
}
2 years ago
2 years ago
})
2 years ago
},
goClassify(){
2 years ago
var pages = getCurrentPages();
pages.reverse()
let index = -1;
pages.map((item,ind)=>{
if(item.route == 'pages/tabBar/classify/classify'){
index = ind ;
return
}
})
if(index == -1){
uni.navigateTo({
url:'/pages/tabBar/classify/classify'
})
return
}
uni.navigateBack({
delta:index
2 years ago
})
2 years ago
2 years ago
},
2 years ago
2 years ago
}
2 years ago
2 years ago
}
</script>
<style lang="scss" scoped>
2 years ago
.pdtlb{
padding: 10px 10px 10px 0;
}
2 years ago
.empy-cart{
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.btn-go{
width: 40%;
height: 40px;
line-height: 40px;
border-radius: 20px;
border:1px solid #FF8F19;
color: #FF8F19;
/* #FFCC1E, #FF8F19 */
}
2 years ago
.bg-white {
background-color: #fff;
}
.cart-container {
2 years ago
height:calc(100vh - var(--window-top)) ;
2 years ago
padding: 10px 20rpx 0px;
box-sizing: border-box;
position: relative;
}
2 years ago
2 years ago
.cart-list {
2 years ago
height: calc(100% - 80px);
2 years ago
}
2 years ago
// 列表
.cart-container2 {
2 years ago
display: flex;
align-items: center;
2 years ago
.mycheck {
// margin:0 20rpx;
2 years ago
}
.checkContainer{
height: 200rpx;
line-height: 200rpx;
padding-left: 10px;
}
2 years ago
.cart-detail {
2 years ago
flex: 1;
display: flex;
2 years ago
align-items: center;
padding: 0 10rpx;
.cart-img {
.img {
vertical-align: middle;
width: 200rpx;
height: 200rpx;
}
2 years ago
}
2 years ago
.cart-msg {
flex: 1;
align-self: flex-start;
padding-left: 20rpx;
2 years ago
display: flex;
2 years ago
flex-direction: column;
2 years ago
justify-content: space-between;
2 years ago
.cart-msg-title {}
.cart-msg-parm {}
.cart-msg-price {
display: flex;
align-items: center;
justify-content: space-between;
.cart-price {}
.cart-num {}
2 years ago
}
}
}
2 years ago
2 years ago
}
2 years ago
.pont-event {
pointer-events: none;
}
2 years ago
2 years ago
// 失效
2 years ago
.loseEfficacy {
2 years ago
2 years ago
.cart-img {
position: relative;
:before {
content: '商品失效';
display: block;
height: 20rpx;
width: 120rpx;
line-height: 20rpx;
padding: 20rpx;
border-radius: 20rpx;
background-color: #E6E6E6;
position: absolute;
top: calc(50% - 30rpx);
left: 20rpx;
z-index: 10;
font-size: 28rpx;
text-align: center;
}
2 years ago
}
2 years ago
background-color: #ffffff;
opacity: 0.8;
2 years ago
}
2 years ago
// 底部
.cart-tool {
position: absolute;
2 years ago
// bottom: 0;
bottom:var(--window-bottom);
2 years ago
left: 0;
right: 0;
box-sizing: border-box;
padding: 10px;
2 years ago
height: 80px;
2 years ago
// line-height: 60px;
2 years ago
display: flex;
2 years ago
justify-content: space-between;
2 years ago
align-items: center;
2 years ago
.select-all {
display: flex;
align-items: center;
2 years ago
}
2 years ago
.tool-right {
flex: 1;
display: flex;
justify-content: flex-end;
align-items: center;
.tool-jiesuan {}
.jiesuan-btn {
2 years ago
width: 240rpx;
height: 50px;
line-height: 50px;
2 years ago
text-align: center;
2 years ago
border-radius: 25px;
2 years ago
background: linear-gradient(to right, #FFCC1E, #FF8F19);
}
2 years ago
}
}
2 years ago
</style>