echartLine2.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. <template>
  2. <div class="echart-work">
  3. <div ref="work" class="work-box"></div>
  4. </div>
  5. </template>
  6. <script lang="ts" setup>
  7. import * as echarts from 'echarts';
  8. import { ref, nextTick, reactive, watch, defineProps } from 'vue';
  9. let props = defineProps({
  10. echartDataWd: {
  11. type: Object,
  12. },
  13. });
  14. //获取dom元素节点
  15. let work = ref<any>();
  16. let echartDataWds = reactive({});
  17. watch(
  18. () => props.echartDataWd,
  19. (data) => {
  20. echartDataWds = Object.assign({}, data);
  21. getOption();
  22. },
  23. { immediate: true, deep: true }
  24. );
  25. function getOption() {
  26. nextTick(() => {
  27. const myChart = echarts.init(work.value);
  28. let option = {
  29. tooltip: {
  30. trigger: 'axis',
  31. backgroundColor: 'rgba(0, 0, 0, .6)',
  32. textStyle: {
  33. color: '#fff',
  34. fontSize: 12,
  35. },
  36. },
  37. legend: {
  38. align: 'left',
  39. right: '50%',
  40. top: '0%',
  41. type: 'plain',
  42. textStyle: {
  43. color: '#7ec7ff',
  44. fontSize: 14,
  45. },
  46. // icon:'rect',
  47. itemGap: 25,
  48. itemWidth: 18,
  49. icon: 'path://M0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v0a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z',
  50. data: [
  51. {
  52. name: echartDataWds.avgData ? echartDataWds.avgData.lengedData : '',
  53. },
  54. {
  55. name: echartDataWds.maxData ? echartDataWds.maxData.lengedData : '',
  56. },
  57. {
  58. name: echartDataWds.minData ? echartDataWds.minData.lengedData : '',
  59. },
  60. {
  61. name: echartDataWds.curData ? echartDataWds.curData.lengedData : '',
  62. },
  63. ],
  64. },
  65. grid: {
  66. top: '20%',
  67. left: '4%',
  68. right: '4%',
  69. bottom: '20%',
  70. // containLabel: true
  71. },
  72. xAxis: [
  73. {
  74. type: 'category',
  75. boundaryGap: false,
  76. axisLine: {
  77. //坐标轴轴线相关设置。数学上的x轴
  78. show: true,
  79. lineStyle: {
  80. color: '#244a94',
  81. },
  82. },
  83. axisLabel: {
  84. //坐标轴刻度标签的相关设置
  85. textStyle: {
  86. color: '#b3b8cc',
  87. padding: 5,
  88. fontSize: 14,
  89. },
  90. formatter: function (data) {
  91. return data;
  92. },
  93. },
  94. splitLine: {
  95. show: true,
  96. lineStyle: {
  97. color: '#0d2973',
  98. type: 'dashed',
  99. },
  100. },
  101. axisTick: {
  102. show: false,
  103. },
  104. data: echartDataWds.xData,
  105. },
  106. ],
  107. yAxis: [
  108. {
  109. name: '(℃)',
  110. nameTextStyle: {
  111. color: '#7ec7ff',
  112. fontSize: 14,
  113. padding: 0,
  114. },
  115. min: 0,
  116. max: 100,
  117. splitLine: {
  118. show: true,
  119. lineStyle: {
  120. color: '#0d2973',
  121. type: 'dashed',
  122. },
  123. },
  124. axisLine: {
  125. show: true,
  126. lineStyle: {
  127. color: '#244a94',
  128. },
  129. },
  130. axisLabel: {
  131. show: true,
  132. textStyle: {
  133. color: '#b3b8cc',
  134. padding: 5,
  135. },
  136. formatter: function (value) {
  137. if (value === 0) {
  138. return value;
  139. }
  140. return value;
  141. },
  142. },
  143. axisTick: {
  144. show: false,
  145. },
  146. },
  147. ],
  148. series: [
  149. {
  150. name: echartDataWds.maxData ? echartDataWds.maxData.lengedData : '',
  151. type: 'line',
  152. yAxisIndex: 0,
  153. smooth: true,
  154. showSymbol: false,
  155. lineStyle: {
  156. normal: {
  157. width: 2,
  158. color: '#4653fd', // 线条颜色
  159. },
  160. borderColor: 'rgba(0,0,0,.4)',
  161. },
  162. itemStyle: {
  163. color: '#4653fd',
  164. borderColor: '#646ace',
  165. borderWidth: 0,
  166. },
  167. data: echartDataWds.maxData ? echartDataWds.maxData.data : [],
  168. },
  169. {
  170. name: echartDataWds.minData ? echartDataWds.minData.lengedData : '',
  171. type: 'line',
  172. smooth: true,
  173. yAxisIndex: 0,
  174. showSymbol: false,
  175. lineStyle: {
  176. normal: {
  177. width: 2,
  178. color: '#46fda8', // 线条颜色
  179. },
  180. borderColor: 'rgba(0,0,0,.4)',
  181. },
  182. itemStyle: {
  183. color: '#46fda8',
  184. borderColor: '#646ace',
  185. borderWidth: 0,
  186. },
  187. data: echartDataWds.minData ? echartDataWds.minData.data : [],
  188. },
  189. {
  190. name: echartDataWds.avgData ? echartDataWds.avgData.lengedData : '',
  191. type: 'line',
  192. smooth: true,
  193. yAxisIndex: 0,
  194. showSymbol: false,
  195. lineStyle: {
  196. normal: {
  197. width: 2,
  198. color: '#1eb0fc', // 线条颜色
  199. },
  200. borderColor: 'rgba(0,0,0,.4)',
  201. },
  202. itemStyle: {
  203. color: '#1eb0fc',
  204. borderColor: '#646ace',
  205. borderWidth: 0,
  206. },
  207. data: echartDataWds.avgData ? echartDataWds.avgData.data : [],
  208. },
  209. {
  210. name: echartDataWds.curData ? echartDataWds.curData.lengedData : '',
  211. type: 'line',
  212. smooth: true,
  213. yAxisIndex: 0,
  214. showSymbol: false,
  215. lineStyle: {
  216. normal: {
  217. width: 2,
  218. color: '#1eb0fc', // 线条颜色
  219. },
  220. borderColor: 'rgba(0,0,0,.4)',
  221. },
  222. itemStyle: {
  223. color: '#1eb0fc',
  224. borderColor: '#646ace',
  225. borderWidth: 0,
  226. },
  227. data: echartDataWds.curData ? echartDataWds.curData.data : [],
  228. },
  229. ],
  230. };
  231. myChart.setOption(option);
  232. window.onresize = function () {
  233. myChart.resize();
  234. };
  235. });
  236. }
  237. </script>
  238. <style scoped lang="less">
  239. .echart-work {
  240. width: 100%;
  241. height: 100%;
  242. .work-box {
  243. width: 100%;
  244. height: 100%;
  245. }
  246. }
  247. </style>