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: '數據項名稱',width:'15%', edit: 'text' }
 33                , { field: 'DATA_TABLE', title: '數據源表',width:'22%', edit: 'text' }
 34                , { title: '人口信息',width:'15%', templet: function (d) { return 'TAB_PERSON' } }
 35                , { field: 'ID_NUMBER_FIELD',width:'20%', title: '身份證字段', templet: '#selectTool' }
 36                , { field: 'FOREIGN_KEY_FIELD',width:'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 官方文檔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM