vxe-table
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
1 lines • 12.4 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_conf=_interopRequireDefault(require("../../v-x-e-table/src/conf")),_vXETable=require("../../v-x-e-table"),_utils=require("../../tools/utils"),_util=require("../../table/src/util"),_dom=require("../../tools/dom"),_log=require("../../tools/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var __assign=function(){return(__assign=Object.assign||function(e){for(var t,l=1,r=arguments.length;l<r;l++)for(var n in t=arguments[l])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},__spreadArray=function(e,t,l){if(l||2===arguments.length)for(var r,n=0,o=t.length;n<o;n++)!r&&n in t||((r=r||Array.prototype.slice.call(t,0,n))[n]=t[n]);return e.concat(r||Array.prototype.slice.call(t))},tableEditMethodKeys=["insert","insertAt","insertNextAt","remove","removeCheckboxRow","removeRadioRow","removeCurrentRow","getRecordset","getInsertRecords","getRemoveRecords","getUpdateRecords","getEditRecord","getActiveRecord","getSelectedCell","clearEdit","clearActived","clearSelected","isEditByRow","isActiveByRow","setEditRow","setActiveRow","setEditCell","setActiveCell","setSelectCell"],editHook={setupTable:function(E){function f(e,t){var l=t.model;t.editRender&&(l.value=(0,_util.getCellValue)(e,t),l.update=!1)}function n(e,t){var l=t.model;t.editRender&&l.update&&((0,_util.setCellValue)(e,t,l.value),l.update=!1,l.value=null)}function l(){var e=o.value;e&&(e=e.querySelector(".col--selected"))&&(0,_dom.removeClass)(e,"col--selected")}var b=E.props,I=E.reactData,A=E.internalData,o=E.getRefMaps().refElem,e=E.getComputeMaps(),c=e.computeMouseOpts,v=e.computeEditOpts,h=e.computeCheckboxOpts,y=e.computeTreeOpts,_={},p={};function a(){var e=I.editStore,t=I.tableColumn,l=v.value,e=e.actived,r=e.row,e=e.column;(r||e)&&("row"===l.mode?t.forEach(function(e){return n(r,e)}):n(r,e))}function S(e,t){var i=A.tableFullTreeData,u=A.afterFullData,c=A.fullDataRowIdData,d=A.fullAllDataRowIdData,l=y.value,s=l.rowField,f=l.parentField,v=l.mapChildrenField,p=l.children||l.childrenField,w=t?"push":"unshift";e.forEach(function(e){var t,l,r,n=e[f],o=(0,_util.getRowid)(E,e),a=n?_xeUtils.default.findTree(i,function(e){return n===e[s]},{children:v}):null;a=a?(a=a.item,t=(t=d[(0,_util.getRowid)(E,a)])?t.level:0,l=a[p],r=a[v],_xeUtils.default.isArray(l)||(l=a[p]=[]),_xeUtils.default.isArray(r)||(r=a[p]=[]),l[w](e),r[w](e),{row:e,rowid:o,seq:-1,index:-1,_index:-1,$index:-1,items:l,parent:parent,level:t+1}):("development"===process.env.NODE_ENV&&n&&(0,_log.warnLog)("vxe.error.unableInsert"),u[w](e),i[w](e),{row:e,rowid:o,seq:-1,index:-1,_index:-1,$index:-1,items:i,parent:null,level:0}),c[o]=a,d[o]=a})}function r(e,t,r){var l=b.treeConfig,n=I.mergeList,o=I.editStore,a=A.tableFullTreeData,i=A.afterFullData,u=A.tableFullData,c=A.fullDataRowIdData,d=A.fullAllDataRowIdData,s=y.value,f=s.transform,v=s.rowField,p=s.mapChildrenField,w=s.children||s.childrenField,g=(_xeUtils.default.isArray(e)||(e=[e]),(0,_vue.reactive)(E.defineField(e.map(function(e){var t;return Object.assign(l&&f?((t={})[p]=[],t[w]=[],t):{},e)}))));if(t)if(-1===t)l&&f?S(g,!0):(i.push.apply(i,g),u.push.apply(u,g),n.forEach(function(e){var t=e.row,l=e.rowspan;t+l>i.length&&(e.rowspan=l+g.length)}));else if(l&&f){var h,_,m,x=_xeUtils.default.findTree(a,function(e){return t[v]===e[v]},{children:p});x?(h=x.parent,_=h?h[p]:a,e=d[(0,_util.getRowid)(E,h)],m=e?e.level:0,g.forEach(function(e,t){var l=(0,_util.getRowid)(E,e),t=("development"===process.env.NODE_ENV&&e[s.parentField]&&h&&e[s.parentField]!==h[v]&&(0,_log.errLog)("vxe.error.errProp",["".concat(s.parentField,"=").concat(e[s.parentField]),"".concat(s.parentField,"=").concat(h[v])]),h&&(e[s.parentField]=h[v]),x.index+t),t=(r&&(t+=1),_.splice(t,0,e),{row:e,rowid:l,seq:-1,index:-1,_index:-1,$index:-1,items:_,parent:h,level:m+1});c[l]=t,d[l]=t}),h&&(e=_xeUtils.default.findTree(a,function(e){return t[v]===e[v]},{children:w}))&&(a=e.items,e=e.index,r&&(e+=1),a.splice.apply(a,__spreadArray([e,0],g,!1)))):("development"===process.env.NODE_ENV&&(0,_log.warnLog)("vxe.error.unableInsert"),S(g,!0))}else{if(l)throw new Error((0,_log.getLog)("vxe.error.noTree",["insert"]));var R=-1;if(_xeUtils.default.isNumber(t)?t<i.length&&(R=t):R=E.findRowIndexOf(i,t),-1===(R=r?Math.max(i.length,R+1):R))throw new Error((0,_log.errLog)("vxe.error.unableInsert"));i.splice.apply(i,__spreadArray([R,0],g,!1)),u.splice.apply(u,__spreadArray([E.findRowIndexOf(u,t),0],g,!1)),n.forEach(function(e){var t=e.row,l=e.rowspan;R<t?e.row=t+g.length:R<t+l&&(e.rowspan=l+g.length)})}else l&&f?S(g,!1):(i.unshift.apply(i,g),u.unshift.apply(u,g),n.forEach(function(e){var t=e.row;0<t&&(e.row=t+g.length)}));var C=o.insertMaps;return g.forEach(function(e){var t=(0,_util.getRowid)(E,e);C[t]=e}),E.cacheRowMap(),E.updateScrollYStatus(),E.handleTableData(l&&f),l&&f||E.updateAfterDataIndex(),E.updateFooter(),E.checkSelectionStatus(),I.scrollYLoad&&E.updateScrollYSpace(),(0,_vue.nextTick)().then(function(){return E.updateCellAreas(),E.recalculate()}).then(function(){return{row:g.length?g[g.length-1]:null,rows:g}})}p={handleActived:function(e,t){var l=b.editConfig,r=b.mouseConfig,n=I.editStore,o=I.tableColumn,a=v.value,i=a.mode,n=n.actived,u=e.row,c=e.column,d=c.editRender,s=e.cell||E.getCell(u,c),a=a.beforeEditMethod||a.activeMethod;return e.cell=s,(0,_utils.isEnableConf)(l)&&(0,_utils.isEnableConf)(d)&&s&&(n.row!==u||"cell"===i&&n.column!==c?(l="edit-disabled",a&&!a(__assign(__assign({},e),{$table:E}))||(r&&(_.clearSelected(),E.clearCellAreas)&&(E.clearCellAreas(),E.clearCopyCellArea()),E.closeTooltip(),n.column&&_.clearEdit(t),l="edit-actived",c.renderHeight=s.offsetHeight,n.args=e,n.row=u,n.column=c,"row"===i?o.forEach(function(e){return f(u,e)}):f(u,c),(0,_vue.nextTick)(function(){p.handleFocus(e,t)})),E.dispatchEvent(l,{row:u,rowIndex:E.getRowIndex(u),$rowIndex:E.getVMRowIndex(u),column:c,columnIndex:E.getColumnIndex(c),$columnIndex:E.getVMColumnIndex(c)},t)):(d=n.column,r&&(_.clearSelected(),E.clearCellAreas)&&(E.clearCellAreas(),E.clearCopyCellArea()),d!==c&&((a=d.model).update&&(0,_util.setCellValue)(u,d,a.value),E.clearValidate)&&E.clearValidate(u,c),c.renderHeight=s.offsetHeight,n.args=e,n.column=c,setTimeout(function(){p.handleFocus(e,t)})),E.focus()),(0,_vue.nextTick)()},handleFocus:function(e){var t,l,r,n=e.row,o=e.column,a=e.cell,i=o.editRender;(0,_utils.isEnableConf)(i)&&(r=_vXETable.renderer.get(i.name),t=i.autofocus,i=i.autoselect,l=void 0,!t&&r&&(t=r.autofocus),!i&&r&&(i=r.autoselect),_xeUtils.default.isFunction(t)?l=t.call(this,e):t&&(l=a.querySelector(t))&&l.focus(),l?i?l.select():_dom.browse.msie&&((r=l.createTextRange()).collapse(!1),r.select()):E.scrollToRow(n,o))},handleSelected:function(e,t){var l=b.mouseConfig,r=I.editStore,n=c.value,o=v.value,a=r.actived,r=r.selected,i=e.row,u=e.column,l=l&&n.selected;return!l||r.row===i&&r.column===u||(a.row!==i||"cell"===o.mode&&a.column!==u)&&(_.clearEdit(t),_.clearSelected(),E.clearCellAreas&&(E.clearCellAreas(),E.clearCopyCellArea()),r.args=e,r.row=i,r.column=u,l&&p.addCellSelectedClass(),E.focus(),t)&&E.dispatchEvent("cell-selected",e,t),(0,_vue.nextTick)()},addCellSelectedClass:function(){var e=I.editStore.selected,t=e.row,e=e.column;l(),t&&e&&(t=E.getCell(t,e))&&(0,_dom.addClass)(t,"col--selected")}};return __assign(__assign({},_={insert:function(e){return r(e,null)},insertAt:function(e,t){return r(e,t)},insertNextAt:function(e,t){return r(e,t,!0)},remove:function(e){var t,l=b.treeConfig,n=I.mergeList,r=I.editStore,o=I.selectCheckboxMaps,a=A.tableFullTreeData,i=A.afterFullData,u=A.tableFullData,c=h.value,d=y.value,s=d.transform,f=d.mapChildrenField,v=d.children||d.childrenField,d=r.actived,p=r.removeMaps,w=r.insertMaps,r=c.checkField,g=[];return e?_xeUtils.default.isArray(e)||(e=[e]):e=u,e.forEach(function(e){var t;E.isInsertByRow(e)||(t=(0,_util.getRowid)(E,e),p[t]=e)}),r||(t=__assign({},o),e.forEach(function(e){e=(0,_util.getRowid)(E,e);t[e]&&delete t[e]}),I.selectCheckboxMaps=t),u===e?(e=g=u.slice(0),A.tableFullData=[],A.afterFullData=[],E.clearMergeCells()):l&&s?e.forEach(function(e){var t=(0,_util.getRowid)(E,e),l=_xeUtils.default.findTree(a,function(e){return t===(0,_util.getRowid)(E,e)},{children:f}),l=(l&&(l=l.items.splice(l.index,1),g.push(l[0])),_xeUtils.default.findTree(a,function(e){return t===(0,_util.getRowid)(E,e)},{children:v})),l=(l&&l.items.splice(l.index,1),E.findRowIndexOf(i,e));-1<l&&i.splice(l,1)}):e.forEach(function(e){var t=E.findRowIndexOf(u,e),r=(-1<t&&(t=u.splice(t,1),g.push(t[0])),E.findRowIndexOf(i,e));-1<r&&(n.forEach(function(e){var t=e.row,l=e.rowspan;r<t?e.row=t-1:r<t+l&&(e.rowspan=l-1)}),i.splice(r,1))}),d.row&&-1<E.findRowIndexOf(e,d.row)&&_.clearEdit(),e.forEach(function(e){e=(0,_util.getRowid)(E,e);w[e]&&delete w[e]}),E.updateFooter(),E.cacheRowMap(),E.handleTableData(l&&s),l&&s||E.updateAfterDataIndex(),E.checkSelectionStatus(),I.scrollYLoad&&E.updateScrollYSpace(),(0,_vue.nextTick)().then(function(){return E.updateCellAreas(),E.recalculate()}).then(function(){return{row:g.length?g[g.length-1]:null,rows:g}})},removeCheckboxRow:function(){return _.remove(E.getCheckboxRecords()).then(function(e){return E.clearCheckboxRow(),e})},removeRadioRow:function(){var e=E.getRadioRecord();return _.remove(e||[]).then(function(e){return E.clearRadioRow(),e})},removeCurrentRow:function(){var e=E.getCurrentRecord();return _.remove(e||[]).then(function(e){return E.clearCurrentRow(),e})},getRecordset:function(){return{insertRecords:_.getInsertRecords(),removeRecords:_.getRemoveRecords(),updateRecords:_.getUpdateRecords()}},getInsertRecords:function(){var e=I.editStore,l=A.fullAllDataRowIdData,e=e.insertMaps,r=[];return _xeUtils.default.each(e,function(e,t){l[t]&&r.push(e)}),r},getRemoveRecords:function(){var e=I.editStore.removeMaps,t=[];return _xeUtils.default.each(e,function(e){t.push(e)}),t},getUpdateRecords:function(){var e=b.keepSource,t=b.treeConfig,l=A.tableFullData,r=y.value;return e?(a(),t?_xeUtils.default.filterTree(l,function(e){return E.isUpdateByRow(e)},r):l.filter(function(e){return E.isUpdateByRow(e)})):[]},getActiveRecord:function(){return this.getEditRecord()},getEditRecord:function(){var e=I.editStore,t=A.afterFullData,l=o.value,e=e.actived,r=e.args,e=e.row;return r&&-1<E.findRowIndexOf(t,e)&&l.querySelectorAll(".vxe-body--column.col--actived").length?Object.assign({},r):null},getSelectedCell:function(){var e=I.editStore.selected,t=e.args,e=e.column;return t&&e?Object.assign({},t):null},clearActived:function(e){return this.clearEdit(e)},clearEdit:function(e){var t=I.editStore.actived,l=t.row,r=t.column;return(l||r)&&(a(),t.args=null,t.row=null,t.column=null,E.updateFooter(),E.dispatchEvent("edit-closed",{row:l,rowIndex:E.getRowIndex(l),$rowIndex:E.getVMRowIndex(l),column:r,columnIndex:E.getColumnIndex(r),$columnIndex:E.getVMColumnIndex(r)},e||null)),"obsolete"===_conf.default.cellVaildMode&&E.clearValidate?E.clearValidate():(0,_vue.nextTick)()},clearSelected:function(){var e=I.editStore.selected;return e.row=null,e.column=null,l(),(0,_vue.nextTick)()},isActiveByRow:function(e){return this.isEditByRow(e)},isEditByRow:function(e){return I.editStore.actived.row===e},setActiveRow:function(e){return _.setEditRow(e)},setEditRow:function(e){var t=A.visibleColumn;return E.setEditCell(e,_xeUtils.default.find(t,function(e){return(0,_utils.isEnableConf)(e.editRender)}))},setActiveCell:function(e,t){return _.setEditCell(e,t)},setEditCell:function(t,e){var l=b.editConfig,r=_xeUtils.default.isString(e)?E.getColumnByField(e):e;return t&&r&&(0,_utils.isEnableConf)(l)&&(0,_utils.isEnableConf)(r.editRender)?E.scrollToRow(t,r).then(function(){var e=E.getCell(t,r);return e&&(p.handleActived({row:t,rowIndex:E.getRowIndex(t),column:r,columnIndex:E.getColumnIndex(r),cell:e,$table:E}),A._lastCallTime=Date.now()),(0,_vue.nextTick)()}):(0,_vue.nextTick)()},setSelectCell:function(e,t){var l=I.tableData,r=v.value,t=_xeUtils.default.isString(t)?E.getColumnByField(t):t;return e&&t&&"manual"!==r.trigger&&-1<(r=E.findRowIndexOf(l,e))&&t&&(l=E.getCell(e,t),e={row:e,rowIndex:r,column:t,columnIndex:E.getColumnIndex(t),cell:l},E.handleSelected(e,{})),(0,_vue.nextTick)()}}),p)},setupGrid:function(e){return e.extendTableMethods(tableEditMethodKeys)}},_default=editHook;exports.default=_default;