现今的前端框架繁多,有例如Vue,bootstrap,react,angular等等,都是功能强大又易于开发的,最近由于要做一个独立的小管理系统,在搜索框架时找到了一个可模块化的前端框架:LayUI
LayUI官方网站: https://www.layui.com/ ,经典模块化前端框架,由职业前端倾情打造,面向全层次的前后端开发者,低门槛开箱即用的前端 UI 解决方案
当然,可模块化开发的前端框架也很多,例如:EasyUI,ElementUI,众多的JS插件等等,最后用这个LayUI来做呢,最重要的一点就是对后端开发人员来说太方便了,前端完全由JS库集成,
只需要按照文档规范编写代码,提供数据接口,剩下的事就不用我们操心了。

此次我选用LayUI里的数据表格这个模块:
layui.use('table', function () {
var table = layui.table;
var userid = "";
//第一个实例
table.render({
elem: '#demo'
, skin: 'line' //行边框风格
, height: 312
, url: '/Default.aspx/showTable_ms' //数据接口
, method: 'post'
, contentType: 'application/json'
, page: true //开启分页
, cols: [[ //表头
{ field: 'ID', title: 'ID', fixed: 'left', align: 'center' }
, { field: 'Title', title: '编号', align: 'center' }
, {
field: 'UserId', title: '', templet: function (d) {
return "";
}
}
, { field: '', title: '' }
, { field: '', title: '' }
, { field: '', title: '' }
, { title: '', fixed: 'right', align: 'center' }
, {
title: '付款', fixed: 'right', align: 'center', templet: function (d) {
if (d.States == "0") {
return '<span><a style="color: #c00;" href="">审核中</a></span>';
} else if (d.States == "1") {
return '<span><a style="color: #FF5722;" href="/pay/' + d.Title + "_" + d.ID + '">去付款</a></span>';
}
else if (d.States == "2") {
return '<span><a style="color: #009688;" href="">已付款</a></span>';
}
else if (d.States == "3") {
return '<span><a href="">已结束</a></span>';
}
}
}
, {
field: 'States', title: '状态', fixed: 'right', align: 'center', templet: function (d) {
if (d.States == "0") {
return '<span style="color: #c00;">审核中</span>';
}
else if (d.States == "1") {
return '<span style="color: #FF5722;">待注册</span>';
}
else if (d.States == "2") {
return '<span style="color: #009688;">注册成功</span>';
}
else if (d.States == "3") {
return '<span>已结束</span>';
}
}
}
, { title: '操作', fixed: 'right', width: 150, align: 'center', toolbar: '#barDemo' }
]]
, parseData: function (res) { //res 即为原始返回的数据
console.log(res.d);
var res1 = strToJson(res.d);
return {
"code": res1.code, //解析接口状态
"msg": res1.msg, //解析提示文本
"count": res1.count, //解析数据长度
"data": res1.data //解析数据列表
};
}
});
//监听工具条
table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
var data = obj.data; //获得当前行数据
var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)
if (layEvent === 'detail') { //查看
//do somehing
if (data.States == "0") {
layer.msg("请耐心等待审核");
}
else if (data.States == "1") {
layer.open({
title: ['操作'],
type: 2,
area: ['400px', '300px'],
content: '/Check/tan1.aspx?id=' + data.ID + '&uid=' + data.UserId,
yes: function (index) { }
});
}
//layer.alert("查看");
}
//else if (layEvent === 'del') { //删除
// layer.confirm('真的删除行么', function (index) {
// obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
// layer.close(index);
// //向服务端发送删除指令
// });
//}
//else if (layEvent === 'edit') { //编辑
// //do something
// //同步更新缓存对应的值
// obj.update({
// username: '123'
// , title: 'xxx'
// });
//}
//else if (layEvent === 'LAYTABLE_TIPS') {
// layer.alert('Hi,头部工具栏扩展的右侧图标。');
//}
});
});
function strToJson(str) {
var json = eval('(' + str + ')');
return json;
}后端接口我把之前使用的 当前aspx中的ajax访问当前.cs里的方法 结合了一下:
[WebMethod]
public static string showTable_ms()
{
BasicPage bp = new BasicPage();
string strUsername3 = Basic.Engine.CookieDo.GetCookie("webUserName", "str_key");
string UserID = "";
SqlDataReader myreader = bp.getRead("select * from TbUser where UserState='0' and UserName='" + strUsername3 + "' ");
if (myreader.Read())
{
UserID = myreader["userid"].ToString();
}
myreader.Close();
DataTable dtblNews = new DataTable();
int intNews;
dtblNews = bp.SelectDataBase("tbuser_ms", "select * from tbuser_ms where userid=" + UserID + " order by id desc").Tables[0];
intNews = dtblNews.Rows.Count;
string json = string.Empty;
try
{
if (dtblNews == null || dtblNews.Rows.Count == 0)
{
return "";
}
json = "{";
json += "\"code\":0,\"msg\":\"\",\"count\":" + intNews + ",";
json += "\"data\":[";
for (int i = 0; i < dtblNews.Rows.Count; i++)
{
json += "{";
for (int j = 0; j < dtblNews.Columns.Count; j++)
{
json += "\"" + dtblNews.Columns[j].ColumnName + "\":\"" + dtblNews.Rows[i][j].ToString() + "\"";
if (j != dtblNews.Columns.Count - 1)
{
json += ",";
}
}
json += "}";
if (i != dtblNews.Rows.Count - 1)
{
json += ",";
}
}
json += "]";
json += "}";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return json;
}接口返回的必须是JSON格式的,在使用此方法后,需在前端把 return的值重新解析成JSON,否则只能是undefined,简直大坑
当然,嫌麻烦的朋友,可以直接用其他空页面Response.Write 输出,此方法可直接获取到。
最后,个人用下来的感觉是不错的,即拿即用,简直是搬砖利器,如果对自定义有更高的要求,还是推荐使用主流框架。
毕竟LayUI虽说高度集成,但是限制也是在这了:
1、很难将layui整合到现有的项目中,当前项目已经开始使用了其他框架的话,会与LayUI发生兼容问题
2、如果一个全新的项目, 从开始时就按照layui的标准来开发, 那么当你需要在项目中引入其他库时, 必须进行手动的包装,
使其能够被layui的模块加载器加载, 具体的例子可以参见layui中jQuery是如何变成layui模块的.
只要克服这两个困难,或者完全没有这些顾虑的小伙伴,快用起来吧。