少儿舞蹈小程序(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

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

相关推荐
中杯可乐多加冰4 小时前
逻辑控制案例详解|基于smardaten实现OA一体化办公系统逻辑交互
人工智能·深度学习·低代码·oa办公·无代码·一体化平台·逻辑控制
头发还在的女程序员20 小时前
基于JAVA语言的短剧小程序-抖音短剧小程序
java·开发语言·小程序
2501_916007471 天前
iOS 应用性能测试的工程化流程,构建从指标采集到问题归因的多工具协同测试体系
android·ios·小程序·https·uni-app·iphone·webview
信也科技布道师FTE1 天前
当AMIS遇见AI智能体:如何为低代码开发装上“智慧大脑”?
人工智能·低代码·llm
book多得1 天前
刷题专用微信小程序推荐
微信小程序·小程序
00后程序员张1 天前
iOS 抓不到包怎么办?从 HTTPS 解密、QUIC 排查到 TCP 数据流分析的完整解决方案
android·tcp/ip·ios·小程序·https·uni-app·iphone
技术与健康1 天前
微信小程序云开发实践:共享环境与LLM整合经验
微信小程序·小程序
老华带你飞1 天前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
发财北1 天前
本地生活小程序开发方案
小程序