1. 【修复】申请退款后积分等操作可能出现错误的问题 2. 【修复】拼团支付可能出现支付错误的问题 3. 【修复】退款申请后的订单流程优化和积分赠送的问题 4. 【修复】回收站中的商品无法恢复的问题 5. 【修复】一号通短信查询记录不完整的问题 6. 【修复】用户管理批量加分组,标签的问题 7. 【修复】积分日志搜索显示有误的问题 8. 【修复】手动发送优惠券可能会出错的问题 9. 【修复】核销订单创建在某种条件下会出错的问题 10. 【修复】移动端商品详情,购物车等样式兼容问题 11. 【修复】业务流程性的优化
314 lines
7.8 KiB
Vue
314 lines
7.8 KiB
Vue
<template>
|
|
<view>
|
|
<view class="product-window" :class="(attr.cartAttr === true ? 'on' : '') + ' ' + (iSbnt?'join':'') + ' ' + (iScart?'joinCart':'')">
|
|
<view class="textpic acea-row row-between-wrapper">
|
|
<view class="pictrue">
|
|
<image :src="attr.productSelect.image"></image>
|
|
</view>
|
|
<view class="text">
|
|
<view class="line1">
|
|
{{ attr.productSelect.storeName }}
|
|
</view>
|
|
<view class="money font-color">
|
|
¥<text class="num">{{ attr.productSelect.price }}</text>
|
|
<text class="stock" v-if='isShow'>库存: {{ attr.productSelect.stock }}</text>
|
|
<text class='stock' v-if="limitNum">限量: {{attr.productSelect.quotaShow}}</text>
|
|
</view>
|
|
</view>
|
|
<view class="iconfont icon-guanbi" @click="closeAttr"></view>
|
|
</view>
|
|
<view class="rollTop">
|
|
<view class="productWinList">
|
|
<view class="item" v-for="(item, indexw) in attr.productAttr" :key="indexw">
|
|
<view class="title">{{ item.attrName }}</view>
|
|
<view class="listn acea-row row-middle">
|
|
<view class="itemn" :class="item.index === itemn.attr ? 'on' : ''" v-for="(itemn, indexn) in item.attrValue"
|
|
@click="tapAttr(indexw, indexn)" :key="indexn">
|
|
{{ itemn.attr }}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="cart acea-row row-between-wrapper">
|
|
<view class="title">数量</view>
|
|
<view class="carnum acea-row row-left">
|
|
<view class="item reduce" :class="attr.productSelect.cart_num <= 1 ? 'on' : ''" @click="CartNumDes">
|
|
-
|
|
</view>
|
|
<view class='item num'>
|
|
<input type="number" v-model="attr.productSelect.cart_num" data-name="productSelect.cart_num" @input="bindCode(attr.productSelect.cart_num)"></input>
|
|
</view>
|
|
<view v-if="iSplus" class="item plus" :class="
|
|
attr.productSelect.cart_num >= attr.productSelect.stock
|
|
? 'on'
|
|
: ''
|
|
"
|
|
@click="CartNumAdd">
|
|
+
|
|
</view>
|
|
<view v-else class='item plus' :class='(attr.productSelect.cart_num >= attr.productSelect.quota) || (attr.productSelect.cart_num >= attr.productSelect.stock) || (attr.productSelect.cart_num >= attr.productSelect.num)? "on":""' @click='CartNumAdd'>+</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="joinBnt bg-color" v-if="iSbnt && attr.productSelect.stock>0 &&attr.productSelect.quota>0" @click="goCat">我要参团</view>
|
|
<view class="joinBnt on" v-else-if="(iSbnt && attr.productSelect.quota<=0)||(iSbnt &&attr.productSelect.stock<=0)">已售罄</view>
|
|
<view class="joinBnt bg-color" v-if="iScart && attr.productSelect.stock" @click="goCat">确定</view>
|
|
<!-- <view class="joinBnt bg-color" v-if="iSbnt && attr.productSelect.stock && attr.productSelect.quota" @click="goCat">确定</view> -->
|
|
<view class="joinBnt on" v-else-if="(iScart && !attr.productSelect.stock)">已售罄</view>
|
|
</view>
|
|
<view class="mask" @touchmove.prevent :hidden="attr.cartAttr === false" @click="closeAttr"></view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
|
|
props: {
|
|
attr: {
|
|
type: Object,
|
|
default: () => {}
|
|
},
|
|
limitNum:{
|
|
type: Number,
|
|
value: 0
|
|
},
|
|
isShow:{
|
|
type: Number,
|
|
value: 0
|
|
},
|
|
iSbnt:{
|
|
type:Number,
|
|
value:0
|
|
},
|
|
iSplus:{
|
|
type:Number,
|
|
value:0
|
|
},
|
|
iScart:{
|
|
type:Number,
|
|
value:0
|
|
}
|
|
},
|
|
data() {
|
|
return {};
|
|
},
|
|
mounted() {
|
|
},
|
|
methods: {
|
|
goCat:function(){
|
|
this.$emit('goCat');
|
|
},
|
|
/**
|
|
* 购物车手动输入数量
|
|
*
|
|
*/
|
|
bindCode: function (e) {
|
|
this.$emit('iptCartNum', this.attr.productSelect.cart_num);
|
|
},
|
|
closeAttr: function() {
|
|
this.$emit('myevent');
|
|
},
|
|
CartNumDes: function() {
|
|
this.$emit('ChangeCartNum', false);
|
|
},
|
|
CartNumAdd: function() {
|
|
this.$emit('ChangeCartNum', true);
|
|
},
|
|
tapAttr: function(indexw, indexn) {
|
|
let that = this;
|
|
that.$emit("attrVal", {
|
|
indexw: indexw,
|
|
indexn: indexn
|
|
});
|
|
this.$set(this.attr.productAttr[indexw], 'index', this.attr.productAttr[indexw].attrValues[indexn]);
|
|
let value = that
|
|
.getCheckedValue()
|
|
// .sort()
|
|
.join(",");
|
|
that.$emit("ChangeAttr", value);
|
|
|
|
},
|
|
//获取被选中属性;
|
|
getCheckedValue: function() {
|
|
let productAttr = this.attr.productAttr;
|
|
let value = [];
|
|
for (let i = 0; i < productAttr.length; i++) {
|
|
for (let j = 0; j < productAttr[i].attrValues.length; j++) {
|
|
if (productAttr[i].index === productAttr[i].attrValues[j]) {
|
|
value.push(productAttr[i].attrValues[j]);
|
|
}
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.product-window {
|
|
position: fixed;
|
|
bottom: 0;
|
|
width: 100%;
|
|
left: 0;
|
|
background-color: #fff;
|
|
z-index: 77;
|
|
border-radius: 16rpx 16rpx 0 0;
|
|
padding-bottom: 140rpx;
|
|
transform: translate3d(0, 100%, 0);
|
|
transition: all .3s cubic-bezier(.25, .5, .5, .9);
|
|
}
|
|
|
|
.product-window.on {
|
|
transform: translate3d(0, 0, 0);
|
|
}
|
|
|
|
.product-window.join{padding-bottom: 30rpx;}
|
|
|
|
.product-window.joinCart{
|
|
padding-bottom: 30rpx;
|
|
z-index: 999;
|
|
}
|
|
|
|
.product-window .textpic {
|
|
padding: 0 130rpx 0 30rpx;
|
|
margin-top: 29rpx;
|
|
position: relative;
|
|
}
|
|
|
|
.product-window .textpic .pictrue {
|
|
width: 150rpx;
|
|
height: 150rpx;
|
|
}
|
|
|
|
.product-window .textpic .pictrue image {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 10rpx;
|
|
}
|
|
|
|
.product-window .textpic .text {
|
|
width: 410rpx;
|
|
font-size: 32rpx;
|
|
color: #202020;
|
|
}
|
|
|
|
.product-window .textpic .text .money {
|
|
font-size: 24rpx;
|
|
margin-top: 40rpx;
|
|
}
|
|
|
|
.product-window .textpic .text .money .num {
|
|
font-size: 36rpx;
|
|
}
|
|
|
|
.product-window .textpic .text .money .stock {
|
|
color: #999;
|
|
margin-left: 18rpx;
|
|
}
|
|
|
|
.product-window .textpic .iconfont {
|
|
position: absolute;
|
|
right: 30rpx;
|
|
top: -5rpx;
|
|
font-size: 35rpx;
|
|
color: #8a8a8a;
|
|
}
|
|
|
|
.product-window .rollTop{
|
|
max-height: 500rpx;
|
|
overflow: auto;
|
|
margin-top: 36rpx;
|
|
}
|
|
|
|
.product-window .productWinList .item~.item {
|
|
margin-top: 36rpx;
|
|
}
|
|
|
|
.product-window .productWinList .item .title {
|
|
font-size: 30rpx;
|
|
color: #999;
|
|
padding: 0 30rpx;
|
|
}
|
|
|
|
.product-window .productWinList .item .listn {
|
|
padding: 0 30rpx 0 16rpx;
|
|
}
|
|
|
|
.product-window .productWinList .item .listn .itemn {
|
|
border: 1px solid #F2F2F2;
|
|
font-size: 26rpx;
|
|
color: #282828;
|
|
padding: 7rpx 33rpx;
|
|
border-radius: 25rpx;
|
|
margin: 20rpx 0 0 14rpx;
|
|
background-color: #F2F2F2;
|
|
}
|
|
|
|
.product-window .productWinList .item .listn .itemn.on {
|
|
color: #E93323;
|
|
background:rgba(255,244,243,1);
|
|
border-color: #E93323;
|
|
}
|
|
|
|
.product-window .productWinList .item .listn .itemn.limit {
|
|
color: #999;
|
|
text-decoration:line-through;
|
|
}
|
|
|
|
.product-window .cart {
|
|
margin-top: 36rpx;
|
|
padding: 0 30rpx;
|
|
}
|
|
|
|
.product-window .cart .title {
|
|
font-size: 30rpx;
|
|
color: #999;
|
|
}
|
|
|
|
.product-window .cart .carnum {
|
|
height: 54rpx;
|
|
margin-top: 24rpx;
|
|
}
|
|
|
|
.product-window .cart .carnum view {
|
|
// border: 1px solid #a4a4a4;
|
|
width: 84rpx;
|
|
text-align: center;
|
|
height: 100%;
|
|
line-height: 54rpx;
|
|
color: #282828;
|
|
font-size: 45rpx;
|
|
}
|
|
|
|
.product-window .cart .carnum .reduce {
|
|
border-right: 0;
|
|
border-radius: 6rpx 0 0 6rpx;
|
|
line-height: 48rpx;
|
|
}
|
|
|
|
.product-window .cart .carnum .reduce.on {
|
|
// border-color: #e3e3e3;
|
|
color: #DEDEDE;
|
|
font-size: 60rpx;
|
|
}
|
|
|
|
.product-window .cart .carnum .plus {
|
|
border-left: 0;
|
|
border-radius: 0 6rpx 6rpx 0;
|
|
line-height: 46rpx;
|
|
}
|
|
|
|
.product-window .cart .carnum .plus.on {
|
|
border-color: #e3e3e3;
|
|
color: #dedede;
|
|
}
|
|
|
|
.product-window .cart .carnum .num {
|
|
background:rgba(242,242,242,1);
|
|
color: #282828;
|
|
font-size: 28rpx;
|
|
}
|
|
.product-window .joinBnt{font-size: 30rpx;width: 620rpx;height: 86rpx;border-radius: 50rpx;text-align: center;line-height: 86rpx;color: #fff;margin: 21rpx auto 0 auto;}
|
|
.product-window .joinBnt.on{background-color:#bbb;color:#fff;}
|
|
</style> |