123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- <template>
- <div id="pie_echart" ref="echart"></div>
- </template>
- <script>
- // let colors = [
- // ["#FC8053", "#F2CAA4"],
- // ["#5583e7", "#36dddb"],
- // ["#f888b1", "#fbe6ee"],
- // ];
- let colors = [
- "#62ADED",
- "#DFE15A",
- "#6EDC8D",
- "#00A42E",
- "#F9B447",
- "#7F4FE5",
- "#FF6969",
- "#27CED9",
- "#DF56F5",
- "#DCFFAF",
- ];
- let option = {
- backgroundColor: "rgba(0,0,0,0)",
- label: {
- //图例文字的样式
- color: "#fff",
- fontSize: 16,
- },
- title: {
- show: false,
- text: "暂无数据",
- x: "39%",
- y: "28%",
- textStyle: {
- // rich: {
- fontSize: 14,
- color: "#fff",
- fontWeight: "bold",
- },
- },
- legend: {
- // type: "scroll",
- orient: "vertical",
- right: "2%",
- top: "center",
- data: [],
- icon: "rect", // 这个字段控制形状 类型包括 circle,rect ,roundRect,triangle,diamond,pin,arrow,none
- itemWidth: 12, // 设置宽度
- itemHeight: 12, // 设置高度
- itemGap: 10, // 设置间距
- textStyle: {
- //图例文字的样式
- color: "#fff",
- fontSize: 14,
- },
- textStyle: {
- rich: {
- name: {
- color: "#fff", //#BCD3E5
- fontSize: 14,
- width: 60,
- },
- value: {
- color: "#64DAFF",
- fontSize: 14,
- padding: [5, 4],
- align: "center",
- width: 100,
- },
- unit: {
- color: "#fff", //#BCD3E5
- fontSize: 14,
- width: 5,
- },
- },
- },
- },
- graphic: [
- {
- type: "group",
- top: "middle",
- left: "center",
- id: "data",
- children: [
- // {
- // type: "text",
- // id: "current",
- // top: 40,
- // style: {
- // text: dataAll,
- // font: 'bolder 36px "Microsoft YaHei", sans-serif',
- // fill: "#fff",
- // textAlign: "center"
- // }
- // },
- // {
- // type: "text",
- // id: "all",
- // top: 80,
- // left:'10%',
- // style: {
- // text: "报建数量",
- // font: 'bolder 14px "Microsoft YaHei", sans-serif',
- // fill: "#fff",
- // // textAlign: "center"
- // }
- // }
- ],
- },
- ],
- series: [
- {
- name: "轮次",
- type: "pie",
- radius: ["45%", "80%"],
- center: ["20%", "50%"],
- avoidLabelOverlap: false,
- label: {
- normal: {
- show: false,
- position: "inner", // 数值显示在内部
- formatter: (params) => {
- return `${params.name} : ${params.value} "km²`;
- },
- },
- textStyle: {
- //图例文字的样式
- color: "#fff",
- fontSize: 16,
- },
- },
- emphasis: {
- label: {
- show: true,
- fontSize: "16",
- fontWeight: "bold",
- },
- },
- labelLine: {
- show: false,
- length: 48,
- },
- data: [],
- },
- ],
- grid: {
- left: "0%",
- // right: "40%",
- // bottom: "10%",
- top: "16%",
- containLabel: true,
- },
- };
- export default {
- name: "pie_echart",
- props: {
- unit: {
- type: String,
- default: "km²", //"平方千米",
- },
- },
- components: {},
- data() {
- return {
- myChart: null,
- };
- },
- methods: {
- setOptions(cartData) {
- let _this = this;
- if (!this.myChart) {
- // var dom = document.getElementById("pie_echart");
- this.myChart = echarts.init(this.$refs.echart);
- }
- cartData.data.forEach((item, index) => {
- option.legend.data.push(item.name);
- item.itemStyle = {
- color: colors[index % colors.length],
- // color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
- // {
- // offset: 0,
- // color: colors[index % colors.length],
- // },
- // {
- // offset: 1,
- // color: colors[index % colors.length],
- // },
- // ]),
- };
- // dataAll += item.value;
- });
- if (cartData.type == "vertical") {
- option.series[0].radius = ["27%", "42%"];
- option.series[0].center = ["50%", "30%"];
- option.legend.height = "40%";
- option.legend.top = "60%";
- option.legend.orient = "horizontal";
- } else {
- option.series[0].radius = ["45%", "70%"];
- option.series[0].center = ["25%", "50%"];
- option.legend.height = "100%";
- option.legend.top = "center";
- option.legend.orient = "vertical";
- }
- option.legend.right = cartData.legend_right || "2%";
- let max = cartData.max || 4;
- option.legend.textStyle.rich.name.width = max * 15;
- option.legend.formatter = function (name) {
- const sItem = cartData.data.find((item) =>
- `${item.name}`.includes(`${name}`)
- );
- if (sItem) {
- let aname = name.length > max ? name.substr(0, max) + "..." : name;
- return `{name|${aname}} {value|${sItem.value}} {unit|${_this.$props.unit}} `;
- // return name + 'sItem.value';
- } else {
- return name;
- }
- };
- option.series[0].data = cartData.data;
- option.series[0].label.normal.formatter = function (params) {
- return `${params.name} : ${params.value} ${_this.$props.unit}`;
- };
- if (cartData.data.length <= 0) {
- option.title.show = true;
- } else {
- option.title.show = false;
- }
- this.myChart.resize();
- this.myChart.setOption(option);
- // if (cartData.isclick) {
- // legendselectchanged
- this.myChart.on("legendselectchanged", function (params) {
- let iseyes = params.selected[params.name];
- _this.$emit("echartClick", params.name, { iseyes });
- });
- this.myChart.on("click", function (params) {
- _this.$emit("echartClick", params.name, { color: params.color });
- });
- // }
- },
- },
- mounted() {
- // this.setOptions();
- },
- };
- </script>
- <style lang="scss" scoped>
- .pie_echart {
- width: 100%;
- height: 100%;
- }
- </style>
|