| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | 
							- <template>
 
-   <div ref="chart" :style="chartStyle" />
 
- </template>
 
- <script>
 
- import echarts from 'echarts'
 
- require('echarts/theme/macarons')
 
- export default {
 
-   props: {
 
-     data: {
 
-       required: true,
 
-       default: () => { }
 
-     },
 
-     schema: {
 
-       type: Array,
 
-       required: true
 
-     },
 
-     chartOpt: {
 
-       type: Object,
 
-       required: false
 
-     },
 
-     chartStyle: {
 
-       require: false,
 
-       type: Object,
 
-       default: () => {
 
-         return {
 
-           height: '500px'
 
-         }
 
-       }
 
-     }
 
-   },
 
-   data() {
 
-     return {
 
-       chart: null
 
-     }
 
-   },
 
-   watch: {
 
-     data: {
 
-       deep: true,
 
-       handler: function (data) {
 
-         this.renderChart(data)
 
-       }
 
-     },
 
-     schema: {
 
-       deep: true,
 
-       handler: function () {
 
-         this.renderChart(this.data)
 
-       }
 
-     }
 
-   },
 
-   mounted() {
 
-     this.renderChart(this.data)
 
-     this.$on('resized', this.handleResize)
 
-     window.addEventListener('resize', this.handleResize)
 
-   },
 
-   beforeDestroy() {
 
-     if (this.chart) {
 
-       this.chart.dispose()
 
-     }
 
-     window.removeEventListener('resize', this.handleResize)
 
-   },
 
-   methods: {
 
-     handleResize() {
 
-       if (this.chart) {
 
-         this.chart.resize()
 
-       }
 
-     },
 
-     renderChart(data) {
 
-       if (!this.$refs.chart || !data[0]) return
 
-       const legend = []
 
-       let seriesObj = {}
 
-       if (this.schema.filter(schema => schema.asxAxis).length === 0) {
 
-         seriesObj = {
 
-           name: '',
 
-           type: 'pie',
 
-           radius: '55%',
 
-           center: ['50%', '60%'],
 
-           data: [],
 
-           tooltip: {
 
-             formatter: (params) => {
 
-               return `${params.name}: ${params.percent}%`
 
-             }
 
-           },
 
-           itemStyle: {
 
-             emphasis: {
 
-               shadowBlur: 10,
 
-               shadowOffsetX: 0,
 
-               shadowColor: 'rgba(0, 0, 0, 0.5)'
 
-             }
 
-           }
 
-         }
 
-         // only one row in data if no dimensions
 
-         data = data[0]
 
-         this.schema.forEach((schema, index) => {
 
-           legend.push(schema.name)
 
-           seriesObj.data[index] = seriesObj.data[index] || {}
 
-           seriesObj.data[index].name = schema.name
 
-           seriesObj.data[index].value = data[schema.name]
 
-         })
 
-       } else {
 
-         seriesObj = {
 
-           name: '',
 
-           type: 'pie',
 
-           radius: '55%',
 
-           center: ['50%', '40%'],
 
-           data: [],
 
-           tooltip: {
 
-             formatter: (params) => {
 
-               return `${params.name}: ${params.percent}%`
 
-             }
 
-           },
 
-           itemStyle: {
 
-             emphasis: {
 
-               shadowBlur: 10,
 
-               shadowOffsetX: 0,
 
-               shadowColor: 'rgba(0, 0, 0, 0.5)'
 
-             }
 
-           }
 
-         }
 
-         this.schema.forEach((schema, index) => {
 
-           data.forEach((item, dataIndex) => {
 
-             seriesObj.data[dataIndex] = seriesObj.data[dataIndex] || {}
 
-             if (schema.asxAxis) {
 
-               legend.push(item[schema.name])
 
-               seriesObj.data[dataIndex].name = item[schema.name]
 
-             } else {
 
-               seriesObj.data[dataIndex].value = item[schema.name]
 
-             }
 
-           })
 
-         })
 
-       }
 
-       const option = {
 
-         legend: {
 
-           type: 'scroll',
 
-           data: legend,
 
-           bottom: 0
 
-         },
 
-         toolbox: {
 
-           show: true,
 
-           itemSize: 12,
 
-           feature: {
 
-             saveAsImage: {
 
-               show: true
 
-             },
 
-             // magicType: {
 
-             //   type: ['line', 'bar']
 
-             // },
 
-             restore: {
 
-               show: true
 
-             },
 
-             dataZoom: {
 
-               show: true
 
-             }
 
-           }
 
-         },
 
-         grid: {
 
-           // show: true,
 
-           top: '10px',
 
-           left: '80px',
 
-           right: '0',
 
-           bottom: '45px'
 
-         },
 
-         tooltip: {
 
-           trigger: 'item'
 
-         },
 
-         series: [seriesObj]
 
-       }
 
-       setTimeout(() => {
 
-         if (!this.chart) {
 
-           this.chart = echarts.init(this.$refs.chart, 'macarons')
 
-         }
 
-         this.chart.clear()
 
-         this.chart.setOption(option)
 
-         if (this.chartOpt) {
 
-           this.chart.setOption(this.chartOpt)
 
-         }
 
-       }, 0)
 
-     }
 
-   }
 
- }
 
- </script>
 
 
  |