880c6cca9a7e604cdf5332eae2d3b234fd586a74.svn-base 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <v-chart :forceFit="true" :height="height" :data="data" :scale="scale" :onClick="handleClick">
  3. <v-tooltip :showTitle="false" dataKey="item*percent"/>
  4. <v-axis/>
  5. <v-legend dataKey="item"/>
  6. <v-pie position="percent" color="item" :v-style="pieStyle" :label="labelConfig"/>
  7. <v-coord type="theta"/>
  8. </v-chart>
  9. </template>
  10. <script>
  11. const DataSet = require('@antv/data-set')
  12. import { ChartEventMixins } from './mixins/ChartMixins'
  13. export default {
  14. name: 'Pie',
  15. mixins: [ChartEventMixins],
  16. props: {
  17. title: {
  18. type: String,
  19. default: ''
  20. },
  21. height: {
  22. type: Number,
  23. default: 300
  24. },
  25. dataSource: {
  26. type: Array,
  27. default: () => [
  28. { item: '泵站工程', count: 255 },
  29. { item: '拦河工程', count: 3461 },
  30. { item: '闸坝工程', count: 800 },
  31. { item: '堤防工程', count: 237 },
  32. ]
  33. }
  34. },
  35. data() {
  36. return {
  37. scale: [{
  38. dataKey: 'percent',
  39. min: 0,
  40. formatter: '.0%'
  41. }],
  42. pieStyle: {
  43. stroke: '#fff',
  44. lineWidth: 1
  45. },
  46. labelConfig: ['percent', {
  47. formatter: (val, item) => {
  48. return item.point.item + ': ' + val
  49. }
  50. }]
  51. }
  52. },
  53. computed: {
  54. data() {
  55. let dv = new DataSet.View().source(this.dataSource)
  56. // 计算数据百分比
  57. dv.transform({
  58. type: 'percent',
  59. field: 'count',
  60. dimension: 'item',
  61. as: 'percent'
  62. })
  63. return dv.rows
  64. }
  65. }
  66. }
  67. </script>