大致效果图就是这样的
接下来上代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-color: rgb(240, 240, 240);
}
.singleShop {
background-color: white;
}
.shop-top {
display: flex;
border-bottom: solid 1px rgb(240, 240, 240);
padding: 10px 0;
}
.shop-top h3 {
font-weight: normal;
}
.isAllChoose .isStoreChoose,
.isChoose .isGoodChoose {
display: inline-block;
width: 30px;
height: 30px;
border: solid 1px rgb(211, 208, 208);
border-radius: 50%;
margin: 0 10px
}
.isChoose .isGoodChoose {
margin: 38px 10px;
}
.goods {
display: flex;
margin: 10px 0;
}
.goodContent {
display: flex;
}
.goodContent img {
width: 100px;
height: 100px;
}
.content {
margin-left: 30px;
}
.content>p:nth-child(2) {
margin: 10px 0;
font-size: 14px;
color: #777;
}
.shopCount {
display: flex;
}
.shopCount p:first-child {
color: rgb(81, 81, 235);
margin-right: 20px;
}
.shopCount p:nth-child(2) span {
border: solid 1px rgb(185, 185, 185);
display: inline-block;
line-height: 20px;
width: 20px;
text-align: center;
margin-right: 5px;
cursor: pointer;
}
.active {
background-color: rgb(132, 132, 252);
}
</style>
</head>
<body>
<div id="app">
<single-Shop v-for="(shop , index) in tempArr" :key="index" :sigle="shop" @goodadd="Add" @goodreduce="Reduce"
@goodchoose="Goodactive" @goodallchange="allchange">
</single-Shop>
<p>总计{{AllCount}}</p>
</div>
<script src="./vue.js"></script>
<script type="text/x-template" id="singleShop">
<div class="singleShop">
<div class="shop-top">
<div class="isAllChoose">
<span class="isStoreChoose" @click="allchoose($event,sigle.Shopid,sigle.isChoose)" :class="sigle.isChoose ? 'active' : ''"></span>
</div>
<h3>{{sigle.name}}</h3>
</div>
<div class="goods" v-for="(good , index) in sigle.shopArr" :key="index">
<div class="isChoose">
<!-- <div class="isAllChoose"> -->
<span class="isGoodChoose" @click="isActive($event,sigle.Shopid,index,good.isChoose)" :class="good.isChoose ? 'active' : ''"></span>
<!-- </div> -->
</div>
<div class="goodContent">
<img :src="good.goodsImg" alt="">
<div class="content">
<p>{{good.goodsName}}</p>
<p><span>{{good.goodsAttrName}}</span> <span>评分:{{good.shopScore}}</span></p>
<div class="shopCount">
<p>{{good.deliveryMoney}}</p>
<p><span @click="reduce($event,sigle.Shopid,index,good.goodsCnt)">-</span><span>{{good.goodsCnt}}</span><span @click="add($event,sigle.Shopid,index,good.goodsCnt)">+</span></p>
</div>
</div>
</div>
</div>
</div>
</script>
<script>
Vue.component("singleShop", {
template: "#singleShop",
data() {
return {
isChoose: false
}
},
props: {
sigle: {
type: Object,
default: null
},
count: {
}
},
methods: {
add(e, id, index, num) {
// console.log(this)
if (num >= 10) return;
num = num + 1;
var obj = {
id,
index,
num
}
this.$emit("goodadd", obj)
// console.log(id,index,num)
},
reduce(e, id, index, num) {
if (num <= 1) return;
num = num - 1;
var obj = {
id,
index,
num
}
this.$emit("goodreduce", obj)
},
isActive(e, id, index, isChoose) {
isChoose = !isChoose
var obj = {
id,
index,
isChoose
}
console.log(obj)
this.$emit("goodchoose", obj)
},
// singlechoose(e,id,index,isChoose){
// isChoose = !isChoose;
// console.log(isChoose)
// var obj = {
// id,
// index,
// isChoose
// }
// this.$emit("singlechange",obj)
// },
allchoose(e, id, isChoose) {
isChoose = !isChoose;
console.log(isChoose)
var obj = {
id,
isChoose
}
this.$emit("goodallchange", obj)
}
}
})
var app = new Vue({
el: "#app",
data: {
// AllCount:0,
// num:
tempArr: [
{
name: "某某超市店铺",
num: 0,
Shopid: "01",
isChoose: false,
shopArr: [
{
deliveryMoney: "8.00",
freeMoney: "100.00",
goodsAttr: ["属性:默认"],
goodsAttrId: "1386",
goodsAttrName: "规格:10贴",
goodsCnt: 1,
goodsFodbean: "0.00",
goodsId: "509",
goodsImg: "./2.jpg",
goodsName: "茵妆玫瑰臻颜透润蚕丝面膜10贴",
goodsPrice: "1.00",
goodsStock: "10000",
shopScore: "1.00",
isChoose: false
}, {
deliveryMoney: "8.00",
freeMoney: "100.00",
goodsAttr: ["属性:默认"],
goodsAttrId: "1398",
goodsAttrName: "规格:10贴",
goodsCnt: 1,
goodsFodbean: "0.00",
goodsId: "510",
goodsImg: "2.jpg",
goodsName: "茵妆薰衣草水润细嫩蚕丝面膜10贴",
goodsPrice: "1.00",
goodsStock: "10000",
shopScore: "0.00",
isChoose: false
}]
},
{
name: "某某超市店铺",
num: 0,
Shopid: "02",
isChoose: false,
shopArr: [
{
deliveryMoney: "8.00",
freeMoney: "100.00",
goodsAttr: ["属性:默认"],
goodsAttrId: "1386",
goodsAttrName: "规格:10贴",
goodsCnt: 1,
goodsFodbean: "0.00",
goodsId: "509",
goodsImg: "./2.jpg",
goodsName: "茵妆玫瑰臻颜透润蚕丝面膜10贴",
goodsPrice: "1.00",
goodsStock: "10000",
shopScore: "1.00",
isChoose: false
}, {
deliveryMoney: "8.00",
freeMoney: "100.00",
goodsAttr: ["属性:默认"],
goodsAttrId: "1398",
goodsAttrName: "规格:10贴",
goodsCnt: 1,
goodsFodbean: "0.00",
goodsId: "510",
goodsImg: "2.jpg",
goodsName: "茵妆薰衣草水润细嫩蚕丝面膜10贴",
goodsPrice: "1.00",
goodsStock: "10000",
shopScore: "0.00",
isChoose: false
}]
}
],
},
computed: {
AllCount() {
let num = 0;
for (store of this.tempArr) {
// console.log(store)
if (store.isChoose) {
for (good of store.shopArr) {
num += (good.deliveryMoney) * 1
}
} else {
for (good of store.shopArr) {
if (good.isChoose) {
num += (good.deliveryMoney) * 1
}
}
}
}
return num;
}
},
methods: {
Add(obj) {
// console.log(obj)
for (store of this.tempArr) {
// console.log(obj)
if (store.Shopid == obj.id) {
store.shopArr[obj.index].goodsCnt = obj.num;
// vue.set()
store.shopArr[obj.index].deliveryMoney = (8.00 * obj.num).toFixed(2);
// console.log(store.shopArr[obj.index].deliveryMoney )
}
}
},
Reduce(obj) {
for (store of this.tempArr) {
if (store.Shopid == obj.id) {
store.shopArr[obj.index].goodsCnt = obj.num;
store.shopArr[obj.index].deliveryMoney = (8.00 * obj.num).toFixed(2);
}
}
},
Goodactive(obj) {
// console.log(obj)
for (store of this.tempArr) {
if (store.Shopid == obj.id) {
store.shopArr[obj.index].isChoose = obj.isChoose;
var num = 0;
for (good of store.shopArr) {
if (good.isChoose) {
num++
}
}
if (num == store.shopArr.length) {
store.isChoose = true
} else {
store.isChoose = false;
}
}
}
},
allchange(obj) {
// console.log(obj)
for (store of this.tempArr) {
if (store.Shopid == obj.id) {
store.isChoose = obj.isChoose;
for (good of store.shopArr) {
good.isChoose = obj.isChoose;
}
}
}
}
}
})
</script>
</body>
</html>