页面代码如下:
<body>
<div id="app">
<div class="wrap">
<div v-for="(item,index) in list" class="commodity clearfix" :key="item.id">
<div class="checkBox fl">
<input class="check" type="checkbox" v-model="item.isChecked" @change="clickOnce"/>
</div>
<div class="pic fl">
<img :src="item.thumbnail" alt="#"/>
</div>
<div class="txt fl">
<h3>{{item.name}}</h3>
<p>规格:50g</p>
<p>¥<span>{{item.reduct_price}}</span></p>
</div>
<div class="num">
<button @click="minusNum(index)">-</button>
<input ref="refNum" type="text" v-model.number="item.num" @keydown="changeNum(index)"/>
<button @click="addNum(index)">+</button>
</div>
</div>
<div class="footer clearfix">
<div class="allCheckBox fl">
<input class="allCheck" type="checkbox" v-model="allChecked" @change="clickAll"/>
<span>全选</span>
</div>
<a class="btn fr" href="#">去结算(<span>{{sum.sumNum}}</span>件)</a>
<div class="agg fl">
<div class="allPrice">
总计:<span id="price">{{sum.sumAll}}</span>
</div>
<div class="discounts">
不含运费,已优惠 <span>¥{{sum.sumDiscounts}}</span>
</div>
</div>
</div>
</div>
</div>
</body>
实现方法如下:
<script type="text/javascript">
var app = new Vue({
el:'#app',
data:{
allChecked:false,//代表全选按钮的值
success:true,
code:200,
msg:"获取购物车数据成功",
list:[{
"id": "00001",
"name": "施华蔻伊采染发膏60ml",
"brand": "施华蔻",
"original_price": "100",
"inventory": "1062",
"thumbnail": "https:\/\/fjlyl.xyz\/assets\/hairDye\/products (1).jpg",
"product_id": "00021",
"time_start": "2018-12-17 06:00:00",
"time_end": "2018-12-17 07:00:00",
"total": "727",
"reduct_price": "69",
"stock": "113",
"num":3,
'isChecked':false
}, {
"id": "00002",
"name": "施华蔻伊采染发膏100ml",
"brand": "施华蔻",
"original_price": "264",
"inventory": "2615",
"thumbnail": "https:\/\/fjlyl.xyz\/assets\/hairDye\/products (2).jpg",
"product_id": "00022",
"time_start": "2018-12-17 21:00:00",
"time_end": "2018-12-17 23:00:00",
"total": "559",
"reduct_price": "241",
"stock": "320",
"num":2,
'isChecked':false
}, {
"id": "00003",
"name": "施华蔻伊采染发膏200ml",
"brand": "施华蔻",
"original_price": "97",
"inventory": "3001",
"thumbnail": "https:\/\/fjlyl.xyz\/assets\/hairDye\/products (3).jpg",
"product_id": "00023",
"time_start": "2018-12-17 07:00:00",
"time_end": "2018-12-17 08:00:00",
"total": "2393",
"reduct_price": "35",
"stock": "1054",
"num":2,
'isChecked':false
}]
},
methods:{
clickOnce:function () {
var allChecked = true;
for(var i=0;i<this.list.length;i++){
// 只要有一个没选中就为false
if(!this.list[i].isChecked){
allChecked = false;
break;
}
}
this.allChecked = allChecked;
},
clickAll:function () {
console.log(1);
for(var i=0;i<this.list.length;i++){
// 只要有一个没选中就为false
this.list[i].isChecked = this.allChecked;
}
},
// 加
addNum:function (i) {
this.list[i].num++;
},
// 手动输入框
changeNum:function (i) {
var num = this.list[i].num;
console.log(isNaN(Number(num)));
if(isNaN(Number(num))){
num = 0;
}else{
// console.log(num.trim().length);
num = String(num);
if(num.trim().length==0){
num = 0;
}
}
this.list[i].num = parseInt(num);
},
// 减
minusNum:function (i) {
this.list[i].num--;
this.list[i].num = this.list[i].num<0?0:this.list[i].num;
}
},
computed:{
sum:function () {
// 总价
var sumAll = 0;
// 总件数
var sumNum = 0;
// 总优惠
var sumDiscounts = 0;
for(var i=0;i<this.list.length;i++){
if(this.list[i].isChecked){
sumAll += this.list[i].num*this.list[i].reduct_price;
sumNum += this.list[i].num;
sumDiscounts += (this.list[i].original_price-this.list[i].reduct_price)*this.list[i].num;
}
}
console.log(sumNum);
var obj = {
sumAll:sumAll,
sumNum:sumNum,
sumDiscounts:sumDiscounts
};
return obj;
}
}
})
</script>