zoukankan      html  css  js  c++  java
  • layui tree +table 实现点击左侧树,动态新增编辑行 (layui-v2.5.6)

    样式代码,防止下拉框的下拉列表被隐藏---必须设置--- 此样式和表格的样式有冲突 如果表格列数太多 会出现错乱的情况

     1   /* 防止下拉框的下拉列表被隐藏---必须设置--- 此样式和表格的样式有冲突 如果表格列数太多 会出现错乱的情况 目前我的解决方法是忽略下拉框的美化渲染 <select lay-ignore> */
     2     .layui-table-cell {
     3         overflow: visible;
     4     }
     5 
     6     .layui-table-box {
     7         overflow: visible;
     8     }
     9 
    10     .layui-table-body {
    11         overflow: visible;
    12     }
    13     /* 设置下拉框的高度与表格单元相同 */
    14     td .layui-form-select{
    15         margin-top: -10px;
    16         margin-left: -15px;
    17         margin-right: -15px;
    18     }
    View Code

    页面代码显示列

    <form class="layui-form" id="fromId" action="#">
    
    <div id="tree1" style="margin:20px 10px;">
    <table id="demo" lay-filter="tableFilter"></table>
     
     </form>
    // 如果将button 放入form 中,点击按钮执行函数后,会自动刷新当前页面  
     <button class="layui-btn" onclick="save();">保存</button>
     <button class="layui-btn" onclick="Application();">应用</button>

    模板html   ,{{# layui.each(tableColumnList, function(index, item){  }} 该方法是执行js 操作

    <script type="text/html" id="bar">
        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
    </script>
    
    //tableColumnList 是js 从后台获取的json 数据。
    <script type="text/html" id="selectTool">
        <select name="selectDemo" lay-filter="selectDemo">
            <option value="">请选择或输入</option>
            {{# layui.each(tableColumnList, function(index, item){ }}
            <option value="{{item.COLUMN_NAME}}">{{ item.COLUMN_NAME }}</option>
            {{# }); }}
        </select>
    </script>

    js 渲染layui + 请求数据操作

      1 <script type="text/javascript">
      2     // 获取的是下拉框的数据,这种方法可能会有隐患
      3     var tableColumnList = @Html.Raw(ViewBag.ColumnList);
      4     var myajaxData = [];   // table + 选中的数据  全局数组对象
      5 
      6     // layui 渲染,执行,监听
      7     layui.use(['tree', 'util', 'table', 'form', 'jquery'], function () {
      8 
      9         var CONFIG_LINKED_DATA = {
     10             ID: '1001',
     11             DATA_ITEM_ID: '',
     12             DATA_ITEM_NAME: '',
     13             DATA_TABLE: '',
     14             ID_NUMBER_FIELD: '',
     15             FOREIGN_KEY_FIELD: '',
     16             SET_TIME: ''
     17         };
     18         var tree = layui.tree
     19         , layer = layui.layer
     20         , util = layui.util
     21         , table = layui.table
     22         , form = layui.form
     23           , $ = layui.jquery;
     24         var tableObj = table.render({
     25             elem: '#demo' //指定原始表格元素选择器(推荐id选择器)
     26             //, height: 315 //容器高度
     27             //, data: dataTable.data
     28             //, toolbar: '#toolbarDemo'
     29            , defaultToolbar: []
     30            , cols: [[
     31                //{ field: 'ID', title: 'ID', sort: true, fixed: 'left' } 
     32                , { field: 'DATA_ITEM_NAME', title: '数据项名称','15%', edit: 'text' }
     33                , { field: 'DATA_TABLE', title: '数据源表','22%', edit: 'text' }
     34                , { title: '人口信息','15%', templet: function (d) { return 'TAB_PERSON' } }
     35                , { field: 'ID_NUMBER_FIELD','20%', title: '身份证字段', templet: '#selectTool' }
     36                , { field: 'FOREIGN_KEY_FIELD','20%', title: 'person字段' , templet: '#selectTool'}
     37                , { title: '操作', toolbar: '#bar', fixed: 'right', align: 'center' }
     38            ]]
     39            , text: {
     40                none: '暂无相关数据' //默认:无数据。注:该属性为 layui 2.2.5 开始新增
     41            }
     42             //,ID:"demo1"
     43             //,data:myajaxData
     44             //, url: 'url' // 我发现如果直接写上url 配置的话,就没法动态添加行 。所以选择先用ajax方法请求数据回来,再渲染table.reload({data:myajaxData})数据
     45              , done: function (res, curr, count) {
     46                  //debugger;
     47                  myajaxData = res.data;
     48                  //如果是异步请求数据方式,res即为你接口返回的信息。
     49 
     50                  //这里是表格重载的时候 回显下拉框的数据
     51                  $('tr').each(function(e){
     52                      var $cr=$(this); // 获取当前行的所有元素
     53                      //var dataIndex = $cr.attr("data-index");
     54 
     55                      var dataIndex = $cr.attr("data-index");
     56 
     57                      $.each(myajaxData,function(index,value){
     58 
     59                          if(value.LAY_TABLE_INDEX==dataIndex){
     60       
     61 $cr.find("td").eq(3).find('input').val(value.ID_NUMBER_FIELD);
     62                              $cr.find("td").eq(4).find('input').val(value.FOREIGN_KEY_FIELD);
     63                          }
     64 
     65                      });
     66                  });
     67 
     68              }
     69         });
     70         LoadInfo1();   //获取table 数据并渲染
     71         
     72         var  treeIns = tree.render({
     73             elem: '#tree1'
     74            , data: LoadInfo()
     75            , showCheckbox: true  //是否显示复选框
     76            , id: 'demoId1'
     77             //, isJump: true //是否允许点击节点时弹出新窗口跳转
     78            ,oncheck: function (obj) {
     79                //console.log(JSON.stringify(obj.data)); //得到当前点击的节点数据
     80                 //选中当前的节点数据,如果数据在table 数组对象中存在就不需要,push 新数据
     81                 if (obj.checked == true) {
     82                  
     83                     var treecheckeddata = obj.data;
     84                     var linked_data={};
     85 
     86                     linked_data.DATA_ITEM_ID = treecheckeddata.id;
     87                     linked_data.DATA_ITEM_NAME = treecheckeddata.title;
     88                     linked_data.DATA_TABLE = treecheckeddata.attributes.datatable;
     89                          
     90                     //debugger
     91                     //var filter_linked_data =myajaxData.filter(function(element, index, self){
     92                     //    if(element.DATA_ITEM_ID ==  obj.data.id)
     93                     //        return element;
     94                     //});
     95 
     96                     var myData =[];
     97                     for (var i = 0; i < myajaxData.length; i++) {
     98                         if(myajaxData[i].DATA_ITEM_ID ==  obj.data.id)
     99                         {
    100                             myData.push(myajaxData[i]);
    101                         }
    102                     }
    103 
    104                     if(myData.length == 0)
    105                     {
    106                         myajaxData.push(linked_data);
    107                     }
    108 
    109                    
    110                     linked_data = {}; // 重复勾选时,添加入新对象
    111 
    112                     tableObj.reload({
    113                         data: myajaxData
    114                     });
    115                           
    116                 }
    117 
    118            }
    119         });
    120 
    121         function LoadInfo1() {
    122             var jsonstr1 = '';
    123             $.ajax({
    124                 url: 'url',
    125                 //data: { id: '1' },
    126                 type: 'post',
    127                 dataType: 'json',
    128                 async: false,
    129                 success: function (result) {
    130                     //debugger;
    131                     if (result) {
    132                         jsonstr1 = result;
    133                         myajaxData = jsonstr1.data;
    134 
    135                         tableObj.reload({ data: myajaxData });
    136 
    137                     }
    138                 },
    139                 error: function (xhr, status) { }
    140             });
    141 
    142             return jsonstr1;
    143         }
    144 
    145       // 监听下拉框的值
    146         form.on('select(selectDemo)', function (data) {
    147             // 通过data.elem.dataset可以得到保存的对象id
    148             // data.elem.value可以得到下拉框选择的文本
    149 
    150             var select_value =data.elem.value;
    151             var dataIndex =$(this).parents().parent('tr').attr("data-index");
    152             var select_td_field =$(this).parents("td").attr("data-field");
    153 
    154             //选择下拉框的值,给全局变量myajaxData 赋值
    155             $.each(myajaxData,function(index,value){
    156 
    157                 if(value.LAY_TABLE_INDEX == dataIndex && select_td_field == "ID_NUMBER_FIELD"){
    158                     value.ID_NUMBER_FIELD = select_value;
    159                 }
    160                 if(value.LAY_TABLE_INDEX == dataIndex && select_td_field == "FOREIGN_KEY_FIELD"){
    161                     value.FOREIGN_KEY_FIELD =select_value;
    162                 }
    163             });
    164         })
    165 
    166         //监听删除事件
    167         table.on('tool(tableFilter)', function (obj) {
    168             if (obj.event === 'del') {
    169                 obj.del();
    170                 //console.log(obj.data.DATA_ITEM_ID);
    171 
    172                 //var tree_checked = obj.data.DATA_ITEM_ID;
    173                 //var checkData = tree.getChecked('demoId1');
    174                 //$.each(checkData,function(index,value){
    175                 //    console.log(value);
    176 
    177                 //    if(value.id == tree_checked && value.children.length ==0)
    178                 //    {
    179                 //        value.checked =true;
    180                 //    }else{
    181                 //        $.each(value.children,function(item,value1){
    182                 //            console.log("children",value1);
    183                 //            if(value1.id == tree_checked)
    184                 //            {
    185                 //                value1.checked = false;
    186                 //            }
    187                 //        })
    188                 //    }
    189                 //})
    190 
    191                 //treeIns.reload({
    192                 //    checked:checkData,
    193                 //});
    194 
    195             };
    196         });
    197 
    198 
    199 
    200         //提交数据到后台保存
    201         //form.on('submit(*)', function (data) {
    202         //    return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
    203         //});
    204 
    205         //请求Tree 数据
    206         function LoadInfo() {
    207             var jsonstr = '';
    208             $.ajax({
    209                 url: 'url',
    210                 //data: { id: '1' },
    211                 //contentType: 'application/json;charset=utf-8',
    212                 type: 'post',
    213                 dataType: 'json',
    214                 async: false,
    215                 success: function (result) {
    216                     if (result) {
    217                         jsonstr = result.Data;
    218                     }
    219                 },
    220                 error: function (xhr, status) { }
    221             });
    222             return jsonstr;
    223         }
    224 
    225         //根据有效表名,获取下拉菜单的数据
    226         function LoadInfo2(tableName) {
    227             tableName = tableName != null ? tableName : "TAB_PERSON";
    228             $.ajax({
    229                 url: 'url',
    230                 data: { tableName: tableName },
    231                 //contentType: 'application/json;charset=utf-8',
    232                 type: 'post',
    233                 dataType: 'json',
    234                 async: false,
    235                 success: function (result) {
    236                     if (result) {
    237                         tableColumnList = result.Data;
    238                     }
    239                 },
    240                 error: function (xhr, status) { }
    241             });
    242 
    243             return tableColumnList;
    244         }
    245 
    246     });
    247 
    248 
    249     function save()
    250     {
    251         //console.log("提交myajaxData数据",JSON.stringify(myajaxData));
    252         //删除数组对象中的空[]    ,[[],{},{name:'',sex:''}]   如果是{},=>JSON.stringify(arr[i]) == "{}"
    253         for (var i = 0; i < myajaxData.length; i++) {
    254             //这里面前两个判断条件只针对普通数组
    255             if (myajaxData[i] == null || myajaxData[i] == "") {
    256                 myajaxData.splice(i, 1);
    257                 i = i - 1;
    258             }
    259         }
    260         //console.log(JSON.stringify(myajaxData));
    261         $.ajax({
    262             url:"/ComprehensiveDataCorrelation/Save_ICONFIG_LINKED_DATA",
    263             // async:false,
    264             type:"post",
    265             //dataType:"json",
    266             contentType: "application/json",//向后台传送格式
    267             data:JSON.stringify({ model:myajaxData}),
    268             success:function(result){
    269 
    270                 if(result.Success){
    271                     layer.msg('保存成功!');
    272                     //window.location.href="/ComprehensiveDataCorrelation/DataCorrelationIndex";
    273                 }else{
    274                     layer.msg(result.msg);
    275                 }
    276             }
    277         });
    278     }
    279 
    280     function Application() {
    281         $.ajax({
    282             url: '/ComprehensiveDataCorrelation/ToolApplication',
    283             data: { toolType: "link" },
    284             type: 'post',
    285             dataType: 'json',
    286             success: function (result) {
    287                 if (result) {
    288                     layer.msg("操作成功!");
    289                 } else {
    290                     layer.msg("操作失败!");
    291                 }
    292             },
    293             error: function (xhr, status) { }
    294         });
    295     }
    296 </script>
    297     

    参考资料: layui 新增编辑行  layui 官方文档

  • 相关阅读:
    Windows Server 2012 两台服务器文件同步
    Linux下非root用户运行Tomcat
    Linux离线安装mysql 5.6详细步骤
    spring再学习之整合JDBC
    spring再学习之AOP实操
    spring再学习之AOP准备
    spring再学习之注解
    spring再学习之配置详解
    spring再学习之基本概念
    spring再学习之简单测试
  • 原文地址:https://www.cnblogs.com/zhangrh/p/14078195.html
Copyright © 2011-2022 走看看