当前位置: 首页 > news >正文

点餐小程序实战教程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加载好角色信息,前端调用的时候将获取的角色信息赋值给变量,后续就可以按照业务逻辑进行处理了。


http://www.mrgr.cn/news/45508.html

相关文章:

  • OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【内存调测】
  • Ngx+Lua+Redis 快速存储POST数据
  • 如何使用PSTools工具集中的PSExec修改注册表信息,解决某些注册表项无法删除的问题
  • 以下是一些数据看板的常见使用场景:
  • 招个测试员,我又面试了100+人,未果…
  • 如何在VScode中加入系统安装好的python环境
  • Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】
  • PCL 计算法向量(MLS)
  • git commit失败整理
  • FLINK SQL
  • 修改Docker的默认存储路径
  • 个人常用的正则表达式匹配,以及实际应用
  • 【react】开发常用hooks统计
  • 分析和解决js运算精度问题,出现多位小数
  • 算法闭关修炼百题计划(四)
  • 如何下载和安装CLion,图文详解
  • ZCC40036 过压保护芯片
  • 如何优化电源模块自动化测试的硬件设计?-纳米软件
  • C++ 游戏开发中内存管理进阶
  • 云原生周刊:Docker大涨价|2024.10.8