优化购物车数据逻辑
This commit is contained in:
parent
d1050658ac
commit
5043db03b5
|
@ -19,7 +19,7 @@
|
||||||
<script>
|
<script>
|
||||||
import WidgetCountModify from "@/components/widgets/count-modify";
|
import WidgetCountModify from "@/components/widgets/count-modify";
|
||||||
import ServicePreviewItem from "@/components/service/preview-item";
|
import ServicePreviewItem from "@/components/service/preview-item";
|
||||||
import { mapState } from "vuex";
|
import { mapGetters } from "vuex";
|
||||||
export default {
|
export default {
|
||||||
name: "component-cate-template-list",
|
name: "component-cate-template-list",
|
||||||
data() {
|
data() {
|
||||||
|
@ -36,8 +36,8 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapGetters({
|
||||||
briefCart: (state) => state.cart.briefCart,
|
briefCart: "cart/briefCart",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -58,7 +58,7 @@ import WidgetTips from "@/components/widgets/tips";
|
||||||
import WidgetCheckBox from "@/components/widgets/checkbox";
|
import WidgetCheckBox from "@/components/widgets/checkbox";
|
||||||
import WidgetCountModify from "@/components/widgets/count-modify";
|
import WidgetCountModify from "@/components/widgets/count-modify";
|
||||||
import ServicePreviewItem from "@/components/service/preview-item";
|
import ServicePreviewItem from "@/components/service/preview-item";
|
||||||
import { mapGetters } from "vuex";
|
import { mapGetters, mapState } from "vuex";
|
||||||
export default {
|
export default {
|
||||||
name: "order-cart",
|
name: "order-cart",
|
||||||
data() {
|
data() {
|
||||||
|
@ -75,37 +75,39 @@ export default {
|
||||||
ServicePreviewItem,
|
ServicePreviewItem,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
cart: (state) => state.cart.cart,
|
||||||
|
}),
|
||||||
...mapGetters({
|
...mapGetters({
|
||||||
isLogin: "user/isLogin",
|
isLogin: "user/isLogin",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
onLoad() {
|
async onLoad() {
|
||||||
if (!this.isLogin) {
|
if (!this.isLogin) {
|
||||||
this.$store.commit("user/showLoginModal", true);
|
this.$store.commit("user/showLoginModal", true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
await this.$store.dispatch("cart/update");
|
||||||
this.list = [];
|
this.list = [];
|
||||||
this.$models.cart.list().then((list) => {
|
this.cart.list.forEach((item) => {
|
||||||
list.forEach((item) => {
|
let goods = [];
|
||||||
let goods = [];
|
item.good.forEach((v) => {
|
||||||
item.good.forEach((v) => {
|
goods.push({
|
||||||
goods.push({
|
id: v.gid,
|
||||||
id: v.gid,
|
name: v.title,
|
||||||
name: v.title,
|
times: v.post_hits,
|
||||||
times: v.post_hits,
|
cover: v.thumbnail,
|
||||||
cover: v.thumbnail,
|
price: v.money,
|
||||||
price: v.money,
|
number: v.number,
|
||||||
number: v.number,
|
|
||||||
checked: false,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
this.list.push({
|
|
||||||
name: item.cate,
|
|
||||||
total: 0,
|
|
||||||
list: goods,
|
|
||||||
checked: false,
|
checked: false,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
this.list.push({
|
||||||
|
name: item.cate,
|
||||||
|
total: 0,
|
||||||
|
list: goods,
|
||||||
|
checked: false,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onShow() {},
|
onShow() {},
|
||||||
|
@ -166,7 +168,9 @@ export default {
|
||||||
this.updateTotal(idx.parentIndex);
|
this.updateTotal(idx.parentIndex);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.$utils.toast("亲,不能再" + (e.type == "sub" ? "减少" : "增加") + "了~");
|
if (e.type == "sub") {
|
||||||
|
this.deleteCart(idx.parentIndex, idx.itemIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<text class="iconfont icon-gouwuche"></text>
|
<text class="iconfont icon-gouwuche"></text>
|
||||||
</view>
|
</view>
|
||||||
<view class="cart-number">
|
<view class="cart-number">
|
||||||
<text class="text">{{ cartCount }}</text>
|
<text class="text">{{ briefCart.count }}</text>
|
||||||
</view>
|
</view>
|
||||||
</movable-view>
|
</movable-view>
|
||||||
</movable-area>
|
</movable-area>
|
||||||
|
@ -58,10 +58,10 @@ export default {
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
currentCateId: (state) => state.system.currentCateId,
|
currentCateId: (state) => state.system.currentCateId,
|
||||||
cartCount: (state) => state.cart.count,
|
|
||||||
}),
|
}),
|
||||||
...mapGetters({
|
...mapGetters({
|
||||||
isLogin: "user/isLogin",
|
isLogin: "user/isLogin",
|
||||||
|
briefCart: "cart/briefCart",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
async onLoad() {
|
async onLoad() {
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<text class="iconfont icon-gouwuche"></text>
|
<text class="iconfont icon-gouwuche"></text>
|
||||||
</view>
|
</view>
|
||||||
<view class="cart-number">
|
<view class="cart-number">
|
||||||
<text class="text">{{ cartCount }}</text>
|
<text class="text">{{ briefCart.count }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-btn" :class="{ active: canUse }" @click="toCart">
|
<view class="order-btn" :class="{ active: canUse }" @click="toCart">
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
<script>
|
<script>
|
||||||
import AppLayout from "@/components/layout/layout";
|
import AppLayout from "@/components/layout/layout";
|
||||||
import AppCate from "@/components/cate/cate";
|
import AppCate from "@/components/cate/cate";
|
||||||
import { mapGetters, mapState } from "vuex";
|
import { mapGetters } from "vuex";
|
||||||
export default {
|
export default {
|
||||||
name: "service-list",
|
name: "service-list",
|
||||||
data() {
|
data() {
|
||||||
|
@ -46,11 +46,9 @@ export default {
|
||||||
AppCate,
|
AppCate,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
|
||||||
cartCount: (state) => state.cart.count,
|
|
||||||
}),
|
|
||||||
...mapGetters({
|
...mapGetters({
|
||||||
isLogin: "user/isLogin",
|
isLogin: "user/isLogin",
|
||||||
|
briefCart: "cart/briefCart",
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
onLoad(e) {
|
onLoad(e) {
|
||||||
|
@ -63,8 +61,8 @@ export default {
|
||||||
onShareTimeline() {},
|
onShareTimeline() {},
|
||||||
onShareAppMessage() {},
|
onShareAppMessage() {},
|
||||||
watch: {
|
watch: {
|
||||||
cartCount(count) {
|
briefCart(cart) {
|
||||||
this.canUse = count > 0;
|
this.canUse = cart.count > 0;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -76,7 +74,7 @@ export default {
|
||||||
if (this.isLogin) {
|
if (this.isLogin) {
|
||||||
this.$store.dispatch("cart/update");
|
this.$store.dispatch("cart/update");
|
||||||
}
|
}
|
||||||
this.canUse = this.cartCount > 0;
|
this.canUse = this.briefCart.count > 0;
|
||||||
if (!e.id) {
|
if (!e.id) {
|
||||||
return this.$utils.toast("参数错误");
|
return this.$utils.toast("参数错误");
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,42 +3,42 @@ import cart from '@/core/models/cart';
|
||||||
export default {
|
export default {
|
||||||
namespaced: true,
|
namespaced: true,
|
||||||
state: {
|
state: {
|
||||||
count: 0,
|
cart: {
|
||||||
briefCart: {
|
|
||||||
loaded: false,
|
loaded: false,
|
||||||
ids: [],
|
list: [],
|
||||||
list: {},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
getters: {},
|
getters: {
|
||||||
|
briefCart(state) {
|
||||||
|
let data = {
|
||||||
|
count: 0,
|
||||||
|
ids: [],
|
||||||
|
list: {},
|
||||||
|
};
|
||||||
|
state.cart.list.forEach((item) => {
|
||||||
|
item.good.forEach((k) => {
|
||||||
|
data.count += k.number;
|
||||||
|
data.list[k.gid] = k.number;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
data.ids = Object.keys(data.list);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
count(state, data) {
|
cart(state, data) {
|
||||||
state.count = data;
|
state.cart = data;
|
||||||
},
|
|
||||||
briefCart(state, data) {
|
|
||||||
state.briefCart = data;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
update(context, refresh) {
|
async update(context, refresh) {
|
||||||
if (!context.state.briefCart.loaded || refresh) {
|
if (!context.state.cart.loaded || refresh) {
|
||||||
cart.list().then((list) => {
|
await cart.list().then((list) => {
|
||||||
let count = 0, data = {
|
context.commit('cart', {
|
||||||
ids: [],
|
list: list,
|
||||||
list: {},
|
|
||||||
};
|
|
||||||
list.forEach((item) => {
|
|
||||||
item.good.forEach((k) => {
|
|
||||||
count += k.number;
|
|
||||||
data.list[k.gid] = k.number;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
data.ids = Object.keys(data.list);
|
|
||||||
context.commit('briefCart', {
|
|
||||||
...data,
|
|
||||||
loaded: true,
|
loaded: true,
|
||||||
});
|
});
|
||||||
context.commit('count', count);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue