UrineOutputData:[
['2021-12-01 08:00:01', 172],
['2021-12-02 11:00:00',null],
['2021-12-03 12:00:00', 154],
['2021-12-04 14:00:00', 88],
['2021-12-05 19:00:00','' ],
['2021-12-06 22:59:59', 127],
['2021-12-07 21:00:00', 110]
],
OutputData: [
['2021-12-01 05:00:01', 36.2],
['2021-12-02 06:00:00', 36.6],
['2021-12-03 12:00:00', 37.4],
['2021-12-04 16:00:00', 37.8],
['2021-12-05 18:00:00', 37.9],
['2021-12-06 23:59:59', 38.2],
['2021-12-07 09:00:00', 39.1]
] ,
InputData: [
['2021-12-01 08:00:01', 172],
['2021-12-02 11:00:00',],
['2021-12-03 12:00:00', 154],
['2021-12-04 14:00:00', undefined],
['2021-12-05 19:00:00', 137],
['2021-12-06 22:59:59', 127],
['2021-12-07 21:00:00', 110]
],
shitData: [
['2021-12-01 05:00:01', 36.2],
['2021-12-02 06:00:00', 36.6],
['2021-12-03 12:00:00', 37.4],
['2021-12-04 16:00:00', 37.8],
['2021-12-05 18:00:00', 37.9],
['2021-12-06 23:59:59', 38.2],
['2021-12-07 09:00:00', 39.1]
] ,
pressureData: [
{ diastolicPressure: 82, systolicPressure: 120, time: '2021-12-01 04:00:01' },
{ diastolicPressure: 42, systolicPressure: 100, time: '2021-12-02 00:00:00' },
{ diastolicPressure: 52, systolicPressure: 110, time: '2021-12-03 12:00:00' },
{ diastolicPressure: 92, systolicPressure: 111, time: '2021-12-04 16:00:00' },
{ diastolicPressure: 52, systolicPressure: 112, time: '2021-12-05 20:00:00' },
{ diastolicPressure: 62, systolicPressure: 113, time: '2021-12-06 23:59:59' },
{ diastolicPressure: 72, systolicPressure: 114, time: '2021-12-07 24:00:00' }
] ,
pulseData: [
['2021-12-01 08:00:01', 172],
['2021-12-02 11:00:00',166],
['2021-12-03 12:00:00', 154],
['2021-12-04 14:00:00', 88],
['2021-12-05 19:00:00', 137],
['2021-12-06 22:59:59', 127],
['2021-12-07 21:00:00', 110]
] ,
temperatureData: [
['2021-12-01 00:00:01', 36.2],
['2021-12-01 03:00:01', 37.7],
['2021-12-01 03:10:01', 37.7],
['2021-12-01 04:00:01', 37.7],
['2021-12-01 05:00:01', 37.7],
['2021-12-01 06:00:01', 37.7],
['2021-12-01 07:00:01', 37.7],
['2021-12-01 08:00:01', 37.7],
['2021-12-01 09:00:01', 37.7],
['2021-12-01 22:00:01', 36.6],
['2021-12-01 08:00:01', null],
['2021-12-02 06:00:00', 36.6],
['2021-12-03 12:00:00', undefined],
['2021-12-04 16:00:00', 37.8],
['2021-12-05 18:00:00', 37.9],
['2021-12-06 23:59:59', ''],
['2021-12-07 09:00:00', 39.1]
],
breathData: [
['2021-12-01 04:00:01', 82],
['2021-12-02 00:00:00', 78],
['2021-12-03 12:00:00', 84],
['2021-12-04 16:00:00', 66],
['2021-12-05 20:00:00', 77],
['2021-12-06 23:59:59', 67],
['2021-12-07 23:00:00', 50]
],
mouthTemperature: [
'2021-12-01',
'2021-12-02',
'2021-12-03',
'2021-12-04',
'2021-12-05',
'2021-12-06',
'2021-12-07',
],
//三条折线颜色
pigment: {
breathColor: 'black',
temperatureColor: 'blue',
pulseColor: 'red',
},
//天数
dayTemperature: [
'第一天',
'第二天',
'第三天',
'第四天',
'第五天',
'第六天',
'第七天',
]
};
var opts = $.extend({}, defaults, options);
opts.container = this;
/*
* 网格线组件使用时需要计算宽度
* 建议整理好数据逻辑后直接传入
* */
// 前端配置不可删除
var configFile = [
"血压(mmHg)",
"大便/次",
"入量 ml",
"出量 ml",
"尿量 ml",
]
// 中间展示维度
var lefts = 20, // 左边距离
tops = 100, // 上边距离
rowSpacing = 15, // 每小格宽度
tRowNum = 2, // 头部行数
mRowNum = 42;// 中部行数
// 左侧坐标轴第一行数
var YAxisDataTop = [
{
name: '脉 搏',
position: [lefts + rowSpacing - 5, tops + rowSpacing - 10],
},
{
name: '(次/分)',
position: [lefts + rowSpacing - 5, tops + rowSpacing + 6]
},
{
name: 180,
position: [lefts + rowSpacing - 2, tops + 2 * rowSpacing + 5],
},
{
name: '体 温',
position: [lefts + 4 * rowSpacing - 5, tops + rowSpacing - 10],
},
{
name: '(℃)',
position: [lefts + 4 * rowSpacing, tops + rowSpacing + 6]
},
{
name: 42,
position: [lefts + 4 * rowSpacing + 3, tops + 2 * rowSpacing + 5]
},
{
name: '呼 吸',
position: [lefts + 7 * rowSpacing - 2, tops + rowSpacing - 10],
},
{
name: '(次/分)',
position: [lefts + 7 * rowSpacing - 6, tops + rowSpacing + 6]
},
{
name: 90,
position: [lefts + 7 * rowSpacing + 4, tops + 2 * rowSpacing + 5]
}
];
// 三测单左侧轴数据
var YAxisData = [
[160, 41, 80],
[140, 40, 70],
[120, 39, 60],
[100, 38, 50],
[80, 37, 40],
[60, 36, 30],
[40, 35, 20]
];
var thermometer = {
opts: opts,
//初始化体温表
init: function () {
var _t = this;
opts.container.renderTpl($thermometer_tpl['thermometer/tpl/echartsTm'], {}, function () {
//初始化配置
_t.componentDidMount()
});
},
//初始化配置
componentDidMount: function () {
var self = this;
// lefts左边距离 top上边距离 rowSpacing每小格宽度 columnNum计算有多少列
var tableDatas = { 'left': lefts, 'top': tops, 'rowSpacing': rowSpacing, 'columnNum': (7 + 1) * 6 + 3 };
var whStyle = {
'height': tops + 50 + (mRowNum + configFile.length) * rowSpacing,
'width': lefts * 2 + ((7 + 1) * 6 + 3) * rowSpacing < 962 ? 800 : lefts * 2 + ((7 + 1) * 6 + 3) * rowSpacing
};
$('#sk-orign-thermometer').css(whStyle);
// 获取echarts 画板
self.renderECharts(tableDatas, whStyle);
},
/**
* 获取echarts 画板
* @param {*
* tableDatas:[{lefts:0,top:0,rowSpacing:0,columnNum:0}] 配置数据对象 lefts左边距离 top上边距离 rowSpacing每小格宽度 columnNum计算有多少列
* whStyle:{height:0,width:0}, 高度和宽度
* } options
* @returns
*/
renderECharts: function (tableDatas, whStyle) {
var self = this;
//整张图核心就是动态循环graphic里面的数据,[{type: 'line',...},{type: 'text',..},{type: 'circle',...}] line:折线,纵轴线,横轴线,text:文案,circle:圆点
// 整合全部图表数据
var tableData = self.getTableData(tableDatas);
var myChart = echarts.init(document.getElementById('sk-orign-thermometer'));
if (whStyle) {
myChart._zr.painter._height = whStyle.height;
myChart._zr.painter._width = whStyle.width;
}
myChart.clear();
myChart.setOption({
title: {
show: true,
text: '体 温 单',
textStyle: {
color: '#000',
fontWeight: 'bold',
fontSize: 22,
align: 'left'
},
left: 'center',
top: '20px',
},
toolbox: {
feature: {
saveAsImage: {}
},
right: 30,
top: 10,
},
tooltip: {
trigger: 'item',
formatter: ''
},
graphic: tableData
});
//兼容ie8
window.onresize = myChart.resize;
myChart.resize()
},
/**
* 绘制图表
* @param {*
* TSSParam:[{lefts:0,top:0,rowSpacing:0,columnNum:0}] 配置数据对象 left左边距离 tops上边距离 rowSpacing每小格宽度 columnNum计算有多少列
* } options
* @returns
*/
getTableData: function ($TSSParam) {
var list = [], // 图表数组
inspectionCycle = [2, 6, 10, 14, 18, 22], // 巡查间隔数组
columnNum = $TSSParam.columnNum,// 列数
bRowNum = configFile.length,// 尾部行数
tDataKeys = ['日 期', '住院天数']
//日期 天数
var TimeDateList = this.getTabTime();
/*获取头部部分:水平线 纵向线、以及文字数据录入*/
var headerTextList = this.getHeaderTextList(tDataKeys, columnNum);
/*坐标轴数据绘制*/
var yAxisList = this.getYAxisList();
/*中间部分:水平线、纵向线、坐标轴以及数据录入*/
var middleList = this.getMiddleList(columnNum, inspectionCycle);
/*页脚部分:水平线、纵向线、以及文字 configFile:bDataKeys*/
var bottomList = this.getBottomList(configFile, bRowNum, columnNum);
list = list.concat(TimeDateList, headerTextList, yAxisList, middleList, bottomList);
//折线数据
//得到[x,y]轴坐标
var coordinate = this.produceData(opts.breathData, 1);//呼吸
var Tempernate = this.produceData(opts.temperatureData, 2);//体温
var pulseTnate = this.produceData(opts.pulseData, 3);//脉搏
//再把得到的【x,y】轴坐标直接加入echarts配置里面
var breathingList = this.getBrokenLineList(coordinate, opts.pigment.breathColor);//呼吸
var temperaList = this.getBrokenLineList(Tempernate, opts.pigment.temperatureColor);//体温
var pulseList = this.getBrokenLineList(pulseTnate, opts.pigment.pulseColor)//脉搏
list = list.concat(breathingList, temperaList, pulseList);
//圆点和折线坐标一摸一样
var breathingDot = this.getDotList(coordinate, opts.pigment.breathColor, opts.breathData, '呼吸', '次/分');
var temperaDot = this.getDotList(Tempernate, opts.pigment.temperatureColor, opts.temperatureData, '体温', '(℃)');
var pulseDot = this.getDotList(pulseTnate, opts.pigment.pulseColor, opts.pulseData, '脉搏', '(次/分)');
list = list.concat(breathingDot, temperaDot, pulseDot);
//下面表格数据
var pressureList = this.getTableList(opts.pressureData, 1);//血压
var shitList = this.getTableList(opts.shitData, 2);//大便
var InputList = this.getTableList(opts.InputData, 3);//入量
var OutputList = this.getTableList(opts.OutputData, 4);//出量
var UrineOutputList = this.getTableList(opts.UrineOutputData, 5);//尿量
list = list.concat(pressureList, shitList, InputList, OutputList, UrineOutputList);
return list;
},
/**
* 构造数据
* @param {*
* data:表数据
* type:1:呼吸 ,2:体温 ,3:脉搏
* } options
* @returns
*/
produceData: function (data, type) {
var list = [];
for (var i = 0; i < data.length; i++) {
if (!data[i][1]) {
list.push([]);
continue
}
switch (type) {
case 1:
list.push([this.timeToX(data[i][0]), this.frequencyToY(data[i][1])])
break
case 2:
list.push([this.timeToX(data[i][0]), this.temperatureToY(data[i][1])])
break
case 3:
list.push([this.timeToX(data[i][0]), this.pulseToY(data[i][1])])
break
default:
return []
}
}
return list
},
//日期
getTabTime: function () {
var TimeList = [];
var first = '';
var two = '';
var mData = opts.mouthTemperature;//日期数据
var dData = opts.dayTemperature;//天数数据
//日期
for (var i = 0; i < mData.length; i++) {
first += 6 * rowSpacing//文字离左边距离都是固定的
var template = {
type: 'text',
top: tops - (tRowNum + 1) * rowSpacing + rowSpacing / 3,//固定参数
left: first,
cursor: 'auto',
style: {
text: mData[i],
fontSize: '12px',
color: '#000'
}
};
//第一个的时候得加上左边全部的距离 left:20是图离echarts的外壳距离
if (i == 0) {
first = rowSpacing * 10 + lefts;
template.left = first;
}
TimeList.push(template);
}
//天数
for (var j = 0; j < dData.length; j++) {
two += 6 * rowSpacing//文字离左边距离都是固定的
var daytemplate = {
type: 'text',
top: tops - tRowNum * rowSpacing + rowSpacing / 3,//固定参数132
left: two,
cursor: 'auto',
style: {
text: dData[j],
fontSize: '12px',
color: '#000'
}
};
//第一个的时候得加上左边全部的距离
if (j == 0) {
two = rowSpacing * 10 + lefts;
daytemplate.left = two;
}
TimeList.push(daytemplate);
}
return TimeList
},
/*获取头部部分:水平线 纵向线、以及文字数据录入*/
getHeaderTextList: function (tDataKeys, columnNum) {
var listHTML = [];
for (var i = 0; i <= tRowNum; i++) {
var leftDistance = 0, lineLength = 0;
//这里是头部超过三个的时候
if (i > 2 && i !== tRowNum) {
leftDistance = left + 6 * rowSpacing;
lineLength = (columnNum - 6) * rowSpacing
}
else {
leftDistance = lefts;
lineLength = columnNum * rowSpacing
}
listHTML.push({
type: 'line',
top: tops + (i - 3) * rowSpacing,
left: leftDistance,
cursor: 'auto',
style: {
stroke: !i ? '#000' : '#999',
lineWidth: 1,
},
shape: {
x1: 0,
y1: 0,
x2: lineLength,
y2: 0
}
});
}
for (var j = 0; j <= columnNum; j++) {
listHTML.push({
type: 'line',
top: tops - 3 * rowSpacing,
left: lefts + j * rowSpacing,
cursor: 'auto',
style: {
stroke: !j || j === columnNum ? '#000' : '#999',
lineWidth: 1,
},
shape: {
x1: 0,
y1: 0,
x2: 0,
y2: !j || (j > 3 && !((j - 3) % 6)) ? tRowNum * rowSpacing : 0
}
});
// 添加头部数据文字
if (!(j % 6)) {
for (var k = 0; k < tRowNum; k++) {
var template = {
type: 'text',
top: null,
left: null,
cursor: 'auto',
style: {
text: null,
fontSize: '12px',
color: '#000'
}
};
if (!j) {
template.top = tops - (tRowNum + 1 - k) * rowSpacing + rowSpacing / 3;
template.left = lefts + 5;
template.style.text = tDataKeys[k];
}
else {
if (j === columnNum) break;
var count = j / 6;
template.top = tops - (tRowNum + 1 - k) * rowSpacing + 4;
template.left = lefts + (count * 6 + 3) * rowSpacing + 5;
}
listHTML.push(template);
}
}
}
return listHTML
},
/*坐标轴数据绘制*/
getYAxisList: function () {
var yAxisList = [];
for (var i = 0; i < YAxisDataTop.length; i++) {
var stroke = '', fill = '';
if (YAxisDataTop[i].name === '脉 搏') {
stroke = fill = 'red';
} else if (YAxisDataTop[i].name === '体 温') {
stroke = fill = 'blue';
}
else {
stroke = fill = '#000';
}
var template = {
type: 'text',
top: YAxisDataTop[i].position[1],
left: YAxisDataTop[i].position[0],
cursor: 'auto',
style: {
text: YAxisDataTop[i].name,
fill: fill,
fontSize: '12px',
color: '#000',
stroke: stroke
}
};
yAxisList.push(template);
}
return yAxisList
},
/*中间部分:水平线、纵向线、坐标轴以及数据录入*/
getMiddleList: function (columnNum, inspectionCycle) {
var middleList = [];
for (var key = 0; key <= mRowNum; key++) {
var leftDistance = 0, lineLength = 0;
if (key > 2 && key !== mRowNum) {
leftDistance = lefts + 9 * rowSpacing;
lineLength = (columnNum - 9) * rowSpacing
}
else {
leftDistance = lefts;
lineLength = columnNum * rowSpacing
}
middleList.push({
type: 'line',
top: tops + (key - 1) * rowSpacing,
left: leftDistance,
cursor: 'auto',
style: {
stroke: key === mRowNum || !((key - 2) % 5) ? '#999' : '#ccc',
lineWidth: 1,
},
shape: {
x1: 0,
y1: 0,
x2: lineLength,
y2: 0
}
});
// 添加左侧y轴文字
var count = Math.floor((key - 1) / 5) - 1;
if (key !== 2 && key !== mRowNum && (key - 1) % 5 === 1 && count < 7) {
for (var keys = 0; keys < YAxisData[count].length; keys++) {
var lDistance = 0;
if (keys == 0) {
if (YAxisData[count][keys] >= 100) {
lDistance = lefts + rowSpacing - 2;
}
else {
lDistance = lefts + rowSpacing + 2;
}
}
else if (keys == 1) {
lDistance = lefts + 4 * rowSpacing + 3;
}
else {
lDistance = lefts + 7 * rowSpacing + 4;
}
var template = {
type: 'text',
top: tops + (key - 1) * rowSpacing + 4,
left: lDistance,
cursor: 'auto',
style: {
text: YAxisData[count][keys],
fontSize: '12px',
color: '#000'
}
};
middleList.push(template);
}
}
}
for (var index = 0; index <= columnNum; index++) {
var lineLength = 0;
if (index >= 9 || index === 0 || index === 3 || index === 6) {
if (index === 3 || index === 6) lineLength = (mRowNum - 1) * rowSpacing;
else lineLength = mRowNum * rowSpacing;
}
var $stroke;
if (!((index - 3) % 6)) {
if (index === columnNum) $stroke = '#000';
else if (index === 3 || index === 6) $stroke = '#999';
else $stroke = 'red';
}
else {
if (!index || index === columnNum) $stroke = '#000';
else if (index === 6) $stroke = '#999';
else $stroke = '#ccc'
}
middleList.push({
type: 'line',
cursor: 'auto',
top: index === 3 || index === 6 ? tops : tops - rowSpacing,
left: lefts + index * rowSpacing,
style: {
stroke: $stroke,
lineWidth: 1,
},
shape: {
x1: 0,
y1: 0,
x2: 0,
y2: lineLength
}
});
/*添加巡查时间刻度*/
var template = {
type: 'text',
top: tops - 10,
left: inspectionCycle[index % 6] >= 10
? lefts + (index + 3) * rowSpacing + 3
: lefts + (index + 3) * rowSpacing + 7,
cursor: 'auto',
style: {
text: inspectionCycle[index % 6],
fontSize: '12px',
color: '#000'
}
};
if (index >= 6 && index < columnNum - 3) {
middleList.push(template);
}
else if (index === 0) {
template.left = lefts + 5;
template.style.text = '时间';
middleList.push(template);
}
}
return middleList;
},
/*页脚部分:水平线、纵向线、以及文字*/
getBottomList: function (bDataKeys, bRowNum, columnNum) {
var bottomList = [];
//水平线
for (var keys = 0; keys <= bRowNum; keys++) {
bottomList.push({
type: 'line',
cursor: 'auto',
//mRowNum 42中部行数
top: tops + (mRowNum + keys - 1) * rowSpacing,
left: lefts,
style: {
stroke: keys === bRowNum - 1 ? '#000' : '#999',
lineWidth: 1,
},
shape: {
x1: 0,
y1: 0,
x2: columnNum * rowSpacing,
y2: 0
}
});
}
//纵向线
for (var indexs = 0; indexs <= columnNum; indexs++) {
var lineLength = 0;
if (indexs >= 9) {
if (!((indexs - 3) % 6)) {
lineLength = (bRowNum) * rowSpacing;
}
//第一行每行中间出现横杠 暂时不需要
// else if (!(indexs % 3)) {
// lineLength = rowSpacing;
// }
}
else if (indexs === 0) {
lineLength = (bRowNum) * rowSpacing;
}
bottomList.push({
type: 'line',
cursor: 'auto',
top: tops + (mRowNum - 1) * rowSpacing,
left: lefts + indexs * rowSpacing,
style: {
stroke: !indexs || indexs === columnNum ? '#000' : '#999',
lineWidth: 1,
},
shape: {
x1: 0,
y1: 0,
x2: 0,
y2: lineLength
}
});
// 添加页脚数据集
if (!(indexs % 6)) {
var count = indexs / 6;
for (var k = 0; k < bRowNum; k++) {
if (indexs === columnNum) break;
if (!count) {// 第一列
var template = {
type: 'text',
top: null,
left: null,
cursor: 'auto',
style: {
text: null,
fontSize: '12px',
color: '#000'
}
};
template.top = tops + (mRowNum - 1 + k) * rowSpacing + rowSpacing / 3;
template.left = lefts + 5;
template.style.text = bDataKeys[k];
bottomList.push(template);
}
}
}
}
return bottomList
},
//整合折线
getBrokenLineList: function (data, pigment) {
var zhexianList = [];
var template = {}
for (var i = 0; i < data.length; i++) {
if (data[i + 1] && data[i + 1].length) {
template = {
type: 'line',
shape: {
x1: data[i][0],//第一个折线点 x轴
y1: data[i][1],//第一个折线点 y轴
x2: data[i + 1][0], //第二个折线点 x轴
y2: data[i + 1][1]//第二个折线点 y轴
},
style: {
fill: null,
stroke: pigment,
lineWidth: 1
},
}
} else {//下一条数据没有就换成圆点就行
template = {
type: 'circle',
shape: {
cx: data[i][0],
cy: data[i][1],
r: 2
},
style: {
fill: null,
stroke: pigment,
lineWidth: 1
}
}
}
zhexianList.push(template);
}
return zhexianList
},
//圆点
getDotList: function (data, pigment, list, text, Company) {
var yuandianList = [];
//存储鼠标滑上去的内容数组
var tooltipArr = [];
var ciNum = null;
//一个小时内有二条数据,折线点就会重叠,鼠标滑上去就显示一条数据,这里把二条数据都一起显示
for (var j = 0; j < list.length; j++) {
if (ciNum == j) {
continue
}
if (data[j + 1] && data[j + 1].length) { //有下一条数据
if (list && list[j + 1]) {
var tiemFirst = list[j][0].replace(/-/g, "/");
var currentDate = new Date(Date.parse(tiemFirst.replace(/-/g, "/")));
var tiemNext = list[j + 1][0].replace(/-/g, "/");
var starttime = new Date(Date.parse(tiemNext.replace(/-/g, "/")));
currentDate = Number(currentDate);
starttime = Number(starttime);
var laterHour = Math.round((starttime - currentDate) / 1000 / 60 / 60);//一定要四舍五入不然格子算不准 /1000:秒/60:分钟/60:小时
if (!laterHour) {
ciNum = j + 1//记录下一次就不去循环了,下一条数据已经有了
tooltipArr[j] = list[j][0] + text + ':' + list[j][1] + Company + '</br>' + list[j + 1][0] + text + ':' + list[j + 1][1] + Company
tooltipArr[j + 1] = list[j][0] + text + ':' + list[j][1] + Company + '</br>' + list[j + 1][0] + text + ':' + list[j + 1][1] + Company
} else {
tooltipArr[j] = list[j][0] + '</br>' + text + ':' + list[j][1] + Company
ciNum = '';
}
}
} else {
tooltipArr[j] = list[j][0] + '</br>' + text + ':' + list[j][1] + Company
}
}
for (var i = 0; i < data.length; i++) {
var template = {
type: 'circle',
shape: {
cx: data[i][0],
cy: data[i][1],
r: 2
},
tooltip: {
trigger: 'item',
formatter: tooltipArr[i]
},
style: {
fill: null,
stroke: pigment,
lineWidth: 1
}
}
yuandianList.push(template);
}
return yuandianList
},
//底部表格
getTableList: function (data, type) {
var tableList = [];
var first = '';
//日期
for (var i = 0; i < data.length; i++) {
first += 6 * rowSpacing //文字离左边距离都是固定的
var template = {
type: 'text',
top: (44 + type) * rowSpacing + tops - 54,
left: first,
cursor: 'auto',
style: {
text: type == 1 ? data && data[i] ? data[i].diastolicPressure + '/' + data[i].systolicPressure : '' : data[i][1],
fontSize: '12px',
color: '#000'
}
};
//第一个的时候得加上左边全部的距离 left:20是图离echarts的外壳距离
if (i == 0) {
first = rowSpacing * 10 + lefts;
template.left = first;
}
tableList.push(template);
}
return tableList
},
// 呼吸转化为y轴坐标
frequencyToY: function (frequency) {
//得到离90的距离多少格子 向下取整
var remainder = (90 - frequency) / 2;
//不是偶数就得到格子得一半
var multiplier = frequency % 2 == 0 ? 0 : remainder % 2 == 0 ? 0 : 5;
return Math.floor(remainder) * rowSpacing + tops + 20 + multiplier;
},
// 时间日期转化为x轴坐标
timeToX: function (time) {
var startDate = opts.mouthTemperature[0] + ' 00:00:00'
//兼容ie8 时间必须是0000/00/00才能计算
var currentDate = new Date(Date.parse(time.replace(/-/g, "/")));
var starttime = new Date(Date.parse(startDate.replace(/-/g, "/")));
currentDate = Number(currentDate);
starttime = Number(starttime);
var linegezi = (rowSpacing * 9) + lefts;//前面有9个格子加到图表壳子的20距离
var laterHour = Math.round((currentDate - starttime) / 1000 / 60 / 60);// 一定要四舍五入不然格子算不准 /1000:秒/60:分钟/60:小时
var laterNum = laterHour * ((6 * rowSpacing) / 24)//每小时在格子上面的距离
return linegezi + laterNum
},
// 体温转化为y轴坐标
temperatureToY: function (temperature) {
//得到离42的距离多少格子 ps:substr(-1) ie8不兼容
var tempStr = (temperature * 10).toString()
var later = tempStr.substr((tempStr).length - 1, 1)
later === '0' && (later = 10)
return Math.floor(42 - temperature) * 5 * rowSpacing + ((10 - later) / 2) * rowSpacing + tops + 20
},
// 脉搏转化为y轴坐标
pulseToY: function (pulse) {
//得到离180的距离多少格子
var remainder = (180 - pulse) / 4;
//不是偶数就得到格子得一半
var multiplier = remainder % 2 == 0 ? 0 : 10;
return Math.ceil(((180 - pulse) / 4)) * rowSpacing + tops + 20 - multiplier;
}
};
thermometer.init();
return thermometer;
}