Ver código fonte

添加BM16离线历史记录

master
陈炫华 11 meses atrás
pai
commit
e5cf1d85ed

+ 5
- 0
BM16His_demo/app.js Ver arquivo

@@ -0,0 +1,5 @@
//app.js
App({
onLaunch: function () {
}
})

+ 20
- 0
BM16His_demo/app.json Ver arquivo

@@ -0,0 +1,20 @@
{
"pages":[
"pages/index/index"
],
"window": {
"navigationBarBackgroundColor": "#0082FE",
"navigationBarTextStyle": "white",
"navigationBarTitleText": "BM16离线历史记录",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
},
"plugins": {
"sdkPlugin": {
"version": "2.4.0",
"provider": "wx17e93aad47cdae1a"
}
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}

+ 431
- 0
BM16His_demo/pages/index/index.js Ver arquivo

@@ -0,0 +1,431 @@
// const plugin = requirePlugin("myPlugin").AiFresh;

const {BM16His: plugin} = requirePlugin("sdkPlugin");

function inArray(arr, key, val) {
for (let i = 0; i < arr.length; i++) {
if (arr[i][key] === val) {
return i;
}
}
return -1;
}

// ArrayBuffer转16进度字符串示例
function ab2hex(buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer),
function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join(',');
}
// var information = []
Page({
data: {
devices: [],
mac: "",
connected: false,
text: "",
unitList_all: ['g', 'ml', 'lb:oz', 'oz', 'kg', '斤', '牛奶 ml', '水 ml', '牛奶 floz', '水 floz', 'lb'],
unitList: ['g', 'ml', 'lb:oz', 'oz'],
weight: 0,
unit: 'g',
unitIndex: 0,
min: 0,
second: 0,
showWriteInput: false,
connected: false,
chs: [],
cmd: '',
name: '',
deviceId: null,
historyList: [],
height:0,
information:[],
},
onLoad: function () {
let screenHeight = wx.getSystemInfoSync().windowHeight;

this.setData({
height: screenHeight - 344,
});
},
clearDevices() {
this.setData({
devices: []
})
this.closeBluetoothAdapter()
wx.nextTick(()=>{
this.openBluetoothAdapter()
})
},
// 初始化蓝牙模块
openBluetoothAdapter() {
wx.openBluetoothAdapter({
success: (res) => {
console.log('openBluetoothAdapter success', res)
this.startBluetoothDevicesDiscovery()
},
fail: (res) => {
if (res.errCode === 10001) {
wx.showToast({
title: '请打开蓝牙',
icon: "none"
})
wx.onBluetoothAdapterStateChange(function (res) {
console.log('onBluetoothAdapterStateChange', res)
if (res.available) {
this.startBluetoothDevicesDiscovery()
}
})
}
}
})
},
// 获取本机蓝牙适配器状态
getBluetoothAdapterState() {
wx.getBluetoothAdapterState({
success: (res) => {
console.log('getBluetoothAdapterState', res)
if (res.discovering) {
this.onBluetoothDeviceFound()
} else if (res.available) {
this.startBluetoothDevicesDiscovery()
}
}
})
},
// 开始搜寻附近的蓝牙外围设备
startBluetoothDevicesDiscovery() {
if (this._discoveryStarted) {
return
}
this._discoveryStarted = true
wx.startBluetoothDevicesDiscovery({
allowDuplicatesKey: true,
services: [
"FFE0",
"F0A0", // BM30广播模块需加上,如使用连接模块可忽略
],
powerLevel: 'high',
success: (res) => {
console.log('startBluetoothDevicesDiscovery success', res)
this.onBluetoothDeviceFound()
},
})
},
// 停止搜寻附近的蓝牙外围设备
stopBluetoothDevicesDiscovery() {
wx.stopBluetoothDevicesDiscovery()
},

// 监听寻找到新设备的事件
onBluetoothDeviceFound() {
wx.onBluetoothDeviceFound((res) => {
console.log('res',res);
res.devices.forEach(device => {
if (!device.name && !device.localName) {
return
}
const foundDevices = this.data.devices
console.log('foundDevices',foundDevices);
const idx = inArray(foundDevices, 'deviceId', device.deviceId)
let advertisDatas = ab2hex(device.advertisData).split(',').toString()
let index = advertisDatas.indexOf('6e,49')
let cid = advertisDatas[index + 9] + advertisDatas[index + 10]
const data = {}
// console.log(device)
// console.log(ab2hex(device.advertisData))
// 此处判断是否BM30广播模块,如使用连接模块请删除此 if ,只保留 else 内容
if (cid == 14 ||cid == '0e') {
if (device.advertisServiceUUIDs[0].indexOf("F0A0") !== -1) {
let parseDataRes = plugin.parseBroadcastData(device.advertisData)
// console.log(parseDataRes)
if (parseDataRes.status == 1) {
let analyzeData = plugin.analyzeBroadcastScaleData(parseDataRes)
device.analyzeDataText = analyzeData.text
console.log(analyzeData.data.weight)
}
} else {
let buff = device.advertisData.slice(8, 14)
device.mac = new Uint8Array(buff) // 保存广播数据中的mac地址,这是由于iOS不直接返回mac地址
let tempMac = Array.from(device.mac)
tempMac.reverse()
device.macAddr = ab2hex(tempMac, ':').toUpperCase()
}
if (idx === -1) {
data[`devices[${foundDevices.length}]`] = device
} else {
data[`devices[${idx}]`] = device
}
this.setData(data)
}
})
})
},
// 连接低功耗蓝牙设备
createBLEConnection(e) {
this._connLoading = true
wx.showLoading({
title: '连接中',
})
setTimeout(() => {
if (this._connLoading) {
this._connLoading = false
wx.hideLoading()
}
}, 6000)
const ds = e.currentTarget.dataset
const index = ds.index
// 保存当前连接的设备,注意不能从wxml的dataset中直接返回该对象,因为ArrarBuffer类型的数据无法保留
const deviceId = ds.deviceId
const name = ds.name
this._device = this.data.devices[index]
console.log(this._device)
wx.createBLEConnection({
deviceId,
success: (res) => {
// console.log('this._device',this._device);
let buff = this._device.advertisData.slice(-6)
let arr = new Uint8Array(buff).reverse()
let mac = ab2hex(arr).replace(/,/g,":")
// console.log('mac',mac);
this.setData({
connected: true,
name,
deviceId,
mac
})
console.log("createBLEConnection:success")
this.log('蓝牙连接成功!')
wx.stopBluetoothDevicesDiscovery()
this.onBLEConnectionStateChange()
this.getBLEDeviceServices(deviceId)
},
fail: res => {
this._connLoading = false
wx.hideLoading()
wx.showToast({
title: '连接失败',
icon: 'none'
})
}
})
// 连接上设备就可以停止蓝牙搜索,减少功耗。
this.stopBluetoothDevicesDiscovery()
},

onBLEConnectionStateChange() {
wx.onBLEConnectionStateChange((res) => {
console.log('wx.onBLEConnectionStateChange() ', res.deviceId, res.connected, res.errorCode, res.errorMsg)
// 该方法回调中可以用于处理连接意外断开等异常情况
// console.log(`%c device ${res.deviceId} state has changed, connected: ${res.connected}`, 'color: #F26363')
if (!res.connected) {
wx.showToast({
title: '连接已断开',
icon: 'none'
})
this.log(this.data.mac + '蓝牙已断开连接....')
this.setData({
showWriteInput: false,
})
}
})
},

// 断开与低功耗蓝牙设备的连接
closeBLEConnection() {
wx.closeBLEConnection({
deviceId: this._deviceId
})
this.log(this.data.mac + '蓝牙已断开连接....')
this.setData({
showWriteInput: false,
})
},
quit(){
this.closeBLEConnection()
this.setData({
connected: false,
information:[]
})
},
// 获取蓝牙设备的 serviceId
getBLEDeviceServices(deviceId) {
wx.getBLEDeviceServices({
deviceId,
success: (res) => {
for (let i = 0; i < res.services.length; i++) {
if (res.services[i].isPrimary && res.services[i].uuid.indexOf('FFE0') > -1) {
this.getBLEDeviceCharacteristics(deviceId, res.services[i].uuid)
return
}
}
}
})
},

// 获取蓝牙设备某个服务中所有特征值(characteristic)
getBLEDeviceCharacteristics(deviceId, serviceId) {
this._deviceId = deviceId
this._serviceId = serviceId
this._device.serviceId = serviceId

wx.getBLEDeviceCharacteristics({
deviceId,
serviceId,
success: (res) => {
console.log('getBLEDeviceCharacteristics success', res.characteristics)

console.log('plugin',plugin);
// 初始化插件
plugin.initPlugin(res.characteristics, this._device)

wx.onBLECharacteristicValueChange((characteristic) => {
// 解析特征值,返回解密后的数据
let bleData = plugin.parseBleData(characteristic.value)
console.log(bleData)
if (bleData.status == 0) {
console.log("握手成功")
this._connLoading = false
wx.hideLoading()
wx.showToast({
title: '连接成功',
})
} else if (bleData.status == 2) {
let payload = bleData.data //对应协议中的payload数据,可以自行解析该数据
// console.log(ab2hex(payload, ' '))
// console.log(ab2hex(bleData.completeData, ' '))
switch (payload[0]) {
case 0x1B:
if (payload[1] == 0) {
this.log('设置系统时间成功')
}else if (payload[1] == 1) {
this.log('设置系统时间失败')
}else{
this.log('系统不支持时间设置')
}
break;
case 0x1C:
if (payload[1] == 1) {
let {year,month,day,hour,min,second} = plugin.analyzeSystemTime(payload)
this.log(`系统时间为:${year}/${month}/${day} ${hour}:${min}:${second}`)
} else {
this.log('系统时间无效')
}
break;
case 0x2B:
if (payload[1] == 0x05) {
if (payload[2] == 0) {
this.log('无用户历史记录')
} else if(payload[2] == 1) {
this.log('开始发送历史记录')
}else{
this.log('结束发送历史记录')
}
}
if (payload[1] == 0x06) {
if (payload[2] == 0x01) {
plugin.analyzeMCUBodyData(payload)
} else if (payload[2] == 0x02){
plugin.analyzeMCUBodyData(payload)
}else if (payload[2] == 0x03) {
let { year,month,day,hour,min,second,id,userCharacteristics,sex,age,height,weight,metabolicBasisRate,bodyAge ,uint,symbol,impedance,compute,bodyFat,subcutaneousFat,visceralFat,musclesRate,boneMass,waterContent,proteinRate,heartRate } = plugin.analyzeMCUBodyData(payload)
this.log(`时间为:${year}/${month}/${day} ${hour}:${min}:${second}
id:${id} 用户特征:${userCharacteristics},性别:${sex},年龄:${age},身高:${height},
体重:${weight},单前单位:${uint},重量数据精度:${symbol},阻抗:${impedance},
心率数据:${heartRate},体脂:${bodyFat},皮下脂肪:${subcutaneousFat}
,内脏脂肪:${visceralFat},肌肉率:${musclesRate},基础代谢率:${metabolicBasisRate},
骨量:${boneMass},水含量:${waterContent},蛋白率:${proteinRate},身体年龄:${bodyAge}`)
}
}
if (payload[1] == 0x07) {
if (payload[2] == 0x01) {
plugin.analyzeAPPBodyData(payload)
} else if (payload[2] == 0x02){
let { year,month,day,hour,min,second,id,userCharacteristics,sex,age,height,weight,uint,symbol,impedance,compute,heartRate } = plugin.analyzeAPPBodyData(payload)
this.log(`时间为:${year}/${month}/${day} ${hour}:${min}:${second}
id:${id} 用户特征:${userCharacteristics},性别:${sex},年龄:${age},身高:${height},
体重:${weight},单前单位:${uint},重量数据精度:${symbol},阻抗:${impedance},
算法标识:${compute},心率数据:${heartRate}`)
}
}
if (payload[1] == 0x04) {
if (payload[2] == 0) {
this.log('更新列表成功')
} else if(payload[2] == 1){
this.log('更新个人用户成功')
}else if(payload[2] == 2){
this.log('更新列表失败')
}else if(payload[2] == 3){
this.log('更新个人用户失败')
}else{
this.log('未知指令')
}
}
}
} else if (bleData.status == 1){
}
})
},
fail(res) {
console.error('getBLEDeviceCharacteristics', res)
}
})
},
log(data){
let info = this.data.information
info.unshift(data)
this.setData({
information:info
})
},
writeBLECharacteristicValue(buffer, uuid, deviceId, serviceId) {
// 向蓝牙设备发送一个二进制流数据
wx.writeBLECharacteristicValue({
deviceId,
serviceId,
characteristicId: uuid,
value: buffer,
success(res) {
console.log('writeBLECharacteristicValue success', res)
console.log('下发指令==> ' + ab2hex(buffer))
}
})
},
closeBluetoothAdapter() {
wx.closeBluetoothAdapter()
this._discoveryStarted = false
},
setSystemTime(){
// console.log('设置时间');
plugin.setSystemTime()
},
getSystemTime(){
// console.log('获取时间');
plugin.getSystemTime()
},
updateUserList(){
// console.log('更新用户列表');
let userInfo = { identity:0,id:7,sex:1,age:21,height:176,weight:77.5,impedance:450}
let userInfo1 = { identity:1,id:2,sex:0,age:29,height:162,weight:66.1,impedance:420 }
let userInfo2 = { identity:0,id:1,sex:1,age:22,height:168,weight:71.1,impedance:430 }
let userList = []
userList.push(userInfo)
userList.push(userInfo1)
userList.push(userInfo2)
plugin.updateUserList(userList)
},
updateUserInformation(){
//console.log('更新用户个人信息');
let userInfo ={ identity:0,id:7,sex:1,age:21,height:176,weight:77.5,impedance:450}
plugin.updateUserInformation(userInfo)
},
requestHis(){
plugin.requestHis()
}
});

+ 3
- 0
BM16His_demo/pages/index/index.json Ver arquivo

@@ -0,0 +1,3 @@
{
"usingComponents": {}
}

+ 60
- 0
BM16His_demo/pages/index/index.wxml Ver arquivo

@@ -0,0 +1,60 @@
<wxs module="utils">
module.exports.max = function(n1, n2) {
return Math.max(n1, n2)
}
module.exports.len = function(arr) {
arr = arr || []
return arr.length
}
module.exports.fill0 = function(num) {
if (!num) {
return '00'
}
return ('00' + num).slice(-2)
}
</wxs>

<block wx:if="{{!connected}}">
<button bindtap="openBluetoothAdapter">开始扫描</button>
<button bindtap="stopBluetoothDevicesDiscovery">停止扫描</button>
<button bindtap="closeBluetoothAdapter">结束流程</button>
<button bindtap="clearDevices">清空列表</button>
<view class="devices_summary">已发现 {{devices.length}} 个外围设备:</view>
<view class="device_list">
<view wx:for="{{devices}}" wx:key="index"
class="device_item">
<view style="font-size: 16px; color: #333;">{{item.name || item.localName}}</view>
<view style="font-size: 10px">信号强度: {{item.RSSI}}dBm ({{utils.max(0, item.RSSI + 100)}}%)</view>
<view style="font-size: 10px">mac地址: {{item.deviceId}}</view>
<view
class="device_item_btn"
hover-class="btn_hover"
data-device-id="{{item.deviceId}}"
data-name="{{item.name || item.localName}}"
data-index="{{index}}"
bindtap="createBLEConnection"
>连接</view>
</view>
</view>
</block>
<view class="wrap" wx:else>
<view class="stopConnect">
<view>{{mac}}</view>
<view class="btn_connect" hover-class="btn_hover" bindtap="closeBLEConnection">断开连接</view>
</view>

<view class="btn_wrap">
<button bindtap="setSystemTime">设置系统时间</button>
<button bindtap="getSystemTime">获取系统时间</button>
<button bindtap="updateUserList">更新用户列表</button>
<button bindtap="updateUserInformation">更新个人用户信息</button>
<button bindtap="requestHis">请求同步历史记录</button>
<button bindtap="quit">退回蓝牙连接页面</button>
</view>
<!-- <view class="weight_wrap"> -->
<scroll-view class="log" scroll-y style='height:{{2*height}}rpx' scroll-into-view="{{jumpPoint}}">
<view class="logList" wx:for="{{information}}">
{{item}}
</view>
</scroll-view>
</view>

+ 164
- 0
BM16His_demo/pages/index/index.wxss Ver arquivo

@@ -0,0 +1,164 @@
page {
color: #333;
}
.devices_summary {
margin-top: 30px;
padding: 10px;
font-size: 16px;
}
.device_list {
min-height: 300px;
margin: 0 5px;
border: 1px solid #EEE;
width: auto;
}
.device_item {
border-bottom: 1px solid #EEE;
padding: 10px;
color: #666;
position: relative;
}
.device_item_btn{
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
width: 60px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #ddd;
border-radius: 3px;
}
.connected_info {
position: fixed;
bottom: 0;
width: 100%;
background-color: #F0F0F0;
padding: 10px;
padding-bottom: 20px;
margin-bottom: env(safe-area-inset-bottom);
font-size: 14px;
min-height: 100px;
box-shadow: 0px 0px 3px 0px;
}
.connected_info .operation {
position: absolute;
display: inline-block;
right: 30px;
}
.writeInputViewBg{
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
background-color: rgba(0,0,0,0.5);
}
.writeInputView{
position: fixed;
top: 30%;
left: 50%;
z-index: 1001;
background-color: #fff;
width: 80vw;
height: 300rpx;
display: flex;
flex-direction: column;
align-items: center;
transform: translateX(-50%);
}
.writeInput{
margin-top: 60rpx;
width: 90%;
height: 60rpx;
border: 1rpx solid #ccc;
}
.writeInput input{
width: 100%;
height: 100%;
box-sizing: border-box;
}
.hint{
padding-top: 10rpx;
font-size: 24rpx;
color: #999;
}
.btns{
display: flex;
align-items: center;
justify-content: space-between;
width: 60%;
margin-top: 50rpx;
}

.stopConnect{
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px;
}
.btn_connect{
width: 20%;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
background: #f8f8f8;
border: 1px solid #ddd;
border-radius: 5px;
}
.log{
width: 100%;
}
.logList{
border-bottom: 1px solid #f8f8f8;
}
.weight_wrap,
.timer_wrap{
padding: 10px;
border-top: 1px solid #ddd;
}

.timer_value,
.weight_value{
display: flex;
align-items: center;
justify-content: center;
}

.value_item{
margin: 0 5px;
padding: 4px 6px;
border: 1px solid #eee;
min-width: 60px;
text-align: center;
}
.btn_wrap{
padding-top: 10px;
}
.btn_unitList_title{
padding: 10px;
}
.btn_unitList{
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-around;
}
.btn_unit{
width: 20%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background: #f8f8f8;
border: 1px solid #ddd;
border-radius: 5px;
margin: 10px 0;
}
.btn_hover{
background: rgba(0,0,0,0.1);
}

+ 54
- 0
BM16His_demo/project.config.json Ver arquivo

@@ -0,0 +1,54 @@
{
"description": "项目配置文件",
"packOptions": {
"ignore": [],
"include": []
},
"setting": {
"urlCheck": true,
"es6": true,
"enhance": true,
"postcss": true,
"preloadBackgroundData": false,
"minified": true,
"newFeature": false,
"coverView": true,
"nodeModules": false,
"autoAudits": false,
"showShadowRootInWxmlPanel": true,
"scopeDataCheck": false,
"uglifyFileName": false,
"checkInvalidKey": true,
"checkSiteMap": true,
"uploadWithSourceMap": true,
"compileHotReLoad": false,
"useMultiFrameRuntime": true,
"useApiHook": true,
"useApiHostProcess": false,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"enableEngineNative": false,
"bundle": false,
"useIsolateContext": true,
"useCompilerModule": true,
"userConfirmedUseCompilerModuleSwitch": false,
"userConfirmedBundleSwitch": false,
"packNpmManually": false,
"packNpmRelationList": [],
"minifyWXSS": true
},
"compileType": "miniprogram",
"libVersion": "2.14.1",
"appid": "wx17e93aad47cdae1a",
"projectname": "ailink_demo",
"simulatorType": "wechat",
"simulatorPluginLibVersion": {},
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 4
}
}

+ 7
- 0
BM16His_demo/project.private.config.json Ver arquivo

@@ -0,0 +1,7 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "ailink_demo",
"setting": {
"compileHotReLoad": true
}
}

+ 7
- 0
BM16His_demo/sitemap.json Ver arquivo

@@ -0,0 +1,7 @@
{
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
"rules": [{
"action": "allow",
"page": "*"
}]
}

+ 593
- 0
BM16His_demo/utils/standard.js Ver arquivo

@@ -0,0 +1,593 @@
////////////////////////////// 返回参数判断 //////////////////////
//height传入单位为cm weight单位为kg sex=1为男性 else 为女性
module.exports = {
getWeightDisplay,
getBMIDisplay,
getFatRateDisplay,
getMuscleDisplay,
getMoistureDisplay,
getBonemassDisplay,
getBMRDisplay,
getVisceralfatDisplay,
getVisceralfatDisplay,
getSubcutaneousFatDisplay,
getProteinRateDisplay,
getPhysicalAgeDisplay,
getFatWeightDisplay,
getMuscleMassDisplay,
getProteinDisplay,
getFatLevel,
getBodyLevel,
getWeightScore,
};
// 体重 标准判断
function getWeightDisplay(height, weight) {
var i = Math.pow(height / 100, 2);
var a1 = 18.5 * i;
var a2 = 25 * i;
var a3 = 30 * i;
var string1 = a1.toFixed(1);
var string2 = a2.toFixed(1);
var string3 = a3.toFixed(1);
if (weight == "-.-") {
return {
standard: "-.-",
text: "",
};
} else if (weight < string1) {
return {
standard: "偏瘦",
text: `基于目前的身体状况,您的标准体重范围为${string1}~${string2}kg,保持理想体重有助于身体各机能持续健康运转,维持最佳代谢状态。体重偏瘦或许已经危害到你的健康,建议您保持良好睡眠,适当食用含高卡路里食物,保持良好的饮食习惯。`,
};
} else if (weight >= string1 && weight < string2) {
return {
standard: "标准",
text: `当前体重为${weight}kg,处于标准体重范围,状态良好,保持良好的饮食习惯和适当的运动,追求完美身材吧。`,
};
} else if (weight >= string2 && weight < string3) {
return {
standard: "偏胖",
text: `当前体重为${weight}kg,体重处于不健康区间!请减少高油高热量食物摄入,加强身体锻炼,努力恢复健康体重和好身材。`,
};
} else if (weight >= string3) {
return {
standard: "肥胖",
text: `当前体重为${weight}kg,远高于标准体重,过度肥胖不仅形体臃肿,更是各种慢性疾病的主要导火线,请减少高脂肪、高热量食物的摄入,制定健身计划,加强锻炼,努力恢复健康体重和好身材。`,
};
}
return {};
}
//BMI标准
function getBMIDisplay(BMI) {
var standard = "";
if (BMI < 18.5 && BMI > 0) {
standard = "偏瘦";
} else if (18.5 <= BMI && BMI < 25) {
standard = "标准";
} else if (25 <= BMI && BMI < 30) {
standard = "偏胖";
} else if (BMI >= 30) {
standard = "肥胖 ";
}
return {
standard: standard,
text: `BMI(即身体质量指数,简称体质指数,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。根据您目前的身高体重远高于标准值,我们建议您采用科学的减肥方式,适当减轻体重,避免因肥胖导致的健康问题。`,
};
}
//体脂率标准
function getFatRateDisplay(fatRate, sex, age) {
if (age >= 30) {
if (sex == 1) {
if (fatRate < 11) {
return {
standard: "偏低",
text: `您的体脂率为${fatRate}%,体脂肪水平偏低,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,建议均衡搭配饮食,适当增加卡路里摄入量。`,
};
} else if (fatRate >= 11 && fatRate < 22) {
return {
standard: "标准",
text: `您的体脂率为${fatRate}%,体脂肪水平标准。保持健康规律作息,注意保持摄入足够水分,增加代谢,有利于保持健康标准体脂率。 `,
};
} else if (fatRate >= 22 && fatRate < 27) {
return {
standard: "偏高",
text: `您的体脂率为${fatRate}%,体脂肪水平偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
} else if (fatRate >= 27) {
return {
standard: "高",
text: `您的体脂率为${fatRate}%,体脂肪水平严重偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
}
} else {
if (fatRate < 21) {
return {
standard: "偏低",
text: `您的体脂率为${fatRate}%,体脂肪水平偏低,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,建议均衡搭配饮食,适当增加卡路里摄入量。`,
};
} else if (fatRate >= 21 && fatRate < 32) {
return {
standard: "标准",
text: `您的体脂率为${fatRate}%,体脂肪水平标准。保持健康规律作息,注意保持摄入足够水分,增加代谢,有利于保持健康标准体脂率。 `,
};
} else if (fatRate >= 32 && fatRate < 39) {
return {
standard: "偏高",
text: `您的体脂率为${fatRate}%,体脂肪水平偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
} else if (fatRate >= 39) {
return {
standard: "高",
text: `您的体脂率为${fatRate}%,体脂肪水平严重偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
}
}
} else if (0 < age && age < 30) {
if (sex == 1) {
if (fatRate < 10) {
return {
standard: "偏低",
text: `您的体脂率为${fatRate}%,体脂肪水平偏低,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,建议均衡搭配饮食,适当增加卡路里摄入量。`,
};
} else if (fatRate >= 10 && fatRate < 21) {
return {
standard: "标准",
text: `您的体脂率为${fatRate}%,体脂肪水平标准。保持健康规律作息,注意保持摄入足够水分,增加代谢,有利于保持健康标准体脂率。 `,
};
} else if (fatRate >= 21 && fatRate < 26) {
return {
standard: "偏高",
text: `您的体脂率为${fatRate}%,体脂肪水平偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
} else if (fatRate >= 26) {
return {
standard: "高",
text: `您的体脂率为${fatRate}%,体脂肪水平严重偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
}
} else {
if (fatRate < 20) {
return {
standard: "偏低",
text: `您的体脂率为${fatRate}%,体脂肪水平偏低,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,建议均衡搭配饮食,适当增加卡路里摄入量。`,
};
} else if (fatRate >= 20 && fatRate < 31) {
return {
standard: "标准",
text: `您的体脂率为${fatRate}%,体脂肪水平标准。保持健康规律作息,注意保持摄入足够水分,增加代谢,有利于保持健康标准体脂率。 `,
};
} else if (fatRate >= 31 && fatRate < 38) {
return {
standard: "偏高",
text: `您的体脂率为${fatRate}%,体脂肪水平偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
} else if (fatRate >= 38) {
return {
standard: "高",
text: `您的体脂率为${fatRate}%,体脂肪水平严重偏高,处于危险区间。脂肪是维持人体新陈谢和运动的能量物质,过多/过少都不利于健康,请注意控制高油高脂食物的摄入,并且多做运动。`,
};
}
}
}
}
//肌肉率标准
function getMuscleDisplay(muscle, sex, muscleWeight) {
if (sex == 1) {
if (muscle < 40) {
return {
standard: "不足",
text: `你当前的肌肉率为${muscle}%,肌肉含量为${muscleWeight}kg,体内的肌肉含量不足。增加肌肉量能让您更快的消耗热量,以最健康的方式减掉多余脂肪。合理的饮食,适量的运动,能够增加肌肉含量。`,
};
} else if (40 <= muscle && muscle < 60) {
return {
standard: "标准",
text: `你当前的肌肉率为${muscle}%,肌肉含量为${muscleWeight}kg,体内的肌肉含量标准,身体匀称健康,请您保持锻炼。`,
};
} else if (60 <= muscle) {
return {
standard: "优",
text: `你当前的肌肉率为${muscle}%,肌肉含量为${muscleWeight}kg,体内肌肉结量比较充足,请继续保持适当的运动量和合理的饮食。`,
};
}
} else {
if (muscle < 30) {
return {
standard: "不足",
text: `你当前的肌肉率为${muscle}%,肌肉含量为${muscleWeight}kg,体内的肌肉含量不足。增加肌肉量能让您更快的消耗热量,以最健康的方式减掉多余脂肪。合理的饮食,适量的运动,能够增加肌肉含量。`,
};
} else if (30 <= muscle && muscle < 50) {
return {
standard: "标准",
text: `你当前的肌肉率为${muscle}%,肌肉含量为${muscleWeight}kg,体内的肌肉含量标准,身体匀称健康,请您保持锻炼。`,
};
} else if (50 <= muscle) {
return {
standard: "优",
text: `你当前的肌肉率为${muscle}%,肌肉含量为${muscleWeight}kg,体内肌肉结量比较充足,请继续保持适当的运动量和合理的饮食。`,
};
}
}
}
//水分标准
function getMoistureDisplay(moisture, sex) {
if (sex == 1) {
if (moisture < 55) {
return {
standard: "不足",
text: `您当前的身体水分含量为${moisture}%,水分处于偏低水平。身体里充足的水分能帮助您更好的消化食物和吸收养分,并促进代谢,带走身体毒素。建议您保持规律的饮食,每天八杯水,这样就可以维持正常的身体水分平衡。`,
};
} else if (55 <= moisture && moisture < 65) {
return {
standard: "标准",
text: `您当前的身体水分含量为${moisture}%,水分处于标准区间,请继续保持健康的饮食习惯。`,
};
} else if (50 <= moisture) {
return {
standard: "优",
text: `您当前的身体水分含量为${moisture}%,水分处于优良状态。适量饮水,适当运动,继续保持健康的饮食习惯,有助于保持良好的身体状态哦。`,
};
}
} else {
if (moisture < 45) {
return {
standard: "不足",
text: `您当前的身体水分含量为${moisture}%,水分处于偏低水平。身体里充足的水分能帮助您更好的消化食物和吸收养分,并促进代谢,带走身体毒素。建议您保持规律的饮食,每天八杯水,这样就可以维持正常的身体水分平衡。`,
};
} else if (45 <= moisture && moisture < 60) {
return {
standard: "标准",
text: `您当前的身体水分含量为${moisture}%,水分处于标准区间,请继续保持健康的饮食习惯。`,
};
} else if (60 <= moisture) {
return {
standard: "优",
text: `您当前的身体水分含量为${moisture}%,水分处于优良状态。适量饮水,适当运动,继续保持健康的饮食习惯,有助于保持良好的身体状态哦。`,
};
}
}
}
//骨重标准
function getBonemassDisplay(bonemass, sex, weight) {
if (sex == 1) {
if (weight < 60) {
if (bonemass < 2.4) {
return {
standard: "不足",
text: `您的骨量水平偏低,建议补充含钙丰富的食品,均衡饮食,进行适量运动,有助于钙质的吸收。`,
};
} else if (2.4 <= bonemass && bonemass <= 2.6) {
return {
standard: "标准",
text: `您的骨量水平标准,骨量在短期内不会出现明显变化,您只要保证健康的饮食和适当的锻炼,就可以维持稳定的骨量水平。`,
};
} else if (2.6 < bonemass) {
return {
standard: "优",
text: `您的骨量水平高于标准水平,这说明您的生活习惯比较健康,营养摄入均衡。继续保持良好的生活习惯,有助于保持良好的骨量水平。`,
};
}
} else if (60 <= weight && weight < 75) {
if (bonemass < 2.8) {
return {
standard: "不足",
text: `您的骨量水平偏低,建议补充含钙丰富的食品,均衡饮食,进行适量运动,有助于钙质的吸收。`,
};
} else if (2.8 <= bonemass && bonemass <= 3.0) {
return {
standard: "标准",
text: `您的骨量水平标准,骨量在短期内不会出现明显变化,您只要保证健康的饮食和适当的锻炼,就可以维持稳定的骨量水平。`,
};
} else if (3.0 < bonemass) {
return {
standard: "优",
text: `您的骨量水平高于标准水平,这说明您的生活习惯比较健康,营养摄入均衡。继续保持良好的生活习惯,有助于保持良好的骨量水平。`,
};
}
} else if (75 <= weight) {
if (bonemass < 3.1) {
return {
standard: "不足",
text: `您的骨量水平偏低,建议补充含钙丰富的食品,均衡饮食,进行适量运动,有助于钙质的吸收。`,
};
} else if (3.1 <= bonemass && bonemass <= 3.3) {
return {
standard: "标准",
text: `您的骨量水平标准,骨量在短期内不会出现明显变化,您只要保证健康的饮食和适当的锻炼,就可以维持稳定的骨量水平。`,
};
} else if (3.3 < bonemass) {
return {
standard: "优",
text: `您的骨量水平高于标准水平,这说明您的生活习惯比较健康,营养摄入均衡。继续保持良好的生活习惯,有助于保持良好的骨量水平。`,
};
}
}
} else {
if (weight < 45) {
if (bonemass < 1.7) {
return {
standard: "不足",
text: `您的骨量水平偏低,建议补充含钙丰富的食品,均衡饮食,进行适量运动,有助于钙质的吸收。`,
};
} else if (1.7 <= bonemass && bonemass <= 1.9) {
return {
standard: "标准",
text: `您的骨量水平标准,骨量在短期内不会出现明显变化,您只要保证健康的饮食和适当的锻炼,就可以维持稳定的骨量水平。`,
};
} else if (1.9 < bonemass) {
return {
standard: "优",
text: `您的骨量水平高于标准水平,这说明您的生活习惯比较健康,营养摄入均衡。继续保持良好的生活习惯,有助于保持良好的骨量水平。`,
};
}
} else if (45 <= weight && weight < 60) {
if (bonemass < 2.1) {
return {
standard: "不足",
text: `您的骨量水平偏低,建议补充含钙丰富的食品,均衡饮食,进行适量运动,有助于钙质的吸收。`,
};
} else if (2.1 <= bonemass && bonemass <= 2.3) {
return {
standard: "标准",
text: `您的骨量水平标准,骨量在短期内不会出现明显变化,您只要保证健康的饮食和适当的锻炼,就可以维持稳定的骨量水平。`,
};
} else if (2.3 < bonemass) {
return {
standard: "优",
text: `您的骨量水平高于标准水平,这说明您的生活习惯比较健康,营养摄入均衡。继续保持良好的生活习惯,有助于保持良好的骨量水平。`,
};
}
} else if (60 <= weight) {
if (bonemass < 2.4) {
return {
standard: "不足",
text: `您的骨量水平偏低,建议补充含钙丰富的食品,均衡饮食,进行适量运动,有助于钙质的吸收。`,
};
} else if (2.4 <= bonemass && bonemass <= 2.6) {
return {
standard: "标准",
text: `您的骨量水平标准,骨量在短期内不会出现明显变化,您只要保证健康的饮食和适当的锻炼,就可以维持稳定的骨量水平。`,
};
} else if (2.6 < bonemass) {
return {
standard: "优",
text: `您的骨量水平高于标准水平,这说明您的生活习惯比较健康,营养摄入均衡。继续保持良好的生活习惯,有助于保持良好的骨量水平。`,
};
}
}
}
}
//基础代谢率标准
function getBMRDisplay(BMR, age, weight, sex) {
var standard = 0;
if (sex == 1) {
if (0 < age && age < 3) {
standard = 60.9 * weight - 54;
} else if (3 <= age && age < 10) {
standard = 22.7 * weight + 495;
} else if (10 <= age && age < 18) {
standard = 17.5 * weight + 651;
} else if (18 <= age && age < 30) {
standard = 15.3 * weight + 679;
} else if (30 <= age) {
standard = 11.6 * weight + 879;
}
} else {
if (0 < age && age < 3) {
standard = 61.0 * weight - 51;
} else if (3 <= age && age < 10) {
standard = 22.5 * weight + 499;
} else if (10 <= age && age < 18) {
standard = 12.2 * weight + 746;
} else if (18 <= age && age < 30) {
standard = 14.7 * weight + 496;
} else if (30 <= age) {
standard = 8.7 * weight + 820;
}
}
if (BMR < standard) {
return {
standard: "偏低",
text: `基于您的基础代谢水平,推荐您每日的摄入热量为${standard}kcal.您的基础代谢率为${BMR}kcal,低于标准区间。均衡合理的热量摄入,适量运动能帮助您健康减脂,达到理想身材。 `,
};
} else {
return {
standard: "优",
text: `您的基础代谢率为${BMR}kcal,目前已达标。每天进行一些低强度的运动,合理的热量摄入有助您增加肌肉。`,
};
}
}
//内脏脂肪指数标准
function getVisceralfatDisplay(visceralfat) {
if (visceralfat < 9) {
return {
standard: "标准",
text: `内脏脂肪指数反映人体内内脏脂肪堆积的程度。保持标准的内脏脂肪指数,可以大幅降低心脏病、高血压、高血脂和2型糖尿病的发病风险。您的内脏脂肪水平正常,请继续保持健康饮食和适当运动。`,
};
} else if (9 <= visceralfat && visceralfat < 14) {
return {
standard: "警惕",
text: `您的内脏脂肪处于偏高范围内,内脏脂肪指数偏高,将增加心脏病、高血压、高血脂和2型糖尿病的发病风险。健康您控制饮食,减少糖分高、脂肪高、油炸等食物摄入,多吃谷类、蔬菜、水果等富含维生素、蛋白的蔬菜水果,同时多做运动。`,
};
} else if (14 <= visceralfat) {
return {
standard: "危险",
text: `您的内脏脂肪水平严重偏高,内脏脂肪指数偏高,将增加心脏病、高血压、高血脂和2型糖尿病的发病风险。健康您控制饮食,减少糖分高、脂肪高、油炸等食物摄入,多吃谷类、蔬菜、水果等富含维生素、蛋白的蔬菜水果,同时多做运动。`,
};
}
}
//皮下脂肪标准
function getSubcutaneousFatDisplay(proteinRate, sex) {
if (sex == 1) {
if (proteinRate < 7) {
return {
standard: "不足",
text: `皮下脂脂肪就是贮存于皮下的脂肪组织,人体的脂肪大约有2/3贮存在皮下组织。皮下脂肪主要的作用有 绝热和贮存 。皮下脂肪是人体储存‘余粮’的主要场所。您目前处于正常水平以下,不足的皮下脂肪可能会出现身体偏瘦,皮肤缺乏光泽或有全身痛,没力气等现象,建议你平时注意饮食加强营养,避免劳累情绪激动,适当运动锻炼,避免受风寒着凉。`,
};
} else if (7 <= proteinRate && proteinRate < 15) {
return {
standard: "标准",
text: `皮下脂脂肪就是贮存于皮下的脂肪组织,人体的脂肪大约有2/3贮存在皮下组织。皮下脂肪主要的作用有 绝热和贮存 您的皮下脂肪处于正常水平。坚持合理的饮食,良好的生活习惯,适量运动,就可以使身材和健康状态都保持在良好的范围内。`,
};
} else if (15 <= proteinRate) {
return {
standard: "偏高",
text: `您的皮下脂肪高于正常水平。高糖分高脂肪饮食、久坐少动、遗传因素等都是引起皮下脂肪偏高的原因。建议注意均衡饮食,保持良好的生活习惯,控制热量摄入,进行适当运动。`,
};
}
} else {
if (proteinRate < 11) {
return {
standard: "不足",
text: `皮下脂脂肪就是贮存于皮下的脂肪组织,人体的脂肪大约有2/3贮存在皮下组织。皮下脂肪主要的作用有 绝热和贮存 。皮下脂肪是人体储存‘余粮’的主要场所。您目前处于正常水平以下,不足的皮下脂肪可能会出现身体偏瘦,皮肤缺乏光泽或有全身痛,没力气等现象,建议你平时注意饮食加强营养,避免劳累情绪激动,适当运动锻炼,避免受风寒着凉。`,
};
} else if (11 <= proteinRate && proteinRate < 17) {
return {
standard: "标准",
text: `皮下脂脂肪就是贮存于皮下的脂肪组织,人体的脂肪大约有2/3贮存在皮下组织。皮下脂肪主要的作用有 绝热和贮存 您的皮下脂肪处于正常水平。坚持合理的饮食,良好的生活习惯,适量运动,就可以使身材和健康状态都保持在良好的范围内。`,
};
} else if (17 <= proteinRate) {
return {
standard: "偏高",
text: `您的皮下脂肪高于正常水平。高糖分高脂肪饮食、久坐少动、遗传因素等都是引起皮下脂肪偏高的原因。建议注意均衡饮食,保持良好的生活习惯,控制热量摄入,进行适当运动。`,
};
}
}
}
//蛋白率
function getProteinRateDisplay(proteinRate, sex) {
if (sex == 1) {
if (proteinRate < 16) {
return {
standard: "不足",
text: `您的蛋白水平偏低。缺乏蛋白质会引起免疫力下降、肌肉无力和贫血。建议你保持健康饮食,不过分节食,补充足够的营养。`,
};
} else if (16 <= proteinRate && proteinRate <= 18) {
return {
standard: "标准",
text: `您的蛋白水平比例充足,请继续保持,同时也要防止过度摄入,蛋白质过度摄入也会在体内转化成脂肪,造成脂肪堆积。`,
};
} else if (18 < proteinRate) {
return {
standard: "优",
text: `您的蛋白水平优于标准水平,继续保持良好的作息、均衡的饮食,更有助于蛋白质的吸收。`,
};
}
} else {
if (proteinRate < 14) {
return {
standard: "不足",
text: `您的蛋白水平偏低。缺乏蛋白质会引起免疫力下降、肌肉无力和贫血。建议你保持健康饮食,不过分节食,补充足够的营养。`,
};
} else if (14 <= proteinRate && proteinRate <= 16) {
return {
standard: "标准",
text: `您的蛋白水平比例充足,请继续保持,同时也要防止过度摄入,蛋白质过度摄入也会在体内转化成脂肪,造成脂肪堆积。`,
};
} else if (16 < proteinRate) {
return {
standard: "优",
text: `您的蛋白水平优于标准水平,继续保持良好的作息、均衡的饮食,更有助于蛋白质的吸收。`,
};
}
}
}
//身体年龄
function getPhysicalAgeDisplay(physicalAge, age) {
if (physicalAge > age) {
return {
standard: "偏大",
text: `身体年龄是以基础代谢为基础,综合体重、身高、脂肪、肌肉等数值,换算所得出的数值。所以身体年龄是一个高于或低于实际年龄的综合判断标准。仅供参考。`,
};
} else if (physicalAge == age) {
return {
standard: "标准",
text: `身体年龄是以基础代谢为基础,综合体重、身高、脂肪、肌肉等数值,换算所得出的数值。所以身体年龄是一个高于或低于实际年龄的综合判断标准。仅供参考。`,
};
} else if (physicalAge < age) {
return {
standard: "优",
text: `身体年龄是以基础代谢为基础,综合体重、身高、脂肪、肌肉等数值,换算所得出的数值。所以身体年龄是一个高于或低于实际年龄的综合判断标准。仅供参考。`,
};
}
}
//脂肪量标准 同 体脂率标准
function getFatWeightDisplay(fatRate, sex, age) {
getFatRateDisplay(fatRate, sex, age)
}
//肌肉量标准 同 肌肉率标准
function getMuscleMassDisplay(muscle, sex, muscleWeight) {
getMuscleDisplay(muscle, sex, muscleWeight)
}
//蛋白量标准 同 蛋白率标准
function getProteinDisplay(proteinRate, sex) {
getProteinRateDisplay(proteinRate, sex)
}

//肥胖等级 stWeight=标准体重
function getFatLevel(weight, stWeight, height) {
var Level = (weight - stWeight) / stWeight;
if (Level < -0.2) {
return {
standard: "体重不足",
text: `肥胖的程度,表现实际体重与理想体重的差距。肥胖等级是判定肥胖症的一个指标。基于目前的身体状况,您的标准体重范围为${
18.5 * height * height
}~${
25 * height * height
}kg,保持理想体重有助于身体各机能持续健康运转,维持最佳代谢状态。体重偏瘦或许已经危害到你的健康,建议您保持良好睡眠,适当食用含高卡路里食物,保持良好的饮食习惯。`,
};
} else if (Level >= -0.2 && Level < -0.1) {
return {
standard: "偏瘦",
text: `肥胖的程度,表现实际体重与理想体重的差距。肥胖等级是判定肥胖症的一个指标。基于目前的身体状况,您的标准体重范围为${
18.5 * height * height
}~${
25 * height * height
}kg,保持理想体重有助于身体各机能持续健康运转,维持最佳代谢状态。体重偏瘦或许已经危害到你的健康,建议您保持良好睡眠,适当食用含高卡路里食物,保持良好的饮食习惯。`,
};
} else if (Level >= -0.1 && Level < 0.1) {
return {
standard: "标准",
text: `肥胖的程度,表现实际体重与理想体重的差距。肥胖等级是判定肥胖症的一个指标。当前体重处于标准体重范围,状态良好,请继续保持良好的饮食习惯和适当的运动,保持完美身材吧。`,
};
} else if (Level > 0.1 && Level <= 0.2) {
return {
standard: "偏重",
text: `肥胖的程度,表现实际体重与理想体重的差距。肥胖等级是判定肥胖症的一个指标。当前体重为${weight}kg,高于标准体重,过度肥胖不仅形体臃肿,更是各种慢性疾病的主要导火线,请减少高脂肪、高热量食物的摄入,制定健身计划,加强锻炼,努力恢复健康体重和好身材。`,
};
} else if (Level > 0.2) {
return {
standard: "超重",
text: `肥胖的程度,表现实际体重与理想体重的差距。肥胖等级是判定肥胖症的一个指标。当前体重为${weight}kg,高于标准体重,过度肥胖不仅形体臃肿,更是各种慢性疾病的主要导火线,请减少高脂肪、高热量食物的摄入,制定健身计划,加强锻炼,努力恢复健康体重和好身材。`,
};
}
}
//体型
function getBodyLevel(BFRResult, ROMResult) {
if ((BFRResult == 2 || BFRResult == 3) && ROMResult == 0) {
return "隐形肥胖";
} else if ((BFRResult == 2 || BFRResult == 3) && ROMResult == 1) {
return "偏胖";
} else if ((BFRResult == 2 || BFRResult == 3) && ROMResult == 2) {
return "结实型偏胖";
} else if (BFRResult == 1 && ROMResult == 0) {
return "缺乏肌肉型";
} else if (BFRResult == 1 && ROMResult == 1) {
return "标准型";
} else if (BFRResult == 1 && ROMResult == 2) {
return "标准肌肉型";
} else if (BFRResult == 0 && ROMResult == 0) {
return "偏瘦";
} else if (BFRResult == 0 && ROMResult == 1) {
return "偏瘦肌肉型";
} else if (BFRResult == 0 && ROMResult == 2) {
return "健美肌肉型";
}
}
//身体评分
function getWeightScore(bmi) {
if (bmi < 21.6) {
return bmi / 21.6 * 100;
} else {
return 21.6 / bmi * 100;
}
}

+ 5
- 0
BM16His_demo/utils/util.js Ver arquivo

@@ -0,0 +1,5 @@
const standard = require("./standard")

module.exports = {
...standard,
}

Carregando…
Cancelar
Salvar