echarts饼图与表单联动「建议收藏」

echarts饼图与表单联动「建议收藏」最近在学习echarts,做了一个饼图和表单数据联动的案例。当鼠标移入饼图的时候,表单对应的区域会变色,离开变回原样。并且表单增加、删除或修改数据之后饼状图对应变化。先放效果图~无操作的样子鼠标移入的样子当右边进行编辑删除,或者新增来源的时候饼状图响应的变化下面上代码<head><metahttp-equiv="content-type"content="text/…

大家好,欢迎来到IT知识分享网。

最近在学习echarts,做了一个饼图和表单数据联动的案例。

当鼠标移入饼图的时候,表单对应的区域会变色,离开变回原样。并且表单增加、删除或修改数据之后饼状图对应变化。

先放效果图~

无操作的样子

echarts饼图与表单联动「建议收藏」

鼠标移入的样子

echarts饼图与表单联动「建议收藏」

当右边进行编辑删除,或者新增来源的时候饼状图响应的变化

下面上代码

<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>GXL</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="keywords" content="GXL">
    <meta name="description" content="GXL">

    <link rel="shortcut icon" href="${ctx}/static/img/favicon.ico">
    <link rel="stylesheet" href="${ctx}/static/layui_v2/css/layui.css">

    <link rel="stylesheet" href="${ctx}/static/css/global.css">
    <link rel="stylesheet" type="text/css" href="${ctx}/static/css/common.css" media="all">
    <link rel="stylesheet" type="text/css" href="${ctx}/static/css/personal.css" media="all">
    <link rel="stylesheet" href="${ctx}/static/css/main.css">

    <link rel="stylesheet" type="text/css" href="http://at.alicdn.com/t/font_9h680jcse4620529.css">

    <script src="${ctx}/static/layui_v2/layui.js"></script>

    <script src="${ctx}/static/js/jquery-1.8.3.js"></script>
 

    <script type="text/javascript" src="${ctx}/static/echarts/echarts.min.js" charset="utf-8"></script>
    <script type="text/javascript" src="${ctx}/static/echarts/macarons.js" charset="utf-8"></script>

</head>
<body>
<div class="larry-grid layui-anim layui-anim-upbit larryTheme-A" >
    <div class="larry-personal" >
        <div class="layui-tab" >
            
            <div class="larry-separate"></div>
            <!-- 菜单列表 -->
            <div class="row">
            
                <div class="sysNotice col">
                        <div class="layui-colla-item">
                            <h2 class="layui-colla-title" style="background-color: #ffffff;">图形展示</h2>
                            <div class="layui-colla-content layui-show" >
                                <div id="container" style="height: 380px; margin: 0 auto;width: 100%;"></div>
                            </div>
                        </div>

                </div>
                
                <div class="sysNotice col">
                        <div class="layui-colla-item">
                            <h2 class="layui-colla-title layui-inline" style="background-color: #ffffff;">数据展示</h2>
	                            <shiro:hasPermission name="4JQVLmOd">
			                        <div class="layui-inline" style="margin-bottom:auto;margin-left: auto;">
			                            <a class="layui-btn layui-btn-sm layui-btn-normal announcementAdd_btn"> <i class="layui-icon larry-icon larry-xinzeng1"></i>新增来源</a>
			                        </div>
			                    </shiro:hasPermission>
                            <div class="layui-colla-content layui-show" style="height: 380px; margin: 0 auto;width: 100%;">
									<table id="userTableList"  lay-filter="userTableId"></table>
                            </div>

                    </div>
                </div>

            </div>

        </div>
    </div>
</div>

这块主要用到layui来进行布局,所以需要提前准备好layui和echarts的配置文件

<script type="text/javascript">
    var $;
    layui.config({
        base : "${ctx}/static/js/"
    }).use(['form','jquery','layer','common','element','table'],function() {
        $ = layui.$;
              var  form = layui.form,
                element = layui.element,
                table = layui.table,
                common = layui.common;

        var loading = layer.load(0,{ shade: [0.3,'#000']});

       
		/**用户表格加载*/
        table.render({
            elem: '#userTableList',
            url: '${ctx}/chart/ajax_echarts_chart_list.do',
            id:'userTableId',
            method: 'post',
            height:'full-140',
            skin:'row',
            even:'true',
            size: 'sm',
            cols: [[
                {type:"numbers"},
                //{type:"checkbox"},
                {field:'loginFrom', title: '用户来源',align:'center' },
                {field:'loginFromCount', title: '来源数量',align:'center',width: '17%'},
                {title: '操作', align:'center', toolbar: '#messageBar'}
            ]],
            page: true,
            done: function (res, curr, count) {
                common.resizeGrid();
                layer.close(loading);

            }
        });
        
        //首页卡片tab添加
        $(".panel a").on("click",function(){
            window.parent.addTab($(this));
        });
        //首页数据初始化
        homeInit();

        //图表
        var psLineChar = echarts.init(document.getElementById('container'),'macarons');

        //查询
        function loadDrugs() {
            psLineChar.clear();
            psLineChar.showLoading({text: '正在努力的读取数据中...'});
            $.post("${ctx}/chart/ajax_echarts_login_from.do", function(data) {
            
            
	      //因为下面的数据格式要求,所以提前声明一个list,并给他设置属性
              var v  = data.loginFromCount;
              var n = data.loginFrom;
              var list = [];
              
              for(var i = 0; i < v.length; i++){
              	var row = {};
              	row.value = v[i];
              	row.name = n[i];
              	list.push(row);
              }
              
                var option = {
				    title : {
				        text: '本站点用户访问来源',
				        subtext: '2016~2017',
				        x:'center'
				    },
				    tooltip : {
				        trigger: 'item',
				        formatter: "{a} <br/>{b} : {c} ({d}%)"//这个是固定写法,可以查看layui的API文档
				    },
				    legend: {
				        orient : 'vertical',
				        x : 'left',
				        /* data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎'] */
				        data:data.loginFrom
				    },
				    calculable : true,
				    series : [
				        {
				            name:'访问来源',
				            type:'pie',
				            radius : '55%',//半径
				            center: ['50%', 225],//圆心坐标
				            //selectedMode:true,//选中模式
				            data:list
				           /*  [
							     {value:335, name:'直接访问'},
							     {value:310, name:'邮件营销'},
							     {value:234, name:'联盟广告'},
							     {value:135, name:'视频广告'},
							     {value:1548, name:'搜索引擎'}
							 ] */
				        }
				    ]
				};
				
				psLineChar.setOption(option, true);
				
				//鼠标移入
				function eConsole(param) {
				   var i = param.dataIndex;// 获取当前点击索引,
				  
				
				  //clickFunc(param.dataIndex);//执行点击效果
			        $("tbody tr").each(function(){
			            //alert($(this).index()); 获取数据表格每行的索引
			            var a = $(this).index();
			            if(a == i){
			            	$("tbody tr").eq(a).css("background-color","yellow");
			            }           
			        });                
					
				};
				//鼠标移出
				function zConsole(param) {
				   var i = param.dataIndex;// 获取当前点击索引,
				  
				
			        $("tbody tr").each(function(){
			            //alert($(this).index()); 获取数据表格每行的索引
			            var a = $(this).index();
			            if(a == i){
			            	$("tbody tr").eq(a).css("background-color","");
			            }           
			        });                
					
				};
				
				psLineChar.on("mouseover", eConsole);//鼠标移入
				psLineChar.on("mouseout", zConsole);//鼠标移出
					
            });
            psLineChar.hideLoading();

        }


        //载入图表
        loadDrugs();

        //浏览器大小改变时重置大小
        window.onresize = function () {
            psLineChar.resize();

        };
        layer.close(loading);
        
        
        //新增来源
        $(".announcementAdd_btn").click(function(){
        	var url = "${ctx}/loginfrom/loginfrom_add.do";
			common.cmsLayOpen('新增用户来源',url,'580px','300px');        
        });
        
        
        
        
        
        /**监听工具条*/
        table.on('tool(userTableId)', function(obj){
            var data = obj.data; //获得当前行数据
            var layEvent = obj.event; //获得 lay-event 对应的值

			 //编辑来源信息
            if(layEvent === 'role_edit') {
                var loginFromId = data.loginFromId;
                var url = "${ctx}/loginfrom/loginfrom_update.do?loginFromId="+loginFromId;
                common.cmsLayOpen('编辑用户来源信息',url,'580px','300px');
                
                
            //来源信息删除
            }else if(layEvent === 'message_delete') {
                var loginFromId = data.loginFromId;
                var url = "${ctx}/loginfrom/ajax_del_loginfrom.do";
                var param = {loginFromId:loginFromId};
                common.ajaxCmsConfirm('系统提示', '确定要删除当前信息吗?',url,param);

            }
        });
        
        


    });
    /**页面赋值初始化*/
    function homeInit() {
      
    }
</script>

<!--工具条 操作-->
<script type="text/html" id="messageBar">
    <div class="layui-btn-group">
		<shiro:hasPermission name="moHbdnjz">
            <a class="layui-btn layui-btn-xs role_edit" lay-event="role_edit"><i class="layui-icon larry-icon larry-bianji2"></i> 编辑</a>
        </shiro:hasPermission>
        <shiro:hasPermission name="eTDnjGAM">
            <a class="layui-btn layui-btn-xs layui-btn-danger message_delete" lay-event="message_delete"><i class="layui-icon larry-icon larry-ttpodicon"></i>删除</a>
        </shiro:hasPermission>
    </div>
</script>

代码如上~

思路大概为:当鼠标移入饼状图的时候,获取当前项的索引,然后将表单的每行索引遍历,如果一样,则给这一行增加一个背景色。鼠标离开的时候去掉背景色(找表单的索引找了半天,最后才发现layui会默认给所有的表单一个tbody tr,但问题来了,如果这个页面还有别的表单怎么办,希望有办法的同学可以留言告诉我–囧)

因为饼状图和表单用的是同一个数据库,所以当增删改完成的时候重新刷新一下页面饼图就自动更改了

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25278.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信