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