echartLineDate.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <template>
  2. <div class="echartLine">
  3. <!-- 年月日切换 -->
  4. <div v-if="echartOption.showTime" class="radio-box">
  5. <a-radio-group v-model:value="nowData" name="radioGroup" @change="changeRadio">
  6. <a-radio value="minutes">按分钟</a-radio>
  7. <a-radio value="hours">按小时</a-radio>
  8. </a-radio-group>
  9. </div>
  10. <div class="echart-line" ref="echartLines"></div>
  11. </div>
  12. </template>
  13. <script setup lang="ts">
  14. import { nextTick, onMounted, reactive, ref, watch } from 'vue'
  15. import * as echarts from 'echarts';
  16. let props = defineProps({
  17. //图表配置项
  18. echartOption: {
  19. type: Object as any
  20. },
  21. //图表数据
  22. ecahrtData: {
  23. type: Object as any
  24. }
  25. })
  26. let echartLines = ref(null)
  27. let nowData = ref('hours')
  28. let ecahrtDatas = reactive({}) as any
  29. function getOption() {
  30. nextTick(() => {
  31. let myChart = echarts.init(echartLines.value);
  32. let option = {
  33. tooltip: props.echartOption.tooltip,
  34. grid: props.echartOption.grid,
  35. legend: props.echartOption.legend,
  36. xAxis: [{
  37. type: 'category',
  38. boundaryGap: false,
  39. axisLine: { //坐标轴轴线相关设置。数学上的x轴
  40. show: true,
  41. lineStyle: {
  42. color: 'rgba(4, 49, 79)',
  43. },
  44. },
  45. axisLabel: { //坐标轴刻度标签的相关设置
  46. textStyle: {
  47. color: '#a3a7ae',
  48. padding: 5,
  49. fontSize: 12
  50. },
  51. formatter: function (data) {
  52. return data
  53. }
  54. },
  55. splitLine: {
  56. show: false,
  57. },
  58. axisTick: {
  59. show: false,
  60. },
  61. data: ecahrtDatas.xData
  62. }],
  63. yAxis: props.echartOption.yAxis,
  64. series: props.echartOption.series.map((el, index) => {
  65. return {
  66. ...el,
  67. data: ecahrtDatas[el.data]
  68. }
  69. })
  70. };
  71. myChart.setOption(option);
  72. window.onresize = function () {
  73. myChart.resize();
  74. };
  75. });
  76. }
  77. //选项切换
  78. function changeRadio(val) {
  79. console.log(val, 'val---')
  80. nowData.value = val.target.value
  81. getFormat()
  82. }
  83. //数据格式化
  84. function getFormat() {
  85. if (nowData.value == 'hours') {
  86. ecahrtDatas.xData = ['3.26', '3.27', '3.28', '3.29', '3.30', '3.31']
  87. // ecahrtDatas.xData = ecahrtDatas.hourData.xlist
  88. // ecahrtDatas.injectionPressure = ecahrtDatas.hourData.datalist.records.map(el => el.readData.injectionPressure) || []
  89. // ecahrtDatas.flowStdInstant = ecahrtDatas.hourData.datalist.records.map(el => el.readData.flowStdInstant) || []
  90. ecahrtDatas.yData = ["20", "50", "12", "65", "30", "60", "50", "12", "65",]
  91. ecahrtDatas.yData1 = ["40", "60", "22", "85", "50", "40", "60", "22", "85",]
  92. ecahrtDatas.yData2 = ["70", "30", "42", "65", "80", "60", "30", "42", "65",]
  93. } else {
  94. ecahrtDatas.xData = ['3.26', '3.27', '3.28', '3.29', '3.30', '3.31']
  95. // ecahrtDatas.xData = ecahrtDatas.minitesData.xlist || []
  96. // ecahrtDatas.injectionPressure = ecahrtDatas.minitesData.datalist.records.map(el => el.readData.injectionPressure) || []
  97. // ecahrtDatas.flowStdInstant = ecahrtDatas.minitesData.datalist.records.map(el => el.readData.flowStdInstant) || []
  98. ecahrtDatas.yData = ["200", "500", "120", "650", "300", "600", "500", "120", "650",]
  99. ecahrtDatas.yData1 = ["400", "600", "220", "850", "500", "400", "600", "220", "850",]
  100. ecahrtDatas.yData2 = ["700", "300", "420", "650", "800", "600", "300", "420", "650",]
  101. }
  102. getOption()
  103. }
  104. watch(() => props.ecahrtData, (newV, oldV) => {
  105. if (newV) {
  106. ecahrtDatas = Object.assign({}, newV)
  107. getFormat()
  108. }
  109. }, { immediate: true, deep: true })
  110. </script>
  111. <style lang="less" scoped>
  112. .echartLine {
  113. position: relative;
  114. width: 100%;
  115. height: 100%;
  116. .radio-box {
  117. position: absolute;
  118. right: 0;
  119. top: 0%;
  120. }
  121. .echart-line {
  122. width: 100%;
  123. height: 100%;
  124. }
  125. }
  126. ::v-deep .radio-box {
  127. background-color: transparent !important;
  128. }
  129. ::v-deep .zxm-radio-inner {
  130. background-color: transparent;
  131. }
  132. ::v-deep .zxm-radio-wrapper {
  133. font-size: 12px;
  134. }
  135. ::v-deep .zxm-radio-inner {
  136. width: 10px;
  137. height: 10px;
  138. top: -2px !important;
  139. }
  140. </style>