前言

截止到昨天,我们已经将商城小程序的所有tabBar下对应的所有页面。到现在可以说我们的小程序的业务逻辑已经完成了70%了,剩下的逻辑比较重点的就是订单和售后页面了。
今天我们开始探索确认订单页面的逻辑开发

需求分析


我们可以看到,从上到下依次有

  • 收货地址信息
  • 店铺下的商品信息
  • 优惠券信息
  • 发票信息

实现逻辑

我们还是先进行组件拆分。将地址、优惠券、发票分别拆分为不同的组件用来进行切换、选择操作。将商品信息放到确认订单的index组件中即可。
这几个组件的显示和交互和当前用户选择的规格又换,例如:

  1. 如果商品在选择的地址中不包邮,则地址处显示超出配送范围
  2. 选择优惠券时,只能选择当前商品可用的优惠券

因为这几个组件涉及到确认订单的流程的属性比较简单,且没有什么复杂的交互。在组件中传参的时候,我们使用父子组件传参。

实现逻辑

初始化分包

我们还是将确认订单放在分包的文件夹中,在sub-detail-pages文件夹下创建文件目录层级如下


创建完成后我们将分包配置的sub-detail-pagesrootroot层级,修改为如下代码

 {root: "sub-detail-pages",name: "detail-pages",pages: ["goods-detail/index", "confirm-order/index"],},

我们初始的确认订单页面

sub-detail-pages/confirm-order/index.tsx内容如下

import { View } from "@tarojs/components";
import AddressInfo from "./address-info";
import CouponInfo from "./coupon-info";
import InvoiceInfo from "./invoice-info";
export default function ConfirmOrder() {return (<View><AddressInfo></AddressInfo>123123123<CouponInfo></CouponInfo><InvoiceInfo></InvoiceInfo></View>);
}

找个地方作为入口

我们一开始做商城小程序的时候就分析过,用户有两个地方可以跳转到确认订单页面。1个是立即购买,另一个是购物车跳转。
因为这个两个路径传参是不一样的,例如立即购买路径传参就是规格id和数量,购物车时购物车唯一标识。所以我们在进入确认订单页面的时候,应该先请求一遍接口。
整体的流程如下:

  1. 路径传参,购物车和立即购买分别请求不同的接口,返回同样的数据结构体
  2. 根据返回的结构体来渲染数据
  3. 切换地址和优惠券时,通过使用结构体封装商品参数,加上修改后的属性,请求接口继续返回上次的结构体

也就是说,在进入确认订单后的所有请求属性里的商品数据,都是根据第一次请求的结构体封装的
我们在购物车和立即购买中分别添加跳转到确认订单路径的方法如下:
购物车

<AtButton
onClick={() => {let cartIds = [] as any;shopCartList.map((item) => {item["shopList"].map((cart) => {if (cart.isChecked) {cartIds.push(cart.id);}});});Taro.redirectTo({url:"/sub-detail-pages/confirm-order/index?urlType='shopCart'&cartIds=" +JSON.stringify(cartIds),});
}}
>
去结算
</AtButton>

立即购买。大家可以直接找个地方将规格id写死,只要能实现跳转就可以了

<AtButtontype="secondary"onClick={() =>url: `/sub-detail-pages/confirm-order/index?urlType='buyNow'&productId='123123123'&buyNum=10`,})}>立即购买</AtButton>

我们在这一步实现的功能就是跳转到确认订单页面之后显示页面如下

最后,我们模拟一下选择子组件之后父组件重新计算的代码

确认订单index.tsx\

import { View } from "@tarojs/components";
import AddressInfo from "./address-info";
import CouponInfo from "./coupon-info";
import InvoiceInfo from "./invoice-info";
import { getCurrentInstance } from "@tarojs/taro";
import { useEffect, useState } from "react";export default function ConfirmOrder() {const { router } = getCurrentInstance() || {};const [loading, setLoading] = useState(true);const [addressId, setAddressId] = useState("1111");const [couponId, setCouponId] = useState("2222");const [invoiceId, setInvoiceId] = useState("3333");const [confirmOrderData, setConfirmOrderData] = useState({shopData: [{shopName: "测试店铺",goodList: [{goodsId: "123123123",goodsName: "商品名称",goodsPrice: "123",goodsNum: "1",},{goodsId: "123123123",goodsName: "商品名称",goodsPrice: "123",goodsNum: "1",},],},],});useEffect(() => {console.log(router?.params);setTimeout(() => {setLoading(false);}, 1000);}, []);useEffect(() => {console.log(addressId);console.log(couponId);console.log(invoiceId);console.log("计算");}, [addressId, couponId, invoiceId]);return (<View>{loading ? ("加载中") : (<View>{addressId} {couponId} {invoiceId}<AddressInfoaddressId={addressId}updateAddressId={setAddressId}></AddressInfo><CouponInfocouponId={couponId}updateCouponId={setCouponId}></CouponInfo><InvoiceInfoinvoiceId={invoiceId}updateInvoiceId={setInvoiceId}></InvoiceInfo></View>)}</View>);
}

模拟切换地址的代码,order-inifo/index.tsx

import { View } from "@tarojs/components";
import { AtButton } from "taro-ui";
import './index.scss';
export default function AddressInfo(props) {const updateAddressId = () => {let addressId = new Date().getTime();props.updateAddressId(addressId);};return (<View><AtButton onClick={() => updateAddressId()}>点我覆盖地址唯一标识</AtButton></View>);
}

我们可以看到,在点击覆盖确认订单的地址唯一标识之后,在控制台中会实时显示正在计算,如下图所示

结语

通过这几天的更文活动,算是从0开始搭建了一个商场小程序的骨架和基本的业务实现。美中不足的是样式看起来比较糟糕,我们在完成4月份的更文活动之后,逐步的优化,并整理一下优化的步骤,到时候和大家共享css样式优化落地
从明天开始,我们准备写5篇其他方面的文章,计划是前端方面的。欢迎大家多多关注,点赞!

Taro跨端开发探索19——商城小程序确认订单页面开发相关推荐

  1. 多商户商城小程序源码开发需具备哪些功能?

    随着电商的进一步发展,传统企业为了更好的占领市场也纷纷向电商市场迈进,着手打造属于自己的商城系统.多商户商城系统是一种多商户.多商品.多支付的电子商务平台,功能丰富,涵盖多个行业,能够满足多种商家和用 ...

  2. 【微信小程序】基于JavaScript的花店商城小程序微信云开发

    [微信小程序]基于JavaScript的花店商城小程序微信云开发 用Java Script语言进行一次微信小程序开发 文章目录 前言 一.功能总览 二.功能显示 1.搜索框 2.轮播图 3.主题导航栏 ...

  3. 视频教程-Layabox3D游戏开发入门-微信3D小游戏案例 -微信开发

    Layabox3D游戏开发入门-微信3D小游戏案例 有多年Unity程序开发经验,有策划和美术设计的经验.愿意在csdn这个平台和大家一起分享! 金龙 ¥29.00 立即订阅 扫码下载「CSDN程序员 ...

  4. 【小程序专栏】多种开发方式对比-跨端?低代码?原生?还是云开发?

    目前"小程序"的开发与应用呈现"井喷"之势,作为小程序的鼻祖,2021年微信小程序开发者突破了300万,日活跃用户数(DAU)已经超过4.5亿,微信为开发者支付 ...

  5. 校园超市,百货超市小程序,手把手带你开发一款微信商城小程序,云开发+cms+数据库+js+css+微信小程序

    从今天开始带领大家实现一款云开发版的校园二手商城小程序 技术选型 1,前端 微信小程序原生框架 css JavaScript 2,管理后台 云开发Cms内容管理系统 web网页 3,数据后台 小程序云 ...

  6. 网易严选商城小程序全栈开发,域名备案中近期上线(mpvue+koa2+mysql)

    2018 年 9 月 13 日 : 新增了VUEX的引入,在store文件夹里 并且在首页的城市获取,和自己选择城市的页面中使用了VUEX,大家可以参考mpvue中如何引入和使用vuex的 2018年 ...

  7. UEFI开发探索94 – 迷宫小游戏

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI下的迷宫小游戏 1 Maze程序结构分析 1)定义全局变量 2)设置迷宫 3) 游戏控制 ...

  8. 【系】微信小程序云开发实战坚果商城-前端之订单实现

    第 2-7 课:前端之订单实现 目录 开篇 [系]微信小程序云开发实战坚果商城-开篇 基础篇 [系]微信小程序云开发实战坚果商城-弹性盒子 [系]微信小程序云开发实战坚果商城-ES6 简单入门 [系] ...

  9. UEFI开发探索95 – 弹跳小游戏

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI下的弹跳小游戏 1 Bounce游戏 1.1 游戏架构 1.2 移植和编写代码 1)编写 ...

最新文章

  1. linux系统读取第二个盘的数据,磁盘及文件系统管理—第二篇
  2. YonBuilder直播预约第七期 | 一场直播带你走近规则链
  3. mysql未提交事务sql_MySQL如何找出未提交事务的SQL浅析
  4. Pytest前后置处理
  5. 计算机原理与应用简称,基础知识-计算机原理与应用.ppt
  6. Linux/CentOS7install PackageError: Loaded plugins: fastestmirror
  7. oracle 表的移动,oracle 表移动表空间
  8. arch_version(12) of input model should be 11!
  9. Qt 学习之路 :信号槽
  10. Unity 序列帧动画
  11. ic和mos怎么区分_快速掌握MOS管源极和漏极的区别!看了受益匪浅!
  12. mysql商品表_MySQL数据库创建商品表
  13. 区块链核心技术-P2P网络
  14. 好中的计算机英文ei,电子信息类容易中的英文EI期刊有哪些
  15. python中compile函数_Python compile函数有什么用?
  16. hdu3966 树链剖分+线段树 裸题
  17. 新浪-InSAR博客网址Blog of Jerome Cheung
  18. 初中计算机实践研究计划,《初中信息技术学科学生作品有效评价的实践研究》课题研究计划...
  19. PS效果——斜面浮雕
  20. oc语言和c语言,OC和C语言的混编注意点和好处

热门文章

  1. 三菱PLC编程-MOV指令
  2. 华为交换机-不同Vlan如何通信
  3. Java - char型变量中能不能存贮一个中文汉字,为什么?
  4. Android 蓝牙 A2dp 编码SBC、AAC、Aptx、LDAC、LHDC aduio音频概述(1)
  5. include,include_once,require,require_once的区别
  6. GitChat · 软件工程 | 一小时教你学会 Maven 项目的构建与管理
  7. uC/OS iii(三)任务管理之任务状态
  8. 将c语言程序转化成伪代码,「第9篇」「做编程题方法3」「来点伪代码」
  9. java jdk17 Tomcat
  10. gSoap入门之一__下载及编译gsoap两大法宝