donut.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <div id="donut">
  3. <div :id="gid"></div>
  4. </div>
  5. </template>
  6. <script>
  7. import { Donut } from '@antv/g2plot';
  8. import { mapState, createNamespacedHelpers } from 'vuex';
  9. export default {
  10. name: 'donut',
  11. props: {
  12. data: { type: [Object, Array], default: () => [] },
  13. axis: { type: Object, default: () => {} },
  14. gid: { type: String, default: `${new Date().getTime()}` },
  15. },
  16. components: {},
  17. data: function() {
  18. return {
  19. chart: null,
  20. list: [],
  21. };
  22. },
  23. created() {},
  24. mounted() {
  25. this.init();
  26. },
  27. methods: {
  28. async init() {
  29. let { x, y, xAlias, yAlias } = this.axis;
  30. let meta = {};
  31. meta[x] = { alias: xAlias };
  32. meta[y] = { alias: yAlias };
  33. this.chart = new Donut(this.gid, {
  34. pixelRatio: 4,
  35. data: this.list,
  36. colorField: x,
  37. angleField: y,
  38. // meta: meta,
  39. point: {
  40. visible: true,
  41. },
  42. label: {
  43. visible: true,
  44. type: 'spider',
  45. formatter: (text, item) => `${item._origin[x]}: ${item._origin[y]}`,
  46. },
  47. //stackField + legend 一起使用,前者确定以哪个字段作为选项,后者是显示与否,位置
  48. stackField: x,
  49. legend: {
  50. visible: true,
  51. position: 'right-top',
  52. },
  53. //环形中间部分设置
  54. statistic: {
  55. visible: true,
  56. },
  57. events: {
  58. onPieClick: e => this.gclick(e),
  59. },
  60. });
  61. this.chart.render();
  62. },
  63. gclick(data) {
  64. console.log('in function:gclick');
  65. console.log(data);
  66. },
  67. },
  68. computed: {
  69. ...mapState(['user']),
  70. pageTitle() {
  71. return `${this.$route.meta.title}`;
  72. },
  73. },
  74. watch: {
  75. data: {
  76. immediate: true,
  77. deep: true,
  78. handler(val) {
  79. if (val) this.$set(this, `list`, val);
  80. },
  81. },
  82. },
  83. metaInfo() {
  84. return { title: this.$route.meta.title };
  85. },
  86. };
  87. </script>
  88. <style lang="less" scoped></style>