《仿盒马》app开发技术分享-- 购物车功能完善(14)

鸿蒙小林
• 阅读 3

技术栈

Appgallery connect

开发准备

上一节我们实现了购物车商品列表的状态切换,已添加商品数量的增减,已添加商品滑动删除,已添加商品在选中情况下的价格计算。这一节我们在这些功能的基础上实现云端记录,因为我们现在只有数据的查询是从云端获取的,其他的操作虽然都实现了相对应的功能,但是当我们操作完,关闭app,再打开不会有对应的记录,有的同学可能会说,那我们把数据用首选项或者数据库的形式存储就可以了吧? 那如果我更换了另一个设备那这些添加的数据是不是就又不能使用了?所以我们的每个操作,最好都是提交到云端,这样我们在其他设备,在退出应用,切换账号这些情况下都能很好的保存我们操作后的购物车状态。

功能分析

1.商品选中 上一节实现了商品选中和未选中时,通过isNeedPay的状态渲染列表,现在就要在这个基础上使用upsert来修改数据,使状态可以一直保存。

2.商品加减 商品的新增和减少我们也已经通过buyAmount字段进行实现,并且成功的切换了对应的状态,我们还是使用upsert来修改数据,把我们添加和减少后的商品数提交到云数据库中

3.商品删除 商品删除我们使用ListItem的swipeAction 已经实现,但是我们的删除现在是在list中splice,看似我们删除了数据,但是这个数据源重新进入页面就又恢复了,这里我们需要用云数据库的delete函数进行数据的真删除。这样我们下次再进入页面查询到的数据就是最后一次操作的数据流了,在上一节里,当我们删除商品的时候,忘记了调用价格计算的方法,在这里我们要补充上去

4.价格计算 这里的内容没什么变化,还是根据对应的状态去计算即可

代码实现

首先就是选中取消

let cartPush = new cart_product_list(); let data:CartProductList=item cartPush.id=data.id; cartPush.productId=data.productId//商品id cartPush.productSpecId=data.productSpecId//规格id cartPush.productName=data.productName//商品名称 cartPush.productSpecName=data.productSpecName cartPush.productImgAddress=data.productImgAddress cartPush.buyAmount=data.buyAmount//商品数量 cartPush.activityType=data.activityType//活动类型 暂无 cartPush.productPrice=data.productPrice//价格 cartPush.productOriginalPrice=data.productOriginalPrice//划线价 cartPush.couponPrice=data.couponPrice if (item.isNeedPay) { item.isNeedPay=false this.productList[index] = new CartProductList(item.id, item.productId, item.productSpecId, item.productName, item.productSpecName, item.buyAmount, item.isNeedPay,item.activityType,item.productImgAddress, item.productOriginalPrice, item.productPrice, item.couponPrice) cartPush.isNeedPay=false }else { item.isNeedPay=true this.productList[index] = new CartProductList(item.id, item.productId, item.productSpecId, item.productName, item.productSpecName, item.buyAmount, item.isNeedPay,item.activityType,item.productImgAddress, item.productOriginalPrice, item.productPrice, item.couponPrice) cartPush.isNeedPay=true } let num = await databaseZone.upsert(cartPush); hilog.info(0x0000, 'TAG', 已修改数据条目: ${num}); this.getCountPrice() 在点击事件中我们实现了数据的修改,现在我们在任何设备都能同步当前的商品选中状态了

然后是商品减少按钮

if (item.buyAmount==1) { showToast("已经是最小数量了") }else { item.buyAmount-- let cartPush = new cart_product_list(); let data:CartProductList=item cartPush.id=data.id; cartPush.productId=data.productId//商品id cartPush.productSpecId=data.productSpecId//规格id cartPush.productName=data.productName//商品名称 cartPush.productSpecName=data.productSpecName cartPush.productImgAddress=data.productImgAddress cartPush.buyAmount=item.buyAmount//商品数量 cartPush.activityType=data.activityType//活动类型 暂无 cartPush.productPrice=data.productPrice//价格 cartPush.productOriginalPrice=data.productOriginalPrice//划线价 cartPush.couponPrice=data.couponPrice cartPush.isNeedPay=data.isNeedPay let num = await databaseZone.upsert(cartPush); hilog.info(0x0000, 'TAG', 已修改数据条目: ${num}); this.productList[index] = new CartProductList(item.id, item.productId, item.productSpecId, item.productName, item.productSpecName, item.buyAmount, item.isNeedPay,item.activityType,item.productImgAddress, item.productOriginalPrice, item.productPrice, item.couponPrice) this.getCountPrice()

商品新增按钮 item.buyAmount++ let cartPush = new cart_product_list(); let data:CartProductList=item cartPush.id=data.id; cartPush.productId=data.productId//商品id cartPush.productSpecId=data.productSpecId//规格id cartPush.productName=data.productName//商品名称 cartPush.productSpecName=data.productSpecName cartPush.productImgAddress=data.productImgAddress cartPush.buyAmount=item.buyAmount//商品数量 cartPush.activityType=data.activityType//活动类型 暂无 cartPush.productPrice=data.productPrice//价格 cartPush.productOriginalPrice=data.productOriginalPrice//划线价 cartPush.couponPrice=data.couponPrice cartPush.isNeedPay=data.isNeedPay let num = await databaseZone.upsert(cartPush); hilog.info(0x0000, 'TAG', 已修改数据条目: ${num}); this.productList[index] = new CartProductList(item.id, item.productId, item.productSpecId, item.productName, item.productSpecName, item.buyAmount, item.isNeedPay,item.activityType,item.productImgAddress, item.productOriginalPrice, item.productPrice, item.couponPrice) this.getCountPrice() 新增和减少我们都只需要把对应的buyAmount 传进去修改就可以,其他的数据使用条目本身的

最后在条目的删除按钮这里,我们添加上价格计算的相关代码

Button('删除').margin(4) .onClick(()=>{ let index = this.productList.indexOf(item); this.productList.splice(index, 1); this.getCountPrice() }) 到这里,我们的购物车相对来说就是比较完善的了 ps:写在最后的话,可以看到针对云端数据提交的相关代码都是相似度极高的,有兴趣的同学可以自行封装一下

点赞
收藏
评论区
推荐文章
鸿蒙小林 鸿蒙小林
8小时前
《仿盒马》app开发技术分享-- 首页商品流(7)
技术栈Appgalleryconnect开发准备上一节我们实现了首页banner模块的功能,现在我们的首页还需要添加商品列表,作为一个购物类应用,商品列表是非常重要的一个模块,所以我们尽量把它设计的足够完善,参数能更好的支持我们后期复杂的逻辑,它需要有图片
鸿蒙小林 鸿蒙小林
8小时前
《仿盒马》app开发技术分享-- 商品详情页(10)
技术栈Appgalleryconnect开发准备上一节我们实现了自定义标题栏和商品详情的数据接收,我们已经拿到了想要的数据,这一节我们要丰富商品详情页的内容。商品详情页面我们需要展示的是商品的各个属性参数、商品的图片、商品规格、活动详情等功能分析商品详情页
鸿蒙小林 鸿蒙小林
8小时前
《仿盒马》app开发技术分享-- 加入购物车&加购列表展示(12)
技术栈Appgalleryconnect开发准备上一节我们实现了商品详情页面的规格选择弹窗,这在任何购物类应用中都是最常用的功能之一。当然了,作为一个购物类的应用,我们仅仅展示是用处不大的,我们还需要有添加的动作。这一节我们就来实现添加到购车里并且在购物车
鸿蒙小林 鸿蒙小林
9小时前
《仿盒马》app开发技术分享-- 分类模块顶部导航列表(15)
技术栈Appgalleryconnect开发准备上一节我们实现了购物车商品列表的大部分功能,实现了商品的添加、删除、增减、价格计算等业务,并且都跟云端进行通信。现在我们继续对项目进行改造,这一节我们要改造的内容是分类页,这个页面我们在之前的非端云一体化项目
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 确认订单页(数据展示)(29)
技术栈Appgalleryconnect开发准备上一节我们实现了地址的添加,那么有了地址之后我们接下来的重点就可以放到订单生成上了,我们在购物车页面,点击结算会跳转到一个订单确认页面,在这个页面我们需要有地址选择、加购列表展示、价格计算、优惠计算、商品数量
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 确认订单页(业务逻辑)(30)
技术栈Appgalleryconnect开发准备上一节我们实现了确认订单页的页面绘制和价格计算优惠计算,订单列表展示等功能,这一节我们来实现确认订单页的整个业务逻辑。首先我们要实现的就是地址的选择,然后把我们计算的价格,商品列表等数据保存起来,然后我们开始
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 购物车业务逻辑完善(34)
技术栈Appgalleryconnect开发准备之前我们已经实现了购物车相关的内容,实现了购物车数据列表的展示,但是我们结算订单之后我们的购物车列表并没有刷新,而且底部的状态栏并没有明显的数据展示来提醒用户,而且当我们在商品详情页添加新商品,底部也没有同步
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 商品搜索页(顶部搜索bar&热门搜索)(37)
技术栈Appgalleryconnect开发准备随着开发功能的逐渐深入,我们的应用逐渐趋于完善,现在我们需要继续在首页给没有使用按钮以及组件添加对应的功能,这一节我们要实现的功能是商品搜索页面,这个页面我们从上到下开始实现功能,首先就是一个搜索的bar,然
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 商品搜索页(搜索记录&商品搜索)(38)
技术栈Appgalleryconnect开发准备上一节我们新建了商品搜索页,实现了顶部的搜索bar以及下方的推荐搜索列表,这一节我们要新增一个商品搜索记录列表,以及输入内容之后搜索出对应商品的功能,我们还需要保证搜索内容的唯一性,以及搜索记录的本地数据持久
鸿蒙小林 鸿蒙小林
2小时前
《仿盒马》app开发技术分享-- 兑换商品收货确认&已完成列表展示(79)
技术栈Appgalleryconnect开发准备上一节我们实现了兑换商品订单的确认揽收功能,实现了tabs切换时的数据刷新,实现了待收货订单的列表展示。这一节我们要实现确认收货功能,并且实现待收货的列表展示功能功能分析当我们点击确认揽收的时候,修改订单状态