Vue3仿美团项目--第四天

本文详细描述了一个Vue项目中,如何通过Vuex管理状态,实现结算按钮功能、编辑按钮的动态切换以及生成订单页面的构建。涉及Vuex中的状态管理、组件间通信、路由跳转和数据更新等关键点。
摘要由CSDN通过智能技术生成

4 第四天

主要任务:结算按钮,编辑按钮,订单页面

4.1 结算按钮

在vuex里面创建一个空数组用于接收需要结算的商品,在mutations中定义一个方法,在点击结算按钮的时候商品信息添加到vuex这个数组中。

在结算按钮的组件中定义方法,判断当选中的商品的数组为0的时候就弹出失败提示框(Toast提示框),如果不为0,就通过commit方法,把选中要结算的商品数组传递给vuex中mutations里面定义的那个方法。

注意:用于判断的数组里面只包含选中的商品的id。所以需要定义一个方法获取新数组,通过与商品列表里面的数组匹配,当id相同的时候就把该商品的信息过滤出来,获得新数组储存在vuex。

 点击结算按钮跳转到生成订单界面:在src文件夹存放组件的pages中新建一个生成订单组件,需要在main.js中配置路由,给结算按钮绑定click事件,路由跳转到生成订单界面。

 4.2 编辑按钮

分析:点击编辑按钮的同时,下面的结算按钮需要变成删除,合计需要隐藏,编辑按钮变成完成。

4.2.1 全局事件总线

需要用到全局事件总线,在vue3中使用需要先在集成终端下载插件。在src的common目录下创建js文件夹,新建一个js文件,然后配置文件,需要在哪个组件用到就在哪个组件引用。

npm i mitt -S

src/common/js/index.js

import mitt from 'mitt'; //引入mitt

const emitter=mitt();

export default emitter;//导出

4.2.2 编辑按钮

在购物车中使用Header组件的时候绑定编辑按钮为true,这样的话这个编辑按钮只有在购物车才显示,其他组件应用Header的时候就没有。

4.2.3 结算和删除

在vuex中定义edit为true,当edit为true的时候显示编辑,如果为false就显示完成。当点击编辑的时候会触发mutations里面的方法,然后对应的就会改变Header里传入的edit是true还是false,实现编辑和完成的切换。

在vuex中定义一个删除方法。

下面的结算一栏如果用之前的组件需要改变很多,比较麻烦,所以就自己重写一个div存放全选和删除。在结算删除按钮组件中定义一个isDelete,默认为true,显示结算的盒子。

//订阅消息

emitter.on('edit', () => {

     data.isDelete = !data.isDelete;

})

点击删除按钮的时候,判断当选中的商品数组不为0 ,就用commit调用vuex里面的删除方法,并且把isDelete变为false,显示删除的div,并且删除该商品信息,通过update更新数组,传给vuex,如果选中数组为0,则弹出Toast提示框。

一个小bug:当从购物车中删除其中一个商品时,全选按钮不能在同步了。

在删除按钮定义的方法里面清空数组,获得删除后的选中项。

 给更新数据update传入参数值type,当为1的时候是从删除按钮来的更新,给选中项取反,如果是2,代表是从结算按钮来的,直接保留选中项。

4.2.4 头部返回的小箭头

在公共组件Header中引入路由,通过router.back(),返回到上一个页面。

4.3 生成订单页面

生成订单页面包含内容:头部,用户信息,商品信息,商品金额和生成订单。

4.3.1 头部组件

在生成商品订单里面引入公共组件Header,传递title为”生成订单“,

4.3.2 用户信息

用户信息使用的是vant组件的业务组件里面的ContactCard 联系人卡片,tel和name通过遍历用户地址信息获得(用户信息储存在vuex里面)。

编辑联系人:

<van-contact-card type="edit" :tel="tel" :name="name" @click="onEdit" />

4.3.3 商品信息

商品信息使用的是vant组件的业务组件里面的Card 卡片,展示的内容是vuex中储存的选中需要结算的商品的数组里面的商品。

基础用法:

<van-card num="2" price="2.00" desc="描述信息" title="商品标题" thumb="https://fastly.jsdelivr.net/npm/@vant/assets/ipad.jpeg" />

4.3.4 商品金额和生成订单

分成两个div,上面的商品金额和¥一前一后,下面生成订单按钮,直接使用vant的主要按钮。

<van-button type="primary">主要按钮</van-button>

 计算商品金额:定义一个函数,计算总金额,每一项的num乘以他的price然后相加,再把最后结果赋值给¥后面的价钱。

 4.4 生成订单按钮

当点击生成订单的时候出现弹窗,点击完成的时候会跳转到订单页面,出现弹窗,点击确定跳转到订单页面。在vuex创建一个已完成订单的数组,在mutations里面定义一下,已完成的订单需要跟之前的订单数据拼在一起,避免重复支付。

 UPDATEORDER(state){

            state.orderListed=state.orderListed.concat(state.orderList)

}

 弹出框:vant组件中的Dialog 弹出框里面的基础用法。

import { showDialog } from 'vant';

showDialog({

        title: '标题',

        message: '代码是写出来给人看的,附带能在机器上运行。',

}).then(() => {

         // on close

});

生成订单之后,点击确定按钮:

4.4.1 更新购物车列表

需要将已完成的订单从购物车中删除。

使用 route.query. 接收传递过来的数组,该数组是路由跳转的时候传递过来的,里面包含的是支付完成的商品,然后与购物车中的数组进行匹配,把购物车中不存在的项返回,最后过滤出来得到的数组就是未完成支付的,然后调用mutations里面的删除方法,传递个新数组,给购物车列表赋值,最后只剩未支付的,完成购物车更新。

router:操作路由,进行路由跳转。

route:获取路由信息。

4.4.2 已完成的订单

调用mutations里面的方法,把支付成功的数组赋值给vuex里面的已完成订单数组中。

4.4.3 跳转订单页面

当点击弹出框的确定的时候跳转到订单页面通过 router.push('/'); 实现。

 #难难难....................................... 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡泡邮递员..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值