coverageRateEcharts.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <div class="coverageRateEcharts" id="coverageRateEcharts-box">
  3. </div>
  4. </template>
  5. <script>
  6. import echarts from 'echarts'
  7. import { yearRate } from '@/api/safetyCheck/index'
  8. export default {
  9. name: 'coverageRateEcharts',
  10. data(){
  11. return{
  12. }
  13. },
  14. created(){
  15. },
  16. mounted(){
  17. this.eCharts();
  18. },
  19. methods:{
  20. //eCharts方法
  21. eCharts(){
  22. yearRate().then(response => {
  23. let myChart = this.$echarts.init(document.getElementById('coverageRateEcharts-box'));
  24. let getname = ['未检查', '已检查', '检查中']; // 课程名
  25. let getbl = [0, 0, 0]; // 比例
  26. let getNum = [0, 0, 0]; // 数量
  27. for(let i=0;i<response.data.length;i++){
  28. if(response.data[i].type == 0){
  29. if(response.data[i].rate.indexOf('%') != -1){
  30. response.data[i].rate = response.data[i].rate.split('%')[0]
  31. getbl[0] = response.data[i].rate
  32. }else{
  33. getbl[0] = response.data[i].rate
  34. }
  35. getNum[0] = response.data[i].number
  36. }else if(response.data[i].type == 2){
  37. if(response.data[i].rate.indexOf('%') != -1){
  38. response.data[i].rate = response.data[i].rate.split('%')[0]
  39. getbl[1] = response.data[i].rate
  40. }else{
  41. getbl[1] = response.data[i].rate
  42. }
  43. getNum[1] = response.data[i].number
  44. }else if(response.data[i].type == 1){
  45. if(response.data[i].rate.indexOf('%') != -1){
  46. response.data[i].rate = response.data[i].rate.split('%')[0]
  47. getbl[2] = response.data[i].rate
  48. }else{
  49. getbl[2] = response.data[i].rate
  50. }
  51. getNum[2] = response.data[i].number
  52. }
  53. }
  54. let data = [];
  55. for (let i = 0; i < getname.length; i++) {
  56. data.push({ name: getname[i], value: getbl[i], num: getNum[i] })
  57. }
  58. let option = {
  59. legend: {
  60. type: "scroll",
  61. orient: 'vertical',
  62. height: '80%',
  63. right: '0%',
  64. top: 'center',
  65. //icon: "circle", //设置为圆,删除则为矩形
  66. itemWidth: 14,
  67. itemHeight: 6,
  68. itemGap: 25,
  69. data: getname,
  70. formatter: function (name) {
  71. for (let i = 0; i < getname.length; i++) {
  72. if (name == data[i].name) {
  73. return '{name|' + name + '}'
  74. }
  75. }
  76. },
  77. textStyle: {
  78. rich: {
  79. name: {
  80. fontSize: 14,
  81. fontWeight: 400,
  82. width: 100,
  83. height: 20,
  84. padding: [0, 0, 0, 5],
  85. color: 'rgba(0, 0, 0, 0.85)',
  86. fontFamily: 'Source Han Sans CN-Regular',
  87. },
  88. num: {
  89. fontSize: 14,
  90. fontWeight: 500,
  91. height: 20,
  92. width: 50,
  93. color: 'rgba(0, 0, 0, 0.65)',
  94. fontFamily: 'Source Han Sans CN-Regular',
  95. },
  96. value: {
  97. fontSize: 14,
  98. fontWeight: 500,
  99. height: 20,
  100. width: 50,
  101. color: 'rgba(0, 0, 0, 0.65)',
  102. fontFamily: 'Source Han Sans CN-Regular',
  103. }
  104. }
  105. }
  106. },
  107. series: [{
  108. type: 'pie',
  109. top:20,
  110. bottom:20,
  111. left:10,
  112. right:10,
  113. radius: ['55%', '70%'],
  114. center: ["38%", "50%"],
  115. // label: {
  116. // formatter: params => {
  117. // let name = params.name;
  118. // if (name == getname[0]) {
  119. // return `{name0|${name}:${params.data.num}\n${params.value}%}`
  120. // } else if (name == getname[1]) {
  121. // return `{name1|${name}:${params.data.num}\n${params.value}%}`
  122. // } else if (name == getname[2]) {
  123. // return `{name2|${name}:${params.data.num}\n${params.value}%}`
  124. // }
  125. // },
  126. // rich: {
  127. // name0: {
  128. // fontSize: 14,
  129. // fontFamily: 'Source Han Sans CN-Regular',
  130. // color: fontColor[0],
  131. // padding: [2, 6, 4, 6],
  132. // borderRadius: 100
  133. // },
  134. // name1: {
  135. // fontSize: 14,
  136. // fontFamily: 'Source Han Sans CN-Regular',
  137. // color: fontColor[1],
  138. // padding: [2, 6, 4, 6],
  139. // borderRadius: 100
  140. // },
  141. // name2: {
  142. // fontSize: 14,
  143. // fontFamily: 'Source Han Sans CN-Regular',
  144. // color: fontColor[2],
  145. // padding: [2, 6, 4, 6],
  146. // borderRadius: 100
  147. // },
  148. // }
  149. // },
  150. // labelLine: {
  151. // show: false,
  152. // normal: {
  153. // length: 5,
  154. // length2: 50
  155. // }
  156. // },
  157. label: {
  158. normal: {
  159. formatter: params => {
  160. let name = params.name;
  161. if (name == getname[0]) {
  162. return `${name}:${params.data.num}\n${params.value}%`
  163. } else if (name == getname[1]) {
  164. return `${name}:${params.data.num}\n${params.value}%`
  165. } else if (name == getname[2]) {
  166. return `${name}:${params.data.num}\n${params.value}%`
  167. }
  168. },
  169. textStyle: {
  170. fontSize: 12,
  171. color:'#333'
  172. },
  173. padding: [0, -60, 26, -60],
  174. }
  175. },
  176. labelLine: {
  177. normal: {
  178. length: 10,
  179. length2: 60,
  180. }
  181. },
  182. data: data,
  183. itemStyle: {
  184. shadowBlur: 8,
  185. shadowColor: "rgba(255, 255, 255, 0)",
  186. borderColor: '#FFF',
  187. borderWidth: 2,
  188. color: function (colors) {
  189. var colorList = ['#FFA200', '#0183FA', '#FF5D3D'];
  190. return colorList[colors.dataIndex];
  191. }
  192. },
  193. }
  194. ]
  195. };
  196. myChart.setOption(option);
  197. });
  198. },
  199. }
  200. }
  201. </script>
  202. <style scoped lang="scss">
  203. .coverageRateEcharts{
  204. height:183px;
  205. }
  206. </style>