layui.define('table', function(exports) { var $ = layui.$ , table = layui.table //字符常量 , MOD_NAME = 'transferTable', ELEM = '.layui-transferTable' //外部接口 , transferTable = { index: layui.transferTable ? (layui.transferTable.index + 10000) : 0 //设置全局项 , set: function (options) { var that = this; that.config = $.extend({}, that.config, options); return that; } , get: function (id) { if (this.config && this.config[id]) { return this.config[id].data } else { return [] } } , reload: function (id, options) { table.reload(id, options) } } //操作当前实例 , transfer = function () { var that = this , options = that.config , id = options.id || options.index; transfer.that[id] = that; //记录当前实例对象 transfer.config[id] = options; //记录当前实例配置项 return { reload: function (options) { that.reload.call(that, options); } , config: options //获取右侧数据 , getData: function (haskey) { return that.getData.call(that,haskey); } } } //构造器 , Class = function (options) { var that = this; that.index = ++transferTable.index; that.left_table_id = "left_table_" + that.index; that.rigth_table_id = "rigth_table_" + that.index; //表格重载ID 如果配置里面没有 自动分配一个ID that.reload_left = options.leftTable['id'] || that.left_table_id; that.reload_right = options.rightTable['id'] || that.rigth_table_id; //右侧表格默认值 if (options.defultValue) { options.defultValueKey = options.defultValueKey || 'id'; } options.leftTable['elem'] = '#' + that.left_table_id; options.leftTable['callback'] = options.leftTable['done']; options.leftTable['firstLoad'] = true; options.rightTable['elem'] = '#' + that.rigth_table_id; options.rightTable['callback'] = options.rightTable['done']; options.rightTable['firstLoad'] = true; options.rightTable['data'] = options.rightTable['data'] || []; that.config = $.extend({}, that.config, transferTable.config, options); that.render(); }; Class.prototype.render = function () { //ID里面放表格样式 this.tableHtml() // 配置表格参数 this.loadTable() // 移动数据 this.transferData() } Class.prototype.tableHtml = function () { var that = this, options = that.config, left_table = '
', rigth_table = '
', html = '
' + '
' + left_table + '
' + '
' + '' + '' + '
' + '
' + rigth_table + '
' + '
'; $(options.elem).append(html) } Class.prototype.loadTable = function () { //传递的参数 table.render 表格 var that = this, options = that.config; options.leftTable['done'] = function (res, cur, total) { //监听表格选中 table.on('checkbox(' + that.left_table_id + ')', function (obj) { //表格点击触发 /*var checkStatusData = table.checkStatus(that.reload_left).data; if (checkStatusData.length > 0) { $('.' + that.left_table_id).removeClass('layui-btn-disabled') } else { $('.' + that.left_table_id).addClass('layui-btn-disabled') }*/ $('.' + that.left_table_id).removeClass('layui-btn-disabled') }); if (options.leftTable.callback) { options.leftTable.callback(res, cur, total); } var rightData = table.getData(that.reload_right,false) //初始化时右侧有数据,要将左侧对应数据勾选上 if (rightData.length > 0) { for (var i = 0; i < rightData.length; i++) { for (var j = 0; j < res.data.length; j++) { if (rightData[i]['id'] == res.data[j]['id']) { table.checkRecord(that.reload_left, res.data[j]); break; } } } } } options.rightTable['done'] = function (res, cur, total) { //监听表格选中 table.on('checkbox(' + that.rigth_table_id + ')', function (obj) { //右侧表格点击触发 /*var checkStatusData = table.checkStatus(that.reload_right).data; if (checkStatusData.length > 0) { $('.' + that.rigth_table_id).removeClass('layui-btn-disabled') } else { $('.' + that.rigth_table_id).addClass('layui-btn-disabled') }*/ $('.' + that.rigth_table_id).removeClass('layui-btn-disabled') }); if (options.rightTable.firstLoad) { if (options.rightTable.callback) { options.rightTable.callback(res, cur, total); } //右侧表格加载完后再加载左侧,以便将数据在左侧勾选上 table.render(options.leftTable); } options.rightTable.firstLoad = false }; if (options.rightTable.url) { $webUtil.ajax(options.rightTable.method || 'get', options.rightTable.url, $.extend({limit: -1}, options.rightTable.where, options.rightTable.extraParams), function (result) { if (result.success) { options.rightTable['data'] = result.data; options.rightTable['loadurl'] = options.rightTable['url']; options.rightTable['url'] = null; table.render(options.rightTable); } else { $webUtil.showErrorMsg(result.msg); } }, function (xhr, error) { $webUtil.showDebugMsg(error); }, options.rightTable.backPath); } else { table.render(options.rightTable); } } Class.prototype.transferData = function () { //绑定点击事件 var that = this, idName = that.config.id_name; $('.' + that.left_table_id).on('click', function () { if (!$(this).hasClass('layui-btn-disabled')) { var leftData = table.getData(that.reload_left,false) var rightData = table.getData(that.reload_right,false) layui.each(leftData, function (i, item) { if (item[table.config.checkName]) { //该数据左侧已选中,须在右侧中添加 var add = true; for (var j = 0; j < rightData.length; j++) { if (item['id'] == rightData[j]['id']) { add = false break; } } add && rightData.push(JSON.parse(JSON.stringify(item))); rightData[rightData.length - 1][table.config.checkName] = false } else { //该数据左侧未选中,须在右侧中删除 for (var j = 0; j < rightData.length; j++) { if (item['id'] == rightData[j]['id']) { rightData.remove(rightData[j]) break; } } } }); table.reload(that.reload_right, {data: rightData}) } $(this).addClass('layui-btn-disabled') }) $('.' + that.rigth_table_id).on('click', function () { if (!$(this).hasClass('layui-btn-disabled')) { var checkStatus = table.checkStatus(that.reload_right, true) , checkStatusData = checkStatus.data; if (checkStatusData && checkStatusData.length) { var leftData = table.getData(that.reload_left,false) for (var i = 0; i < checkStatusData.length; i++) { //左侧表格去除选中状态 for (var j = 0; j < leftData.length; j++) { if (checkStatusData[i]['id'] == leftData[j]['id']) { table.checkRecord(that.reload_left, leftData[j]); break; } } } table.removeData(that.reload_right, checkStatusData) } } $(this).addClass('layui-btn-disabled') }) } //获得右侧面板数据 Class.prototype.getData = function (haskey) { var that = this , options = that.config , selectedData = []; var selectedData = table.getData(that.reload_right,!haskey) return selectedData; }; //记录所有实例 transfer.that = {}; //记录所有实例对象 transfer.config = {}; //记录所有实例配置项 //获得选中的数据(右侧面板) transferTable.getData = function (id,haskey) { var that = transfer.that[id]; return table.getData(that.reload_right,haskey); }; transferTable.render = function (options) { var ins = new Class(options); return transfer.call(ins); }; exports('transferTable', transferTable); });