《微信小程序》- 云函数开发实践之BMI体重管理

332 阅读2分钟
原文链接: huchengzhang.com

效果图

BMI体重管理 BMI体重管理

界面设计

设计目的:BMI数据管理

首页 - 如何实现:

* BMI,是什么?-- 需要简单解释下
* 必须有录入入口 -- 记录一下
* 可视化展示录入的数据 -- 身高固定、体重可变
* 可视化数据对不对  -- 历史记录进行比对展示

录入页 - 如何实现:

* 录入输入框 
* 录入的指标计算展示 
* 指标好不好,有个参考 
* 指标对不对,给个计算公式 
* 按钮名称,凸显主人公

代码实现

图表实现

const chart = new F2.Chart(config);
   chart.legend(false);
   chart.point()
     .position('date*weight')
     .size('tag', function (val) {
       return val ? 3 : 0;
     })
     .style('tag', {
       fill: function fill(val) {
         return '#0ac7d9'
       },
       stroke: '#fff',
       lineWidth: 1
     });
   chart.source(chartData, {
     date: {
       range: [0, 1],
       type: 'timeCat',
       mask: 'MM-DD'
     },
     weight: {
       max: 120,
       tickCount: 5,
       alias: '体重(kg)'
     }
   });
   chart.tooltip({
     showCrosshairs: true,
     showTitle: false,
     showItemMarker: false,
     snap: true,
     crosshairsType: 'xy',
     onShow: function onShow(ev) {
       return (ev.items = ev.items.splice(1));
     },
   });
   chart.area().position('date*weight').color('#0ac7d9').shape('smooth').adjust('stack');
   chart.line().position('date*weight').color('#0ac7d9').shape('smooth').adjust('stack');
   chart.render();
   f2Chart = chart;
   return chart;

指标参考

<view class="bmi-item" wx:for="{{bmiArray}}" wx:for-item="item" wx:for-index="index" wx:key="index">
    <view class="bmi-start" wx:if="{{item.start !== ''}}">{{item.start}}</view>
    <view class="bmi-middle">{{item.desc}}</view>
    <view class="bmi-end" wx:if="{{item.end !== ''}}">{{item.end}}</view>
</view>
[{
   start:0,
   desc:'偏瘦',
   end:''
 },{
   start: 18.5,
   desc: '正常',
   end:''
 },{
   start: 24,
   desc: '偏胖',
   end: ''
 },{
   start:27,
   desc:'肥胖',
   end:40,
 }
 ]

微信云端请求http

  // 云函数入口文件
const cloud = require('wx-server-sdk')
const rq = require('request-promise');

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const url = `xxxx`
  const res = await rq(url);
  return res;
}

云端数据库请求

if (!params){
    console.error(`[数据库]${dbName} [新增记录],参数空`);
}
const data = {
    data: params  //切记,这里params,需要时{},形式
}
const db = wx.cloud.database();
return db.collection(dbName).add(data).then((res) => {
    console.log(`[数据库]${dbName} [新增记录] 成功,记录 _id:`, params, res._id)
}).catch(err => {
    console.error(`[数据库]${dbName} [新增记录] 失败:`, params, err)
})

测试总结

图表数据加载问题 -

  • value不可为字符串,否则数值图表绘制失败

  • 自定义图表颜色 – 参考上一篇【《微信小程序》-F2图表组件实践遇到的那些卡壳》】

  • 数据请求云端获取,界面加载早,怎么解决数据加载延迟问题?
    数据没有准备好,就不展示界面。
    等数据准备好,才绘制。

    图表再次刷新问题

  • 记录下后,数据要刷新 ?
    把图表实例chart,全局下,然后触发changeData()

    f2Chart.changeData(bmiLocalData);