epic-designer
Version:
基于vue3的设计器,可视化开发页面表单
2 lines (1 loc) • 1.99 kB
JavaScript
;const o=require("vue"),_=require("ant-design-vue"),C={class:"form-main",style:{height:"100%"}},P=o.defineComponent({__name:"form",props:{componentSchema:{default:()=>({type:""})},scrollToFirstError:{type:Boolean,default:!1}},setup(v,{expose:g}){var u,p;const r=v,y=o.inject("pageManager",{}),a=o.ref(null),c=o.inject("forms",{}),l=o.reactive({});y.addFormData(l,(p=(u=r.componentSchema)==null?void 0:u.componentProps)==null?void 0:p.name),o.provide("formData",l);function s(){return l}async function m(){var e,n;try{return await((e=a.value)==null?void 0:e.validateFields())}catch(t){throw r.scrollToFirstError&&((n=a.value)==null||n.scrollToField(t.errorFields[0].name.toString())),t}}function i(e){Object.assign(l,e)}const S=e=>{var n,t,d,f,h;if(a.value=(n=e.component)==null?void 0:n.exposed,((t=r.componentSchema)==null?void 0:t.type)==="form"&&c.value&&a.value){const D=((f=(d=r.componentSchema)==null?void 0:d.componentProps)==null?void 0:f.name)??((h=r.componentSchema)==null?void 0:h.name)??"default";return a.value.validate=m,c.value[D]=a.value,a.value.getData=s,a.value.setData=i,!1}},F=o.computed(()=>{const e=r.componentSchema.componentProps;let n=e.labelCol,t=e.wrapperCol;return e.layout==="vertical"?n=t={span:24}:e.layout==="inline"&&e.labelLayout==="fixed"?(n={},t={flex:1}):e.labelLayout==="fixed"&&(n={flex:`${typeof e.labelWidth=="number"?`${e.labelWidth}px`:e.labelWidth}`},t={flex:1}),{...e,labelCol:n,wrapperCol:t}});function b(){}const x=o.computed(()=>r.componentSchema.children??[]);return g({form:a,getData:s,setData:i,validate:m}),(e,n)=>(o.openBlock(),o.createElementBlock("div",C,[o.createVNode(o.unref(_.Form),o.mergeProps({model:l},F.value,{style:{height:"100%"},onFinish:b,onVnodeMounted:S}),{default:o.withCtx(()=>[o.renderSlot(e.$slots,"edit-node",{},()=>[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(x.value,t=>o.renderSlot(e.$slots,"node",{componentSchema:t})),256))])]),_:3},16,["model"])]))}});module.exports=P;