templet:自定义模板有一种与html结合使用的方式,维护起来更清晰
    image.pngimage.png
    image.png

    功能管理-新建
    ①添加两(个)新建按钮
    a)一个加到表格上,表示新增根菜单,触发事件事不需要传递任何参数
    b)一个加到表格行中,需要配合templet,触发事件时传递当前行的fid和fname,也是即将新建的子菜单、子按钮所属的pid和pname
    image.png

    1. <%--操作处理后显示的按钮(新建、删除、修改--%>
    2. <script type="text/html" id="rowBtns">
    3. {{# if(d.ftype == 1){ }}
    4. <button type="button" class="layui-btn layui-btn-normal layui-btn-sm" onclick="toAdd('{{d.fid}}','{{d.fname}}')">
    5. <i class="layui-icon">&#xe61f;</i>新建</button>
    6. {{# }else{ }}
    7. <button type="button" class="layui-btn layui-btn-normal layui-btn-sm layui-btn-disabled">
    8. <i class="layui-icon">&#xe61f;</i>新建</button>
    9. {{# } }}
    10. <button type="button" class="layui-btn layui-btn-danger layui-btn-sm">
    11. <i class="layui-icon">&#xe640;</i>删除</button>
    12. <button type="button" class="layui-btn layui-btn-warm layui-btn-sm">
    13. <i class="layui-icon">&#xe642;</i>修改</button>
    14. </script>
    function toAdd(pid,pname){}
    

    ②使用layui-layer(弹出层组件),实现在本窗口新建

    function toAdd(pid,pname) {
                    layui.use(['layer'],function () {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          var layer=layui.layer;
                        layer.open({
                            type:1,//打开一个页面层,可以展示一些html效果
                            area:[400,400],
                            title:'新建功能'
                        })
                    })
                }
    

    ③在网页中设计一个新建功能的表单模板,将其引用到上述弹出层中
    引入时必须使用jQuery,layui自带jQuery。

    //弹出一个新建功能的窗口
                function toAdd(pid,pname) {
                    layui.use(['layer'],function () {
                        var layer=layui.layer;
                        var $=layui.jquery;
    
                        //将pid,pname更新到输入框中,建议使用id寻找
                        var input=document.getElementById('pid');
                        input.value=pid;//设置input标签的value属性
                        $('#pname').val(pname);//jQuery写法设置标签value属性
    
                        layer.open({
                            type:1,//打开一个页面层,可以展示一些html效果
                            area:[400,400],
                            title:'新建功能',
                            content:$('#funAddForm')//必须使用jQuery,jQuery根据id找到form模板,将其引入到弹出层
                        })
                    })
                }
    
    <%--用于解决radio不显示的问题--%>
            <script>
                layui.use('form', function(){
                    var form = layui.form;
                    form.render('radio');
                });
            </script>
    
    <!-- 弹出层中的表单模板 -->
            <form id="funAddForm" class="layui-form" action="funAdd" style="display:none;padding-top:10px;">
                <div class="layui-form-item">
                    <label class="layui-form-label">功能名称</label>
                    <div class="layui-input-inline">
                        <input type="text" name="fname" required  lay-verify="required" placeholder="请输入名称" autocomplete="off" class="layui-input layui-input-inline">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">功能类别</label>
                    <div  class="layui-input-inline">
                        <input type="radio" name="ftype" value="1" title="菜单" checked>
                        <input type="radio" name="ftype" value="2" title="按钮">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">功能链接(URL)</label>
                    <div  class="layui-input-inline">
                        <input type="text" name="fhref" placeholder="请输入链接" autocomplete="off" class="layui-input">
                    </div>
                </div>
    
                <div class="layui-form-item">
                    <label class="layui-form-label">功能范围</label>
                    <div  class="layui-input-inline">
                        <input type="text" name="auth" 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-inline">
                        <input type="hidden" name="pid" id="pid" value="-1" />
                        <input type="text" name="pname" id="pname" readonly  autocomplete="off" class="layui-input">
                    </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" class="layui-btn layui-btn-primary">重置</button>
                    </div>
                </div>
            </form>
    

    ④提交表单,真实新建

    //弹出一个新建功能的窗口
                function toAdd(pid,pname) {
                    layui.use(['layer'],function () {
                        var layer=layui.layer;
                        var $=layui.jquery;
    
                        //将pid,pname更新到输入框中,建议使用id寻找
                        var input=document.getElementById('pid');
                        input.value=pid;//设置input标签的value属性
                        $('#pname').val(pname);//jQuery写法设置标签value属性
    
                        layer.open({
                            type:1,//打开一个页面层,可以展示一些html效果
                            area:[400,400],
                            title:'新建功能',
                            content:$('#funAddForm')//必须使用jQuery,jQuery根据id找到form模板,将其引入到弹出层
                        })
                    })
                }
    

    Controller

    @RequestMapping("/funAdd")
        public String funAdd(Fun fun){
                service.save(fun);
                return "fun.jsp";
        }
    

    dao

    @Select("select count(*) from t_fun where fname = #{fname}")
        public int fnameAssert(String fname);
    
        @Insert("insert into t_fun values(null,#{fname},#{ftype},#{fhref},#{pid},#{auth},#{yl1},#{yl2})")
        public void save(Fun fun);
    

    service

    public void save(Fun fun){
            int count=dao.fnameAssert(fun.getFname());
            if(count>0){
                //名字已经存在
                throw new FnameException(fun.getFname());
            }
            dao.save(fun);
        }