UNPKG

vxe-table

Version:

一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...

1 lines 18 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _table=_interopRequireDefault(require("../../table")),_ctor=_interopRequireDefault(require("xe-utils/ctor")),_conf=_interopRequireDefault(require("../../conf")),_size=_interopRequireDefault(require("../../mixins/size")),_vXETable=_interopRequireDefault(require("../../v-x-e-table")),_tools=require("../../tools"),_util=require("../../table/src/util");function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_unsupportedIterableToArray(t)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(t,e){if(t){if("string"==typeof t)return _arrayLikeToArray(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(t,e):void 0}}function _iterableToArray(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}function _arrayWithoutHoles(t){if(Array.isArray(t))return _arrayLikeToArray(t)}function _arrayLikeToArray(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r<e;r++)o[r]=t[r];return o}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}return r}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach(function(t){_defineProperty(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function _defineProperty(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var methods={},propKeys=Object.keys(_table.default.props);function getOffsetHeight(t){return t?t.offsetHeight:0}function getPaddingTopBottomSize(t){var e=getComputedStyle(t);return _ctor.default.toNumber(e.paddingTop)+_ctor.default.toNumber(e.paddingBottom)}function renderDefaultForm(t,e){var r=e.proxyConfig,o=e.proxyOpts,i=e.formData,n=e.formConfig,s=e.formOpts;if(n&&s.items&&s.items.length){if(!s.inited){s.inited=!0;var a=o.beforeItem;o&&a&&s.items.forEach(function(t){a.call(e,{$grid:e,item:t})})}return[t("vxe-form",{props:Object.assign({},s,{data:r&&o.form?i:s.data}),on:{submit:e.submitEvent,reset:e.resetEvent,"submit-invalid":e.submitInvalidEvent,"toggle-collapse":e.togglCollapseEvent}})]}return[]}function getToolbarSlots(t){var e,r,o=t.$scopedSlots,i=t.toolbarOpts.slots,n={};return i&&(e=i.buttons,r=i.tools,e&&o[e]&&(e=o[e]),r&&o[r]&&(r=o[r])),e&&(n.buttons=e),r&&(n.tools=r),n}function getPagerSlots(t){var e,r,o=t.$scopedSlots,i=t.pagerOpts.slots,n={};return i&&(e=i.left,r=i.right,e&&o[e]&&(e=o[e]),r&&o[r]&&(r=o[r])),e&&(n.left=e),r&&(n.right=r),n}function getTableOns(i){var t=i.$listeners,e=i.proxyConfig,r=i.proxyOpts,n={};return _ctor.default.each(t,function(t,o){n[o]=function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];i.$emit.apply(i,[o].concat(e))}}),e&&(r.sort&&(n["sort-change"]=i.sortChangeEvent),r.filter&&(n["filter-change"]=i.filterChangeEvent)),n}Object.keys(_table.default.methods).forEach(function(e){methods[e]=function(){var t;return this.$refs.xTable&&(t=this.$refs.xTable)[e].apply(t,arguments)}});var _default2={name:"VxeGrid",mixins:[_size.default],props:_objectSpread(_objectSpread({},_table.default.props),{},{columns:Array,pagerConfig:[Boolean,Object],proxyConfig:Object,toolbar:[Boolean,Object],toolbarConfig:[Boolean,Object],formConfig:[Boolean,Object],zoomConfig:Object,size:{type:String,default:function(){return _conf.default.grid.size||_conf.default.size}}}),provide:function(){return{$xegrid:this}},data:function(){return{tableLoading:!1,isZMax:!1,tableData:[],pendingRecords:[],filterData:[],formData:{},sortData:[],tZindex:0,tablePage:{total:0,pageSize:10,currentPage:1}}},computed:{isMsg:function(){return!1!==this.proxyOpts.message},proxyOpts:function(){return Object.assign({},_conf.default.grid.proxyConfig,this.proxyConfig)},pagerOpts:function(){return Object.assign({},_conf.default.grid.pagerConfig,this.pagerConfig)},formOpts:function(){return Object.assign({},_conf.default.grid.formConfig,this.formConfig)},toolbarOpts:function(){return Object.assign({},_conf.default.grid.toolbarConfig,this.toolbarConfig||this.toolbar)},zoomOpts:function(){return Object.assign({},_conf.default.grid.zoomConfig,this.zoomConfig)},renderStyle:function(){return this.isZMax?{zIndex:this.tZindex}:null},tableExtendProps:function(){var e=this,r={};return propKeys.forEach(function(t){r[t]=e[t]}),r},tableProps:function(){var t=this.isZMax,e=this.seqConfig,r=this.pagerConfig,o=this.loading,i=this.editConfig,n=this.proxyConfig,s=this.proxyOpts,a=this.tableExtendProps,l=this.tableLoading,c=this.tablePage,u=this.tableData,f=Object.assign({},a);return t&&(a.maxHeight?f.maxHeight="auto":f.height="auto"),n&&(f.loading=o||l,f.data=u,f.rowClassName=this.handleRowClassName,(s.seq||s.index)&&r&&(f.seqConfig=Object.assign({},e,{startIndex:(c.currentPage-1)*c.pageSize}))),i&&(f.editConfig=Object.assign({},i,{activeMethod:this.handleActiveMethod})),f},pagerProps:function(){return Object.assign({},this.pagerOpts,this.proxyConfig?this.tablePage:{})}},watch:{columns:function(t){var e=this;this.$nextTick(function(){return e.loadColumn(t)})},toolbar:function(t){t&&this.initToolbar()},toolbarConfig:function(t){t&&this.initToolbar()},proxyConfig:function(){this.initProxy()},pagerConfig:function(){this.initPages()}},created:function(){var t=this.data,e=this.formOpts,r=this.proxyOpts;this.proxyConfig&&(t||r.form&&e.data)&&console.error("[vxe-grid] There is a conflict between the props proxy-config and data."),"development"===process.env.VUE_APP_VXE_TABLE_ENV&&(this.toolbar&&_tools.UtilTools.warn("vxe.error.delProp",["grid.toolbar","grid.toolbar-config"]),this.toolbarConfig&&!_ctor.default.isObject(this.toolbarConfig)&&_tools.UtilTools.warn("vxe.error.errProp",["grid.toolbar-config=".concat(this.toolbarConfig),"grid.toolbar-config={}"])),_tools.GlobalEvent.on(this,"keydown",this.handleGlobalKeydownEvent)},mounted:function(){this.columns&&this.columns.length&&this.loadColumn(this.columns),this.initToolbar(),this.initPages(),this.initProxy()},destroyed:function(){_tools.GlobalEvent.off(this,"keydown")},render:function(t){var e,r=this.$scopedSlots,o=this.vSize,i=this.isZMax,n=!(!r.form&&!this.formConfig),s=!!(r.toolbar||this.toolbarConfig||this.toolbar),a=!(!r.pager&&!this.pagerConfig);return t("div",{class:["vxe-grid",(e={},_defineProperty(e,"size--".concat(o),o),_defineProperty(e,"t--animat",!!this.animat),_defineProperty(e,"is--round",this.round),_defineProperty(e,"is--maximize",i),_defineProperty(e,"is--loading",this.loading||this.tableLoading),e)],style:this.renderStyle},[n?t("div",{ref:"formWrapper",class:"vxe-grid--form-wrapper"},r.form?r.form.call(this,{$grid:this},t):renderDefaultForm(t,this)):null,s?t("div",{ref:"toolbarWrapper",class:"vxe-grid--toolbar-wrapper"},r.toolbar?r.toolbar.call(this,{$grid:this},t):[t("vxe-toolbar",{props:this.toolbarOpts,ref:"xToolbar",scopedSlots:getToolbarSlots(this)})]):null,r.top?t("div",{ref:"topWrapper",class:"vxe-grid--top-wrapper"},r.top.call(this,{$grid:this},t)):null,t("vxe-table",{props:this.tableProps,on:getTableOns(this),scopedSlots:r,ref:"xTable"}),r.bottom?t("div",{ref:"bottomWrapper",class:"vxe-grid--bottom-wrapper"},r.bottom.call(this,{$grid:this},t)):null,a?t("div",{ref:"pagerWrapper",class:"vxe-grid--pager-wrapper"},r.pager?r.pager.call(this,{$grid:this},t):[t("vxe-pager",{props:this.pagerProps,on:{"page-change":this.pageChangeEvent},scopedSlots:getPagerSlots(this)})]):null])},methods:_objectSpread(_objectSpread({},methods),{},{getParentHeight:function(){return(this.isZMax?_tools.DomTools.getDomNode().visibleHeight:this.$el.parentNode.clientHeight)-this.getExcludeHeight()},getExcludeHeight:function(){var t=this.$refs,e=this.$el,r=this.isZMax,o=t.formWrapper,i=t.toolbarWrapper,n=t.topWrapper,s=t.bottomWrapper,a=t.pagerWrapper;return(r?0:getPaddingTopBottomSize(e.parentNode))+getPaddingTopBottomSize(e)+getOffsetHeight(o)+getOffsetHeight(i)+getOffsetHeight(n)+getOffsetHeight(s)+getOffsetHeight(a)},handleRowClassName:function(e){var t=this.rowClassName,r=[];return this.pendingRecords.some(function(t){return t===e.row})&&r.push("row--pending"),r.push(t?_ctor.default.isFunction(t)?t(e):t:"")},handleActiveMethod:function(t){var e=this.editConfig,r=e?e.activeMethod:null;return-1===this.pendingRecords.indexOf(t.row)&&(!r||r(t))},loadColumn:function(t){var o=this.$scopedSlots;_ctor.default.eachTree(t,function(t){t.slots&&_ctor.default.each(t.slots,function(t,e,r){_ctor.default.isFunction(t)||(o[t]?r[e]=o[t]:(r[e]=null,_tools.UtilTools.error("vxe.error.notSlot",[t])))})}),this.$refs.xTable.loadColumn(t)},reloadColumn:function(t){return this.clearAll(),this.loadColumn(t)},initToolbar:function(){var o=this;this.$nextTick(function(){var t=o.$refs,e=t.xTable,r=t.xToolbar;e&&r&&e.connect(r)})},initPages:function(){var t=this.tablePage,e=this.pagerConfig,r=this.pagerOpts,o=r.currentPage,i=r.pageSize;e&&(o&&(t.currentPage=o),i&&(t.pageSize=i))},initProxy:function(){var t=this,e=this.proxyInited,r=this.proxyConfig,o=this.proxyOpts,i=this.formConfig,n=this.formOpts;if(r){if(i&&o.form&&n.items){var s={};n.items.forEach(function(t){var e=t.field,r=t.itemRender;e&&(s[e]=r&&!_ctor.default.isUndefined(r.defaultValue)?r.defaultValue:void 0)}),this.formData=s}e||!1===o.autoLoad||(this.proxyInited=!0,this.$nextTick(function(){return t.commitProxy("init")}))}},handleGlobalKeydownEvent:function(t){27===t.keyCode&&this.isZMax&&!1!==this.zoomOpts.escRestore&&this.triggerZoomEvent(t)},commitProxy:function(e){var t,r,o=this,i=this.$refs,n=this.toolbar,s=this.toolbarConfig,a=this.toolbarOpts,l=this.proxyOpts,c=this.tablePage,u=this.pagerConfig,f=this.sortData,d=this.filterData,g=this.formData,h=this.isMsg,p=l.beforeQuery,m=l.afterQuery,b=l.beforeDelete,v=l.afterDelete,x=l.beforeSave,y=l.afterSave,_=l.ajax,O=void 0===_?{}:_,C=l.props,P=void 0===C?{}:C,T=i.xTable;if(_ctor.default.isString(e)){var R=s||n?_ctor.default.findTree(a.buttons,function(t){return t.code===e},{children:"dropdowns"}):null;r=e,t=R?R.item:null}else r=(t=e).code;for(var $=t?t.params:null,E=arguments.length,S=new Array(1<E?E-1:0),j=1;j<E;j++)S[j-1]=arguments[j];switch(r){case"insert":this.insert();break;case"insert_actived":this.insert().then(function(t){var e=t.row;return o.setActiveRow(e)});break;case"mark_cancel":this.triggerPendingEvent(r);break;case"remove":return this.handleDeleteRow(r,"vxe.grid.removeSelectRecord",function(){return o.removeCheckboxRow()});case"import":this.importData($);break;case"open_import":this.openImport($);break;case"export":this.exportData($);break;case"open_export":this.openExport($);break;case"reset_custom":this.resetColumn(!0);break;case"init":case"reload":case"query":var w="init"===r,D="reload"===r,k=O.query;if(k){var A={code:r,button:t,$grid:this,sort:f.length?f[0]:{},sorts:f,filters:d,form:g,options:k};if(u&&(D&&(c.currentPage=1),A.page=c),w||D){var z=w?this.getCheckedFilters():[],M=T.sortOpts.defaultSort,q=[];M&&(_ctor.default.isArray(M)||(M=[M]),q=M),this.sortData=A.sorts=q,this.filterData=A.filters=w?z:[],this.pendingRecords=[],A.sort=A.sorts.length?A.sorts[0]:{},this.$nextTick(function(){w?(0,_util.clearTableDefaultStatus)(T):(0,_util.clearTableAllStatus)(T)})}var Z=[A].concat(S);return this.tableLoading=!0,Promise.resolve((p||k).apply(void 0,_toConsumableArray(Z))).catch(function(t){return t}).then(function(t){o.tableLoading=!1,t?u?(c.total=_ctor.default.get(t,P.total||"page.total")||0,o.tableData=_ctor.default.get(t,P.result||"result")||[]):o.tableData=(P.list?_ctor.default.get(t,P.list):t)||[]:o.tableData=[],m&&m.apply(void 0,_toConsumableArray(Z))})}_tools.UtilTools.error("vxe.error.notFunc",["query"]);break;case"delete":var I=O.delete;if(I){var L=this.getCheckboxRecords(),H=[{$grid:this,code:r,button:t,body:{removeRecords:L},options:I}].concat(S);if(L.length)return this.handleDeleteRow(r,"vxe.grid.deleteSelectRecord",function(){return o.tableLoading=!0,Promise.resolve((b||I).apply(void 0,_toConsumableArray(H))).then(function(t){o.tableLoading=!1,o.pendingRecords=o.pendingRecords.filter(function(t){return-1===L.indexOf(t)}),h&&_vXETable.default.modal.message({message:o.getRespMsg(t,"vxe.grid.delSuccess"),status:"success"}),v?v.apply(void 0,_toConsumableArray(H)):o.commitProxy("query")}).catch(function(t){o.tableLoading=!1,h&&_vXETable.default.modal.message({id:r,message:o.getRespMsg(t,"vxe.grid.operError"),status:"error"})})});h&&_vXETable.default.modal.message({id:r,message:_conf.default.i18n("vxe.grid.selectOneRecord"),status:"warning"})}else _tools.UtilTools.error("vxe.error.notFunc",[r]);break;case"save":var U=O.save;if(U){var W=Object.assign({pendingRecords:this.pendingRecords},this.getRecordset()),X=W.insertRecords,B=W.removeRecords,N=W.updateRecords,F=W.pendingRecords,K=[{$grid:this,code:r,button:t,body:W,options:U}].concat(S);return X.length&&(W.pendingRecords=F.filter(function(t){return-1===X.indexOf(t)})),F.length&&(W.insertRecords=X.filter(function(t){return-1===F.indexOf(t)})),this.validate(W.insertRecords.concat(N)).then(function(){if(W.insertRecords.length||B.length||N.length||W.pendingRecords.length)return o.tableLoading=!0,Promise.resolve((x||U).apply(void 0,_toConsumableArray(K))).then(function(t){o.tableLoading=!1,o.pendingRecords=[],h&&_vXETable.default.modal.message({message:o.getRespMsg(t,"vxe.grid.saveSuccess"),status:"success"}),y?y.apply(void 0,_toConsumableArray(K)):o.commitProxy("query")}).catch(function(t){o.tableLoading=!1,h&&_vXETable.default.modal.message({id:r,message:o.getRespMsg(t,"vxe.grid.operError"),status:"error"})});h&&_vXETable.default.modal.message({id:r,message:_conf.default.i18n("vxe.grid.dataUnchanged"),status:"info"})}).catch(function(t){return t})}_tools.UtilTools.error("vxe.error.notFunc",[r]);break;default:var V=_vXETable.default.commands.get(r);V&&V.apply(void 0,[{code:r,button:t,$grid:this,$table:T}].concat(S))}return this.$nextTick()},getRespMsg:function(t,e){var r,o=this.proxyOpts.props,i=void 0===o?{}:o;return t&&i.message&&(r=_ctor.default.get(t,i.message)),r||_conf.default.i18n(e)},handleDeleteRow:function(t,e,r){var o=this.getCheckboxRecords();if(this.isMsg){if(o.length)return _vXETable.default.modal.confirm({id:"cfm_".concat(t),message:_conf.default.i18n(e),escClosable:!0}).then(function(t){"confirm"===t&&r()});_vXETable.default.modal.message({id:"msg_".concat(t),message:_conf.default.i18n("vxe.grid.selectOneRecord"),status:"warning"})}else o.length&&r();return Promise.resolve()},getFormItems:function(t){var e=this.formConfig,r=this.formOpts,o=e&&r.items?r.items:[];return arguments.length?o[t]:o},getPendingRecords:function(){return this.pendingRecords},triggerToolbarBtnEvent:function(t,e){this.commitProxy(t,e),this.$emit("toolbar-button-click",{code:t.code,button:t,$grid:this,$event:e})},triggerPendingEvent:function(t){var r=this.pendingRecords,e=this.isMsg,o=this.getCheckboxRecords();if(o.length){var i=[],n=[];o.forEach(function(e){r.some(function(t){return e===t})?n.push(e):i.push(e)}),n.length?this.pendingRecords=r.filter(function(t){return-1===n.indexOf(t)}).concat(i):i.length&&(this.pendingRecords=r.concat(i)),this.clearCheckboxRow()}else e&&_vXETable.default.modal.message({id:t,message:_conf.default.i18n("vxe.grid.selectOneRecord"),status:"warning"})},pageChangeEvent:function(t){var e=this.proxyConfig,r=this.tablePage,o=t.currentPage,i=t.pageSize;r.currentPage=o,r.pageSize=i,this.$emit("page-change",Object.assign({$grid:this},t)),e&&this.commitProxy("query")},sortChangeEvent:function(t){var e=t.$table,r=t.column,o=t.sortList;(_ctor.default.isBoolean(r.remoteSort)?r.remoteSort:e.sortOpts.remote)&&(this.sortData=o,this.proxyConfig&&(this.tablePage.currentPage=1,this.commitProxy("query"))),this.$emit("sort-change",Object.assign({$grid:this},t))},filterChangeEvent:function(t){var e=t.$table,r=t.filters;e.filterOpts.remote&&(this.filterData=r,this.proxyConfig&&(this.tablePage.currentPage=1,this.commitProxy("query"))),this.$emit("filter-change",Object.assign({$grid:this},t))},submitEvent:function(t){this.proxyConfig&&this.commitProxy("reload"),this.$emit("form-submit",Object.assign({$grid:this},t))},resetEvent:function(t){this.proxyConfig&&this.commitProxy("reload"),this.$emit("form-reset",Object.assign({$grid:this},t))},submitInvalidEvent:function(t){this.$emit("form-submit-invalid",Object.assign({$grid:this},t))},togglCollapseEvent:function(t){var e=this;this.$nextTick(function(){return e.recalculate(!0)}),this.$emit("form-toggle-collapse",Object.assign({$grid:this},t))},triggerZoomEvent:function(t){this.zoom(),this.$emit("zoom",{$grid:this,type:this.isZMax?"max":"revert",$event:t})},zoom:function(){return this[this.isZMax?"revert":"maximize"]()},isMaximized:function(){return this.isZMax},maximize:function(){return this.handleZoom(!0)},revert:function(){return this.handleZoom()},handleZoom:function(t){var e=this,r=this.isZMax;return(t?!r:r)&&(this.isZMax=!r,this.tZindex<_tools.UtilTools.getLastZIndex()&&(this.tZindex=_tools.UtilTools.nextZIndex())),this.$nextTick().then(function(){return e.recalculate(!0)}).then(function(){return e.isZMax})},getProxyInfo:function(){var t=this.sortData;return this.proxyConfig?{data:this.tableData,filter:this.filterData,form:this.formData,sort:t.length?t[0]:{},sorts:t,pager:this.tablePage,pendingRecords:this.pendingRecords}:null}})};exports.default=_default2;