目录
- 1 设计数据源
- 2 后台管理
- 3 后端API
- 4 调用API
- 总结
家政预约小程序的核心是展示家政公司提供的各项服务的能力,比如房屋维护修缮,家电维修,育婴,日常保洁等。用户在选择家政服务的时候,价格,评价是影响用户选择的核心要素。因此在小程序的首要需要展示用户关心的核心内容。
1 设计数据源
为了显示服务的内容,我们先需要设计数据源用来存储数据。打开控制台,点击数据模型,点击新建
输入数据源的名称,服务管理,点击创建
数据源创建好之后,需要添加列,首先我们添加服务的名称,类型选择文本
在添加的列上点击向右插入列,添加服务描述,类型选择文本
在首页显示的时候为了吸引用户,我们添加两个价格,一个是划线价格,一个是优惠价格,类型选择数字
为了在列表上显示,我们添加一个图片字段,类型选择图片
然后添加一个销量,类型选择数字
通常小程序可以按照综合进行排序,我们设置一个综合评分,类型选择数字
在添加一个服务详情,类型选择富文本
添加一个是否在首页展示的字段,类型选择布尔值
最后添加一个服务分类,类型选择关联关系,选择我们的服务分类表
2 后台管理
数据源创建好之后,我们就可以开发后台管理功能,先创建一个服务管理页面,从模板新建
选择对应的数据模型,模板会自动的生成增删改查的页面
切换到页面布局,我们配置我们的导航菜单
点开刚才配置的菜单,将标题修改为服务管理
3 后端API
我们这里录入数据的时候,需要先计算一下服务的综合得分。我们综合得分的技术规则是按三个指标进行计算,分别是价格、销量和评价。每个指标分配不同的权重,最终求一个总体的得分。
而且综合得分是一个动态的指标,在每次顾客购买服务和做出评价后,重新计算当前服务的综合得分并进行更新。
像这种有规则的我们称之为业务逻辑,需要使用API进行开发,在小程序侧对应的事件中进行调用。
点击APIs,点击新建
选择自定义代码
输入方法的名称和标识
因为销量、价格、评价的数量级不一样,为了实现可比较,我们用minMax算法实现,以下是minMax算法的逻辑
比如价格作为一项指标公式是,评价后的价格分=(当前服务价格-最低服务价格)/(最高服务价格-最低服务价格)
然后总分=销量评价分权重+价格评价分权重+评价分*权重
首先我们需要传入当前产品的价格,设置入参,输入price
然后定义一个常量用来获取我们的入参
const price = params.price
接着定义一个变量用来返回计算的结果,初始化为0
let score = 0
接着我们获取服务的所有数据,可以调用分页方法
const services = await context.callModel({
name:'fwgl_u9ms0al',
methodName:'wedaGetRecords',
params:{
pageSize:1000
}
})
默认不设置页码默认取10条,我们这里设置1000基本就把服务全获取到了
通过分页方法会把所有字段都获取到,我们这里只关心服务的价格,使用数组的map方法我们处理一下返回结果,让数组里只包含价格
const records = services.records.map(item=>(item.yhjg))
接着我们就要处理一下各种情况,比如我没录入数据的情况下,那我就直接设定价格分为0,如果只有一条数据因为分母会变成0所以也让价格分变成0
if(records.length===0){
score=0
}else{
records.push(price)
const max_price = Math.max(...records)
const min_price = Math.min(...records)
if(max_price==min_price){
score=0
}else{
console.log('min_price',min_price,'max_price',max_price)
score = ((price - min_price)/(max_price-min_price))*0.4
}
}
计算好价格之后,最后将结果返回,注意API要求返回结果是JSON格式,这里我们将结果包装成一个对象,属性放置我们的返回结果
return {score:Number(score.toFixed(2))};
代码写好之后,点击方法测试,输入入参,看一下我们的计算结果
点击运行测试就可以看到执行的结果,点击出参自动映射,我们的API就开发好了
4 调用API
在我们的编辑界面,我们添加一个按钮调用一下API,在综合评分字段旁边添加一个普通容器,将该字段放入普通容器中,并添加一个按钮
在代码区定义两个变量,一个是数字类型,一个是对象类型
选中综合得分,设置输入值,绑定我们的score
然后设置按钮,我们设置一个链式调用,先判断我们的优惠价格有没有输入,如果没有我就提示一个错误信息
如果输入了,我就调用我的API,并且传入我们的参数,并将结果赋值给我们的result对象
赋值成功后将API的调用结果赋值给我们的score变量
这样就实现了一个计算综合得分的效果
总结
本篇我们介绍了服务管理功能的开发,编写了一个小的算法用来计算综合得分,然后讲解了如何通过事件的链式调用去获取我们的综合得分。虽然这个算法不见得和实际贴合,但是主要是演示一下微搭前后端开发的一个过程,结合你自己的业务就可以实现自己想要的逻辑出来。