点餐小程序实战教程17角色管理
目录
- 1 创建API
- 2 创建全局变量
- 3 加载角色
- 4 引导用户注册
- 总结
小程序中如果有多重角色人员使用的,通常需要根据用户的角色来进行页面跳转。我们点餐小程序也是区分不同的用户,有顾客和员工的区分,本篇我们讲解一下如何利用API来加载用户的角色
1 创建API
角色的话我们是先创建一个API来根据用户的openid去加载信息。打开应用编辑器,切换到数据模型视图,切换到APIs,点击+号进行创建
选择自定义代码
输入名称和标识
创建成功后修改方法的名称和标识
点击添加入参
输入openid
在代码区输入如下代码
module.exports = async function (params, context) {// 查询顾客表const customerResult = await context.callModel({name: 'customer_v7mamho', // 顾客表的模型名称methodName: 'wedaGetItemV2', // 查询顾客的函数params: {filter: {where: {$and: [{openid: {$eq: params.openid, // 获取单条时,推荐传入_id数据标识进行操作},},],},},select: {$master: true, // 常见的配置,返回主表},},});// 查询员工表const employeeResult = await context.callModel({name: 'employee_5kkehvv', // 员工表的模型名称methodName: 'wedaGetItemV2', // 查询员工的函数params: {filter: {where: {$and: [{openid: {$eq: params.openid, // 获取单条时,推荐传入_id数据标识进行操作},},],},},select: {$master: true, // 常见的配置,返回主表},},});
console.log("Customer Result:", customerResult);
console.log("Employee Result:", employeeResult);// 判断用户注册状态let isRegistered = false;let roles = [];let userData = {customer: null,employee: null,};if (customerResult&& Object.keys(customerResult).length > 0) {isRegistered = true; // 用户是顾客roles.push('customer');userData.customer = customerResult; // 设置用户数据为顾客数据}if (employeeResult&& Object.keys(employeeResult).length > 0) {isRegistered = true; // 用户是员工roles.push('employee');userData.employee = employeeResult; // 设置用户数据为员工数据}return {isRegistered: isRegistered, // 返回注册状态roles: roles, // 返回角色数组userData: userData, // 返回用户数据};};
代码的逻辑是先分别去员工表和顾客表根据openid获取信息,根据返回的结果来分配角色并且将用户的信息返回
输入测试条件,执行测试,将返回的结果映射到出参里
2 创建全局变量
后端API开发好了之后,我们就可以加载角色信息了,需要创建一个全局变量用来存储角色,类型选择数组
3 加载角色
加载角色我们需要通过前端的自定义方法进行加载,修改一下我们原来创建的init方法,修改为如下代码
export default async function ({ event, data }) {try {// 获取用户信息const userinfo = await $w.auth.getUserInfo();console.log("userinfo", userinfo);// 使用用户的 openid,若未获取则使用默认值 "123"const openid = userinfo.openId || "123"; console.log("openid", openid);// 调用云函数获取角色信息const result = await $w.cloud.callDataSource({dataSourceName: 'jsgl_ml92z65',methodName: 'getRoleInfo',params: { openid: openid },});console.log("result", result);// 检查用户是否注册if (result.isRegistered) {// 更新应用状态$w.app.dataset.state.role = result.roles;// 根据角色更新用户数据if (result.roles.includes("customer")) {$w.app.dataset.state.customer = result.userData.customer || null; // 确保存在数据}if (result.roles.includes("employee")) {$w.app.dataset.state.employee = result.userData.employee || null; // 确保存在数据}} else {console.log("用户未注册");// 这里可以添加未注册用户的处理逻辑,例如弹窗提示}} catch (error) {console.error("Error in main function:", error);// 这里可以添加错误处理逻辑,例如弹窗提示用户}
}
这里我们会根据API的返回结果来给全局变量赋值
4 引导用户注册
如果用户未注册,我们需要引导用户注册,这个时候需要弹出一个弹窗让用户点击对应的注册按钮进行注册。
在当前页面下添加弹窗组件,弹窗内容添加两个按钮
在init方法里,当用户未注册的时候,我们调用弹窗的api来打开弹窗
$w.modal1.open({})
总结
我们本篇介绍了一下角色加载的逻辑,先定义好API加载好角色信息,前端调用的时候将获取的角色信息赋值给变量,后续就可以按照业务逻辑进行处理了。