@tuoyuan/json-schema
Version:
json-schema编辑器及表单组件
2 lines (1 loc) • 2.69 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),q=require("./components/form-item.vue.js"),V=require("ajv"),v=require("ajv-i18n/localize/zh"),C=require("ajv-formats"),j=require("ajv-formats-draft2019"),u=require("../utils/utils.js"),x=e.defineComponent({name:"AJsonSchemaForm",__name:"index",props:e.mergeModels({options:{type:Object,required:!0},widgets:{type:Array,default:()=>[]},validateOnChange:{type:Boolean}},{modelValue:{type:Object,required:!0},modelModifiers:{}}),emits:e.mergeModels(["change"],["update:modelValue"]),setup(c,{expose:h,emit:w}){const n=e.useModel(c,"modelValue"),r=c,p=w,t=new V({strict:"log",allErrors:!0});t.addKeyword("order"),t.addKeyword("widget"),t.addKeyword("layout"),t.addKeyword("x-hidden"),t.addKeyword("x-disabled"),t.addKeyword("enumDescriptions"),C(t),j(t),t.addFormat("time",/^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/),t.addFormat("date-time",/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/);let l=t.compile(r.options);const m=e.ref(),g=e.computed(()=>{let o=[];return r.options.order?o=r.options.order:o=Object.keys(r.options.properties),o});e.watch(n,(o,a)=>{},{deep:!0}),e.watch(()=>r.options,(o,a)=>{u.deepEqual(o,a)||(u.setFormData(n.value,r.options.properties),l=t.compile(r.options))},{deep:!0}),e.onBeforeMount(()=>{u.setFormData(n.value,r.options.properties),p("change",n.value)}),e.onMounted(()=>{});const y=o=>{let a="";return o.forEach((s,d)=>{d===0?a=s:a+=`[${s}]`}),a},f=o=>{if(!o)return;const a={};o.forEach(s=>{const d=s.instancePath.split("/").slice(1);s.keyword==="required"&&d.push(s.params.missingProperty);const i=y(d);a[i]={status:"error",message:s.message}}),e.nextTick(()=>{m.value.setFields(a)})},_=()=>{r.validateOnChange&&(l(n.value),v(l.errors),f(l.errors)),p("change",n.value)};return h({validate:()=>{const o=l(n.value);return v(l.errors),f(l.errors),o}}),(o,a)=>{const s=e.resolveComponent("a-row"),d=e.resolveComponent("a-form");return e.openBlock(),e.createBlock(d,{ref_key:"formRef",ref:m,class:"schema-form-wrapper",model:n.value,layout:"vertical","auto-label-width":""},{default:e.withCtx(()=>[e.createVNode(s,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,(i,B)=>(e.openBlock(),e.createBlock(q.default,{key:i,modelValue:n.value,"onUpdate:modelValue":a[0]||(a[0]=b=>n.value=b),fieldName:i,options:r.options.properties[i],parent:r.options,breadcrumb:i,widgets:r.widgets,onChange:_},null,8,["modelValue","fieldName","options","parent","breadcrumb","widgets"]))),128))]),_:1})]),_:1},8,["model"])}}});exports.default=x;