pie.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <div ref="dom" class="charts chart-pie"></div>
  3. </template>
  4. <script>
  5. import echarts from 'echarts'
  6. import tdTheme from './theme.json'
  7. import { on, off } from '@/libs/tools'
  8. echarts.registerTheme('tdTheme', tdTheme)
  9. export default {
  10. name: 'ChartPie',
  11. props: {
  12. value: Array,
  13. text: String,
  14. subtext: String
  15. },
  16. data () {
  17. return {
  18. dom: null
  19. }
  20. },
  21. methods: {
  22. resize () {
  23. this.dom.resize()
  24. }
  25. },
  26. mounted () {
  27. this.$nextTick(() => {
  28. let legend = this.value.map(_ => _.name)
  29. let option = {
  30. title: {
  31. text: this.text,
  32. subtext: this.subtext,
  33. x: 'center'
  34. },
  35. tooltip: {
  36. trigger: 'item',
  37. formatter: '{a} <br/>{b} : {c} ({d}%)'
  38. },
  39. legend: {
  40. orient: 'vertical',
  41. left: 'left',
  42. data: legend
  43. },
  44. series: [
  45. {
  46. type: 'pie',
  47. radius: '55%',
  48. center: ['50%', '60%'],
  49. data: this.value,
  50. itemStyle: {
  51. emphasis: {
  52. shadowBlur: 10,
  53. shadowOffsetX: 0,
  54. shadowColor: 'rgba(0, 0, 0, 0.5)'
  55. }
  56. }
  57. }
  58. ]
  59. }
  60. this.dom = echarts.init(this.$refs.dom, 'tdTheme')
  61. this.dom.setOption(option)
  62. on(window, 'resize', this.resize)
  63. })
  64. },
  65. beforeDestroy () {
  66. off(window, 'resize', this.resize)
  67. }
  68. }
  69. </script>