You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
3.4 KiB
184 lines
3.4 KiB
<template>
|
|
<div class="m-chart">
|
|
<canvas id="myChart" :width="width" :height="height" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import nextTick from "dai-js/tools/nextTick";
|
|
import F2 from "@antv/f2/lib/index-all";
|
|
|
|
// ios下字体渲染有bug
|
|
const fontFamily = "PingFang SC";
|
|
const fontSize = 12;
|
|
|
|
let chart;
|
|
let srcData = [];
|
|
|
|
const iniChart = function (config, srcData, total) {
|
|
chart = new F2.Chart({
|
|
id: "myChart",
|
|
...config,
|
|
});
|
|
|
|
let data = [
|
|
{
|
|
const: "const",
|
|
name: "交通出行",
|
|
count: 51.39,
|
|
},
|
|
{
|
|
const: "const",
|
|
name: "饮食",
|
|
count: 356.68,
|
|
},
|
|
{
|
|
const: "const",
|
|
name: "生活日用",
|
|
count: 20.0,
|
|
},
|
|
{
|
|
const: "const",
|
|
name: "住房缴费",
|
|
count: 116.53,
|
|
},
|
|
];
|
|
console.log("-----------------------------------", srcData);
|
|
data = srcData;
|
|
|
|
chart.source(data);
|
|
chart.coord("polar", {
|
|
transposed: true,
|
|
radius: 0.9,
|
|
innerRadius: 0.6,
|
|
});
|
|
chart.axis(false);
|
|
chart.legend(false);
|
|
// chart.legend({
|
|
// position: "bottom",
|
|
// align: "center",
|
|
// });
|
|
chart.tooltip(false);
|
|
chart.guide().html({
|
|
position: ["50%", "50%"],
|
|
html: `<div style="text-align: center;width:150px;height: 35px;">\n <p style="font-size: 18px;color: #999;margin: 0" id="title">总人数</p>\n <p style="font-size: 30px;color: #343434;margin: 0;font-weight: bold;" id="count">${total}</p>\n </div>`,
|
|
});
|
|
chart
|
|
.interval()
|
|
.position("const*count")
|
|
.adjust("stack")
|
|
.color("name", [
|
|
"#e70014",
|
|
"#ea6200",
|
|
"#f59701",
|
|
"#fcc900",
|
|
"#fef200",
|
|
"#cedc01",
|
|
"#8fc41e",
|
|
"#22ad38",
|
|
"#009b44",
|
|
"#009c6c",
|
|
"#019e97",
|
|
"#00a1be",
|
|
"#00a2c1",
|
|
"#00a0ea",
|
|
"#0085d2",
|
|
"#0067b6",
|
|
"#00469b",
|
|
"#1d2089",
|
|
"#5e1986",
|
|
"#920784",
|
|
"#bd0081",
|
|
"#e5007f",
|
|
"#e5026d",
|
|
"#e4024e",
|
|
"#e40031",
|
|
]);
|
|
chart.pieLabel({
|
|
sidePadding: 30,
|
|
activeShape: true,
|
|
label1: function label1(data) {
|
|
return {
|
|
text: data.count + "人",
|
|
fill: "#343434",
|
|
fontWeight: "bold",
|
|
fontSize,
|
|
};
|
|
},
|
|
label2: function label2(data) {
|
|
return {
|
|
text: data.name,
|
|
fill: "#999",
|
|
fontSize,
|
|
};
|
|
},
|
|
onClick: function onClick(ev) {
|
|
const data = ev.data;
|
|
if (data) {
|
|
// $("#title").text(data.name);
|
|
// $("#count").text(data.count);
|
|
}
|
|
},
|
|
});
|
|
chart.render();
|
|
|
|
// 注意:需要把chart return 出来
|
|
return chart;
|
|
};
|
|
|
|
export default {
|
|
name: "chart",
|
|
props: {
|
|
list: {
|
|
type: Array,
|
|
default: () => {
|
|
return [];
|
|
},
|
|
},
|
|
total: {
|
|
type: Number,
|
|
default: 0,
|
|
},
|
|
config: {
|
|
type: Object,
|
|
default: () => {
|
|
return {};
|
|
},
|
|
},
|
|
width: {
|
|
type: Number,
|
|
default: 400,
|
|
},
|
|
height: {
|
|
type: Number,
|
|
default: 260,
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
iniLoading: false,
|
|
};
|
|
},
|
|
watch: {
|
|
list(data) {
|
|
// chart.changeData(data);
|
|
srcData = data;
|
|
},
|
|
},
|
|
async created() {
|
|
await nextTick(200);
|
|
iniChart(this.config, this.list, this.total);
|
|
await nextTick(200);
|
|
this.iniLoading = true;
|
|
},
|
|
|
|
methods: {
|
|
setList(data) {
|
|
chart.changeData(data);
|
|
srcData = data;
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped></style>
|
|
|