要求
功能实现
初始页面 功能1:删除 点击删除操作后,整行可以被删除。
功能2:全选 当所有商品都被勾选上是,全选按钮也勾上,当全选按钮勾上时,所有商品都被勾选上。
功能3:计算总价 当输入商品数量时,商品金额发生改变,当勾选多个商品时,计算出所有商品的总价,当数量发生改变时,总价也发生改变。
代码实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app" style="margin-top: 120px;margin-left: 400px;">
<form action="#" method="post">
<table border="1" style="width: 600px;text-align: center">
<tr>
<td style="width: 8%">
<input type="checkbox" v-model="isChecked">
</td>
<td style="width: 10%">商品id</td>
<td style="width: 30%">产品名称</td>
<td style="width: 20%">产品单价</td>
<td style="width: 20%">产品数量</td>
<td style="width: 30%">金额</td>
<td style="width: 50%">操作</td>
</tr>
<tr v-for=" (item,index) in lists " :key="index">
<td>
<input type="checkbox" v-model="item.isCheck">
</td>
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td >{{item.price}}</td>
<td>
<input type="number" min="0" v-model="item.num" style="width: 40px">
</td>
<td style="font-weight: bold">
¥{{(item.price*item.num)}}
</td>
<td>
<input @click="delGood(index)" type="button" value="删除">
</td>
</tr>
<tr>
<td colspan="6" style="text-align: left;color: red;font-weight: bold ;text-align: center" >
总价: ¥{{getTotal }}
</td>
</tr>
</table>
</form>
</div>
<script>
const vm=new Vue({
el:"#app",
data(){
return{
lists:[
{
isCheck:false,
id:1,
name:"书包",
price:80,
num:0
},
{
isCheck:false,
id:2,
name:"水杯",
price:15,
num:0
},
{
isCheck:false,
id:3,
name:"雨伞",
price:15,
num:0
},
{
isCheck:false,
id:4,
name:"手电筒",
price:10,
num:0
}
]
}
},
methods: {
delGood:function(index) {
this.lists.splice(index, 1);
}
},
computed:{
getTotal:function(){
let _listsCheck=this.lists.filter(function (val){
return val.isCheck===true;
})
let totalPrice=0
for (let i = 0; i < _listsCheck.length; i++) {
totalPrice+=_listsCheck[i].num*_listsCheck[i].price
}
return totalPrice;
},
isChecked:{
get(){
let flag=true;
this.lists.forEach(el=>{
if(el.isCheck==false){
flag=false;
}
})
return flag;
},
set(val)
{
if(val)
{
this.lists.map(function(el){
return el.isCheck=true;
});
}else
{
this.lists.map(el=>el.isCheck=false);
}
}
}
}
})
</script>
</body>
</html>
|