最近受朋友委托为朋友开发了一个简易的家谱管理系统,系统核心采用Thinkphp5界面部分使用了Layui的布局。项目开发完成后,觉得应该有朋友会需要用到,因此也对项目源码进行了开源。下载地址:https://gitee.com/zkii_admin/jiapu。
今天主要记录的笔记是利用Echarts实现折线树形家谱图,具体效果如下图所示:
HTML部分较为简单,只需要一行div,设置ID属性及宽高定义即可。JS部分代码片段:
- <script src="/static/plugs/jquery/jquery.min.js"></script>
- <script src="/static/admin/echarts/chart/echarts.js"></script>
- <script type="text/javascript">
- //Echarts CDN路径
- require.config({
- paths: {
- echarts: 'https://cdn.jsdelivr.net/npm/[email protected]/build'
- }
- });
- var bid = {$id}; //Ajax请求参数,可忽略
- var fid = {$fid}; //Ajax请求参数,可忽略
- require(['echarts','echarts/chart/tree'],function (ec) {
- // 基于准备好的dom,初始化echarts图表
- var myChart = ec.init(document.getElementById('mainStructure'));
- myChart.showLoading();
- $.post('/admin/branch/createStruct.html',{branch_id:bid,fid:fid},function (res) {
- console.log(res);
- var option = {
- title : {
- text: '家族分支图谱',
- x:'center',
- y:"40",
- },
- tooltip : {
- show: true,
- trigger: 'item',
- formatter: function (v) {
- var phone = v.contact == undefined?"无":v.contact
- return "字辈:["+v.value+"]"+'<br/>'+"手机:"+phone;
- },
- textStyle: {
- fontSize: 18,
- fontFamily:'Microsoft YaHei',
- }
- },
- toolbox: {
- show : true,
- feature : {
- restore : {show: true},
- saveAsImage : {show: true}
- }
- },
- calculable : true,
- series : [
- {
- name:'家族树',
- type:'tree',
- layout:'orthogonal',
- orient: 'vertical', // vertical horizontal
- rootLocation: {x: '50%', y: '110'}, // 根节点位置 {x: 'center',y: 10}
- nodePadding: 10,
- layerPadding:40,
- width:"100%",
- symbol: 'rectangle',
- borderColor:'black',
- roam: true,
- itemStyle: {
- normal: {
- color: '#fff',//节点背景色
- borderWidth: 2,
- borderColor: 'black',
- label: {
- show: true,
- position: 'inside',
- textStyle: {
- color: 'black',
- fontSize: 16,
- }
- },
- lineStyle: {
- color: '#000',
- width: 1,
- type: 'broken'
- }
- },
- emphasis: {
- label: {
- show: false,
- }
- }
- },
- data:[res],
- }
- ]
- };
- // 为echarts对象加载数据
- myChart.hideLoading();
- myChart.setOption(option);
- })
- });
- </script>
由于家族成员会随着时间推移越来越多,导致Canvas绘图区域无法全部显示,因此最好的方法是分片打印。上述示例中已经开启了Echarts的拖拽显示以及缩放。可以用鼠标拖拽、鼠标滚轮来缩放树形图谱的大小。
更多的参数也可参阅Echarts树形结构的文档。