var indexName = { 'index_128': '预约总量', 'index_129': '居民预约量', 'index_130': '代预约量' } function getSignDate() { //获取初始化签约年 var nowdate = new Date() var year = nowdate.getFullYear() var month = nowdate.getMonth() + 1 if (year >= 2023) { year = year } else if (month <= 6) { year = year - 1 } return year } function getStartDate(chooseYear) { // 按年度来计算的时候,开始时间是该年度7月1号还是到下一个年的6月30号结束 // 2022年及以前开始时间07-01 // 2023及以后开始时间01-01 if (chooseYear == 2016) { return chooseYear + '-08-01' } else if (chooseYear <= 2022) { return chooseYear + '-07-01' } else if (chooseYear >= 2023) { return chooseYear + '-01-01' } } //获取结束时间 function getEndDate(chooseYear) { var nowdate = new Date() var year = nowdate.getFullYear() var month = nowdate.getMonth() + 1 var day = nowdate.getDate() var endDate = '' if (chooseYear < '2022') { endDate = new Date(parseInt(chooseYear) + 1 + '-06-30') } else { endDate = new Date(parseInt(chooseYear) + '-12-31') } var now = new Date() if (now <= endDate) { return now.format('yyyy-MM-dd') } else { if (chooseYear < '2022') { return parseInt(chooseYear) + 1 + '-06-30' } else { return parseInt(chooseYear) + '-12-31' } } } //获取结束时间29 function getEndDate29(chooseYear) { chooseYear = parseInt(chooseYear) var endDate = new Date(chooseYear + 1 + '-06-29'), now = new Date() if (now <= endDate) { return now.format('yyyy-MM-dd') } else { return chooseYear + 1 + '-06-29' } } /** * 获取多少天前的日期 */ function getDateBefore(days) { var now = new Date() var date = new Date(now.getTime() - days * 24 * 3600 * 1000) var year = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var hour = date.getHours() var minute = date.getMinutes() var second = date.getSeconds() return year + '-' + (month < 10 ? '0' + month : month) + '-' + (day < 10 ? '0' + day : day) } /* * 获取用来排序的字段值,返回数组 * 参数: list - 列表, key - 字段的名称 */ function getKeyValueArr(list, key) { var arr = [] for (var k in list) { arr.push(list[k][key]) } return arr } /* * 排名 */ function soreRank(arr) { var temp = [] var lis = [] for (var i = 0; i < arr.length; i++) { lis.push(arr[i]) } lis = _.uniq(lis) for (var i = 0; i < arr.length; i++) { temp[i] = lis.indexOf(arr[i]) + 1 } return temp } /* * 绘制饼图数据处理 // elId, arry, title, hasNum,colors,radius,noLedend,param */ function handlePieData(arg) { var legend = { orient: 'vertical', right: arg.legendRight || '15%', y: 'center' } var colorList = [] legendNames = [] var arr1 = _.map(arg.arry, function (o, i) { var count = 0 if (arg.param) { count = parseFloat(o[arg.param]) } else { count = parseFloat(o.amount) } var obj = { name: o[arg.nameparam] || o.name, count: count } legendNames.push(obj) if (o.code) { colorList.push(arg.colors[o.code]) } else { colorList.push(arg.colors[i]) } return { value: count, name: o[arg.nameparam] || o.name } }) legend.formatter = function (name) { if (arg.hasNum) { var target for (var i = 0, l = legendNames.length; i < l; i++) { if (legendNames[i].name == name) { target = parseInt(legendNames[i].count) } } return name + ': ' + target } else { return name } } if (arg.noLedend) { //true时无注释 drawPie(arg.elId, arr1, colorList, null, arg.position || ['50%', '51%'], arg.radius || ['70%', '90%'], arg.title) } else { drawPie(arg.elId, arr1, colorList, legend, arg.position || ['30%', '51%'], arg.radius || ['70%', '90%'], arg.title) } } /* * 绘制饼图 */ function drawPie(elId, arry, color, legend, center, radius, title) { var pieChart = echarts.init(document.getElementById(elId)) var options = { tooltip: { trigger: 'item', formatter: '{b} : {c} ({d}%)' // position: ['50%', '50%'] }, color: color, series: [ { type: 'pie', radius: ['80%', '99%'], startAngle: 270, legendHoverLink: false, hoverAnimation: false, avoidLabelOverlap: false, label: { normal: { show: false, textStyle: { color: '#000' } } }, labelLine: { normal: { show: false } }, data: arry } ] } if (legend) { options.legend = legend } if (center) { options.series[0].center = center } if (radius) { options.series[0].radius = radius } if (title) { options.title = title } pieChart.clear() pieChart.setOption(options) } /* * 绘制饼图 * arry [{name: '', value: ''}] * color ['#ffc800', '#17b3ec'] * silent 图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件 */ function drawPieChart(elId, arry, color, silent) { var myChart = echarts.init(document.getElementById(elId)) var option = { tooltip: { trigger: 'item', formatter: '{b} : {c} ({d}%)', position: ['50%', '50%'] }, color: color, series: [ { type: 'pie', radius: ['80%', '99%'], startAngle: 270, legendHoverLink: false, hoverAnimation: false, avoidLabelOverlap: false, silent: silent, label: { normal: { show: false, textStyle: { color: '#000' } } }, labelLine: { normal: { show: false } }, data: arry } ] } $('#' + elId).removeAttr('_echarts_instance_') myChart.setOption(option) return myChart } /** * 绘制柱状图 */ function drawBarChart(el, xData, yData, color, name) { var myChart = echarts.init(document.getElementById(el)) // 指定图表的配置项和数据 var option = { tooltip: { trigger: 'item' }, toolbox: { dataZoom: true, show: true, orient: 'vertical', x: 'right', y: 'center' }, grid: { left: '20px', right: '20px', bottom: '20px', top: '20px', containLabel: true }, xAxis: [ { type: 'category', data: xData, axisLabel: { interval: 0 //横轴信息全部显示 }, splitLine: { show: false } } ], yAxis: [ { type: 'value', splitLine: { show: false } } ], series: [ { clickable: true, name: name, itemStyle: { normal: { label: { show: true, position: 'top' }, color: color } }, barWidth: 20, type: 'bar', data: yData } ] } // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option) return myChart } /** * 绘制折线图数据处理 * @param {Object} elId div的id值 * @param {Object} data 数据值 * @param {Object} selectedDateType true的时候x轴值年-月-日 1-日,2-周, 3-月 */ function getChartData(elId, data, selectedDateType, hasLegend, title, unit) { var dataZoom_end, xDatas = [], yDatas = [], names = [], colors = ['#12b7f5', '#cd67fd', '#FF9526'] for (var p in data) { if (hasLegend) { names.push(indexName[p]) } var xData = _.map(data[p], function (o) { return o.range }) var yData = _.map(data[p], function (o) { return o.amount }) xDatas.push(xData) yDatas.push(yData) var lastIndex = yData.length % 10 if (yData.length > 10) { dataZoom_end = 100 - (9 / yData.length) * 100 } else { dataZoom_end = 0 } } setTimeout(function () { EventBus.$emit('draw-line-chart', { panelName: title, quotaNames: names, xData: xDatas[0], yDatas: yDatas, colors: colors, selectedDateType: selectedDateType, nowlineid: elId, unit: unit }) }, 10) } /** * 绘制柱状图数据处理 * @param {Object} elId div的id值 * @param {Object} data 数据值 */ function getBarData(arg) { var dataZoom_end, xDatas = [], yDatas = [], names = [], colors = ['#12b7f5', '#cd67fd', '#FF9526'] if (arg.colors) { colors = arg.colors } for (var p in arg.data) { if (arg.hasLegend) { names.push(arg.indexNames[p]) } var xData = _.map(arg.data[p].data || arg.data[p], function (o) { return o[arg.rangeParams] || o.range }) var yData = _.map(arg.data[p].data || arg.data[p], function (o) { return o[arg.amountParams] || o.amount }) xDatas.push(xData) yDatas.push(yData) var lastIndex = yData.length % 10 if (yData.length > 10) { dataZoom_end = 100 - (9 / yData.length) * 100 } else { dataZoom_end = 0 } } if (arg.typeV) { drawBarV({ elId: arg.elId, name: names, dataZoom_end: dataZoom_end, xData: xDatas[0], yDatas: yDatas, colors: colors, barCategoryGap: arg.barCategoryGap, argInit: arg }) } else { drawBarH({ elId: arg.elId, name: names, dataZoom_end: dataZoom_end, xData: xDatas[0], yDatas: yDatas, colors: colors, barCategoryGap: arg.barCategoryGap, argInit: arg }) } } function drawBarH(arg) { var barCharts = echarts.init(document.getElementById(arg.elId)) var options = { tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, textStyle: { align: 'left' }, formatter: function (datas) { var res = datas[0].name + '
' for (var i = 0, length = datas.length; i < length; i++) { var unit = '' if (arg.argInit.units) { unit = arg.argInit.units[datas[i].seriesName] } res += datas[i].seriesName + ':' + datas[i].value + unit + '
' } return res } }, calculable: false, grid: { borderWidth: 0, top: '20px', left: '20px', right: '20px', bottom: '20px', containLabel: true }, xAxis: [ { type: 'category', axisLine: { lineStyle: { type: 'solid', color: '#333333', //左边线的颜色 width: '1' //坐标线的宽度 } }, axisTick: { show: false }, splitArea: { show: false }, splitLine: { show: false }, data: arg.xData } ], yAxis: [ { type: 'value', axisTick: { show: false }, splitArea: { show: false }, splitLine: { show: false }, axisLine: { lineStyle: { type: 'solid', color: '#333333', //左边线的颜色 width: '1' //坐标线的宽度 } } } ] } var series = [] for (var i = 0; i < arg.yDatas.length; i++) { var obj = { name: arg.name[i], data: arg.yDatas[i], type: 'bar', barGap: 0, barWidth: 30, //柱图宽度 itemStyle: { normal: { barBorderRadius: [50, 50, 0, 0], color: arg.colors[i], label: { show: true, position: 'top', textStyle: { color: '#333333', fontSize: 12 } } } } } series.push(obj) } options.series = series $('#' + arg.elId).removeAttr('_echarts_instance_') barCharts.setOption(options) } function drawBarV(arg) { var barCharts = echarts.init(document.getElementById(arg.elId)) var options = { tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, textStyle: { align: 'left' }, formatter: function (datas) { var res = datas[0].name + '
' for (var i = 0, length = datas.length; i < length; i++) { var unit = '' if (arg.argInit.units) { unit = arg.argInit.units[datas[i].seriesName] } res += datas[i].seriesName + ':' + datas[i].value + unit + '
' } return res } }, calculable: false, grid: { borderWidth: 0, top: '5%', left: '3%', right: '10%', bottom: '5%', containLabel: true }, yAxis: [ { type: 'category', axisLine: { lineStyle: { type: 'solid', color: '#333333', //左边线的颜色 width: '1' //坐标线的宽度 } }, axisTick: { show: false }, splitArea: { show: false }, splitLine: { show: false }, data: arg.xData } ], xAxis: [ { type: 'value', axisTick: { show: false }, splitArea: { show: false }, splitLine: { show: false }, axisLine: { lineStyle: { type: 'solid', color: '#333333', //左边线的颜色 width: '1' //坐标线的宽度 } } } ] } var series = [] for (var i = 0; i < arg.yDatas.length; i++) { var obj = { name: arg.name[i], data: arg.yDatas[i], type: 'bar', barGap: 0, barWidth: 12, //柱图宽度 itemStyle: { normal: { barBorderRadius: [0, 50, 50, 0], color: arg.colors[i], label: { show: true, position: 'right', textStyle: { color: '#333333', fontSize: 12 } } } } } series.push(obj) } options = newline(options, 4, 'yAxis') options.series = series $('#' + arg.elId).removeAttr('_echarts_instance_') barCharts.setOption(options) } function newline(option, number, axis) { /* 此处注意你的json是数组还是对象 */ option[axis][0]['axisLabel'] = { interval: 0, formatter: function (params) { var newParamsName = '' var paramsNameNumber = params.length var provideNumber = number var rowNumber = Math.ceil(paramsNameNumber / provideNumber) if (paramsNameNumber > provideNumber) { for (var p = 0; p < rowNumber; p++) { var tempStr = '' var start = p * provideNumber var end = start + provideNumber if (p == rowNumber - 1) { tempStr = params.substring(start, paramsNameNumber) } else { tempStr = params.substring(start, end) + '\n' } newParamsName += tempStr } } else { newParamsName = params } return newParamsName } } return option } function getSecondClassifyList(val) { switch (val) { case '': return [ { label: '全部', value: '' }, { label: '健康竞走', value: '健康竞走' }, { label: '健康问答', value: '健康问答' }, { label: '健康咨询', value: '健康咨询' } ] case '健康运动类': return [ { label: '全部', value: '' }, { label: '健康竞走', value: '健康竞走' } ] case '健康教育类': return [ { label: '全部', value: '' }, { label: '健康问答', value: '健康问答' } ] case '促进业务类': return [ { label: '全部', value: '' }, { label: '健康咨询', value: '健康咨询' } ] } }