analyze.js.bak 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /**
  2. * Created by JianJia.Zhou<jianjia.zhou> on 2022/10/3.
  3. */
  4. let statDown = (function () {
  5. let chartInstance = '';
  6. let dataUrl = '';
  7. let btnName = '';
  8. let searchBtnName = '';
  9. statDown.init = {
  10. _init(options) {
  11. chartInstance = echarts.init(document.getElementById(options.dom))
  12. dataUrl = options.url
  13. btnName = options.btnName
  14. searchBtnName = options.searchBtnName
  15. statDown.buttonEvent._init()
  16. }
  17. }
  18. statDown.buttonEvent = {
  19. _init() {
  20. $(btnName).bind("click", function () {
  21. $(this).toggleClass('btn-primary').toggleClass('btn-default')
  22. statDown.chart.render()
  23. })
  24. $('.datepicker').datetimepicker({
  25. locale: 'zh-CN',
  26. format: 'YYYY-MM-DD',
  27. });
  28. $(searchBtnName).bind('click', function () {
  29. statDown.chart.render()
  30. })
  31. },
  32. }
  33. statDown.query = {
  34. getData() {
  35. let productIds = [];
  36. $(`${btnName}.btn-primary`).each((index, obj) => {
  37. productIds.push($(obj).data('id'))
  38. })
  39. let startAt = $("#filter-column-name-start").val();
  40. let endAt = $("#filter-column-name-end").val();
  41. let name = $(".filter-column-name").val();
  42. let data = {
  43. productIds,
  44. startAt,
  45. endAt,
  46. name
  47. }
  48. return $.post({
  49. url: dataUrl,
  50. data
  51. })
  52. },
  53. };
  54. statDown.chart = {
  55. render() {
  56. let data = this.getLegend();
  57. let categoryData = data.categoryData;
  58. let legendData = data.legendData;
  59. let option = this.options(legendData);
  60. chartInstance.setOption(option, true);
  61. this.query(legendData, categoryData)
  62. },
  63. query(legendData, categoryData) {
  64. chartInstance.showLoading()
  65. statDown.query.getData().then(res => {
  66. let {data} = res
  67. let series = [];
  68. legendData.forEach((item, index) => {
  69. let temp = {
  70. name: item.name,
  71. type: item.type,
  72. data: data[categoryData[index]]
  73. };
  74. series.push(temp);
  75. });
  76. chartInstance.setOption({
  77. xAxis: [{
  78. data: data.dates,
  79. axisPointer: {
  80. type: 'shadow'
  81. },
  82. splitLine: {
  83. show: true
  84. }
  85. }],
  86. series: series
  87. });
  88. chartInstance.hideLoading();
  89. });
  90. },
  91. getLegend() {
  92. let categoryData = [];
  93. let legendData = [];
  94. $(".btn-product.btn-primary").each(function () {
  95. let id = $(this).data("id");
  96. let name = $(this).text();
  97. let names = {name: `[${name}]下载数量`, type: 'line', barMaxWidth: 30, average: false};
  98. categoryData.push(`product_download_num_${id}`);
  99. legendData.push(names);
  100. });
  101. return {legendData, categoryData}
  102. },
  103. options(legends) {
  104. let seriesData = [];
  105. let legendSelected = {};
  106. let colors = ["#0095F3", "#95E04A", "#605EEB", "#4ACDBB", "#FFD480"];
  107. for (let item of legends) {
  108. let series = {
  109. name: item.name,
  110. type: item.type !== undefined ? item.type : 'line',
  111. barWidth: item.barWidth !== undefined ? item.barWidth : '',
  112. yAxisIndex: item.yAxisIndex !== undefined ? item.yAxisIndex : 0,
  113. smooth: true,
  114. data: [],
  115. };
  116. legendSelected[item.name] = item.show !== undefined ? item.show : true;
  117. if (item.average) {
  118. series['markLine'] = {
  119. data: [
  120. {type: 'average', name: '平均值'}
  121. ]
  122. }
  123. }
  124. seriesData.push(series);
  125. }
  126. return {
  127. animation: true,
  128. tooltip: {
  129. trigger: 'axis',
  130. axisPointer: { // 坐标轴指示器,坐标轴触发有效
  131. type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
  132. },
  133. },
  134. toolbox: {
  135. feature: {
  136. // dataView: {show: true, readOnly: false},
  137. magicType: {show: true, type: ['line', 'bar']},
  138. restore: {show: true},
  139. saveAsImage: {show: true}
  140. }
  141. },
  142. /*legend: {
  143. type :'scroll',
  144. left:50,
  145. right:50,
  146. height:500,
  147. data: legend_data,
  148. selected:legend_selected,
  149. },*/
  150. grid: {
  151. left: '4%',
  152. right: '4%',
  153. containLabel: true
  154. },
  155. dataZoom: [{
  156. type: 'slider',
  157. show: true,
  158. xAxisIndex: 0,
  159. yAxisIndex: 1,
  160. start: 0,
  161. end: 100,
  162. }, {
  163. type: 'inside',
  164. xAxisIndex: 0,
  165. yAxisIndex: 1,
  166. start: 0,
  167. end: 100
  168. }],
  169. xAxis: {
  170. type: 'category',
  171. data: [],
  172. //boundaryGap: false
  173. },
  174. yAxis: [
  175. {
  176. name: '产品下载量',
  177. type: 'value',
  178. axisLabel: {
  179. formatter: '{value} '
  180. }
  181. }
  182. ],
  183. series: seriesData,
  184. //color: colors
  185. };
  186. }
  187. }
  188. })