TotalMap.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <div id="map-wrapper" style="width:100%; height: 100%;"/>
  3. </template>
  4. <script>
  5. export default {
  6. name: 'TotalMap',
  7. data: function () {
  8. return {
  9. provinceCountDatas: [],
  10. provinces: [
  11. '北京市',
  12. '天津市',
  13. '河北省',
  14. '山西省',
  15. '内蒙古自治区',
  16. '辽宁省',
  17. '吉林省',
  18. '黑龙江省',
  19. '上海市',
  20. '江苏省',
  21. '浙江省',
  22. '安徽省',
  23. '福建省',
  24. '江西省',
  25. '山东省',
  26. '河南省',
  27. '湖北省',
  28. '湖南省',
  29. '广东省',
  30. '广西壮族自治区',
  31. '海南省',
  32. '重庆市',
  33. '四川省',
  34. '贵州省',
  35. '云南省',
  36. '西藏自治区',
  37. '陕西省',
  38. '甘肃省',
  39. '青海省',
  40. '宁夏回族自治区',
  41. '新疆自治区',
  42. '台湾省',
  43. '香港特别行政区',
  44. '澳门特别行政区'
  45. ]
  46. }
  47. },
  48. props: {
  49. provinceCounts: {
  50. type: Array
  51. }
  52. },
  53. watch: {
  54. provinceCounts (newVal, oldVal) {
  55. this.provinceCountDatas = []
  56. let provinceCountMap = {}
  57. newVal.forEach(provinceCountInfo => {
  58. let countInfo = {}
  59. countInfo['testerCount'] = provinceCountInfo.testerCount
  60. countInfo['companyCount'] = provinceCountInfo.companyCount
  61. countInfo['orgCount'] = provinceCountInfo.orgCount
  62. countInfo['projectCount'] = provinceCountInfo.projectCount
  63. countInfo['taskCount'] = provinceCountInfo.taskCount
  64. provinceCountMap[provinceCountInfo.name] = countInfo
  65. })
  66. this.provinces.forEach(province => {
  67. let countInfo = provinceCountMap[province]
  68. if (!countInfo) {
  69. countInfo = {'testerCount': 0, 'companyCount': 0, 'orgCount': 0, 'projectCount': 0, 'taskCount': 0}
  70. }
  71. this.provinceCountDatas.push({'name': this.changeProvinceName(province), 'value': countInfo})
  72. })
  73. this.initChart()
  74. }
  75. },
  76. mounted () {
  77. this.$nextTick(() => this.initChart())
  78. },
  79. methods: {
  80. changeProvinceName (provinceName) {
  81. if (provinceName.indexOf('内蒙古') != -1) {
  82. return '内蒙古'
  83. } else if (provinceName.indexOf('广西') != -1) {
  84. return '广西'
  85. } else if (provinceName.indexOf('西藏') != -1) {
  86. return '西藏'
  87. } else if (provinceName.indexOf('宁夏') != -1) {
  88. return '宁夏'
  89. } else if (provinceName.indexOf('新疆') != -1) {
  90. return '新疆'
  91. } else if (provinceName.indexOf('香港') != -1) {
  92. return '香港'
  93. } else if (provinceName.indexOf('澳门') != -1) {
  94. return '澳门'
  95. } else {
  96. return provinceName.substring(0, provinceName.length - 1)
  97. }
  98. },
  99. initChart () {
  100. // 基于准备好的dom,初始化echarts实例
  101. const chart = this.$echarts.init(document.getElementById('map-wrapper'))
  102. // 地图展现数据
  103. const series = [
  104. {
  105. type: 'map',
  106. map: 'china',
  107. label: {
  108. show: true,
  109. textStyle: {
  110. fontSize: 12,
  111. color: '#dddddd'
  112. }
  113. },
  114. itemStyle: {
  115. // normal: {
  116. // color: '#062031',
  117. // borderWidth: 1.1,
  118. // borderColor: '#43D0D6'
  119. // },
  120. emphasis: {
  121. areaColor: '#43D0D6'
  122. },
  123. areaColor: '#117a8b'
  124. },
  125. data: this.provinceCountDatas
  126. }
  127. ]
  128. const option = {
  129. backgroundColor: 'transparent',
  130. tooltip: {
  131. trigger: 'item',
  132. formatter: function (params, ticket, callback) {
  133. return params.name + '<br/>众测工人:' + params.data.value.testerCount + '<br/>注册公司:' + params.data.value.companyCount +
  134. '<br/>众测机构:' + params.data.value.orgCount + '<br/>项目发包:' + params.data.value.projectCount + '<br/>任务发包:' + params.data.value.taskCount
  135. },
  136. textStyle: {
  137. fontSize: 10
  138. }
  139. },
  140. series: series
  141. }
  142. chart.setOption(option)
  143. window.onresize = () => {
  144. // 这里使用箭头函数,避免this指向问题
  145. chart && chart.resize()
  146. }
  147. }
  148. }
  149. }
  150. </script>
  151. <style scoped>
  152. </style>