一个系统开发,人、财、物、事四个方面是必不可少的。前述章节我们已经把人,顾客注册、登录,员工、服务商都讲解完毕了。围绕着人就要有资金相关的内容,比如本篇我们讲解的会员充值就是和顾客相关。
1 创建数据源
顾客充值的时候需要记录会员的充值记录,我们创建一个数据模型用来记录相关信息
这里用户标识和用户表关联,会员标识和会员表关联,这样就可以知道是哪个用户的哪个会员充值的金额是多少。
2 搭建我的钱包视图
首先我们需要在我的界面要搭建会员的余额显示部分
添加普通容器,设置10px的外边距
设置白色背景
设置一定的圆角
设置内边距
里边添加文本组件,内容改为我的钱包,文本格式改为标题H8
在文本组件下添加普通容器
添加三个普通容器
设置外层的容器的样式为横向排列,水平平分
第一个普通容器下添加两个文本组件,第一个文本组件的文本内容绑定为我们的余额
第二个普通容器里也添加两个文本组件,我们先显示优惠券,不绑定内容
第三个普通容器,我们绑定积分
3 创建API
当用户点击充值按钮的时候,需要将信息记录到表里并且更新会员表的余额,为此我们创建一个API来更新信息
添加入参
输入如下代码
在这里插入代码片const ErrorCode = {
SUCCESS: 0,
PARAM_ERROR: 1001,
NOT_FOUND: 1002,
SYSTEM_ERROR: 1003,
USER_NOT_EXISTS: 1005,
MEMBER_NOT_EXISTS: 1006,
INVALID_AMOUNT: 1007
};
module.exports = async function (params, context) {
console.log('充值API入参:', params);
// 1. 解析并校验参数
const { userId, memberId, amount, paymentMethod } = params;
if (!userId) {
return { code: ErrorCode.PARAM_ERROR, message: '用户ID不能为空' };
}
if (!memberId) {
return { code: ErrorCode.PARAM_ERROR, message: '会员ID不能为空' };
}
if (typeof amount !== 'number' || amount <= 0) {
return { code: ErrorCode.INVALID_AMOUNT, message: '充值金额必须为正数' };
}
if (!paymentMethod) {
return { code: ErrorCode.PARAM_ERROR, message: '支付方式不能为空' };
}
try {
// 2. 查询会员详情(使用wedaGetItemV2)
const memberResult = await context.callModel({
name: "jz_members",
methodName: "wedaGetItemV2",
params: {
filter: {
where: {
_id: { $eq: memberId },
}
},
select: {
$master: true
}
}
});
// 检查会员是否存在
if (!memberResult ||
typeof memberResult !== 'object' ||
Object.keys(memberResult).length === 0 ||
!memberResult._id) {
return { code: ErrorCode.MEMBER_NOT_EXISTS, message: '会员记录不存在' };
}
const currentBalance = memberResult.balance || 0;
// 3. 创建充值记录
const rechargeResult = await context.callModel({
name: "recharge_records",
methodName: "wedaCreateV2",
params: {
data: {
user_id: { _id: userId },
member_id: { _id: memberId },
recharge_amount: amount,
payment_method: paymentMethod,
recharge_time: Date.now()
}
}
});
// 4. 更新会员余额(使用事务确保原子性)
const updateResult = await context.callModel({
name: "jz_members",
methodName: "wedaUpdateV2",
params: {
data: {
balance: currentBalance + amount,
// 如果需要根据充值金额增加积分,可以在这里添加逻辑
// points: memberResult.points + Math.floor(amount * 0.1) // 每充值1元积0.1分
},
filter: {
where: {
_id: { $eq: memberId }
}
}
}
});
// 5. 返回成功结果
return {
code: ErrorCode.SUCCESS,
data: {
rechargeId: rechargeResult.id,
newBalance: currentBalance + amount,
rechargeTime: Date.now()
},
message: '充值成功'
};
} catch (error) {
console.error('充值API错误:', error);
return {
code: ErrorCode.SYSTEM_ERROR,
message: `系统错误: ${error.message}`
};
}
};
3 搭建充值页面
创建一个充值页面
添加表单容器,表选择充值记录表
选中表单容器,将数据源的写入方法改为会员的充值方法
修改入参,改为如下
({
userId:$w.form1.submitParams.data.user_id._id,
memberId:$w.form1.submitParams.data.member_id._id,
paymentMethod:$w.form1.submitParams.data.payment_method,
amount:Number($w.form1.submitParams.data.recharge_amount)
})
充值成功后,添加返回上一页
回到我的页面,当点击余额的时候跳转到充值页面
总结
本篇我们介绍了会员充值功能的开发,包括创建充值记录表、编写API用来写入数据、搭建界面等。会员有了余额,在支付的时候我们就可以从余额进行扣减了。