vhb-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
1 lines • 5.87 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils")),_conf=_interopRequireDefault(require("../../v-h-b-table/src/conf")),_utils=require("../../tools/utils"),_dom=_interopRequireDefault(require("../../tools/dom"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}var Rule=function(){function t(e){_classCallCheck(this,t),Object.assign(this,{$options:e,required:e.required,min:e.min,max:e.max,type:e.type,pattern:e.pattern,validator:e.validator,trigger:e.trigger,maxWidth:e.maxWidth})}return _createClass(t,[{key:"content",get:function(){return(0,_utils.getFuncText)(this.$options.content||this.$options.message)}},{key:"message",get:function(){return this.content}}]),t}();function validErrorRuleValue(e,t){var r=e.type,i=e.min,l=e.max,n=e.pattern,a="number"===r,u=a?_xeUtils.default.toNumber(t):_xeUtils.default.getSize(t);return!(!a||!isNaN(t))||(!_xeUtils.default.eqNull(i)&&u<_xeUtils.default.toNumber(i)||(!_xeUtils.default.eqNull(l)&&u>_xeUtils.default.toNumber(l)||!(!n||(_xeUtils.default.isRegExp(n)?n:new RegExp(n)).test(t))))}var _default={methods:{_fullValidate:function(e,t){return this.beginValidate(e,t,!0)},_validate:function(e,t){return this.beginValidate(e,t)},handleValidError:function(t){var r=this;return new Promise(function(e){!1===r.validOpts.autoPos?(r.emitEvent("valid-error",t),e()):r.handleActived(t,{type:"valid-error",trigger:"call"}).then(function(){setTimeout(function(){e(r.showValidTooltip(t))},10)})})},beginValidate:function(e,o,l){var t,s=this,c={},n=this.editRules,d=this.afterFullData,f=this.treeConfig,r=this.treeOpts;!0===e?t=d:e&&(_xeUtils.default.isFunction(e)?o=e:t=_xeUtils.default.isArray(e)?e:[e]),t||(t=this.getInsertRecords().concat(this.getUpdateRecords()));var a=[];if(this.lastCallTime=Date.now(),this.validRuleErr=!1,this.clearValidate(),n){var u=this.getColumns(),i=function(i){if(l||!s.validRuleErr){var e=[];u.forEach(function(r){!l&&s.validRuleErr||!_xeUtils.default.has(n,r.property)||e.push(s.validCellRules("all",i,r).catch(function(e){var t={rule:e.rule,rules:e.rules,rowIndex:s.getRowIndex(i),row:i,columnIndex:s.getColumnIndex(r),column:r,field:r.property,$table:s};if(c[r.property]||(c[r.property]=[]),c[r.property].push(t),!l)return s.validRuleErr=!0,Promise.reject(t)}))}),a.push(Promise.all(e))}};return f?_xeUtils.default.eachTree(t,i,r):t.forEach(i),Promise.all(a).then(function(){var e=Object.keys(c);return s.$nextTick().then(function(){if(e.length)return Promise.reject(c[e[0]][0]);o&&o()})}).catch(function(u){return new Promise(function(e,t){var r=function(){s.$nextTick(function(){o?(o(c),e()):"obsolete"===_conf.default.validToReject?t(c):e(c)})},i=function(){u.cell=s.getCell(u.row,u.column),_dom.default.scrollToView(u.cell),s.handleValidError(u).then(r)},l=u.row,n=d.indexOf(l),a=0<n?d[n-1]:l;!1===s.validOpts.autoPos?r():f?s.scrollToTreeRow(a).then(i):s.scrollToRow(a).then(i)})})}return this.$nextTick().then(function(){o&&o()})},hasCellRules:function(t,e,r){var i=this.editRules,l=r.property;if(l&&i){var n=_xeUtils.default.get(i,l);return n&&_xeUtils.default.find(n,function(e){return"all"===t||!e.trigger||t===e.trigger})}return!1},validCellRules:function(a,u,o,e){var s=this,t=this.editRules,r=o.property,c=[],d=[];if(r&&t){var f=_xeUtils.default.get(t,r);if(f){var h=_xeUtils.default.isUndefined(e)?_xeUtils.default.get(u,r):e;f.forEach(function(t){var e=t.type,r=t.trigger,i=t.required;if("all"===a||!r||a===r)if(_xeUtils.default.isFunction(t.validator)){var l=t.validator({cellValue:h,rule:t,rules:f,row:u,rowIndex:s.getRowIndex(u),column:o,columnIndex:s.getColumnIndex(o),field:o.property,$table:s});l&&(_xeUtils.default.isError(l)?(s.validRuleErr=!0,c.push(new Rule({type:"custom",trigger:r,content:l.message,rule:new Rule(t)}))):l.catch&&d.push(l.catch(function(e){s.validRuleErr=!0,c.push(new Rule({type:"custom",trigger:r,content:e&&e.message?e.message:t.content||t.message,rule:new Rule(t)}))})))}else{var n="array"===e?!_xeUtils.default.isArray(h)||!h.length:(0,_utils.eqEmptyValue)(h);(i?n||validErrorRuleValue(t,h):!n&&validErrorRuleValue(t,h))&&(s.validRuleErr=!0,c.push(new Rule(t)))}})}}return Promise.all(d).then(function(){if(c.length){var e={rules:c,rule:c[0]};return Promise.reject(e)}})},_clearValidate:function(){var e=this.$refs.validTip;return Object.assign(this.validStore,{visible:!1,row:null,column:null,content:"",rule:null}),e&&e.visible&&e.close(),this.$nextTick()},triggerValidate:function(i){var l=this,e=this.editConfig,t=this.editStore,r=this.editRules,n=this.validStore,a=t.actived;if(a.row&&r){var u=a.args,o=u.row,s=u.column,c=u.cell;if(this.hasCellRules(i,o,s))return this.validCellRules(i,o,s).then(function(){"row"===e.mode&&n.visible&&n.row===o&&n.column===s&&l.clearValidate()}).catch(function(e){var t=e.rule;if(t.trigger&&i!==t.trigger)return Promise.resolve();var r={rule:t,row:o,column:s,cell:c};return l.showValidTooltip(r),Promise.reject(r)})}return Promise.resolve()},showValidTooltip:function(e){var t=this,r=this.$refs,i=this.height,l=this.tableData,n=this.validOpts,a=e.rule,u=e.row,o=e.column,s=e.cell,c=r.validTip,d=a.content;return this.$nextTick(function(){if(Object.assign(t.validStore,{row:u,column:o,rule:a,content:d,visible:!0}),t.emitEvent("valid-error",e),c&&("tooltip"===n.message||"default"===n.message&&!i&&l.length<2))return c.open(s,d)})}}};exports.default=_default;