阅行客电子档案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.9 KiB

3 years ago
  1. <template>
  2. <div :class="className" :style="{height:height,width:width}" />
  3. </template>
  4. <script>
  5. import echarts from 'echarts'
  6. require('echarts/theme/macarons') // echarts theme
  7. import { debounce } from '@/utils'
  8. export default {
  9. props: {
  10. className: {
  11. type: String,
  12. default: 'chart'
  13. },
  14. width: {
  15. type: String,
  16. default: '100%'
  17. },
  18. height: {
  19. type: String,
  20. default: '300px'
  21. }
  22. },
  23. data() {
  24. return {
  25. chart: null
  26. }
  27. },
  28. mounted() {
  29. this.initChart()
  30. this.__resizeHandler = debounce(() => {
  31. if (this.chart) {
  32. this.chart.resize()
  33. }
  34. }, 100)
  35. window.addEventListener('resize', this.__resizeHandler)
  36. },
  37. beforeDestroy() {
  38. if (!this.chart) {
  39. return
  40. }
  41. window.removeEventListener('resize', this.__resizeHandler)
  42. this.chart.dispose()
  43. this.chart = null
  44. },
  45. methods: {
  46. initChart() {
  47. this.chart = echarts.init(this.$el, 'macarons')
  48. const data = [
  49. [[28604, 77, 17096869, 'Australia', 1990], [31163, 77.4, 27662440, 'Canada', 1990], [1516, 68, 1154605773, 'China', 1990], [13670, 74.7, 10582082, 'Cuba', 1990], [28599, 75, 4986705, 'Finland', 1990], [29476, 77.1, 56943299, 'France', 1990], [31476, 75.4, 78958237, 'Germany', 1990], [28666, 78.1, 254830, 'Iceland', 1990], [1777, 57.7, 870601776, 'India', 1990], [29550, 79.1, 122249285, 'Japan', 1990], [2076, 67.9, 20194354, 'North Korea', 1990], [12087, 72, 42972254, 'South Korea', 1990], [24021, 75.4, 3397534, 'New Zealand', 1990], [43296, 76.8, 4240375, 'Norway', 1990], [10088, 70.8, 38195258, 'Poland', 1990], [19349, 69.6, 147568552, 'Russia', 1990], [10670, 67.3, 53994605, 'Turkey', 1990], [26424, 75.7, 57110117, 'United Kingdom', 1990], [37062, 75.4, 252847810, 'United States', 1990]],
  50. [[44056, 81.8, 23968973, 'Australia', 2015], [43294, 81.7, 35939927, 'Canada', 2015], [13334, 76.9, 1376048943, 'China', 2015], [21291, 78.5, 11389562, 'Cuba', 2015], [38923, 80.8, 5503457, 'Finland', 2015], [37599, 81.9, 64395345, 'France', 2015], [44053, 81.1, 80688545, 'Germany', 2015], [42182, 82.8, 329425, 'Iceland', 2015], [5903, 66.8, 1311050527, 'India', 2015], [36162, 83.5, 126573481, 'Japan', 2015], [1390, 71.4, 25155317, 'North Korea', 2015], [34644, 80.7, 50293439, 'South Korea', 2015], [34186, 80.6, 4528526, 'New Zealand', 2015], [64304, 81.6, 5210967, 'Norway', 2015], [24787, 77.3, 38611794, 'Poland', 2015], [23038, 73.13, 143456918, 'Russia', 2015], [19360, 76.5, 78665830, 'Turkey', 2015], [38225, 81.4, 64715810, 'United Kingdom', 2015], [53354, 79.1, 321773631, 'United States', 2015]]
  51. ]
  52. this.chart.setOption({
  53. title: {
  54. text: '1990 与 2015 年各国家人均寿命与 GDP'
  55. },
  56. legend: {
  57. right: 10,
  58. data: ['1990', '2015']
  59. },
  60. xAxis: {
  61. splitLine: {
  62. lineStyle: {
  63. type: 'dashed'
  64. }
  65. }
  66. },
  67. yAxis: {
  68. splitLine: {
  69. lineStyle: {
  70. type: 'dashed'
  71. }
  72. },
  73. scale: true
  74. },
  75. series: [{
  76. name: '1990',
  77. data: data[0],
  78. type: 'scatter',
  79. symbolSize: function(data) {
  80. return Math.sqrt(data[2]) / 5e2
  81. },
  82. label: {
  83. emphasis: {
  84. show: true,
  85. formatter: function(param) {
  86. return param.data[3]
  87. },
  88. position: 'top'
  89. }
  90. },
  91. itemStyle: {
  92. normal: {
  93. shadowBlur: 10,
  94. shadowColor: 'rgba(120, 36, 50, 0.5)',
  95. shadowOffsetY: 5,
  96. color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
  97. offset: 0,
  98. color: 'rgb(251, 118, 123)'
  99. }, {
  100. offset: 1,
  101. color: 'rgb(204, 46, 72)'
  102. }])
  103. }
  104. }
  105. }, {
  106. name: '2015',
  107. data: data[1],
  108. type: 'scatter',
  109. symbolSize: function(data) {
  110. return Math.sqrt(data[2]) / 5e2
  111. },
  112. label: {
  113. emphasis: {
  114. show: true,
  115. formatter: function(param) {
  116. return param.data[3]
  117. },
  118. position: 'top'
  119. }
  120. },
  121. itemStyle: {
  122. normal: {
  123. shadowBlur: 10,
  124. shadowColor: 'rgba(25, 100, 150, 0.5)',
  125. shadowOffsetY: 5,
  126. color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
  127. offset: 0,
  128. color: 'rgb(129, 227, 238)'
  129. }, {
  130. offset: 1,
  131. color: 'rgb(25, 183, 207)'
  132. }])
  133. }
  134. }
  135. }]
  136. })
  137. }
  138. }
  139. }
  140. </script>