效果图:

html
<template>
<v-chart ref="vChartRef" :option="option" style="background-color: #000;"></v-chart>
</template>
<script setup lang="ts">
import { ref, reactive } from "vue";
import VChart from "vue-echarts";
import * as echarts from "echarts/core";
import { CanvasRenderer } from "echarts/renderers";
import { GridComponent } from "echarts/components";
import "echarts-wordcloud";
echarts.use([CanvasRenderer, GridComponent]);
const vChartRef = ref();
const chartData = ref<any>([
{
name: "矛盾调解",
value: 500,
},
{
name: "拖欠克扣工资",
value: 300,
},
{
name: "食品安全",
value: 300,
},
{
name: "街面秩序",
value: 200,
},
{
name: "涉法涉讼",
value: 200,
},
{
name: "施工噪音投诉",
value: 100,
},
{
name: "信访接待",
value: 100,
},
{
name: "社会治安",
value: 100,
},
{
name: "房屋交易",
value: 50,
},
{
name: "施工管理",
value: 50,
},
{
name: "日常维控",
value: 20,
},
]);
const option = reactive({
backgroundColor: "rgba(0,0,0,0)",
tooltip: {
show: true,
formatter: (params: any) => {
return `${params.name}: ${params.value}`;
},
},
series: [
{
type: "wordCloud",
shape: "pentagon",
left: "center",
top: "center",
width: "100%",
height: "100%",
right: null,
bottom: null,
sizeRange: [14, 31],
rotationRange: [0, 0],
rotationStep: 0,
gridSize: 25,
drawOutOfBound: false,
layoutAnimation: true,
emphasis: {
focus: "none",
},
data: chartData.value,
textStyle: {
fontFamily: "AlibabaPuHuiTi_2_85_Bold",
fontWeight: 600,
color: () => {
const colors = [
"#029CD4FF",
"#D54941FF",
"#3B9330FF",
"#F5BA18FF",
"#A0DA12FF",
"#E37318FF",
"#8E56DDFF",
"#2BA471FF",
"#029CD499",
"#D5494199",
"#3B933099",
"#F5BA1899",
"#A0DA1299",
"#E3731899",
"#8E56DD99",
"#2BA47199",
"#029CD44D",
"#D549414D",
"#3B93304D",
"#F5BA184D",
"#A0DA124D",
"#E373184D",
"#8E56DD4D",
"#2BA4714D",
];
return colors[Math.floor(Math.random() * colors.length)];
},
},
},
],
});
</script>