(function(){
Vue.component('chart-section', {
template: '
\
{{sectionTitle}}(数据展示)
\
\
\
\
\
\
暂无相关体征数据
\
\
',
props: ['patient'],
data: function() {
return {
sectionTitle: "血压",
hasData: true,
fontSize: 0.007 * window.screen.width,
dateType: 1
}
},
mounted: function(){
var vm = this;
getChartInfo(vm);
},
methods: {}
});
function getChartInfo(vm){
EventBus.$on('get-chart-data', function(arg){
vm.dateType = arg.dateType ? arg.dateType : vm.dateType;
var type = arg.type,
gi_type = arg.gi_type,
dateType = vm.dateType,
startDate = getStartDate(dateType),
endDate = getEndDate(),
time = getTimeName(dateType);
var params = {
patient: vm.patient,
type: type, //1-血糖,2-血压,3-体重,4-腰围
gi_type: gi_type, //就餐类型
time: time,
begin: startDate,
end: endDate
};
patientAPI.getChartData(params).then(function(res){
if(res.status == 200){
//触发指标分析内容修改
EventBus.$emit("get-zhibiao-analysis", {content: res.data.content});
//触发指标统计值
EventBus.$emit("get-zhibiao-count", {total: res.data.total});
if(res.data.list.length == 0){
vm.hasData = false;
return false;
}else{
vm.hasData = true;
}
var xData = _.map(res.data.list, function(o){
return o.date;
});
// 为echarts对象加载数据
if (type == 1) {
var xuetangDuring = ['','早餐前', '早餐后', '午餐前', '午餐后', '晚餐前', '晚餐后', '睡前'],
labelName = xuetangDuring[gi_type] + "血糖";
vm.sectionTitle = labelName;
var seriesData = getSeriesData(res.data.list, labelName, vm.fontSize);
var legent = {show: false};
drawLineChart(xData, seriesData, legent, vm.fontSize);
}
if (type == 2) {
var seriesData = getSeriesData2(res.data.list, vm.fontSize);
var legent = {
top: 'top',
data:['舒张压', '收缩压'],
textStyle: {
color: "#fff",
fontSize: vm.fontSize
}
};
drawLineChart(xData, seriesData, legent, vm.fontSize);
}
}else{
console.log(res.msg);
}
});
})
}
function getSeriesData(data, labelName, fontSize){
//餐前血糖值: [7.0, 4.0]
//餐后血糖值: [4.0, 11.1]
var list = _.map(data, function(o){
if(o.type == 1){ //血糖
if(["1", "3", "5", "7"].indexOf(o.value2) > -1){ //餐前数据
return buildData(parseFloat(o.value1), 7.0, 4.0);
}else{
return buildData(parseFloat(o.value1), 11.1, 4.0)
}
}else{
return "";
}
});
var obj = {
name: labelName+'血糖',
type: 'line',
smooth: true,
symbol: "circle",
symbolSize: 0.005 * window.screen.width,
data: list,
itemStyle:{
normal: {
borderWidth: 10,
color: '#03d95d',
lineStyle: { // 系列级个性化折线样式,横向渐变描边
borderWidth: 2,
color: '#CC66FF',
width: window.screen.width > 3000 ? 4 : 2
},
label:{
textStyle: {
fontSize: fontSize
}
}
}
}
};
return [obj];
}
function getSeriesData2(data, fontSize){
//获取收缩压和舒张压的值
//舒张压
var list1 = _.map(data, function(o){
return buildData(parseFloat(o.value1), 90, 60);
});
//收缩压
var list2 = _.map(data, function(o){
return buildData(parseFloat(o.value2), 140, 90)
});
return [{
name: "舒张压",
type: 'line',
smooth: true,
symbol: "circle",
symbolSize: 0.005 * window.screen.width,
data: list1,
itemStyle:{
normal: {
borderWidth: 10,
color: '#CC66FF',
lineStyle: { // 系列级个性化折线样式,横向渐变描边
borderWidth: 2,
width: window.screen.width > 3000 ? 4 : 2
},
label:{
textStyle: {
fontSize: fontSize
}
}
},
emphasis: {
label: {
show: true
}
}
}
},{
name: "收缩压",
type: 'line',
smooth: true,
symbol: "circle",
symbolSize: 0.005 * window.screen.width,
data: list2,
itemStyle:{
normal: {
borderWidth: 10,
color: '#5dd1d2',
lineStyle: { // 系列级个性化折线样式,横向渐变描边
borderWidth: 2,
width: window.screen.width > 3000 ? 4 : 2
},
label:{
textStyle: {
fontSize: fontSize
}
}
},
emphasis: {
label: {
show: true
}
}
}
}]
}
function buildData(value, max, min) {
if(value > 0 && value < min) {
return {
value: value,
itemStyle: {
normal: {
color: '#fd9c0d'
}
}
}
} else if(value > 0 && value > max) {
return {
value: value,
itemStyle: {
normal: {
color: '#ff3803'
}
}
}
}else{
return {
value: value,
itemStyle:{
normal: {
color: "#0ad800"
}
}
}
}
}
function drawLineChart(xData, seriesData, legent, fontSize){
$("#lineChart").show();
var lastIndex = xData.length % 10;
if(xData.length >10 ){
var dataZoom_end = 100-(9/xData.length)*100;
}else{
var dataZoom_end = 0;
}
var lineCharts = echarts.init(document.getElementById('lineChart'));
var options = {
tooltip: {
trigger: 'axis',
textStyle: {
fontSize: fontSize,
color: '#0fa5f2'
},
backgroundColor: "#B5E1FC"
},
legend: legent,
grid: {
left: '5%',
right: '5%',
bottom: '15%',
top: '12%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLabel: {
interval:0,//横轴信息全部显示
fontSize: fontSize,
formatter: function (value, index) {
return value.substr(5,5);
}
},
nameTextStyle: {
fontSize: fontSize
},
axisLine:{
lineStyle:{
color:'#b5e1fc',
width:2
}
},
data: xData,
splitLine: {
show: false
},
},
yAxis: {
type: 'value',
axisPointer: {
snap: true
},
scale: true,
minInterval: 1,
boundaryGap: ['10%', '30%'],
axisLine: {
"lineStyle": {
"color": "#b5e1fc",
"width": window.screen.width > 3000 ? 2 : 1
}
},
axisLabel:{
fontSize: fontSize
},
nameTextStyle: {
fontSize: fontSize
},
},
dataZoom: [{//给x轴设置滚动条
// show: false,
start: dataZoom_end,
end: 100,
type: 'slider',
zoomLock: true,
},{ //下面这个属性是内容区域配置
start: dataZoom_end,
end: 100,
type: 'inside',
zoomLock: true,
}],
series: seriesData
};
//删除旧的图标数据重新渲染
$("#lineChart").removeAttr("_echarts_instance_");
lineCharts.setOption(options);
window.addEventListener("resize", function () {
setTimeout(function () {
lineCharts.resize();
}, 500)
});
}
function getStartDate(type){
//type: 1-周, 2-月, 3-年
var now = new Date(),
endDate = new Date();
switch(parseInt(type)){
case 1:
endDate.setDate(now.getDate()- 6);
break;
case 2:
endDate.setMonth(now.getMonth() - 1);
break;
case 3:
endDate.setFullYear(now.getFullYear() - 1);
break;
}
return endDate.format("yyyy-MM-dd")+" 00:00:00";
}
function getEndDate(){
var now = new Date();
return now.format("yyyy-MM-dd")+ " 23:59:59";
}
function getTimeName(type){
switch(parseInt(type)){
case 1:
return "一周";
break;
case 2:
return "一月";
break;
case 3:
return "一年";
break;
}
}
})();