|
@@ -1,10 +1,10 @@
|
|
|
<template>
|
|
|
<div class="gdbh">
|
|
|
<div class="box">
|
|
|
- <div class="title">建设用地规划指标</div>
|
|
|
+ <div class="title">耕地保护</div>
|
|
|
<div class="centent">
|
|
|
<div class="item">
|
|
|
- <p>
|
|
|
+ <p class="text">
|
|
|
<span>·</span>
|
|
|
地保有量
|
|
|
<span>354.56</span>
|
|
@@ -18,10 +18,21 @@
|
|
|
</p>
|
|
|
</div>
|
|
|
<div class="item">
|
|
|
-
|
|
|
+ <p class="text">
|
|
|
+ <span>·</span>
|
|
|
+ 地保有量
|
|
|
+ <span>354.56</span>
|
|
|
+ KM2
|
|
|
+ </p>
|
|
|
+ <p>
|
|
|
+ <span>·</span>
|
|
|
+ 永久基本农田
|
|
|
+ <span>354.56</span>
|
|
|
+ KM2
|
|
|
+ </p>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div id="echart">
|
|
|
+ <div id="gdbh_echart">
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
@@ -41,11 +52,286 @@ export default {
|
|
|
//监控data中的数据变化
|
|
|
watch: {},
|
|
|
//方法集合
|
|
|
- methods: {},
|
|
|
+
|
|
|
beforeCreate() { }, //生命周期 - 创建之前
|
|
|
created() { }, //生命周期 - 创建完成(可以访问当前this实例)
|
|
|
beforeMount() { }, //生命周期 - 挂载之前
|
|
|
- mounted() { }, //生命周期 - 挂在完成
|
|
|
+ methods: {
|
|
|
+ getRenKou() {
|
|
|
+ var dom = document.getElementById('gdbh_echart');
|
|
|
+ var myChart = window.echarts.init(dom);
|
|
|
+
|
|
|
+ let data = [
|
|
|
+ { name: '水田', value: 30 },
|
|
|
+ { name: '水浇地', value: 40 },
|
|
|
+ { name: '旱地', value: 50 },
|
|
|
+ // { name: '住宿', value: 24 },
|
|
|
+ ]
|
|
|
+ for (var i = 0; i < data.length; i++) {
|
|
|
+ for (var j = i + 1; j < data.length; j++) {
|
|
|
+ //如果第一个比第二个大,就交换他们两个位置
|
|
|
+ if (data[i].value < data[j].value) {
|
|
|
+ var temp = data[i];
|
|
|
+ data[i] = data[j];
|
|
|
+ data[j] = temp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let pm = []
|
|
|
+ for (var i = 0; i < data.length; i++) {
|
|
|
+ let k = i + 1
|
|
|
+ pm.push('NO.' + k)
|
|
|
+ }
|
|
|
+ data.forEach(function (value, index, obj) {
|
|
|
+ value.pm = pm[index]
|
|
|
+ })
|
|
|
+ console.log('ssss', data)
|
|
|
+ const colors = ['rgb(96,149,239)', 'rgb(239,157,147)', 'rgb(232,191,72)', 'rgb(189,147,227)']
|
|
|
+ const chartData = data.map((item, index) => ({
|
|
|
+ value: item.value,
|
|
|
+ name: item.name,
|
|
|
+ pm: item.pm,
|
|
|
+ itemStyle: {
|
|
|
+ shadowBlur: 20,
|
|
|
+ shadowColor: `#${(((index + 1) % 7) + 10) * 100 + 99}`,
|
|
|
+ shadowOffsetx: 25,
|
|
|
+ shadowOffsety: 20,
|
|
|
+ color: colors[index % colors.length],
|
|
|
+ },
|
|
|
+ }))
|
|
|
+ const sum = chartData.reduce((per, cur) => per + cur.value, 0)
|
|
|
+ const gap = (1 * sum) / 100
|
|
|
+ const pieData1 = []
|
|
|
+ const gapData = {
|
|
|
+ name: '',
|
|
|
+ value: gap,
|
|
|
+ itemStyle: {
|
|
|
+ color: 'transparent',
|
|
|
+ },
|
|
|
+ }
|
|
|
+ let totalRatio = []
|
|
|
+ // let totalPercent = 0
|
|
|
+ for (let i = 0; i < chartData.length; i++) {
|
|
|
+ // 计算占比
|
|
|
+ // let ratio = (chartData[i].value / sum).toFixed(2) * 100;
|
|
|
+ // 累加占比到总占比中
|
|
|
+ // totalRatio.push(ratio*100)
|
|
|
+ let ratio = (chartData[i].value / sum) * 100
|
|
|
+ let percent = Math.round(ratio)
|
|
|
+ totalRatio.push(percent)
|
|
|
+ // totalPercent += percent
|
|
|
+ // 第一圈数据
|
|
|
+ pieData1.push({
|
|
|
+ ...chartData[i],
|
|
|
+ })
|
|
|
+ pieData1.push(gapData)
|
|
|
+ }
|
|
|
+ // 补充最后一项占比百分比保证之和为100%
|
|
|
+ // totalRatio[0].value += 100 - totalPercent
|
|
|
+ let option = {
|
|
|
+ backgroundColor: 'rgba(1,1,1,0)',
|
|
|
+ title: {
|
|
|
+ show: true,
|
|
|
+ // text: sum
|
|
|
+ text: '收储来源',
|
|
|
+ // subtext: '收储来源',
|
|
|
+ x: '49%',
|
|
|
+ y: '32%',
|
|
|
+ itemGap: 6,
|
|
|
+ textStyle: {
|
|
|
+ color: '#fff',
|
|
|
+ fontSize: 11,
|
|
|
+ fontWeight: '400',
|
|
|
+ lineHeight: 8,
|
|
|
+ },
|
|
|
+ subtextStyle: {
|
|
|
+ color: '#fff',
|
|
|
+ fontSize: 8,
|
|
|
+ fontWeight: '400',
|
|
|
+ lineHeight: 8,
|
|
|
+ },
|
|
|
+ textAlign: 'center',
|
|
|
+ },
|
|
|
+
|
|
|
+ // 图例
|
|
|
+ legend: {
|
|
|
+ show: true,
|
|
|
+ orient: 'vertical',
|
|
|
+ icon: 'rect',
|
|
|
+ textStyle: {
|
|
|
+ color: '#fff',
|
|
|
+ fontSize: 10,
|
|
|
+ },
|
|
|
+ top: '80%',
|
|
|
+ left: '5%',
|
|
|
+ itemGap: 14,
|
|
|
+ itemHeight: 14,
|
|
|
+ itemWidth: 14,
|
|
|
+ data: chartData,
|
|
|
+ formatter: function (name) {
|
|
|
+ const selectedItem = chartData.find((item) => `${item.name}`.includes(`${name}`));
|
|
|
+ // if (selectedItem) {
|
|
|
+ // const { value } = selectedItem;
|
|
|
+ // const { pm } = selectedItem;
|
|
|
+ // console.log('dddd', selectedItem)
|
|
|
+ // const p = ((value / sum) * 100).toFixed(2);
|
|
|
+ // const area = `${value}m²`;
|
|
|
+ // // console.log(`{icon|${pm}} {name|${name}} {percent|${p}%} {area|${area}} `);
|
|
|
+
|
|
|
+ // return `{icon|${pm}} {name|${name}} {percent|${p}%} {area|${area}} `;
|
|
|
+ // } else {
|
|
|
+ // console.log(name);
|
|
|
+
|
|
|
+ // return name;
|
|
|
+ // }
|
|
|
+
|
|
|
+ if (selectedItem) {
|
|
|
+ return name;
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+ textStyle: {
|
|
|
+ rich: {
|
|
|
+ icon: {
|
|
|
+ color: colors
|
|
|
+ },
|
|
|
+ name: {
|
|
|
+ color: '#fff'
|
|
|
+ },
|
|
|
+ percent: {
|
|
|
+ color: '#fff'
|
|
|
+ },
|
|
|
+ area: {
|
|
|
+ color: '#fff'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ series: [
|
|
|
+ // 中间圆环
|
|
|
+ {
|
|
|
+ name: '',
|
|
|
+ type: 'pie',
|
|
|
+ roundCap: true,
|
|
|
+ radius: ['36%', '52%'],
|
|
|
+ center: ['50%', '35%'],
|
|
|
+ data: pieData1,
|
|
|
+ labelLine: {
|
|
|
+ length: 8,
|
|
|
+ length2: 16,
|
|
|
+ lineStyle: {
|
|
|
+ width: 1,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ label: {
|
|
|
+ show: false,
|
|
|
+ fontFamily: 'ysbth',
|
|
|
+ position: 'outside',
|
|
|
+ padding: [0, -4, 0, -4],
|
|
|
+ formatter(params) {
|
|
|
+ if (params.name === '') {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ return `${params.percent.toFixed(0)}% `
|
|
|
+ },
|
|
|
+ color: '#fff',
|
|
|
+ fontSize: '14px',
|
|
|
+ lineHeight: 10,
|
|
|
+ },
|
|
|
+ emphasis: {
|
|
|
+ // 鼠标移入时显示
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ // 最里面圆环
|
|
|
+ {
|
|
|
+ type: 'pie',
|
|
|
+ radius: ['28%', '30%'],
|
|
|
+ center: ['50%', '35%'],
|
|
|
+ animation: false,
|
|
|
+ hoverAnimation: false,
|
|
|
+ data: [
|
|
|
+ {
|
|
|
+ value: 100,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ label: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ itemStyle: {
|
|
|
+ color: '#3BC5EF',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ // 最里面圆环内的背景圆
|
|
|
+ {
|
|
|
+ name: '',
|
|
|
+ type: 'pie',
|
|
|
+ startAngle: 90,
|
|
|
+ radius: '28%',
|
|
|
+ animation: false,
|
|
|
+ hoverAnimation: false,
|
|
|
+ center: ['50%', '35%'],
|
|
|
+ itemStyle: {
|
|
|
+ labelLine: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ color: {
|
|
|
+ type: 'radial',
|
|
|
+ x: 0.5,
|
|
|
+ y: 0.5,
|
|
|
+ r: 1,
|
|
|
+ colorStops: [
|
|
|
+ {
|
|
|
+ offset: 1,
|
|
|
+ color: 'rgba(50,171,241, 0)',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ offset: 0.5,
|
|
|
+ color: 'rgba(50,171,241, .4)',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ offset: 0,
|
|
|
+ color: 'rgba(55,70,130, 0)',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ global: false, // 缺省为 false
|
|
|
+ },
|
|
|
+ shadowBlur: 60,
|
|
|
+ },
|
|
|
+ data: [
|
|
|
+ {
|
|
|
+ value: 100,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ // 最外面的圆环
|
|
|
+ {
|
|
|
+ type: 'pie',
|
|
|
+ color: ['#1a4a8c', 'rgba(0,0,0,0)', '#1a4a8c', 'rgba(0,0,0,0)'],
|
|
|
+ radius: ['53%', '54%'],
|
|
|
+ center: ['50%', '35%'],
|
|
|
+ label: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ select: {
|
|
|
+ display: false,
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ show: false,
|
|
|
+ },
|
|
|
+ data: totalRatio,
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ }
|
|
|
+
|
|
|
+ myChart.setOption(option);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.getRenKou();
|
|
|
+ },
|
|
|
beforeUpdate() { }, //生命周期 - 更新之前
|
|
|
updated() { }, //生命周期 - 更新之后
|
|
|
beforeDestroy() { }, //生命周期 - 销毁之前
|
|
@@ -100,32 +386,41 @@ export default {
|
|
|
text-align: justify;
|
|
|
}
|
|
|
|
|
|
-#echart {
|
|
|
- width: 280px;
|
|
|
- height: 230px;
|
|
|
+#gdbh_echart {
|
|
|
width: 280px;
|
|
|
height: 230px;
|
|
|
position: relative;
|
|
|
- left: -350px;
|
|
|
- top: 59px;
|
|
|
+ left: 54%;
|
|
|
+ top: -83%;
|
|
|
}
|
|
|
|
|
|
.centent {
|
|
|
- border: #00FFFF 1px solid;
|
|
|
+ // border: #00FFFF 1px solid;
|
|
|
width: 280px;
|
|
|
height: 185px;
|
|
|
position: relative;
|
|
|
left: 6%;
|
|
|
}
|
|
|
|
|
|
-// .item {
|
|
|
-// border: #00FFFF 1px solid;
|
|
|
-// height: 40%;
|
|
|
-// margin-bottom: 10%;
|
|
|
+.item {
|
|
|
+ // border: #00FFFF 1px solid;
|
|
|
+ height: 40%;
|
|
|
+ margin-bottom: 10%;
|
|
|
+ background-color: #283f6d;
|
|
|
+ text-align: left;
|
|
|
+ padding-left: 7%;
|
|
|
+ padding-top: 4%;
|
|
|
|
|
|
-// background-color: rgba(40, 63, 109, 1)
|
|
|
-// p {
|
|
|
-// color: #fff;
|
|
|
-// }
|
|
|
-// }
|
|
|
+ p {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #fff;
|
|
|
+ margin-bottom: 4%;
|
|
|
+ }
|
|
|
+
|
|
|
+ span {
|
|
|
+ color: #00FFFF;
|
|
|
+ font-weight: 1000;
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|