vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
1 lines • 11.1 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"),_log=require("../../tools/log"),_dom=require("../../tools/dom"),_util=require("./util"),_size=require("../../hooks/size"),_formConfigItem=_interopRequireDefault(require("./form-config-item")),_index=_interopRequireDefault(require("../../loading/index")),_vn=require("../../tools/vn");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var __assign=function(){return(__assign=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},Rule=function(){function e(e){Object.assign(this,{$options:e,required:e.required,min:e.min,max:e.min,type:e.type,pattern:e.pattern,validator:e.validator,trigger:e.trigger,maxWidth:e.maxWidth})}return Object.defineProperty(e.prototype,"content",{get:function(){return(0,_utils.getFuncText)(this.$options.content||this.$options.message)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"message",{get:function(){return this.content},enumerable:!1,configurable:!0}),e}(),validErrorRuleValue=function(e,t){var n=e.type,r=e.min,i=e.max,e=e.pattern,n="number"===n,o=n?_xeUtils.default.toNumber(t):_xeUtils.default.getSize(t);return!(!n||!isNaN(t))||!_xeUtils.default.eqNull(r)&&o<_xeUtils.default.toNumber(r)||!_xeUtils.default.eqNull(i)&&o>_xeUtils.default.toNumber(i)||!(!e||(_xeUtils.default.isRegExp(e)?e:new RegExp(e)).test(t))};function getResetValue(e,t){return t=_xeUtils.default.isArray(e)?[]:t}var _default=(0,_vue.defineComponent)({name:"VxeForm",props:{collapseStatus:{type:Boolean,default:!0},loading:Boolean,data:Object,size:{type:String,default:function(){return _conf.default.form.size||_conf.default.size}},span:{type:[String,Number],default:function(){return _conf.default.form.span}},align:{type:String,default:function(){return _conf.default.form.align}},titleAlign:{type:String,default:function(){return _conf.default.form.titleAlign}},titleWidth:{type:[String,Number],default:function(){return _conf.default.form.titleWidth}},titleColon:{type:Boolean,default:function(){return _conf.default.form.titleColon}},titleAsterisk:{type:Boolean,default:function(){return _conf.default.form.titleAsterisk}},titleOverflow:{type:[Boolean,String],default:null},vertical:{type:Boolean,default:null},className:[String,Function],readonly:Boolean,items:Array,rules:Object,preventSubmit:{type:Boolean,default:function(){return _conf.default.form.preventSubmit}},validConfig:Object,tooltipConfig:Object,customLayout:{type:Boolean,default:function(){return _conf.default.form.customLayout}}},emits:["update:collapseStatus","collapse","toggle-collapse","submit","submit-invalid","reset"],setup:function(s,e){function t(e){e.length&&("development"===process.env.NODE_ENV&&e.forEach(function(e){e.slots&&_xeUtils.default.each(e.slots,function(e){_xeUtils.default.isFunction(e)||m[e]||(0,_log.errLog)("vxe.error.notSlot",[e])})}),p.staticItems=_xeUtils.default.mapTree(e,function(e){return(0,_util.createItem)(S,e)},{children:"children"})),(0,_vue.nextTick)()}function n(){return p.collapseAll}function r(){var e=!n();return p.collapseAll=e,o("update:collapseStatus",e),(0,_vue.nextTick)()}function a(e){e.preventDefault(),w(),b.dispatchEvent("reset",{data:s.data},e)}function c(t){t.preventDefault(),s.preventSubmit||(q(),I(V()).then(function(e){e?b.dispatchEvent("submit-invalid",{data:s.data,errMap:e},t):b.dispatchEvent("submit",{data:s.data},t)}))}function u(){var e=_.tooltipStore,t=x.value;return e.visible&&(Object.assign(e,{item:null,visible:!1}),t)&&t.close(),(0,_vue.nextTick)()}function i(e,n,t){return n?N(e?["blur"].includes(e.type)?"blur":"change":"all",n,t).then(function(){q(n)}).catch(function(e){var e=e[n],t=R(n);e&&t&&(t.showError=!0,t.errRule=e[0].rule)}):(0,_vue.nextTick)()}var f,d=_vXETable.VXETable.tooltip,m=e.slots,o=e.emit,l=_xeUtils.default.uniqueId(),v=(0,_size.useSize)(s),p=(0,_vue.reactive)({collapseAll:s.collapseStatus,staticItems:[],formItems:[]}),_=(0,_vue.reactive)({tooltipTimeout:null,tooltipStore:{item:null,visible:!1}}),g=(0,_vue.inject)("$xegrid",null),h=(0,_vue.ref)(),x=(0,_vue.ref)(),b={},y=(0,_vue.computed)(function(){return Object.assign({},_conf.default.form.validConfig,s.validConfig)}),E=(0,_vue.computed)(function(){return Object.assign({},_conf.default.tooltip,_conf.default.form.tooltipConfig,s.tooltipConfig)}),T={refElem:h},U={computeSize:v,computeValidOpts:y,computeTooltipOpts:E},S={xID:l,props:s,context:e,reactData:p,xegrid:g,getRefMaps:function(){return T},getComputeMaps:function(){return U}},V=function(){var t=[];return _xeUtils.default.eachTree(p.formItems,function(e){t.push(e)},{children:"children"}),t},R=function(t){var e=_xeUtils.default.findTree(p.formItems,function(e){return e.field===t},{children:"children"});return e?e.item:null},q=function(e){var t;return e?(t=_xeUtils.default.isArray(t=e)?t:[e]).forEach(function(e){e&&(e=(0,_util.handleFieldOrItem)(S,e))&&(e.showError=!1)}):V().forEach(function(e){e.showError=!1}),(0,_vue.nextTick)()},w=function(){var i=s.data,e=V();return i&&e.forEach(function(e){var t=e.field,n=e.resetValue,r=e.itemRender;(0,_utils.isEnableConf)(r)&&((r=_vXETable.VXETable.renderer.get(r.name))&&r.itemResetMethod?r.itemResetMethod({data:i,field:t,property:t,item:e,$form:S,$grid:S.xegrid}):t&&_xeUtils.default.set(i,t,null===n?getResetValue(_xeUtils.default.get(i,t),void 0):_xeUtils.default.clone(n,!0)))}),q()},O=function(e){for(var t=h.value,n=0;n<e.length;n++){var r=e[n],r=R(r);if(r&&(0,_utils.isEnableConf)(r.itemRender)){var i=r.itemRender,o=_vXETable.VXETable.renderer.get(i.name),u=null;if(n||(0,_dom.scrollToView)(t.querySelector(".".concat(r.id))),u=!(u=i.autofocus?t.querySelector(".".concat(r.id," ").concat(i.autofocus)):u)&&o&&o.autofocus?t.querySelector(".".concat(r.id," ").concat(o.autofocus)):u){u.focus();break}}}},N=function(m,e,t){var v=s.data,n=s.rules,r={};return _xeUtils.default.isArray(e)||(e=[e]),Promise.all(e.map(function(a){var s,c,f=[],d=[];return a&&n&&(s=_xeUtils.default.get(n,a))&&(c=_xeUtils.default.isUndefined(t)?_xeUtils.default.get(v,a):t,s.forEach(function(t){var e,n,r,i=t.type,o=t.trigger,u=t.required,l=t.validator;"all"!==m&&o&&m!==o||(l?(r={itemValue:c,rule:t,rules:s,data:v,field:a,property:a,$form:S},e=void 0,_xeUtils.default.isString(l)?(n=_vXETable.VXETable.validators.get(l))?n.itemValidatorMethod?e=n.itemValidatorMethod(r):"development"===process.env.NODE_ENV&&(0,_log.warnLog)("vxe.error.notValidators",[l]):"development"===process.env.NODE_ENV&&(0,_log.errLog)("vxe.error.notValidators",[l]):e=l(r),e&&(_xeUtils.default.isError(e)?f.push(new Rule({type:"custom",trigger:o,content:e.message,rule:new Rule(t)})):e.catch&&d.push(e.catch(function(e){f.push(new Rule({type:"custom",trigger:o,content:e?e.message:t.content||t.message,rule:new Rule(t)}))})))):(n="array"===i,l=_xeUtils.default.isArray(c),r=!0,r=n||l?!l||!c.length:_xeUtils.default.isString(c)?(0,_utils.eqEmptyValue)(c.trim()):(0,_utils.eqEmptyValue)(c),(u?r||validErrorRuleValue(t,c):!r&&validErrorRuleValue(t,c))&&f.push(new Rule(t))))})),Promise.all(d).then(function(){f.length&&(r[a]=f.map(function(e){return{$form:S,rule:e,data:v,field:a,property:a}}))})})).then(function(){if(!_xeUtils.default.isEmpty(r))return Promise.reject(r)})},I=function(t,e,n){var r=s.data,i=s.rules,o=y.value,u={},l=[],a=[];return clearTimeout(f),r&&i?(t.forEach(function(t){var n=t.field;n&&!(0,_util.isHiddenItem)(S,t)&&(0,_util.isActivetem)(S,t)&&a.push(N(e||"all",n).then(function(){t.errRule=null}).catch(function(e){e=e[n];return u[n]||(u[n]=[]),u[n].push(e),l.push(n),t.errRule=e[0].rule,Promise.reject(e)}))}),Promise.all(a).then(function(){n&&n()}).catch(function(){return new Promise(function(e){f=window.setTimeout(function(){t.forEach(function(e){e.errRule&&(e.showError=!0)})},20),!1!==o.autoPos&&(0,_vue.nextTick)(function(){O(l)}),n?(n(u),e()):e(u)})})):(n&&n(),Promise.resolve())},b={dispatchEvent:function(e,t,n){o(e,Object.assign({$form:S,$grid:g,$event:n},t))},reset:w,validate:function(e){return q(),I(V(),"",e)},validateField:function(e,t){var n=[],n=_xeUtils.default.isArray(e)?e:[e];return I(n.map(function(e){return(0,_util.handleFieldOrItem)(S,e)}),"",t)},clearValidate:q,updateStatus:function(e,t){e=e.field;return i(new Event("change"),e,t)},toggleCollapse:r,getItems:V,getItemByField:R,closeTooltip:u},C=(Object.assign(S,b,{callSlot:function(e,t){return e&&(_xeUtils.default.isString(e)&&(e=m[e]||null),_xeUtils.default.isFunction(e))?(0,_vn.getSlotVNs)(e(t)):[]},triggerItemEvent:i,toggleCollapseEvent:function(e){r();var t=n();b.dispatchEvent("toggle-collapse",{status:t,collapse:t,data:s.data},e),b.dispatchEvent("collapse",{status:t,collapse:t,data:s.data},e)},triggerTitleTipEvent:function(e,t){var t=t.item,n=_.tooltipStore,r=x.value,e=e.currentTarget.children[0],i=(e.textContent||"").trim(),o=e.scrollWidth>e.clientWidth;clearTimeout(_.tooltipTimeout),n.item!==t&&u(),i&&o&&(Object.assign(n,{item:t,visible:!0}),r)&&r.open(e,i)},handleTitleTipLeaveEvent:function(){var e=E.value,t=x.value;t&&t.setActived(!1),e.enterable?_.tooltipTimeout=setTimeout(function(){(t=x.value)&&!t.isActived()&&u()},e.leaveDelay):u()}}),(0,_vue.ref)(0)),j=((0,_vue.watch)(function(){return p.staticItems.length},function(){C.value++}),(0,_vue.watch)(function(){return p.staticItems},function(){C.value++}),(0,_vue.watch)(C,function(){p.formItems=p.staticItems}),(0,_vue.ref)(0));(0,_vue.watch)(function(){return s.items?s.items.length:-1},function(){j.value++}),(0,_vue.watch)(function(){return s.items},function(){j.value++}),(0,_vue.watch)(j,function(){t(s.items||[])}),(0,_vue.watch)(function(){return s.collapseStatus},function(e){p.collapseAll=!!e}),(0,_vue.onMounted)(function(){(0,_vue.nextTick)(function(){"development"===process.env.NODE_ENV&&s.customLayout&&s.items&&(0,_log.errLog)("vxe.error.errConflicts",["custom-layout","items"]),t(s.items||[])})});return S.renderVN=function(){var e=s.loading,t=s.className,n=s.data,r=s.customLayout,i=p.formItems,o=v.value,u=E.value,l=m.default;return(0,_vue.h)("form",{ref:h,class:["vxe-form",t?_xeUtils.default.isFunction(t)?t({items:i,data:n,$form:S}):t:"",((n={})["size--".concat(o)]=o,n["is--loading"]=e,n)],onSubmit:c,onReset:a},[(0,_vue.h)("div",{class:"vxe-form--wrapper vxe-row"},r?l?l({}):[]:i.map(function(e,t){return(0,_vue.h)(_formConfigItem.default,{key:t,itemConfig:e})})),(0,_vue.h)("div",{class:"vxe-form-slots",ref:"hideItem"},!r&&l?l({}):[]),(0,_vue.h)(_index.default,{class:"vxe-form--loading",modelValue:e}),d?(0,_vue.h)((0,_vue.resolveComponent)("vxe-tooltip"),__assign({ref:x},u)):(0,_vue.createCommentVNode)()])},(0,_vue.provide)("$xeform",S),(0,_vue.provide)("$xeformgather",null),(0,_vue.provide)("$xeformitem",null),(0,_vue.provide)("$xeformiteminfo",null),S},render:function(){return this.renderVN()}});exports.default=_default;