在开发观星资产系统的后台的时候,用到了Layui的穿梭框插件,使用起来非常的方便,本片文章主要记录如果使用。
主要实现弹窗中显示表单,并将穿梭框添加到表单中,效果如下:

0x01 Html
弹窗内容主要使用到Layui的form插件
1 | <form class="layui-form" action="" lay-filter="example1" id="create_task" style="display: none"> | 
2 |         <div class="layui-form-item"> | 
3 |             <label class="layui-form-label">任务名称</label> | 
4 |             <div class="layui-input-inline"> | 
5 |                 <input type="text" name="name" lay-verify="required" autocomplete="off" placeholder="请输入任务名称" | 
6 |                        class="layui-input"> | 
7 |             </div> | 
8 |         </div> | 
9 |         <div class="layui-form-item"> | 
10 |             <label class="layui-form-label">类型</label> | 
11 |             <div class="layui-input-block"> | 
12 |                 <input type="radio" name="type" value="普通" title="普通" checked=""> | 
13 |                 <input type="radio" name="type" value="优先" title="优先"> | 
14 |             </div> | 
15 |         </div> | 
16 |         <div class="layui-form-item layui-form-text"> | 
17 |             <label class="layui-form-label">任务URL</label> | 
18 |             <div class="layui-input-block"> | 
19 |                 <textarea placeholder="请输入任务URL,多个URL注意换行。" class="layui-textarea" lay-verify="required" | 
20 |                           name="urls"></textarea> | 
21 |             </div> | 
22 |         </div> | 
23 |         <div class="layui-form-item"> | 
24 |             <label class="layui-form-label">选择节点</label> | 
25 |             <div class="layui-input-block"> | 
26 |                 <div id="node" class="node-transfer"></div> | 
27 |             </div> | 
28 |         </div> | 
29 | |
30 |         <div class="layui-form-item"> | 
31 |             <div class="layui-input-block"> | 
32 |                 <button class="layui-btn layui-btn-sm" lay-submit="" lay-filter="demo1" id="hello">立即提交</button> | 
33 |                 <button type="reset" class="layui-btn layui-btn-sm">重置</button> | 
34 |             </div> | 
35 |         </div> | 
36 |     </form> | 
0x02 Js
1 | else if (obj.event === 'createTask') {  //当点击创建任务按钮后,进行穿梭框数据渲染 | 
2 |     zlajax.get({ | 
3 |         'url': '/gxadmin/create_task/', | 
4 |         'success': function (data) { | 
5 |             if (data['code'] === 200) { | 
6 |                 var data1 = data['data']; | 
7 |                 transfer.render({ | 
8 |                     elem: "#node", | 
9 |                     data: data1, | 
10 |                     title: ['可用节点(当前任务数)', '已选节点(当前任务数)'], | 
11 |                     id: 'nodes', | 
12 |                     width: 250, | 
13 |                     showSearch: true, | 
14 |                 }) | 
15 |             } | 
16 |         } | 
17 | |
18 |     }); | 
19 |     layer.open({ // 进行弹窗 | 
20 |         type: 1, | 
21 |         anim: 1, | 
22 |         area: ['700px', '700px'], | 
23 |         skin: 'demo-class', | 
24 |         // btn: ['立即提交', '取消'], | 
25 |         maxmin: true, | 
26 |         shadeClose: false, | 
27 |         title: '创建任务', | 
28 |         content: $('#create_task'), | 
29 |         success: function () { | 
30 |             var but = $(".layui-layer-btn0"); | 
31 |             but.attr('lay-filter', 'demo1'); | 
32 |             but.attr('lay-submit', ""); | 
33 |             $('.layui-transfer-data').css('height', '260px'); | 
34 |             form.on('submit(demo1)', function (data) { //点击提交按钮后,执行函数 | 
35 |                 var id = []; | 
36 |                 taskname = data.field.name; | 
37 |                 urls = data.field.urls; | 
38 |                 nodes = transfer.getData('nodes'); | 
39 |                 if (nodes.length === 0) { | 
40 |                     layer.msg('至少选择一个节点!'); | 
41 |                     return false; | 
42 |                 } | 
43 |                 for (var node in nodes) { | 
44 |                     id.push(nodes[node]['value']); | 
45 |                 } | 
46 |                 urls = urls.split('\n'); | 
47 |                 urls = $.grep(urls, function (i) {  //进行url列表过滤 | 
48 |                     return i !== ""; | 
49 |                 }); | 
50 |                 type = data.field.type; | 
51 |                 zlajax.post({ | 
52 |                     'url': '/gxadmin/create_task/', | 
53 |                     'traditional': true, | 
54 |                     'data': { | 
55 |                         'name': taskname, | 
56 |                         'urls': urls, | 
57 |                         'nodes': id, | 
58 |                         'type': type, | 
59 |                     }, | 
60 |                     'success': function (data) { | 
61 |                         if (data['code'] === 200) { | 
62 |                             layer.msg(data['message']); | 
63 |                             setTimeout(function () { | 
64 |                                 layer.closeAll(); | 
65 |                             }, 1000); | 
66 |                             table.reload('testReload', {}) //重载表格 | 
67 |                         } else { | 
68 |                             layer.msg(data['message']); | 
69 | |
70 |                         } | 
71 |                     }, 'fail': function () { | 
72 |                         layer.msg('网络错误!') | 
73 |                     } | 
74 |                 }); | 
75 |                 return false; | 
76 |             }); | 
77 |         }, | 
78 | |
79 |     }) | 
80 | } |