// [{ // seller_id: 0, // seller_nickname: "店铺名称", // products: [{ // id: 0 // }] // }] const defaults = [] const state = JSON.parse(JSON.stringify(defaults)); const getters = { total(state) { let sum = 0; // console.log(state) for (let sellerIndex in state) { for (let productIndex in state[sellerIndex].products) { if (state[sellerIndex].products[productIndex].checked) { sum += state[sellerIndex].products[productIndex].spec_price * state[sellerIndex].products[ productIndex].num } } } return sum.toFixed(2); } } const mutations = { add(state, payload) { let sellerIsExist = false; let productIsExist = false; for (let sellerIndex in state) { if (payload.seller_id === state[sellerIndex].seller_id) { sellerIsExist = true; for (let productIndex in state[sellerIndex].products) { if (payload.id === state[sellerIndex].products[productIndex].id && payload.spec_index === state[sellerIndex].products[productIndex].spec_index) { productIsExist = true; state[sellerIndex].products[productIndex].num = payload.num; break; } } if (!productIsExist) { state[sellerIndex].products.unshift(payload) } break; } } if (!sellerIsExist) { state.unshift({ seller_id: payload.seller_id, seller_nickname: payload.seller_nickname, products: [payload], checked: false }) } // console.log(this) this.commit("cart/save", state) }, remove(state, payload) { for (let sellerIndex in state) { for (let productIndex in state[sellerIndex].products) { if (payload.id === state[sellerIndex].products[productIndex].id && payload.spec_index === state[sellerIndex].products[productIndex].spec_index) { //如果商品已经存在于购物车 state[sellerIndex].products.splice(productIndex, 1) if (state[sellerIndex].products.length === 0) { state.splice(sellerIndex, 1) } } } } this.commit("cart/save", state) }, selectSeller(state, payload) { for (let sellerIndex in state) { if (payload.seller_id === state[sellerIndex].seller_id) { state[sellerIndex].checked = !state[sellerIndex].checked } for (let productIndex in state[sellerIndex].products) { if (state[sellerIndex].seller_id === payload.seller_id) { state[sellerIndex].products[productIndex].checked = state[sellerIndex].checked // this._vm.$set(state[sellerIndex].products[productIndex],"checked",state[sellerIndex].checked) } } } this.commit("cart/save", state) }, selectAll(state, payload) { // console.log(payload) for (let sellerIndex in state) { state[sellerIndex].checked = payload.checked for (let productIndex in state[sellerIndex].products) { state[sellerIndex].products[productIndex].checked = payload.checked } } this.commit("cart/save", state) }, select(state, payload) { // console.log(payload) for (let sellerIndex in state) { for (let productIndex in state[sellerIndex].products) { if (payload.id === state[sellerIndex].products[productIndex].id && payload.spec_index === state[sellerIndex].products[productIndex].spec_index) { state[sellerIndex].products[productIndex].checked = !state[sellerIndex].products[productIndex] .checked } } } this.commit("cart/save", state) }, numchange(context, payload) { for (let sellerIndex in state) { for (let productIndex in state[sellerIndex].products) { if (payload.id === state[sellerIndex].products[productIndex].id && payload.spec_index === state[sellerIndex].products[productIndex].spec_index) { state[sellerIndex].products[productIndex].num = payload.num } } } this.commit("cart/save", state) }, save(state) { uni.setStorageSync("cart", state) } } const actions = { add(context, payload) { return new Promise((resolve, reject) => { this._vm.$http.get({ url: "/product", data: { id: payload.id }, success: (res) => { // console.log(res.data.data.specs) const spec = JSON.parse(res.data.data.specs)[payload.specIndex]; const data = { id: res.data.data.id, images: res.data.data.images, name: res.data.data.name, spec_index: payload.specIndex, spec_name: spec.name, spec_image: spec.image, spec_org_price: Number(spec.org_price).toFixed(2), spec_price: Number(spec.price).toFixed(2), spec_stock: spec.stock, seller_id: res.data.data.user_id, seller_nickname: res.data.data.user.nickname, num: payload.num, time: new Date().getTime(), checked: false } context.commit('add', data) resolve(); } }) }) }, remove(context, payload) { context.commit('remove', payload) }, load(context) { let cart = uni.getStorageSync("cart"); for (let sellerIndex in cart) { for (let productIndex in cart[sellerIndex].products) { context.dispatch("add", { id: cart[sellerIndex].products[productIndex].id, num: cart[sellerIndex].products[productIndex].num, specIndex: cart[sellerIndex].products[productIndex].spec_index }) } } } } export default { namespaced: true, state, getters, actions, mutations }