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

家政预约小程序07参与活动

目录

  • 1 浏览时写入数据
  • 2 点击参与按钮更新记录
  • 总结

我们上一篇搭建了活动展示的页面,当用户浏览活动的时候,需要记录参与的信息,本篇我们介绍一下如何实现活动参与的功能。

1 浏览时写入数据

为了方便跟踪用户的信息,比如用户浏览时就写入数据,我们需要在页面的生命周期函数中增加写入的逻辑。

打开小程序,点击+号创建javascript方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当用户打开页面的时候,我们就要记录一条信息,表示用户已经参与了活动,只不过我们的状态是未参与

写入的时候我们需要调用新增方法的API,具体的代码如下

export default async function ({ event, data }) {
  try {
    const activityRecord = await $w.cloud.callDataSource({
      dataSourceName: "hdcyjlb",
      methodName: "wedaGetItemV2",
      params: {
        // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
        filter: {
          where: {
            $and: [
              {
                hdxx: {
                  $eq: $w.page.dataset.params.activityid, // 获取单条时,推荐传入_id数据标识进行操作
                },
              },
              {
                yhxx: {
                  $eq: $w.app.dataset.state.user._id, // 获取单条时,推荐传入_id数据标识进行操作
                },
              },
            ],
          },
        },
        select: {
          $master: true, // 常见的配置,返回主表
        },
      },
    });
    if (Object.keys(activityRecord).length == 0) {
      const result = await $w.cloud.callDataSource({
        dataSourceName: "hdcyjlb", // 数据模型标识
        methodName: "wedaCreateV2",
        params: {
          data: {
            hdxx: { _id: $w.page.dataset.params.activityid },
            yhxx: { _id: $w.app.dataset.state.user._id },
            cyzt: "1",
            cysj: $w.Now()
          },
        },
      });
    }
  } catch (e) {
    console.log("错误代码", e.code, "错误信息", e.message);
  }
}

代码的逻辑是先根据活动id和用户id查询活动参与表是否有记录,如果不存在就调用新增方法写入具体的信息

我们在搭建数据源的时候,活动信息和用户信息都是选择的新版关联关系。新版关联关系在数据源存储数据的时候是对象类型,因此我们在写入数据的时候要将对应的对象信息构造好。

参与时间我们使用$w.Now()来获取当前时间的毫秒值写入数据源。参与状态我们给一个固定值,1表示未参与。虽然我们在创建数据源的时候枚举值写的是汉字,但是实际存储的是枚举的标识

具体如何查看标识呢?打开我们的数据源,打开枚举项就可以看到
在这里插入图片描述

2 点击参与按钮更新记录

点击参与活动的时候,我们需要更新一下活动信息,为此我们需要先新建一个变量用来保存活动参与记录的数据标识
在这里插入图片描述
这个时候要对我们的初始化方法改造一下,去获取到参与记录的数据标识

export default async function ({ event, data }) {
  try {
    const activityRecord = await $w.cloud.callDataSource({
      dataSourceName: "hdcyjlb",
      methodName: "wedaGetItemV2",
      params: {
        // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
        filter: {
          where: {
            $and: [
              {
                hdxx: {
                  $eq: $w.page.dataset.params.activityid, // 获取单条时,推荐传入_id数据标识进行操作
                },
              },
              {
                yhxx: {
                  $eq: $w.app.dataset.state.user._id, // 获取单条时,推荐传入_id数据标识进行操作
                },
              },
            ],
          },
        },
        select: {
          $master: true, // 常见的配置,返回主表
        },
      },
    });
    if (Object.keys(activityRecord).length == 0) {
      const result = await $w.cloud.callDataSource({
        dataSourceName: "hdcyjlb", // 数据模型标识
        methodName: "wedaCreateV2",
        params: {
          data: {
            hdxx: { _id: $w.page.dataset.params.activityid },
            yhxx: { _id: $w.app.dataset.state.user._id },
            cyzt: "1",
            cysj: $w.Now()
          },
        },
      });
      $w.page.dataset.state.ativityRecordId = result.id
    }else{
      $w.page.dataset.state.ativityRecordId = activityRecord.id
    }
  } catch (e) {
    console.log("错误代码", e.code, "错误信息", e.message);
  }
}

改造后的逻辑我们添加了标识的更新方法,如果是首次参与那就从新增的返回结果赋值,如果已经参与过了就从查询单条的返回结果赋值

获取到数据标识之后,我们就可以根据标识更新记录了,添加一个更新的自定义方法

在这里插入图片描述
除了要更新状态外,我们还需要写入用户的规则选择信息,从我们的标签选择提取选中值即可

写入信息之后需要控制按钮是否可以点击,如果用户参与过就不让用户重复参与

添加一个布尔值的变量用来控制是否可点击
在这里插入图片描述
将该变量绑定到按钮的是否禁用属性上
在这里插入图片描述
绑定好了如果用户参与了我们就把这个变量的值修改为true
在这里插入图片描述
方法的完整代码

export default async function ({event, data}) {
  try {
    const result = await $w.cloud.callDataSource({
      dataSourceName: "hdcyjlb", // 数据模型标识
      methodName: "wedaUpdateV2",
      params: {
        "data": {
          "hdgzxx": {_id:$w.tagSelect1.value},
          "cyzt": "2"
        },
        "filter": {
          "where": {
            "$and": [
              {
                "_id": {
                  "$eq": $w.page.dataset.state.ativityRecordId
                }

              }
            ]
          }
        },
      }
    });
    $w.page.dataset.state.hasJoinActivity = true
    
  } catch (e) {
    console.log("错误代码", e.code, "错误信息", e.message);
  }
}

总结

本篇我们介绍了参与活动的具体功能,包括页面加载时写入数据,以及点击按钮时更新记录的状态。灵活使用API是我们实现具体功能的前提,在编写API的时候要熟悉文档型数据库更新和写入记录的语法,这块是和传统开发有很大不同的地方。


http://www.kler.cn/a/466049.html

相关文章:

  • Prism模块化
  • Kafka消息队列
  • Flask是什么?深入解析 Flask 的设计与应用实践
  • MYSQL--------选择合适的数据类型
  • MySQL Binlog 监听方案
  • 《learn_the_architecture_-_generic_interrupt_controller_v3_and_v4__lpisn》学习笔记
  • 堆排序基础与实践:如何在Java中实现堆排序
  • VMware去虚拟化
  • halcon中图像处理及图像滤波
  • ElementUI中的el-select显示的不是对应label值
  • 【react】Redux的设计思想与工作原理
  • LeetCode1507 转变日期格式
  • c++不够用知识补充-using namespace
  • 经纬度噪点与误差处理的优化
  • Beamer-LaTeX学习(教程批注版)【1】
  • 【计算机网络】课程 作业一 搭建连续覆盖的办公网络
  • Conda 安装 Jupyter Notebook
  • 深入解析Reactive Programming框架在微服务中的最新应用
  • 鸿蒙NEXT开发中使用星闪服务
  • 线性代数考研笔记
  • 汽车燃油软件标定测试
  • 机器学习算法深度解析:以支持向量机(SVM)为例及实战应用
  • 贪心算法概述
  • git rest --hard
  • aardio —— 虚表 —— 使用ownerDrawCustom列类型制作喜马拉雅播放器列表
  • 详解:如何通过 request-promise 和代理 IP 发送 HTTP 请求