1
0

transfer.js 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. layui.define('table',function (exports) {
  2. "use strict";
  3. var $ = layui.$
  4. ,table = layui.table
  5. ,MOD_NAME = 'transfer',LEFT_TABLE = 'left-table-',RIGHT_TABLE = 'right-table-',LEFT_BTN = 'left-btn-',RIGHT_BTN = 'right-btn-',FILTER= 'test'
  6. ,DISABLED = 'layui-btn-disabled',BTN = 'button',BTN_STLY='btn',MD5='layui-col-md5',MD2='layui-col-md2'
  7. ,transfer = {
  8. index:layui.transfer?(layui.transfer+1000):0
  9. ,idData:[] //ID池
  10. ,data:[] //原始数据
  11. ,options:[]
  12. ,update:function (data,filed) {
  13. if(filed=='' && data && data.length > 0){
  14. var d = [];
  15. $.each(data,function (k,v) {
  16. v.LAY_TABLE_INDEX && delete v.LAY_TABLE_INDEX
  17. v.LAY_CHECKED && delete v.LAY_CHECKED
  18. d.push(v)
  19. })
  20. return d
  21. }else if(filed && data && data.length > 0){
  22. d = '';
  23. $.each(data,function (k,v) {
  24. if( k === 0 ){
  25. d += v[filed]
  26. }else{
  27. d += ','+ v[filed]
  28. }
  29. })
  30. return d
  31. }else{
  32. return [];
  33. }
  34. }
  35. ,get:function (option,type,field) {
  36. var index = option.index
  37. var data = transfer.data;
  38. if(!index){
  39. return [];
  40. }
  41. if(type==='all'){
  42. var d = [],d1=[],d2=[];
  43. for (var i = data.length - 1; i >= 0; i--) {
  44. if(data[i].id==LEFT_TABLE+index){
  45. d1= data[i].data;
  46. }else if(data[i].id==RIGHT_TABLE+index){
  47. d2 = data[i].data;
  48. }
  49. }
  50. d.push({left:d1})
  51. d.push({right:d2})
  52. return d
  53. }else if(type==='left' || type==='l'){
  54. for (var i = data.length - 1; i >= 0; i--) {
  55. if(data[i].id==LEFT_TABLE+index){
  56. return this.update(data[i].data,field);
  57. }
  58. }
  59. }else if(type === 'right' || type==='r'){
  60. for (var i = data.length - 1; i >= 0; i--) {
  61. if(data[i].id==RIGHT_TABLE+index){
  62. return this.update(data[i].data,field);
  63. }
  64. }
  65. }
  66. }
  67. }
  68. ,thisRate = function () {
  69. var that = this
  70. return {
  71. index:that.index
  72. }
  73. }
  74. ,Class = function (options) {
  75. var that = this
  76. that.index = transfer.index?transfer.index:++transfer.index
  77. that.config = options
  78. transfer.options = options
  79. that.createHTMLDocument()
  80. that.render()
  81. };
  82. Class.prototype.createHTMLDocument = function () {
  83. var that = this
  84. ,elem = that.config.elem
  85. ,index= that.index;
  86. //创建页面元素
  87. var html = '<div class="layui-container">\
  88. <div class="layui-row">\
  89. <div class="'+MD5+'">\
  90. <table class="layui-hide" id="'+LEFT_TABLE+index+'" lay-filter="'+FILTER+'"></table>\
  91. </div>\
  92. <div class="'+MD2+'" style="text-align: center;">\
  93. <div id="'+LEFT_BTN+index+'" style="margin-bottom: 10px;"><button data-type="0" data-index="'+index+'" class="layui-btn '+DISABLED+' '+BTN_STLY+'"> <i class="layui-icon">&#xe602;</i></button></div>\
  94. <div id="'+RIGHT_BTN+index+'" ><button data-type="1" data-index="'+index+'" class="layui-btn '+DISABLED+' '+BTN_STLY+'"> <i class="layui-icon">&#xe603;</i></button></div>\
  95. </div>\
  96. <div class="'+MD5+'">\
  97. <table class="layui-hide" id="'+RIGHT_TABLE+index+'" lay-filter="'+FILTER+'"></table>\
  98. </div>\
  99. </div>\
  100. </div>';
  101. $(elem).html(html)
  102. }
  103. //初始化表格
  104. Class.prototype.render = function () {
  105. var that = this,options = that.config;
  106. var d1_c = {
  107. elem: '#'+LEFT_TABLE+that.index
  108. ,cols: [options.cols]
  109. ,data: (options.data[0]?options.data[0]:[])
  110. ,id:LEFT_TABLE+that.index
  111. }
  112. var d2_c = {
  113. elem: '#'+RIGHT_TABLE+that.index
  114. ,cols: [options.cols]
  115. ,data: (options.data[1]?options.data[1]:[])
  116. ,id:RIGHT_TABLE+that.index
  117. }
  118. if(options.tabConfig){
  119. d1_c = $.extend(d1_c,options.tabConfig)
  120. d2_c = $.extend(d2_c,options.tabConfig)
  121. }
  122. transfer.idData.push(that.index)
  123. transfer.data = [];
  124. transfer.data.push({id:LEFT_TABLE+that.index,data:(options.data[0]?options.data[0]:[])})
  125. transfer.data.push({id:RIGHT_TABLE+that.index,data:(options.data[1]?options.data[1]:[])})
  126. table.render(d1_c)
  127. table.render(d2_c)
  128. that.move()
  129. };
  130. //左右移动按钮根据左表格居中
  131. Class.prototype.move = function () {
  132. var that = this
  133. ,elem = $('#'+LEFT_TABLE+that.index)
  134. ,h = elem.parent().height();
  135. h = h / 2 - 44;
  136. elem.parents('.layui-row').find('.'+MD2).css('padding-top',h+'px')
  137. }
  138. //点击事件
  139. $(document).on('click','.'+BTN_STLY,function () {
  140. if(!$(this).hasClass(DISABLED)){
  141. var othis = $(this),type = othis.data('type');
  142. datas(type)
  143. }
  144. })
  145. //数据处理
  146. //data 选中数据
  147. //type 类型 0 左 1 右
  148. function datas (type) {
  149. var d = transfer.data;
  150. var d1 = d[0].data;
  151. var d2 = d[1].data;
  152. var _d = [];
  153. if(d1.length > 0 && type==0){
  154. //左边的数据移动到右表
  155. var n_d1 = [];
  156. d1.reverse()
  157. for (var i = 0; i < d1.length; i++) {
  158. if(d1[i].LAY_CHECKED===true){
  159. delete d1[i].LAY_CHECKED
  160. delete d1[i].LAY_TABLE_INDEX
  161. d2.unshift(d1[i])
  162. }else{
  163. delete d1[i].LAY_TABLE_INDEX
  164. n_d1.push(d1[i])
  165. }
  166. }
  167. _d.push(n_d1,d2)
  168. }else if(d2.length > 0 && type==1){
  169. //左边的数据移动到右表
  170. var n_d2 = [];
  171. for (var i = 0; i < d2.length; i++) {
  172. if(d2[i].LAY_CHECKED && d2[i].LAY_CHECKED===true){
  173. delete d2[i].LAY_CHECKED
  174. d2[i].LAY_TABLE_INDEX && delete d2[i].LAY_TABLE_INDEX
  175. d1.push(d2[i])
  176. }else{
  177. delete d2[i].LAY_TABLE_INDEX
  178. n_d2.push(d2[i])
  179. }
  180. }
  181. _d.push(d1,n_d2)
  182. }
  183. var options = transfer.options
  184. options.data =datasChecked(_d);
  185. transfer.render(options)
  186. }
  187. function datasChecked(data){
  188. var d1= [];
  189. var d2 = [];
  190. if(data[0] && data[0].length){
  191. $.each(data[0],function(k,v){
  192. v.LAY_CHECKED===true && delete v.LAY_CHECKED
  193. d1.push(v)
  194. });
  195. }
  196. if(data[1] && data[1].length){
  197. $.each(data[1],function(k,v){
  198. v.LAY_CHECKED===true && delete v.LAY_CHECKED
  199. d2.push(v)
  200. });
  201. }
  202. return [d1,d2];
  203. }
  204. //数据处理
  205. // Class.prototype.shiftData = function (data1,data2,data,type) {
  206. // var da = [];//未选中的数据
  207. // // d1.reverse();
  208. // $.each(data1,function(k,v){
  209. // if(!v.LAY_CHECKED){
  210. // da.push(v)
  211. // }
  212. // })
  213. // // dd.reverse();
  214. // $.each(data,function(kk,vv){
  215. // data2.push(vv)
  216. // })
  217. // var d = [];
  218. // if(type==0){
  219. // d.push(da)
  220. // d.push(data2)
  221. // $('#'+LEFT_BTN+this.index).children(BTN).addClass(DISABLED);
  222. // }else if(type==1){
  223. // d.push(data2)
  224. // d.push(da)
  225. // $('#'+RIGHT_BTN+this.index).children(BTN).addClass(DISABLED);
  226. // }
  227. // this.config.data = d
  228. // this.render()
  229. // }
  230. //选中状态
  231. table.on('checkbox('+FILTER+')', function(obj){
  232. var idData = transfer.idData,lenght = idData.length;
  233. if(lenght > 0){
  234. for (var i=0;i<=lenght-1;i++){
  235. var checkStatus1 = table.checkStatus(LEFT_TABLE+idData[i])
  236. ,data_1 = checkStatus1.data
  237. ,checkStatus2 = table.checkStatus(RIGHT_TABLE+idData[i])
  238. ,data_2 = checkStatus2.data;
  239. if(data_1.length >0){
  240. $('#'+LEFT_BTN+idData[i]).children(BTN).removeClass(DISABLED);
  241. }else{
  242. $('#'+LEFT_BTN+idData[i]).children(BTN).addClass(DISABLED);
  243. }
  244. if(data_2.length >0){
  245. $('#'+RIGHT_BTN+idData[i]).children(BTN).removeClass(DISABLED);
  246. }else{
  247. $('#'+RIGHT_BTN+idData[i]).children(BTN).addClass(DISABLED);
  248. }
  249. }
  250. }
  251. });
  252. transfer.render = function (options) {
  253. var inst = new Class(options)
  254. return thisRate.call(inst)
  255. }
  256. exports(MOD_NAME,transfer)
  257. })