echartLine.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <template>
  2. <div class="echartLine">
  3. <div class="line" ref="line"></div>
  4. </div>
  5. </template>
  6. <script lang="ts" setup>
  7. import { defineProps, ref, nextTick, reactive, watch, } from 'vue';
  8. import * as echarts from 'echarts';
  9. let props = defineProps({
  10. echartDataGq: {
  11. type: Object,
  12. },
  13. maxY: {
  14. type: Number
  15. },
  16. echartDw: {
  17. type: String
  18. },
  19. echartDw1:{
  20. type:String,
  21. }
  22. });
  23. //获取dom元素节点
  24. let line = ref<any>();
  25. let echartDataGqs = reactive({})
  26. watch(
  27. () => props.echartDataGq,
  28. (data) => {
  29. echartDataGqs = Object.assign({}, data)
  30. getOption();
  31. },
  32. { immediate: true, deep: true }
  33. );
  34. function getOption() {
  35. nextTick(() => {
  36. let myChart = echarts.init(line.value);
  37. let option = {
  38. grid: {
  39. top: '15%',
  40. left: '2%',
  41. bottom: '6%',
  42. right: '2%',
  43. containLabel: true,
  44. },
  45. tooltip: {
  46. trigger: 'item',
  47. backgroundColor: 'rgba(0, 0, 0, .6)',
  48. textStyle: {
  49. color: '#fff',
  50. fontSize: 12,
  51. },
  52. },
  53. legend: {
  54. align: 'left',
  55. right: 'center',
  56. top: '0%',
  57. type: 'plain',
  58. textStyle: {
  59. color: '#7ec7ff',
  60. fontSize: 14,
  61. },
  62. // icon:'rect',
  63. itemGap: 25,
  64. itemWidth: 18,
  65. 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',
  66. data: [
  67. {
  68. name: echartDataGqs.maxData ? echartDataGqs.maxData.lengedData : '',
  69. },
  70. {
  71. name: echartDataGqs.minData ? echartDataGqs.minData.lengedData : '',
  72. },
  73. {
  74. name:echartDataGqs.aveValue ? echartDataGqs.aveValue.lengedData : ''
  75. }
  76. ],
  77. },
  78. xAxis: [
  79. {
  80. type: 'category',
  81. boundaryGap: false,
  82. axisLabel: {
  83. // formatter: '{value}',
  84. fontSize: 14,
  85. margin: 20,
  86. textStyle: {
  87. color: '#b3b8cc',
  88. },
  89. formatter: function (params) {
  90. let newParamsName = ref('') // 最终拼接成的字符串
  91. let paramsNameNumber = ref(params.length) // 实际标签的个数
  92. let provideNumber = ref(10) // 每行能显示的字的个数
  93. let rowNumber = Math.ceil(paramsNameNumber.value / provideNumber.value) // 换行的话,需要显示几行,向上取整
  94. /**
  95. * 判断标签的个数是否大于规定的个数, 如果大于,则进行换行处理 如果不大于,即等于或小于,就返回原标签
  96. */
  97. // 条件等同于rowNumber>1
  98. if (paramsNameNumber.value > provideNumber.value) {
  99. /** 循环每一行,p表示行 */
  100. for (var p = 0; p < rowNumber; p++) {
  101. var tempStr = '' // 表示每一次截取的字符串
  102. var start = p * provideNumber.value // 开始截取的位置
  103. var end = start + provideNumber.value // 结束截取的位置
  104. // 此处特殊处理最后一行的索引值
  105. if (p == rowNumber - 1) {
  106. // 最后一次不换行
  107. tempStr = params.substring(start, paramsNameNumber.value)
  108. } else {
  109. // 每一次拼接字符串并换行
  110. tempStr = params.substring(start, end) + '\n'
  111. }
  112. newParamsName.value += tempStr // 最终拼成的字符串
  113. }
  114. } else {
  115. // 将旧标签的值赋给新标签
  116. newParamsName.value = params
  117. }
  118. //将最终的字符串返回
  119. return newParamsName.value
  120. }
  121. },
  122. axisLine: {
  123. lineStyle: {
  124. color: 'rgba(14, 53, 95)',
  125. },
  126. },
  127. splitLine: {
  128. show: false,
  129. // lineStyle: {
  130. // color: '#243753',
  131. // },
  132. },
  133. axisTick: {
  134. show: false,
  135. },
  136. data: echartDataGqs.xData ? echartDataGqs.xData : [],
  137. },
  138. ],
  139. yAxis: [
  140. {
  141. boundaryGap: false,
  142. type: 'value',
  143. max: props.maxY,
  144. axisLabel: {
  145. textStyle: {
  146. color: '#b3b8cc',
  147. },
  148. formatter:'{value}'
  149. },
  150. name: props.echartDw,
  151. nameTextStyle: {
  152. color: '#fff',
  153. fontSize: 12,
  154. lineHeight: 10,
  155. },
  156. splitLine: {
  157. lineStyle: {
  158. color: 'rgba(14, 53, 95)',
  159. },
  160. },
  161. axisLine: {
  162. show: true,
  163. lineStyle: {
  164. color: 'rgba(14, 53, 95)',
  165. },
  166. },
  167. axisTick: {
  168. show: false,
  169. },
  170. },
  171. {
  172. boundaryGap: false,
  173. type: 'value',
  174. max: props.maxY,
  175. axisLabel: {
  176. textStyle: {
  177. color: '#b3b8cc',
  178. },
  179. formatter:'{value}'
  180. },
  181. name: props.echartDw1,
  182. nameTextStyle: {
  183. color: '#fff',
  184. fontSize: 12,
  185. lineHeight: 10,
  186. },
  187. splitLine: {
  188. lineStyle: {
  189. color: 'rgba(14, 53, 95)',
  190. },
  191. },
  192. axisLine: {
  193. show: true,
  194. lineStyle: {
  195. color: 'rgba(14, 53, 95)',
  196. },
  197. },
  198. axisTick: {
  199. show: false,
  200. },
  201. },
  202. ],
  203. series: [
  204. {
  205. name: echartDataGqs.maxData ? echartDataGqs.maxData.lengedData : '',
  206. type: 'line',
  207. smooth: true,
  208. showSymbol: true,
  209. symbolSize: 8,
  210. zlevel: 3,
  211. itemStyle: {
  212. color: '#19a3df',
  213. borderColor: '#a3c8d8',
  214. },
  215. lineStyle: {
  216. normal: {
  217. width: 2,
  218. color: '#19a3df',
  219. },
  220. },
  221. data: echartDataGqs.maxData ? echartDataGqs.maxData.data : [],
  222. },
  223. {
  224. name: echartDataGqs.minData ? echartDataGqs.minData.lengedData : '',
  225. type: 'line',
  226. smooth: true,
  227. showSymbol: true,
  228. symbolSize: 8,
  229. zlevel: 3,
  230. itemStyle: {
  231. color: '#4fffad',
  232. borderColor: '#a3c8d8',
  233. },
  234. lineStyle: {
  235. normal: {
  236. width: 2,
  237. color: '#4fffad',
  238. },
  239. },
  240. data: echartDataGqs.minData ? echartDataGqs.minData.data : [],
  241. },
  242. {
  243. name: echartDataGqs.aveValue ? echartDataGqs.aveValue.lengedData : '',
  244. type: 'line',
  245. smooth: true,
  246. showSymbol: true,
  247. symbolSize: 8,
  248. zlevel: 3,
  249. itemStyle: {
  250. color: '#fc8452',
  251. borderColor: '#a3c8d8',
  252. },
  253. lineStyle: {
  254. normal: {
  255. width: 2,
  256. color: '#fc8452',
  257. },
  258. },
  259. data: echartDataGqs.aveValue ? echartDataGqs.aveValue.data : [],
  260. },
  261. ],
  262. };
  263. myChart.setOption(option);
  264. window.onresize = function () {
  265. myChart.resize();
  266. };
  267. });
  268. }
  269. </script>
  270. <style scoped lang="less">
  271. .echartLine {
  272. width: 100%;
  273. height: 100%;
  274. .line {
  275. width: 100%;
  276. height: 100%;
  277. }
  278. }
  279. </style>