<template>
<div class="check-button" :class="{check: isChecked}">
<img src="~assets/img/cart/tick.svg" alt="">
</div>
</template>
<script>
export default {
name: 'CheckButton',
props: {
isChecked: {
type: Boolean,
default: false
}
}
}
</script>
<style scoped>
.check-button {
border-radius: 50%;
border: 2px solid #aaa;
}
.check {
border-color: red;
background-color: red;
}
</style>
二. 调整 CartListItem.vue
<template>
<div id="shop-item">
<div class="item-selector">
<CheckButton :is-checked="itemInfo.checked" @click="checkClick"/>
</div>
<div class="item-img">
<img :src="itemInfo.image" alt="商品图片"/>
</div>
<div class="item-info">
<div class="item-title">{{itemInfo.title}}</div>
<div class="item-desc">{{itemInfo.desc}}</div>
<div class="info-bottom">
<div class="item-price left">¥{{itemInfo.price}}</div>
<div class="item-count right">X{{itemInfo.count}}</div>
</div>
</div>
</div>
</template>
<script>
import CheckButton from 'components/content/checkButton/CheckButton'
export default {
name: 'CartListItem',
components: {
CheckButton
},
props: {
itemInfo: {
type: Object,
default() {
return {}
}
}
},
methods: {
checkClick() {
this.itemInfo.checked = !this.itemInfo.checked;
}
}
}
</script>
<style scoped>
#shop-item {
width: 100%;
display: flex;
font-size: 0;
padding: 5px;
border-bottom: 1px solid #ccc;
}
.item-selector {
width: 20px;
display: flex;
justify-content: center;
align-items: center;
}
.item-title, .item-desc {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.item-img {
padding: 5px;
}
.item-img img {
width: 80px;
height: 100px;
display: block;
border-radius: 5px;
}
.item-info {
font-size: 17px;
color: #333;
padding: 5px 10px;
position: relative;
overflow: hidden;
}
.item-info .item-desc {
font-size: 14px;
color: #666;
margin-top: 15px;
}
.info-bottom {
margin-top: 10px;
position: absolute;
bottom: 10px;
left: 10px;
right: 10px;
}
.info-bottom .item-price {
color: orangered;
}
</style>
三. 调整 CartList.vue
<template>
<div class="cart-list">
<scroll class="cart-list-scroll-content"
ref="scroll"
:probe-type="3">
<cart-list-item v-for="(item, index) in cartList"
:key="index"
:item-info="item"/>
</scroll>
</div>
</template>
<script>
import Scroll from 'components/common/scroll/Scroll'
import CartListItem from './CartListItem'
import { mapGetters } from 'vuex'
export default {
name: 'CartList',
components: {
Scroll,
CartListItem
},
computed: {
...mapGetters(['cartList'])
},
activated() {
this.$refs.scroll.refresh()
}
}
</script>
<style scoped>
.cart-list {
height: calc(100% - 44px - 49px);
}
.cart-list-scroll-content {
height: 100%;
overflow: hidden;
}
</style>
四. 调整 mutations.js
import {
ADD_COUNTER,
ADD_TO_CART
} from './mutation-types'
export default {
[ADD_COUNTER](state, payload) {
payload.count++;
},
[ADD_TO_CART](state, payload) {
payload.checked = true;
state.cartList.push(payload);
}
}