1f40803a by 焦泽平

首页引入g2,饼图动态

1 parent f83d8123
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
12 "lint": "vue-cli-service lint" 12 "lint": "vue-cli-service lint"
13 }, 13 },
14 "dependencies": { 14 "dependencies": {
15 "@antv/g2": "^4.1.7",
15 "@antv/g6": "^4.0.3", 16 "@antv/g6": "^4.0.3",
16 "axios": "^0.19.2", 17 "axios": "^0.19.2",
17 "core-js": "^2.6.12", 18 "core-js": "^2.6.12",
......
...@@ -88,8 +88,8 @@ ...@@ -88,8 +88,8 @@
88 <div slot="header" class="clearfix"> 88 <div slot="header" class="clearfix">
89 <span><i class="iconfont iconbingtu"></i>权利类型占比</span> 89 <span><i class="iconfont iconbingtu"></i>权利类型占比</span>
90 </div> 90 </div>
91 <div class="enter_box" ref="enterBox"> 91 <div class="enter_box" ref="enterBox" id="qllxzbid">
92 <img src="../../assets/images/cglbzb.png" :style="{'height':imgHeight + 'px'}" alt=""> 92 <!-- <img src="../../assets/images/cglbzb.png" :style="{'height':imgHeight + 'px'}" alt=""> -->
93 </div> 93 </div>
94 </el-card> 94 </el-card>
95 <el-card class="cghj"> 95 <el-card class="cghj">
...@@ -114,6 +114,7 @@ ...@@ -114,6 +114,7 @@
114 </template> 114 </template>
115 115
116 <script> 116 <script>
117 import { Chart } from '@antv/g2';
117 import {getDbxList} from "@api/dbx"; 118 import {getDbxList} from "@api/dbx";
118 export default { 119 export default {
119 components:{}, 120 components:{},
...@@ -181,6 +182,7 @@ export default { ...@@ -181,6 +182,7 @@ export default {
181 this.imgHeight = this.$refs.enterBox.offsetHeight - 10 182 this.imgHeight = this.$refs.enterBox.offsetHeight - 10
182 }); 183 });
183 this.getDbxCount(); 184 this.getDbxCount();
185 this.initG2();
184 }, 186 },
185 methods: { 187 methods: {
186 download(row,column,event){ 188 download(row,column,event){
...@@ -243,6 +245,158 @@ export default { ...@@ -243,6 +245,158 @@ export default {
243 }) 245 })
244 } 246 }
245 }) 247 })
248 },
249 initG2(){
250 const data = [
251 { item: '国有建设用地使用权', count: 40, percent: 0.4 },
252 { item: '集体建设用地使用权', count: 21, percent: 0.21 },
253 { item: '宅基地使用权', count: 17, percent: 0.17 },
254 { item: '土地承包经营权', count: 13, percent: 0.13 },
255 { item: '林地使用权', count: 9, percent: 0.09 },
256 ];
257 const container = document.getElementById('qllxzbid');
258
259 const chart = new Chart({
260 container: 'qllxzbid',
261 autoFit: true,
262 height: 500,
263 });
264
265 chart.coordinate('theta', {
266 radius: 0.75,
267 innerRadius: 0.7,
268 });
269
270 chart.data(data);
271
272 chart.scale('percent', {
273 formatter: val => {
274 val = val * 100 + '%';
275 return val;
276 },
277 });
278
279 chart.tooltip(false);
280
281 // 声明需要进行自定义图例字段: 'item'
282 chart.legend('item', {
283 position: 'right', // 配置图例显示位置
284 offsetX: -50,
285 custom: true, // 关键字段,告诉 G2,要使用自定义的图例
286 items: data.map((obj, index) => {
287 return {
288 name: obj.item, // 对应 itemName
289 value: obj.percent, // 对应 itemValue
290 marker: {
291 symbol: 'square', // marker 的形状
292 style: {
293 r: 5, // marker 图形半径
294 fill: chart.getTheme().colors10[index], // marker 颜色,使用默认颜色,同图形对应
295 },
296 }, // marker 配置
297 };
298 }),
299 itemValue: {//百分比的样式
300 style: {
301 fill: '#999',
302 }, // 配置 itemValue 样式
303 formatter: val => `${val * 100}%` // 格式化 itemValue 内容
304 },
305 });
306
307 chart
308 .interval()
309 .adjust('stack')
310 .position('percent')
311 .color('item')
312 .style({
313 fillOpacity: 1,
314 })
315 .state({
316 active: {
317 style: element => {
318 const shape = element.shape;
319 return {
320 lineWidth: 10,
321 stroke: shape.attr('fill'),
322 strokeOpacity: shape.attr('fillOpacity'),
323 };
324 },
325 },
326 });
327
328 // 移除图例点击过滤交互
329 chart.removeInteraction('legend-filter');
330 chart.interaction('element-active');
331
332 chart.render();
333
334 // 监听 element 上状态的变化来动态更新 Annotation 信息
335 chart.on('element:statechange', (ev) => {
336 const { state, stateStatus, element } = ev.gEvent.originalEvent;
337
338 // 本示例只需要监听 active 的状态变化
339 if (state === 'active') {
340 const data = element.getData();
341 if (stateStatus) {
342 // 更新 Annotation
343 updateAnnotation(data);
344 } else {
345 // 隐藏 Annotation
346 clearAnnotation();
347 }
348 }
349 });
350 // 绘制 annotation
351 let lastItem;
352 function updateAnnotation(data) {
353 if (data.item !== lastItem) {
354 chart.annotation().clear(true);
355 chart
356 .annotation()
357 .text({
358 position: ['50%', '50%'],
359 content: data.item,
360 style: {
361 fontSize: 18,
362 fill: '#8c8c8c',
363 textAlign: 'center',
364 },
365 offsetY: -20,
366 })
367 .text({
368 position: ['50%', '50%'],
369 content: data.count,
370 style: {
371 fontSize: 18,
372 fill: '#8c8c8c',
373 textAlign: 'center',
374 },
375 offsetX: -10,
376 offsetY: 20,
377 })
378 .text({
379 position: ['50%', '50%'],
380 content: '件',
381 style: {
382 fontSize: 18,
383 fill: '#8c8c8c',
384 textAlign: 'center',
385 },
386 offsetY: 20,
387 offsetX: 20,
388 });
389 chart.render(true);
390 lastItem = data.item;
391 }
392 }
393
394 // 清空 annotation
395 function clearAnnotation() {
396 chart.annotation().clear(true);
397 chart.render(true);
398 lastItem = null;
399 }
246 } 400 }
247 }, 401 },
248 }; 402 };
......