EasyUI的使用

EasyUI的使用

构建前端测试项目

引入依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>

<dependencies>
    <!--SpringWeb Test-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

    <!--文件支持-->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>

    <!--添加jsp支持-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <!--自动监测页面更新-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

构建入口类,并配置sprintboot

# 服务基本配置
server.port=8080
server.servlet.context-path=/
server.servlet.init-parameters.development=true

# 文件上传
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.location=/Users/admin/Desktop/uploadTmpDir

# post表单提交乱码
spring.http.encoding.charset=UTF-8
server.tomcat.uri-encoding=UTF-8

进入EasyUI官网下载 (免费版即可)

在项目webapp中创建 static 文件夹,存放静态资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xVwIPkam-1585665219657)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1584943495880.png)]

使用 spring-boot:run 插件启动项目

引入EasyUI中的样式

<link rel="stylesheet" type="text/css" href="/static/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="/static/easyui/themes/icon.css">
<script type="text/javascript" src="/static/common/jquery.min.js"></script>
<script type="text/javascript" src="/static/easyui/jquery.easyui.min.js"></script>
<!--语言包默认放最后否则不生效-->
<script type="text/javascript" src="/static/easyui/locale/easyui-lang-zh_CN.js"></script>

EasyUI中的组件

按钮

链接按钮

方式一:

<a href="#" class="easyui-linkbutton" >按钮1</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'" >按钮2</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-redo',iconAlign:'right',plain:true" >按钮4</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-man'"style="width:100px;height: 30px" >按钮7</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-man'" onclick="clickMe()" style="width:100px;height: 30px" >按钮8</a>

方式二:

<script>
    $(function () {
        $('#btn1').linkbutton({
            iconCls: 'icon-search',
            iconAlign:'right',
            width:100,
            height: 30,
            onClick:function () {
                alert("点我了")
            }
        });
    })
</script>

<a id="btn1">按钮</a>
开关按钮

方式一:

<script>
    function change(check) {
        console.log("是否选中:"+check)
    }
</script>

<input class="easyui-switchbutton" data-options="onText:'Yes',offText:'No'" checked>
<input class="easyui-switchbutton" data-options="onText:'',offText:'',width:100,height:30,handleWidth:50,handleText:'性别'">
<input class="easyui-switchbutton" data-options="onText:'',offText:'',width:100,height:30,handleWidth:50,handleText:'性别',onChange:change">

方式二:

<script>
    $(function () {
        $("#sw_btn").switchbutton({
            onText:'男',
            offText:'女',
            width:100,
            height:30,
            handleWidth:40,
            handleText:'性别',
            disabled:true,
            onChange:function (checked) {
                console.log("checked:"+checked)
            }
        })
        $("#l_btn1").linkbutton({
            iconCls:"icon-ok",
            onClick:function () {
                $("#sw_btn").switchbutton("check")
            }
        })
        $("#l_btn2").linkbutton({
            iconCls:"icon-redo",
            onClick:function () {
                $("#sw_btn").switchbutton("uncheck")
            }
        })
    })
</script>

<input id="sw_btn" >
<a id="l_btn1">选中</a>
<a id="l_btn2"> 取消</a>

菜单

菜单模板

<div id="menu1" class="easyui-menu" style="width:120px;">
    <div>New</div>
    <div>
        <span>Open</span>
        <div style="width:150px;">
            <div data-options="iconCls:'icon-man'"><b>Word</b></div>
            <div>Excel</div>
            <div>PowerPoint</div>
        </div>
    </div>
    <div data-options="iconCls:'icon-save'">Save</div>
    <div class="menu-sep"></div>
    <div data-options="iconCls:'icon-redo'">Exit</div>
</div>

在菜单被创建的时候它是隐藏和不可见的。调用’show’方法显示菜单。

<script>
    $(function () {
        //截获鼠标右击位置
        $("html").contextmenu(function (e) {
            $("#menu1").menu("show",{left:e.clientX, top:e.clientY})
            return false;
        })
    })
</script>

菜单注册动作

$("#menu1").menu({
    onClick:function(item){
        console.log(item)
        if(item.text == "Exit"){
            var target=item.target
            $("#menu1").menu('setText', {target: target, text: '退出'})
        }
        if(item.text == "退出"){
            var target=item.target
            $("#menu1").menu('setText', {target: target, text: 'Exit'})
        }
    }
})

表单控件

validatebox验证框
<input id="vv" class="easyui-validatebox" data-options="required:true,validType:'email'" />

class可选值:

easyui-validatebox   普通验证
easyui-textbox 	     文本框
easyui-passwordbox	 密码框

validType可选值

email:匹配E-Mail的正则表达式规则。
url:匹配URL的正则表达式规则。
length[0,100]:允许在x到x之间个字符。
remote['http://.../action.do','paramName']:发送ajax请求需要验证的值,当成功时返回true。

自定义验证规则

在common文件夹下创建 validatebox.default.js 文件 (书写自定义验证规则)

$.extend($.fn.validatebox.defaults.rules, {
    minLength: {
        validator: function(value, param){
            return value.length == param[0];
        },
        message: '请输入{0}个字符.'
    }
});

在表单中进行应用

<input id="client" class="easyui-validatebox" data-options="required:true,validType:'minLength[6]'" />
表单数据验证后提交

表单数据

<form id="form1" method="post">
    用户名:<input id="vv" class="easyui-textbox" name="name" data-options="required:true,validType:'remote[\'/ValidateController/name\',\'name\']'" /><br/>
    密码:<input id="client" class="easyui-passwordbox" name="password" data-options="required:true,validType:'minLength[6]'" /><br/>
    Email:<input id="myclient" name="email"/>
    <input type="submit" value="提交"/>
    <input type="reset" value="重置"/>
</form>

remote 验证的Controller

@RestController
@RequestMapping("/ValidateController")
public class ValidateController {
    
    private static Logger logger= LoggerFactory.getLogger(ValidateController.class);
    private List<String> reserveName= Arrays.asList("admin","test");

    @PostMapping(value = "name")
    public boolean isValidate(String name) {
        logger.debug("name:"+name);
        return !reserveName.contains(name);
    }
}

表单中的字段全部验证成功后才能提交

$(function () {
    $("#form1").form({
        //表单提交链接
        url:'/xxx/xxx',
        //返回true表单正常提交
        onSubmit: function(){
            console.log("----validate----")
            //当所有字段都有效的时候返回true。
            return $("#form1").form("validate")
        },
        //表单成功后触发,只要提交即可
        success:function(data){
            alert(data)
        }
    })
})
表单本地数据回填
<a id="btn_1">表单本地数据回填</a>
$("#btn_1").linkbutton({
    "onClick":function () {
        $("#form1").form(
            "load",{
                name:'aaa',
                password:"111111",
                email:'mymail@gmail.com',
            })
    }
})
表单远程数据回填
<a id="btn_2">表单远程数据回填</a>
$("#btn_2").linkbutton({
    "onClick":function () {
        $("#form1").form(
            "load",'/ValidateController/getForm'
        )
    }
})
@RestController
@RequestMapping("/ValidateController")
public class ValidateController {
    private static Logger logger= LoggerFactory.getLogger(ValidateController.class);

    @GetMapping(value = "/getForm")
    public Map<String,Object> getForm(){
        Map<String,Object> map=new HashMap<>();
        map.put("name","aaa");
        map.put("password","111111");
        map.put("email","qqq@qq.com");
        return map;
    }
}
Combobox下拉列表

普通方式创建

<select  class="easyui-combobox" name="dept" style="width:200px;">
    <option value="gg">攻关部</option>
    <option value="yf">研发部</option>
    <option value="sc">市场部</option>
    <option value="cp">产品部</option>
</select>

jquery方式创建 (从controller中直接拿值)

<input id="cc" name="dept" value="aa">  
$('#cc').combobox({
    url:'/ValidateController/combobox',
    valueField:'key',
    textField:'value'
});
@PostMapping(value="/combobox")
public List<Map<String,Object>> combobox(){
    List<Map<String,Object>> list=new ArrayList<>();
    Map<String,Object> m1=new HashMap<>();
    m1.put("key","gg");
    m1.put("value","公关部");

    HashMap<String, Object> m2 = new HashMap<>();
    m2.put("key","ya");
    m2.put("value","研发部");

    HashMap<String, Object> m3 = new HashMap<>();
    m3.put("key","sc");
    m3.put("value","市场部");
    m3.put("selected","true");

    list.add(m1);
    list.add(m2);
    list.add(m3);
    return list;
}
日期输入框
<input  id="dd"  type= "text" class= "easyui-datebox" required ="required"> </input>  
<!--editable定义用户是否可以手动输入-->
<input class="easyui-datetimebox" name="birthday"
             data-options="required:true,showSeconds:true,editable:false"  style="width:300px">

Dialog 窗口

对话框窗口

<div id="login_dialog"></div>
<div id="register_dialog"></div>
//javascript页面加载完毕后执行如下代码
$("#login_dialog").dialog({
    //高度不写默认自适应填写字段的多少(一般不写)
    width:400,
    title:"用户登录",
    top:120,
    //定义窗口是否可关闭
    closed:false,
    iconCls:'icon-man',
    //定义是否显示关闭按钮。
    closable:false,
    //定义是否显示关闭按钮。
    draggable:false,
    //对话框窗口中的内容(表单)
    href:'login.html',
    cache:false,
    //定义是否显示关闭按钮。
    modal:true,
    toolbar:[{
        text:'注册',
        iconCls:'icon-add',
        handler:function(){
            $("#login_dialog").dialog("close")
            $("#register_dialog").dialog("open")
        }
    }],
    buttons:[{
        text:'提交',
        iconCls:'icon-ok',
        handler:function(){
            $("#user_login_form").form("submit")
        }
    },{
        text:'重置',
        iconCls:'icon-redo',
        handler:function(){
            $("#user_login_form").form("reset")
        }
    }]
})

login.html 页面中没有等标签,只有表单和

login.html(注意页面布局)

<script>
    $(function () {
        $("#user_login_form").form({
            //表单提交链接
            url:'http://localhost:9090/UserModel/formUserManager/userLogin',
            //返回true表单正常提交
            onSubmit: function(){
                //当所有字段都有效的时候返回true。
                return $("#user_login_form").form("validate")
            }
            // ,
            // //表单成功后触发,只要提交即可
            // success:function(data){
            //     alert(data)
            // }
        })
    })
</script>

<form id="user_login_form" method="post">
    <div style="height: 40px;margin-top: 5px;padding: 0 10% 0 10%">
        <input name="name" class="easyui-textbox" data-options="required:true,prompt:'用户名',iconCls:'icon-man'" style="height: 100%;width: 100%" >
    </div>
    <div style="height: 40px;margin-top: 5px;padding: 0 10% 0 10%">
        <input name="password" class="easyui-passwordbox" data-options="required:true,prompt:'密码',iconCls:'icon-lock'" style="height: 100%;width: 100%" >
    </div>
    <div style="height:40px;margin-top: 5px;margin-bottom: 10px;padding: 0 10% 0 10%">
        <div style="float: left;width: 30%;height:100%;background-color: #3d3d3d">
            <img id="imgVcode" src="http://localhost:9090/UserModel/Create/createImg" style="height:100%;width: 110px" class="Ucc_captcha Captcha-image" onClick="changeImage()">
        </div>
        <div style="float: left;width: 70%;height:100%;">
            <input name ="clientCode" class="easyui-textbox" data-options="prompt:'输入4位验证码',required:true,validType:'minLength[4]'" style="height: 100%;width: 100%" >
        </div>
    </div>
</form>

布局

<body class="easyui-layout">
    <div data-options="region:'north',split:true,border:false,href:'head.html'" style="height:80px;"></div>
    <div data-options="region:'south',split:true,border:false,href:'foot.html'" style="height:60px;"></div>
    <div data-options="region:'west',title:'操作系统',split:true,border:false,href:'left.html',collapsible:true,tools:'#tools'" style="width:180px;"></div>
    <div id="tools">
        <a href="#" class="icon-reload" onclick="javascript:alert('刷新')"></a>
    </div>
    <div data-options="region:'center',border:false" style="padding:5px"></div>
</body>

直接通过 href:‘foot.html’ 引入页面即可

slid-menu侧栏菜单
<div id="slid-menu" data-options="fit:true"></div>
$("#slid-menu").sidemenu({
    border:false,
    multiple:false,
    data:[{
        "text": "用户管理",
        "iconCls": "icon-man",
        "state": "close",
        "children": [{
            "iconCls": "icon-edit",
            "text": "用户数据表格",
            "attributes":{"url":"/form/test"}
        },{
            "text":"用户分析报表",
            "iconCls": "icon-search",
            "attributes":{"url":"/form/test"}
        }]
    },{
        "text": "订单管理",
        "iconCls": "icon-sum",
        "state": "close",
        "children": [{
            "iconCls": "icon-print",
            "text": "订单数据表格",
            "attributes":{"url":"/form/test"}
        },{
            "text": "订单分析报表",
            "iconCls": "icon-tip",
            "attributes":{"url":"/form/test"}
        }]
    }],
    onSelect:function (item) {
        console.log(item)
        //点击开启选项卡
        addTabs(item)
    }
})
Tabs 选项卡配置
function addTabs(item){
    //判断是否已经打开tab
    if($('#center_tabs').tabs("exists",item.text)){
        //如果选项卡已经打开,则选中该选项卡
        $('#center_tabs').tabs("select",item.text)
        return;
    }else{
        $('#center_tabs').tabs('add',{
            title:item.text,
            //对应上面 data 数据中的attributes属性,加载选项卡中的内容
            href:item.attributes['url'],
            "iconCls": item.iconCls,
            closable:true,
            //选项卡中的小工具
            tools:[{
                iconCls:'icon-mini-refresh',
                handler:function(){
                    //小工具刷新选项卡
                    var tab= $('#center_tabs').tabs("getTab",item.text)
                    tab.panel("refresh")
                }
            }]
        });
        var tab= $('#center_tabs').tabs("getTab",item.text)
        //设置鼠标移入则选中该选项卡
        tab.panel('options').tab.unbind().bind('mouseenter',function(e){
            $('#center_tabs').tabs('select', item.text);
        });
    }
}
选项卡中内容显示
<!--数据表格选项卡展示-->
<table id="user_dg"></table>

<!--选项卡的头-->
<div id="tb">
    <!--选项卡上的工具栏-->
    <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add',plain:true">添加</a>
    <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit',plain:true">修改</a>
    <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-remove',plain:true">删除</a>
    <div style="float: right;width: 30%;">
        <!--选项卡上的搜索框-->
        <input id="user_sb"  class="easyui-searchbox" style="width:100%;" data-options="prompt:'Please Input Value',menu:'#mm'"></input>
    <div id="mm" style="width:180px;float: right;margin-right: 0px">
        <div data-options="name:'name',iconCls:'icon-man'">用户名</div>
        <div data-options="name:'email',iconCls:'icon-ok'">邮件</div>
    </div>
</div>
</div>
$(function () {
    $("#user_dg").datagrid({
        url:'/formUserManager/queryUserByPage',
        method:"get",
        fitColumns:true,
        toolbar: '#tb',
        //数据表格中的颜色一行一环
        striped:true,
        //分页工具栏
        pagination:true,
        rownumbers:true,
        //一次只允许选择一行
        singleSelect:true,
        pageNumber:1,
        pageSize:10,
        pageList:[5,10,15,20,25,30],
        //查询参数
        queryParams: {
            column: '',
            value: ''
        },
        //表格中数据的属性设置
        columns:[[
            {field:'id',title:'用户ID',width:5,align:"center"},
            {field:'name',title:'用户名',width:5,align:"center"},
            {field:'password',title:'密码',width:10,align:"center",formatter: function(value,row,index){
                return "********"
            	}
            },
            {field:'sex',title:'性别',width:5,align:"center",formatter: function(value,row,index){
                //性别进行格式化输出
                // console.log(value+" "+row+" "+index)
                return value?"男":"女"
            	}
            },
            {field:'birthDay',title:'生日',width:10,align:"center"},
            {field:'email',title:'邮箱',width:15,align:"center"},
            {field:'photo',title:'图片',width:10,align:"center",formatter: function(value,row,index){
                //用户图片展示
                return "<img style='width:50px;height:50px;border-radius: 50%' src='http://centos/"+value+"'/>"
            	}
            },
        ]]
    });
})
搜索框的使用
<!--选项卡上的搜索框-->
<input id="user_sb"  class="easyui-searchbox" style="width:100%;" data-options="prompt:'Please Input Value',menu:'#mm'"></input>
<div id="mm" style="width:180px;float: right;margin-right: 0px">
    <div data-options="name:'name',iconCls:'icon-man'">用户名</div>
    <div data-options="name:'email',iconCls:'icon-ok'">邮件</div>
</div>
// 搜索框的使用
$('#user_sb').searchbox({
    searcher: function (value, name) {
        alert(value + "," + name)
    }
})
选项卡中删除按钮
//删除按钮
$("#user_dg_delete").linkbutton({
    onClick:function () {
        //弹出确认删除框
        $.messager.confirm('删除', '请确认删除此条用户信息!', function(r){
            if (r){
                //确保用户有选中的行
                var rows = $("#user_dg").datagrid('getSelections');
                if(rows.length<1){
                    $.messager.alert('提示','至少选择一行数据删除!')
                    return
                }else{
                    //获取要删除的数据id
                    var ids=[];
                    for(i in rows){
                        ids.push(rows[i].id)
                        //假删数据
                        // var rowindex = $("#user_dg").datagrid('getRowIndex',rows[i]);
                        // $("#user_dg").datagrid('deleteRow',rowindex)
                    }
                    //发送ajax请求,删除数据库中的数据,并刷新页面
                    $.ajax({
                        url:"/formUserManager/delteUserByIds",
                        type:"DELETE",
                        data:{ids:ids.join(",")},
                        success:function (data) {
                            console.log("ajax返回的数据"+data)
                            //刷新页面
                            $("#user_dg").datagrid("reload")
                        }
                    })

                    console.log(ids);
                }
            }
        });
    }
})
<a id="user_dg_delete"class="easyui-linkbutton" data-options="iconCls:'icon-remove',plain:true">删除</a>

Controller中的逻辑

@DeleteMapping(value = "/delteUserByIds")
@ResponseBody
public String delteUserByIds(@RequestParam(value = "ids") Integer[] ids){
    String url=prefix+"/deleteUserByIds?ids={id}";
    Map<String,Object> parameters=new HashMap<String,Object>();
    parameters.put("id", Arrays.stream(ids).map(i->i.toString()).reduce((v1,v2)->v1+","+v2).get());
    restTemplate.delete(url,parameters);
    return "ok";
}

页面背景图片

<body style="background: url('http://www.uimaker.com/uploads/userup/0/1413012235-43G.png')"></body>

html页面的当前用户展示

登录成功后,在controller中往session中添加 user 对象

session.setAttribute("user",loginUser);

在 html 页面中,调用手写插件返回当前登录的用户名

<!--首先引入手写的插件-->
<script type="text/javascript" src="/static/common/plugin.js"></script>
<script>
    //显示用户信息,调用插件
    $("#current_user").sessionUser({
        url:'/formUserManager/sessionUser'
    })
</script>
<span id="current_user" style="color: darkgoldenrod"></span>

手写插件内容如下:

$.fn.extend({
    sessionUser:function(options){
        var defaultOptions={
            url:"/formUserManager/sessionUser"
        }
        options=$.extend(defaultOptions,options)
        $(this).each(function (i,item) {
            $.get(options.url,function(data){
                $(item).text(data.name)
            })
        })
    }
})

用户登出

在页面定义一个退出登录的按钮

<a id="exit">退出登录</a>

为单击退出按钮注册事件

$(function () {
    //点击退出按钮
    $("#exit").linkbutton({
        iconCls: 'icon-cancel',
        iconAlign:'right',
        width:100,
        height: 30,
        onClick:function () {
            //弹出确定退出消息框
            $.messager.confirm('三思啊', '你确定要退出吗?', function(r){
                if (r){
                    $.ajax({
                        url:"/formUserManager/logout",
                        type:"post",
                        success:function (data) {
                            window.location.href="http://localhost:9999/user/dialog.html";
                        }
                    })
                }
            });
        }
    });
})

在 controller 中提供消除session中数据的方法

@PostMapping(value = "/logout")
@ResponseBody
public void logout( HttpSession session){
    session.invalidate();
    //session.removeAttribute("user");
}

HTML页面背景图片的设置

在HTML页面的同一个文件夹下添加背景图片 background.png

<body style="background-image: url('background.png')">
   height: 30,
    onClick:function () {
        //弹出确定退出消息框
        $.messager.confirm('三思啊', '你确定要退出吗?', function(r){
            if (r){
                $.ajax({
                    url:"/formUserManager/logout",
                    type:"post",
                    success:function (data) {
                        window.location.href="http://localhost:9999/user/dialog.html";
                    }
                })
            }
        });
    }
});

})


在 controller 中提供消除session中数据的方法

```java
@PostMapping(value = "/logout")
@ResponseBody
public void logout( HttpSession session){
    session.invalidate();
    //session.removeAttribute("user");
}

HTML页面背景图片的设置

在HTML页面的同一个文件夹下添加背景图片 background.png

<body style="background-image: url('background.png')">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值