chartD.vue 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <div class="pieView">
  3. <div style="height:14%;line-height:30px;text-align: left;padding-left: 10px;padding-top: 10px; margin-bottom: -50px; color: white;">
  4. {{ info.title || "" }}
  5. </div>
  6. <div style="width: 100%; height: 95%; display: inline-block; overflow: hidden">
  7. <div :id="info.id" style="width: 100%; height: 100%; overflow: hidden;padding-right: 10px;" />
  8. </div>
  9. </div>
  10. </template>
  11. <script>
  12. import * as echarts from 'echarts'
  13. export default {
  14. props: {
  15. info: {
  16. type: Object,
  17. default: function () {
  18. return {}
  19. }
  20. }
  21. },
  22. data () {
  23. return {
  24. showChart: true,
  25. option: {
  26. grid: {
  27. right: 50, // 距离容器右边界
  28. bottom: 70 // 距离容器下边界
  29. },
  30. tooltip: {
  31. trigger: 'axis',
  32. axisPointer: {
  33. type: 'cross',
  34. crossStyle: {
  35. color: '#999'
  36. }
  37. }
  38. },
  39. toolbox: {
  40. show: true,
  41. feature: {
  42. dataView: { show: true, readOnly: false,
  43. optionToContent: function (opt) {
  44. var axisData = opt.xAxis[0].data// x轴作为条件,y轴需改成yAxis[0].data;
  45. var series = opt.series
  46. var tdHeads = '<td style="padding:0 10px">年份</td>'
  47. series.forEach(function (item) {
  48. tdHeads += '<td style="padding: 0 10px">' + (item.name.includes('率') ? (item.name + '(%)') : item.name) + '</td>'
  49. })
  50. var table = '<table border="1" style="margin-left:20px;border-collapse:collapse;font-size:14px;text-align:center;color:#666"><tbody><tr>' + tdHeads + '</tr>'
  51. var tdBodys = ''
  52. for (var i = 0, l = axisData.length; i < l; i++) {
  53. for (var j = 0; j < series.length; j++) {
  54. if (typeof (series[j].data[i]) === 'object') {
  55. tdBodys += '<td>' + series[j].data[i].value + '</td>'
  56. } else {
  57. tdBodys += '<td>' + series[j].data[i] + '</td>'
  58. }
  59. }
  60. table += '<tr><td style="padding: 0 10px">' + axisData[i] + '</td>' + tdBodys + '</tr>'
  61. tdBodys = ''
  62. }
  63. table += '</tbody></table>'
  64. return table
  65. }
  66. },
  67. // magicType: { show: true, type: ['line', 'bar'] },
  68. // restore: { show: true },
  69. saveAsImage: { show: true }
  70. },
  71. iconStyle: {
  72. borderColor: 'white'
  73. }
  74. },
  75. legend: {
  76. orient: 'vertical',
  77. left: 'center',
  78. bottom: 'bottom',
  79. data: [],
  80. textStyle: {
  81. color: '#ffff',
  82. fontSize: 12
  83. }
  84. },
  85. xAxis: [
  86. {
  87. type: 'category',
  88. data: [],
  89. axisPointer: {
  90. type: 'shadow'
  91. }
  92. }
  93. ],
  94. yAxis: [
  95. {
  96. type: 'value',
  97. name: '个数',
  98. min: 0,
  99. // max: 100,
  100. // interval: 20,
  101. axisLabel: {
  102. formatter: '{value}'
  103. }
  104. },
  105. {
  106. type: 'value',
  107. name: '百分比',
  108. min: 0,
  109. max: 100,
  110. // interval: 20,
  111. axisLabel: {
  112. formatter: '{value} %'
  113. }
  114. }
  115. ],
  116. series: [
  117. {
  118. barMaxWidth: 30,
  119. name: '',
  120. type: 'bar',
  121. tooltip: {
  122. valueFormatter: function (value) {
  123. return value
  124. }
  125. },
  126. data: []
  127. },
  128. {
  129. barMaxWidth: 30,
  130. name: '',
  131. type: 'bar',
  132. tooltip: {
  133. valueFormatter: function (value) {
  134. return value
  135. }
  136. },
  137. data: []
  138. },
  139. {
  140. barMaxWidth: 30,
  141. name: '',
  142. type: 'bar',
  143. tooltip: {
  144. valueFormatter: function (value) {
  145. return value
  146. }
  147. },
  148. data: []
  149. },
  150. {
  151. barMaxWidth: 30,
  152. name: '',
  153. type: 'bar',
  154. tooltip: {
  155. valueFormatter: function (value) {
  156. return value
  157. }
  158. },
  159. data: []
  160. },
  161. {
  162. barMaxWidth: 30,
  163. name: '',
  164. type: 'line',
  165. yAxisIndex: 1,
  166. tooltip: {
  167. valueFormatter: function (value) {
  168. return value + ' %'
  169. }
  170. },
  171. data: []
  172. },
  173. {
  174. barMaxWidth: 30,
  175. name: '',
  176. type: 'line',
  177. yAxisIndex: 1,
  178. tooltip: {
  179. valueFormatter: function (value) {
  180. return value + ' %'
  181. }
  182. },
  183. data: []
  184. },
  185. {
  186. barMaxWidth: 30,
  187. name: '',
  188. type: 'line',
  189. yAxisIndex: 1,
  190. tooltip: {
  191. valueFormatter: function (value) {
  192. return value + ' %'
  193. }
  194. },
  195. data: []
  196. }
  197. ]
  198. }
  199. }
  200. },
  201. watch: {
  202. info: {
  203. handler (newVal, oldVal) {
  204. this.getMiddleLeft()
  205. },
  206. deep: true
  207. }
  208. },
  209. mounted () {
  210. const this_ = this
  211. this.$nextTick(() => {
  212. this_.getMiddleLeft()
  213. })
  214. },
  215. methods: {
  216. getMiddleLeft () {
  217. this.option.xAxis[0].data = this.info.yearArr
  218. this.option.legend.data = ['国家级开展数', '国家级参加数', '省级开展数', '省级参加数', '国家级参加率', '省级参加率', '总参加率']
  219. this.option.series[0].name = '国家级开展数'
  220. this.option.series[1].name = '国家级参加数'
  221. this.option.series[2].name = '省级开展数'
  222. this.option.series[3].name = '省级参加数'
  223. this.option.series[4].name = '国家级参加率'
  224. this.option.series[5].name = '省级参加率'
  225. this.option.series[6].name = '总参加率'
  226. this.option.series[0].data = this.info.list1
  227. this.option.series[1].data = this.info.list2
  228. this.option.series[2].data = this.info.list3
  229. this.option.series[3].data = this.info.list4
  230. this.option.series[4].data = this.info.list5
  231. this.option.series[5].data = this.info.list6
  232. this.option.series[6].data = this.info.list7
  233. // this.option.series[2].data = [1, 1, 1, 1, 1]
  234. const chartDom = document.getElementById(this.info.id)
  235. var myChart = echarts.init(chartDom)
  236. setTimeout(() => {
  237. myChart.setOption(this.option)
  238. }, 2000)
  239. }
  240. }
  241. }
  242. </script>
  243. <style lang="scss" scoped>
  244. .pieView {
  245. width: 100%;
  246. height: 100%;
  247. overflow: hidden;
  248. background-color: rgba(6, 30, 93, 0.5);
  249. }
  250. </style>