BarChart.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <template>
  2. <div style="width: 100%;height: 100%;">
  3. <!-- 横条图 -->
  4. <div class="echartitem" style="width: 100%;height: 100%;">
  5. <div id="bargraphbar" ref="chartContainer" style="width: 100%;height: 100%;"></div>
  6. </div>
  7. </div>
  8. </template>
  9. <script setup>
  10. import { ref, onMounted, reactive } from "vue"
  11. import { RouterView, RouterLink } from "vue-router"
  12. import { request, uploadFile } from "@/utils/request"
  13. import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus"
  14. import * as echarts from "echarts"
  15. import { graphic } from "echarts/core"
  16. let myChart
  17. let vars = ref([])
  18. let vals = ref([])
  19. let series = ref([])
  20. let xdata = ref([])
  21. let chartContainer = ref(null)
  22. let chartDom = ref()
  23. let option = ref(null)
  24. let convergeDate = ref([])
  25. let curvedata = ref("")
  26. let state = reactive({
  27. instance: null
  28. })
  29. const getData = () => {}
  30. onMounted(() => {
  31. var chartDom = document.getElementById("bargraphbar")
  32. myChart = echarts.init(chartDom)
  33. setOptionfun()
  34. })
  35. const props = defineProps({
  36. BarChartshow: {
  37. type: Boolean,
  38. default: false,
  39. },
  40. });
  41. // 监听 BarChartshow 变化
  42. watch(() => props.BarChartshow, (newValue) => {
  43. if (newValue) {
  44. nextTick(() => {
  45. const chartDom = chartContainer.value;
  46. if (chartDom) {
  47. myChart = echarts.init(chartDom);
  48. myChart.resize(); // 手动调整图表大小
  49. setOptionfun(); // 设置图表配置
  50. }
  51. });
  52. }
  53. }, { immediate: true });
  54. //初始化
  55. const echatinit = () => {
  56. convergeDate.value = []
  57. series.value = []
  58. xdata.value = []
  59. }
  60. // 从websocket取数据
  61. // const getsockechart = (data) => {
  62. // curvedata.value = data;
  63. // series.value = [];
  64. // let rows = curvedata.value;
  65. // for (let i = 0; i < rows.length; i++) {
  66. // vars.value = (rows[i].vars).split(",");
  67. // vals.value = (rows[i].vals).split(" ");
  68. // let data = vals.value.map((str) => Number(str));
  69. // convergeDate.value.push(data);
  70. // xdata.value.push(rows[i].step);
  71. // }
  72. // for (let j = 0; j < vars.value.length; j++) {
  73. // let firstColumn = (convergeDate.value.map((row) => row[j]));
  74. // let item = {
  75. // name: vars.value[j],
  76. // type: 'bar',
  77. // data: firstColumn
  78. // }
  79. // series.value.push(item)
  80. // }
  81. // myChart.setOption({
  82. // legend: {
  83. // data: vars.value
  84. // },
  85. // yAxis: {
  86. // data: xdata.value,
  87. // },
  88. // series: series.value
  89. // });
  90. // }
  91. // 数据 从接口处取
  92. const getsockechart = (data) => {
  93. curvedata.value = data
  94. convergeDate.value = []
  95. series.value = []
  96. xdata.value = []
  97. let rows = JSON.parse(curvedata.value)
  98. let num = 0
  99. for (let i = 0; i < rows.length; i++) {
  100. num += 1
  101. vars.value = rows[i].vars.split(",")
  102. vals.value = rows[i].vals.split(" ")
  103. let data = vals.value.map((str) => Number(str))
  104. convergeDate.value.push(data)
  105. xdata.value.push(num)
  106. }
  107. console.log(convergeDate.value)
  108. // console.log( convergeDate.value);
  109. for (let j = 0; j < vars.value.length; j++) {
  110. let firstColumn = convergeDate.value.map((row) => row[j])
  111. let item = {
  112. name: vars.value[j],
  113. type: "bar",
  114. data: firstColumn
  115. }
  116. series.value.push(item)
  117. }
  118. myChart.setOption({
  119. legend: {
  120. data: vars.value
  121. },
  122. xAxis: {
  123. data: xdata.value
  124. },
  125. series: series.value
  126. })
  127. }
  128. const setOptionfun = () => {
  129. option.value = {
  130. title: {
  131. text: "横条图"
  132. },
  133. tooltip: {
  134. trigger: "axis",
  135. axisPointer: {
  136. type: "shadow"
  137. }
  138. },
  139. grid: {
  140. left: "3%",
  141. right: "4%",
  142. bottom: "3%",
  143. containLabel: true
  144. },
  145. legend: {
  146. data: vars.value
  147. },
  148. toolbox: {
  149. feature: {
  150. saveAsImage: {}
  151. }
  152. },
  153. xAxis: {
  154. type: "value"
  155. },
  156. yAxis: {
  157. type: "category",
  158. data: xdata.value
  159. },
  160. series: series.value
  161. }
  162. option.value && myChart.setOption(option.value)
  163. }
  164. defineExpose({ getsockechart, echatinit })
  165. </script>
  166. <style lang="scss" scoped></style>