var checkData = []; window.sort=require('../utilities/sort'); window.Header = function getHeader(object) { let _targetDom = object.el ? document.getElementById(object.el) : document.getElementsByTagName("table")[0];//基点元素 let _columns = object.column; //列名 let _fixedTop = object.fixedTop || 0; //同级浮动元素高度,使当前元素追加该元素高度浮动 let _isCheckAllBox = object.isCheckAllBox || true;//是否开启全选框 let _data = object.data || []; //被排序数据 let _restorationColumn = object.restorationColumn || 'id'; //恢复原数据基准字段 let _is_restorationColumn_asc = object.is_restorationColumn_asc || false; //恢复原数据基准字段的排序类型 true:asc false:desc let _before = object.before; let sortType = {}; let columnArr = []; let table = document.createElement("table"); function getTargetChildNode(dom) { if (!dom || dom.tagName==='INPUT')return dom; return getTargetChildNode(dom.firstElementChild); } function createHeaderBefore() { let tr = document.createElement("tr"); _before.forEach(be=>{ let th = document.createElement("th"); if (be.colspan)th.colSpan = be.colspan; if (be.font){ let font = document.createElement("span"); font.className = be.font; th.appendChild(font); } if (be.value)th.appendChild(document.createTextNode(be.value)); if (be.class)th.className = be.class; tr.appendChild(th); }); table.appendChild(tr); } function createHeader() { let div = document.createElement("div"); div.style.position = "sticky"; div.style.position = "-webkit-sticky"; div.style.top = _fixedTop+"px"; div.style.backgroundColor = "white"; div.style.zIndex = "1030"; table.className = "table table-bordered mb-0 text-center"; let tr = document.createElement("tr"); let firstTr = _targetDom.getElementsByTagName("tr")[0]; let tds = []; if (!firstTr){ tr.className = "text-nowrap"; }else tds = firstTr.children; if (_isCheckAllBox){ let th = document.createElement("th"); if (firstTr) th.style.minWidth = tds[0].offsetWidth+"px"; let check = document.createElement("input"); check.type = "checkbox"; check.id = "checkAll"; let trs = _targetDom.getElementsByTagName("tr"); check.onchange = function () { if (event.target.checked){ for (let i=0;i0 ? tds.length : _columns.length);i++){ let th = document.createElement("th"); if (firstTr) th.style.minWidth = (tds[i].offsetWidth-0.3)+"px"; let column = _columns[_isCheckAllBox ? i-1 : i]; if (_columns && column){ if (column.style)for (let key in column.style)if (column.style.hasOwnProperty(key)) th.style[key] = column.style[key]; if (column.class)th.className = column.class; let span = document.createElement("span"); span.style.display = "inline-block"; if (!column.neglect){ th.style.cursor = "pointer"; let font = document.createElement("span"); font.className = "fa fa-sort"; span.appendChild(font); th.onclick = rule(column,font); } span.appendChild(document.createTextNode((column.value ? column.value : ''))); th.appendChild(span); } tr.appendChild(th); } table.appendChild(tr); div.appendChild(table); _targetDom.parentNode.insertBefore(div,_targetDom); } //点击事件触发的排序规则 function rule(column,columnSort) { return function () { if (!sortType[column.name]){ sortType[column.name] = 'asc'; columnArr.push(column.name); columnSort.className = "fa fa-sort-asc"; let columnArrTemp = []; columnArrTemp.push.apply(columnArrTemp,columnArr); window.sort.sort(_data,columnArrTemp,sortType); return ; } if (sortType[column.name] === 'asc'){ sortType[column.name] = 'desc'; columnSort.className = "fa fa-sort-desc"; let columnArrTemp = []; columnArrTemp.push.apply(columnArrTemp,columnArr); window.sort.sort(_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; } }); columnSort.className = "fa fa-sort"; if (columnArr.length === 0){ //希尔排序 let arr = []; arr.push.apply(arr,_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 (_is_restorationColumn_asc){ while(j - gap >= 0 && Number(current[_restorationColumn]) < Number(arr[j - gap][_restorationColumn])) { arr[j] = arr[j - gap]; j = j - gap; } }else{ while(j - gap >= 0 && Number(current[_restorationColumn]) > Number(arr[j - gap][_restorationColumn])) { arr[j] = arr[j - gap]; j = j - gap; } } arr[j] = current; } } _data.length = 0; _data.push.apply(_data,arr); return; } let columnArrTemp = []; columnArrTemp.push.apply(columnArrTemp,columnArr); window.sort.sort(_data,columnArrTemp,sortType); } } } //初始化 this.init = function() { if (_before)createHeaderBefore(); createHeader(); }; };