echartLine.vue 9.5 KB

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