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

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

相关推荐
计算机程序设计小李同学2 小时前
婚纱摄影集成管理系统小程序
java·vue.js·spring boot·后端·微信小程序·小程序
启扶农4 小时前
lecen:一个更好的开源可视化系统搭建项目--全局对象使用--全低代码|所见即所得|利用可视化设计器构建你的应用系统-做一个懂你的人
低代码·数据访问·页面可视化·页面设计器·全局对象·公共属性·工具方法
幽络源小助理6 小时前
SpringBoot+小程序高校素拓分管理系统源码 – 幽络源免费分享
spring boot·后端·小程序
Mr -老鬼6 小时前
移动端跨平台适配技术框架:从发展到展望
android·ios·小程序·uni-app
内存不泄露7 小时前
棋牌预约小程序系统论文
小程序
启扶农1 天前
lecen:一个更好的开源可视化系统搭建项目--数据、请求、寄连对象使用--全低代码|所见即所得|利用可视化设计器构建你的应用系统-做一个懂你的人
低代码·数据对象·数据访问·页面可视化·页面设计器·请求对象·寄连对象
流之云低代码平台1 天前
提升PHP开发效率与质量的关键:工作流优化
低代码·php工作流优化方法·php代码优化·php开发流程优化·tpflow工作流引擎应用·gadmin企业级开发平台优势·软件开发速度提升
说私域1 天前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
毕设源码-邱学长1 天前
【开题答辩全过程】以 基于微信小程序的松辽律所咨询系统的设计与实现为例,包含答辩的问题和答案
微信小程序·小程序
#六脉神剑1 天前
用myBuilder搭建企业级数字化业务系统架构
低代码·系统架构·低代码开发平台·数字化工具·mybuilder