纯手写——基于vue.js的购物车

template

< template >
< div class= "all" >
< div class= "head" >
< span >购物车 </ span >
</ div >
< ul class= "menu" >
< li class= "li" >
< input type= "checkbox" id= "all" v-model=" checkedAll" @change=" checkedAllChange()" >
< label for= "all" ></ label >
全选
</ li >
< li class= "li" >商品代码 </ li >
< li class= "li" >商品名称 </ li >
< li class= "li" >商品单价 </ li >
< li class= "li" >商品数量 </ li >
< li class= "li" >商品库存 </ li >
< li class= "li" >商品小计 </ li >
</ ul >
< div >
< ul v-for=" data in data" :key=" data. code" class= "menu" >
< li class= "li" >
< input type= "checkbox" name= "commodity" v-model=" checked" :value=" data" @change=" changeAll()" >
</ li >
< li class= "li" >{{ data. code}} </ li >
< li class= "li" >{{ data. name}} </ li >
< li class= "li" >¥{{ data. price}} </ li >
< li class= "li" >
< div @click=" SubNum( data)" >- </ div >
< input type= "number" v-model.lazy=" data. number" @change=" numberChange( data)" >
< div @click=" AddNum( data)" >+ </ div >
</ li >
< li class= "li" >{{ data. stock}} </ li >
< li class= "li" >¥{{ data. number* data. price}} </ li >
</ ul >
</ div >
< div class= "info" >
< p >{{ commodityNumber}}件商品 </ p >
< p >总计: < span >¥{{ numberAll}} </ span ></ p >
</ div >
</ div >
</ template >


script

< script >
export default {
data() {
return {
checkedAll: false,
checked: [],
totalPrice: 0,
data: {
one: {
code: 10001,
name: "商品一",
price: 26,
number: 1,
stock: 6
},
two: {
code: 10002,
name: "商品二",
price: 34,
number: 1,
stock: 14
},
three: {
code: 10003,
name: "商品三",
price: 48,
number: 1,
stock: 2
},
four: {
code: 10004,
name: "商品四",
price: 63,
number: 1,
stock: 12
},
five: {
code: 10005,
name: "商品五",
price: 50,
number: 1,
stock: 92
}
}
};
},
mounted() {},
methods: {
//判断全选事件
checkedAllChange() {
if ( this. checkedAll) {
for ( let i in this. data) {
this. checked. push( this. data[ i]);
}
} else {
this. checked = [];
}
},
changeAll() {
if ( this. checked. length == Object. keys( this. data). length) {
this. checkedAll = true;
} else {
this. checkedAll = false;
}
},
// 加减
SubNum( data) {
data. number--;
if ( data. number < 1) {
data. number = 1;
}
},
AddNum( data) {
data. number++;
if ( data. number > data. stock) {
data. number = data. stock;
}
},
//输入
numberChange( data) {
if ( data. number > data. stock) {
data. number = data. stock;
}
}
},
computed: {
//商品数量
commodityNumber() {
return this. checked. length;
},
//总价
numberAll() {
var numberAll = 0;
for ( let i in this. checked) {
numberAll += this. checked[ i]. number * this. checked[ i]. price;
}
return numberAll;
}
}
};
</ script >


css

< style lang= "scss" scoped type= "text/css" >
ul,
li {
list-style: none;
}
.all {
width: 800px;
height: 500px;
background: #fff;
border: 1px solid #177ecb;
margin-left: 300px;
.head {
background: #177ecb;
height: 36px;
line-height: 36px;
color: #fff;
padding-left: 15px;
}
.menu {
height: 32px;
width: 100%;
border-bottom: 1px solid #d4d4d4;
padding: 0 15px;
display: flex;
.li {
line-height: 32px;
flex: 1;
border-right: 1px solid #d4d4d4;
text-align: center;
input[ type= "number "] {
width: 40px;
display: inline-block;
height: 20px;
}
div {
width: 20px;
height: 20px;
padding: 0;
display: inline-block;
background: #333;
color: #fff;
line-height: 20px;
text-align: center;
cursor: pointer;
}
div:active {
background: #999;
}
}
.li:nth-of-type( 3) {
flex: 2;
}
.li:last-child {
border: 0;
}
}
.menu + div {
height: 350px;
margin-bottom: 20px;
border-bottom: 1px solid #177ecb;
}
.info {
text-align: right;
margin-right: 20px;
span {
color: #f00;
font-size: 20px;
font-weight: 900;
}
}
}
</ style >

<----------------------------------------------------学习交流,---------------------------------------------------->

猜你喜欢

转载自blog.csdn.net/weixin_41770018/article/details/80987007