点餐小程序实战教程17角色管理

文摘   2024-10-08 20:00   内蒙古  

小程序中如果有多重角色人员使用的,通常需要根据用户的角色来进行页面跳转。我们点餐小程序也是区分不同的用户,有顾客和员工的区分,本篇我们讲解一下如何利用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加载好角色信息,前端调用的时候将获取的角色信息赋值给变量,后续就可以按照业务逻辑进行处理了。



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