window.sort=require('../utilities/sort'); window.Header = function getHeader(object) { this.object = object; this._header = object.el || '#header'; this._column = object.column; this._data = object.data; this._restorationColumn = object.restorationColumn; this._fixedTop = object.fixedTop || 0; 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; let height = _parentNode.height(); _parentNodeTemp.css('position',"fixed"); _parentNodeTemp.css('top',_this._fixedTop+"px"); _parentNodeTemp.css('z-index',"1030"); _parentNodeTemp.css('width',_headerParent.width()+"px"); _parentNodeTemp.height(height); _parentNodeTemp.attr('id',_this._header+"Temp"); $(_this._header+"Roll").append(_parentNodeTemp); $(window).scroll(function(){ let scrollTop = document.documentElement.scrollTop || document.body.scrollTop; if (scrollTop > _parentNode_top) { $(_this._header+"Roll").removeClass('d-none'); } else { $(_this._header+"Roll").addClass('d-none'); } }); } /** * column :{customization : null || bool --是否自定义 * dom : null || element --自定义元素 * style : null || string --样式 * name : null || string --字段名,英文 * value : string --列名 * neglect : null || bool --是否忽略排序 * } * */ function append() { _this._column.forEach(function (column) { if (column.customization){ _parentNode.append(column.dom); }else{ let _td = ""; if(!column.neglect){ _td += ""; } _td += ""+column.value+""; _td += ""; _parentNode.append(_td); let column_dom = $('#dom_'+column.name); let column_dom_temp = column_dom.clone(); let columnNameDom = column_dom_temp.children()[0]; if (!column.neglect){ column_dom_temp.children()[0].id = 'sort_'+column.name+"_temp"; columnNameDom = column_dom_temp.children()[1]; } console.log(columnNameDom); column_dom_temp.attr('id','dom_'+column.name+"_temp"); $(columnNameDom).css('width',column_dom.width()); _parentNodeTemp.append(column_dom_temp); if (!column.neglect){ let column_sort = $('#sort_'+column.name); let rule=function () { if (!sortType[column.name]){ sortType[column.name] = 'asc'; columnArr.push(column.name); column_sort.removeClass('fa-sort').addClass('fa-sort-asc'); column_dom_temp.children()[0].className = 'fa 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'); column_dom_temp.children()[0].className = 'fa 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'); column_dom_temp.children()[0].className = 'fa 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]; while(j - gap >= 0 && current[_this._restorationColumn] < 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); } }; column_dom.on('click',rule); column_dom_temp.on('click',rule); } } }); } this.init = function() { append(); fixed(); } };