/** * 需在页面定义三个元素 tr的元素当作当前元素 id 自定义 默认header * tr的父级元素 table id默认为tr的id加Parent后缀 * 浮动表格元素 table id默认为tr的id加Roll后缀 * */ window.sort=require('../utilities/sort'); window.Header = function getHeader(object) { this._header = object.el || '#header'; //基点元素 this._column = object.column; //列名 this._data = object.data; //被排序数据 this._restorationColumn = object.restorationColumn; //恢复原数据基准字段 this._fixedTop = object.fixedTop || 0; //同级浮动元素高度,使当前元素追加该元素高度浮动 this._offset = object.offset || 0; //偏移量 this._is_restorationColumn_asc = object.is_restorationColumn_asc || false; //恢复原数据基准字段的排序类型 true:asc false:desc this._vue = object.vue || null; //vue容器 this._checkbox = object.checkbox || 'checkData'; //全选数据列名 this._closeFloat = object.closeFloat || false; //是否开启浮动 let _this = this; let _parentNode = $(_this._header); let sortType = {}; let columnArr = []; // form fixed let _headerParent = $(_this._header+"Parent"); let _parentNodeTemp = _parentNode.clone(); //滚动监听 function fixed() { let _parentNode_top = _parentNode.offset().top; $(window).scroll(function(){ let scrollTop = document.documentElement.scrollTop || document.body.scrollTop; if (scrollTop > _parentNode_top-_this._fixedTop) { $(_this._header+"Roll").removeClass('d-none'); } else { $(_this._header+"Roll").addClass('d-none'); } let scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; if (scrollLeft > 0){ _parentNodeTemp.css('margin-left',0-(scrollLeft)); }else{ _parentNodeTemp.css('margin-left',""); } }); } /** * column :{customization : null || bool --是否自定义 * dom : null || element --自定义元素 * style : null || string --样式 * name : null || string --字段名,英文 * value : string --列名 * neglect : null || bool --是否忽略排序 * } * */ //点击事件触发的排序规则 function rule(column,column_sort,column_sort_temp=null) { return function () { if (!sortType[column.name]){ sortType[column.name] = 'asc'; columnArr.push(column.name); column_sort.removeClass('fa-sort').addClass('fa-sort-asc'); if (column_sort_temp) column_sort_temp.removeClass('fa-sort').addClass('fa-sort-asc'); let columnArrTemp = []; columnArrTemp.push.apply(columnArrTemp,columnArr); window.sort.sort(_this._data,columnArrTemp,sortType); return ; } if (sortType[column.name] === 'asc'){ sortType[column.name] = 'desc'; column_sort.removeClass('fa-sort-asc').addClass('fa-sort-desc'); if (column_sort_temp)column_sort_temp.removeClass('fa-sort-asc').addClass('fa-sort-desc'); let columnArrTemp = []; columnArrTemp.push.apply(columnArrTemp,columnArr); window.sort.sort(_this._data,columnArrTemp,sortType); return ; } if (sortType[column.name] === 'desc'){ delete sortType[column.name]; columnArr.some(function (name, index) { if (name === column.name){ columnArr.splice(index,1); return true; } }); column_sort.removeClass('fa-sort-desc').addClass('fa-sort'); if (column_sort_temp)column_sort_temp.removeClass('fa-sort-desc').addClass('fa-sort'); if (columnArr.length === 0){ //希尔排序 let arr = []; arr.push.apply(arr,_this._data); let len = arr.length; for(let gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) { for(let i = gap; i < len; i++) { let j = i; let current = arr[i]; if (_this._is_restorationColumn_asc){ while(j - gap >= 0 && Number(current[_this._restorationColumn]) < Number(arr[j - gap][_this._restorationColumn])) { arr[j] = arr[j - gap]; j = j - gap; } }else{ while(j - gap >= 0 && Number(current[_this._restorationColumn]) > Number(arr[j - gap][_this._restorationColumn])) { arr[j] = arr[j - gap]; j = j - gap; } } arr[j] = current; } } //插入排序 /*let preIndex, current; for(let i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while(preIndex >= 0 && arr[preIndex][_this._restorationColumn] > current[_this._restorationColumn]) { arr[preIndex + 1] = arr[preIndex]; preIndex--; } arr[preIndex + 1] = current; }*/ _this._data.length = 0; _this._data.push.apply(_this._data,arr); return; } let columnArrTemp = []; columnArrTemp.push.apply(columnArrTemp,columnArr); window.sort.sort(_this._data,columnArrTemp,sortType); } } }; //追加表头字段 function append() { _this._column.forEach(function (column) { if (column.customization){ let _th = $("