first commit

This commit is contained in:
编码猿
2024-09-27 01:32:49 +08:00
commit 28ebe05a64
7399 changed files with 1174529 additions and 0 deletions

View File

@@ -0,0 +1,772 @@
<template>
<!-- 购物车 页面 -->
<view class="content w-100 h-100">
<view class="header bg-linear-gradient x-text-white text-center">
购物车
<view class="edit_shoppingCar" @click="edit_shoppingCar()" v-if="isEdit==false">管理</view>
<view class="edit_shoppingCar" @click="edit_shoppingCar()" v-if="isEdit==true">完成</view>
</view>
<view v-if='available_goods.length<=0' align="center">
<image src="../../static/no/u/carno.png" mode="" class="noCar_img"></image>
</view>
<view class="list" v-if='available_goods.length>0'>
<view class="list_items" v-for="(item,index) in available_goods" :key="index" v-if="available_goods.length>0">
<checkbox-group class="block" style='padding:0 30upx 30upx'>
<view class=" d-flex a-center">
<view class="d-flex goods_items a-center w-100">
<view class="uni-list">
<checkbox-group @change="selected(item)">
<checkbox class="xuanzhong" :checked="item.checked" />
</checkbox-group>
</view>
<!-- <view class="box_img" @click="goodsDetail(index)">
<an-image :src="'https://'+item.pc_thumb" alt="https://ydyd-develop-file.oss-cn-hangzhou.aliyuncs.com/imageerror.jpg"></an-image>
</view> -->
<view class="box_img" @click="goodsDetail(index)" :style="{backgroundImage: 'url(' + 'https://'+item.pc_thumb + ')', backgroundSize:'contain',backgroundPosition:'center'}">
</view>
<view class="goods_txt flex-1" style="width:60%;">
<view class="font-weight d-flex a-center">
<image src="../../static/shoppingCart/xian.png" mode="" class="" style="height:30upx; width:30upx; margin-right:30upx;" v-if='item.is_limit==1'></image>
<image src="../../static/shoppingCart/re.png" mode="" style="height:30upx; width:30upx;margin-right:30upx;" v-if='item.supplier_id<=10000'></image>
<view class="textOVerFlow flex-1">{{item.name}}</view>
</view>
<view v-if='item.is_limit==1' class="x-text-159">{{item.limit_info}}</view>
<view class="x_text_hui zhuyi_title">{{item.manufacturer_name}}</view>
<view class="d-flex a-center">
<view class="x_text_hui zhuyi_title">{{item.spec_desc}}</view>
</view>
<view class="d-flex a-center">
<view class="x_text_hui">{{item.retail_flag==1?item.entirety_num:item.retail_num}}{{item.unit}}/</view>
<image src="../../static/shoppingCart/zheng.png" mode="" style="height:30upx; width:30upx;margin:0 30upx;" v-if="item.retail_flag==1" class=""></image>
<image src="../../static/shoppingCart/ling.png" mode="" style="height:30upx; width:30upx; margin:0 30upx;" v-if="item.retail_flag==0" class=""></image>
</view>
<view class="x-text-159 font-weight font_28">{{item.price}}</view>
</view>
<view class="goods_count d-flex">
<view class="bianji_cars_num bianji_cars_num bianji_cars_numJian" @click="reduce(item)">-</view>
<view class=" bianji_cars_numAdd">
<input type="number" value="" cursor-spacing="30" class=" uni-input change-w bianji_cars_num w-100 text-center" style="padding:0;" v-model="item.num"
@blur="outComputeNum(item,index)" @focus="inComputeNum(item)" @input="changeInput($event,item,index)" />
</view>
<view class="bianji_cars_num " @click="add(item)">+</view>
</view>
</view>
</view>
</checkbox-group>
<view class="line"></view>
</view>
<!-- <view class="list_items" v-for="(item,index) in inavailable_goods" :key="index" v-if="inavailable_goods.length>0">
<checkbox-group class="block" @change="changeCheckbox" style='padding:0 30upx 30upx'>
<view class=" d-flex a-center">
<view class="d-flex goods_items a-center w-100">
<view class="uni-list">
<checkbox-group @change="selected(item)">
<checkbox class="xuanzhong" :checked="item.checked" />
</checkbox-group>
</view>
<view class="box_img" @click="goodsDetail(index)">
<image :src="'https://'+item.pc_thumb" mode="" class="h-100 w-100" v-if="item.pc_thumb!=''"></image>
<image src="../../static/noimg.png" mode="" class="h-100 w-100" v-if="item.pc_thumb==''"></image>
</view>
<view class="goods_txt flex-1" @click="goodsDetail(index)">
<view class="font-weight">{{item.name}}</view>
<view class="">{{item.manufacturer_name}}</view>
<view class="">{{item.spec_desc}} &nbsp;&nbsp;&nbsp;{{item.retail_flag==1?'整':'零'}}</view>
<view class="x-text-159"> {{item.price}}</view>
</view>
<view class="goods_count d-flex">
<view class="bianji_cars_num bianji_cars_numJian" @click="reduce(item)">-</view>
<view class="bianji_cars_num bianji_cars_numAdd" style="padding:0;">{{item.num}}</view>
<view class="bianji_cars_num bianji_cars_numAdd" @click="add(item)">+</view>
</view>
</view>
</view>
</checkbox-group>
<view class="line"></view>
</view> -->
</view>
<view class="settlement shadow d-flex a-center" v-if="isEdit==false && available_goods.length>0">
<view class="all_choose">
<checkbox-group @change="selectedall()">
<checkbox class="quanxuananniu" :checked="allchecked" />全选
</checkbox-group>
</view>
<view class="x_textRight flex-1 d-flex text-right">
<view>总计:</view>
<view class="x-text-159"> {{Math.round(is_conut * 100) / 100}}</view>
<!-- <view class=""> {{totel}}</view> -->
</view>
<view class="x-bg-159 to_buy text-center x-text-white" @click="to_pay()">去结算({{jianshu}})</view>
</view>
<view class="settlement shadow d-flex a-center" v-if="isEdit==true && available_goods.length>0">
<view class="all_choose">
<checkbox-group @change="selectedall()">
<checkbox class="quanxuananniu" :checked="allchecked" />全选
</checkbox-group>
</view>
<view class="text-center add_toCollection" @click="add_collage()">移入收藏夹</view>
<view class="x-bg-159 text-center del_goods" @click="del()">删除</view>
</view>
<view class="no_list x_margin0auto" v-if="list.length>0">
<image src="../../static/shoppingCart/nopic.png" mode="" class="no_list_img"></image>
</view>
</view>
</template>
<script>
import { mapMutations, mapGetters } from 'vuex'
import HeaderTop from '../../components/HeaderTop/HeaderTop.vue'
import X_goods from '../../utils/models/goods.js'
import {
Config
} from '../../utils/config.js'
import auth from '../../utils/models/auth.js'
import anImage from '@/components/an-image/an-image'
export default {
data() {
return {
goods_num: 0, //商品当前数量
Stock: 20, //当前商品的总库存
isEdit: false, // 判断是否编辑购物车true为编辑false为不编辑
add_choose_checked: false,
list: [], // 购物车数据
isChecked: false,
checkedArr: [], //复选框选中的值
allChecked: false, //是否全选
flag: true, // 用于判断用户购物车是否有商品没有商品为true有商品为false
//cartlist: [], // 购物车商品信息
allchecked: false, //默认全选为true因为后台数据没有是否选中的信息
available_goods: '', //正常的购物车数据
inavailable_goods: '', //非正常的购物车数据(下架,失效等等)
chooseArr: [], // 被选择的商品列表的id的数组
id: '', //
batch_id: '',
goods_id: '',
collageGoods_id: '', //加入收藏夹的goods_id 的集合
result: [],
result_list: [],
jianshu: 0,
is_conut: 0, // 总计
old_num: 0,
is_next: true,
change_jiage:[]
}
},
comments: {
HeaderTop,
anImage
},
onLoad(option) {
if (option.goods_num) {
this.goods_num = option.goods_num
}
this.allchecked = false
},
onShow() {
this.is_conut = 0;
this.jianshu = 0;
this.allchecked = false;
this.shoppingCarList();
},
mounted() {
},
methods: {
...mapMutations([
'SetShopCarNums'
]),
// 监听input值的变化计算总价格
async changeInput(event, item, index) {
item.num = event.detail.value
if(item.num=='' || item.num==0 || item.num * 100 == 0){
item.num = 0
//item.checked = false
}
},
inComputeNum(item) {
this.is_next = false
this.old_num = item.num
},
async outComputeNum(item, index) {
if(item.num=='' || item.num==0 || item.num * 100 == 0){
item.num = 0
}
if (item.retail_flag == 0) { //零售
let num = Math.ceil(item.num / item.retail_num)
if (num > 0) {
item.num = num * item.retail_num
if (item.stock_num < item.num) {
uni.showToast({
title: '库存不足',
duration: 2000,
icon: 'none'
});
item.num = item.stock_num;
}
}
} else { // 整售
let num = Math.ceil(item.num / item.entirety_num)
if (num > 0) {
item.num = num * item.entirety_num
if (item.stock_num < item.num) {
uni.showToast({
title: '库存不足',
duration: 2000,
icon: 'none'
});
item.num = item.stock_num;
}
}
}
let res = await X_goods.X_update(item.id, item.num)
this.is_next = true
this.handleError(res, res => {
if(res.data.errcode == 0){
if (item.checked) {
if(this.old_num > item.num){
this.is_conut -= Number(this.old_num - item.num) * item.price
}
if(this.old_num < item.num){
this.is_conut += Number(item.num - this.old_num) * item.price
}
}
// if(item.num == 0){
// item.checked = false
// }
}
if (res.data.errcode != 0) {
item.num = this.old_num ;
uni.showToast({
title: res.data.errmsg,
duration: 2000,
icon: 'none'
});
return
}
})
},
//移入收藏夹
async add_collage() {
this.collageGoods_id = ''
this.available_goods.forEach(item => {
if (item.checked == true) {
this.collageGoods_id += item.goods_id + ','
}
})
this.collageGoods_id = this.collageGoods_id.substr(0, this.collageGoods_id.length - 1);
if (this.collageGoods_id.length <= 0) {
uni.showToast({
title: '请选择商品',
duration: 2000,
icon: 'none'
});
} else {
let res = await X_goods.X_addCollect_app(this.collageGoods_id, 1)
this.handleError(res, res => {
uni.showToast({
title: res.data.errmsg,
duration: 2000,
icon: 'none'
});
})
}
},
// 减号操作
async reduce(item) {
if (item.num < 0) {
uni.showToast({
title: '数量不得为负',
duration: 2000,
icon: 'none'
});
item.num = 0
return
}else if(item.num ==0){
// item.checked = false
return
} else {
if (item.retail_flag == 0) { //零售
// item.num -= item.retail_num
item.num = Number(item.num) - Number(item.retail_num)
if (item.checked) {
this.is_conut -= Number(item.retail_num) * item.price
}
} else { // 整售
// item.num -= item.entirety_num
item.num = Number(item.num) - Number(item.entirety_num)
if (item.checked) {
this.is_conut -= Number(item.entirety_num) * item.price
}
}
if (item.num < 0) {
item.num = 0
uni.showToast({
title: '数量不得为负',
duration: 2000,
icon: 'none'
});
} else {
let res = await X_goods.X_update(item.id, item.num)
// this.shoppingCarList();
this.handleError(res, res => {
if (res.data.errcode != 0) {
if (item.retail_flag == 0) { //零售
item.num += item.retail_num
if (item.checked) {
this.is_conut += Number(item.retail_num) * item.price
}
} else { // 整售
item.num += item.entirety_num
if (item.checked) {
this.is_conut += Number(item.entirety_num) * item.price
}
}
uni.showToast({
title: res.data.errmsg,
duration: 2000,
icon: 'none'
});
return
}
})
}
}
},
// 加号操作
async add(item) {
if (item.stock_num <= this.goods_num) {
uni.showToast({
title: '库存不足',
duration: 2000,
icon: 'none'
});
this.goods_num = item.stock_num;
} else {
if (item.retail_flag == 0) { //零售
item.num = Number(item.num) + Number(item.retail_num)
if (item.checked) {
this.is_conut += Number(item.retail_num) * item.price
}
} else { // 整售
item.num = Number(item.num) + Number(item.entirety_num)
if (item.checked) {
this.is_conut += Number(item.entirety_num) * item.price
}
}
let res = await X_goods.X_update(item.id, item.num)
this.handleError(res, res => {
if (res.data.errcode != 0) {
if (item.retail_flag == 0) { //零售
item.num -= item.retail_num
if (item.checked) {
this.is_conut -= Number(item.retail_num) * item.price
}
} else { // 整售
item.num -= item.entirety_num
if (item.checked) {
this.is_conut -= Number(item.entirety_num) * item.price
}
}
uni.showToast({
title: res.data.errmsg,
duration: 2000,
icon: 'none'
});
return
}
})
}
},
// 删除单挑购物车商品
async del() {
this.chooseArr = []
this.available_goods.forEach(item => {
if (item.checked == true) {
this.chooseArr.push(item.id)
}
})
if (this.chooseArr.length <= 0) {
uni.showToast({
title: '请选择商品',
duration: 2000,
icon: 'none'
});
} else {
let res = await X_goods.X_delCar(this.chooseArr)
this.isEdit = !this.isEdit;
this.handleError(res, res => {
uni.showToast({
title: res.message,
duration: 2000,
icon: 'none'
});
this.is_conut = 0;
this.jianshu = 0;
this.shoppingCarList();
})
}
},
// 单个商品前的勾选
selected(item) {
// if(item.num==0){
// // item.checked =false
// }else{
// }
item.checked = !item.checked
if (!item.checked) {
this.allchecked = false
this.jianshu--
this.is_conut -= (item.price * item.num)
} else {
this.jianshu++
this.is_conut += (item.price * item.num)
const test = this.available_goods.every(item => {
return item.checked === true
})
if (test) {
this.allchecked = true
} else {
this.allchecked = false
}
}
},
// 全选按钮
selectedall() {
this.jianshu = 0;
this.is_conut = 0;
if (this.available_goods.length <= 0) {
return
} else {
this.allchecked = !this.allchecked
if (this.allchecked) {
this.available_goods.map(item => {
item.checked = true
this.is_conut += item.price * item.num
// this.is_conut++
})
this.jianshu = this.available_goods.length
} else {
this.available_goods.map(item => {
item.checked = false
})
}
}
},
//去结算 X_orderPreview
async to_pay() {
if (!this.is_next) {
return
}
this.goods_id = ''
for (let i = 0; i < this.available_goods.length; i++) {
if (this.available_goods[i].checked == true) {
if(this.available_goods[i].num==0){
uni.showToast({
title: '请选择商品数量',
duration: 2000,
icon: 'none'
});
return
}else{
this.goods_id += this.available_goods[i].id + ','
}
}
}
this.goods_id = this.goods_id.substr(0, this.goods_id.length - 1);
if (this.goods_id.length <= 0) {
} else {
this.goodid();
this.is_checkAuth()
// if (this.the_checkAuth == 'finish') {
// uni.navigateTo({
// url: './sureOrder?goods_id=' + this.goods_id
// })
// }
}
},
goodid(){
this.$store.commit('goodid',this.goods_id)
},
//checkAuth 检测用户是否完成认证
async is_checkAuth() {
let res = await auth.checkAuth()
this.the_checkAuth = res.data
if (res.data != 'finish') {
if (res.data == 'auditing') {
uni.showToast({
title: '您的企业认证正在审核中!',
duration: 2000,
icon: 'none'
});
} else {
uni.showModal({
title: '提示',
content: '请先完成认证',
success: function(res) {
if (res.confirm) {
uni.redirectTo({
url: '../auth/baisc'
})
} else if (res.cancel) {
}
}
});
}
} else {
uni.navigateTo({
url: './sureOrder?goods_id=' + this.goods_id
})
}
this.handleError(res, res => {
})
},
// 购物车列表
async shoppingCarList() {
this.available_goods = []
let res = await X_goods.x_shoppingCar()
// if (res.code == 40000) {
// uni.navigateTo({
// url: './x_login'
// })
// }
this.handleError(res, res => {
if (res.data == '') {
} else {
this.available_goods = res.data.data.available_goods;
this.SetShopCarNums(this.available_goods.length)
// Config.shooppingCar_num = this.available_goods.length
// this.inavailable_goods = res.data.data.inavailable_goods
this.available_goods.map(item => {
item.checked = false
})
}
})
},
// 管理购物车
edit_shoppingCar() {
this.isEdit = !this.isEdit
},
// 进入商品详情页
goodsDetail(index) {
if (this.isEdit == false) {
if (this.available_goods[index].price_id) {
uni.navigateTo({
url: './goodsDetail?sku_id=' + this.available_goods[index].price_id + '&goods_num=' + this.available_goods[
index].num
})
}
}
},
// 登录
to_login() {
uni.navigateTo({
url: 'x_login'
});
}
}
}
</script>
<style lang="scss">
.content {
.header {
height: 148upx;
font-size: 32upx;
position: relative;
line-height: 194upx;
.edit_shoppingCar {
position: absolute;
bottom: -48upx;
right: 31upx;
}
}
.noCar_img {
height: 238upx;
width: 350upx;
margin-top: 100upx;
}
.cartlist {
background-color: #999999;
padding: 10px;
.cartitem {
background-color: #FFFFFF;
height: 50px;
margin-bottom: 10px;
.xuanzhong {
float: left;
line-height: 50px;
padding-left: 5px;
}
image {
display: inline-block;
height: 40px;
width: 40px;
padding: 5px 0;
float: left;
}
.itemright {
display: inline-block;
padding: 5px;
.del {
margin-left: 10px;
background-color: red;
color: #FFFFFF;
border-radius: 3px;
padding: 0 5px;
}
}
}
}
.list {
height: calc(100% - 248upx);
overflow-y: auto;
.list_items {
.box_img {
height: 153.3upx;
// width: 270upx;
width:40%;
padding: 10upx 20upx;
margin: 0 10upx;
overflow: hidden;
background-repeat: no-repeat;
}
.goods_items {
position: relative;
.goods_count {
position: absolute;
bottom: -14upx;
right: 8upx;
.change-w{
width:65upx;
}
.bianji_cars_num{
background: #FBFBFB;
}
.bianji_cars_numAdd{
margin-left: 2upx;
margin-right: 2upx;
}
}
}
.line {
height: 4upx;
background-color: #F2F2F2;
}
}
}
.no_list {
margin-top: 315upx;
text-align: center;
.no_list_img {
height: 198upx;
width: 395upx;
}
}
.settlement {
height: 100upx;
.all_choose {
width: 30%;
margin-left: 30upx;
}
.to_buy {
line-height: 100upx;
width: 260upx;
min-width: 224.6upx;
font-size: 34upx;
}
.add_toCollection {
border: 1upx solid #EDCA4A;
border-radius: 30upx;
height: 60upx;
line-height: 60upx;
width: 198.8upx;
color: #EDCA4A;
margin: 0 22px 0 30px;
}
.del_goods {
border: 1upx solid #EB5159;
border-radius: 30upx;
height: 60upx;
line-height: 60upx;
width: 150upx;
color: #EB5159;
border: 1upx solid #EB5159;
background-color: #FFFFFF;
}
}
}
</style>