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 • 16.2 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{warnLog,errLog}=(0,_log.createComponentLog)("table"),{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(_){let{props:I,reactData:E,internalData:b}=_,t=_.getRefMaps().refElem,{computeMouseOpts:g,computeEditOpts:p,computeCheckboxOpts:m,computeTreeOpts:F,computeValidOpts:a}=_.getComputeMaps(),i=_xeUtils.default.browse(),R={},w={},C=(e,t)=>{var{model:l,editRender:r}=t;r&&(l.value=(0,_util.getCellValue)(e,t),l.update=!1)},n=(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=p.value,e=e.actived;let{row:r,column:o}=e;r&&o&&("row"===l.mode?t.forEach(e=>n(r,e)):n(r,o))},A=(e,t)=>{let{tableFullTreeData:i,afterFullData:a,fullDataRowIdData:d,fullAllDataRowIdData:u}=b;var l=F.value;let{rowField:s,parentField:c,mapChildrenField:g}=l,w=l.children||l.childrenField,x=t?"push":"unshift";e.forEach(l=>{let t=l[c];var r=(0,_util.getRowid)(_,l),o=t?_xeUtils.default.findTree(i,e=>t===e[s],{children:g}):null;if(o){var o=o.item,n=u[(0,_util.getRowid)(_,o)],n=n?n.level:0;let e=o[w],t=o[g];_xeUtils.default.isArray(e)||(e=o[w]=[]),_xeUtils.default.isArray(t)||(t=o[g]=[]),e[x](l),t[x](l);o={row:l,rowid:r,_seq:-1,seq:-1,index:-1,_index:-1,$index:-1,treeIndex:-1,_tIndex:-1,items:e,parent:o,level:n+1,height:0,resizeHeight:0,oTop:0,expandHeight:0};d[r]=o,u[r]=o}else{t&&warnLog("vxe.error.unableInsert"),a[x](l),i[x](l);n={row:l,rowid:r,_seq:-1,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]=n,u[r]=n}})},u=(t,e,a)=>{let l=I.treeConfig;var r=E.isRowGroupStatus;let{tableFullTreeData:d,afterFullData:o,mergeBodyList:n,tableFullData:i,fullDataRowIdData:u,fullAllDataRowIdData:s,insertRowMaps:c,removeRowMaps:g}=b;var w=F.value;let{transform:x,parentField:v,rowField:f,mapChildrenField:h}=w,m=w.children||w.childrenField,R=(_xeUtils.default.isArray(t)||(t=[t]),e);if((_xeUtils.default.isString(e)||_xeUtils.default.isNumber(e))&&(w=s[e])&&(R=w.row),!t.length)return Promise.resolve({row:null,rows:[]});_.handlePushStack();let p=(0,_vue.reactive)(_.defineField(t.map(e=>Object.assign(l&&x?{[h]:[],[m]:[]}:{},e)))),C=[];if(l&&x&&(C=_xeUtils.default.toArrayTree(p,{key:f,parentKey:v,children:m})),_xeUtils.default.eqNull(R))if(l&&x)A(p,!1);else if(r){if(l)throw new Error(getI18n("vxe.error.noTree",["insert"]));errLog(getI18n("vxe.error.noGroup",["insert"]))}else p.forEach(e=>{var t=(0,_util.getRowid)(_,e),l={row:e,rowid:t,_seq:-1,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)}),n.forEach(e=>{var t=e.row;0<=t&&(e.row=t+p.length)});else if(-1===R)if(l&&x)A(p,!0);else if(r){if(l)throw new Error(getI18n("vxe.error.noTree",["insert"]));errLog(getI18n("vxe.error.noGroup",["insert"]))}else p.forEach(e=>{var t=(0,_util.getRowid)(_,e),l={row:e,rowid:t,_seq:-1,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&&x){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)(_,r)];let n=e?e.level:0;if(C.forEach((e,t)=>{r?e[v]!==r[f]&&(errLog("vxe.error.errProp",[v+"="+e[v],v+"="+r[f]]),e[v]=r[f]):null!==e[v]&&(_xeUtils.default.eqNull(e[v])||errLog("vxe.error.errProp",[v+"="+e[v],"null"]),e[v]=null);let l=i.index+t;a&&(l+=1),o.splice(l,0,e)}),_xeUtils.default.eachTree(C,e=>{var t=(0,_util.getRowid)(_,e),l={row:e,rowid:t,_seq:-1,seq:-1,index:-1,_index:-1,$index:-1,treeIndex:-1,_tIndex:-1,items:o,parent:r,level:n+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;a&&(e+=1),t.splice(e,0,...C)}}}else warnLog("vxe.error.unableInsert"),A(p,!0)}else if(r){if(l)throw new Error(getI18n("vxe.error.noTree",["insert"]));errLog(getI18n("vxe.error.noGroup",["insert"]))}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=_.findRowIndexOf(o,R),-1===(r=a?Math.min(o.length,r+1):r))throw new Error(getI18n("vxe.error.unableInsert"));o.splice(r,0,...p);e=_.findRowIndexOf(i,R);-1<e?i.splice(e+(a?1:0),0,...p):i.push(...p),n.forEach(e=>{var{row:t,rowspan:l}=e;t>=r?e.row=t+p.length:(a?t+l>=r:t+l>r)&&(e.rowspan=l+p.length)})}w=e=>{var t=(0,_util.getRowid)(_,e);g[t]?(delete g[t],c[t]&&delete c[t]):c[t]=e};return l&&x?_xeUtils.default.eachTree(C,w,{children:h}):p.forEach(w),E.removeRowFlag++,E.insertRowFlag++,_.cacheRowMap(!1),_.updateScrollYStatus(),_.handleTableData(l&&x),l&&x||_.updateAfterDataIndex(),_.updateFooter(),_.handleUpdateBodyMerge(),_.checkSelectionStatus(),E.scrollYLoad&&_.updateScrollYSpace(),(0,_vue.nextTick)().then(()=>(_.updateCellAreas(),_.recalculate(!0))).then(()=>({row:p.length?p[p.length-1]:null,rows:p}))},r=(e,l,r,o)=>{var n=I.treeConfig,i=b.fullAllDataRowIdData;let{transform:t,rowField:a,parentField:d}=F.value;if(n&&t){_xeUtils.default.isArray(e)||(e=[e]);let t=l;return(_xeUtils.default.isString(l)||_xeUtils.default.isNumber(l))&&(n=i[l])&&(t=n.row),u(e.map(e=>Object.assign({},e,{[d]:t[a]})),r,o)}return 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:n}=l,i=a.value;if(o||n){if(t&&(0,_util.getRowid)(_,t)!==(0,_util.getRowid)(_,o))return(0,_vue.nextTick)();d(),_.updateFooter(),l.args=null,l.row=null,l.column=null,_.dispatchEvent("edit-closed",{row:o,rowIndex:_.getRowIndex(o),$rowIndex:_.getVMRowIndex(o),column:n,columnIndex:_.getColumnIndex(n),$columnIndex:_.getVMColumnIndex(n)},e||null)}return r.row=null,r.column=null,i.autoClear&&("full"!==i.msgMode||"obsolete"===getConfig().cellVaildMode)&&_.clearValidate?_.clearValidate():(0,_vue.nextTick)().then(()=>_.updateCellAreas())},s=(e,l,r)=>{let o=_.xeGrid,n=_.xeGantt;var{editConfig:t,mouseConfig:i}=I,{editStore:a,tableColumn:d}=E,u=p.value,s=u.mode,{actived:a,focused:c}=a;let{row:g,column:w}=e;var x=w.editRender;let{isFocus:v,isPos:f,isClear:h}=r;var r=e.cell||_.getCellElement(g,w),m=u.beforeEditMethod||u.activeMethod;let R=Object.assign(Object.assign({},e),{cell:r});if(r&&(0,_utils.isEnableConf)(t)&&(0,_utils.isEnableConf)(x)&&!_.isPendingByRow(g)&&!_.isAggregateRecord(g)){if(a.row!==g||"cell"===s&&a.column!==w){let t="edit-disabled";if(!m||m(Object.assign(Object.assign({},R),{$table:_,$grid:o,$gantt:n}))){i&&(_.clearSelected(),_.clearCellAreas)&&(_.clearCellAreas(),_.clearCopyCellArea()),_.closeTooltip(),a.column&&S(l),t="edit-activated",w.renderHeight=r.offsetHeight,a.args=R,a.row=g,a.column=w,_.handlePushStack(),h&&(0,_util.setCellValue)(g,w,null),"row"===s?d.forEach(e=>C(g,e)):C(g,w);let e=u.afterEditMethod;(0,_vue.nextTick)(()=>{v&&_.handleFocus(R,l),e&&e(Object.assign(Object.assign({},R),{$table:_,$grid:o,$gantt:n}))})}_.dispatchEvent(t,{row:g,rowIndex:_.getRowIndex(g),$rowIndex:_.getVMRowIndex(g),column:w,columnIndex:_.getColumnIndex(w),$columnIndex:_.getVMColumnIndex(w)},l),"edit-activated"===t&&_.dispatchEvent("edit-actived",{row:g,rowIndex:_.getRowIndex(g),$rowIndex:_.getVMRowIndex(g),column:w,columnIndex:_.getColumnIndex(w),$columnIndex:_.getVMColumnIndex(w)},l)}else{e=a.column;i&&(_.clearSelected(),_.clearCellAreas)&&(_.clearCellAreas(),_.clearCopyCellArea()),e&&e!==w&&(t=e.model,t.update&&(0,_util.setCellValue)(g,e,t.value),_.clearValidate)&&_.clearValidate(g,w),w.renderHeight=r.offsetHeight,a.args=R,a.column=w,f&&setTimeout(()=>{_.handleFocus(R,l)})}c.column=null,c.row=null,_.focus()}return(0,_vue.nextTick)()},c=(t,e,l)=>{var r=I.editConfig;let o=l.isPos,n=_xeUtils.default.isString(e)?_.getColumnByField(e):e;return t&&n&&(0,_utils.isEnableConf)(r)&&(0,_utils.isEnableConf)(n.editRender)&&!_.isAggregateRecord(t)?Promise.resolve(o?_.scrollToRow(t,n):null).then(()=>{var e=_.getCellElement(t,n);return e&&(s({row:t,rowIndex:_.getRowIndex(t),$rowIndex:_.getVMRowIndex(t),_rowIndex:_.getVTRowIndex(t),column:n,columnIndex:_.getColumnIndex(n),$columnIndex:_.getVMColumnIndex(n),_columnIndex:_.getVTColumnIndex(n),cell:e,$table:_},null,{isFocus:o,isPos:o}),b._lastCallTime=Date.now()),(0,_vue.nextTick)()}):(0,_vue.nextTick)()},x=(R={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 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:n,afterFullData:i,mergeBodyList:a,tableFullData:d,pendingRowMaps:u,insertRowMaps:s,removeRowMaps:c}=b;var g=m.value,w=F.value;let{transform:x,mapChildrenField:v}=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.length?(_.handlePushStack(),e.forEach(e=>{var t;_.isInsertByRow(e)||(t=(0,_util.getRowid)(_,e),c[t]=e)}),l||(e.forEach(e=>{e=(0,_util.getRowid)(_,e);n[e]&&delete n[e]}),E.updateCheckboxFlag++),d===e?(e=h=d.slice(0),b.tableFullData=[],b.afterFullData=[],_.clearMergeCells()):t&&x?e.forEach(e=>{let t=(0,_util.getRowid)(_,e);var l=_xeUtils.default.findTree(o,e=>t===(0,_util.getRowid)(_,e),{children:v}),l=(l&&(l=l.items.splice(l.index,1),h.push(l[0])),_xeUtils.default.findTree(o,e=>t===(0,_util.getRowid)(_,e),{children:f})),l=(l&&l.items.splice(l.index,1),_.findRowIndexOf(i,e));-1<l&&i.splice(l,1)}):r?warnLog(getI18n("vxe.error.noGroup",["remove"])):e.forEach(e=>{var t=_.findRowIndexOf(d,e);-1<t&&(t=d.splice(t,1),h.push(t[0]));let r=_.findRowIndexOf(i,e);-1<r&&(a.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<_.findRowIndexOf(e,w.row)&&R.clearEdit(),e.forEach(e=>{e=(0,_util.getRowid)(_,e);s[e]&&delete s[e],u[e]&&delete u[e]}),E.removeRowFlag++,E.insertRowFlag++,E.pendingRowFlag++,_.cacheRowMap(!1),_.handleTableData(t&&x),_.updateFooter(),_.handleUpdateBodyMerge(),t&&x||_.updateAfterDataIndex(),_.checkSelectionStatus(),E.scrollYLoad&&_.updateScrollYSpace(),(0,_vue.nextTick)().then(()=>(_.updateCellAreas(),_.recalculate(!0))).then(()=>({row:h.length?h[h.length-1]:null,rows:h}))):Promise.resolve({row:null,rows:[]})},removeCheckboxRow(){return R.remove(_.getCheckboxRecords()).then(e=>(_.clearCheckboxRow(),e))},removeRadioRow(){var e=_.getRadioRecord();return R.remove(e||[]).then(e=>(_.clearRadioRow(),e))},removeCurrentRow(){var e=_.getCurrentRecord();return R.remove(e||[]).then(e=>(_.clearCurrentRow(),e))},getRecordset(){var e=R.getRemoveRecords(),t=_.getPendingRecords();let l=e.concat(t);var r=R.getUpdateRecords().filter(t=>!l.some(e=>_.eqRow(e,t)));return{insertRecords:R.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,{tableFullData:l,tableFullTreeData:r}=b,o=F.value;let n=[];return e&&(d(),t?(e=o.children||o.childrenField,_xeUtils.default.eachTree(r,e=>{_.isUpdateByRow(e)&&n.push(e)},{children:e})):l.forEach(e=>{_.isUpdateByRow(e)&&n.push(e)})),n},getActiveRecord(){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)(_,l)]?Object.assign({},e,{row:l}):null},getEditRecord(){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)(_,l)]?Object.assign({},e,{row:l}):null},getEditCell(){var e=E.editStore,{row:e,column:t}=e.actived;return t&&e?{row:e,rowIndex:_.getRowIndex(e),column:t,columnIndex:_.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 warnLog("vxe.error.delFunc",["clearActived","clearEdit"]),_.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 warnLog("vxe.error.delFunc",["isActiveByRow","isEditByRow"]),_.isEditByRow(e)},isEditByRow(e){var t=E.editStore;return t.actived.row===e},setActiveRow(e){return warnLog("vxe.error.delFunc",["setActiveRow","setEditRow"]),R.setEditRow(e)},setEditRow(e,t,l){var r=b.visibleColumn;let o=_xeUtils.default.find(r,e=>(0,_utils.isEnableConf)(e.editRender)),n=!1;return t&&(n=!0)!==t&&(o=_xeUtils.default.isString(t)?_.getColumnByField(t):t),c(e,o,Object.assign({isPos:n,isFocus:n},l))},setActiveCell(e,t){return warnLog("vxe.error.delFunc",["setActiveCell","setEditCell"]),R.setEditCell(e,t)},setEditCell(e,t,l){return c(e,t,Object.assign({isFocus:!0,isPos:!0},l))},setSelectCell(e,t){var l=E.tableData,r=p.value,t=_xeUtils.default.isString(t)?_.getColumnByField(t):t;return e&&t&&"manual"!==r.trigger&&-1<(r=_.findRowIndexOf(l,e))&&t&&(l=_.getCellElement(e,t),r={$table:_,row:e,rowIndex:r,$rowIndex:_.getVMRowIndex(e),_rowIndex:_.getVTRowIndex(e),column:t,columnIndex:_.getColumnIndex(t),$columnIndex:_.getVMColumnIndex(t),_columnIndex:_.getVTColumnIndex(t),cell:l},_.handleSelected(r,null)),(0,_vue.nextTick)()}},(l,r)=>{var o=I.editConfig,n=r.column,n=n.editRender,i=p.value;if(o&&(0,_utils.isEnableConf)(n)){o=renderer.get(n.name);let e=n.autofocus||n.autoFocus;n=n.autoSelect||n.autoselect;let t=null;return i.autoFocus&&(!e&&o&&(e=o.tableAutoFocus||o.tableAutofocus||o.autofocus),!n&&o&&(o.tableAutoSelect||o.autoselect),_xeUtils.default.isFunction(e)?t=e(r):e&&(t=!0===e?l.querySelector("input,textarea"):l.querySelector(e))&&t.focus()),t}return null});return w={handleEdit(e,t,l){return s(e,t,Object.assign({isFocus:!0,isPos:!0},l))},handleActived(e,t){return w.handleEdit(e,t)},handleClearEdit:S,handleCellFocus:x,handleFocus(e){var{row:t,column:l,cell:r}=e,o=l.editRender,n=p.value;(0,_utils.isEnableConf)(o)&&(o=o.autoSelect||o.autoselect,(r=x(r,e))?o?r.select():i.msie&&((e=r.createTextRange()).collapse(!1),e.select()):n.autoPos&&!l.fixed&&_.scrollToRow(t,l))},handleSelected(t,e){let{mouseConfig:l,editConfig:r}=I;var o=E.editStore,n=g.value;let i=p.value,{actived:a,selected:d}=o,{row:u,column:s}=t,c=l&&n.selected;return!c||d.row===u&&d.column===s||(a.row!==u||"cell"===i.mode&&a.column!==s)&&(S(e),_.clearSelected(),_.clearCellAreas&&(_.clearCellAreas(),_.clearCopyCellArea()),d.args=t,d.row=u,d.column=s,c&&w.addCellSelectedClass(),_.focus(),r&&i.isReuseKeep&&(0,_utils.isEnableConf)(i)&&(0,_utils.isEnableConf)(s.editRender)&&setTimeout(()=>{var e=_.getCellElement(u,s);e&&e.querySelector(".vxe-reusekeep-control")&&x(e,t)},0),e)&&_.dispatchEvent("cell-selected",t,e),(0,_vue.nextTick)()},addCellSelectedClass(){var e=E.editStore,e=e.selected,{row:e,column:t}=e;l(),e&&t&&(e=_.getCellElement(e,t))&&(0,_dom.addClass)(e,"col--selected")}},Object.assign(Object.assign({},R),w)},setupGrid(e){return e.extendTableMethods(tableEditMethodKeys)},setupGantt(e){return e.extendTableMethods(tableEditMethodKeys)}});