当前位置: 首页 > news >正文

少儿舞蹈小程序(18)订单确认

目录

  • 前言
  • 1 建立收货地址数据表
  • 2 扩展用户登录API,集成收货地址信息
  • 3 订单确认页视图搭建与逻辑实现
    • 步骤一:数据请求与页面加载
    • 步骤二:收货地址模块的逻辑判断与绑定

前言

完成了购物车功能的开发,接下来就是至关重要的订单确认环节。在这个页面中,我们需要展示商品清单、收货信息、支付方式以及价格明细。本篇将重点聚焦于收货地址的逻辑处理,教你如何创建地址表、扩展用户登录API,并根据用户地址信息动态搭建页面视图。
在这里插入图片描述

1 建立收货地址数据表

在低代码平台中,我们需要先创建一个专门用于存储用户收货地址的数据表。这张表应该与你的用户表关联,并且包含详细的地址信息字段。

地址表(user_addresses

字段名称字段标识字段类型备注
地址IDaddress_id文本唯一标识符,可设置为系统自动生成
用户IDuser_id文本关联dance_users表的_id字段
收件人姓名recipient_name文本
手机号码phone_number文本
所在地区region文本省/市/区信息
详细地址detail_address文本街道、门牌号等
是否为默认is_default布尔标识该地址是否为默认收货地址

在这里插入图片描述

2 扩展用户登录API,集成收货地址信息

为了在用户登录时一并获取其收货地址,我们需要对现有的登录API进行扩展。我们将通过user_id(即dance_users表的主键_id)来查询user_addresses表,并返回用户的所有地址列表。

以下是扩展后的用户登录API代码:

/*** 用户登录API* 根据openid查询用户表,如果存在返回用户信息,并标识是否为注册用户*/module.exports = async function (params, context) {try {// 获取openid参数const openid = params.openid;// 参数校验if (!openid) {return {code: 400,message: 'openid不能为空',data: null,timestamp: Date.now()};}// 查询用户当前信息(使用查询单条记录的语法)const userResult = await context.callModel({dataSourceName: 'dance_users',methodName: 'wedaGetItemV2',params: {filter: {where: {openid: { $eq: openid }}},select: { $master: true }}});// 检查用户是否存在if (!userResult || Object.keys(userResult).length === 0) {return {code: 404,message: '用户不存在',data: null,timestamp: Date.now()};}// 判断是否为注册用户(通过是否有手机号来判断)const isRegistered = !!userResult.phone;// 3. 查询用户收货地址列表const userAddresses = await context.callModel({dataSourceName: 'user_addresses',methodName: 'wedaGetRecordsV2',params: {filter: {where: {// 通过用户ID关联查询user_id: { $eq: userResult._id }}},// 按照是否默认进行排序,将默认地址排在最前面select : {"$master" : true},getCount : true,pageSize : 10,pageNumber : 1,orderBy:[{"is_default":"desc"}]}});// 返回用户信息return {code: 200,message: '登录成功',data: {userInfo: userResult,isRegistered: isRegistered,userAddresses: userAddresses.records},timestamp: Date.now()};} catch (error) {console.error('用户登录错误:', error);return {code: 500,message: '服务器内部错误',data: null,timestamp: Date.now()};}
};

代码解释:

  • 我们使用 context.callModel 调用 user_addresses 表的 wedaGetRecordsV2 方法,通过 user_id 字段查询所有与当前用户关联的地址记录。
  • 通过 orderBy 参数,我们按照 is_default 字段降序排序,这样如果存在默认地址,它将始终排在列表的第一位。
  • 最后,我们将查询到的 userAddresses 数组添加到返回数据 data 中,供前端页面使用。

3 订单确认页视图搭建与逻辑实现

现在我们有了后端支持,就可以在订单确认页上实现前端逻辑了。

步骤一:数据请求与页面加载

API创建好之后,就需要在前端调用,在代码区的全局部分,创建一个javascript方法
在这里插入图片描述
添加如下代码

export default async function login() {const openid = $w.auth.currentUser.openId||"123"const result = await $w.cloud.callDataSource({dataSourceName: 'yhgl_rc2573h',methodName: 'login',params: {openid:openid}, // 方法入参});$w.app.dataset.state.user = result.data
}

在页面的生命周期函数,onShow里调用我们的全局方法
在这里插入图片描述

步骤二:收货地址模块的逻辑判断与绑定

按照我们的原型图,第一部分是显示收货人的信息。我们需要在这里根据是否有地址来动态展示内容。

先搭建标题
在这里插入图片描述
搭建内容区域布局
在这里插入图片描述
这里的技巧是,如果用户有地址我们就直接显示,如果没有我们就显示添加地址

为了让视图有一个互斥关系,我们是通过绑定条件展示来实现

一个绑定有地址的表达式

$w.app.dataset.state.user.userAddresses.length>0

一个绑定没有地址的表达式

$w.app.dataset.state.user.userAddresses.length==0

通过以上步骤,你的订单确认页就能实现智能展示收货地址的功能了。在下一篇教程中,我们将详细介绍如何创建地址添加和管理页面,完善整个购物流程。

http://www.dtcms.com/a/394864.html

相关文章:

  • Uniapp X 打包抖音小程序教程
  • uni-app中实现在input的placeholder中添加图标
  • vue面试题集锦
  • 基于Springboot+UniApp+Ai实现模拟面试小工具十二:模拟面试功能实现
  • 基于Springboot+UniApp+Ai实现模拟面试小工具十一:主页功能及简历上传功能实现
  • BGP选路“十一步”法则
  • MITRE ATLAS 对抗威胁矩阵与 LLM 安全
  • 第5章:技术深度与广度:构筑你的核心壁垒(1)
  • 洞察未来:Temporal.io 如何赋能复杂模拟引擎的韧性与智能
  • Android 实例 - Android 圆形蒙版(Android 圆形蒙版实现、圆形蒙版解读)
  • PyCharm 在 Linux 上的安装指南
  • Linux 入门:开启开源世界的大门
  • ​​[硬件电路-321]:数字电路的两大家族CMOS(来源于MOS三极管管)与TTL(来源于BJT三极管)
  • 【GitHub每日速递 250922】开源 AI 搜索引擎 Perplexica:本地大模型 + 多模式搜索,免费又强大!
  • CCF-CSP-S 2021 初赛解析
  • 现在如何使用docker下载
  • 【Proteus仿真】AT89C51单片机并行数据转换为串行仿真
  • Docker 容器详解及实操,从新手>入门>拿捏,巨详细
  • 【ASP.NET Core】身份认证——Identity标识框架指南
  • [Nodejs+LangChain+Ollama] 2.提示词实践
  • i.MX6ULL移植内核6.6(二)GPIO子系统和LED子系统
  • VLC Media取消视频文件名前置显示
  • 在unity urp项目中 通过图片创建材质(透明光晕)
  • OneSignal PHP SDK v2 官方资源
  • 如何透过批次模拟加速3D模型建立
  • PDF清晰度提升工具,让模糊文档变清晰
  • 设计模式六大原则
  • QML 多路 RTSP 视频流实时预览实现
  • glTF/glb:现在和未来
  • 构建以ERP为核心的智能制造运营中心(MOM)