window.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!==false;//是否开启全选框 let _data = object.data || []; //被排序数据 let _restorationColumn = object.restorationColumn || 'id'; //恢复原数据基准字段 let _isRestorationColumnAsc = object.isRestorationColumnAsc || false; //恢复原数据基准字段的排序类型 true:asc false:desc let _before = object.before;//前置元素 let _name = "header:"+(object.name ? object.name+"." : "");//唯一名称 用于区别模块 本地存储 let _isForbidDrag = object.isForbidDrag; let sortType = {}; //排序类型 let columnArr = []; //列数组 let moveTd = {}; //移动列 let isNested = _targetDom.getElementsByTagName("table").length>0; let setting = "setting-column"; let settingInfo = localStorage.getItem("settingInfo") ? JSON.parse(localStorage.getItem("settingInfo")) : { isCopyWrap : true }; let keyCode = false; let settingCheck = true; function getTargetChildNode(dom) { //递归获取input子节点 if (!dom || dom.tagName==='INPUT')return dom; return getTargetChildNode(dom.firstElementChild); } function createHeaderBefore() {//生成前置元素 let tr = document.createElement("tr"); tr.className = "text-center"; _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); }); _targetDom.insertBefore(tr, _targetDom.firstElementChild); } function appendFloat(div,cla="") { div.style.overflowX = "hidden"; div.className="m-0 p-0"; let th = document.createElement("th"); th.className = "pl-2 pr-2 header-float "+cla; th.style.top = _fixedTop+"px"; th.appendChild(div); return th; } function createHeader() {//生成表头列 let tr = document.createElement("tr"); tr.className = "text-nowrap"; let firstTr = _targetDom.getElementsByTagName("tr")[0]; let tds = []; if (firstTr)tds = firstTr.children; if (_isCheckAllBox){//是否开启全选 let div = document.createElement("div"); let check = document.createElement("input"); check.type = "checkbox"; check.id = "checkAll"; if (firstTr)bindCheckbox(check); div.appendChild(check); tr.appendChild(appendFloat(div,"text-left")); } let i = (_isCheckAllBox && firstTr) ? 1 : 0; for (i;i<(tds.length>0 ? tds.length : _columns.length);i++){ let div = document.createElement("div"); let th = appendFloat(div); let column = _columns[(_isCheckAllBox && firstTr) ? i-1 : i]; let wid = column ? localStorage.getItem(_name+column.name) : null; if (wid){ div.style.width = wid+"px"; th.style.minWidth = wid+"px"; let trs = _targetDom.children; while(trs[0] && trs[0].tagName !== 'TR')trs = trs[0].children; if (trs[0]){ for (let j=0;j{ let node = document.createElement("div"); node.className = "col-"+(row.col ? row.col : 1); node.appendChild(document.createTextNode(row.value)); div.appendChild(node); }); th.appendChild(div); } } function defaultColumn(th,column) { //默认列样式的生成 if (column.style)for (let key in column.style)if (column.style.hasOwnProperty(key)) th.parentElement.style[key] = column.style[key]; if (column.class)th.parentElement.className += column.class; let span = document.createElement("span"); span.style.display = "inline-block"; if (!column.neglect){ span.style.cursor = "pointer"; let font = document.createElement("span"); font.className = "fa fa-sort"; span.appendChild(font); span.onclick = rule(column,font); //绑定排序事件 } span.appendChild(document.createTextNode((column.value ? column.value : ''))); th.appendChild(span); } //点击事件触发的排序规则 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 (_isRestorationColumnAsc){ 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); } } } function bindCheckbox(check) { let trs = _targetDom.children; while(trs[0].tagName !== 'TR')trs = trs[0].children; check.onchange = function () { if (event.target.checked){ for (let i=0;i tr.children[j].offsetWidth-10)moveTd = {oldX:event.clientX,dom:tr.children[j],index:j}; }; tr.children[j].onmousemove = function () { if (j===0 && event.offsetX<10)return; if(event.offsetX<10 || event.offsetX > tr.children[j].offsetWidth-10) this.style.cursor = 'w-resize'; else this.style.cursor = 'default'; } } document.onmouseup = function (){ //全局监听拖拽列宽的发生 作用域设为全局是为了防抖动 if (moveTd.oldX){ event.stopPropagation(); moveTd.dom.style.cursor = 'default'; moveTd.oldX = undefined; setTimeout(function () { let column = _columns[(_isCheckAllBox && _targetDom.firstElementChild) ? moveTd.index-1 : moveTd.index]; if (column) localStorage.setItem(_name+column.name, moveTd.dom.offsetWidth); }); } }; //移动时调整表头与表身的列宽 document.onmousemove = function(){ if (moveTd.oldX){ event.stopPropagation(); let diff = event.clientX-moveTd.oldX; let newWidth = moveTd.dom.firstElementChild.offsetWidth+diff+"px"; if (diff!==0){ let trs = _targetDom.getElementsByTagName("tr"); for (let j=(_before ? 1 : 0);j

* */ let div = document.createElement("div"); div.id = "setting-1"; div.style.position = "fixed"; div.style.bottom = 0; div.style.left = 0; div.style.backgroundColor = "#1b1e21"; div.style.width = "50px"; div.style.height = "50px"; div.style.cursor = "pointer"; div.style.textAlign = "center"; div.style.borderRadius = "3px"; let h1 = document.createElement("h1"); let span = document.createElement("span"); span.className = "fa fa-gear"; span.style.color = "white"; div.onclick = showSetting("setting-1"); h1.appendChild(span); div.appendChild(h1); document.body.appendChild(div); } function _createSettingHeader(text,id) { let div = document.createElement("div"); div.style.width = "5%"; div.style.display = "inline-block"; div.style.borderLeft = "1px solid #aaaaaa"; div.style.textAlign = "center"; div.style.cursor = "pointer"; div.innerText = text; div.id = id; div.onclick = function () { if (event.target.id===setting)return; let old = document.getElementById(setting); old.style.backgroundColor = ""; old.style.color = ""; document.getElementById(setting+"-body").style.display = "none"; event.target.style.backgroundColor ="#3490dc"; event.target.style.color ="white"; document.getElementById(event.target.id+"-body").style.display = ""; setting = event.target.id; }; return div; } function bindColumnEvent() { return function(){ let storage = localStorage.getItem("column:"+object.name); let arr = storage ? storage.split(',') : []; localStorage.setItem("column:"+object.name,_exeHid(arr).toString()); }; } function _exeHid(arr) { let nodes = document.getElementById("setting-column-body").getElementsByTagName("input"); let show = []; let hid = []; let newArr = []; for (let i=0;i1){ for (let k=0;k1)dom.colSpan++; else dom.style.display = ""; }else{ if (dom.colSpan>1)dom.colSpan--; else dom.style.display = "none"; } } function appendCheckboxList(div) { let storage = localStorage.getItem("column:"+object.name); let arr = storage ? storage.split(',') : []; _columns.forEach(function (column,index) { let key = "setting-column-"+column.name; let label = document.createElement("label"); label.style.float = "left"; let input = document.createElement("input"); input.type="checkbox"; input.id=key; input.className = "fixed-checkbox"; input.dataset.index = _isCheckAllBox ? index+1 : index; input.value = column.name; if (arr.indexOf(column.name)===-1)input.checked = true; label.appendChild(input); let la = document.createElement("label"); la.setAttribute("for",key); label.appendChild(la); label.appendChild(document.createTextNode(column.type ? column.title : column.value)); let prentLabel = document.createElement("label"); prentLabel.style.width = "10%"; prentLabel.appendChild(label); div.appendChild(prentLabel); }); } function bindClearEvent(need) { return function() { for (let i = 0; i < localStorage.length; i++) { let key = localStorage.key(i); if (need === key.substring(0,need.length))localStorage.removeItem(key); } }; } function bindCheckAllEvent() { return function () { settingCheck = !settingCheck; let nodes = document.getElementById("setting-column-body").getElementsByTagName("input"); for (let i=0;i