layui php增删改查,Layui(4) 增删改查 完整案例

分享一下最近花了2天时间来做的一个layui前端的CURD,先来看看效果是不是自己想要的吧...    【代码放最后了】

因为每天还要上课,所以虽然花了2天时间来弄,但实际上写的时间比较少,有些功能做的不是很好,还请大佬见谅

可参考layui官方开发文档:https://www.layui.com/doc/

以及在线示例:https://www.layui.com/demo/

layui前端页面数据展示:已解决数据格式化问题

a8641afa35f0fb0ac343e780497bb8e2.png

添加 :有验证

c17862182287b7688966aa5efe046237.png

修改:已做数据回显

f0c37ced09f1dff18c19fe9420bb2295.png

删除:有单独点击一个删除以及批量删除

4270c5f8e9066aadf46a3936456c2db1.png

1b90b942342bcad6f27b7ba90144e16e.png

高级查询:

150cacbf38e5f58cf6142326e2ce75ae.png

以及一些扩展小功能

c6b75a9151e3ccd49520c8d0db0c3578.png d1b073b856391470756d9c2c76a9abea.png  ba6012ceaf96f157ceb5b7d6cd9f17fd.png

【代码部分】

JSP页面

温馨小提示:引入的js,css等可根据自己的文件位置修改。

注意 :

①layui的资源文件建议是从官网下载的最新版本 https://www.layui.com/   ,在这里因为我用的基于layui的X-admin框架去搭建的前端,而框架里面的layui样式不是最新版,导致期间出现一些功能不能实现,真的很坑人...

②前端数据表格的展示注意后端返回的json数据格式建议必须如下 code,msg,count,datacode返回的值不能为空,data里面装页面显示数据

834e5028038b111add67a117eab82e8c.png

菜单管理

--%>

菜单:

菜单名称

菜单路径

菜单图标

菜单

子菜单

>确认

--%>

重置

这里放一个抽取出来的公共 common.js

//序列化form表单字段为json对象格式

$.fn.serializeFormToJson = function(){

var arr = $(this).serializeArray();//form表单数据 name:value

var param = {};

$.each(arr,function(i,obj){ //将form表单数据封装成json对象

param[obj.name] = obj.value;

})

return param;

}

/**

* 注意:这里使用了上面的方式,没有使用这种-------------------------------------------

* 将form里面的内容序列化成json

* 相同的checkbox用分号拼接起来

* @param {dom} 指定的选择器

* @param {obj} 需要拼接在后面的json对象

* @method serializeJson

* */

$.fn.serializeJson=function(otherString){

var serializeObj={},

array=this.serializeArray();

$(array).each(function(){

if(serializeObj[this.name]){

serializeObj[this.name]+=';'+this.value;

}else{

serializeObj[this.name]=this.value;

}

});

if(otherString!=undefined){

var otherArray = otherString.split(';');

$(otherArray).each(function(){

var otherSplitArray = this.split(':');

serializeObj[otherSplitArray[0]]=otherSplitArray[1];

});

}

return serializeObj;

};

/**

* 将josn对象赋值给form

* @param {dom} 指定的选择器

* @param {obj} 需要给form赋值的json对象

* @method serializeJson

* */

$.fn.setForm = function(jsonValue){

var obj = this;

$.each(jsonValue,function(name,ival){

var $oinput = obj.find("input[name="+name+"]");

if($oinput.attr("type")=="checkbox"){

if(ival !== null){

var checkboxObj = $("[name="+name+"]");

var checkArray = ival.split(";");

for(var i=0;i

JSP页面对应所需js代码

$(function () {

layui.config({

version: '1545041465480' //为了更新 js 缓存,可忽略

});

//注意:这里是数据表格的加载数据,必须写

layui.use(['table', 'layer', 'form', 'laypage', 'laydate'], function () {

var table = layui.table //表格

,layer = layui.layer //弹层

,form = layui.form //form表单

,laypage = layui.laypage //分页

,laydate = layui.laydate;//日期

//执行一个laydate实例

laydate.render({

elem: '#start' //指定元素

});

//执行一个laydate实例

laydate.render({

elem: '#end' //指定元素

});

//执行一个 table 实例

table.render({

elem: '#zq_table'

,id: 'tableReload'//重载数据表格

,url: '/menu/page' //数据接口

,toolbar: '#zq_toolbar' //开启头工具栏,此处default:显示默认图标,可以自定义模板,详见文档

,title: 'xx表'

,page: true //开启分页

// ,totalRow: true //开启合计行

,cols: [[ //表头

{type: 'checkbox', fixed: 'left'}

,{field: 'id', title: 'ID', width:80, sort: true, fixed: 'left', totalRowText: '合计:'} //totalRow:true则代表这列数据要合计

,{field: 'name', title: '菜单名称',edit: 'text'}

,{field: 'url', title: '菜单路径', sort: true, totalRow: true,edit: 'text'}

,{field: 'icon', title: '菜单图标', sort: true,edit: 'text'}

,{field: 'parent', title: '菜单', sort: true, totalRow: true,edit: 'text',templet: '#zq_formatter'}

,{field: 'children', title: '子菜单',edit: 'text'}

,{fixed: 'right', width: 165, align:'center', toolbar: '#zq_bar'}

]]

});

//监听头工具栏事件

table.on('toolbar(zq_table)', function(obj){

var checkStatus = table.checkStatus(obj.config.id)

,data = checkStatus.data; //获取选中的数据

//json字符串转换成Json数据 eval("("+jsonStr+")") /JSON.parse(jsonStr)

data = eval("("+JSON.stringify(data)+")");

switch(obj.event){

case 'delAll':

if(data.length === 0){

layer.msg('请至少选择1行', { icon: 2, time: 1500 });

}else {

layer.alert('您确认要删除'+data.length+'条数据吗?', {

skin: 'layui-layer-molv' //样式类名layui-layer-lan或layui-layer-molv 自定义样式

,closeBtn: 1 // 是否显示关闭按钮

,anim: 1 //动画类型

,btn: ['确定','取消'] //按钮

,icon: 2 // icon

,yes:function(){

// layer.msg('确定', { icon: 1, time: 1500 });

for (var i=0;i中的 lay-filter="zq_table" 做可编辑表格使用

table.on('edit(zq_table)', function(obj){

var value = obj.value //得到修改后的值

,data = obj.data //得到所在行所有键值

,field = obj.field; //得到字段

layer.msg('[ID: '+ data.id +'] ' + field + ' 字段更改为:'+ value);

});

/*

//监听显示操作

form.on('switch(isShow)', function(obj) {

var t = this;

layer.tips(t.value + ' ' + t.name + ':' + obj.elem.checked, obj.othis);

});*/

//监听提交 lay-filter="zq_submit"

form.on('submit(zq_submit)', function(data){

// console.log(data.elem) //被执行事件的元素DOM对象,一般为button对象

// console.log(data.form) //被执行提交的form对象,一般在存在form标签时才会返回

console.log(data.field) //当前from表单所提交的所有字段, 名值对形式:{name: value}

layer.msg(JSON.stringify(data.field));//表格数据序列化

var formData = data.field;

var id = formData.id,

name = formData.name,

url=formData.url,

icon=formData.icon,

parent_id=formData.parent_id;

$.ajax({

type: "post", //数据提交方式(post/get)

url: "/menu/save", //提交到的url

data: {"id":id,"name":name,"url":url,"icon":icon,"parent_id":parent_id},//提交的数据

dataType: "json",//返回的数据类型格式

success: function(msg){

if (msg.success){ //成功

layer.msg(msg.msg, { icon: 1, time: 1500 });

table.reload('tableReload');//数据表格重载

layer.close(index);//关闭弹出层

}else { //失败

layer.alert(msg.msg, { icon: 2},function () {

// $(".layui-laypage-btn").click();//执行分页刷新当前页

layer.close(index);

// window.location.reload();

});

}

}

});

return false;//false:阻止表单跳转 true:表单跳转

});

//监听提交 lay-filter="search"

form.on('submit(search)', function(data){

layer.msg(JSON.stringify(data.field));//表格数据序列化

var formData = data.field;

console.debug(formData);

var name = formData.name,

url=formData.url,

icon=formData.icon,

parent_id=formData.parent_id;

//数据表格重载

table.reload('tableReload', {

page: {

curr: 1 //重新从第 1 页开始

}

, where: {//这里传参 向后台

name: name,

url:url

}

, url: '/menu/page'//后台做模糊搜索接口路径

, method: 'post'

});

return false;//false:阻止表单跳转 true:表单跳转

});

});

});

var index;//layer.open 打开窗口后的索引,通过layer.close(index)的方法可关闭

//表单弹出层

function zq_form(title,url,w,h){

if (title == null || title == '') { title=false; };

if (url == null || url == '') { };// url="404.html";

if (w == null || w == '') { w=($(window).width()*0.9); };

if (h == null || h == '') { h=($(window).height() - 50); };

index = layer.open({ //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)

type:1,

title:title,

area: ['25%','55%'],//类型:String/Array,默认:'auto' 只有在宽高都定义的时候才不会自适应

// area: [w+'px', h +'px'],

fix: false, //不固定

maxmin: true,//开启最大化最小化按钮

shadeClose: true,//点击阴影处可关闭

shade:0.4,//背景灰度

skin: 'layui-layer-rim', //加上边框

content:$("#zq_formpopbox").html()

});

}

后端的代码我就不放了,根据自己的需要来吧

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
layui是一款基于jQuery开发的UI框架,它的简洁、易用和美观受到了众多开发者的好评。在实际开发中,常常需要使用到增删改查的功能,本文将为大家分享一个基于layui框架的完整增删改查案例。 1. 实现数据库连接 一般而言,我们需要选择一款关系型数据库来存储数据。本例中,我们使用MySQL数据库。要使用该数据库,需要使用一个驱动,这里我们使用node.js的mysql包,需要使用npm命令安装: ``` npm install mysql ``` 连接数据库的步骤如下: ``` const mysql = require("mysql"); const connection = mysql.createConnection({ host: "localhost", user: "root", password: "root", database: "test" }); connection.connect((err) => { if (err) { console.error("error connecting: " + err.stack); return; } console.log("connected as id " + connection.threadId); }); ``` 在这里,我们使用了mysql.createConnection()方法创建了一个连接对象,该方法需要传递一个配置对象,包括连接数据库的地址、用户名、密码和数据库名。连接成功后,我们可以在回调函数中打印出连接的线程ID。 2. 实现表格展示 在完成数据库连接后,我们需要实现表格展示。这里我们使用了layui框架的table模块,该模块封装了表格的相关操作,代码如下: ``` layui.use("table", function () { var table = layui.table; //展示表格 table.render({ elem: "#userListTable", url: "/api/user", cols: [[ { type: "numbers", title: "序号" }, { field: "name", title: "用户名" }, { field: "age", title: "年龄" }, { field: "gender", title: "性别" }, { fixed: "right", title: "操作", toolbar: "#userListBar" } ]] }); }); ``` 在这里,我们使用了table.render()方法渲染了一个表格,需要传递一个配置对象。其中,elem表示表格的容器的ID,url表示获取表格数据的地址,而cols则表示表格的列,每列需要配置相应的字段名和显示名称。最后一个操作列使用了固定为右对齐,并且使用了自定义工具栏模板。 3. 实现增删改查的逻辑操作 在完成表格展示后,我们需要实现增删改查的逻辑操作。这里我们使用了layui框架的form模块,该模块封装了表单的相关操作,代码如下: 3.1 添加用户 在该案例中,添加用户按钮点击后,会弹出一个添加用户表单。点击表单的提交按钮后,会触发系统的提交事件,触发后台的添加用户接口,将数据提交到数据库中,代码如下: ``` layui.use("form", function () { var form = layui.form; //添加用户弹窗 $("#addUserBtn").click(function () { layer.open({ type: 1, title: "添加用户", content: $("#addUser"), area: ["500px", "300px"] }); }); //监听添加用户表单提交 form.on("submit(addUserForm)", function (data) { $.ajax({ url: "/api/user", type: "POST", data: JSON.stringify(data.field), dataType: "JSON", contentType: "application/json", success: function (res) { if (res.code === 0) { layer.msg("添加用户成功"); table.reload("userListTable"); layer.closeAll(); } else { layer.msg("添加用户失败,请联系管理员"); } } }); return false; }); }); ``` 在这里,我们使用了layer.open()方法弹出了添加用户表单,该方法需要传递一个配置对象,表单的内容需要放在该对象的content属性中。在表单提交后,我们使用了$.ajax()方法提交表单数据,data.field表示表单的所有数据,需要将其转换成JSON格式。在提交成功后,我们使用了table.reload()方法重新渲染了表格,并使用layer.closeAll()方法关闭了添加用户弹窗。 3.2 删除用户 在该案例中,删除用户按钮点击后,会弹出一个提示框,询问用户是否确定删除。点击确认按钮后,会触发系统的提交事件,触发后台的删除用户接口,将数据从数据库中删除,代码如下: ``` //监听删除用户按钮 table.on("tool(userListTable)", function (obj) { var data = obj.data; if (obj.event === "del") { layer.confirm("是否确定删除该用户" + data.name + "?", function (index) { $.ajax({ url: "/api/user/" + data.id, type: "DELETE", dataType: "JSON", contentType: "application/json", success: function (res) { if (res.code === 0) { layer.msg("删除用户成功"); obj.del(); } else { layer.msg("删除用户失败,请联系管理员"); } } }); layer.close(index); }); } }); ``` 在这里,我们使用了table.on()方法监听了用户列表的表格,当用户点击删除按钮时,需要弹出确认对话框,需要传递一个确认消息和回调函数,点击确认后触发$.ajax()方法提交删除请求,最后使用obj.del()方法删除表格中对应的行。 3.3 修改用户 在该案例中,修改用户按钮点击后,会弹出一个修改用户表单。点击表单的提交按钮后,会触发系统的提交事件,触发后台的修改用户接口,将数据更新到数据库中,代码如下: ``` //监听修改用户按钮 table.on("tool(userListTable)", function (obj) { var data = obj.data; if (obj.event === "edit") { layer.open({ type: 1, title: "修改用户", content: $("#editUser"), area: ["500px", "300px"], success: function (layero, index) { form.val("editUserForm", data); form.render(); } }); } //监听修改用户表单提交 form.on("submit(editUserForm)", function (formdata) { formdata = formdata.field; formdata.id = data.id; $.ajax({ url: "/api/user", type: "PUT", data: JSON.stringify(formdata), dataType: "JSON", contentType: "application/json", success: function (res) { if (res.code === 0) { layer.msg("修改用户成功"); table.reload("userListTable"); layer.closeAll(); } else { layer.msg("修改用户失败,请联系管理员"); } } }); return false; }); }); ``` 在这里,我们使用了table.on()方法监听了用户列表的表格,当用户点击编辑按钮时,需要弹出修改用户表单,需要传递一个配置对象,表单的内容需要放在该对象的content属性中。在表单展示后,我们使用了form.val()方法填充了表单的内容,并使用form.render()方法渲染了表单。在表单提交后,我们使用了$.ajax()方法提交表单数据,并使用table.reload()方法重新渲染了表格,并使用layer.closeAll()方法关闭了修改用户弹窗。 4. 实现后端API接口 在完成前端页面的开发后,我们需要实现后端的API接口以完成对数据库的操作。这里我们使用了node.js和express框架,需要使用npm命令安装: ``` npm install express npm install body-parser ``` 在该案例中,我们实现了如下API接口: 4.1 获取用户列表 ``` router.get("/user", (req, res, next) => { connection.query("SELECT * FROM user", (error, results, fields) => { if (error) { res.json({ code: -1, msg: error }); } else { res.json({ code: 0, data: results }); } }); }); ``` 在这里,我们使用了connection.query()方法查询了user表中的所有数据,并将查询结果返回到前端。 4.2 添加用户 ``` router.post("/user", (req, res, next) => { const { name, age, gender } = req.body; const sql = "INSERT INTO user (name, age, gender) VALUES (?, ?, ?)"; connection.query(sql, [name, age, gender], (error, results, fields) => { if (error) { res.json({ code: -1, msg: error }); } else { res.json({ code: 0, msg: "添加用户成功" }); } }); }); ``` 在这里,我们使用了req.body获取了用户表单提交的数据,并使用connection.query()方法将数据插入到user表中,并将结果返回到前端。 4.3 修改用户 ``` router.put("/user", (req, res, next) => { const { id, name, age, gender } = req.body; const sql = "UPDATE user SET name = ?, age = ?, gender = ? WHERE id = ?"; connection.query(sql, [name, age, gender, id], (error, results, fields) => { if (error) { res.json({ code: -1, msg: error }); } else { res.json({ code: 0, msg: "修改用户成功" }); } }); }); ``` 在这里,我们使用了req.body获取了用户表单提交的数据,并使用connection.query()方法将数据更新到user表中,并将结果返回到前端。 4.4 删除用户 ``` router.delete("/user/:id", (req, res, next) => { const id = req.params.id; const sql = "DELETE FROM user WHERE id = ?"; connection.query(sql, [id], (error, results, fields) => { if (error) { res.json({ code: -1, msg: error }); } else { res.json({ code: 0, msg: "删除用户成功" }); } }); }); ``` 在这里,我们使用了req.params获取了URL参数,并使用connection.query()方法将数据从user表中删除,并将结果返回到前端。 5. 总结 本文详细介绍了使用layui框架实现增删改查完整案例。在该案例中,我们使用了MySQL数据库来存储数据,并使用node.js和express框架实现了后端API接口。在前端页面上,我们使用了layui框架的table和form模块实现了表格展示和表单操作,并使用了layer模块实现了弹窗提示。通过该案例的学习,相信读者可以对layui框架和前后端交互有更深刻的理解和认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值