一个系统开发,人、财、物、事四个方面是必不可少的。前述章节我们已经把人,顾客注册、登录,员工、服务商都讲解完毕了。围绕着人就要有资金相关的内容,比如本篇我们讲解的会员充值就是和顾客相关。

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
}
}
家政维修平台实战31会员充值
});

        // 检查会员是否存在
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用来写入数据、搭建界面等。会员有了余额,在支付的时候我们就可以从余额进行扣减了。