123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- <template>
- <v-chart :forceFit="true" :height="height" :data="data" :scale="scale" :onClick="handleClick">
- <v-tooltip :showTitle="false" dataKey="item*percent"/>
- <v-axis/>
- <v-legend dataKey="item"/>
- <v-pie position="percent" color="item" :v-style="pieStyle" :label="labelConfig"/>
- <v-coord type="theta"/>
- </v-chart>
- </template>
- <script>
- const DataSet = require('@antv/data-set')
- import { ChartEventMixins } from './mixins/ChartMixins'
- export default {
- name: 'Pie',
- mixins: [ChartEventMixins],
- props: {
- title: {
- type: String,
- default: ''
- },
- height: {
- type: Number,
- default: 300
- },
- dataSource: {
- type: Array,
- default: () => [
- { item: '泵站工程', count: 255 },
- { item: '拦河工程', count: 3461 },
- { item: '闸坝工程', count: 800 },
- { item: '堤防工程', count: 237 },
- ]
- }
- },
- data() {
- return {
- scale: [{
- dataKey: 'percent',
- min: 0,
- formatter: '.0%'
- }],
- pieStyle: {
- stroke: '#fff',
- lineWidth: 1
- },
- labelConfig: ['percent', {
- formatter: (val, item) => {
- return item.point.item + ': ' + val
- }
- }]
- }
- },
- computed: {
- data() {
- let dv = new DataSet.View().source(this.dataSource)
- // 计算数据百分比
- dv.transform({
- type: 'percent',
- field: 'count',
- dimension: 'item',
- as: 'percent'
- })
- return dv.rows
- }
- }
- }
- </script>
|