UNPKG

vxe-pc-ui

Version:
1 lines • 11 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_utils=require("../../ui/src/utils"),_dom=require("../../ui/src/dom"),_util=require("./util"),_tooltip=_interopRequireDefault(require("../../tooltip/src/tooltip")),_formConfigItem=_interopRequireDefault(require("./form-config-item")),_loading=_interopRequireDefault(require("../../loading/src/loading")),_vn=require("../../ui/src/vn"),_log=require("../../ui/src/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}class Rule{constructor(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})}get content(){return(0,_utils.getFuncText)(this.$options.content||this.$options.message)}get message(){return this.content}}const validErrorRuleValue=(e,t)=>{var{type:e,min:i,max:l,pattern:r}=e,e="number"===e,o=e?_xeUtils.default.toNumber(t):_xeUtils.default.getSize(t);return!(!e||!isNaN(t))||!_xeUtils.default.eqNull(i)&&o<_xeUtils.default.toNumber(i)||!_xeUtils.default.eqNull(l)&&o>_xeUtils.default.toNumber(l)||!(!r||(_xeUtils.default.isRegExp(r)?r:new RegExp(r)).test(t))};var _default=exports.default=(0,_vue.defineComponent)({name:"VxeForm",props:{collapseStatus:{type:Boolean,default:!0},loading:Boolean,data:Object,size:{type:String,default:()=>(0,_ui.getConfig)().form.size||(0,_ui.getConfig)().size},span:{type:[String,Number],default:()=>(0,_ui.getConfig)().form.span},align:{type:String,default:()=>(0,_ui.getConfig)().form.align},verticalAlign:{type:String,default:()=>(0,_ui.getConfig)().form.verticalAlign},border:{type:Boolean,default:()=>(0,_ui.getConfig)().form.border},titleBackground:{type:Boolean,default:()=>(0,_ui.getConfig)().form.titleBackground},titleBold:{type:Boolean,default:()=>(0,_ui.getConfig)().form.titleBold},titleAlign:{type:String,default:()=>(0,_ui.getConfig)().form.titleAlign},titleWidth:{type:[String,Number],default:()=>(0,_ui.getConfig)().form.titleWidth},titleColon:{type:Boolean,default:()=>(0,_ui.getConfig)().form.titleColon},titleAsterisk:{type:Boolean,default:()=>(0,_ui.getConfig)().form.titleAsterisk},titleOverflow:{type:[Boolean,String],default:()=>(0,_ui.getConfig)().form.titleOverflow},vertical:{type:Boolean,default:()=>(0,_ui.getConfig)().form.vertical},padding:{type:Boolean,default:()=>(0,_ui.getConfig)().form.padding},className:[String,Function],readonly:Boolean,disabled:Boolean,items:Array,rules:Object,preventSubmit:{type:Boolean,default:()=>(0,_ui.getConfig)().form.preventSubmit},validConfig:Object,tooltipConfig:Object,collapseConfig:Object,customLayout:{type:Boolean,default:()=>(0,_ui.getConfig)().form.customLayout}},emits:["update:collapseStatus","collapse","toggle-collapse","submit","submit-invalid","reset"],setup(n,e){const{slots:d,emit:l}=e,u=(0,_vue.inject)("$xeGrid",null);var t=_xeUtils.default.uniqueId();const c=(0,_ui.useSize)(n)["computeSize"],m=(0,_vue.reactive)({collapseAll:n.collapseStatus,staticItems:[],formItems:[]}),f=(0,_vue.reactive)({meTimeout:void 0,stTimeout:void 0,tooltipStore:{item:null,visible:!1}}),g=(0,_vue.ref)(),v=(0,_vue.ref)();let i={};const p=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().form.validConfig,n.validConfig)),_=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().tooltip,(0,_ui.getConfig)().form.tooltipConfig,n.tooltipConfig));var r=(0,_vue.computed)(()=>Object.assign({},(0,_ui.getConfig)().form.collapseConfig,n.collapseConfig));const o={refElem:g},a={computeSize:c,computeValidOpts:p,computeTooltipOpts:_,computeCollapseOpts:r},h={xID:t,props:n,context:e,reactData:m,xeGrid:u,getRefMaps:()=>o,getComputeMaps:()=>a};const s=e=>(e.length&&e.forEach(e=>{e.slots&&_xeUtils.default.each(e.slots,e=>{_xeUtils.default.isFunction(e)||d[e]||(0,_log.errLog)("vxe.error.notSlot",[e])})}),m.staticItems=_xeUtils.default.mapTree(e,e=>(0,_util.createItem)(h,e),{children:"children"}),(0,_vue.nextTick)()),x=()=>{const t=[];return _xeUtils.default.eachTree(m.formItems,e=>{t.push(e)},{children:"children"}),t},y=t=>{var e=_xeUtils.default.findTree(m.formItems,e=>e.field===t,{children:"children"});return e?e.item:null},b=()=>m.collapseAll,C=()=>{var e=!b();return m.collapseAll=e,l("update:collapseStatus",e),(0,_vue.nextTick)()};const E=t=>{if(t){let e=t;(e=_xeUtils.default.isArray(t)?e:[t]).forEach(e=>{e&&(e=(0,_util.handleFieldOrItem)(h,e))&&(e.showError=!1)})}else x().forEach(e=>{e.showError=!1});return(0,_vue.nextTick)()},S=()=>{const r=n["data"];var e=x();return r&&e.forEach(e=>{var t,{field:i,itemRender:l}=e;(0,_utils.isEnableConf)(l)&&(t=(l=_ui.renderer.get(l.name))?l.formItemResetMethod||l.itemResetMethod:null,l&&t?t({data:r,field:i,property:i,item:e,$form:h,$grid:u}):i&&_xeUtils.default.set(r,i,((e,t)=>{var{field:i,resetValue:l}=e,r=_xeUtils.default.get(t,i);return _xeUtils.default.isFunction(l)?l({field:i,item:e,data:t,$form:h,$grid:u}):null===l&&_xeUtils.default.isArray(r)?[]:l})(e,r)))}),E()},U=e=>{e.preventDefault(),S(),i.dispatchEvent("reset",{data:n.data},e)},T=e=>{var i=g.value;if(i)for(let t=0;t<e.length;t++){var l=e[t],r=y(l);if(r&&(0,_utils.isEnableConf)(r.itemRender)){var o=r["itemRender"],a=_ui.renderer.get(o.name);t||(0,_dom.scrollToView)(i.querySelector("."+r.id));let e=null;o=o.autoFocus||o.autofocus||(a?a.formItemAutoFocus:null);if(_xeUtils.default.isFunction(o)?e=o({$form:h,$grid:u,item:r,data:n.data,field:l}):!0===o?e=i.querySelector(`.${r.id} input,textarea`):o&&(e=i.querySelector(`.${r.id} `+o)),e){e.focus();break}}}},I=(e,t,i)=>{const{data:f,rules:l}=n,r={};return _xeUtils.default.isArray(t)||(t=[t]),Promise.all(t.map(s=>{const n=[],d=[];if(s&&l){const c=_xeUtils.default.get(l,s);if(c){const m=_xeUtils.default.isUndefined(i)?_xeUtils.default.get(f,s):i;c.forEach(t=>{const{type:i,trigger:l,required:r,validator:o}=t;if("all"===e||!l||e===l)if(o){var a={itemValue:m,rule:t,rules:c,data:f,field:s,property:s,$form:h};let e;_xeUtils.default.isString(o)?(u=_ui.validators.get(o))?(u=u.formItemValidatorMethod||u.itemValidatorMethod)?e=u(a):"development"===process.env.NODE_ENV&&(0,_log.warnLog)("vxe.error.notValidators",[o]):"development"===process.env.NODE_ENV&&(0,_log.errLog)("vxe.error.notValidators",[o]):e=o(a),e&&(_xeUtils.default.isError(e)?n.push(new Rule({type:"custom",trigger:l,content:e.message,rule:new Rule(t)})):e.catch&&d.push(e.catch(e=>{n.push(new Rule({type:"custom",trigger:l,content:e?e.message:t.content||t.message,rule:new Rule(t)}))})))}else{var u="array"===i,a=_xeUtils.default.isArray(m);let e=!0;e=u||a?!a||!m.length:_xeUtils.default.isString(m)?(0,_utils.eqEmptyValue)(m.trim()):(0,_utils.eqEmptyValue)(m),(r?e||validErrorRuleValue(t,m):!e&&validErrorRuleValue(t,m))&&n.push(new Rule(t))}})}}return Promise.all(d).then(()=>{n.length&&(r[s]=n.map(e=>({$form:h,rule:e,data:f,field:s,property:s})))})})).then(()=>{if(!_xeUtils.default.isEmpty(r))return Promise.reject(r)})},q=(t,e,i)=>{var{data:l,rules:r}=n;const o=p.value,a={},u=[],s=[];return clearTimeout(f.meTimeout),l&&r?(t.forEach(t=>{const i=t["field"];i&&!(0,_util.isHiddenItem)(h,t)&&(0,_util.isActiveItem)(h,t)&&s.push(I(e||"all",i).then(()=>{t.errRule=null}).catch(e=>{e=e[i];return a[i]||(a[i]=[]),a[i].push(e),u.push(i),t.errRule=e[0].rule,Promise.reject(e)}))}),Promise.all(s).then(()=>{i&&i()}).catch(()=>new Promise(e=>{f.meTimeout=setTimeout(()=>{t.forEach(e=>{e.errRule&&(e.showError=!0)})},20),!1!==o.autoPos&&(0,_vue.nextTick)(()=>{T(u)}),i?(i(a),e()):e(a)}))):(i&&i(),Promise.resolve())};const w=t=>{var e=n["readonly"];t.preventDefault(),n.preventSubmit||(E(),e?i.dispatchEvent("submit",{data:n.data},t):q(x()).then(e=>{e?i.dispatchEvent("submit-invalid",{data:n.data,errMap:e},t):i.dispatchEvent("submit",{data:n.data},t)}))},R=()=>{var e=f["tooltipStore"],t=v.value;return e.visible&&(Object.assign(e,{item:null,visible:!1}),t)&&t.close(),(0,_vue.nextTick)()};const O=(e,i,t)=>i?I(e?["blur"].includes(e.type)?"blur":"change":"all",i,t).then(()=>{E(i)}).catch(e=>{var e=e[i],t=y(i);e&&t&&(t.showError=!0,t.errRule=e[0].rule)}):(0,_vue.nextTick)();i={dispatchEvent(e,t,i){l(e,(0,_ui.createEvent)(i,{$form:h,$grid:u},t))},reset:S,validate:e=>{var t=n["readonly"];return E(),t?(0,_vue.nextTick)():q(x(),"",e)},validateField:(e,t)=>{var i=n["readonly"];if(i)return(0,_vue.nextTick)();let l=[];return e&&(l=_xeUtils.default.isArray(e)?e:[e]),q(l.map(e=>(0,_util.handleFieldOrItem)(h,e)),"",t)},clearValidate:E,updateStatus:(e,t)=>{e=e.field;return O(new Event("change"),e,t)},toggleCollapse:C,getItems:x,getItemByField:y,closeTooltip:R};r={callSlot:(e,t)=>e&&(_xeUtils.default.isString(e)&&(e=d[e]||null),_xeUtils.default.isFunction(e))?(0,_vn.getSlotVNs)(e(t)):[],triggerItemEvent:O,toggleCollapseEvent:e=>{C();var t=b();i.dispatchEvent("toggle-collapse",{status:t,collapse:t,data:n.data},e),i.dispatchEvent("collapse",{status:t,collapse:t,data:n.data},e),(0,_vue.nextTick)(()=>{u&&u.recalculate()})},triggerTitleTipEvent:(e,t)=>{var t=t["item"],i=f["tooltipStore"],l=v.value,e=e.currentTarget.children[0],r=(e.textContent||"").trim(),o=e.scrollWidth>e.clientWidth;clearTimeout(f.stTimeout),i.item!==t&&R(),r&&o&&(Object.assign(i,{item:t,visible:!0}),l)&&l.open(e,r)},handleTitleTipLeaveEvent:()=>{var e=_.value;let t=v.value;t&&t.setActived(!1),e.enterable?f.stTimeout=setTimeout(()=>{(t=v.value)&&!t.isActived()&&R()},e.leaveDelay):R()}};Object.assign(h,i,r);const V=(0,_vue.ref)(0),A=((0,_vue.watch)(()=>m.staticItems.length,()=>{V.value++}),(0,_vue.watch)(()=>m.staticItems,()=>{V.value++}),(0,_vue.watch)(V,()=>{m.formItems=m.staticItems}),(0,_vue.ref)(0));return(0,_vue.watch)(()=>n.items?n.items.length:-1,()=>{A.value++}),(0,_vue.watch)(()=>n.items,()=>{A.value++}),(0,_vue.watch)(A,()=>{s(n.items||[])}),(0,_vue.watch)(()=>n.collapseStatus,e=>{m.collapseAll=!!e}),(0,_vue.watch)(()=>n.readonly,()=>{E()}),(0,_vue.watch)(()=>n.disabled,()=>{E()}),(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{n.customLayout&&n.items&&(0,_log.errLog)("vxe.error.errConflicts",["custom-layout","items"])})}),n.items&&s(n.items),(0,_vue.provide)("xeFormItemInfo",null),(0,_vue.provide)("$xeForm",h),(0,_vue.provide)("$xeFormGroup",null),(0,_vue.provide)("$xeFormItem",null),h.renderVN=()=>{var{loading:e,border:t,className:i,data:l,customLayout:r}=n,o=m["formItems"],a=c.value,u=_.value,s=d.default;return(0,_vue.h)("form",{ref:g,class:["vxe-form",i?_xeUtils.default.isFunction(i)?i({items:o,data:l,$form:h}):i:"",{["size--"+a]:a,"is--border":t,"custom--layout":r,"is--loading":e}],onSubmit:w,onReset:U},[(0,_vue.h)("div",{class:"vxe-form--wrapper vxe-form--item-row"},r?s?s({}):[]:o.map((e,t)=>(0,_vue.h)(_formConfigItem.default,{key:t,itemConfig:e}))),(0,_vue.h)("div",{class:"vxe-form-slots",ref:"hideItem"},!r&&s?s({}):[]),(0,_vue.h)(_loading.default,{class:"vxe-form--loading",modelValue:e}),(0,_vue.h)(_tooltip.default,Object.assign({ref:v},u))])},h},render(){return this.renderVN()}});