110 lines
2.9 KiB
Vue
110 lines
2.9 KiB
Vue
<template>
|
||
<view class="itemBox flex1 m-b-24 rad16 border flex ofh bg-w">
|
||
<u--image :src="spu.photo[0]" radius="8rpx" width="288rpx" height="216rpx"></u--image>
|
||
<view class="flex1 flex column md msb p-r-24 p-t-24">
|
||
<view class="flex1 flex column md">
|
||
<view class="fz28" style="height: 36rpx;line-height: 36rpx;">{{spu.name}}</view>
|
||
<view class="fz28 fcm flex mac" style="height: 36rpx;line-height: 36rpx;">¥{{spu.minPrice}}<text
|
||
class="fz24" v-if="!isPlus">起</text></view>
|
||
</view>
|
||
<view class="flex msb" v-if="isPlus">
|
||
<view v-if="spuCount > 0" class="tc bg-g radLT8 radRT8 fz28" style="width:40rpx;line-height: 48rpx;"
|
||
@click="handleSub">
|
||
-
|
||
</view>
|
||
<view v-if="spuCount > 0" class="tc fz28 p-l-12 p-r-12" style="line-height: 48rpx;">
|
||
{{spuCount}}
|
||
</view>
|
||
<view class="tc bg-m radLT8 radRT8 fci fz28" style="width:40rpx;line-height: 48rpx;" @click="handleAdd">
|
||
+
|
||
</view>
|
||
</view>
|
||
<navigator v-else :url="'/pages/shop/content?spu_id='+spu.id" hover-class="navigator-hover">
|
||
<view class="bg-m radLT8 radRT8 fci fz28 p-l-12 p-r-12" style="line-height: 48rpx;">
|
||
选规格
|
||
</view>
|
||
</navigator>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
name: "listItem",
|
||
data() {
|
||
return {}
|
||
},
|
||
props: {
|
||
spu: {
|
||
type: Object,
|
||
deep: true
|
||
}
|
||
},
|
||
computed: {
|
||
//判断否是 是单sku
|
||
isPlus() {
|
||
if (this.spu.bind_sku.length === 1 && this.spu.bind_sku[0].value.length === 1) {
|
||
return true
|
||
} else {
|
||
return false
|
||
}
|
||
},
|
||
//购物车列表
|
||
cartList() {
|
||
return this.$store.state.cartList
|
||
},
|
||
//spu计数器
|
||
spuCount() {
|
||
let count = 0
|
||
this.cartList.forEach(item => {
|
||
if (Number(item.spu_id) === Number(this.spu.id)) {
|
||
count += item.countG[0]
|
||
}
|
||
})
|
||
return count
|
||
}
|
||
},
|
||
onReady() {
|
||
// console.log(this.spu)
|
||
},
|
||
methods: {
|
||
// 仅用于 单品spu 减少
|
||
handleSub() {
|
||
this.cartList.forEach((item, index) => {
|
||
if (Number(item.spu_id) === Number(this.spu.id)) {
|
||
if (item.countG[0] === 1) {
|
||
// 如果数量为1,则从购物车中删除该项
|
||
this.$store.state.cartList.splice(index, 1)
|
||
} else {
|
||
// 否则,减少数量
|
||
this.$set(item.countG, 0, item.countG[0] - 1)
|
||
}
|
||
}
|
||
})
|
||
},
|
||
// 仅用于 单品spu 增加
|
||
handleAdd() {
|
||
let existingItem = this.cartList.find(item => Number(item.spu_id) === Number(this.spu.id))
|
||
|
||
if (existingItem) {
|
||
// 如果购物车已经存在相同的SPU,则增加数量
|
||
this.$set(existingItem.countG, 0, existingItem.countG[0] + 1)
|
||
} else {
|
||
// 如果购物车未添加过相同的SPU,则将其添加到购物车中
|
||
this.$store.state.cartList.push({
|
||
"spu_id": this.spu.id,
|
||
"skuG": this.spu.bind_sku[0].value,
|
||
"countG": [1],
|
||
"priceG": [this.spu.minPrice]
|
||
})
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.itemBox {
|
||
height: 216rpx;
|
||
}
|
||
</style> |