pie.vue 2.3 KB

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