layui后台表格的增删改查

完整案例
github自己下下来,就是个很一般的ssm项目,但基本功能都有,已部署到云平台。

后台管理员地址
暑假时候没做完凑合看吧

账号 17679210786 密码 123456 前后台都是,前台可以自己用手机号注册,别删除原来的内容

先贴下图:
显示用户界面
在这里插入图片描述

显示用户前端页面

<%--
  Created by IntelliJ IDEA.
  User: 廖泽铭
  Date: 2019/7/22
  Time: 11:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css"  media="all">
<script src="${pageContext.request.contextPath}/layui/layui.js" charset="utf-8"></script>
<script src="${pageContext.request.contextPath}/js/jquery.js"></script>
<html>
<head>
    <title>显示用户</title>
</head>
<body>
<div class="layui-row" id="EditUser" style="display:none;">
    <div class="layui-col-md10">
        <form class="layui-form layui-from-pane" id="updateUser"   style="margin-top:20px" >

            <input type="hidden" name="isadmin" id="isadmin">
            <input type="hidden" name="id" id="id">
            <input type="hidden" name="isforbid" id="isforbid">
            <input type="hidden" name="isable" id="isable">
            <input type="hidden" name="rtime" id="rtime">
            <div class="layui-form-item">
                <label class="layui-form-label">用户名</label>
                <div class="layui-input-block">
                    <input type="text" name="fname" id="fname"  required  lay-verify="required" autocomplete="off" placeholder="请输入用户名" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">手机号</label>
                <div class="layui-input-block">
                    <input type="text" name="phone" id="phone" required  lay-verify="required" autocomplete="off" placeholder="请输入年龄" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">邮箱</label>
                <div class="layui-input-block">
                    <input type="text" name="email" id="email" required  lay-verify="required" autocomplete="off" placeholder="请输入邮箱" class="layui-input">
                </div>
            </div>

            <div class="layui-form-item">
                <label class="layui-form-label">密码</label>
                <div class="layui-input-block">
                    <input type="text" name="password" id="password" required  lay-verify="required" autocomplete="off" placeholder="请输入密码" class="layui-input">
                </div>
            </div>
            <div class="layui-form-item">
                <label class="layui-form-label">真实姓名</label>
                <div class="layui-input-block">
                    <input type="text" name="name" id="name" required  lay-verify="required" autocomplete="off" placeholder="请输入真实姓名" class="layui-input">
                </div>
            </div>


            <div class="layui-form-item" id="showImg">
                <label class="layui-form-label">头像</label>
                <div class="layui-input-block">
                    <img class="layui-upload-img"  id="imgshow" src="" style="width:100px;height:100px;" >
                </div>
            </div>


            <div  class="layui-upload"  id="updateImg">
                <button type="button"  class="layui-btn layui-btn-primary" id="img" style="margin-top: 30px;margin-left: 10px">修改头像</button>
                <div class="layui-upload-list" style="margin-left: 120px;margin-top: -50px"  >
                    <img class="layui-upload-img" id="demo1" src="" style="width:100px;height:100px;" >
                    <p id="demoText"></p>
                </div>
            </div>

            <input type="hidden" name="headimg" id="headimg" value="" >


            <div class="layui-form-item">
                <label class="layui-form-label">自我介绍</label>
                <div class="layui-input-block">
                    <input type="text" name="introduce" id="introduce" required  lay-verify="required" autocomplete="off" placeholder="请输入自我介绍" class="layui-input">
                </div>
            </div>

            <div class="layui-form-item" style="margin-top:40px" id="check">
                <div class="layui-input-block">
                    <button class="layui-btn  layui-btn-submit " lay-submit="" lay-filter="formDemo" >确认修改</button>
                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                </div>
            </div>
        </form>
    </div>
</div>


<div class="demoTable" style="padding: 15px">
    搜索手机号:
    <div class="layui-inline">
        <input class="layui-input" id="find" autocomplete="off">
    </div>
    <button class="layui-btn" data-type="reload" id="queryRole" >搜索</button>
</div>

<table class="layui-hide" id="Users" lay-filter="test"></table>



<script type="text/html" id="toolbarDemo">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
        <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
        <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
    </div>
</script>
<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>

<style type="text/css">
    td div.layui-table-cell{height:60px;
        line-height: 60px;
        position: relative;
        text-overflow: ellipsis;
        white-space: nowrap;
        box-sizing: border-box;
        padding: 0px 15px;
        overflow: hidden;
    }
</style>

<script>
    layui.use(['table', 'form', 'layer','upload'], function () {
        var table = layui.table,
            layer = layui.layer,
            upload = layui.upload,
             // $ = layui.jquery
            form = layui.form;
        table.render({
            elem: '#Users'
            ,url:'${pageContext.request.contextPath}/ShowAllUser.action'
            ,type:'post'
            ,toolbar: '#toolbarDemo'
            ,title: '用户数据表'
            ,totalRow: true
            ,limit:6
            ,cols: [[
                {type: 'checkbox', fixed: 'left'}
                ,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true, totalRowText: '合计'}
                ,{field:'fname', title:'用户名', width:100, edit: 'text',sort: true, totalRow: true}
                ,{field:'phone', title:'手机号', width:120, edit: 'text'}
                ,{field:'email', title:'邮箱', width:100, edit: 'text'}
                ,{field:'password', title:'密码', width:120, sort: true,}
                ,{field:'name', title:'名字', width:120,sort: true}
                ,{field:'idcard', title:'身份证号',width:140,sort: true,}
                ,{field:'headimg', title:'头像', width:'10%',sort:true, templet:'<div><img width="120" height="50" src="/file/{{d.headimg}}"></div>'}
                ,{field:'introduce', title:'介绍', width:160}
                ,{field:'rtime', title:'加入时间', width:140, templet:function (d) {
                        var date=new Date(d.rtime)
                        var year = date.getFullYear()+'年';
                        var month = date.getMonth()+1+'月';
                        var date = date.getDate()+'日';
                        var date1=[year,month,date].join('')
                        return date1;
                    }}
                ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:200}
            ]]
            ,page: true

        });


        // 修改头像
        upload.render({
            elem: '#img'
            ,url: '${pageContext.request.contextPath}/picture/upload.action'
            ,before: function(obj){
                //预读本地文件示例,不支持ie8
                obj.preview(function(index, file, result){
                    $('#demo1').attr('src', result); //图片链接(base64)
                });
            }
            ,done: function(res){
                $("[name=headimg]").val(res.data);
                style:'display:inline-block;max-width:50%;height:auto'
                //如果上传失败
                if(res.code > 0){
                    return layer.msg('上传失败');
                }else {
                    layer.msg("上传成功");
                }
                //上传成功
            }
            ,error: function(){
                //演示失败状态,并实现重传
                var demoText = $('#demoText');
                demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
                demoText.find('.demo-reload').on('click', function(){
                    uploadInst.upload();
                });
            }
        });



        //根据phone关键字查询
        $('#queryRole').on('click', function(){
            var find=document.getElementById("find").value;
            table.reload('Users', {
                page:{ curr:1 },
                url:'${pageContext.request.contextPath}/selectUserByPhone.action',
                where:{'phone':find}
           })
        });


        form.on('submit(formDemo)', function(data) {
            $.ajax({
                url:'${pageContext.request.contextPath}/updateUser.action',
                type:'post',
                contentType:'application/json',
                data:JSON.stringify(data.field),
                success:function (msg) {
                    if(msg!=null){
                        layer.closeAll('loading');
                        layer.load(2);
                        layer.msg("修改成功", {icon: 6});
                        setTimeout(function(){
                            layer.closeAll();//关闭所有的弹出层
                            table.reload("Users");
                        }, 1000);
                        加载层-风格
                    }else{
                        layer.msg("修改失败", {icon: 5});
                    }
                }
            })
            return false;
        })



        //工具栏事件
        table.on('toolbar(test)', function(obj){
            var checkStatus = table.checkStatus(obj.config.id);
            switch(obj.event){
                case 'getCheckData':
                    var data = checkStatus.data;
                    layer.alert(JSON.stringify(data));
                    break;
                case 'getCheckLength':
                    var data = checkStatus.data;
                    layer.msg('选中了:'+ data.length + ' 个');
                    break;
                case 'isAll':
                    layer.msg(checkStatus.isAll ? '全选': '未全选')
                    break;
            };
        });


        //监听工具条
        table.on('tool(test)', function(obj){
            var data = obj.data;
            //查看
            if(obj.event === 'detail'){
                $("#check").hide();
                $("#showImg").show();
                $("#updateImg").hide();
                $("#isadmin").val(data.isadmin);
                $("#id").val(data.id);
                $("#isforbid").val(data.isforbid);
                $("#isable").val(data.isable);
                $("#rtime").val(data.rtime);
                $("#fname").val(data.fname);
                $("#phone").val(data.phone);
                $("#email").val(data.email);
                $("#password").val(data.password);
                $("#name").val(data.name);
                $("#idcard").val(data.idcard);
                $('#imgshow').attr('src', "/file/"+data.headimg);
                $('#demo1').attr('src', "/file/"+data.headimg);
                $("#introduce").val(data.introduce);
                layer.open({
                    type:1,
                    title:"查看个人信息",
                    area: ['520px', '540px'],
                    content: $("#EditUser")
                });
                // layer.msg('ID:'+ data.id + ' 的查看操作');
            } else if(obj.event === 'del'){
                layer.confirm('真的删除行么', function(index){
                    $.ajax({
                        url:'${pageContext.request.contextPath}/deleteUser.action',
                        type:'GET',
                        data:{
                            id:data.id
                        },
                        success:function (msg) {
                            if(msg=="1"){
                                layer.msg("删除成功", {icon: 6});
                                setTimeout(function(){
                                    layer.closeAll();//关闭所有的弹出层
                                }, 1000);
                                加载层-风格
                            }else{
                                layer.msg("删除失败", {icon: 5});
                            }
                        }
                    })
                    obj.del();
                    layer.close(index);
                });
            } else if(obj.event === 'edit'){
                $("#check").show();
                $("#showImg").hide();
                $("#updateImg").show();
                // layer.alert('编辑行:<br>'+ JSON.stringify(obj.data.address))
                // alert(data.fname);
                $("#id").val(data.id);
                $("#fname").val(data.fname);
                $("#phone").val(data.phone);
                $("#email").val(data.email);
                $("#password").val(data.password);
                $("#name").val(data.name);
                $("#idcard").val(data.idcard);
                $('#imgshow').attr('src', "/file/"+data.headimg);
                $('#demo1').attr('src', "/file/"+data.headimg);
                $("#introduce").val(data.introduce);
                layer.open({
                    type:1,
                    title:"修改个人信息",
                    area: ['520px', '590px'],
                    content: $("#EditUser")
                });
            }
        });

    });

</script>

</body>
</html>

表格分页显示后台代码

    @RequestMapping(value="/ShowAllUser.action",method = RequestMethod.GET)
    @ResponseBody
    public PageResult<List<User>> ShowAllUser(@RequestParam(value = "page") int page , int limit) {
        List<User> users = userService.selectAllUser(page,limit);
        //返回的总记录数
        int count=userService.findUserPageCount();
        PageResult<List<User>> listPageResult=new PageResult<List<User>>("",users,0,count);
        return listPageResult;

    }

根据关键字查询的后台代码,因为是查询一条,所以把limit, page都弄为1

    @RequestMapping(value="/selectUserByPhone.action",method = RequestMethod.GET)
    @ResponseBody
    public PageResult<List<User>> selectUserByPhone(@RequestParam(value = "page") int page , int limit,String phone) {

        System.out.println(phone);
        List<User> users = userService.selectUserByPhone(phone);
        PageResult<List<User>> listPageResult=new PageResult<List<User>>("",users,0,1);
        return listPageResult;
    }

表格返回封装的实体类

package com.lzm.utils;

/**
 * @author lzm
 * @create 2019- 06- 05- 9:25
 */
public class PageResult<T> {

    private String msg;
    //返回的数据
    private  T data;
    private  int code;
    //总记录数
    private  int count;


    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public PageResult(String msg, T data, int code, int count) {
        this.msg = msg;
        this.data = data;
        this.code = code;
        this.count = count;
    }
}

上传图片的工具类

package com.lzm.controller;

import com.lzm.pojo.ImgResult;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @author lzm
 * @create 2019- 07- 11- 23:19
 */
@Controller
public class UploadController {
    //    上传图片
    @RequestMapping(value = "/picture/upload.action",method = RequestMethod.POST)
    @ResponseBody
    public Map<String,Object> fileupload(@RequestParam("file") MultipartFile file) throws IOException {
        Map<String, Object> map = new HashMap<>();
        map.put("code", 1);
        if (file != null && file.getOriginalFilename() != null && file.getOriginalFilename().length() > 0) {
            String filepath="D:\\upload\\";
            //服务器上路径
//               String filepath="/upload/";
            String originalFilename = file.getOriginalFilename();
            //扩展名
            String extendName = originalFilename.substring(originalFilename.indexOf("."));
            String newfilename = UUID.randomUUID().toString() + extendName;
            File uploadfile = new File(filepath + newfilename);
            file.transferTo(uploadfile);
            map.put("data", newfilename);
            map.put("code", 0);
        }
        return map;
    }


//多图片上传
    @SuppressWarnings("deprecation")
    @RequestMapping("/MultipleUpload.action")
    @ResponseBody
    public ImgResult uplpad(MultipartFile file, HttpServletRequest request) {
        String desFilePath = "";
        String oriName = "";
        ImgResult result = new ImgResult();
        Map<String, String> dataMap = new HashMap<>();
        ImgResult imgResult = new ImgResult();
        try {
            // 1.获取原文件名
            oriName = file.getOriginalFilename();
            // 2.获取原文件图片后缀,以最后的.作为截取(.jpg)
            String extName = oriName.substring(oriName.lastIndexOf("."));
            // 3.生成自定义的新文件名,这里以UUID.jpg|png|xxx作为格式(可选操作,也可以不自定义新文件名)
            String uuid = UUID.randomUUID().toString();
            String newName = uuid + extName;
            // 4.获取要保存的路径文件夹
           String realPath="D:\\upload\\";
//           String realPath="/upload/";
            // 5.保存
            desFilePath = realPath + "\\" + newName;
            File desFile = new File(desFilePath);
            file.transferTo(desFile);
            System.out.println(desFilePath);
            // 6.返回保存结果信息
            result.setCode(0);
            dataMap = new HashMap<>();
            dataMap.put("src", newName);
            result.setData(dataMap);
            result.setMsg(oriName + "上传成功!");
            return result;
        } catch (IllegalStateException e) {
            imgResult.setCode(1);
            System.out.println(desFilePath + "图片保存失败");
            return imgResult;
        } catch (IOException e) {
            imgResult.setCode(1);
            System.out.println(desFilePath + "图片保存失败--IO异常");
            return imgResult;
        }
    }
}

上传图片返回的实体类,通过图片上传将图片存在硬盘中的位置,并返回图片的文件名,并赋值给文本域,最后提交,提交到数据库的是图片的文件名

package com.lzm.pojo;

import java.util.Map;

/**
 * 图片上传建议返回格式 ,当然可以不这么定义
 * { 
 * code": 0 , 
 * msg": "" , 
 * data": { "
 * src":"http://cdn.layui.com/123.jpg" } }
 * 
 * @author liuxuquan
 * @des 根据需要返回的数据格式产生的pojo
 *
 */
public class ImgResult {
	
	//0 表示成功 1表示失败
	private Integer code;
	//信息
	private String msg;
	//url
	private Map<String, String> data;
	
	private Integer totalCount=0;
	private Integer successCount=0;
	private Integer failCount=0;
	
	public ImgResult() {
	}

	public ImgResult(Integer code, String msg, Map<String, String> data) {
		this.code = code;
		this.msg = msg;
		this.data = data;
	}

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public Map<String, String> getData() {
		return data;
	}

	public void setData(Map<String, String> data) {
		this.data = data;
	}

	public Integer getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(Integer totalCount) {
		this.totalCount = totalCount;
	}

	public Integer getSuccessCount() {
		return successCount;
	}

	public void setSuccessCount(Integer successCount) {
		this.successCount = successCount;
	}

	public Integer getFailCount() {
		return failCount;
	}

	public void setFailCount(Integer failCount) {
		this.failCount = failCount;
	}

}

增加用户界面
在这里插入图片描述

增加用户的前端,主要的就是上传图片后返回图片名

<%--
  Created by IntelliJ IDEA.
  User: 廖泽铭
  Date: 2019/7/23
  Time: 10:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<link rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css"  media="all">
<script src="${pageContext.request.contextPath}/layui/layui.js" charset="utf-8"></script>
<script src="${pageContext.request.contextPath}/js/jquery.js"></script>
<html>
<head>
    <title>增加用户</title>
</head>
<body>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
    <legend>增加用户</legend>
</fieldset>
<form class="layui-form"  action="" style="margin-left: 30px">
    <div class="layui-form-item">
        <label class="layui-form-label">用户名</label>
        <div class="layui-input-block">
            <input type="text" name="fname" required  lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input">
        </div>
    </div>

    <div  class="layui-upload"  id="updateImg" >
        <label class="layui-form-label">用户头像</label>
        <div class="layui-upload-list">
            <img class="layui-upload-img" id="demo1" src="/file/${sessionScope.user.headimg}" style="width:100px;height:100px;" >
            <p id="demoText"></p>
        </div>
        <button type="button"  class="layui-btn" id="img"  style="margin-left: 110px;margin-bottom: 20px">上传头像</button>
    </div>

    <input type="hidden" name="headimg" id="headimg" value="" >

    <div class="layui-form-item">
        <div class="layui-inline">
            <label class="layui-form-label">手机号</label>
            <div class="layui-input-inline">
                <input type="tel" name="phone" lay-verify="required|phone" placeholder="请输入手机号" autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-inline">
            <label class="layui-form-label">邮箱</label>
            <div class="layui-input-inline">
                <input type="text" name="email" lay-verify="email" placeholder="请输入邮箱" autocomplete="off" class="layui-input">
            </div>
        </div>
    </div>

    <div class="layui-form-item">
        <label class="layui-form-label">密码</label>
        <div class="layui-input-block">
            <input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">真实姓名</label>
        <div class="layui-input-block">
            <input type="text" name="name" required  lay-verify="required" placeholder="请输入真实姓名" autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">身份证号</label>
        <div class="layui-input-block">
            <input type="text" name="idcard" lay-verify="identity"   placeholder="请输入身份证号" autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item layui-form-text">
        <label class="layui-form-label">个人介绍</label>
        <div class="layui-input-block">
            <textarea placeholder="请输入个人介绍" name="introduce" class="layui-textarea"></textarea>
        </div>
    </div>


    <div class="layui-form-item">
        <div class="layui-input-block">
            <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
            <button type="reset" id="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>
</form>
<script>
    //Demo
    layui.use([ 'form', 'layer','upload'], function () {
        var form = layui.form;
            layer = layui.layer,
            upload = layui.upload,

        //监听提交
        form.on('submit(formDemo)', function(data){
            $.ajax({
                url:'${pageContext.request.contextPath}/AddUser.action',
                type:'post',
                contentType:'application/json',
                data:JSON.stringify(data.field),
                success:function (msg) {
                    if(msg==1){
                        layer.closeAll('loading');
                        layer.load(2);
                        layer.msg("添加成功", {icon: 6});
                        setTimeout(function(){
                            layer.closeAll();//关闭所有的弹出层
                        }, 1000);
                        $("#reset").trigger("click");
                        $('#demo1').attr('src', "/file/${sessionScope.user.headimg}");
                        加载层-风格
                    }else if (msg==0) {
                        layer.msg("用户名重复", {icon: 5});
                    }
                    else if (msg==2) {
                        layer.msg("手机号已注册", {icon: 5});
                    }
                }
            })
            return false;
        });


        // 修改头像
        upload.render({
            elem: '#img'
            ,url: '${pageContext.request.contextPath}/picture/upload.action'
            ,before: function(obj){
                //预读本地文件示例,不支持ie8
                obj.preview(function(index, file, result){
                    $('#demo1').attr('src', result); //图片链接(base64)
                });
            }
            ,done: function(res){
                $("[name=headimg]").val(res.data);
                style:'display:inline-block;max-width:50%;height:auto'
                //如果上传失败
                if(res.code > 0){
                    return layer.msg('上传失败');
                }else {
                    layer.msg("上传成功");
                }
                //上传成功
            }
            ,error: function(){
                //演示失败状态,并实现重传
                var demoText = $('#demoText');
                demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
            }
        });
    });
</script>
</body>
</html>
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值