left-top.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <template>
  2. <v-chart class="chart" :option="option" />
  3. </template>
  4. <script setup lang="ts">
  5. import { onMounted, ref, onUnmounted, watch } from "vue";
  6. import signalR from "@/utils/signalR";
  7. const props = defineProps({
  8. content: {
  9. type: Array,
  10. default: () => [],
  11. },
  12. });
  13. const option = ref({});
  14. const setOption = async (newData: any) => {
  15. option.value = {
  16. tooltip: {
  17. trigger: "axis",
  18. backgroundColor: "rgba(0,0,0,.6)",
  19. borderColor: "rgba(147, 235, 248, .8)",
  20. textStyle: {
  21. color: "#FFF",
  22. },
  23. },
  24. legend: {
  25. data: ["呼入", "外呼"],
  26. textStyle: {
  27. color: "#fff",
  28. },
  29. top: "0",
  30. },
  31. grid: {
  32. left: "40px",
  33. right: "10px",
  34. bottom: "30px",
  35. top: "30px",
  36. },
  37. xAxis: {
  38. data: newData.xData,
  39. axisLine: {
  40. lineStyle: {
  41. color: "#fff",
  42. },
  43. },
  44. axisTick: {
  45. show: false,
  46. },
  47. },
  48. yAxis: [
  49. {
  50. splitLine: { show: false },
  51. axisLine: {
  52. lineStyle: {
  53. color: "#fff",
  54. },
  55. },
  56. axisLabel: {
  57. formatter: "{value}",
  58. },
  59. },
  60. {
  61. splitLine: { show: false },
  62. axisLine: {
  63. lineStyle: {
  64. color: "#fff",
  65. },
  66. },
  67. axisLabel: {
  68. formatter: "{value}% ",
  69. },
  70. },
  71. ],
  72. series: [
  73. {
  74. name: "呼入",
  75. type: "line",
  76. symbol: "circle", //数据交叉点样式
  77. areaStyle: {
  78. //添加背景颜色
  79. opacity: 0.3, //透明度
  80. },
  81. itemStyle: {
  82. borderRadius: 5,
  83. },
  84. smooth: true,
  85. data: newData.inData,
  86. },
  87. {
  88. name: "外呼",
  89. type: "line",
  90. symbol: "circle", //数据交叉点样式
  91. areaStyle: {
  92. //添加背景颜色
  93. opacity: 0.3, //透明度
  94. },
  95. itemStyle: {
  96. borderRadius: 5,
  97. },
  98. smooth: true,
  99. z: -12,
  100. data: newData.outData,
  101. },
  102. ],
  103. };
  104. };
  105. watch(
  106. () => props.content,
  107. (val: any) => {
  108. let data = {
  109. xData: [],
  110. inData: [],
  111. outData: [],
  112. };
  113. val.forEach((item: any) => {
  114. data.xData.push(item.time);
  115. data.inData.push(item.in);
  116. data.outData.push(item.out);
  117. });
  118. setTimeout(() => {
  119. setOption(data);
  120. }, 100);
  121. }
  122. );
  123. onMounted(() => {
  124. signalR.SR.on("BsSeatStateDataShowArea1", (res: any) => {
  125. let data = {
  126. xData: [],
  127. inData: [],
  128. outData: [],
  129. };
  130. res.forEach((item: any) => {
  131. data.xData.push(item.time);
  132. data.inData.push(item.in);
  133. data.outData.push(item.out);
  134. });
  135. setTimeout(() => {
  136. setOption(data);
  137. }, 100);
  138. });
  139. });
  140. onUnmounted(() => {
  141. signalR.SR.off("BsSeatStateDataShowArea1");
  142. });
  143. </script>
  144. <style scoped lang="scss">
  145. .left-top {
  146. width: 100%;
  147. height: 100%;
  148. }
  149. </style>