line-chart.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. (function(){
  2. Vue.component('line-chart',{
  3. template: '<div class="mtb10 bgc-fff c-border pb10">\
  4. <div class="ui-grid ui-grid-middle plr10 c-border-b">\
  5. <div class="ui-col-0">\
  6. <span class="c-333 c-bold c-f14">{{panelName}}</span>\
  7. </div>\
  8. <div class="ui-col-1 c-t-right ptb5">\
  9. <span class="date-tag" :class="{active: selectedDateType == 1}" data-type="1" @click="changeType(1)">日</span><!--\
  10. --><span class="date-tag" :class="{active: selectedDateType == 2}" data-type="2" @click="changeType(2)">周</span><!--\
  11. --><span class="date-tag" :class="{active: selectedDateType == 3}" data-type="3" @click="changeType(3)">月</span>\
  12. </div>\
  13. </div>\
  14. <div class="clearfix mt5 plr10">\
  15. <div class="fl c-f12 c-909090"><span>{{startDate}}</span> ~ <span>{{endDate}}</span>数据</div>\
  16. <div class="fr c-f12 c-909090">单位:人</div>\
  17. </div>\
  18. <div class="line-chart" id="lineChart" style="height: 200px; width: 100%;"></div>\
  19. </div>',
  20. props:[],
  21. data: function(){
  22. return {
  23. selectedDateType: 1,
  24. startDate: "", //数据展示时显示的开始时间
  25. endDate: "", //数据展示时显示的结束时间
  26. panelName: ""
  27. }
  28. },
  29. methods: {
  30. changeType: function(type){
  31. this.selectedDateType = type;
  32. //触发页面更新折线图的数据
  33. EventBus.$emit("get-line-chart-data", {dateType: type});
  34. }
  35. },
  36. mounted: function(){
  37. var vm = this;
  38. EventBus.$on("draw-line-chart", function(arg){
  39. vm.panelName = arg.panelName;
  40. drawLine(vm, arg);
  41. })
  42. }
  43. });
  44. function drawLine(vm, arg){
  45. var lineCharts = echarts.init(document.getElementById('lineChart'));
  46. var xData = arg.xData,
  47. yDatas = arg.yDatas,
  48. names = arg.quotaNames,
  49. colors = arg.colors;
  50. //处理数据, 数据按照10条数一屏展示
  51. var lastIndex = xData.length % 10;
  52. if(xData.length >10 ){
  53. dataZoom_end = 100-(9/xData.length)*100;
  54. }else{
  55. dataZoom_end = 0;
  56. }
  57. //初始结束时间
  58. var lastValue = xData[xData.length - 1];
  59. if(vm.selectedDateType == 1 || vm.selectedDateType == 2){
  60. vm.endDate = lastValue;
  61. }else if(vm.selectedDateType == 3){
  62. var val = lastValue.substr(5,2)+"月"
  63. vm.endDate = lastValue.substr(0,4)+"年"+val;
  64. }
  65. console.log(lastValue);
  66. var options = {
  67. tooltip: {
  68. trigger: 'axis'
  69. },
  70. color: colors,
  71. legend: {
  72. bottom: '0px',
  73. data: name,
  74. borderColor: "#f1f1f1"
  75. },
  76. grid: {
  77. show: false,
  78. left: '20px',
  79. right: '20px',
  80. bottom: '40px',
  81. top: '20px',
  82. containLabel: true
  83. },
  84. xAxis: {
  85. type: 'category',
  86. boundaryGap: false,
  87. data: xData,
  88. axisLabel: {
  89. interval:0,//横轴信息全部显示
  90. formatter: function (value, index) {
  91. if(vm.selectedDateType == 1 || vm.selectedDateType == 2){
  92. if(index == 0){
  93. vm.startDate = value;
  94. return value.substr(5,2)+"月"+value.substr(8,2);
  95. }else{
  96. if(index == 9){
  97. vm.endDate = value;
  98. }
  99. return value.substr(8,2);
  100. }
  101. }else if(vm.selectedDateType == 3){
  102. var val = value.substr(5,2)+"月"
  103. if(index == 0){
  104. vm.startDate = value.substr(0,4)+"年"+val;
  105. }else{
  106. if(index == 9){
  107. vm.endDate = value.substr(0,4)+"年"+val;
  108. }
  109. }
  110. return val;
  111. }
  112. }
  113. }
  114. },
  115. yAxis: {
  116. type: 'value',
  117. axisPointer: {
  118. snap: true
  119. },
  120. scale: true,
  121. minInterval: 1,
  122. boundaryGap: ['10%', '30%'],
  123. splitLine: {show:false}
  124. },
  125. dataZoom: [{//给x轴设置滚动条
  126. // show: false,
  127. start: dataZoom_end,
  128. end: 100,
  129. type: 'slider',
  130. zoomLock: true,
  131. },{ //下面这个属性是内容区域配置
  132. start: dataZoom_end,
  133. end: 100,
  134. type: 'inside',
  135. zoomLock: true,
  136. }]
  137. };
  138. var series = [],
  139. legend = [];
  140. for(var i=0; i<yDatas.length; i++){
  141. var obj = {
  142. name: name[i],
  143. type: 'line',
  144. smooth: true,
  145. data: yDatas[i],
  146. lineStyle:{
  147. normal:{
  148. color: colors[i]
  149. }
  150. }
  151. };
  152. series.push(obj);
  153. }
  154. options.series = series;
  155. $("#lineChart").removeAttr('_echarts_instance_')
  156. lineCharts.setOption(options);
  157. }
  158. })()