日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue使用echarts畫組織結構圖

瀏覽:154日期:2022-10-06 13:19:57

昨天,寫了一篇關于圓環進度條的博客(請移步:Vue圓環進度條),已經煩不勝煩,今天又遇到了需要展示類似公司的組織結構圖的功能需求,要冒了!!!

這種需求,自己用div+css也是可以實現的,但是沒有什么動畫效果,我的css3又很差勁,而且項目中已經使用到了折線圖、餅狀圖、柱狀圖之類的圖表,用的還是百度的echarts,所以這個組織結構圖之類的需求也就用了百度的echarts來實現了。

以前用echarts寫折線圖、柱狀圖、餅狀圖的較多,它的API還算比較熟悉,但是畫組織結構這樣的樹狀圖就很苦逼了,沒用過啊,而且設計給的樹狀圖的展示效果跟echarts樹狀圖的展示效果相去甚遠,我滴孩,又得一通費時費力的研究,設計圖如下:

vue使用echarts畫組織結構圖

如圖所示,一個樹節點中可能會有兩種不同的背景色,還有兩種不同的文字顏色,每個節點展示的還是圓角矩形。有同學說了,echarts有設置圓角的API啊,直接設置不就完事了。我想說的是,它是提供的有這樣的API,但是按照正常的套路實現不了啊。

從圖上還可以看到一個幾乎實現不了的效果,就是連接每個節點之間的線的拐角處都是直角而不是平滑的,而且echarts沒有給出可以設置拐角處是直角的API,只是給了一個curveness(API的描述是樹圖邊的曲度),這玩意兒使用了之后,也還是實現不了的。

從網上查了資料,有人說可以修改echarts的源碼,這種解決辦法我不推薦,是因為在vue或react項目中,echarts是需要通過安裝在package.json中的,如果是多人并行開發,那么別人安裝的echarts就不是你修改后的echarts,這就是問題所在。

最后用echarts畫出來的效果還是很不錯的,唯一沒有實現的就是連接每個節點的線的拐角處不是直角,有好的解決辦法的,還望不吝賜教,謝謝!展示一下最終的成果:

vue使用echarts畫組織結構圖

說了那么多,還是上代碼吧,該代碼是基于vue的,如果要使用在react中,稍微修改一下就可以了。

組件tree.vue:

<template> <div : : /></template><script>import echarts from 'echarts';require('echarts/theme/macarons');import { debounce } from '@/utils';export default { props: { className: { type: String, default: 'chart' }, width: { type: String, default: '100%' }, height: { type: String, default: '500px' }, chartData: { type: Object, required: true } }, data() { return { chart: null, }; }, watch: { chartData: { deep: true, handler(val) { this.setOptions(val); } } }, mounted() { this.initChart(); //是否需要自適應-加了防抖函數 this.__resizeHandler = debounce(() => { if (this.chart) { this.chart.resize(); } }, 100); window.addEventListener('resize', this.__resizeHandler); // 監聽側邊欄的變化以實現自適應縮放 const sidebarElm = document.getElementsByClassName('sidebar-container')[0]; sidebarElm.addEventListener('transitionend', this.sidebarResizeHandler); }, beforeDestroy() { if (!this.chart) { return; } window.removeEventListener('resize', this.__resizeHandler); this.chart.dispose(); this.chart = null; const sidebarElm = document.getElementsByClassName('sidebar-container')[0]; sidebarElm.removeEventListener('transitionend', this.sidebarResizeHandler); }, methods: { initChart() { this.chart = echarts.init(this.$el, 'macarons'); this.setOptions(this.chartData); const nodes = this.chart._chartsViews[0]._data._graphicEls; let allNode = 0; for(let index = 0; index < nodes.length; index++) { const node = nodes[index]; if (node === undefined) { continue } allNode++; } const height = window.innerHeight; const width = window.innerWidth - 1000; const currentHeight = 85 * allNode; const currentWidth = 220 * allNode; const newHeight = Math.max(currentHeight, height); const newWidth = Math.max(currentWidth, width); const tree_ele = this.$el; // tree_ele.style.height = newHeight + ’px’; //設置高度自適應 tree_ele.style.width = newWidth + ’px’; //設置寬度自適應 this.chart.resize(); this.chart.on(’click’, this.chartData.clickCallback); //節點點擊事件 }, setOptions(data) { this.chart.setOption({ //提供數據視圖、還原、下載的工具 // toolbox: { // show : true, // feature : { // mark : {show: true}, // dataView : {show: true, readOnly: false}, // restore : {show: true}, // saveAsImage : {show: true} // } // }, series: [ { name: '統一授信視圖', type: 'tree', orient: 'TB', //豎向或水平 TB代表豎向 LR代表水平 top: ’10%’, initialTreeDepth: 10, //樹圖初始展開的層級(深度) expandAndCollapse: false, //點擊節點時不收起子節點,default: true symbolSize: [135, 65], itemStyle: { color: ’transparent’, borderWidth: 0, }, lineStyle: { color: ’#D5D5D5’, width: 1, curveness: 1, }, data: [data] } ] }); }, sidebarResizeHandler(e) { if (e.propertyName === 'width') { this.__resizeHandler(); } } }};</script>

使用tree.vue的方法:

<template> <tree :chartData='treeData' /></template><script>import tree from ’./tree’;export default { data() { return { treeData: { label: { backgroundColor: ’#F4F4F4’, borderRadius: [0, 0, 5, 5], formatter: [ ’{first|綜合授信額度}’, ’{second|(CR20190912000013)n獲批金額:100n幣種:人民幣}’, ].join(’n’), rich: { first: { backgroundColor: ’#078E34’, color: ’#fff’, align: ’center’, width: 135, height: 30, borderRadius: [5, 5, 0, 0], }, second: { color: ’#888’, align: ’center’, lineHeight: 17, }, } }, children: [ { label: { formatter: [’{first|渠道額度}’, ].join(’n’), rich: {first: { backgroundColor: ’#3AC082’, color: ’#fff’, align: ’center’, width: 135, height: 65, borderRadius: 5,}, } }, children: [{ label: {formatter: [ ’{first|保理額度}’,].join(’n’),rich: { first: { backgroundColor: ’#3AC082’, color: ’#fff’, align: ’center’, width: 135, height: 65, borderRadius: 5, },} }, children: [{label: { backgroundColor: ’#F4F4F4’, borderRadius: [0, 0, 5, 5], formatter: [ ’{first|反向保理}’, ’{second|(CR20190912000013)n獲批金額:100n幣種:人民幣}’, ].join(’n’), rich: { first: { backgroundColor: ’#078E34’, color: ’#fff’, align: ’center’, width: 135, height: 30, borderRadius: [5, 5, 0, 0], }, second: { color: ’#888’, align: ’center’, lineHeight: 17, }, }}, }] }] }, { label: { formatter: [’{first|擔保/(樂)集團/其他額度}’, ].join(’n’), rich: {first: { backgroundColor: ’#3AC082’, color: ’#fff’, align: ’center’, width: 135, height: 65, borderRadius: 5,}, } }, children: [{ label: {formatter: [ ’{first|保理額度}’,].join(’n’),rich: { first: { backgroundColor: ’#3AC082’, color: ’#fff’, align: ’center’, width: 135, height: 65, borderRadius: 5, },} }, children: [{label: { backgroundColor: ’#F4F4F4’, borderRadius: [0, 0, 5, 5], formatter: [ ’{first|正向保理}’, ’{second|(CR20190912000013)n獲批金額:100n幣種:人民幣}’, ].join(’n’), rich: { first: { backgroundColor: ’#B8D87E’, color: ’#fff’, align: ’center’, width: 135, height: 30, borderRadius: [5, 5, 0, 0], }, second: { color: ’#888’, align: ’center’, lineHeight: 17, }, }}, }] }, { label: {formatter: [ ’{first|租賃額度}’,].join(’n’),rich: { first: { backgroundColor: ’#3AC082’, color: ’#fff’, align: ’center’, width: 135, height: 65, borderRadius: 5, },} }, children: [{ label: { backgroundColor: ’#F4F4F4’, borderRadius: [0, 0, 5, 5], formatter: [ ’{first|車輛租賃}’, ’{second|(CR20190912000013)n獲批金額:100n幣種:人民幣}’, ].join(’n’), rich: { first: { backgroundColor: ’#FF6C6A’, color: ’#fff’, align: ’center’, width: 135, height: 30, borderRadius: [5, 5, 0, 0], }, second: { color: ’#888’, align: ’center’, lineHeight: 17, }, } },}, ] }] } ] } } }, components: { tree, }};</script>

看著代碼不多,但是實現起來,各種查echarts的API和網上的資料,而且,由于效果圖中一個節點處的文字可能會換行,文字的顏色也不同,同時有些節點處的背景色還會有兩種,以及每個節點處顯示的樣式和文字都是不固定的,所以我們可能還要面臨著將接口返回的數據再改造處理成我們想要的數據的繁瑣問題,就如同傳遞給樹節點的treeData的格式一樣,相當麻煩,如果每個節點的樣式都是一樣的,那就好辦多了,如官網的一個樹狀圖的例子:https://www.echartsjs.com/examples/zh/editor.html?c=tree-vertical

從echarts的v4.7.0版本開始,給配置項series中加入一個API:edgeShape:’polyline’可實現樹形圖表連接每個節點的線的拐角處呈直角。

以上就是vue使用echarts畫組織結構圖的詳細內容,更多關于vue 畫組織結構圖的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
超碰超碰人人人人精品| 亚洲美女91| 卡一卡二国产精品| 日韩中文字幕| 亚洲香蕉视频| 亚洲黄色在线| 亚洲少妇诱惑| 国产精品毛片一区二区三区| 亚洲精品va| 欧美日韩一区二区综合| 亚洲精品国产嫩草在线观看| 欧美日韩精品免费观看视欧美高清免费大片 | 麻豆高清免费国产一区| 一本综合精品| 日本欧美韩国一区三区| 国产精品自在| 精品欠久久久中文字幕加勒比| 欧美日韩一区二区三区不卡视频 | 欧美~级网站不卡| 亚洲女同一区| 亚洲精品欧洲| 国产精品99久久久久久董美香| 另类欧美日韩国产在线| 欧美sm一区| 伊人成人网在线看| 日韩欧美在线精品| 久久精品国产精品亚洲毛片| 精品久久福利| 啪啪国产精品| 巨乳诱惑日韩免费av| 国产亚洲一区二区三区不卡| 精品在线网站观看| 99久久亚洲精品蜜臀| 国产精品美女| 国产精品久久久亚洲一区| 日韩毛片视频| 中文精品在线| 老司机精品视频在线播放| 久久精品国产亚洲夜色av网站| 欧美综合国产| 欧美国产不卡| 亚洲性图久久| 一本综合精品| 国产一区丝袜| 一本色道久久精品| 国产精品任我爽爆在线播放| 中文字幕在线视频网站| 老鸭窝毛片一区二区三区| 国产日韩中文在线中文字幕| 美女福利一区二区三区| 日本欧美在线看| 精品日本视频| 免费在线观看成人| 久久精品亚洲| 免费视频久久| 电影91久久久| 久热精品在线| 精品一区二区三区亚洲| 亚洲男女av一区二区| 国产精品片aa在线观看| 影院欧美亚洲| 精品国产黄a∨片高清在线| 亚洲美洲欧洲综合国产一区 | 麻豆成人在线观看| 欧美在线影院| 精品精品99| 亚洲精品人人| 久久狠狠婷婷| 国产伦精品一区二区三区视频 | 欧美1区2区3| 国产日韩综合| 国产高潮在线| 日韩1区2区日韩1区2区| 欧美一区二区三区高清视频| 国产精品一区二区精品视频观看 | 夜夜嗨一区二区三区| 精品久久97| 色婷婷成人网| 国精品一区二区| 国产精品久久久免费| 丝袜亚洲精品中文字幕一区| 国产欧洲在线| 国产精品www.| 亚洲狼人精品一区二区三区| 日韩免费久久| 国产精品.xx视频.xxtv| 老色鬼久久亚洲一区二区| 日韩欧美看国产| 久久久91麻豆精品国产一区| 日韩欧乱色一区二区三区在线| 久久精品国产www456c0m| 久久免费精品| 国产免费播放一区二区| 亚洲精品黄色| 欧洲毛片在线视频免费观看| 福利在线免费视频| 亚洲黄色中文字幕| 亚洲综合电影一区二区三区| 性欧美长视频| 日韩一区二区三区四区五区| 无码日韩精品一区二区免费| 成人久久一区| 国产精品美女久久久久久不卡| 久久福利影视| 欧洲激情综合| 男人的天堂久久精品| 97精品国产一区二区三区| 欧美三级第一页| 日韩中文字幕在线一区| 久久精品导航| 蜜臀国产一区| 高潮久久久久久久久久久久久久| 欧美日韩国产一区二区在线观看| 欧美中文字幕| 亚洲欧美日本国产专区一区| 午夜欧美在线| 欧美高清一区| 欧美一级精品| 人人香蕉久久| 香蕉成人av| 日韩另类视频| 日韩精品免费一区二区在线观看| 福利在线免费视频| 青青青免费在线视频| 欧美黄色一区| 欧美国产另类| 欧美激情网址| 欧美黑人巨大videos精品| 麻豆免费精品视频| 国产精品.xx视频.xxtv| 国产精品密蕾丝视频下载| 国产精品久久| 精品久久电影| 日韩精品中文字幕第1页| 人人精品亚洲| 婷婷激情图片久久| 日韩亚洲国产欧美| 丝袜美腿高跟呻吟高潮一区| 亚洲欧美一级| 日韩高清欧美激情| 国产精品啊v在线| 97国产成人高清在线观看| 久久蜜桃精品| 午夜亚洲精品| 日韩精品一区二区三区中文 | 久久精品五月| 成人影视亚洲图片在线| 欧美sss在线视频| 一区在线视频观看| 亚洲精品系列| 久久国产精品免费一区二区三区| 国产精品永久| 中国字幕a在线看韩国电影| 亚洲高清av| 蜜臀va亚洲va欧美va天堂| 91亚洲无吗| www.九色在线| 久久大逼视频| 国产福利一区二区三区在线播放| 日韩不卡一区| 国产亚洲综合精品| 91精品国产自产观看在线| 精品国产一区二区三区性色av| 日韩中文首页| 中文一区一区三区免费在线观 | 亚洲综合精品| 国产欧美69| 91精品国产乱码久久久久久久| 久久大逼视频| 久久女人天堂| 99日韩精品| 国产精品s色| 亚洲a一区二区三区| 99国产精品久久久久久久成人热| 97久久中文字幕| 999久久久免费精品国产| 亚洲伊人精品酒店| 久久这里只有| 亚洲色诱最新| 国产麻豆精品| 国精品一区二区三区| 久久狠狠久久| 青青久久av| 日本a口亚洲| 久久精品青草| 欧美亚洲专区| 欧美色图国产精品| 欧美在线不卡| 亚洲大片在线| 国产精品欧美三级在线观看| 亚洲特级毛片| 国产精品1luya在线播放| 女人天堂亚洲aⅴ在线观看| 国产精品一区二区精品视频观看| 亚洲天堂1区| 亚洲精品成人一区| 久久天堂av| 国产精品白丝久久av网站| 亚洲综合精品| 欧美久久天堂|