12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <template>
- <Card title="访问来源" :loading="loading">
- <div ref="chartRef" :style="{ width, height }"></div>
- </Card>
- </template>
- <script lang="ts">
- import { defineComponent, Ref, ref, watch } from 'vue';
- import { Card } from 'ant-design-vue';
- import { useECharts } from '/@/hooks/web/useECharts/index';
- export default defineComponent({
- components: { Card },
- props: {
- loading: Boolean,
- width: {
- type: String as PropType<string>,
- default: '100%',
- },
- height: {
- type: String as PropType<string>,
- default: '300px',
- },
- },
- setup(props) {
- const chartRef = ref<HTMLDivElement | null>(null);
- const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>);
- watch(
- () => props.loading,
- () => {
- if (props.loading) {
- return;
- }
- setOptions({
- tooltip: {
- trigger: 'item',
- },
- legend: {
- bottom: '1%',
- left: 'center',
- },
- series: [
- {
- color: ['#5ab1ef', '#b6a2de', '#67e0e3', '#2ec7c9'],
- name: '访问来源',
- type: 'pie',
- radius: ['40%', '70%'],
- avoidLabelOverlap: false,
- itemStyle: {
- borderRadius: 10,
- borderColor: '#fff',
- borderWidth: 2,
- },
- label: {
- show: false,
- position: 'center',
- },
- emphasis: {
- label: {
- show: true,
- fontSize: '12',
- fontWeight: 'bold',
- },
- },
- labelLine: {
- show: false,
- },
- data: [
- { value: 1048, name: '搜索引擎' },
- { value: 735, name: '直接访问' },
- { value: 580, name: '邮件营销' },
- { value: 484, name: '联盟广告' },
- ],
- animationType: 'scale',
- animationEasing: 'exponentialInOut',
- animationDelay: function () {
- return Math.random() * 100;
- },
- },
- ],
- });
- },
- { immediate: true }
- );
- return { chartRef };
- },
- });
- </script>
|