vxe-table
Version:
A PC-end table component based on Vxe UI, supporting copy-paste, data pivot table, and high-performance virtual list table solution.
1 lines • 15.1 kB
JavaScript
var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_util=require("../../src/util"),_dom=require("../../../ui/src/dom"),_log=require("../../../ui/src/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getConfig,renderer,hooks,getI18n}=_ui.VxeUI,tableEditMethodKeys=["insert","insertAt","insertNextAt","insertChild","insertChildAt","insertChildNextAt","remove","removeCheckboxRow","removeRadioRow","removeCurrentRow","getRecordset","getInsertRecords","getRemoveRecords","getUpdateRecords","getEditRecord","getActiveRecord","getEditCell","getSelectedCell","clearEdit","clearActived","clearSelected","isEditByRow","isActiveByRow","setEditRow","setActiveRow","setEditCell","setActiveCell","setSelectCell"];hooks.add("tableEditModule",{setupTable(C){let{props:I,reactData:E,internalData:b}=C,t=C.getRefMaps().refElem,{computeMouseOpts:c,computeEditOpts:m,computeCheckboxOpts:R,computeTreeOpts:A,computeValidOpts:n}=C.getComputeMaps(),s=_xeUtils.default.browse(),p={},g={},_=(e,t)=>{var{model:l,editRender:r}=t;r&&(l.value=(0,_util.getCellValue)(e,t),l.update=!1)},a=(e,t)=>{var{model:l,editRender:r}=t;r&&l.update&&((0,_util.setCellValue)(e,t,l.value),l.update=!1,l.value=null)},l=()=>{var e=t.value;e&&(e=e.querySelector(".col--selected"))&&(0,_dom.removeClass)(e,"col--selected")},d=()=>{var{editStore:e,tableColumn:t}=E,l=m.value,e=e.actived;let{row:r,column:o}=e;(r||o)&&("row"===l.mode?t.forEach(e=>a(r,e)):a(r,o))},F=(e,t)=>{let{tableFullTreeData:i,afterFullData:n,fullDataRowIdData:d,fullAllDataRowIdData:u}=b;var l=A.value;let{rowField:s,parentField:c,mapChildrenField:g}=l,w=l.children||l.childrenField,v=t?"push":"unshift";e.forEach(l=>{let t=l[c];var r=(0,_util.getRowid)(C,l),o=t?_xeUtils.default.findTree(i,e=>t===e[s],{children:g}):null;if(o){var o=o.item,a=u[(0,_util.getRowid)(C,o)],a=a?a.level:0;let e=o[w],t=o[g];_xeUtils.default.isArray(e)||(e=o[w]=[]),_xeUtils.default.isArray(t)||(t=o[g]=[]),e[v](l),t[v](l);o={row:l,rowid:r,seq:-1,index:-1,_index:-1,$index:-1,treeIndex:-1,_tIndex:-1,items:e,parent:o,level:a+1,height:0,resizeHeight:0,oTop:0,expandHeight:0};d[r]=o,u[r]=o}else{t&&(0,_log.warnLog)("vxe.error.unableInsert"),n[v](l),i[v](l);a={row:l,rowid:r,seq:-1,index:-1,_index:-1,$index:-1,treeIndex:-1,_tIndex:-1,items:i,parent:null,level:0,height:0,resizeHeight:0,oTop:0,expandHeight:0};d[r]=a,u[r]=a}})},u=(t,e,n)=>{let l=I.treeConfig;var r=E.isRowGroupStatus;let{tableFullTreeData:d,afterFullData:o,mergeBodyList:a,tableFullData:i,fullDataRowIdData:u,fullAllDataRowIdData:s,insertRowMaps:c,removeRowMaps:g}=b;var w=A.value;let{transform:v,parentField:x,rowField:f,mapChildrenField:h}=w,m=w.children||w.childrenField,R=(_xeUtils.default.isArray(t)||(t=[t]),e),p=((_xeUtils.default.isString(e)||_xeUtils.default.isNumber(e))&&(w=s[e])&&(R=w.row),(0,_vue.reactive)(C.defineField(t.map(e=>Object.assign(l&&v?{[h]:[],[m]:[]}:{},e))))),_=[];if(l&&v&&(_=_xeUtils.default.toArrayTree(p,{key:f,parentKey:x,children:m})),_xeUtils.default.eqNull(R))if(l&&v)F(p,!1);else if(r){if(l)throw new Error(getI18n("vxe.error.noTree",["insert"]));(0,_log.warnLog)(getI18n("vxe.error.noGroup",["remove"]))}else p.forEach(e=>{var t=(0,_util.getRowid)(C,e),l={row:e,rowid:t,seq:-1,index:-1,_index:-1,$index:-1,treeIndex:-1,_tIndex:-1,items:o,parent:null,level:0,height:0,resizeHeight:0,oTop:0,expandHeight:0};u[t]=l,s[t]=l,o.unshift(e),i.unshift(e)}),a.forEach(e=>{var t=e.row;0<=t&&(e.row=t+p.length)});else if(-1===R)if(l&&v)F(p,!0);else if(r){if(l)throw new Error(getI18n("vxe.error.noTree",["insert"]));(0,_log.warnLog)(getI18n("vxe.error.noGroup",["remove"]))}else p.forEach(e=>{var t=(0,_util.getRowid)(C,e),l={row:e,rowid:t,seq:-1,index:-1,_index:-1,treeIndex:-1,_tIndex:-1,$index:-1,items:o,parent:null,level:0,height:0,resizeHeight:0,oTop:0,expandHeight:0};u[t]=l,s[t]=l,o.push(e),i.push(e)});else if(l&&v){let i=_xeUtils.default.findTree(d,e=>R[f]===e[f],{children:h});if(i){let r=i.parent,o=r?r[h]:d;e=s[(0,_util.getRowid)(C,r)];let a=e?e.level:0;if(_.forEach((e,t)=>{r?e[x]!==r[f]&&((0,_log.errLog)("vxe.error.errProp",[x+"="+e[x],x+"="+r[f]]),e[x]=r[f]):null!==e[x]&&(_xeUtils.default.eqNull(e[x])||(0,_log.errLog)("vxe.error.errProp",[x+"="+e[x],"null"]),e[x]=null);let l=i.index+t;n&&(l+=1),o.splice(l,0,e)}),_xeUtils.default.eachTree(_,e=>{var t=(0,_util.getRowid)(C,e),l={row:e,rowid:t,seq:-1,index:-1,_index:-1,$index:-1,treeIndex:-1,_tIndex:-1,items:o,parent:r,level:a+1,height:0,resizeHeight:0,oTop:0,expandHeight:0};e[m]&&(e[h]=e[m]),u[t]=l,s[t]=l},{children:m}),r){w=_xeUtils.default.findTree(d,e=>R[f]===e[f],{children:m});if(w){t=w.items;let e=w.index;n&&(e+=1),t.splice(e,0,..._)}}}else(0,_log.warnLog)("vxe.error.unableInsert"),F(p,!0)}else if(r){if(l)throw new Error(getI18n("vxe.error.noTree",["insert"]));(0,_log.warnLog)(getI18n("vxe.error.noGroup",["remove"]))}else{if(l)throw new Error(getI18n("vxe.error.noTree",["insert"]));let r=-1;if(_xeUtils.default.isNumber(R)?R<o.length&&(r=R):r=C.findRowIndexOf(o,R),-1===(r=n?Math.min(o.length,r+1):r))throw new Error(getI18n("vxe.error.unableInsert"));o.splice(r,0,...p);e=C.findRowIndexOf(i,R);-1<e?i.splice(e+(n?1:0),0,...p):i.push(...p),a.forEach(e=>{var{row:t,rowspan:l}=e;t>=r?e.row=t+p.length:(n?t+l>=r:t+l>r)&&(e.rowspan=l+p.length)})}w=e=>{var t=(0,_util.getRowid)(C,e);g[t]?(delete g[t],c[t]&&delete c[t]):c[t]=e};return l&&v?_xeUtils.default.eachTree(_,w,{children:h}):p.forEach(w),E.removeRowFlag++,E.insertRowFlag++,C.cacheRowMap(!1),C.updateScrollYStatus(),C.handleTableData(l&&v),l&&v||C.updateAfterDataIndex(),C.updateFooter(),C.handleUpdateBodyMerge(),C.checkSelectionStatus(),E.scrollYLoad&&C.updateScrollYSpace(),(0,_vue.nextTick)().then(()=>(C.updateCellAreas(),C.recalculate(!0))).then(()=>({row:p.length?p[p.length-1]:null,rows:p}))},r=(e,l,r,o)=>{var a=I.treeConfig,i=b.fullAllDataRowIdData;let{transform:t,rowField:n,parentField:d}=A.value;if(a&&t){_xeUtils.default.isArray(e)||(e=[e]);let t=l;return(_xeUtils.default.isString(l)||_xeUtils.default.isNumber(l))&&(a=i[l])&&(t=a.row),u(e.map(e=>Object.assign({},e,{[d]:t[n]})),r,o)}return(0,_log.errLog)("vxe.error.errProp",["tree-config.transform=false","tree-config.transform=true"]),Promise.resolve({row:null,rows:[]})},S=(e,t)=>{var l=E.editStore,{actived:l,focused:r}=l,{row:o,column:a}=l,i=n.value;if(o||a){if(t&&(0,_util.getRowid)(C,t)!==(0,_util.getRowid)(C,o))return(0,_vue.nextTick)();d(),l.args=null,l.row=null,l.column=null,C.updateFooter(),C.dispatchEvent("edit-closed",{row:o,rowIndex:C.getRowIndex(o),$rowIndex:C.getVMRowIndex(o),column:a,columnIndex:C.getColumnIndex(a),$columnIndex:C.getVMColumnIndex(a)},e||null)}return r.row=null,r.column=null,i.autoClear&&("full"!==i.msgMode||"obsolete"===getConfig().cellVaildMode)&&C.clearValidate?C.clearValidate():(0,_vue.nextTick)().then(()=>C.updateCellAreas())},i=(l,r,o,e)=>{let a=C.xeGrid,i=C.xeGantt;var{editConfig:t,mouseConfig:n}=I,{editStore:d,tableColumn:u}=E,s=m.value,c=s.mode,{actived:d,focused:g}=d;let{row:w,column:v}=l;var x=v.editRender,f=l.cell||C.getCellElement(w,v),h=s.beforeEditMethod||s.activeMethod;if((l.cell=f)&&(0,_utils.isEnableConf)(t)&&(0,_utils.isEnableConf)(x)&&!C.isPendingByRow(w)&&!C.isAggregateRecord(w)){if(d.row!==w||"cell"===c&&d.column!==v){let t="edit-disabled";if(!h||h(Object.assign(Object.assign({},l),{$table:C,$grid:a,$gantt:i}))){n&&(C.clearSelected(),C.clearCellAreas)&&(C.clearCellAreas(),C.clearCopyCellArea()),C.closeTooltip(),d.column&&S(r),t="edit-activated",v.renderHeight=f.offsetHeight,d.args=l,d.row=w,d.column=v,"row"===c?u.forEach(e=>_(w,e)):_(w,v);let e=s.afterEditMethod;(0,_vue.nextTick)(()=>{o&&C.handleFocus(l,r),e&&e(Object.assign(Object.assign({},l),{$table:C,$grid:a,$gantt:i}))})}C.dispatchEvent(t,{row:w,rowIndex:C.getRowIndex(w),$rowIndex:C.getVMRowIndex(w),column:v,columnIndex:C.getColumnIndex(v),$columnIndex:C.getVMColumnIndex(v)},r),"edit-activated"===t&&C.dispatchEvent("edit-actived",{row:w,rowIndex:C.getRowIndex(w),$rowIndex:C.getVMRowIndex(w),column:v,columnIndex:C.getColumnIndex(v),$columnIndex:C.getVMColumnIndex(v)},r)}else{t=d.column;n&&(C.clearSelected(),C.clearCellAreas)&&(C.clearCellAreas(),C.clearCopyCellArea()),t!==v&&(x=t.model,x.update&&(0,_util.setCellValue)(w,t,x.value),C.clearValidate)&&C.clearValidate(w,v),v.renderHeight=f.offsetHeight,d.args=l,d.column=v,e&&setTimeout(()=>{C.handleFocus(l,r)})}g.column=null,g.row=null,C.focus()}return(0,_vue.nextTick)()},w=(t,e,l)=>{var r=I.editConfig;let o=_xeUtils.default.isString(e)?C.getColumnByField(e):e;return t&&o&&(0,_utils.isEnableConf)(r)&&(0,_utils.isEnableConf)(o.editRender)&&!C.isAggregateRecord(t)?Promise.resolve(l?C.scrollToRow(t,o):null).then(()=>{var e=C.getCellElement(t,o);return e&&(i({row:t,rowIndex:C.getRowIndex(t),column:o,columnIndex:C.getColumnIndex(o),cell:e,$table:C},null,l,l),b._lastCallTime=Date.now()),(0,_vue.nextTick)()}):(0,_vue.nextTick)()};return p={insert(e){return u(e,null)},insertAt(e,t){return u(e,t)},insertNextAt(e,t){return u(e,t,!0)},insertChild(e,t){return window.aa=b,r(e,t,null)},insertChildAt(e,t,l){return r(e,t,l)},insertChildNextAt(e,t,l){return r(e,t,l,!0)},remove(e){var t=I.treeConfig,{editStore:l,isRowGroupStatus:r}=E;let{tableFullTreeData:o,selectCheckboxMaps:a,afterFullData:i,mergeBodyList:n,tableFullData:d,pendingRowMaps:u,insertRowMaps:s,removeRowMaps:c}=b;var g=R.value,w=A.value;let{transform:v,mapChildrenField:x}=w,f=w.children||w.childrenField;w=l.actived,l=g.checkField;let h=[];return e?_xeUtils.default.isArray(e)||(e=[e]):e=d,e.forEach(e=>{var t;C.isInsertByRow(e)||(t=(0,_util.getRowid)(C,e),c[t]=e)}),l||(e.forEach(e=>{e=(0,_util.getRowid)(C,e);a[e]&&delete a[e]}),E.updateCheckboxFlag++),d===e?(e=h=d.slice(0),b.tableFullData=[],b.afterFullData=[],C.clearMergeCells()):t&&v?e.forEach(e=>{let t=(0,_util.getRowid)(C,e);var l=_xeUtils.default.findTree(o,e=>t===(0,_util.getRowid)(C,e),{children:x}),l=(l&&(l=l.items.splice(l.index,1),h.push(l[0])),_xeUtils.default.findTree(o,e=>t===(0,_util.getRowid)(C,e),{children:f})),l=(l&&l.items.splice(l.index,1),C.findRowIndexOf(i,e));-1<l&&i.splice(l,1)}):r?(0,_log.warnLog)(getI18n("vxe.error.noGroup",["remove"])):e.forEach(e=>{var t=C.findRowIndexOf(d,e);-1<t&&(t=d.splice(t,1),h.push(t[0]));let r=C.findRowIndexOf(i,e);-1<r&&(n.forEach(e=>{var{row:t,rowspan:l}=e;t>r?e.row=t-1:t+l>r&&(e.rowspan=l-1)}),i.splice(r,1))}),w.row&&-1<C.findRowIndexOf(e,w.row)&&p.clearEdit(),e.forEach(e=>{e=(0,_util.getRowid)(C,e);s[e]&&delete s[e],u[e]&&delete u[e]}),E.removeRowFlag++,E.insertRowFlag++,E.pendingRowFlag++,C.cacheRowMap(!1),C.handleTableData(t&&v),C.updateFooter(),C.handleUpdateBodyMerge(),t&&v||C.updateAfterDataIndex(),C.checkSelectionStatus(),E.scrollYLoad&&C.updateScrollYSpace(),(0,_vue.nextTick)().then(()=>(C.updateCellAreas(),C.recalculate(!0))).then(()=>({row:h.length?h[h.length-1]:null,rows:h}))},removeCheckboxRow(){return p.remove(C.getCheckboxRecords()).then(e=>(C.clearCheckboxRow(),e))},removeRadioRow(){var e=C.getRadioRecord();return p.remove(e||[]).then(e=>(C.clearRadioRow(),e))},removeCurrentRow(){var e=C.getCurrentRecord();return p.remove(e||[]).then(e=>(C.clearCurrentRow(),e))},getRecordset(){var e=p.getRemoveRecords(),t=C.getPendingRecords();let l=e.concat(t);var r=p.getUpdateRecords().filter(t=>!l.some(e=>C.eqRow(e,t)));return{insertRecords:p.getInsertRecords(),removeRecords:e,updateRecords:r,pendingRecords:t}},getInsertRecords(){let{fullAllDataRowIdData:l,insertRowMaps:e}=b,r=[];return _xeUtils.default.each(e,(e,t)=>{l[t]&&r.push(e)}),r},getRemoveRecords(){var e=b.removeRowMaps;let t=[];return _xeUtils.default.each(e,e=>{t.push(e)}),t},getUpdateRecords(){var{keepSource:e,treeConfig:t}=I,l=b.tableFullData,r=A.value;return e?(d(),t?_xeUtils.default.filterTree(l,e=>C.isUpdateByRow(e),r):l.filter(e=>C.isUpdateByRow(e))):[]},getActiveRecord(){(0,_log.warnLog)("vxe.error.delFunc",["getActiveRecord","getEditCell"]);var e=E.editStore,t=b.fullAllDataRowIdData,{args:e,row:l}=e.actived;return e&&l&&t[(0,_util.getRowid)(C,l)]?Object.assign({},e,{row:l}):null},getEditRecord(){(0,_log.warnLog)("vxe.error.delFunc",["getEditRecord","getEditCell"]);var e=E.editStore,t=b.fullAllDataRowIdData,{args:e,row:l}=e.actived;return e&&l&&t[(0,_util.getRowid)(C,l)]?Object.assign({},e,{row:l}):null},getEditCell(){var e=E.editStore,{row:e,column:t}=e.actived;return t&&e?{row:e,rowIndex:C.getRowIndex(e),column:t,columnIndex:C.getColumnIndex(t)}:null},getSelectedCell(){var e=E.editStore,{row:e,column:t}=e.selected;return e&&t?{row:e,column:t}:null},clearActived(e){return(0,_log.warnLog)("vxe.error.delFunc",["clearActived","clearEdit"]),C.clearEdit(e)},clearEdit(e){return S(null,e)},clearSelected(){var e=E.editStore,e=e.selected;return e.row=null,e.column=null,l(),(0,_vue.nextTick)()},isActiveByRow(e){return(0,_log.warnLog)("vxe.error.delFunc",["isActiveByRow","isEditByRow"]),C.isEditByRow(e)},isEditByRow(e){var t=E.editStore;return t.actived.row===e},setActiveRow(e){return(0,_log.warnLog)("vxe.error.delFunc",["setActiveRow","setEditRow"]),p.setEditRow(e)},setEditRow(e,t){var l=b.visibleColumn;let r=_xeUtils.default.find(l,e=>(0,_utils.isEnableConf)(e.editRender)),o=!1;return t&&(o=!0)!==t&&(r=_xeUtils.default.isString(t)?C.getColumnByField(t):t),w(e,r,o)},setActiveCell(e,t){return(0,_log.warnLog)("vxe.error.delFunc",["setActiveCell","setEditCell"]),p.setEditCell(e,t)},setEditCell(e,t){return w(e,t,!0)},setSelectCell(e,t){var l=E.tableData,r=m.value,t=_xeUtils.default.isString(t)?C.getColumnByField(t):t;return e&&t&&"manual"!==r.trigger&&-1<(r=C.findRowIndexOf(l,e))&&t&&(l=C.getCellElement(e,t),e={row:e,rowIndex:r,column:t,columnIndex:C.getColumnIndex(t),cell:l},C.handleSelected(e,{})),(0,_vue.nextTick)()}},g={handleEdit(e,t){return i(e,t,!0,!0)},handleActived(e,t){return g.handleEdit(e,t)},handleClearEdit:S,handleFocus(r){var{row:o,column:a,cell:i}=r,n=a.editRender,d=m.value;if((0,_utils.isEnableConf)(n)){var u=renderer.get(n.name);let e=n.autofocus||n.autoFocus,t=n.autoSelect||n.autoselect,l;d.autoFocus&&(!e&&u&&(e=u.tableAutoFocus||u.tableAutofocus||u.autofocus),!t&&u&&(t=u.tableAutoSelect||u.autoselect),_xeUtils.default.isFunction(e)?l=e(r):e&&(l=!0===e?i.querySelector("input,textarea"):i.querySelector(e))&&l.focus()),l?t?l.select():s.msie&&((n=l.createTextRange()).collapse(!1),n.select()):d.autoPos&&!a.fixed&&C.scrollToRow(o,a)}},handleSelected(e,t){var l=I.mouseConfig,r=E.editStore,o=c.value;let a=m.value,{actived:i,selected:n}=r,{row:d,column:u}=e,s=l&&o.selected;return!s||n.row===d&&n.column===u||(i.row!==d||"cell"===a.mode&&i.column!==u)&&(S(t),C.clearSelected(),C.clearCellAreas&&(C.clearCellAreas(),C.clearCopyCellArea()),n.args=e,n.row=d,n.column=u,s&&g.addCellSelectedClass(),C.focus(),t)&&C.dispatchEvent("cell-selected",e,t),(0,_vue.nextTick)()},addCellSelectedClass(){var e=E.editStore,e=e.selected,{row:e,column:t}=e;l(),e&&t&&(e=C.getCellElement(e,t))&&(0,_dom.addClass)(e,"col--selected")}},Object.assign(Object.assign({},p),g)},setupGrid(e){return e.extendTableMethods(tableEditMethodKeys)},setupGantt(e){return e.extendTableMethods(tableEditMethodKeys)}});