增加培训班管理,增加购物车功能
This commit is contained in:
@@ -234,7 +234,7 @@
|
||||
</view>
|
||||
<view class="goods_nav_box" v-if="!this.$store.state.loadingShow">
|
||||
<uni-goods-nav :fill="true" :options="buyOptions" :button-group="customButtonGroup1"
|
||||
@click="onHandleClickBuy" @buttonClick="onHandleClickBuy1" />
|
||||
@click="onHandleClick" @buttonClick="onHandleClickBuy1" />
|
||||
</view>
|
||||
<common-select-goods ref="commonSelectGoods" :selectGoodsData="selectGoodsData" :goodsList="goodsList"
|
||||
:buyOptions="buyOptions" :customButtonGroup1="customButtonGroup1" @selectGoods="selectGoods"
|
||||
@@ -303,8 +303,11 @@
|
||||
parameterList: [],
|
||||
booksList: [],
|
||||
coursesList: [],
|
||||
buyOptions: [],
|
||||
|
||||
buyOptions: [{
|
||||
icon: "cart",
|
||||
text: "购物车",
|
||||
}],
|
||||
|
||||
swiperList: [],
|
||||
goodsList: [],
|
||||
options: {},
|
||||
@@ -347,12 +350,20 @@
|
||||
|
||||
goodsList: "book/shopproduct/getGlProductList",
|
||||
},
|
||||
customButtonGroup1: [{
|
||||
with: 200,
|
||||
customButtonGroup1: [
|
||||
{
|
||||
text: "加入购物车",
|
||||
backgroundColor: "linear-gradient(90deg, #FFCD1E, #FF8A18)",
|
||||
color: "#fff",
|
||||
},
|
||||
{
|
||||
text: "立即购买",
|
||||
backgroundColor: "linear-gradient(90deg, #FE6035, #EF1224)",
|
||||
color: "#fff",
|
||||
}, ],
|
||||
buttonType: '', //点击的是加入购物车还是购买
|
||||
cartList: [], // 购物车列表
|
||||
productAmount: 1, // 商品数量
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
@@ -413,8 +424,17 @@
|
||||
this.$refs.commonSelectGoods.open();
|
||||
this.$forceUpdate();
|
||||
},
|
||||
|
||||
onHandleClickBuy1() {
|
||||
|
||||
//点击购物车
|
||||
onHandleClick(){
|
||||
console.log('点击购物车')
|
||||
uni.navigateTo({
|
||||
url: "/pages/goods/shopping",
|
||||
});
|
||||
},
|
||||
//点击筛选商品
|
||||
onHandleClickBuy1(e) {
|
||||
this.buttonType = e.index;
|
||||
if (this.options.type == "visitor") {
|
||||
uni.showModal({
|
||||
content: "登陆后可购买本商品",
|
||||
@@ -433,22 +453,115 @@
|
||||
}
|
||||
this.$refs.commonSelectGoods.open();
|
||||
},
|
||||
//点击下单按钮
|
||||
onHandleClickBuy() {
|
||||
var mynavData = {
|
||||
goods: [{
|
||||
productImages: this.selectGoodsData.productImages,
|
||||
productId: this.selectGoodsData.productId,
|
||||
productName: this.selectGoodsData.productName,
|
||||
goodsType: this.selectGoodsData.goodsType,
|
||||
}],
|
||||
navTitle: this.options.navTitle,
|
||||
title: this.options.title,
|
||||
typeId: 0
|
||||
};
|
||||
uni.setStorageSync('mynavData', mynavData);
|
||||
uni.navigateTo({
|
||||
url: '/pages/goods/order',
|
||||
});
|
||||
if(this.buttonType==0){ //如果是加入购物车
|
||||
console.log('剩余', this.selectGoodsData.productStock)
|
||||
if(this.selectGoodsData.productStock==0){
|
||||
uni.showToast({
|
||||
title: "商品库存不足",
|
||||
icon: "none",
|
||||
duration: 1000,
|
||||
});
|
||||
}else{
|
||||
this.$http.post(`book/ordercart/getCartList?userId=${this.userInfo.id}`)
|
||||
.then((res) => {
|
||||
this.cartList = res.cartList;
|
||||
this.isAddLink(this.selectGoodsData);
|
||||
});
|
||||
}
|
||||
}else{ //如果是正常下单
|
||||
var mynavData = JSON.stringify({
|
||||
goods: [{
|
||||
productImages: this.selectGoodsData.productImages,
|
||||
productId: this.selectGoodsData.productId,
|
||||
productName: this.selectGoodsData.productName,
|
||||
goodsType: this.selectGoodsData.goodsType,
|
||||
}],
|
||||
typeId: 0
|
||||
});
|
||||
uni.navigateTo({
|
||||
url: `/pages/goods/order?data=${mynavData}`,
|
||||
});
|
||||
}
|
||||
},
|
||||
//统计商品信息
|
||||
isAddLink(item) {
|
||||
let data = {
|
||||
userId: this.userInfo.id,
|
||||
productId: item.productId,
|
||||
productAmount: this.productAmount,
|
||||
price: item.price,
|
||||
};
|
||||
// 判断列表是否为空
|
||||
if (this.cartList.length > 0) {
|
||||
let flag = "";
|
||||
let shagnpin = {};
|
||||
// 循环购物车列表
|
||||
flag = this.cartList.some((item, index) => {
|
||||
if (item.productId == data.productId) {
|
||||
shagnpin = item;
|
||||
shagnpin.productAmount = item.productAmount + 1;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
if (flag) {
|
||||
// 已在购物车中添加
|
||||
$http.request({
|
||||
url: "book/ordercart/update",
|
||||
method: "POST",
|
||||
data: shagnpin,
|
||||
header: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({
|
||||
title: "加入购物车成功",
|
||||
duration: 1000,
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 加入购物车
|
||||
$http.request({
|
||||
url: "book/ordercart/save",
|
||||
method: "POST",
|
||||
data,
|
||||
header: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({
|
||||
title: "加入购物车成功",
|
||||
duration: 1000,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 购物车列表为空时直接加入购物车
|
||||
$http.request({
|
||||
url: "book/ordercart/save",
|
||||
method: "POST",
|
||||
data,
|
||||
header: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
uni.showToast({
|
||||
title: "加入购物车成功",
|
||||
duration: 1000,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
this.$refs.commonSelectGoods.close();
|
||||
},
|
||||
buttonClick(e) {
|
||||
console.log(e);
|
||||
@@ -1276,4 +1389,9 @@
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
/deep/.uni-tab__text{
|
||||
font-size: 26rpx;
|
||||
line-height: 28rpx;
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
384
pages/goods/shopping.vue
Normal file
384
pages/goods/shopping.vue
Normal file
@@ -0,0 +1,384 @@
|
||||
<template>
|
||||
<view>
|
||||
<z-nav-bar title="购物车"></z-nav-bar>
|
||||
<view class="shopCarContent">
|
||||
<scroll-view scroll-y="true" v-if="cartList.length>0">
|
||||
<view class="cartItem" v-for="(item,index) in cartList" :key="index">
|
||||
<view class="select">
|
||||
<checkbox style="transform:scale(0.8)" :checked="item.checked" @click="checkboxGroupChange(index,item)" class="round checkedItem" />
|
||||
</view>
|
||||
<view class="cartContent" style="position: relative;">
|
||||
<span v-if="item.isVipPrice==1&&item.vipPrice!=0&&item.vipPrice!=null"
|
||||
style="position: absolute;z-index: 10;top: 4px;left: 0px; text-align: center;font-size: 18rpx;background-color: #f94f04;color: #fff; border-radius:4px; padding:2px 4px;line-height: 14px;">VIP优惠</span>
|
||||
|
||||
<image :src="item.image" mode="" @click="goDetail(item.productId)"></image>
|
||||
<view class="itemCenter">
|
||||
<view class="cartTitle" @click="goDetail(item.productId)" style="display: flex;align-items: center;">
|
||||
<text>{{item.productName}}</text>
|
||||
</view>
|
||||
<view class="itemPrice">
|
||||
<text v-if="item.isVipPrice==1&&item.vipPrice!=0&&item.vipPrice!=null">
|
||||
<text style="color: #e97512;font-size: 16px;font-weight: bold;">¥{{(item.vipPrice).toFixed(2)}}</text>
|
||||
<text style="color: #8a8a8a;font-size: 14px;margin-left: 4px;font-weight: bold;text-decoration: line-through;">¥{{(item.price).toFixed(2)}}</text>
|
||||
</text>
|
||||
|
||||
<text
|
||||
v-else-if="item.activityPrice && item.activityPrice > 0">
|
||||
<text style="color: #e97512;font-size: 16px;font-weight: bold;">¥{{(item.activityPrice).toFixed(2)}}</text>
|
||||
<text style="color: #8a8a8a;font-size: 14px;margin-left: 4px;font-weight: bold;text-decoration: line-through;">¥{{(item.price).toFixed(2)}}</text>
|
||||
</text>
|
||||
|
||||
<text v-else style="color: #e97512;font-size: 16px;font-weight: bold;">¥{{item.price}}</text>
|
||||
<u-number-box button-size="20" v-model="item.productAmount" @change="valChange($event,item)"
|
||||
:input-width="25" :input-height="10" :min="1" :max="item.productStock" integer
|
||||
@overlimit='overlimit'></u-number-box>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
<view v-else style=" font-size: 28rpx; text-align: center; padding-top: 100rpx; color: #999;">暂无数据</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部操作区 -->
|
||||
<view class="shopCarFooter">
|
||||
<view class="selectAll">
|
||||
<checkbox :checked="all" style="transform:scale(0.8)" @click="isSelectAll()" class="round checkedItem" />
|
||||
<text class="cartCho">全选</text>
|
||||
<button class="mini-btn"
|
||||
style="border-radius: 10rpx; font-size: 26rpx; line-height: 30rpx; padding: 10rpx 25rpx; margin-left: 20rpx;"
|
||||
v-if="isCartDelShow" @click="delCart()" type="warn" size="mini">删除</button>
|
||||
</view>
|
||||
<view class="exhibition">
|
||||
<view class="total">合计: <b>¥{{totalPrice}}</b>
|
||||
</view>
|
||||
<view class="settlement" @click="setTment()">
|
||||
结算
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import $http from '@/config/requestConfig.js';
|
||||
import {
|
||||
mapState
|
||||
} from 'vuex';
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
playData: {},
|
||||
totalPrice: 0, // 总价
|
||||
all: false, // 是否全选
|
||||
isCartDelShow: false, // 是否展示删除按钮
|
||||
cartList: [] // 购物车列表
|
||||
};
|
||||
},
|
||||
//第一次加载
|
||||
onLoad(e) {
|
||||
this.getCartList()
|
||||
},
|
||||
//页面显示
|
||||
onShow() {
|
||||
this.getCartList();
|
||||
this.all = false;
|
||||
this.isCartDelShow = false
|
||||
this.totalPrice = 0
|
||||
},
|
||||
computed: {
|
||||
...mapState(['userInfo']),
|
||||
},
|
||||
//方法
|
||||
methods: {
|
||||
// 获取购物车列表
|
||||
getCartList() {
|
||||
this.$http.post(`book/ordercart/getCartList?userId=${this.userInfo.id}`).then(res => {
|
||||
this.cartList = res.cartList
|
||||
if (res.cartList.length > 0) {
|
||||
res.cartList.forEach((item, index) => {
|
||||
item.checked = false
|
||||
})
|
||||
this.cartList = res.cartList
|
||||
}
|
||||
})
|
||||
},
|
||||
// 是否全选
|
||||
isSelectAll(e) {
|
||||
if (this.cartList.length > 0) {
|
||||
this.all = !this.all
|
||||
this.cartList.forEach((item, index) => {
|
||||
item.checked = this.all
|
||||
})
|
||||
this.isCartDelShow = this.all
|
||||
this.total()
|
||||
} else {
|
||||
this.all = false
|
||||
}
|
||||
},
|
||||
// 选中单独商品
|
||||
checkboxGroupChange(index, item) {
|
||||
// 修改当前item的checked
|
||||
this.cartList[index].checked = !item.checked
|
||||
// 判断是否全选
|
||||
this.all = this.cartList.every((item, index) => {
|
||||
return item.checked == true
|
||||
})
|
||||
// 判断是否展示删除按钮
|
||||
this.isCartDelShow = this.cartList.some((item, index) => {
|
||||
return item.checked == true
|
||||
})
|
||||
// 计算总价
|
||||
this.total()
|
||||
},
|
||||
// 计算总价
|
||||
total() {
|
||||
let allprice = 0;
|
||||
this.cartList.forEach((item, index) => {
|
||||
let price = 0;
|
||||
if (item.checked) {
|
||||
if (item.isVipPrice == 1 && item.vipPrice != 0) {
|
||||
price = (item.productAmount * item.vipPrice).toFixed(2);
|
||||
} else {
|
||||
if (item.activityPrice && item.activityPrice > 0) {
|
||||
price = (item.productAmount * item.activityPrice).toFixed(2);
|
||||
} else {
|
||||
price = (item.productAmount * item.price).toFixed(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
allprice += Number(price)
|
||||
})
|
||||
this.totalPrice = allprice.toFixed(2)
|
||||
},
|
||||
// 超出阈值时
|
||||
overlimit() {
|
||||
uni.showToast({
|
||||
title: '超出商品数量',
|
||||
icon: 'error',
|
||||
duration: 1000
|
||||
})
|
||||
},
|
||||
valChange(e, item) {
|
||||
console.log(e)
|
||||
let productItem = {}
|
||||
productItem = item
|
||||
productItem.productAmount = e.value
|
||||
this.updateCart(productItem)
|
||||
setTimeout(() => {
|
||||
this.total()
|
||||
}, 300)
|
||||
},
|
||||
// 更新购物车
|
||||
updateCart(shagnpin) {
|
||||
// 已在购物车中添加
|
||||
$http.request({
|
||||
url: "book/ordercart/update",
|
||||
method: "POST",
|
||||
data: shagnpin,
|
||||
header: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
// 删除购物车
|
||||
delCart() {
|
||||
let cartIdArr = [];
|
||||
this.cartList.forEach((item, index) => {
|
||||
if (item.checked) {
|
||||
cartIdArr.push(item.cartId)
|
||||
}
|
||||
})
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '是否删除这个商品',
|
||||
confirmText: '确定',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
uni.showLoading({
|
||||
title: '加载中',
|
||||
mask: true
|
||||
})
|
||||
console.log(cartIdArr)
|
||||
$http.request({
|
||||
url: "book/ordercart/delete",
|
||||
method: "POST",
|
||||
data: cartIdArr,
|
||||
header: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
}).then(res => {
|
||||
this.isCartDelShow = false
|
||||
this.totalPrice = 0
|
||||
this.getCartList()
|
||||
uni.hideLoading();
|
||||
this.all = false;
|
||||
})
|
||||
} else {
|
||||
console.log('cancel') //点击取消之后执行的代码
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 跳转结算页面
|
||||
setTment() {
|
||||
let goods = []
|
||||
this.cartList.forEach((item, index) => {
|
||||
if (item.checked) {
|
||||
goods.push({
|
||||
productImages: item.productImages,
|
||||
productId: item.productId,
|
||||
productName: item.productName,
|
||||
goodsType: item.goodsType,
|
||||
productAmount: item.productAmount,
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
let mynavData = JSON.stringify({
|
||||
goods: goods,
|
||||
typeId: 1
|
||||
})
|
||||
// 如果没有勾选
|
||||
if (goods.length == 0) {
|
||||
uni.showToast({
|
||||
title: "请先勾选商品",
|
||||
icon: 'error',
|
||||
duration: 1000,
|
||||
})
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: '/pages/goods/order?data='+ mynavData
|
||||
});
|
||||
}
|
||||
},
|
||||
//商品内容跳转
|
||||
goDetail(id) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/goods/index?isMiaosha=1&id='+id
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import '@/static/mixin.scss';
|
||||
|
||||
.shopCarContent {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding-bottom: 104rpx;
|
||||
padding-top: 20rpx;
|
||||
|
||||
.cartItem {
|
||||
padding: 10rpx 10rpx 10rpx 10rpx;
|
||||
margin-bottom: 20rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background-color: #fff;
|
||||
|
||||
.cartContent {
|
||||
|
||||
flex: 1;
|
||||
display: flex;
|
||||
|
||||
image {
|
||||
width: 130rpx;
|
||||
height: 150rpx;
|
||||
border-radius: 10rpx;
|
||||
padding: 10rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
|
||||
.itemCenter {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
.cartTitle {
|
||||
font-size: 30rpx;
|
||||
margin: 35rpx 0 20rpx 0;
|
||||
}
|
||||
|
||||
.itemPrice {
|
||||
font-size: 28rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shopCarFooter {
|
||||
width: 100%;
|
||||
height: 100rpx;
|
||||
padding: 20rpx;
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
|
||||
.selectAll {
|
||||
|
||||
display: flex;
|
||||
|
||||
|
||||
.cartCho {
|
||||
font-size: 26rpx;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.cartDel {
|
||||
font-weight: bold;
|
||||
color: #bf0c0c;
|
||||
font-size: 14px;
|
||||
margin: 12rpx 0 0 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.exhibition {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.total {
|
||||
font-size: 15px;
|
||||
padding: 0 40rpx 0 0;
|
||||
color: #888;
|
||||
|
||||
b {
|
||||
margin-left: 10rpx;
|
||||
color: #ef1224;
|
||||
font-size: 35rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.settlement {
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
padding: 10rpx 50rpx;
|
||||
background-image: linear-gradient(90deg, rgb(254, 96, 53), rgb(239, 18, 36));
|
||||
color: #fff;
|
||||
border-radius: 40rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
/deep/.uni-checkbox-input{
|
||||
border-radius: 50rpx;
|
||||
}
|
||||
.shopCarFooter .selectAll{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
/deep/uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked{
|
||||
color: $themeColor !important;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user