点餐小程序实战教程07员工管理,创建数据源及API

文摘   2024-09-13 20:00   内蒙古  

我们现在已经完成了顾客信息的注册,在我们的点餐系统中,除了有顾客外,还有员工。员工的角色分为服务员、收银员、后厨三种。为了很好的管理信息,我们先需要创建数据源来管理相关的数据。

1 创建数据源

打开控制台,点击数据模型,点击+号创建数据源

添加一列,输入姓名,类型选择文本

继续添加一列,输入电话,类型选择电话

继续添加列,输入密码,类型选择文本

继续添加列,输入角色,类型选择枚举。枚举需要创建一个选项集,点击立即创建

选项集输入角色,分别添加服务员、收银员、后厨

继续添加列,输入邀请码,类型选择文本

继续添加列,输入审核状态,类型选择枚举

审核状态分为待审核、通过和不通过

我们员工注册的时候需要输入邀请码,我们需要增加一个邀请码的表来存储

添加一列,邀请码,类型选择文本

添加一列,是否使用,类型选择布尔值

2 开发API

我们开发一个后端的API用来完成员工的注册,点击我们的用户管理,点击编辑APIs方法

点击+号创建

输入方法的名称和标识,类型选择自定义代码

入参添加name、phone、password、role、invite_code

2.1 加密密码

增加一个API用来加密密码,类型选择云函数,点击管理云函数

选择新建云函数

输入函数名称

点击我们刚刚创建的函数名称

切换到函数代码

点击保存并安装依赖

点击复制

点击新建文件

输入package.json

输入如下的代码

{  "name": "app",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {},  "author": "",  "license": "ISC",  "dependencies": {    "@cloudbase/node-sdk": "latest",    "bcryptjs":"latest"  }}

在index.js中输入如下代码

'use strict';const bcrypt = require('bcryptjs');exports.main = async (event, context) => {    const { password } = event; // 从输入参数中获取 password

if (!password) { return { status: 'error', message: '密码未提供' }; } const salt = await bcrypt.genSalt(10); // 生成盐 const hashedPassword = await bcrypt.hash(password, salt); // 加密密码 return { status: 'success', hashedPassword };};

先点击保存并安装依赖,然后点击测试,输入参数测试

然后选择我们的云函数,添加入参

点击方法测试,验证正确之后点击出参映射

2.2 验证邀请码是否有效

在我们的API中,我们单独写一个验证方法来验证邀请码是否有效,思路是调用查询多条的方法,传入邀请码和是否被使用过两个查询条件。如果找到了说明邀请码是有效的,没找到说明邀请码是无效的



async function validateInviteCode(invite_code,context) { // 这里实现邀请码的验证逻辑 // 例如,查询数据库中是否存在该邀请码 const result = await context.callModel({ name: 'invite_codes_s3r45mp', // 数据模型标识 methodName: 'wedaGetRecordsV2', // 数据模型方法标识 params: { // 筛选内容,查找与当前openid匹配的用户 filter: { where: { $and: [ { code: { $eq: invite_code, }, }, { is_used: { $eq: false, }, }, ], }, }, // 排序 orderBy: [ { createdAt: "asc", // 创建时间,正序 }, { updateBy: "desc", // 更新时间,倒序 }, ], // 返回字段选择 select: { $master: true, // 返回主表 }, // 返回total字段 getCount: true, // 页面大小 pageSize: 1, // 只需要一条记录 // 当前页面 pageNumber: 1, }, });

return result.total > 0 ?result.records[0]:null; // 返回邀请码信息}

2.3 全部逻辑

有了这两个方法,我们就可以编写整体逻辑了,全部代码

// 验证邀请码的函数async function validateInviteCode(invite_code,context) {    // 这里实现邀请码的验证逻辑    // 例如,查询数据库中是否存在该邀请码    const result = await context.callModel({    name: 'invite_codes_s3r45mp', // 数据模型标识    methodName: 'wedaGetRecordsV2', // 数据模型方法标识    params: {      // 筛选内容,查找与当前openid匹配的用户      filter: {        where: {          $and: [            {              code: {                $eq: invite_code,              },            },            {              is_used: {                $eq: false,              },            },          ],        },      },      // 排序      orderBy: [        {          createdAt: "asc", // 创建时间,正序        },        {          updateBy: "desc", // 更新时间,倒序        },      ],      // 返回字段选择      select: {        $master: true, // 返回主表      },      // 返回total字段      getCount: true,      // 页面大小      pageSize: 1, // 只需要一条记录      // 当前页面      pageNumber: 1,    },  });

return result.total > 0 ?result.records[0]:null; // 返回邀请码信息}

// 哈希密码的函数async function hashPassword(password,context) { const result = await context.callConnector({ name: 'userManager_ssztgij', methodName: 'hashPassword', params: {password:password}, // 方法入参 });

return result.hashedPassword;}

module.exports = async function (params, context) {const hashedPassword = await hashPassword(params.password,context); // 加密密码console.log('Hashed Password:', hashedPassword);

// 验证邀请码 const inviteCodeInfo = await validateInviteCode(params.invite_code,context); if (!inviteCodeInfo) { return { status: 'error', message: '邀请码无效或已被使用' }; } // 注册员工信息 try { await context.callModel({ name: 'employee_5kkehvv', // 数据模型标识 methodName: 'wedaCreateV2', // 数据模型方法标识 params: { data: { name: params.name, password: hashedPassword, dh:params.phone, role:params.role, invite_code:params.invite_code, shzt:"1" }, }, }); await context.callModel({ name: 'invite_codes_s3r45mp', // 数据模型标识 methodName: 'wedaUpdateV2', // 数据模型方法标识 params: { data: { is_used: true, }, // 筛选内容,筛选内容推荐使用编辑器数据筛选器生成 filter: { where: { $and: [ { _id: { $eq: inviteCodeInfo._id, // 更新单条时,推荐传入_id数据标识进行操作 }, }, ], }, },

}, }); return { status: 'success', message: '注册成功,等待审核' }; } catch (error) { return { status: 'error', message: '注册失败', error }; }

};

总结

我们本篇讲解了员工注册的数据源创建以及后端API的编写,需要灵活的应用自定义代码和云函数才能开发出想要的功能来。


低代码布道师
分享微搭低代码使用教程,提问交流+知识星球50556232
 最新文章