loopLineChart.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <div shadow="never" class="homeBoxCard" v-loading="loading">
  3. <div class="height400" ref="lineChartBanlance" />
  4. </div>
  5. </template>
  6. <script>
  7. import { defineComponent, onMounted, ref, watch } from 'vue'
  8. // import { useStore } from 'vuex'
  9. import * as echarts from 'echarts'
  10. export default defineComponent({
  11. name: 'LoopLineChart',
  12. props: {
  13. num: Number,
  14. unit:String
  15. },
  16. setup(props) {
  17. // const store = useStore()
  18. const lineChartBanlance = ref(null)
  19. // 读取数据 func
  20. const loading = ref(true)
  21. const getData = async () => {
  22. loading.value = false
  23. }
  24. function echarts2() {
  25. let myChart = echarts.init(lineChartBanlance.value)
  26. // 绘制图表
  27. myChart.setOption({
  28. // backgroundColor: "pink",
  29. color: ['#f2e251', '#40ABFE', '#fe8161'],
  30. legend: {
  31. icon: 'rect',
  32. // bottom: "0",
  33. right: 40,
  34. data: ['A', 'B', 'C'],
  35. },
  36. // toolbox: {
  37. // show: false,
  38. // },
  39. tooltip: {
  40. // trigger: 'axis',
  41. // axisPointer: { type: 'cross' },
  42. trigger: 'axis',
  43. formatter: function (params) {
  44. var relVal = params[0].name
  45. for (var i = 0, l = params.length; i < l; i++) {
  46. relVal +=
  47. '<br/>' + params[i].seriesName + ' : ' + params[i].value + props.unit
  48. }
  49. return relVal
  50. },
  51. },
  52. grid: {
  53. left: '20',
  54. right: '40',
  55. top: '40',
  56. bottom: '20',
  57. containLabel: true,
  58. },
  59. xAxis: {
  60. axisLabel: {
  61. color: '#444',
  62. fontSize: 14,
  63. },
  64. /*改变xy轴颜色*/
  65. axisLine: {
  66. lineStyle: {
  67. color: '#444',
  68. width: 1, //这里是为了突出显示加上的
  69. },
  70. },
  71. boundaryGap: false,
  72. data:
  73. props.num == 0
  74. ? [
  75. '总谐波',
  76. '3次谐波',
  77. '5次谐波',
  78. '7次谐波',
  79. '9次谐波',
  80. '11次谐波',
  81. '13次谐波',
  82. '15次谐波',
  83. '17次谐波',
  84. '19次谐波',
  85. '21次谐波',
  86. '23次谐波',
  87. '25次谐波',
  88. '27次谐波',
  89. '29次谐波',
  90. '31次谐波',
  91. ]
  92. : [
  93. '2总谐波',
  94. '4次谐波',
  95. '6次谐波',
  96. '8次谐波',
  97. '10次谐波',
  98. '12次谐波',
  99. '14次谐波',
  100. '16次谐波',
  101. '18次谐波',
  102. '20次谐波',
  103. '22次谐波',
  104. '24次谐波',
  105. '26次谐波',
  106. '28次谐波',
  107. '30次谐波',
  108. ],
  109. },
  110. yAxis: {
  111. // name: "A",
  112. nameTextStyle: {
  113. color: '#707070',
  114. fontSize: 14,
  115. },
  116. axisLabel: {
  117. color: '#444',
  118. fontSize: 14,
  119. },
  120. axisLine: {
  121. symbolOffset: [0, 4],
  122. lineStyle: { color: '#444' },
  123. },
  124. splitArea: {
  125. show: false,
  126. },
  127. },
  128. series: [
  129. {
  130. name: 'A',
  131. type: 'line',
  132. symbolSize: 7,
  133. smooth: false,
  134. data: [
  135. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  136. 0, 0, 0, 0, 0, 0,
  137. ],
  138. },
  139. {
  140. name: 'B',
  141. type: 'line',
  142. symbolSize: 7,
  143. smooth: false,
  144. data: [
  145. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  146. 0, 0, 0, 0, 0, 0,
  147. ],
  148. },
  149. {
  150. name: 'C',
  151. type: 'line',
  152. symbolSize: 7,
  153. smooth: false,
  154. data: [
  155. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  156. 0, 0, 0, 0, 0, 0,
  157. ],
  158. },
  159. ],
  160. })
  161. window.addEventListener('resize', () => {
  162. myChart.resize()
  163. })
  164. }
  165. const writeValue = (val) => {
  166. val
  167. getData()
  168. echarts2()
  169. }
  170. //监听变化
  171. watch(
  172. () => props.num,
  173. (newVal, oldVal, clear) => {
  174. // 执行异步任务,并得到关闭异步任务的 id
  175. newVal
  176. let id = writeValue(newVal, oldVal)
  177. // 如果 watch 监听被重复执行了,则会先清除上次未完成的异步任务
  178. clear(() => clearTimeout(id))
  179. },
  180. { lazy: true }
  181. )
  182. onMounted(() => {
  183. getData()
  184. echarts2()
  185. })
  186. return {
  187. lineChartBanlance,
  188. loading,
  189. echarts2,
  190. }
  191. },
  192. })
  193. </script>
  194. <style lang="scss" scoped>
  195. .homeBoxCard {
  196. height: 100%;
  197. margin-bottom: 24px;
  198. .height400 {
  199. height: 80%;
  200. }
  201. }
  202. </style>