UNPKG

@chl1860/dynamic-form-vue3

Version:

Vue3 + TypeScript + Ant Design Vue 动态表单组件

2 lines (1 loc) 36 kB
!function(e,l){"object"==typeof exports&&"undefined"!=typeof module?l(exports,require("vue"),require("@ant-design/icons-vue")):"function"==typeof define&&define.amd?define(["exports","vue","@ant-design/icons-vue"],l):l((e="undefined"!=typeof globalThis?globalThis:e||self).DynamicForm={},e.Vue,e.AntDesignIconsVue)}(this,function(e,l,t){"use strict";var o=Object.defineProperty,a=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,r=(e,l,t)=>l in e?o(e,l,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[l]=t,d=(e,l)=>{for(var t in l||(l={}))n.call(l,t)&&r(e,t,l[t]);if(a)for(var t of a(l))i.call(l,t)&&r(e,t,l[t]);return e},s=(e,l,t)=>new Promise((o,a)=>{var n=e=>{try{r(t.next(e))}catch(l){a(l)}},i=e=>{try{r(t.throw(e))}catch(l){a(l)}},r=e=>e.done?o(e.value):Promise.resolve(e.value).then(n,i);r((t=t.apply(e,l)).next())});function u(e,l){if(!e||!l)return;const t=l.split(".");let o=e;for(const a of t){if(null==o||"object"!=typeof o)return;o=o[a]}return o}function c(e,l,t){if(!e||!l)return;const o=l.split(".");let a=e;for(let n=0;n<o.length-1;n++){const e=o[n];e in a&&"object"==typeof a[e]||(a[e]={}),a=a[e]}a[o[o.length-1]]=t}function p(e,l=""){const t={};if(null==e||"object"!=typeof e)return t;for(const o in e){const a=e[o],n=l?`${l}.${o}`:o;a&&"object"==typeof a&&!Array.isArray(a)?Object.assign(t,p(a,n)):t[n]=a}return t}const v=l.reactive(new Map),m=l.ref(0);function f(){const e=l.reactive(new Map),t=l.ref(0);return{register(o,a){e.set(o,l.markRaw(a)),t.value++},get:l=>(t.value,m.value,e.get(l)||v.get(l)),has:l=>(t.value,m.value,e.has(l)||v.has(l)),unregister(l){e.delete(l),t.value++},clear(){e.clear(),t.value++},getAll(){t.value,m.value;const l={};return v.forEach((e,t)=>{l[t]=e}),e.forEach((e,t)=>{l[t]=e}),l}}}const y={register(e,t){v.set(e,l.markRaw(t)),m.value++},get:e=>(m.value,v.get(e)),has:e=>(m.value,v.has(e)),unregister(e){v.delete(e),m.value++},clear(){v.clear(),m.value++},getAll(){m.value;const e={};return v.forEach((l,t)=>{e[t]=l}),e},registerBatch(e){Object.entries(e).forEach(([e,l])=>{this.register(e,l)})}},g={install(e,l={}){e.config.globalProperties.$simpleFormRegistry=y,l.components&&y.registerBatch(l.components),e.provide("simpleFormRegistry",y)}};function k(e,t={}){const o=l.reactive(d({},t)),a=l.ref({}),n=l.reactive({}),i=l.reactive({}),r=f(),v=e=>u(o,e),m=(e,l)=>{c(o,e,l),a.value[e]&&delete a.value[e]},y=l=>{const t=e=>{for(const o of e){if(o.name===l)return o;if("group"===o.type&&o.children){const e=t(o.children);if(e)return e}}return null};return t(e.fields)},g=e=>{const l=y(e.split(".").pop()||e);if(!l||!l.rules)return!0;const t=v(e);for(const n of l.rules){if(n.required&&(null==t||""===t))return a.value[e]=n.message||`${l.label} is required`,!1;if(n.validator){const l=n.validator(t,o);if(!0!==l)return a.value[e]="string"==typeof l?l:n.message||"Invalid value",!1}}return delete a.value[e],!0},k=l.computed(()=>d({},o)),h=l.computed(()=>Object.keys(a.value).length>0),b=()=>s(this,null,function*(){var l;for(const t of e.fields)if((null==(l=t.linkage)?void 0:l.asyncOptionsLoader)&&t.linkage.dependsOn){const e=u(o,t.linkage.dependsOn);void 0!==e&&(yield B(t.name,e))}}),B=(e,l)=>s(this,null,function*(){var t;const a=y(e);if(!(null==(t=null==a?void 0:a.linkage)?void 0:t.asyncOptionsLoader))return[];const r=`${e}_${l}`;n[r]={loading:!0};try{const e=yield a.linkage.asyncOptionsLoader(l,o);return i[r]=e,n[r]={loading:!1},e}catch(d){return n[r]={loading:!1,error:d instanceof Error?d.message:"加载选项失败"},[]}});(()=>{e.fields.filter(e=>{var l;return null==(l=e.linkage)?void 0:l.dependsOn}).forEach(e=>{var t;(null==(t=e.linkage)?void 0:t.dependsOn)&&l.watch(()=>u(o,e.linkage.dependsOn),(l,t)=>s(this,null,function*(){var o,a;if(l!==t){if(!1!==(null==(o=e.linkage)?void 0:o.resetOnChange)){const l=C(e);m(e.name,l)}if((null==(a=e.linkage)?void 0:a.asyncOptionsLoader)&&void 0!==l){const t=`${e.name}_${l}`;i[t]&&i[t].length>0||(yield B(e.name,l))}}}),{immediate:!1})})})();const C=e=>{switch(e.type){case"input":case"text":case"textarea":return"";case"select":case"radio":case"number":case"date":default:return;case"checkbox":return!1}};return{formData:o,formValues:k,errors:l.computed(()=>a.value),hasErrors:h,getValue:v,setValue:m,getFieldConfig:y,validateField:g,validateFieldAsync:e=>s(this,null,function*(){const l=y(e.split(".").pop()||e);if(!l||!l.rules)return!0;const t=v(e);if(!g(e))return!1;for(const r of l.rules)if(r.asyncValidator){const l=`${e}_validation`;n[l]={loading:!0};try{const i=yield r.asyncValidator(t,o);if(n[l]={loading:!1},!0!==i)return a.value[e]="string"==typeof i?i:r.message||"Invalid value",!1}catch(i){return n[l]={loading:!1,error:i instanceof Error?i.message:"验证失败"},a.value[e]=r.message||"验证失败",!1}}return delete a.value[e],!0}),validateForm:()=>{const l=p(o);let t=!0;for(const e in l)g(e)||(t=!1);const a=(e,l="")=>{var o;for(const n of e)if("group"===n.type&&n.children)a(n.children,`${n.name}.`);else{const e=l+n.name;(null==(o=n.rules)?void 0:o.some(e=>e.required))&&(g(e)||(t=!1))}};return a(e.fields),t},resetForm:()=>{Object.keys(o).forEach(e=>{delete o[e]}),Object.assign(o,d({},t)),a.value={}},getFieldError:e=>a.value[e],initializeAsync:()=>s(this,null,function*(){if(!e.asyncInitializer)return;const t="__init__";n[t]={loading:!0};try{const a=yield e.asyncInitializer();a&&"object"==typeof a&&Object.assign(o,a),n[t]={loading:!1},yield l.nextTick(),yield b()}catch(a){n[t]={loading:!1,error:a instanceof Error?a.message:"初始化失败"}}}),loadFieldOptions:B,getFieldOptions:(e,l)=>{var t,o;const a=y(e);if(!a)return[];if((null==(t=a.linkage)?void 0:t.asyncOptionsLoader)&&void 0!==l){return i[`${e}_${l}`]||[]}return(null==(o=a.linkage)?void 0:o.optionsMap)&&void 0!==l?a.linkage.optionsMap[l]||[]:a.options||[]},getAsyncState:e=>n[e]||{loading:!1},asyncStates:l.computed(()=>n),fieldOptionsCache:l.computed(()=>i),componentRegistry:r,schema:e}}const h=l.defineComponent({__name:"SimpleInput",props:{field:{},value:{},disabled:{type:Boolean}},emits:["update:value","blur","focus"],setup(e,{emit:t}){const o=t,a=e=>{o("update:value",e)},n=()=>{o("blur")},i=()=>{o("focus")};return(e,t)=>{var o,r,d;const s=l.resolveComponent("a-input");return l.openBlock(),l.createBlock(s,{value:e.value,placeholder:e.field.placeholder,disabled:e.disabled,size:null==(o=e.field.props)?void 0:o.size,"allow-clear":null==(r=e.field.props)?void 0:r.allowClear,"max-length":null==(d=e.field.props)?void 0:d.maxLength,"onUpdate:value":a,onBlur:n,onFocus:i},null,8,["value","placeholder","disabled","size","allow-clear","max-length"])}}}),b=l.defineComponent({__name:"SimpleSelect",props:{field:{},value:{},disabled:{type:Boolean},loading:{type:Boolean}},emits:["update:value","blur","focus"],setup(e,{emit:t}){const o=e,a=t,n=l.inject("formContext"),i=l.computed(()=>{var e;if((null==(e=o.field.linkage)?void 0:e.dependsOn)&&n){const e=n.getValue(o.field.linkage.dependsOn);if(o.field.linkage.asyncOptionsLoader&&void 0!==e)return n.getFieldOptions(o.field.name,e);if(o.field.linkage.optionsMap&&void 0!==e)return o.field.linkage.optionsMap[e]||[]}return o.field.options||[]}),r=l.computed(()=>{var e;if(!(null==(e=o.field.linkage)?void 0:e.dependsOn)||!n)return!1;const l=n.getValue(o.field.linkage.dependsOn);if(o.field.linkage.asyncOptionsLoader&&void 0!==l){const e=`${o.field.name}_${l}`;return n.getAsyncState(e).loading}return!1}),d=e=>{a("update:value",e)},s=()=>{a("blur")},u=()=>{a("focus")};return(e,t)=>{var o,a,n,c,p;const v=l.resolveComponent("a-select-option"),m=l.resolveComponent("a-select");return l.openBlock(),l.createBlock(m,{value:e.value,placeholder:e.field.placeholder,disabled:e.disabled,loading:e.loading||r.value,"allow-clear":null==(o=e.field.props)?void 0:o.allowClear,"show-search":null==(a=e.field.props)?void 0:a.showSearch,"filter-option":null==(n=e.field.props)?void 0:n.filterOption,mode:null==(c=e.field.props)?void 0:c.mode,size:null==(p=e.field.props)?void 0:p.size,"onUpdate:value":d,onBlur:s,onFocus:u},{default:l.withCtx(()=>[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(i.value,e=>(l.openBlock(),l.createBlock(v,{key:e.value,value:e.value,disabled:e.disabled},{default:l.withCtx(()=>[l.createTextVNode(l.toDisplayString(e.label),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value","placeholder","disabled","loading","allow-clear","show-search","filter-option","mode","size"])}}}),B=l.defineComponent({__name:"SimpleRadio",props:{field:{},value:{},disabled:{type:Boolean}},emits:["update:value"],setup(e,{emit:t}){const o=e,a=t,n=l.inject("formContext"),i=l.computed(()=>{var e;if((null==(e=o.field.linkage)?void 0:e.dependsOn)&&n){const e=n.getValue(o.field.linkage.dependsOn);if(o.field.linkage.optionsMap&&void 0!==e)return o.field.linkage.optionsMap[e]||[]}return o.field.options||[]}),r=e=>{a("update:value",e)};return(e,t)=>{var o,a;const n=l.resolveComponent("a-radio"),d=l.resolveComponent("a-radio-group");return l.openBlock(),l.createBlock(d,{value:e.value,disabled:e.disabled,size:null==(o=e.field.props)?void 0:o.size,direction:(null==(a=e.field.props)?void 0:a.direction)||"horizontal","onUpdate:value":r},{default:l.withCtx(()=>[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(i.value,e=>(l.openBlock(),l.createBlock(n,{key:e.value,value:e.value,disabled:e.disabled},{default:l.withCtx(()=>[l.createTextVNode(l.toDisplayString(e.label),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value","disabled","size","direction"])}}}),C={key:0,class:"simple-group-header"},x={key:0,class:"simple-group-title"},V={key:1,class:"simple-group-description"},E=(e,l)=>{const t=e.__vccOpts||e;for(const[o,a]of l)t[o]=a;return t},N=E(l.defineComponent({__name:"SimpleGroup",props:{field:{},path:{}},setup(e){const t=e,o=l.inject("formContext"),a=l.computed(()=>"horizontal"===t.field.layout?"simple-group-horizontal":"simple-group-vertical"),n=e=>t.path?`${t.path}.${e}`:e,i=l.computed(()=>t.field.children?t.field.children.filter(e=>{var l;if(!(null==(l=e.linkage)?void 0:l.visibleWhen))return!0;const t=n(e.name),a=null==o?void 0:o.getValue(t);return e.linkage.visibleWhen(a,null==o?void 0:o.formData)}):[]);return(e,t)=>{var o,r;return l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(["simple-group",{"simple-group-bordered":e.field.bordered}])},[e.field.label||(null==(o=e.field.props)?void 0:o.description)?(l.openBlock(),l.createElementBlock("div",C,[e.field.label?(l.openBlock(),l.createElementBlock("h4",x,l.toDisplayString(e.field.label),1)):l.createCommentVNode("",!0),(null==(r=e.field.props)?void 0:r.description)?(l.openBlock(),l.createElementBlock("p",V,l.toDisplayString(e.field.props.description),1)):l.createCommentVNode("",!0)])):l.createCommentVNode("",!0),l.createElementVNode("div",{class:l.normalizeClass(["simple-group-content",a.value])},[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(i.value,e=>(l.openBlock(),l.createBlock(P,{key:e.name,field:e,path:n(e.name)},null,8,["field","path"]))),128))],2)],2)}}}),[["__scopeId","data-v-f4248fd8"]]),w={class:"simple-form-item-control"},S={key:9,class:"unsupported-field"},_={class:"error-title"},O={class:"error-details"},F={class:"debug-info"},z={key:2},D={class:"simple-form-item-control"},j={key:9,class:"unsupported-field"},A={class:"error-title"},$={class:"error-details"},T={class:"debug-info"},R={key:2,class:"simple-form-item-validating"},L={key:3,class:"simple-form-item-error-message"},P=E(l.defineComponent({__name:"SimpleFormItem",props:{field:{},path:{}},setup(e){const o=e,a=l.computed(()=>o.field),n=l.inject("formContext"),i=l.inject("formLayout",null),r=l.computed(()=>o.path||o.field.name),u=l.computed(()=>null==n?void 0:n.getValue(r.value)),c=l.computed(()=>{var e;return(null==(e=o.field.rules)?void 0:e.some(e=>e.required))||!1}),p=l.computed(()=>{var e;return!!(null==(e=o.field.linkage)?void 0:e.disabledWhen)&&o.field.linkage.disabledWhen(u.value,null==n?void 0:n.formData)}),v=l.computed(()=>!!(null==n?void 0:n.getFieldError(r.value))),m=l.computed(()=>null==n?void 0:n.getFieldError(r.value)),f=e=>{null==n||n.setValue(r.value,e)},y=()=>s(this,null,function*(){var e;null==n||n.validateField(r.value);const l=null==n?void 0:n.getFieldConfig(o.field.name);(null==(e=null==l?void 0:l.rules)?void 0:e.some(e=>e.asyncValidator))&&(yield null==n?void 0:n.validateFieldAsync(r.value))}),g=l.computed(()=>{const e=`${r.value}_validation`;return(null==n?void 0:n.getAsyncState(e).loading)||!1}),k=l.computed(()=>{if(o.field.component)return console.log(`字段 ${o.field.name} 使用内联组件:`,o.field.component),l.markRaw(o.field.component);const e=null==n?void 0:n.componentRegistry.get(o.field.type);return e?console.log(`字段 ${o.field.name} 找到注册组件:`,o.field.type):(console.warn(`字段 ${o.field.name} 未找到对应的组件:`,o.field.type),console.log("当前已注册的组件:",null==n?void 0:n.componentRegistry.getAll())),e}),C=l.computed(()=>{const e=d({placeholder:o.field.placeholder},o.field.props);return o.field.componentProps&&Object.assign(e,o.field.componentProps),e}),x=l.computed(()=>({})),V=()=>{},E=l.computed(()=>{var e;return"string"==typeof o.field.tooltip?o.field.tooltip:(null==(e=o.field.tooltip)?void 0:e.title)||""}),P=l.computed(()=>{var e;return"string"==typeof o.field.tooltip?"top":(null==(e=o.field.tooltip)?void 0:e.placement)||"top"}),I=l.computed(()=>{var e;if("string"!=typeof o.field.tooltip)return null==(e=o.field.tooltip)?void 0:e.color}),U=l.computed(()=>{var e;if("string"!=typeof o.field.tooltip)return null==(e=o.field.tooltip)?void 0:e.overlayClassName}),M=l.computed(()=>{var e;if("string"!=typeof o.field.tooltip)return null==(e=o.field.tooltip)?void 0:e.overlayStyle}),q=l.computed(()=>o.field.layout||{}),W=l.computed(()=>{var e;return(null==i?void 0:i.value)||(null==(e=null==n?void 0:n.schema)?void 0:e.layout)||{}}),J=l.computed(()=>"inline"===(W.value.type||"vertical")),G=l.computed(()=>{const e=W.value.gutter;return Array.isArray(e)?e:e?[e,e]:[8,8]}),H=l.computed(()=>{const e=W.value.type||"vertical";if("horizontal"===e||"grid"===e)return!0;const l="object"==typeof q.value&&(q.value.labelCol||q.value.wrapperCol),t=W.value.labelCol||W.value.wrapperCol;return l||t}),Q=l.computed(()=>{const e=[],l=W.value.type||"vertical";return e.push(`simple-form-item-${l}`),v.value&&e.push("simple-form-item-error"),"object"==typeof q.value&&q.value.className&&e.push(q.value.className),e}),K=l.computed(()=>"object"==typeof q.value&&q.value.style||{}),X=l.computed(()=>{const e=[],l=W.value.labelAlign;return l&&e.push(`label-${l}`),e}),Y=l.computed(()=>{var e,l;const t="object"==typeof q.value?null==(e=q.value.labelCol)?void 0:e.span:void 0,o=null==(l=W.value.labelCol)?void 0:l.span;let a=6;return"horizontal"===(W.value.type||"vertical")&&(a=6),t||o||a}),Z=l.computed(()=>{var e,l;return("object"==typeof q.value?null==(e=q.value.labelCol)?void 0:e.offset:void 0)||(null==(l=W.value.labelCol)?void 0:l.offset)||0}),ee=l.computed(()=>{var e,l;const t="object"==typeof q.value?null==(e=q.value.wrapperCol)?void 0:e.span:void 0,o=null==(l=W.value.wrapperCol)?void 0:l.span;W.value.type;if(t||o)return t||o;const a=Y.value,n=Z.value;return 24-a-n}),le=l.computed(()=>{var e,l;return("object"==typeof q.value?null==(e=q.value.wrapperCol)?void 0:e.offset:void 0)||(null==(l=W.value.wrapperCol)?void 0:l.offset)||0});return(e,o)=>{var i,r,d,s,q,W,te,oe,ae;const ne=l.resolveComponent("a-tooltip"),ie=l.resolveComponent("a-col"),re=l.resolveComponent("a-input-number"),de=l.resolveComponent("a-textarea"),se=l.resolveComponent("a-checkbox"),ue=l.resolveComponent("a-date-picker"),ce=l.resolveComponent("a-row"),pe=l.resolveComponent("a-spin");return l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(["simple-form-item",Q.value]),style:l.normalizeStyle(K.value)},[H.value?(l.openBlock(),l.createBlock(ce,{key:0,gutter:G.value},{default:l.withCtx(()=>[e.field.label?(l.openBlock(),l.createBlock(ie,{key:0,span:Y.value,offset:Z.value,class:"simple-form-item-label-col"},{default:l.withCtx(()=>[l.createElementVNode("div",{class:l.normalizeClass(["simple-form-item-label",X.value])},[l.createElementVNode("span",{class:l.normalizeClass({required:c.value})},l.toDisplayString(e.field.label),3),e.field.tooltip?(l.openBlock(),l.createBlock(ne,{key:0,title:E.value,placement:P.value,color:I.value,"overlay-class-name":U.value,"overlay-style":M.value},{default:l.withCtx(()=>[l.createVNode(l.unref(t.QuestionCircleOutlined),{class:"field-tooltip-icon"})]),_:1},8,["title","placement","color","overlay-class-name","overlay-style"])):l.createCommentVNode("",!0)],2)]),_:1},8,["span","offset"])):l.createCommentVNode("",!0),l.createVNode(ie,{span:ee.value,offset:le.value,class:"simple-form-item-control-col"},{default:l.withCtx(()=>{var i,r,d,s,c,v,m,g,E;return[l.createElementVNode("div",w,["group"===e.field.type?(l.openBlock(),l.createBlock(N,{key:0,field:a.value,path:e.path||""},null,8,["field","path"])):"input"===e.field.type||"text"===e.field.type?(l.openBlock(),l.createBlock(h,{key:1,field:e.field,value:u.value,disabled:p.value,"onUpdate:value":f,onBlur:y},null,8,["field","value","disabled"])):"select"===e.field.type?(l.openBlock(),l.createBlock(b,{key:2,field:e.field,value:u.value,disabled:p.value,"onUpdate:value":f,onBlur:y},null,8,["field","value","disabled"])):"radio"===e.field.type?(l.openBlock(),l.createBlock(B,{key:3,field:e.field,value:u.value,disabled:p.value,"onUpdate:value":f},null,8,["field","value","disabled"])):"number"===e.field.type?(l.openBlock(),l.createBlock(re,{key:4,value:u.value,placeholder:e.field.placeholder,disabled:p.value,min:null==(i=e.field.props)?void 0:i.min,max:null==(r=e.field.props)?void 0:r.max,step:null==(d=e.field.props)?void 0:d.step,precision:null==(s=e.field.props)?void 0:s.precision,"onUpdate:value":f,onBlur:y},null,8,["value","placeholder","disabled","min","max","step","precision"])):"textarea"===e.field.type?(l.openBlock(),l.createBlock(de,{key:5,value:u.value,placeholder:e.field.placeholder,disabled:p.value,rows:(null==(c=e.field.props)?void 0:c.rows)||4,"max-length":null==(v=e.field.props)?void 0:v.maxLength,"show-count":null==(m=e.field.props)?void 0:m.showCount,"onUpdate:value":f,onBlur:y},null,8,["value","placeholder","disabled","rows","max-length","show-count"])):"checkbox"===e.field.type?(l.openBlock(),l.createBlock(se,{key:6,checked:u.value,disabled:p.value,"onUpdate:checked":f},{default:l.withCtx(()=>{var t;return[l.createTextVNode(l.toDisplayString(null==(t=e.field.props)?void 0:t.label),1)]}),_:1},8,["checked","disabled"])):"date"===e.field.type?(l.openBlock(),l.createBlock(ue,{key:7,value:u.value,placeholder:e.field.placeholder,disabled:p.value,format:null==(g=e.field.props)?void 0:g.format,"onUpdate:value":f,onBlur:y},null,8,["value","placeholder","disabled","format"])):k.value?(l.openBlock(),l.createBlock(l.resolveDynamicComponent(k.value),l.mergeProps({key:8,value:u.value,field:e.field,disabled:p.value},C.value,{"onUpdate:value":f,onBlur:y,onFocus:V},l.toHandlers(x.value)),null,16,["value","field","disabled"])):(l.openBlock(),l.createElementBlock("div",S,[l.createElementVNode("div",_,[l.createVNode(l.unref(t.ExclamationCircleOutlined)),l.createTextVNode(" 不支持的字段类型: "+l.toDisplayString(e.field.type),1)]),l.createElementVNode("div",O,[l.createElementVNode("p",null,"字段名: "+l.toDisplayString(e.field.name),1),o[1]||(o[1]=l.createElementVNode("p",null,"可能的解决方案:",-1)),o[2]||(o[2]=l.createElementVNode("ul",null,[l.createElementVNode("li",null,"检查字段类型是否拼写正确"),l.createElementVNode("li",null,"确保自定义组件已正确注册"),l.createElementVNode("li",null,"使用 component 属性直接指定组件"),l.createElementVNode("li",null,"联系开发者添加对该字段类型的支持")],-1)),l.createElementVNode("div",F,[l.createElementVNode("details",null,[o[0]||(o[0]=l.createElementVNode("summary",null,"调试信息",-1)),l.createElementVNode("p",null,"已注册的组件类型: "+l.toDisplayString(Object.keys((null==(E=l.unref(n))?void 0:E.componentRegistry.getAll())||{}).join(", ")||"无"),1),l.createElementVNode("p",null,"字段配置: "+l.toDisplayString(JSON.stringify(e.field,null,2)),1)])])])]))])]}),_:1},8,["span","offset"])]),_:1},8,["gutter"])):(l.openBlock(),l.createElementBlock(l.Fragment,{key:1},[e.field.label||J.value?(l.openBlock(),l.createElementBlock("div",{key:0,class:l.normalizeClass(["simple-form-item-label",X.value])},[e.field.label?(l.openBlock(),l.createElementBlock("span",{key:0,class:l.normalizeClass({required:c.value})},l.toDisplayString(e.field.label),3)):l.createCommentVNode("",!0),e.field.tooltip?(l.openBlock(),l.createBlock(ne,{key:1,title:E.value,placement:P.value,color:I.value,"overlay-class-name":U.value,"overlay-style":M.value},{default:l.withCtx(()=>[l.createVNode(l.unref(t.QuestionCircleOutlined),{class:"field-tooltip-icon"})]),_:1},8,["title","placement","color","overlay-class-name","overlay-style"])):e.field.label?l.createCommentVNode("",!0):(l.openBlock(),l.createElementBlock("span",z," "))],2)):l.createCommentVNode("",!0),l.createElementVNode("div",D,["group"===e.field.type?(l.openBlock(),l.createBlock(N,{key:0,field:a.value,path:e.path||""},null,8,["field","path"])):"input"===e.field.type||"text"===e.field.type?(l.openBlock(),l.createBlock(h,{key:1,field:e.field,value:u.value,disabled:p.value,"onUpdate:value":f,onBlur:y},null,8,["field","value","disabled"])):"select"===e.field.type?(l.openBlock(),l.createBlock(b,{key:2,field:e.field,value:u.value,disabled:p.value,"onUpdate:value":f,onBlur:y},null,8,["field","value","disabled"])):"radio"===e.field.type?(l.openBlock(),l.createBlock(B,{key:3,field:e.field,value:u.value,disabled:p.value,"onUpdate:value":f},null,8,["field","value","disabled"])):"number"===e.field.type?(l.openBlock(),l.createBlock(re,{key:4,value:u.value,placeholder:e.field.placeholder,disabled:p.value,min:null==(i=e.field.props)?void 0:i.min,max:null==(r=e.field.props)?void 0:r.max,step:null==(d=e.field.props)?void 0:d.step,precision:null==(s=e.field.props)?void 0:s.precision,"onUpdate:value":f,onBlur:y},null,8,["value","placeholder","disabled","min","max","step","precision"])):"textarea"===e.field.type?(l.openBlock(),l.createBlock(de,{key:5,value:u.value,placeholder:e.field.placeholder,disabled:p.value,rows:(null==(q=e.field.props)?void 0:q.rows)||4,"max-length":null==(W=e.field.props)?void 0:W.maxLength,"show-count":null==(te=e.field.props)?void 0:te.showCount,"onUpdate:value":f,onBlur:y},null,8,["value","placeholder","disabled","rows","max-length","show-count"])):"checkbox"===e.field.type?(l.openBlock(),l.createBlock(se,{key:6,checked:u.value,disabled:p.value,"onUpdate:checked":f},{default:l.withCtx(()=>{var t;return[l.createTextVNode(l.toDisplayString(null==(t=e.field.props)?void 0:t.label),1)]}),_:1},8,["checked","disabled"])):"date"===e.field.type?(l.openBlock(),l.createBlock(ue,{key:7,value:u.value,placeholder:e.field.placeholder,disabled:p.value,format:null==(oe=e.field.props)?void 0:oe.format,"onUpdate:value":f,onBlur:y},null,8,["value","placeholder","disabled","format"])):k.value?(l.openBlock(),l.createBlock(l.resolveDynamicComponent(k.value),l.mergeProps({key:8,value:u.value,field:e.field,disabled:p.value},C.value,{"onUpdate:value":f,onBlur:y,onFocus:V},l.toHandlers(x.value)),null,16,["value","field","disabled"])):(l.openBlock(),l.createElementBlock("div",j,[l.createElementVNode("div",A,[l.createVNode(l.unref(t.ExclamationCircleOutlined)),l.createTextVNode(" 不支持的字段类型: "+l.toDisplayString(e.field.type),1)]),l.createElementVNode("div",$,[l.createElementVNode("p",null,"字段名: "+l.toDisplayString(e.field.name),1),o[4]||(o[4]=l.createElementVNode("p",null,"可能的解决方案:",-1)),o[5]||(o[5]=l.createElementVNode("ul",null,[l.createElementVNode("li",null,"检查字段类型是否拼写正确"),l.createElementVNode("li",null,"确保自定义组件已正确注册"),l.createElementVNode("li",null,"使用 component 属性直接指定组件"),l.createElementVNode("li",null,"联系开发者添加对该字段类型的支持")],-1)),l.createElementVNode("div",T,[l.createElementVNode("details",null,[o[3]||(o[3]=l.createElementVNode("summary",null,"调试信息",-1)),l.createElementVNode("p",null,"已注册的组件类型: "+l.toDisplayString(Object.keys((null==(ae=l.unref(n))?void 0:ae.componentRegistry.getAll())||{}).join(", ")||"无"),1),l.createElementVNode("p",null,"字段配置: "+l.toDisplayString(JSON.stringify(e.field,null,2)),1)])])])]))])],64)),g.value?(l.openBlock(),l.createElementBlock("div",R,[l.createVNode(pe,{size:"small"}),o[6]||(o[6]=l.createTextVNode(" 验证中... ",-1))])):v.value?(l.openBlock(),l.createElementBlock("div",L,l.toDisplayString(m.value),1)):l.createCommentVNode("",!0)],6)}}}),[["__scopeId","data-v-91a77669"]]),I={key:0,class:"simple-form-actions inline-actions"},U={key:2,class:"simple-form-actions"},M=E(l.defineComponent({__name:"SimpleForm",props:{schema:{},modelValue:{},showActions:{type:Boolean,default:!0},showReset:{type:Boolean,default:!0},submitText:{default:"提交"},resetText:{default:"重置"},submitting:{type:Boolean,default:!1},validateOnChange:{type:Boolean,default:!0}},emits:["update:modelValue","submit","reset","change","validate"],setup(e,{expose:o,emit:a}){const n=e,i=a,r=k(n.schema,n.modelValue),u=l.computed(()=>n.schema.layout||{});l.provide("formContext",r),l.provide("formLayout",u);const c=l.computed(()=>n.schema.fields.filter(e=>{var l;if(!(null==(l=e.linkage)?void 0:l.visibleWhen))return!0;const t=e.linkage.dependsOn?r.getValue(e.linkage.dependsOn):void 0;return e.linkage.visibleWhen(t,r.formData)})),p=l.computed(()=>{const e=u.value.type;return"horizontal"===e||"grid"===e}),v=l.computed(()=>{const e=[],l=u.value.type||"vertical";return e.push(`simple-form-${l}`),u.value.labelAlign&&e.push(`simple-form-label-${u.value.labelAlign}`),e}),m=l.computed(()=>`simple-form-fields simple-form-fields-${u.value.type||"vertical"}`),f=l.computed(()=>"inline"===(u.value.type||"vertical")),y=l.computed(()=>{const e=u.value.gutter;return Array.isArray(e)?e:e?[e,e]:[16,16]}),g=l.computed(()=>{const e={text:n.submitText,type:"primary",size:"middle",loading:!1,disabled:!1,htmlType:"submit"};return n.schema.submitButton?d(d({},e),n.schema.submitButton):e}),h=e=>{var l,t;if(null==(l=e.layout)?void 0:l.span)return e.layout.span;const o=u.value.cols||u.value.columns;if(o){return Math.floor(24/o)*((null==(t=e.layout)?void 0:t.colSpan)||1)}return 24},b=e=>{var l;return(null==(l=e.layout)?void 0:l.offset)||0},B=(e,l)=>{const t=u.value.breakpoints;if(t&&t[e])return Math.floor(24/t[e])},C=e=>{var l;const t=[];return(null==(l=e.layout)?void 0:l.className)&&t.push(e.layout.className),t.join(" ")},x=e=>{var l;return(null==(l=e.layout)?void 0:l.style)||{}},V=()=>{const e=u.value.type||"vertical",l=y.value,[t,o]=Array.isArray(l)?l:[l,l],a={};return"vertical"===e&&o>0?(a.gap=`${o}px`,a.display="flex",a.flexDirection="column"):"inline"===e&&t>0&&(a.gap=`${t}px`,a.display="flex",a.flexWrap="wrap",a.alignItems="center"),a};l.watch(()=>r.formValues.value,e=>{if(i("update:modelValue",e),i("change",e),n.validateOnChange){const e=r.validateForm();i("validate",e,r.errors.value)}},{deep:!0}),l.watch(()=>n.modelValue,e=>{e&&JSON.stringify(e)!==JSON.stringify(r.formValues.value)&&(Object.keys(r.formData).forEach(e=>{delete r.formData[e]}),Object.assign(r.formData,e))},{deep:!0});const E=()=>{r.validateForm()?i("submit",r.formValues.value):i("validate",!1,r.errors.value)},N=()=>{r.resetForm(),i("reset")};return l.onMounted(()=>s(this,null,function*(){yield r.initializeAsync()})),o({validate:r.validateForm,validateAsync:r.validateFieldAsync,reset:r.resetForm,setFieldValue:r.setValue,getFieldValue:r.getValue,formData:r.formValues,getAsyncState:r.getAsyncState,initializeAsync:r.initializeAsync,registerComponent:r.componentRegistry.register,unregisterComponent:r.componentRegistry.unregister,getComponent:r.componentRegistry.get,hasComponent:r.componentRegistry.has,getAllComponents:r.componentRegistry.getAll,clearComponents:r.componentRegistry.clear}),(e,o)=>{var a,n;const i=l.resolveComponent("a-col"),r=l.resolveComponent("a-row"),d=l.resolveComponent("a-button");return l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(["simple-form",v.value])},[p.value?(l.openBlock(),l.createBlock(r,{key:0,gutter:y.value},{default:l.withCtx(()=>[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(c.value,e=>(l.openBlock(),l.createBlock(i,{key:e.name,span:h(e),offset:b(e),xs:B("xs"),sm:B("sm"),md:B("md"),lg:B("lg"),xl:B("xl"),xxl:B("xxl")},{default:l.withCtx(()=>[l.createVNode(P,{field:e},null,8,["field"])]),_:2},1032,["span","offset","xs","sm","md","lg","xl","xxl"]))),128))]),_:1},8,["gutter"])):(l.openBlock(),l.createElementBlock("div",{key:1,class:l.normalizeClass(m.value),style:l.normalizeStyle(V())},[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(c.value,e=>(l.openBlock(),l.createBlock(P,{key:e.name,field:e,class:l.normalizeClass(C(e)),style:l.normalizeStyle(x(e))},null,8,["field","class","style"]))),128)),e.showActions&&f.value?(l.openBlock(),l.createElementBlock("div",I,[l.createVNode(d,{type:g.value.type,size:g.value.size,loading:e.submitting||g.value.loading,disabled:g.value.disabled,"html-type":g.value.htmlType,onClick:E},{default:l.withCtx(()=>[l.createTextVNode(l.toDisplayString(g.value.text),1)]),_:1},8,["type","size","loading","disabled","html-type"]),e.showReset&&!(null==(a=e.schema.extraButtons)?void 0:a.length)?(l.openBlock(),l.createBlock(d,{key:0,onClick:N},{default:l.withCtx(()=>[l.createTextVNode(l.toDisplayString(e.resetText),1)]),_:1})):l.createCommentVNode("",!0),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(e.schema.extraButtons,(e,o)=>(l.openBlock(),l.createBlock(d,{key:`inline-extra-button-${o}`,type:e.type,size:e.size,loading:e.loading,disabled:e.disabled,onClick:e.onClick},l.createSlots({default:l.withCtx(()=>[l.createTextVNode(" "+l.toDisplayString(e.text),1)]),_:2},[e.icon?{name:"icon",fn:l.withCtx(()=>["down"===e.icon?(l.openBlock(),l.createBlock(l.unref(t.DownOutlined),{key:0})):l.createCommentVNode("",!0)]),key:"0"}:void 0]),1032,["type","size","loading","disabled","onClick"]))),128))])):l.createCommentVNode("",!0)],6)),e.showActions&&!f.value?(l.openBlock(),l.createElementBlock("div",U,[l.createVNode(d,{type:g.value.type,size:g.value.size,loading:e.submitting||g.value.loading,disabled:g.value.disabled,"html-type":g.value.htmlType,onClick:E},{default:l.withCtx(()=>[l.createTextVNode(l.toDisplayString(g.value.text),1)]),_:1},8,["type","size","loading","disabled","html-type"]),e.showReset&&!(null==(n=e.schema.extraButtons)?void 0:n.length)?(l.openBlock(),l.createBlock(d,{key:0,onClick:N},{default:l.withCtx(()=>[l.createTextVNode(l.toDisplayString(e.resetText),1)]),_:1})):l.createCommentVNode("",!0),(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(e.schema.extraButtons,(e,o)=>(l.openBlock(),l.createBlock(d,{key:`extra-button-${o}`,type:e.type,size:e.size,loading:e.loading,disabled:e.disabled,onClick:e.onClick},l.createSlots({default:l.withCtx(()=>[l.createTextVNode(" "+l.toDisplayString(e.text),1)]),_:2},[e.icon?{name:"icon",fn:l.withCtx(()=>["down"===e.icon?(l.openBlock(),l.createBlock(l.unref(t.DownOutlined),{key:0})):l.createCommentVNode("",!0)]),key:"0"}:void 0]),1032,["type","size","loading","disabled","onClick"]))),128))])):l.createCommentVNode("",!0)],2)}}}),[["__scopeId","data-v-3cfaf46c"]]),q={class:"custom-rating-field"},W={class:"rating-stars"},J=["onClick","onMouseenter"],G={key:0,class:"rating-text"},H=E(l.defineComponent({__name:"CustomRatingField",props:{value:{default:0},field:{},disabled:{type:Boolean,default:!1},maxStars:{default:5},showText:{type:Boolean,default:!0},textLabels:{default:()=>["很差","较差","一般","较好","很好"]}},emits:["update:value","blur","focus"],setup(e,{emit:t}){const o=e,a=t,n=l.ref(o.value||0),i=l.ref(0);l.watch(()=>o.value,e=>{n.value=e||0}),l.computed(()=>i.value||n.value);const r=e=>{if(0===e)return"未评分";const l=Math.min(e-1,o.textLabels.length-1);return o.textLabels[l]||`${e}星`};return(e,t)=>(l.openBlock(),l.createElementBlock("div",q,[l.createElementVNode("div",W,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(e.maxStars,o=>(l.openBlock(),l.createElementBlock("span",{key:o,class:l.normalizeClass(["star",{active:o<=n.value,disabled:e.disabled}]),onClick:l=>!e.disabled&&(e=>{n.value=e,a("update:value",e),a("blur")})(o),onMouseenter:l=>!e.disabled&&(e=>{i.value=e})(o),onMouseleave:t[0]||(t[0]=l=>!e.disabled&&void(i.value=0))}," ★ ",42,J))),128))]),e.showText?(l.openBlock(),l.createElementBlock("div",G,l.toDisplayString(r(n.value)),1)):l.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-24777e9b"]]),Q={class:"custom-color-picker"},K={key:0,class:"placeholder"},X=["disabled"],Y={key:1,class:"preset-colors"},Z=["onClick"],ee=E(l.defineComponent({__name:"CustomColorPicker",props:{value:{default:""},field:{},disabled:{type:Boolean,default:!1},showInput:{type:Boolean,default:!0},showPresetColors:{type:Boolean,default:!0},presetColors:{default:()=>["#ff4d4f","#fa541c","#fa8c16","#faad14","#fadb14","#a0d911","#52c41a","#13c2c2","#1890ff","#2f54eb","#722ed1","#eb2f96","#f5222d","#fa8c16","#fadb14"]}},emits:["update:value","blur","focus"],setup(e,{emit:t}){const o=e,a=t,n=l.ref(o.value||"");l.watch(()=>o.value,e=>{n.value=e||""});const i=e=>{const l=e.target;n.value=l.value,a("update:value",l.value)},r=()=>{const e=document.querySelector(".color-input");e&&e.click()},d=()=>{a("blur")},s=()=>{a("focus")};return(e,t)=>(l.openBlock(),l.createElementBlock("div",Q,[l.createElementVNode("div",{class:"color-display",style:l.normalizeStyle({backgroundColor:n.value}),onClick:t[0]||(t[0]=l=>!e.disabled&&r)},[n.value?l.createCommentVNode("",!0):(l.openBlock(),l.createElementBlock("span",K,l.toDisplayString(e.field.placeholder||"选择颜色"),1))],4),e.showInput?l.withDirectives((l.openBlock(),l.createElementBlock("input",{key:0,"onUpdate:modelValue":t[1]||(t[1]=e=>n.value=e),type:"color",disabled:e.disabled,class:"color-input",onChange:i,onBlur:d,onFocus:s},null,40,X)),[[l.vModelText,n.value]]):l.createCommentVNode("",!0),e.showPresetColors?(l.openBlock(),l.createElementBlock("div",Y,[(l.openBlock(!0),l.createElementBlock(l.Fragment,null,l.renderList(e.presetColors,t=>(l.openBlock(),l.createElementBlock("div",{key:t,class:l.normalizeClass(["preset-color",{active:n.value===t,disabled:e.disabled}]),style:l.normalizeStyle({backgroundColor:t}),onClick:l=>!e.disabled&&(e=>{n.value=e,a("update:value",e),a("blur")})(t)},null,14,Z))),128))])):l.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-f46e8b99"]]),le=(e,l={})=>{const{componentPrefix:t="Simple",customComponents:o}=l;e.component(`${t}Form`,M),g.install(e,{components:o}),e.config.globalProperties.$dynamicForm={version:"2.0.0",debug:l.debug||!1,architecture:"simplified",customComponentsEnabled:!0},e.provide("dynamicFormGlobalConfig",l)},te={install:le,version:"2.0.0",architecture:"simplified"};e.CustomColorPicker=ee,e.CustomRatingField=H,e.SimpleForm=M,e.SimpleFormItem=P,e.SimpleFormPlugin=g,e.SimpleGroup=N,e.SimpleInput=h,e.SimpleRadio=B,e.SimpleSelect=b,e.VERSION_INFO={current:"2.0.0",architecture:"simplified"},e.createComponentRegistry=f,e.createFieldConfig=e=>d({name:"",type:"input",label:"",required:!1,placeholder:"",options:[],rules:[]},e),e.createFormSchema=(e,l={})=>d({fields:e},l),e.default=te,e.deleteByPath=function(e,l){if(!e||!l)return;const t=l.split(".");let o=e;for(let a=0;a<t.length-1;a++){const e=t[a];if(!(e in o)||"object"!=typeof o[e])return;o=o[e]}delete o[t[t.length-1]]},e.getAllPaths=p,e.getByPath=u,e.globalComponentRegistry=y,e.hasPath=function(e,l){return void 0!==u(e,l)},e.install=le,e.setByPath=c,e.useSimpleForm=k,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});