meetingTimeDistributeChart.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <div class="myChart" ref="myChart" :style="{height: height+'px'}"></div>
  3. </template>
  4. <script>
  5. import apiSceneMeeting from "@/api/scene/meeting/apiSceneMeeting";
  6. export default {
  7. data() {
  8. return {
  9. option: {
  10. tooltip: {
  11. trigger: 'item'
  12. },
  13. legend: {
  14. right: 'right',
  15. top: '20%'
  16. },
  17. series: [
  18. {
  19. name: '时长分布',
  20. type: 'pie',
  21. radius: ['40%', '70%'],
  22. //avoidLabelOverlap: false,
  23. label: {
  24. normal: {
  25. show: true,
  26. position: "outside",
  27. align: "left",
  28. /* padding: [-5, -40, 30, -10], */
  29. /* padding: [-50, -55, 0, -10], */
  30. padding: [0, -65],
  31. formatter: "{b}\n\n{c}", //模板变量有 {a}、{b}、{c}、{d},分别表示系列名,数据名,数据值,百分比。{d}数据会根据value值计算百分比
  32. textStyle: {
  33. align: "left",
  34. baseline: "middle",
  35. fontFamily: "PingFang SC",
  36. fontSize: 14,
  37. // color: "#FFF",
  38. },
  39. },
  40. },
  41. emphasis: {
  42. label: {
  43. show: true,
  44. fontWeight: 'bold'
  45. }
  46. },
  47. labelLine: {
  48. show: true,
  49. length: 20,
  50. length2: 60,
  51. },
  52. data: [
  53. { value: 104, name: '30分钟' },
  54. { value: 73, name: '60分钟' },
  55. { value: 58, name: '90分钟' },
  56. { value: 46, name: '120分钟' },
  57. { value: 87, name: '150分钟' },
  58. { value: 66, name: '180分钟' },
  59. { value: 55, name: '210分钟' },
  60. { value: 30, name: '240分钟' },
  61. ]
  62. }
  63. ]
  64. },
  65. }
  66. },
  67. props: {
  68. height: Number,
  69. queryData: Object
  70. },
  71. mounted() {
  72. this.init()
  73. },
  74. methods: {
  75. init() {
  76. let chart = this.$echarts.init(this.$refs.myChart)
  77. this.chart = chart;
  78. this.$util.chartsResize(this.chart);
  79. chart.setOption(this.option)
  80. this.$store.loadingStore().loadingWithApi(this.getData())
  81. },
  82. getData() {
  83. this.loading = true;
  84. return apiSceneMeeting.getMeetingCakeMinutes(this.queryData.timeRange).then(res=>{
  85. let data = this.$util.dataUtil.covertDataToEcharts(res, ['times'])
  86. this.$util.dataUtil.refreshEchartsData(this.chart, this.option, data)
  87. this.loading = false;
  88. }).catch(err=>{
  89. this.loading = false;
  90. })
  91. }
  92. }
  93. }
  94. </script>
  95. <style lang="less" scoped>
  96. </style>