fix table 排序后多选不能使用
This commit is contained in:
87
src/layui.js
87
src/layui.js
@@ -701,6 +701,93 @@
|
||||
desc && clone.reverse(); // 倒序
|
||||
return clone;
|
||||
};
|
||||
// 不复制 将数组中的成员对象按照某个 key 的 value 值进行排序
|
||||
Layui.prototype.thissort = function(arr, key, desc){
|
||||
var that = this
|
||||
,clone = (arr || []);
|
||||
|
||||
// 若未传入 key,则直接返回原对象
|
||||
if(that.type(arr) === 'object' && !key){
|
||||
return clone;
|
||||
} else if(typeof arr !== 'object'){ //若 arr 非对象
|
||||
return [clone];
|
||||
}
|
||||
|
||||
// 开始排序
|
||||
clone.sort(function(o1, o2){
|
||||
var v1 = o1[key]
|
||||
,v2 = o2[key];
|
||||
|
||||
/*
|
||||
* 特殊数据
|
||||
* 若比较的成员均非对象
|
||||
*/
|
||||
|
||||
// 若比较的成员均为数字
|
||||
if(!isNaN(o1) && !isNaN(o2)) return o1 - o2;
|
||||
// 若比较的成员只存在某一个非对象
|
||||
if(!isNaN(o1) && isNaN(o2)){
|
||||
if(key && typeof o2 === 'object'){
|
||||
v1 = o1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
} else if (isNaN(o1) && !isNaN(o2)){
|
||||
if(key && typeof o1 === 'object'){
|
||||
v2 = o2;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 正常数据
|
||||
* 即成员均为对象,也传入了对比依据: key
|
||||
* 若 value 为数字,按「大小」排序;若 value 非数字,则按「字典序」排序
|
||||
*/
|
||||
|
||||
// value 是否为数字
|
||||
var isNum = [!isNaN(v1), !isNaN(v2)];
|
||||
|
||||
// 若为数字比较
|
||||
if(isNum[0] && isNum[1]){
|
||||
if(v1 && (!v2 && v2 !== 0)){ //数字 vs 空
|
||||
return 1;
|
||||
} else if((!v1 && v1 !== 0) && v2){ //空 vs 数字
|
||||
return -1;
|
||||
} else { //数字 vs 数字
|
||||
return v1 - v2;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 字典序排序
|
||||
*/
|
||||
|
||||
// 若为非数字比较
|
||||
if(!isNum[0] && !isNum[1]){
|
||||
// 字典序比较
|
||||
if(v1 > v2){
|
||||
return 1;
|
||||
} else if (v1 < v2) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 若为混合比较
|
||||
if(isNum[0] || !isNum[1]){ //数字 vs 非数字
|
||||
return -1;
|
||||
} else if(!isNum[0] || isNum[1]) { //非数字 vs 数字
|
||||
return 1;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
desc && clone.reverse(); // 倒序
|
||||
return clone;
|
||||
};
|
||||
|
||||
//阻止事件冒泡
|
||||
Layui.prototype.stope = function(thisEvent){
|
||||
|
||||
@@ -23,6 +23,7 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
,disabledName: 'LAY_DISABLED'
|
||||
} //全局配置项
|
||||
,cache: {} //数据缓存
|
||||
,allData:[] // 全部数据
|
||||
,index: layui.table ? (layui.table.index + 10000) : 0
|
||||
|
||||
//设置全局项
|
||||
@@ -62,6 +63,10 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
}
|
||||
,resize: function(){ //重置表格尺寸/结构
|
||||
that.resize.call(that);
|
||||
},
|
||||
getData: function(){
|
||||
console.log(that)
|
||||
return that.config.data
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -253,7 +258,9 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
|
||||
//构造器
|
||||
,Class = function(options){
|
||||
|
||||
var that = this;
|
||||
that.reanderTime = new Date().getTime()
|
||||
that.index = ++table.index;
|
||||
that.config = $.extend({}, that.config, table.config, options);
|
||||
that.render();
|
||||
@@ -350,6 +357,7 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
|
||||
options.index = that.index;
|
||||
that.key = options.id || options.index;
|
||||
table.allData[that.key] = options.data
|
||||
|
||||
//生成替代元素
|
||||
hasRender[0] && hasRender.remove(); //如果已经渲染,则Rerender
|
||||
@@ -739,7 +747,7 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
|
||||
//对参数进行深度或浅扩展
|
||||
that.config = $.extend(deep, {}, that.config, options);
|
||||
|
||||
table.allData[that.key] = that.config.data
|
||||
//执行渲染
|
||||
that.render(type);
|
||||
};
|
||||
@@ -1240,18 +1248,18 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
//默认为前端自动排序。如果否,则需自主排序(通常为服务端处理好排序)
|
||||
if(options.autoSort){
|
||||
if(type === 'asc'){ //升序
|
||||
thisData = layui.sort(data, field);
|
||||
thisData = layui.thissort(data, field);
|
||||
} else if(type === 'desc'){ //降序
|
||||
thisData = layui.sort(data, field, true);
|
||||
thisData = layui.thissort(data, field, true);
|
||||
} else { //清除排序
|
||||
thisData = layui.sort(data, table.config.indexName);
|
||||
thisData = layui.thissort(data, table.config.indexName);
|
||||
delete that.sortKey;
|
||||
}
|
||||
}
|
||||
|
||||
res[options.response.dataName] = thisData || data;
|
||||
that.renderData(res, that.page, that.count, true);
|
||||
|
||||
// table.cache[that.key] = thisData
|
||||
if(formEvent){
|
||||
options.initSort = {
|
||||
field: field
|
||||
@@ -1259,6 +1267,8 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
};
|
||||
layui.event.call(th, MOD_NAME, 'sort('+ filter +')', options.initSort);
|
||||
}
|
||||
// if(this)
|
||||
this.config.afterSort && this.config.afterSort()
|
||||
};
|
||||
|
||||
//请求loading
|
||||
@@ -1281,6 +1291,7 @@ layui.define(['laytpl', 'laypage', 'layer', 'form', 'util'], function(exports){
|
||||
|
||||
//同步选中值状态
|
||||
Class.prototype.setCheckData = function(index, checked){
|
||||
console.log("同步选中值状态",index,checked,this)
|
||||
var that = this
|
||||
,options = that.config
|
||||
,thisData = table.cache[that.key];
|
||||
|
||||
Reference in New Issue
Block a user