shopName不显示
相关代码:
OrderConfirmation.vue
<template> <div class="wrapper"> <div class="top"> <div class="top__bgcor" /> <div class="top__header"> <div class="iconfont top__header__back"></div> 确认订单 </div> <div class="top__receiver"> <div class="top__receiver__title">收货地址</div> <div class="top__receiver__address"> 北京理工大学国防科技园2号楼10层 </div> <div class="top__receiver__info"> <span class="top__receiver__info__name">瑶妹(先生)</span> <span class="top__receiver__info__phone">18911024266</span> </div> <div class="iconfont top__receiver__icon"></div> </div> </div> <div class="products"> <div class="products__title">{{shopName}}</div> <div class="products__item" v-for="item in productList" :key="item._id"> <img :src="item.imgUrl" class="products__item__img" /> <div class="products__item__detail"> <h4 class="products__item__title">{{ item.name }}</h4> <p class="products__item__price"> <span> <span class="products__item__yen">¥</span> {{ item.price }} x {{ item.count }} </span> <span class="products__item__total"> <span class="products__item__yen">¥</span> {{ item.price * item.count }} </span> </p> </div> </div> </div> <div class="cart"> <div class="check"> <div class="check__info"> 实付金额<span class="check__info__price"> ¥62</span> </div> <div class="check__btn">提交订单</div> </div> </div> </div> </template> <script> import { useRoute } from "vue-router"; import { useCommonCartEffect } from "../../effects/cartEffect"; export default { name: "OrderConfirmation", components: {}, setup() { const route = useRoute(); const shopId = route.params.id; const { productList,shopName } = useCommonCartEffect(shopId); return { productList ,shopName}; }, }; </script> <style lang="scss" scoped> @import "../../style/viriables.scss"; @import "../../style/mixins.scss"; .wrapper { position: absolute; left: 0; right: 0; top: 0; bottom: 0; background: #eee; } .top { position: relative; height: 1.96rem; background-size: 100% 1.59rem; background-image: linear-gradient( 0deg, rgba(0, 145, 255, 0) 4%, $btn-bgColor 50% ); background-repeat: no-repeat; &__header { position: relative; padding-top: 0.26rem; line-height: 0.24rem; color: $bgColor; text-align: center; font-size: 0.16rem; &__back { position: absolute; left: 0.18rem; font-size: 0.22rem; } } &__receiver { position: absolute; bottom: 0; left: 0.18rem; right: 0.18rem; background: $bgColor; border-radius: 0.04rem; padding: 0.16rem; &__title { color: $content-fontcolor; font-size: 0.16rem; font-weight: bold; line-height: 0.22rem; } &__address { color: $content-fontcolor; font-size: 0.14rem; margin: 0.14rem 0 0.06rem 0; line-height: 0.2rem; } &__info { color: $medium-fontColor; font-size: 0.12rem; line-height: 0.18rem; &__name { margin-right: 0.06rem; } } &__icon { transform: rotate(180deg); position: absolute; right: 0.16rem; top: 0.47rem; color: $medium-fontColor; font-size: 0.2rem; } } } .products { margin: 0.16rem 0.18rem 0.55rem 0.18rem; background: $bgColor; &__title { padding:.16rem .16rem 0 .16rem; font-size: 0.16rem; color: $content-fontcolor; } &__item { position: relative; display: flex; padding: 0.16rem; &__detail { flex: 1; } &__img { width: 0.46rem; height: 0.46rem; margin-right: 0.16rem; } &__title { margin: 0; line-height: 0.2rem; font-size: 0.14rem; color: $content-fontcolor; @include ellipsis; } &__price { display: flex; margin: 0.06rem 0 0 0; line-height: 0.2rem; font-size: 0.14rem; color: $hightlight-fontColor; } &__total { flex: 1; text-align: right; color: #000; } &__yen { font-size: 0.12rem; } } } .cart { position: absolute; left: 0; bottom: 0; right: 0; background: $bgColor; box-shadow: 0 -0.01rem 1rem 0 $content-bgcolor; z-index: 2; } .check { display: flex; &__info { flex: 1; font-size: 0.14rem; color: $content-fontcolor; line-height: 0.2rem; margin: 0.15rem 0 0.15rem 0.24rem; &__price { font-size: 0.16rem; color: $content-fontcolor; line-height: 0.22rem; font-weight: bold; } } &__btn { width: 0.98rem; line-height: 0.5rem; font-size: 0.14rem; background: #4fb0f9; text-align: center; color: $bgColor; } } </style>
cartEffect.js
相关代码:
import {computed} from 'vue' import {useStore} from 'vuex'; // 购物车相关逻辑 export const useCommonCartEffect=(shopId)=>{ const store = useStore() const cartList = store.state.cartList const changeCartItemInfo=(shopId,productId,productInfo,num)=>{ store.commit('changeCartItemInfo',{ shopId,productId,productInfo,num }) } const productList = computed(()=>{ const productList = cartList[shopId]?.productList || [] return productList }) const shopName = computed(()=>{ const shopName = cartList[shopId]?.shopName || '' console.log(shopName) console.log(shopId) console.log(cartList) return shopName }) return{changeCartItemInfo,shopName,productList,cartList} }
store 里的index.js
相关代码:
import { createStore } from 'vuex' const setLocalCartList = (state)=>{ const {cartList} = state const cartListString = JSON.stringify(cartList) localStorage.cartList = cartListString } const getLocalCartList = () =>{ // try{ // return JSON.parse(localStorage.cartList) // }catch(e){ // return {} // } if(localStorage.cartList){ return JSON.parse(localStorage.cartList) }else{ return {} } } export default createStore({ state: { // shopId:{ // shopName:'沃尔玛', // productList:{ // productId:{ // _id:'1', // name:'番茄250g/份', // ingUrl:'http://www.dell-lee.com/imgs/vue3/tomato.png', // sales:10, // price:33.6, // oldPrice:39.6, // count:2 // }, // } // }, cartList:getLocalCartList() }, getters: { }, mutations: { changeCartItemInfo(state,payload){ //根据传入的参数,获取到商铺的id、商品id、商品详细信息等数据 const {shopId,productId,productInfo} = payload //通过shopId(商铺的id)获取state.cartList中对应的数据 let shopInfo = state.cartList[shopId] //如果state.cartList里面没有任何数据,就将其设置为空对象 if(!shopInfo){shopInfo={ shopName:'',productList:{} }} //再根据productId(商品id)获取对应的商品详细信息 let product =shopInfo.productList[productId] //如果获取到的商品信息为空 if(!product){ //就将传入的商品信息赋值给product product =productInfo //添加count属性初始化为0 product.count=0 } //如果获取到对应的商品信息,那么就将count属性值在原来基础上加num product.count=product.count+payload.num //如果点加号,那就是选中状态 if(payload.num > 0){product.check = true} //如果count的值小于0,则让count等于0 if(product.count<0){product.count=0} //改变后数据重新赋值,添加到state下的cartList中 shopInfo.productList[productId] = product state.cartList[shopId]=shopInfo setLocalCartList(state) }, changeShopName(state,payload){ const {shopId,shopName} = payload const shopInfo = state.cartList[shopId] || { shopName:'',productList:{} } shopInfo.shopName = shopName state.cartList[shopId] = shopInfo setLocalCartList(state) }, changeCartItemChecked(state,payload){ const {shopId,productId,productInfo} = payload const product = state.cartList[shopId].productList[productId] product.check=!product.check setLocalCartList(state) }, cleanCartProducts(state,payload){ const {shopId} = payload state.cartList[shopId].productList = {} setLocalCartList(state) }, setCartItemsChecked(state,payload){ const {shopId} = payload const products = state.cartList[shopId].productList if(products){ for(let key in products){ const product = products[key] product.check = true } } setLocalCartList(state) }, }, actions: { }, modules: { } })
相关截图:
11
收起
正在回答 回答被采纳积分+1
1回答
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星