家政预约小程序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的时候要熟悉文档型数据库更新和写入记录的语法,这块是和传统开发有很大不同的地方。