美文网首页
2018-09-28

2018-09-28

作者: 她是过来佛 | 来源:发表于2018-09-28 11:38 被阅读0次

layui学习笔记

1.基本目录

|-css //css样式
    |-layui.css /核心样式文件
    |-modules //此模块相对较大,包含三个子模块
        |-laydate //日历控件
        |-layer
        |-layim
|-font //字体图标
|-image //图片资源
|-lay //模块核心目录
|-layui.js //基础核心库
|-layui.all.js //此模块包含layui.js和所有模块的合并文件

2.下载:官网、Git仓库、npm

3.常用部署

./layui/css/layui.css head中
    <link rel="stylesheet" href="../layui/css/layui.css">
./layui/layui.js body中
    <script src="../layui/layui.js"></script><script>
./layui/layui.alll.js //非模块化的加载方式,不用再使用layui.use()来加载对应模块,即可直接使用
    <script src="../layui/layui.all.js"></script>

4.layui模板定义:

layui.define[mods],function(exports){
    ......
    exports('mod',api);
});
模板使用:
layui.use(['mod1','mod2'], function(args){
    var mod = layui.mod1;
    ......
});

问题

1.编写的是freemarker template language文件,视图层如何响应成网页
2.使用过的模块,可以了解了解源代码,不要一个劲地复制粘贴

1.table模块:

    1.1先在页面需要位置新建table标签:
        <table class="layui-hide" id="tableList" lay-filter="tableFilter"></table>
        //id用于实例化表格时的元素选择器
        //lay-filter用于工具条监听时绑定过滤器
    1.2模块加载基本操作:
        layui.use(['laypage', 'layer', 'table', 'form', 'element','laydate','tree','treeGrid'], function(){
            var laypage = layui.laypage //分页
            ,layer = layui.layer //弹层
            ,table = layui.table //表格 
            ,form = layui.form//表单
            ,element = layui.element//元素操作
            ,tree = layui.tree//
            ,treeGrid = layui.treeGrid
            ,laydate = layui.laydate
            ,$ = layui.$; 
    1.3实例化表格:
        table.render({
            elem: '#tableList'
            ,url: '' //数据接口
            ,page: true //开启分页
            ,msg:'无数据'
            ,cols: [[ //表头
               {checkbox: true, fixed: true}    
              ,{type:'numbers',title: '序号',fixed: 'left'}//fixed
              ,{field: 'purchasingCom', title: '采购单位'}
              ,{field: 'sellCom', title: '销售机构'}
              ,{field: 'operate', title: '操作',toolbar: '#operateTool',fixed: 'right'}
            ]]
            ,data:[{
                 'comCode':'860101'
                ,'purchasingCom':'中科软科技股份有限公司'
                ,'sellCom':'asus'
                ,'batchCode':'00001'
            }]
        });

2.日期模块:

    2.1定义日期输入框
        <div class="layui-inline">
            <label class="layui-form-label">失效日期</label>
            <div class="layui-input-inline">
                <input name="invalidDate" id="invalidDate" class="layui-input" type="text" lay-verify="date">
            </div>
        </div>
    2.2加载模块
    2.3实例化,添加样式
        laydate.render({
            elem: '#invalidDate'
            ,theme: 'grid'
            //管theme有哪些选项:
        });   

3.treeGrid模块

    var treeGrid = layui.treeGrid;//需要单独在layui.js文件中引入treeGrid:"modules/treeGrid"
        var treeTable = treeGrid.render({
        elem: '#orgTree'
        , url: 'getOrgList'//尽量用相对路径,获取json数据
        , cellMinWidth: 100
        , treeId: 'id'//树形id字段名称
        , treeUpId: 'parentId'//树形父id字段名称
        , treeShowName: 'name'//以树形式显示的字段
        , cols: [[ //表头
            {type: 'checkbox'}
            ,{field: 'name', title: '机构名称',width:'30%'}
            ,{field: 'parentId', edit: 'text', title: 'parentId'}
            ,{field: 'areaId', title: '归属区域', sort: true}
            ,{field: 'id', title: '机构编码'}
            ,{field: 'orgType', title: '机构类型', sort: true}
            ,{field: 'remarks', title: '备注',sort: false}
            ,{field: 'operate', title: '操作',toolbar: '#operateTool',width:'20%'}
        ]]
        , page: false
    });

4.Xtree模块

    4.1,Xtree是基于form的,所以先定义form
        <form class="layui-form" >
            <div style="background: #f2f2f2; height: 50px">组织机构
                <i class="layui-icon layui-icon-refresh" ></i>
            </div>
            <div id="demo" style="height:400px;overflow:auto;" class="xtree_contianer"></div>
        </form>
    4.2定义Xtree
        var xtree2 = new layuiXtree({
            elem: 'demo'   //(必填) 放置xtree的容器,样式参照 .xtree_contianer
            , form: form  //(必填) layui 的 from
            //, data: json //(必填) 数据接口,需要返回以上结构的json字符串
            , url: 'getOrgList'
        });

表格中的url和data

单选还是多选

Xtree后台交互格式,treeGrid交互格式,table交互格式

1.Xtree:根据json数组的数据层级展现树状结构
    var json = [
        {
        title: "XX人寿保险股份有限公司", value: "jd1", data: [
            { title: "保险分公司节点1.1", checked: true, disabled: true, value: "jd1.1", data: [] }//添加disabled属性为true之后不允许勾选或取消勾选
            , { title: "保险分公司节点1.2", value: "jd1.2", checked: true, data: [] } //checked属性为true则默认勾选
            , { title: "保险分公司节点1.3", value: "jd1.3", disabled: true, data: [] }
            , { title: "保险分公司节点1.4", value: "jd1.4", data: [] }
            ]
        }
        , {
        title: "XX人寿保险股份有限公司", value: "jd2", data: [
              { title: "保险分公司节点2.1", value: "jd2.1", data: [] }
            , { title: "保险分公司节点2.2", value: "jd2.2", data: [] }
            , { title: "保险分公司节点2.3", value: "jd2.3", data: [] }
            , { title: "保险分公司节点2.4", value: "jd2.4", data: [] }
            ]
        }
    ]
2.treeGrid:不用层级关系实现依靠字段的继承

表格中定义工具条

定义表格并实例化:
    <table class="layui-hide" id="tableList" lay-filter="tableFilter"></table>
    ......
添加script标签,定义操作按钮
    <script type="text/html" id="operateTool">
        <a class="layui-btn layui-btn-xs  layui-btn-warm" lay-event="doIt">清算</a>
    </script>
    其中lay-event的值用
添加列: 
    ,{field: 'operate', title: '操作',toolbar: '#operateTool',fixed: 'right'}
    其中#operateTool为script标签的id
监听工具条
    table.on('tool(tableFilter)', function(obj){ //注:tool是工具条事件名,tableFilter是table原始容器的属性 lay-filter="对应的值"
        var data = obj.data //获得当前行数据
        ,layEvent = obj.event; //获得 lay-event 对应的值
        if(layEvent === 'doIt'){//script子标签的lay-event的值
            popup("卡单批次清算", "batchLiquidationDo","90%");//popup弹出新的小窗口页面,第一个为窗口名,
        };
    });

页面网页弹出popup

popup("批次清算", "batchLiquidationDo","90%");//popup弹出新的小窗口页面,第一个为窗口名,第二个为location,第三个为窗口大小

input-item、input-inline 和 input-block

下拉选带搜索:为select标签添加lay-search属性

<div class="layui-inline">
    <label class="layui-form-label">parentId</label>
    <div class="layui-input-inline">
        <select name="parentId"  lay-search="parentId ">
            <option value="">1</option>
            <option value="">2</option>
            <option value="">3</option>
        </select>
    </div>
</div>

switch 开关

<div class="layui-inline"><!--这个可以做成switch-->
    <div class="layui-form-mid layui-word-aux">是否启用</div>
    <input type="checkbox" name="useable" lay-skin="switch"  lay-text="是|否" >
</div>

layui表格自动渲染:

<table class="layui-table" lay-data="{url:'/api/data/'}" lay-filter="test"> …… </table>

layui-tab

ajax的data.field和data.serialize

通过监听工具条获取标签的innerHTML

treeGrid.on('tool(tableFilter)', function(obj){ 
    tr = obj.tr
    ,id = $(tr).find('td:eq(4)').text()
    ,layEvent = obj.event; //获得 lay-event 对应的值
    console.log(id);
});
始终记得监听工具条的obj参数是相当于整个table的
后期有修正的更简单的

获取表单数据

1.提交按钮,用button 不用submit
    <button class="layui-btn" lay-submit lay-filter="updateOrgDo"><i class="layui-icon layui-icon-ok" style="font-size: 20px;"></i>添加</button>
2.获取数据
    form.on('submit(updateOrgDo)',function(data){
        var param = data.field;//定义临时变量获取表单提交过来的数据,非json格式
        $.ajax({
        ......
        }
        return false;
    }

FTL stack trace ("~" means nesting-related):

    - Failed at: ${ab01.ab0103}  [in template "system/org/addSubOrg.ftl" at line 11, column 19]
----] with root cause
freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:

就是需要的字段为null了,根机构的上级id写成0也不要为NULL

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

1.addBtn是button 的lay-filter的值
2.

form.verify

form.verify({
  ab0102: function(value){
    if(value.trim()==""){
      return "不能为空";
    }
  }

  ,ab0103: function(value){
    if(value.trim()==""){
      return "不能为空";
    }
  }
});

Xtree/treeGrid/数据接口格式

1.treeGrid:
    code:
    msg:
    count:
    data:
2.Xtree
    code:
    msg:
    tittle:
    value:
    data:
3.table同treeGird

popup和layer.open

popup("添加下级机构", "addSubOrg?ab0101=" + ab0101,"90%");

弹窗关闭,父级页面跳转

1.通过frame序号关闭当前弹窗
    var index = parent.layer.getFrameIndex(window.name);
    parent.layer.close(index);  //关闭弹出框
2.刷新表格,其实是刷新页面
    parent.location.href="orgManagement";  //父级跳转到其他页面去

页面刷新

1 history.go(0)
2 location.reload()
3 location=location
4 location.assign(location)
5 document.execCommand('Refresh')
6 window.navigate(location)
7 location.replace(location)
8 document.URL=location.href

table的reload

function reloadTable(){
    treeGrid.reload('orgTree', {
        where: {
            ab0101: $('#ab0101').val(),
            ab0102: $('#ab0102').val()
        }
    });
};
当然可以直接调用Table的reload函数,layui已经封装

Layui hint: treeSelect is not a valid module

当你遇到类似这样报错,说某某某不是一个有效的模块时,不防在layui.js前引入jquery,也许错误就被解决啦!
继续,修改了模块文件,统一了大小写,但并不知道对不对,没有报错,下拉也出来了,但是收缩效果体验很差

使用table或者treeGrid的checkbox

var active = {//讲选中的行数封装成data数组
    showOrgan: function(){
        var checkStatus = treeGrid.checkStatus('organTree')
            , data = checkStatus.data;
        if (data.length != 1) {
          layer.msg('请选择一行查看,已选['+data.length+']行', {icon: 5});
          return false;
        }
            popup("查看详情", "showOrgan?ab0101=" + data[0].ab0101, "80%");
        }
};

下拉树的实现,详见页面代码

layui tree的常用:

tree({
     elem: "#treeselect" ,
     nodes: obj.data,
     click: function (node) {
         var $select = $($(this)[0].elem).parents(".layui-form-select");
         $select.removeClass("layui-form-selected").find(".layui-select-title span").html(node.ab0603).end().find("input:hidden").val(node.ab0601);
     }
 });

异步请求获取treeselect节点列表

 $.ajax({
    url: 'selecteTree',
    type: 'post',
    dadatype: 'json',
    success: function(obj){
        val = obj.data;
         tree({
             elem: "#treeselect" ,
             nodes: obj.data,
             click: function (node) {
                 var $select = $($(this)[0].elem).parents(".layui-form-select");
                 $select.removeClass("layui-form-selected").find(".layui-select-title span").html(node.ab0603).end().find("input:hidden").val(node.ab0601);
             }
         });
    }
 });
实测在nodes属性赋值时直接调用createTree方法无效

上述代码实现下拉树之后,无法实现下拉选

下拉树测试代码:
var testData =
    [{
        ab0103: '节点1',
        name: '节点1',
        ab0101: 1,
        ab0108: 0,
        children: [{
            ab0103: '节点1.1',
            name: '节点1.1',
            ab0101: 11,
            ab0108: 1}, 
            {
            ab0103: '节点1.2',
            name: '节点1.2',
            ab0101: 12,
            ab0108: 1},
            {
            ab0103: '节点1.3',
            ab0101: 13,
            name: '节点1.3',
            ab0108: 1}
        ]
    },
        
    {
        ab0103: '节点2',
        name: '节点2',
        ab0101: 2,
        ab0108: 0,
        children: [{
            ab0103: '节点2.1',
            name: '节点2.1',
            ab0101: 21,
            ab0108: 2}, 
            {
            ab0103: '节点2.2',
            name: '节点2.2',
            ab0101: 22,
            ab0108: 2},
            {
            ab0103: '节点2.3',
            name: '节点2.3',
            ab0101: 23,
            ab0108: 2}
          ]}
    ];

相关文章

  • 2018-09-28

    2018-09-28 学会淡定_c9c0 2018-09-28 16:59 · 字数 483 · 阅读 0 · 日...

  • 小小说一一局长的办公室

    2018-09-28 学会淡定_c9c0 2018-09-28 18:59 · 字数 937 · 阅读 0 · 日...

  • 是福?是悲?

    是福?是悲? 胡99(今年六十二)2018-09-28 时代真是不同了,在那饥寒交迫的年代,...

  • 神探球坛意甲分析 恩波利vsAC米兰

    比赛时间:2018-09-28 03:00开赛 比赛盘口:AC米兰-0.5球,大小球2.5/3球 比赛分析: 随著...

  • 《我不想去上学了》

    2018-09-28 注明:这是别人的文章。我很喜欢。 《我不想去上学了》 ——【土耳其】奥尔罕•帕慕克 我不想去...

  • 米兰作客 有”利”可图

    意甲:恩波利(主)VSAC米兰 开赛时间:2018-09-28凌晨3:00 两队积分排名: 两队对赛往绩: 恩波利...

  • 2018-09-30

    2018-09-28 北京的雨滴感恩日记第1059天 1、感恩今天是周五,今天先生休息,在家看孩子,谢谢!谢谢!谢...

  • 神探球坛意甲分析 史帕尔vs森索罗

    比赛时间:2018-09-28 01:00开赛 比赛盘口:平手盘,大小球2/2.5球 比赛分析: 随著欧冠以及欧罗...

  • 蛇不知自己有毒么

    2018-09-28 星期五 晴 实在不想再提那个老实人小黄,见她来我们都避开,张姐趴在桌子上装睡觉,...

  • 2018年的电影记录.下

    151. 2018-09-28「11:14」:杰妮推荐并亲自发资源给我的电影。之前电脑坏了一直没看电影- - 这一...

网友评论

      本文标题:2018-09-28

      本文链接:https://www.haomeiwen.com/subject/knnuoftx.html