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

目录

前言

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

1 建立收货地址数据表

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

地址表(user_addresses

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

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

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

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

javascript 复制代码
/**
 * 用户登录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方法

添加如下代码

bash 复制代码
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里调用我们的全局方法

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

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

先搭建标题

搭建内容区域布局

这里的技巧是,如果用户有地址我们就直接显示,如果没有我们就显示添加地址

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

一个绑定有地址的表达式

bash 复制代码
$w.app.dataset.state.user.userAddresses.length>0

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

bash 复制代码
$w.app.dataset.state.user.userAddresses.length==0

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

相关推荐
00后程序员张4 小时前
iOS 混淆与反调试反 Hook 实战,运行时防护、注入检测与安全加固流程
android·安全·ios·小程序·uni-app·iphone·webview
2501_915918414 小时前
iOS 上架流程详细指南 苹果应用发布步骤、ipa 文件上传 打包上架实战经验
android·ios·小程序·https·uni-app·iphone·webview
专业软件系统开发4 小时前
WIFI大师小程序4.1.9独立版源码
小程序·wifi小程序源码·wifi大师小程序源码
2501_916013744 小时前
Web 抓包全指南 Web抓包工具、浏览器抓包方法、HTTPS 解密
前端·网络协议·ios·小程序·https·uni-app·iphone
Jack电子实验室5 小时前
实用工具:基于Python的图片定位导出小程序
java·python·小程序
2501_916013746 小时前
iOS 26 系统电耗分析实战指南 如何检测电池掉电、液体玻璃导致的能耗变化
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915921436 小时前
iOS 原生开发全流程解析,iOS 应用开发步骤、Xcode 开发环境配置、ipa 文件打包上传与 App Store 上架实战经验
android·macos·ios·小程序·uni-app·iphone·xcode
00后程序员张7 小时前
iOS 26 帧率测试实战指南,Liquid Glass 动画性能、滚动滑动帧率对比、旧机型流畅性与 uni-app 优化策略
android·ios·小程序·uni-app·cocoa·iphone·webview