1
0

areaDeviceData.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import React, { useEffect, useRef } from 'react';
  2. import styles from './areaDeviceData.less';
  3. import * as echarts from 'echarts';
  4. /**
  5. * 地区设备数量统计
  6. * @constructor
  7. */
  8. const AreaDeviceData: React.FC = () => {
  9. const chartRef: any = useRef();
  10. const xData = ['济南', '菏泽', '聊城', '青岛', '潍坊'];
  11. const yData = [120, 1230, 425, 767, 1000];
  12. useEffect(() => {
  13. const myChart = echarts.init(chartRef.current);
  14. const options = {
  15. // backgroundColor: '#061326',
  16. grid: {
  17. top: '25%',
  18. left: '-5%',
  19. bottom: '5%',
  20. right: '5%',
  21. containLabel: true,
  22. },
  23. tooltip: {
  24. show: true,
  25. },
  26. animation: false,
  27. xAxis: [
  28. {
  29. type: 'category',
  30. data: xData,
  31. axisTick: {
  32. alignWithLabel: true,
  33. },
  34. nameTextStyle: {
  35. color: '#82b0ec',
  36. },
  37. axisLine: {
  38. show: false,
  39. lineStyle: {
  40. color: '#82b0ec',
  41. },
  42. },
  43. axisLabel: {
  44. textStyle: {
  45. color: '#fff',
  46. },
  47. margin: 30,
  48. },
  49. },
  50. ],
  51. yAxis: [
  52. {
  53. show: false,
  54. type: 'value',
  55. axisLabel: {
  56. textStyle: {
  57. color: '#fff',
  58. },
  59. },
  60. splitLine: {
  61. lineStyle: {
  62. color: '#0c2c5a',
  63. },
  64. },
  65. axisLine: {
  66. show: false,
  67. },
  68. },
  69. ],
  70. series: [
  71. {
  72. name: '',
  73. type: 'pictorialBar',
  74. symbolSize: [40, 10],
  75. symbolOffset: [0, -6], // 上部椭圆
  76. symbolPosition: 'end',
  77. z: 12,
  78. // "barWidth": "0",
  79. label: {
  80. normal: {
  81. show: true,
  82. position: 'top',
  83. // "formatter": "{c}%"
  84. fontSize: 15,
  85. fontWeight: 'bold',
  86. color: '#34DCFF',
  87. },
  88. },
  89. color: '#2DB1EF',
  90. data: yData,
  91. },
  92. {
  93. name: '',
  94. type: 'pictorialBar',
  95. symbolSize: [40, 10],
  96. symbolOffset: [0, 7], // 下部椭圆
  97. // "barWidth": "20",
  98. z: 12,
  99. color: '#2DB1EF',
  100. data: yData,
  101. },
  102. {
  103. name: '',
  104. type: 'pictorialBar',
  105. symbolSize: function (d: number) {
  106. return d > 0 ? [50, 15] : [0, 0];
  107. },
  108. symbolOffset: [0, 12], // 下部内环
  109. z: 10,
  110. itemStyle: {
  111. normal: {
  112. color: 'transparent',
  113. borderColor: '#2EA9E5',
  114. borderType: 'solid',
  115. borderWidth: 1,
  116. },
  117. },
  118. data: yData,
  119. },
  120. {
  121. name: '',
  122. type: 'pictorialBar',
  123. symbolSize: [70, 20],
  124. symbolOffset: [0, 18], // 下部外环
  125. z: 10,
  126. itemStyle: {
  127. normal: {
  128. color: 'transparent',
  129. borderColor: '#19465D',
  130. borderType: 'solid',
  131. borderWidth: 2,
  132. },
  133. },
  134. data: yData,
  135. },
  136. {
  137. type: 'bar',
  138. //silent: true,
  139. barWidth: '40',
  140. barGap: '10%', // Make series be overlap
  141. barCateGoryGap: '10%',
  142. itemStyle: {
  143. normal: {
  144. color: new echarts.graphic.LinearGradient(0, 0, 0, 0.7, [
  145. {
  146. offset: 0,
  147. color: '#38B2E6',
  148. },
  149. {
  150. offset: 1,
  151. color: '#0B3147',
  152. },
  153. ]),
  154. opacity: 0.8,
  155. },
  156. },
  157. data: yData,
  158. },
  159. ],
  160. };
  161. myChart.setOption(options, true);
  162. // 组件卸载
  163. return () => {
  164. myChart.dispose();
  165. };
  166. }, []);
  167. return (
  168. <div className={styles.container}>
  169. <div ref={chartRef} className={styles.areaData} />
  170. </div>
  171. );
  172. };
  173. export default AreaDeviceData;