VisitRadar.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <Card title="转化率" :loading="loading">
  3. <div ref="chartRef" :style="{ width, height }"></div>
  4. </Card>
  5. </template>
  6. <script lang="ts">
  7. import { defineComponent, Ref, ref, watch } from 'vue';
  8. import { Card } from 'ant-design-vue';
  9. import { useECharts } from '/@/hooks/web/useECharts';
  10. export default defineComponent({
  11. components: { Card },
  12. props: {
  13. loading: Boolean,
  14. width: {
  15. type: String as PropType<string>,
  16. default: '100%',
  17. },
  18. height: {
  19. type: String as PropType<string>,
  20. default: '300px',
  21. },
  22. },
  23. setup(props) {
  24. const chartRef = ref<HTMLDivElement | null>(null);
  25. const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
  26. watch(
  27. () => props.loading,
  28. () => {
  29. if (props.loading) {
  30. return;
  31. }
  32. setOptions({
  33. legend: {
  34. bottom: 0,
  35. data: ['访问', '购买'],
  36. },
  37. tooltip: {},
  38. radar: {
  39. radius: '60%',
  40. splitNumber: 8,
  41. indicator: [
  42. {
  43. text: '电脑',
  44. max: 100,
  45. },
  46. {
  47. text: '充电器',
  48. max: 100,
  49. },
  50. {
  51. text: '耳机',
  52. max: 100,
  53. },
  54. {
  55. text: '手机',
  56. max: 100,
  57. },
  58. {
  59. text: 'Ipad',
  60. max: 100,
  61. },
  62. {
  63. text: '耳机',
  64. max: 100,
  65. },
  66. ],
  67. },
  68. series: [
  69. {
  70. type: 'radar',
  71. symbolSize: 0,
  72. areaStyle: {
  73. shadowBlur: 0,
  74. shadowColor: 'rgba(0,0,0,.2)',
  75. shadowOffsetX: 0,
  76. shadowOffsetY: 10,
  77. opacity: 1,
  78. },
  79. data: [
  80. {
  81. value: [90, 50, 86, 40, 50, 20],
  82. name: '访问',
  83. itemStyle: {
  84. color: '#b6a2de',
  85. },
  86. },
  87. {
  88. value: [70, 75, 70, 76, 20, 85],
  89. name: '购买',
  90. itemStyle: {
  91. color: '#5ab1ef',
  92. },
  93. },
  94. ],
  95. },
  96. ],
  97. });
  98. },
  99. { immediate: true }
  100. );
  101. return { chartRef };
  102. },
  103. });
  104. </script>