@robot-admin/naive-ui-components 0.9.3 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +88 -76
- package/LICENSE +21 -0
- package/README.md +314 -294
- package/dist/C_AvatarGroup.cjs +1 -1
- package/dist/C_AvatarGroup.d.cts +1 -1
- package/dist/C_AvatarGroup.d.ts +1 -1
- package/dist/C_AvatarGroup.js +1 -1
- package/dist/C_Cascade-CmCrLVft.css.map +1 -0
- package/dist/C_Cascade-U6A5AJJb.css.map +1 -0
- package/dist/C_Cascade.css +3 -3
- package/dist/C_Cascade.d.cts +2 -2
- package/dist/C_Cascade.d.ts +2 -2
- package/dist/C_Cascade.js.map +1 -1
- package/dist/C_Cascade2.js +1 -1
- package/dist/C_Cascade2.js.map +1 -1
- package/dist/{C_Form-SCq-DZaZ.css.map → C_Form-B_2ql62V.css.map} +1 -1
- package/dist/{C_Form-mcd1nKvF.css.map → C_Form-CX-7xsz3.css.map} +1 -1
- package/dist/C_Form.css +60 -60
- package/dist/C_Form.d.cts +2 -2
- package/dist/C_Form.d.ts +2 -2
- package/dist/C_Form.js.map +1 -1
- package/dist/C_Form2.js +1 -1
- package/dist/C_Form2.js.map +1 -1
- package/dist/C_FullCalendar.js.map +1 -1
- package/dist/C_FullCalendar2.js +1 -1
- package/dist/C_FullCalendar2.js.map +1 -1
- package/dist/C_Icon.d.cts +1 -1
- package/dist/C_Icon.d.ts +1 -1
- package/dist/C_Icon.js.map +1 -1
- package/dist/C_Icon2.js.map +1 -1
- package/dist/C_Language.d.cts +1 -1
- package/dist/C_Language.d.ts +1 -1
- package/dist/C_Language.js.map +1 -1
- package/dist/C_Language2.js.map +1 -1
- package/dist/C_Steps-27Exh7PM.css.map +1 -0
- package/dist/C_Steps-DU9ZsFrs.css.map +1 -0
- package/dist/C_Steps.css +38 -38
- package/dist/C_Steps.d.cts +1 -1
- package/dist/C_Steps.d.ts +1 -1
- package/dist/C_Steps.js.map +1 -1
- package/dist/C_Steps2.js +1 -1
- package/dist/C_Steps2.js.map +1 -1
- package/dist/C_Table.js.map +1 -1
- package/dist/C_Table2.js +3 -3
- package/dist/C_Table2.js.map +1 -1
- package/dist/{C_TagsView-COjGNM9h.css.map → C_TagsView-BN8vMRsY.css.map} +1 -1
- package/dist/{C_TagsView-zUDj9S06.css.map → C_TagsView-s1dnSJAV.css.map} +1 -1
- package/dist/C_TagsView.css +36 -36
- package/dist/C_TagsView.d.cts +1 -1
- package/dist/C_TagsView.d.ts +1 -1
- package/dist/C_TagsView.js.map +1 -1
- package/dist/C_TagsView2.js +1 -1
- package/dist/C_TagsView2.js.map +1 -1
- package/dist/C_Theme.d.cts +1 -1
- package/dist/C_Theme.d.ts +1 -1
- package/dist/C_Theme.js.map +1 -1
- package/dist/C_Theme2.js.map +1 -1
- package/dist/C_Timeline.cjs +1 -1
- package/dist/C_Timeline.d.cts +1 -1
- package/dist/C_Timeline.d.ts +1 -1
- package/dist/C_Timeline.js +1 -1
- package/dist/constants.d.ts +5 -5
- package/dist/constants2.d.ts +5 -5
- package/dist/constants3.d.ts +2 -2
- package/dist/constants4.d.ts +5 -5
- package/dist/constants5.d.ts +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.vue.d.ts +1 -1
- package/dist/index10.vue.d.ts +1 -1
- package/dist/index11.vue.d.ts +2 -2
- package/dist/index12.vue.d.ts +1 -1
- package/dist/index13.vue.d.ts +4 -4
- package/dist/index15.vue.d.ts +30 -10
- package/dist/index16.vue.d.ts +13 -6
- package/dist/index17.vue.d.ts +1 -1
- package/dist/index18.vue.d.ts +5 -5
- package/dist/index2.vue.d.ts +1 -1
- package/dist/index20.vue.d.ts +1 -1
- package/dist/index21.vue.d.ts +2 -2
- package/dist/index22.vue.d.ts +1 -1
- package/dist/index23.vue.d.ts +14 -3
- package/dist/index24.vue.d.ts +13 -4
- package/dist/index25.vue.d.ts +4 -2
- package/dist/index26.vue.d.ts +1 -1
- package/dist/index27.vue.d.ts +2 -2
- package/dist/index28.vue.d.ts +3 -3
- package/dist/index3.vue.d.ts +2 -2
- package/dist/index4.vue.d.ts +2 -2
- package/dist/index6.vue.d.ts +1 -1
- package/dist/index7.vue.d.ts +9 -7
- package/dist/index8.vue.d.ts +3 -3
- package/dist/index9.vue.d.ts +2 -2
- package/dist/resolver.cjs +1 -1
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +2 -21
- package/dist/resolver.d.ts +2 -21
- package/dist/resolver.js +1 -1
- package/dist/resolver.js.map +1 -1
- package/dist/style.css +142 -142
- package/dist/useCalendarEvents.d.ts +9 -6
- package/dist/useCollapsePanel.d.ts +3 -3
- package/dist/useCropperCore.d.ts +6 -6
- package/dist/useDraggableLayout.d.ts +2 -2
- package/dist/useDynamicFormState.d.ts +29 -3724
- package/dist/useEdgeInteraction.d.ts +1 -1
- package/dist/useGlobalSearch.d.ts +1 -1
- package/dist/useInfiniteScroll.d.ts +1 -1
- package/dist/useQRCode.d.ts +4 -4
- package/dist/useSignatureHistory.d.ts +3 -3
- package/dist/useSplitResize.d.ts +2 -2
- package/dist/useTimeSelection.d.ts +2 -2
- package/dist/useTreeOperations.d.ts +5 -5
- package/dist/useWorkflowValidation.d.ts +3 -3
- package/package.json +11 -2
- package/dist/C_Cascade-BE7t1OX5.css.map +0 -1
- package/dist/C_Cascade-CpDiau1y.css.map +0 -1
- package/dist/C_Steps-Buyg7Axn.css.map +0 -1
- package/dist/C_Steps-DNY91VbQ.css.map +0 -1
package/dist/C_Form2.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{t as n}from"./C_Editor2.js";import{NAlert as r,NBadge as i,NButton as a,NButtonGroup as o,NCard as s,NCascader as c,NCheckbox as l,NCheckboxGroup as u,NColorPicker as d,NDatePicker as f,NEmpty as p,NForm as m,NFormItem as h,NGrid as g,NGridItem as _,NInput as v,NInputNumber as y,NProgress as b,NRadio as x,NRadioGroup as S,NRate as C,NSelect as w,NSlider as T,NSpace as E,NStep as D,NSteps as O,NSwitch as ee,NTabPane as k,NTabs as A,NTag as te,NTimePicker as ne,NTooltip as re,NUpload as ie}from"naive-ui";import{Fragment as j,computed as M,createBlock as N,createCommentVNode as P,createElementBlock as F,createElementVNode as I,createTextVNode as L,createVNode as R,defineComponent as z,getCurrentInstance as ae,h as B,inject as oe,mergeProps as se,nextTick as ce,normalizeClass as V,normalizeStyle as le,onMounted as H,openBlock as U,reactive as W,readonly as ue,ref as G,renderList as K,renderSlot as de,resolveComponent as fe,resolveDynamicComponent as q,toDisplayString as J,toRaw as pe,unref as Y,vShow as me,watch as X,watchEffect as he,withCtx as Z,withDirectives as ge,withKeys as _e}from"vue";import{VueDraggable as ve}from"vue-draggable-plus";import{mergeRules as ye}from"@robot-admin/form-validate";const be={layout:`default`,labelPlacement:`left`,labelWidth:`auto`,size:`medium`,disabled:!1,readonly:!1,showActions:!0,validateOnChange:!1,mode:`create`},xe=[`steps`,`custom`];function Se(e){return{...be,...e}}function Ce(e){return!(e.showActions===!1||xe.includes(e.layout))}function Q(e,t){if(Object.is(e,t))return!0;if(e==null||t==null)return e===t;if(typeof e!=typeof t)return!1;if(Array.isArray(e))return!Array.isArray(t)||e.length!==t.length?!1:e.every((e,n)=>Q(e,t[n]));if(typeof e==`object`){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length?n.every(n=>Q(e[n],t[n])):!1}return!1}function $(e){return JSON.parse(JSON.stringify(e))}function we(e){let t=G({}),n=M(()=>r().length>0);function r(){let n=t.value,r=new Set([...Object.keys(n),...Object.keys(e)]),i=[];for(let t of r)Q(n[t],e[t])||i.push(t);return i}function i(n){return!Q(t.value[n],e[n])}function a(){t.value=$(e)}return{isDirty:n,getChangedFields:r,isFieldDirty:i,markAsClean:a}}const Te={input:``,textarea:``,editor:``,select:null,datePicker:null,daterange:null,timePicker:null,cascader:null,colorPicker:null,checkbox:null,upload:[],radio:``,inputNumber:null,slider:null,rate:null,switch:null},Ee=e=>Te[e]??null;function De(e,t,n,r){let i=W({}),a=W({}),o=G({}),s=G({}),{isDirty:c,getChangedFields:l,isFieldDirty:u,markAsClean:d}=we(i),f=M(()=>e.value.filter(e=>e.show===!1?!1:e.showWhen?e.showWhen(i):!0)),p=()=>{try{Object.keys(a).forEach(e=>delete a[e]),e.value.forEach(e=>{e.prop in i||(i[e.prop]=e.value===void 0?Ee(e.type):e.value),m(e)}),ce(()=>d()),_()}catch(e){console.error(`[C_Form] 初始化失败:`,e)}};function m(e){let t=[...e.rulesWhen?e.rulesWhen(i):e.rules??[]];if(e.crossFieldValidator){let n=e.crossFieldValidator;t.push({validator:()=>{let e=n(i);return e?Promise.reject(Error(e)):Promise.resolve()},trigger:[`change`,`blur`]})}if(t.length===0){delete a[e.prop];return}let n=t.every(e=>typeof e.validator==`function`);a[e.prop]=n?ye(t):t}function h(){let t=e.value.filter(e=>e.rulesWhen||e.crossFieldValidator);for(let e of t)m(e)}async function g(e){if(!e.asyncOptions)return;let{prop:t}=e;s.value[t]=!0;try{let n=await e.asyncOptions(i);o.value[t]=n}catch(e){console.warn(`[C_Form] asyncOptions 加载失败 (${t}):`,e),o.value[t]=[]}finally{s.value[t]=!1}}function _(){e.value.filter(e=>e.asyncOptions).forEach(e=>g(e))}function v(){let t=e.value.filter(e=>e.valueWhen);for(let e of t){let t=e.valueWhen(i);t!==void 0&&i[e.prop]!==t&&(i[e.prop]=t)}}let y=n=>{v(),h(),e.value.filter(e=>{if(!e.asyncOptions)return!1;let t=e.dependsOn;return t?Array.isArray(t)?t.includes(n):t===n:!1}).forEach(e=>g(e)),t.value.validateOnChange&&ce(()=>{x(n).catch(()=>{})})},b=async()=>{if(!n.value)throw Error(`[C_Form] 表单引用不存在`);try{await n.value.validate(),r(`validate-success`,O())}catch(e){throw r(`validate-error`,e),e}},x=async e=>{if(!n.value)throw Error(`[C_Form] 表单引用不存在`);let t=Array.isArray(e)?e:[e];try{await n.value.validate()}catch(e){if(!Array.isArray(e))throw e;let n=e.filter(e=>e?.some(e=>{let n=e;return typeof n.field==`string`&&t.includes(n.field)}));if(n.length>0)throw n}},S=e=>{n.value&&(e?(Array.isArray(e)?e:[e]).forEach(e=>{i[e]!==void 0&&(i[e]=i[e])}):n.value.restoreValidation())},C=async(t,n)=>{try{let n=e.value.filter(t).map(e=>e.prop);return n.length===0||await x(n),!0}catch(e){return console.warn(`[C_Form] ${n}验证失败:`,e),!1}},w=async e=>{let n=t.value.steps?.steps?.[e]?.key;return n?C(e=>e.layout?.step===n,`步骤 ${e} `):!0},T=async e=>C(t=>t.layout?.tab===e,`标签页 ${e} `),E=async()=>C(e=>!!e.layout?.dynamic,`动态字段 `),D=async e=>C(t=>t.layout?.group===e,`自定义分组 ${e} `),O=()=>({...i}),ee=e=>{Object.assign(i,e)},k=()=>{try{S(),e.value.forEach(e=>{let t=e.value===void 0?Ee(e.type):e.value;i[e.prop]=t}),ce(()=>d())}catch(e){console.error(`[C_Form] 重置表单失败:`,e)}};return H(()=>{p(),X(()=>e.value,()=>p(),{deep:!0}),X(()=>i,e=>r(`update:modelValue`,{...e}),{deep:!0})}),{formModel:i,formRules:a,visibleOptions:f,initialize:p,handleFieldChange:y,validate:b,validateField:x,validateStep:w,validateTab:T,validateDynamicFields:E,validateCustomGroup:D,clearValidation:S,getModel:O,setFields:ee,resetFields:k,setFieldValue:async(e,t,n=!1)=>{i[e]=t,n&&await x(e)},getFieldValue:e=>i[e],setFieldsValue:async(e,t=!1)=>{Object.assign(i,e),t&&await b()},handleSubmit:async()=>{try{await b(),r(`submit`,{model:O(),form:n.value})}catch(e){console.warn(`[C_Form] 表单验证失败:`,e)}},handleReset:k,isDirty:c,getChangedFields:l,isFieldDirty:u,markAsClean:d,asyncOptionsCache:o,asyncLoadingMap:s}}function Oe(e,t,n){return e===void 0?t:typeof e==`function`?e(n):e}function ke(e){return{input:t=>B(e.NInput,{...t}),textarea:t=>B(e.NInput,{...t,type:`textarea`}),inputNumber:t=>B(e.NInputNumber,{...t}),switch:t=>B(e.NSwitch,{...t}),slider:t=>B(e.NSlider,{...t}),rate:t=>B(e.NRate,{...t}),datePicker:t=>B(e.NDatePicker,{...t}),daterange:t=>B(e.NDatePicker,{...t,type:`daterange`}),timePicker:t=>B(e.NTimePicker,{...t}),cascader:t=>B(e.NCascader,{...t}),colorPicker:t=>B(e.NColorPicker,{...t}),select:(t,n)=>B(e.NSelect,{...t,options:n.children?.map(e=>({value:e.value,label:e.label,disabled:e.disabled}))||[]}),checkbox:(t,n)=>B(e.NCheckboxGroup,{...t},{default:()=>B(e.NSpace,{},{default:()=>n.children?.map(t=>B(e.NCheckbox,{value:t.value,label:t.label,disabled:t.disabled,key:String(t.value)}))||[]})}),radio:(t,n)=>B(e.NRadioGroup,{...t},{default:()=>B(e.NSpace,{},{default:()=>n.children?.map(t=>B(e.NRadio,{value:t.value,disabled:t.disabled,key:String(t.value)},{default:()=>t.label}))||[]})}),upload:(t,n,r,i)=>B(e.NUpload,{fileList:t.value||[],"onUpdate:fileList":e=>{t[`onUpdate:value`]?.(e)},...n.attrs},{trigger:()=>i?.slots?.uploadClick?.()||B(e.NButton,{type:`primary`},{default:()=>`选择文件`}),tip:()=>i?.slots?.uploadTip?.()||null}),editor:(t,n,r)=>B(e.C_Editor,{editorId:`editor-${n.prop}`,modelValue:t.value||``,placeholder:n.placeholder,disabled:r.disabled,readonly:r.readonly,"onUpdate:modelValue":e=>{t[`onUpdate:value`]?.(e)},...n.attrs})}}const Ae={};function je(e,t){Ae[e]=t}const Me=new Set([`select`,`checkbox`,`radio`,`cascader`]);function Ne(e){let{formModel:t,visibleOptions:n,config:r,handleFieldChange:i,componentMap:a,instanceSlots:o,asyncOptionsCache:s,asyncLoadingMap:c}=e,l=a,u={...ke(l),...Ae},d=e=>{let n={value:t[e.prop],"onUpdate:value":n=>{t[e.prop]=n,i(e.prop)},disabled:Oe(e.disabled,r.value.disabled,t),readonly:Oe(e.readonly,r.value.readonly,t)};return e.type===`textarea`&&(n.type=`textarea`),e.placeholder&&(n.placeholder=e.placeholder),n};function f(e){let t=e.children??[],n=s.value[e.prop]??[];return n.length>0?n:t}let p=e=>{try{let t=Me.has(e.type),n=c.value[e.prop],i=t?{...e,children:f(e)}:e,a=u[i.type];if(!a)return console.warn(`[C_Form] 未支持的组件类型: ${i.type}`),null;let s=d(i);return n&&i.type===`select`&&(s.loading=!0),a({...s,...i.attrs},i,r.value,{slots:o,components:l})}catch(t){return console.error(`[C_Form] 渲染表单项失败:`,t,e),null}};function m(e){if(e.label)return e.help?B(`span`,{style:`display:inline-flex;align-items:center;gap:4px`},[e.label,B(l.NTooltip,{trigger:`hover`},{trigger:()=>B(`span`,{style:`cursor:help;opacity:0.5;font-size:14px`,innerHTML:`ⓘ`}),default:()=>e.help})]):e.label}return{renderFormItem:p,formItems:M(()=>n.value.map(e=>{let t=!!(e.rules?.length||e.rulesWhen||e.crossFieldValidator),n=m(e);return B(l.NFormItem,{label:typeof n==`string`?n:void 0,path:e.prop,key:e.prop,required:t},{...typeof n!=`string`&&n?{label:()=>n}:{},default:()=>p(e)})})),getBaseProps:d}}const Pe={class:`c-form-default`};var Fe=t(z({__name:`index`,props:{formItems:{},layoutConfig:{},options:{}},setup(e){return(e,t)=>(U(),F(`div`,Pe,[(U(!0),F(j,null,K(e.formItems,e=>(U(),N(q(e),{key:e.key}))),128))]))}}),[[`__scopeId`,`data-v-3422ba86`]]),Ie=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(e){let t=e,n=M(()=>280),r=M(()=>t.layoutConfig?.inline?.gap??16),i=M(()=>16),a=M(()=>{let e=t.layoutConfig?.inline?.align;return e===`start`||e===`end`?e:`center`}),o=M(()=>{switch(a.value){case`start`:return`flex-start`;case`end`:return`flex-end`;default:return`center`}}),s=M(()=>{switch(a.value){case`start`:return`flex-start`;case`end`:return`flex-end`;case`center`:return`center`;default:return`flex-start`}}),c=M(()=>({display:`flex`,flexWrap:`wrap`,alignItems:o.value,justifyContent:s.value,gap:`${i.value}px ${r.value}px`,width:`100%`})),l=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`form-item-${t}`},u=e=>{let r=t.options?.[e]?.layout,i={width:`${n.value}px`,flexShrink:0,display:`flex`,flexDirection:`column`};return r?.width!==void 0&&(i.width=typeof r.width==`number`?`${r.width}px`:r.width),r?.style&&Object.assign(i,r.style),i};return(e,t)=>(U(),F(`div`,{class:`c-form-inline`,style:le(c.value)},[(U(!0),F(j,null,K(e.formItems,(e,t)=>(U(),F(`div`,{key:l(e,t),class:`c-form-inline-item`,style:le(u(t))},[(U(),N(q(e)))],4))),128))],4))}}),[[`__scopeId`,`data-v-067214c3`]]);const Le={class:`c-grid-layout`},Re={class:`config-header`},ze={class:`config-controls`},Be={class:`config-label`},Ve={class:`item-wrapper`};var He=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(t,{expose:n}){let i=t,a=G(!!import.meta.env?.DEV),o=W({cols:24,gutter:16,responsive:!0}),c=M(()=>i.layoutConfig?.grid||{}),l=M(()=>c.value.showConfigPanel),u=M(()=>c.value.showStats),d=M(()=>({cols:l.value?o.cols:c.value.cols??24,gutter:l.value?o.gutter:c.value.gutter??16,responsive:l.value?o.responsive:c.value.responsive??!0})),f=M(()=>({cols:d.value.cols,xGap:d.value.gutter,yGap:d.value.gutter,responsive:d.value.responsive?`screen`:`self`})),p=M(()=>[{key:`cols`,label:`列数`,component:`NInputNumber`,value:M({get:()=>o.cols,set:e=>o.cols=e}),props:{min:1,max:48,size:`small`}},{key:`gutter`,label:`间距`,component:`NInputNumber`,value:M({get:()=>o.gutter,set:e=>o.gutter=e}),props:{min:0,max:48,size:`small`}},{key:`responsive`,label:`响应式`,component:`NSwitch`,value:M({get:()=>o.responsive,set:e=>o.responsive=e}),props:{size:`small`}}]),m=M(()=>`列数: ${d.value.cols} | 间距: ${d.value.gutter}px | 项目: ${i.formItems.length}个`),h=(e,t)=>String(e.key)||e.props?.path||`grid-item-${t}`,v=(e,t)=>{let n=i.options?.[e]?.layout;return n?.[t]??n?.grid?.[t]},y=()=>{let{cols:e}=d.value;return e<=12?e:e<=24?12:8},b=e=>{let t=v(e,`span`),n=v(e,`offset`),r=v(e,`suffix`);return{span:typeof t==`number`&&t>0&&t<=d.value.cols?t:y(),offset:typeof n==`number`&&n>=0&&n<d.value.cols?n:0,suffix:!!r}},x=()=>{a.value&&console.log(`Grid config updated:`,pe(o))};return X(c,e=>{e.cols!==void 0&&(o.cols=e.cols),e.gutter!==void 0&&(o.gutter=e.gutter),e.responsive!==void 0&&(o.responsive=e.responsive)},{immediate:!0}),a.value&&he(()=>{let e=i.options.length,t=i.formItems.length;e>0&&e!==t&&console.warn(`[GridLayout] 配置数量(${e})与表单项数量(${t})不匹配`)}),n({updateGridConfig:e=>Object.assign(o,e),getCurrentConfig:()=>({...d.value}),getGridInfo:()=>({...d.value,itemCount:i.formItems.length})}),(t,n)=>{let i=s,o=_,c=g,d=r;return U(),F(`div`,Le,[P(` 配置面板 `),l.value?(U(),N(i,{key:0,size:`small`,bordered:!1,class:`config-panel`},{header:Z(()=>[I(`div`,Re,[R(e,{name:`mdi:view-grid`,size:18}),n[0]||=I(`span`,null,`网格配置`,-1)])]),default:Z(()=>[I(`div`,ze,[(U(!0),F(j,null,K(p.value,e=>(U(),F(`div`,{key:e.key,class:`config-item`},[I(`span`,Be,J(e.label)+`:`,1),(U(),N(q(e.component),se({value:e.value,"onUpdate:value":t=>e.value=t},{ref_for:!0},e.props,{"onUpdate:value":x}),null,16,[`value`,`onUpdate:value`]))]))),128))])]),_:1})):P(`v-if`,!0),P(` 网格容器 `),R(c,se(f.value,{class:`grid-container`}),{default:Z(()=>[(U(!0),F(j,null,K(t.formItems,(e,t)=>(U(),N(o,se({key:h(e,t)},{ref_for:!0},b(t),{class:`grid-item`}),{default:Z(()=>[I(`div`,Ve,[(U(),N(q(e)))])]),_:2},1040))),128))]),_:1},16),P(` 统计信息 `),u.value&&a.value?(U(),N(d,{key:1,type:`info`,"show-icon":!1,size:`small`,class:`grid-stats`},{header:Z(()=>[R(e,{name:`mdi:information-outline`,size:16}),n[1]||=L(` 网格信息 `,-1)]),default:Z(()=>[L(` `+J(m.value),1)]),_:1})):P(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-941b317b`]]);const Ue={class:`c-form-card`},We={class:`flex items-center gap-2`},Ge={class:`config-controls`},Ke={class:`config-item`},qe={class:`flex items-center gap-2`},Je={class:`text-xs min-w-12`},Ye={class:`config-item`},Xe={class:`config-item`},Ze={class:`config-item`},Qe={class:`flex items-center gap-3`},$e={class:`card-header`},et={class:`header-info`},tt={class:`header-text`},nt={key:0},rt={class:`header-actions`},it={class:`field-stats`},at={class:`card-content`},ot={key:0,class:`progress-section`},st={class:`action-content`},ct={class:`status-summary`},lt={class:`status-item`},ut={class:`progress-display`},dt={class:`text-sm min-w-12`},ft={class:`action-buttons`};var pt=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},formData:{default:()=>({})}},setup(t){let n=t,r=G(20),o=G(!0),c=G(!0),l=G(!0),u=G(`vertical`),d=G({}),f=M(()=>n.layoutConfig?.card?.groups||[]),p=M(()=>f.value.length>0),m=M(()=>n.layoutConfig?.card?.showLayoutConfig??!0),h=M(()=>n.layoutConfig?.card?.showActionPanel??!0),g=M(()=>p.value?`layout-${u.value}`:`layout-single`),_=M(()=>{if(!p.value)return[];let e=new Map;return f.value.forEach(t=>{e.set(t.key,[])}),n.formItems.forEach((t,r)=>{let i=(n.options?.[r])?.layout?.group||f.value[0]?.key||`default`;e.has(i)||e.set(i,[]),e.get(i).push(t)}),f.value.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),v=M(()=>{let e=Object.keys(d.value);return e.length>0&&e.every(e=>d.value[e])}),y=M(()=>{if(!n.options||n.options.length===0)return 0;let e=n.options.filter(e=>{let t=n.formData?.[e.prop||``];return C(t)}).length;return Math.round(e/n.options.length*100)}),C=e=>e==null?!1:Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:!0,w=e=>n.options?n.options.filter(t=>t.layout?.group===e.config.key).filter(e=>{let t=n.formData?.[e.prop||``];return C(t)}).length:0,E=e=>{if(e.items.length===0)return 0;let t=w(e);return Math.round(t/e.items.length*100)},D=e=>{let t={basic:`mdi:account`,contact:`mdi:phone`,preferences:`mdi:cog`,settings:`mdi:cog`,info:`mdi:information`,default:`mdi:form-select`};return t[e]||t.default},O=e=>{d.value[e]=!d.value[e]},k=()=>{let e=!v.value;f.value.forEach(t=>{d.value[t.key]=e})};return H(()=>{let e=n.layoutConfig?.card;e?.direction&&(u.value=e.direction),e?.showProgress!==void 0&&(l.value=e.showProgress),f.value.forEach(e=>{d.value[e.key]=!1})}),(t,n)=>{let f=T,C=ee,A=x,te=S,ne=s,re=i,ie=a,M=b;return U(),F(`div`,Ue,[P(` 布局配置面板 `),p.value&&m.value?(U(),N(ne,{key:0,class:`layout-config-panel`,bordered:!1},{header:Z(()=>[I(`div`,We,[R(e,{name:`mdi:cog`,size:18}),n[4]||=I(`span`,null,`布局配置`,-1)])]),default:Z(()=>[I(`div`,Ge,[I(`div`,Ke,[n[5]||=I(`span`,null,`卡片间距`,-1),I(`div`,qe,[R(f,{value:r.value,"onUpdate:value":n[0]||=e=>r.value=e,min:12,max:32,step:4,class:`w-24`},null,8,[`value`]),I(`span`,Je,J(r.value)+`px`,1)])]),I(`div`,Ye,[n[6]||=I(`span`,null,`显示图标`,-1),R(C,{value:o.value,"onUpdate:value":n[1]||=e=>o.value=e,size:`small`},null,8,[`value`])]),I(`div`,Xe,[n[7]||=I(`span`,null,`可折叠`,-1),R(C,{value:c.value,"onUpdate:value":n[2]||=e=>c.value=e,size:`small`},null,8,[`value`])]),I(`div`,Ze,[n[10]||=I(`span`,null,`布局方向`,-1),R(te,{value:u.value,"onUpdate:value":n[3]||=e=>u.value=e,size:`small`},{default:Z(()=>[R(A,{value:`vertical`},{default:Z(()=>n[8]||=[L(`垂直`,-1)]),_:1,__:[8]}),R(A,{value:`horizontal`},{default:Z(()=>n[9]||=[L(`水平`,-1)]),_:1,__:[9]})]),_:1},8,[`value`])])])]),_:1})):P(`v-if`,!0),P(` 表单内容区域 `),I(`div`,{class:V([`form-content`,g.value]),style:le({gap:`${r.value}px`})},[P(` 无分组时的单卡片模式 `),p.value?(U(),F(j,{key:1},[P(` 有分组时的多卡片模式 `),(U(!0),F(j,null,K(_.value,t=>(U(),N(ne,{key:t.config.key,class:V([`group-card`,[`${t.config.key}-card`,{collapsed:c.value&&d.value[t.config.key]}]]),hoverable:``},{header:Z(()=>[I(`div`,$e,[I(`div`,et,[o.value&&t.config.icon?(U(),N(e,{key:0,name:t.config.icon,size:20,class:`card-icon`},null,8,[`name`])):o.value?(U(),N(e,{key:1,name:D(t.config.key),size:20,class:`card-icon`},null,8,[`name`])):P(`v-if`,!0),I(`div`,tt,[I(`h3`,null,J(t.config.title),1),t.config.description?(U(),F(`p`,nt,J(t.config.description),1)):P(`v-if`,!0)])]),I(`div`,rt,[P(` 统计信息 `),I(`div`,it,[R(re,{value:t.items.length,type:`info`,"show-zero":``},null,8,[`value`]),R(re,{value:`${w(t)}/${t.items.length}`,type:w(t)===t.items.length?`success`:`warning`},null,8,[`value`,`type`])]),P(` 折叠按钮 `),c.value?(U(),N(ie,{key:0,quaternary:``,circle:``,size:`small`,onClick:e=>O(t.config.key)},{icon:Z(()=>[R(e,{name:d.value[t.config.key]?`mdi:chevron-down`:`mdi:chevron-up`,size:18},null,8,[`name`])]),_:2},1032,[`onClick`])):P(`v-if`,!0)])])]),default:Z(()=>[ge(I(`div`,at,[P(` 进度指示器 `),l.value?(U(),F(`div`,ot,[R(M,{percentage:E(t),color:E(t)===100?`#52c41a`:`#1890ff`,"show-indicator":!1,class:`mb-4`},null,8,[`percentage`,`color`])])):P(`v-if`,!0),P(` 表单项 `),(U(!0),F(j,null,K(t.items,e=>(U(),N(q(e),{key:e.key}))),128))],512),[[me,!d.value[t.config.key]]])]),_:2},1032,[`class`]))),128))],64)):(U(),N(ne,{key:0,class:`single-card`,hoverable:``},{header:Z(()=>[I(`div`,Qe,[o.value?(U(),N(e,{key:0,name:`mdi:form-select`,size:18,style:{color:`#3b82f6`}})):P(`v-if`,!0),n[11]||=I(`span`,null,`表单信息`,-1)])]),default:Z(()=>[(U(!0),F(j,null,K(t.formItems,e=>(U(),N(q(e),{key:e.key}))),128))]),_:1}))],6),P(` 统一操作面板 `),p.value&&h.value?(U(),N(ne,{key:1,class:`action-panel`,bordered:!1},{default:Z(()=>[I(`div`,st,[I(`div`,ct,[I(`div`,lt,[n[12]||=I(`span`,{class:`label`},`完成进度:`,-1),I(`div`,ut,[R(M,{percentage:y.value,"show-indicator":!1,color:y.value===100?`#52c41a`:`#1890ff`,class:`flex-1`},null,8,[`percentage`,`color`]),I(`span`,dt,J(y.value)+`%`,1)])])]),I(`div`,ft,[c.value?(U(),N(ie,{key:0,onClick:k},{icon:Z(()=>[R(e,{name:v.value?`mdi:unfold-more-horizontal`:`mdi:unfold-less-horizontal`,size:18},null,8,[`name`])]),default:Z(()=>[L(` `+J(v.value?`展开全部`:`折叠全部`),1)]),_:1})):P(`v-if`,!0)])])]),_:1})):P(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-e4d182af`]]);const mt={class:`c-form-tabs`},ht={key:0,class:`single-panel`},gt={class:`tabs-container`},_t={key:0,class:`tab-header`},vt={class:`tab-description`},yt={class:`tab-form-items`},bt={key:0,class:`tabs-actions`};var xt=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},emits:[`tab-change`,`tab-before-change`,`tab-validate`,`tab-close`,`tab-add`],setup(t,{expose:n,emit:r}){let o=t,s=r,c=G(``),l=W({}),u=()=>({tabs:[],type:`line`,size:`medium`,placement:`top`,animated:!0,closable:!1,addable:!1,showTabHeader:!0,showActions:!1,showCount:!1,validateBeforeSwitch:!1,defaultTab:``}),d=M(()=>{let e=u(),t=o.layoutConfig?.tabs||{};return{...e,...t}}),f=M(()=>d.value.tabs.length>0),m=M(()=>{if(!f.value)return[];let e=new Map;return d.value.tabs.forEach(t=>{e.set(t.key,[])}),o.formItems.forEach((t,n)=>{let r=(o.options?.[n])?.layout?.tab||d.value.tabs[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),d.value.tabs.map(t=>({config:t,items:e.get(t.key)||[]}))}),h=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`tab-item-${t}`},g=async()=>{if(!c.value)return!0;try{return s(`tab-validate`,c.value),l[c.value]=!0,!0}catch(e){return console.error(`[Tabs Layout] 标签验证失败:`,e),l[c.value]=!1,!1}},_=async e=>{if(!e||e===c.value)return!0;if(!m.value.some(t=>t.config.key===e))return!1;try{return d.value.validateBeforeSwitch&&c.value&&!await g()?!1:(c.value&&s(`tab-before-change`,c.value,e),c.value=e,s(`tab-change`,e,m.value.findIndex(t=>t.config.key===e)),!0)}catch(e){return console.error(`[Tabs Layout] 标签切换失败:`,e),!1}},v=e=>{_(e)},y=e=>{s(`tab-close`,e)},b=()=>{s(`tab-add`)},x=()=>{if(!f.value||m.value.length===0)return;let{defaultTab:e}=d.value,t=e||m.value[0]?.config.key;t&&t!==c.value&&(c.value=t,ce(()=>{let e=m.value.findIndex(e=>e.config.key===t);e>=0&&s(`tab-change`,t,e)}))};return H(()=>{x()}),X(M(()=>d.value.tabs.map(e=>e.key).join(`,`)),()=>{c.value&&!d.value.tabs.some(e=>e.key===c.value)&&x()}),X(()=>d.value.defaultTab,e=>{e&&e!==c.value&&_(e)}),n({switchToTab:_,validateCurrentTab:g,currentTab:ue(c),totalTabs:M(()=>m.value.length),tabsWithItems:ue(m)}),(t,n)=>{let r=i,o=E,s=p,l=k,u=A,x=a;return U(),F(`div`,mt,[P(` 无标签配置时的单一面板模式 `),f.value?(U(),F(j,{key:1},[P(` 有标签配置时的分标签模式 `),I(`div`,gt,[R(u,{value:c.value,"onUpdate:value":[n[0]||=e=>c.value=e,v],type:d.value.type,size:d.value.size,placement:d.value.placement,animated:d.value.animated,closable:d.value.closable,addable:d.value.addable,class:`form-tabs`,onClose:y,onAdd:b},{default:Z(()=>[(U(!0),F(j,null,K(m.value,t=>(U(),N(l,{key:t.config.key,name:t.config.key,tab:t.config.title,disabled:t.config.disabled,closable:t.config.closable},{tab:Z(()=>[R(o,{align:`center`,size:8},{default:Z(()=>[t.config.icon?(U(),N(e,{key:0,name:t.config.icon,size:16,class:`tab-icon`},null,8,[`name`])):P(`v-if`,!0),I(`span`,null,J(t.config.title),1),d.value.showCount?(U(),N(r,{key:1,value:t.items.length,max:99,show:t.items.length>0,type:`info`},null,8,[`value`,`show`])):P(`v-if`,!0)]),_:2},1024)]),default:Z(()=>[d.value.showTabHeader&&t.config.description?(U(),F(`div`,_t,[I(`p`,vt,J(t.config.description),1)])):P(`v-if`,!0),I(`div`,yt,[(U(!0),F(j,null,K(t.items,(e,t)=>(U(),N(q(e),{key:h(e,t)}))),128))]),t.items.length===0?(U(),N(s,{key:1,description:`暂无表单项`,class:`tab-empty`})):P(`v-if`,!0)]),_:2},1032,[`name`,`tab`,`disabled`,`closable`]))),128))]),_:1},8,[`value`,`type`,`size`,`placement`,`animated`,`closable`,`addable`]),P(` 标签页操作按钮 `),d.value.showActions?(U(),F(`div`,bt,[R(o,{justify:`space-between`},{default:Z(()=>[R(o,null,{default:Z(()=>[d.value.validateBeforeSwitch?(U(),N(x,{key:0,type:`primary`,size:`small`,onClick:g},{default:Z(()=>[R(e,{name:`carbon:star-check`,size:14,style:{"margin-right":`4px`}}),n[1]||=L(` 验证当前标签 `,-1)]),_:1,__:[1]})):P(`v-if`,!0)]),_:1}),R(o,null,{default:Z(()=>[de(t.$slots,`tab-actions`,{currentTab:c.value,totalTabs:m.value.length,validateTab:g,switchToTab:_},void 0,!0)]),_:3})]),_:3})])):P(`v-if`,!0)])],2112)):(U(),F(`div`,ht,[(U(!0),F(j,null,K(t.formItems,(e,t)=>(U(),N(q(e),{key:h(e,t)}))),128))]))])}}}),[[`__scopeId`,`data-v-330de51f`]]);const St={class:`c-form-steps`},Ct={key:0,class:`single-panel`},wt={class:`steps-container`},Tt={key:0,class:`step-header`},Et={class:`step-title`},Dt={key:0,class:`step-description`},Ot={class:`step-form-items`},kt={class:`steps-actions`};var At=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},emits:[`step-change`,`step-before-change`,`step-validate`],setup(t,{expose:n,emit:r}){let i=t,o=r,c=G(0),l=G(!1),u=W({}),d=M(()=>{let e=i.layoutConfig?.steps||{};return{steps:e.steps||[],vertical:e.vertical||!1,size:e.size||`medium`,showStepHeader:e.showStepHeader!==!1,validateBeforeNext:e.validateBeforeNext||!1,prevButtonText:e.prevButtonText||`上一步`,nextButtonText:e.nextButtonText||`下一步`,defaultStep:e.defaultStep||0}}),f=M(()=>d.value.steps.length>0),p=M(()=>{if(!f.value)return[];let e=new Map;return d.value.steps.forEach(t=>{e.set(t.key,[])}),i.formItems.forEach((t,n)=>{let r=(i.options?.[n])?.layout?.step||d.value.steps[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),d.value.steps.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),m=M(()=>{for(let e=0;e<=c.value;e++)if(u[e]===!1)return`error`;return`process`}),h=M(()=>c.value===0),g=M(()=>c.value===p.value.length-1),_=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`step-item-${t}`},v=async()=>{try{let e=await Promise.resolve(o(`step-validate`,c.value))!==!1;return u[c.value]=e,e}catch(e){return console.error(`[Steps Layout] 步骤验证失败:`,e),u[c.value]=!1,!1}},y=async(e,t=!1)=>{if(e<0||e>=p.value.length)return!1;if(e===c.value)return!0;try{return l.value=!0,t&&d.value.validateBeforeNext&&!await v()?!1:(await o(`step-before-change`,c.value,e),c.value=e,o(`step-change`,c.value,p.value[c.value].config.key),!0)}catch(e){return console.error(`[Steps Layout] 步骤切换失败:`,e),!1}finally{l.value=!1}},b=async()=>{await y(c.value+1,!0)},x=()=>{y(c.value-1)},S=async e=>{p.value[e]?.config.disabled||await y(e,e>c.value)},C=()=>{if(!f.value||p.value.length===0)return;let{defaultStep:e}=d.value;c.value=e>=0&&e<p.value.length&&!p.value[e]?.config.disabled?e:0};return X(M(()=>d.value.steps.map(e=>e.key).join(`,`)),()=>{C()}),H(()=>{C()}),n({nextStep:b,previousStep:x,goToStep:S,validateCurrentStep:v,currentStep:ue(c),totalSteps:M(()=>p.value.length)}),(t,n)=>{let r=D,i=O,o=s,u=a,v=E;return U(),F(`div`,St,[P(` 无步骤配置时的单一面板模式 `),f.value?(U(),F(j,{key:1},[P(` 有步骤配置时的分步骤模式 `),I(`div`,wt,[P(` 步骤指示器 `),R(i,{current:c.value+1,status:m.value,size:d.value.size,vertical:d.value.vertical,class:`steps-indicator`},{default:Z(()=>[(U(!0),F(j,null,K(p.value,e=>(U(),N(r,{key:e.config.key,title:e.config.title,description:e.config.description,disabled:e.config.disabled},null,8,[`title`,`description`,`disabled`]))),128))]),_:1},8,[`current`,`status`,`size`,`vertical`]),P(` 步骤内容区域 `),R(o,{class:`steps-content`,bordered:!1},{default:Z(()=>[(U(!0),F(j,null,K(p.value,(e,t)=>ge((U(),F(`div`,{key:e.config.key,class:`step-panel`},[P(` 步骤标题和描述 `),d.value.showStepHeader?(U(),F(`div`,Tt,[I(`h3`,Et,J(e.config.title),1),e.config.description?(U(),F(`p`,Dt,J(e.config.description),1)):P(`v-if`,!0)])):P(`v-if`,!0),P(` 步骤内的表单项 `),I(`div`,Ot,[(U(!0),F(j,null,K(e.items,(e,t)=>(U(),N(q(e),{key:_(e,t)}))),128))])])),[[me,c.value===t]])),128))]),_:1}),P(` 步骤操作按钮 `),I(`div`,kt,[R(v,{justify:`space-between`},{default:Z(()=>[c.value>0?(U(),N(u,{key:0,disabled:l.value,onClick:x},{default:Z(()=>[R(e,{name:`mdi:chevron-left-first`,size:16,style:{"margin-right":`4px`}}),L(` `+J(d.value.prevButtonText),1)]),_:1},8,[`disabled`])):P(`v-if`,!0),n[0]||=I(`div`,null,null,-1),R(v,null,{default:Z(()=>[c.value<p.value.length-1?(U(),N(u,{key:0,type:`primary`,loading:l.value,onClick:b},{default:Z(()=>[L(J(d.value.nextButtonText)+` `,1),R(e,{name:`mdi:chevron-right-last`,size:16,style:{"margin-left":`4px`}})]),_:1},8,[`loading`])):P(`v-if`,!0),de(t.$slots,`step-actions`,{currentStep:c.value,totalSteps:p.value.length,isFirstStep:h.value,isLastStep:g.value,nextStep:b,previousStep:x,goToStep:S},void 0,!0)]),_:3})]),_:3,__:[0]})])])],2112)):(U(),F(`div`,Ct,[(U(!0),F(j,null,K(t.formItems,(e,t)=>(U(),N(q(e),{key:_(e,t)}))),128))]))])}}}),[[`__scopeId`,`data-v-20345bf3`]]);const jt={maxFields:20,autoSave:!1,enableSort:!0,showControls:!0,showItemControls:!0},Mt=[{label:`文本输入`,value:`input`},{label:`数字输入`,value:`inputNumber`},{label:`多行文本`,value:`textarea`},{label:`下拉选择`,value:`select`},{label:`开关切换`,value:`switch`},{label:`评分组件`,value:`rate`}],Nt=()=>{let e=W({config:{...jt},baseFields:[],dynamicFields:[],hiddenFieldIds:new Set,fieldCounter:0,isInitialized:!1}),t=M(()=>[...e.baseFields,...e.dynamicFields.map(t=>({...t,show:!e.hiddenFieldIds.has(t.prop)}))]),n=M(()=>t.value.filter(e=>e.show!==!1)),r=M(()=>e.dynamicFields.length),i=M(()=>e.hiddenFieldIds.size),a=M(()=>e.dynamicFields.length<e.config.maxFields),o=M(()=>e.hiddenFieldIds.size===0);return{state:ue(e),allFields:t,visibleFields:n,dynamicFieldsCount:r,hiddenFieldsCount:i,canAddMoreFields:a,allVisible:o,FIELD_TYPE_OPTIONS:Mt,addField:(t={})=>{if(!a.value){console.warn(`[useDynamicFormState] 已达到最大字段数量限制`);return}e.fieldCounter++;let n=t.type||Mt[Math.floor(Math.random()*Mt.length)].value,r={id:`dynamic_field_${e.fieldCounter}`,type:n,prop:t.prop||`dynamic_${e.fieldCounter}`,label:t.label||`动态字段 ${e.fieldCounter}`,placeholder:t.placeholder||`请输入${t.label||`内容`}`,visible:!0,removable:!0,created:Date.now(),layout:t.layout||{span:12},...t};e.dynamicFields.push(r),console.log(`[useDynamicFormState] 添加字段:`,r)},removeField:t=>{if(e.dynamicFields.length===0){console.warn(`[useDynamicFormState] 没有可移除的动态字段`);return}let n=t??e.dynamicFields.length-1;if(n<0||n>=e.dynamicFields.length){console.warn(`[useDynamicFormState] 字段索引超出范围`);return}let r=e.dynamicFields.splice(n,1)[0];r&&(e.hiddenFieldIds.delete(r.prop),console.log(`[useDynamicFormState] 移除字段:`,r.prop))},clearDynamicFields:()=>{console.log(`[useDynamicFormState] 清空动态字段:`,e.dynamicFields.length),e.dynamicFields.forEach(t=>e.hiddenFieldIds.delete(t.prop)),e.dynamicFields.length=0,e.fieldCounter=0},toggleFieldVisibility:t=>{e.hiddenFieldIds.has(t)?(e.hiddenFieldIds.delete(t),console.log(`[useDynamicFormState] 显示字段:`,t)):(e.hiddenFieldIds.add(t),console.log(`[useDynamicFormState] 隐藏字段:`,t))},toggleAllVisibility:()=>{o.value?(e.dynamicFields.forEach(t=>{e.hiddenFieldIds.add(t.prop)}),console.log(`[useDynamicFormState] 隐藏所有动态字段`)):(e.hiddenFieldIds.clear(),console.log(`[useDynamicFormState] 显示所有字段`))},updateConfig:t=>{Object.assign(e.config,t),console.log(`[useDynamicFormState] 更新配置:`,t)},exportConfig:()=>{let t={baseFields:e.baseFields,dynamicFields:e.dynamicFields,config:e.config,hiddenFields:Array.from(e.hiddenFieldIds),timestamp:Date.now()};return JSON.stringify(t,null,2)},initialize:(t,n={})=>{console.log(`[useDynamicFormState] 初始化状态:`,{baseFieldsCount:t.length,config:n}),e.baseFields=[...t],Object.assign(e.config,n),e.isInitialized=!0,console.log(`[useDynamicFormState] 初始化完成`)}}},Pt=Symbol(`dynamicFormState`),Ft={class:`c-form-dynamic`},It={key:0,class:`dynamic-controls`},Lt={class:`max-fields-config`},Rt={class:`dynamic-stats`},zt={class:`dynamic-controls-fallback`},Bt={class:`dynamic-form-items`};var Vt=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},dynamicFormState:{default:null}},emits:[`field-add`,`field-remove`,`fields-clear`],setup(t,{expose:n}){let o=t,c=oe(Pt,null),l=M(()=>o.dynamicFormState||c),u=M(()=>!!l.value),d=M(()=>o.layoutConfig?.dynamic?.grid?.cols??24),f=M(()=>o.layoutConfig?.dynamic?.grid?.gutter??16),p=M(()=>o.layoutConfig?.dynamic?.controls?.showControls!==!1),m=M(()=>l.value?.state.config.maxFields??o.layoutConfig?.dynamic?.dynamic?.maxFields??50),h=M(()=>l.value?.dynamicFieldsCount.value??0),v=M(()=>l.value?.canAddMoreFields.value??!1),b=M(()=>o.formItems.length),x=(e,t)=>e.key?.toString()||e.props?.path||`dynamic-item-${t}`,S=e=>{let t=o.options?.[e]?.layout?.span;return typeof t==`number`&&t>0&&t<=d.value?t:Math.min(12,d.value)},C=e=>{if(!l.value)return!1;let t=e.props?.path||e.key?.toString()||``;return l.value.state.dynamicFields.some(e=>e.prop===t)};return n({addField:()=>l.value?.addField(),removeField:()=>l.value?.removeField(),clearAllDynamic:()=>l.value?.clearDynamicFields(),isDynamicStateAvailable:u,dynamicState:l}),import.meta.env?.DEV&&he(()=>{let{options:e,formItems:t}=o;e&&e.length!==t.length&&console.warn(`[Dynamic Layout] 配置项数量(${e.length})与表单项数量(${t.length})不匹配`),console.log(`[Dynamic Layout]`,u.value?`动态模式已启用`:`运行在静态模式`,{totalFields:b.value,dynamicFields:h.value,stateSource:o.dynamicFormState?`props透传`:`inject注入`})}),(t,n)=>{let o=i,c=a,w=E,T=y,D=te,O=s,ee=r,k=_,A=g;return U(),F(`div`,Ft,[P(` 动态控制面板 `),p.value&&u.value?(U(),F(`div`,It,[R(O,{size:`small`,title:`动态表单控制`,bordered:!1},{"header-extra":Z(()=>[R(o,{value:h.value,type:`warning`},{default:Z(()=>[R(e,{name:`mdi:layers`,size:16})]),_:1},8,[`value`])]),default:Z(()=>[R(w,{justify:`space-between`,align:`center`},{default:Z(()=>[R(w,null,{default:Z(()=>[R(c,{size:`small`,type:`primary`,disabled:!v.value,onClick:n[0]||=e=>l.value.addField()},{icon:Z(()=>[R(e,{name:`mdi:plus`,size:14})]),default:Z(()=>[L(` 添加字段 (`+J(h.value)+`/`+J(m.value)+`) `,1)]),_:1},8,[`disabled`]),R(c,{size:`small`,type:`warning`,disabled:h.value===0,onClick:n[1]||=e=>l.value.removeField()},{icon:Z(()=>[R(e,{name:`mdi:minus`,size:14})]),default:Z(()=>[n[4]||=L(` 移除字段 `,-1)]),_:1,__:[4]},8,[`disabled`]),R(c,{size:`small`,type:`error`,disabled:h.value===0,onClick:n[2]||=e=>l.value.clearDynamicFields()},{icon:Z(()=>[R(e,{name:`mdi:delete-sweep`,size:14})]),default:Z(()=>[n[5]||=L(` 清空动态 `,-1)]),_:1,__:[5]},8,[`disabled`])]),_:1}),P(` 最大字段数配置 `),I(`div`,Lt,[n[6]||=I(`span`,null,`最大字段数:`,-1),R(T,{value:m.value,"onUpdate:value":n[3]||=e=>e&&l.value.updateConfig({maxFields:e}),min:5,max:50,size:`small`,style:{width:`100px`}},null,8,[`value`])])]),_:1}),I(`div`,Rt,[R(w,null,{default:Z(()=>[R(D,{type:`info`},{default:Z(()=>[L(`总字段: `+J(b.value),1)]),_:1}),R(D,{type:`warning`},{default:Z(()=>[L(`动态: `+J(h.value),1)]),_:1})]),_:1})])]),_:1})])):p.value&&!u.value?(U(),F(j,{key:1},[P(` 状态不可用时的提示 `),I(`div`,zt,[R(O,{size:`small`,title:`动态表单控制 (静态模式)`,bordered:!1},{default:Z(()=>[R(ee,{type:`info`,"show-icon":``},{icon:Z(()=>[R(e,{name:`mdi:information-outline`,size:16})]),default:Z(()=>[n[7]||=L(` 当前为静态模式,如需动态功能请在父组件中提供动态表单状态。 `,-1)]),_:1,__:[7]})]),_:1})])],2112)):P(`v-if`,!0),P(` 表单项渲染区域 `),I(`div`,Bt,[R(A,{cols:d.value,"x-gap":f.value,"y-gap":f.value},{default:Z(()=>[(U(!0),F(j,null,K(t.formItems,(e,t)=>(U(),N(k,{key:x(e,t),span:S(t)},{default:Z(()=>[I(`div`,{class:V([`dynamic-item-wrapper`,{"is-dynamic-field":C(e)}])},[(U(),N(q(e)))],2)]),_:2},1032,[`span`]))),128))]),_:1},8,[`cols`,`x-gap`,`y-gap`])])])}}}),[[`__scopeId`,`data-v-c2b155a1`]]);const Ht={class:`custom-layout`},Ut={class:`toolbar-content`},Wt={class:`mode-section`},Gt={class:`stats-section`},Kt={class:`stat-item`},qt={class:`stat-value`},Jt={class:`stat-item`},Yt={class:`stat-value`},Xt={class:`actions-section`},Zt={class:`design-tools`},Qt={class:`tool-group`},$t={key:0,class:`canvas-hint`},en={class:`areas-container`},tn={class:`area-header`},nn={class:`area-info`},rn=[`onClick`],an={class:`area-controls`},on={class:`field-preview`},sn={class:`field-label`},cn={class:`field-type`},ln={key:0,class:`area-drop-zone`},un={class:`field-name`},dn={class:`field-type-tag`},fn={key:0,class:`empty-layout`},pn={key:1,class:`form-container`},mn={class:`form-areas`};var hn=t(z({__name:`index`,props:{options:{default:()=>[]},formItems:{default:()=>[]},formData:{default:()=>({})}},emits:[`fields-change`,`export-data`],setup(e,{emit:t}){let n=e,r=t,i=G(!0),c=G([]),l=G([]),u=G(``),d=M(()=>n.options?.length>0?n.options:n.formItems?.map(e=>{let t=e.props;return{prop:t?.path||``,label:t?.label||t?.path||``,type:`input`,show:!0}}).filter(e=>e.prop)||[]),f=M(()=>c.value.reduce((e,t)=>e+t.fields.length,0)),m=()=>`${Date.now()}-${Math.random().toString(36).substring(2,11)}`,h=e=>({input:`输入框`,select:`下拉框`,radio:`单选框`,checkbox:`复选框`,textarea:`文本域`,date:`日期`,number:`数字`})[e]||e,g=e=>n.formItems?.find(t=>t.props?.path===e.prop)||null,_=e=>{let t={id:m(),title:`${e===`horizontal`?`水平`:e===`vertical`?`垂直`:`网格`}区域`,type:e,fields:[]};c.value.push(t)},y=e=>{let t=c.value.findIndex(t=>t.id===e);t!==-1&&c.value.splice(t,1)},b=e=>({...e,id:`${e.prop}-${m()}`}),x=(e,t)=>{let n=c.value.find(t=>t.id===e);if(n){let e=n.fields.findIndex(e=>e.id===t);e!==-1&&n.fields.splice(e,1)}},S=()=>{let e=JSON.stringify(c.value,null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`layout-config-${Date.now()}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)},C=()=>{c.value=[]},w=()=>{r(`export-data`,{layout:c.value,formData:n.formData,timestamp:new Date().toISOString()})};return he(()=>{let e=new Set(c.value.flatMap(e=>e.fields.map(e=>e.prop)));l.value=d.value.filter(t=>!e.has(t.prop)).map(e=>({...e,id:e.prop}))}),X(()=>c.value,()=>{r(`fields-change`,c.value.flatMap(e=>e.fields.map(e=>({...e,id:void 0}))))},{deep:!0}),(e,t)=>{let n=a,r=o,d=s,m=v,T=te,E=p;return U(),F(`div`,Ht,[P(` 顶部工具栏 `),R(d,{bordered:!1,class:`toolbar-card`},{default:Z(()=>[I(`div`,Ut,[P(` 模式切换 `),I(`div`,Wt,[t[12]||=I(`span`,{class:`section-label`},`自定义模式:`,-1),R(r,null,{default:Z(()=>[R(n,{type:i.value?`primary`:`default`,onClick:t[0]||=e=>i.value=!0,size:`small`},{default:Z(()=>t[10]||=[L(` 🎨 设计模式 `,-1)]),_:1,__:[10]},8,[`type`]),R(n,{type:i.value?`default`:`primary`,onClick:t[1]||=e=>i.value=!1,size:`small`},{default:Z(()=>t[11]||=[L(` 📝 填写模式 `,-1)]),_:1,__:[11]},8,[`type`])]),_:1})]),P(` 统计信息 `),I(`div`,Gt,[I(`div`,Kt,[I(`div`,qt,J(c.value.length),1),t[13]||=I(`div`,{class:`stat-label`},`自定义区域`,-1)]),I(`div`,Jt,[I(`div`,Yt,J(f.value),1),t[14]||=I(`div`,{class:`stat-label`},`字段总数`,-1)])]),P(` 操作按钮 `),I(`div`,Xt,[i.value?(U(),F(j,{key:0},[R(n,{secondary:``,onClick:S,size:`small`},{default:Z(()=>t[15]||=[L(` 💾 保存布局 `,-1)]),_:1,__:[15]}),R(n,{secondary:``,onClick:C,size:`small`},{default:Z(()=>t[16]||=[L(` 🔄 重置布局 `,-1)]),_:1,__:[16]})],64)):(U(),N(n,{key:1,secondary:``,onClick:w,size:`small`},{default:Z(()=>t[17]||=[L(` 📊 导出数据 `,-1)]),_:1,__:[17]}))])])]),_:1}),P(` 设计模式工具面板 `),i.value?(U(),N(d,{key:0,class:`design-panel`,title:`🎨 设计工具`},{default:Z(()=>[I(`div`,Zt,[I(`div`,Qt,[t[21]||=I(`span`,{class:`group-label`},`添加区域:`,-1),R(n,{onClick:t[2]||=e=>_(`horizontal`),size:`small`},{default:Z(()=>t[18]||=[L(` ➡️ 水平区域 `,-1)]),_:1,__:[18]}),R(n,{onClick:t[3]||=e=>_(`vertical`),size:`small`},{default:Z(()=>t[19]||=[L(` ⬇️ 垂直区域 `,-1)]),_:1,__:[19]}),R(n,{onClick:t[4]||=e=>_(`grid`),size:`small`},{default:Z(()=>t[20]||=[L(` ⚏ 网格区域 `,-1)]),_:1,__:[20]})])])]),_:1})):P(`v-if`,!0),P(` 主画布区域 `),I(`div`,{class:V([`layout-canvas`,{"design-mode":i.value}])},[P(` 设计模式 `),i.value?(U(),F(j,{key:0},[c.value.length===0?(U(),F(`div`,$t,t[22]||=[I(`div`,{class:`hint-content`},[I(`h3`,null,`🎨 开始自定义你的布局`),I(`p`,null,`点击上方按钮添加区域`)],-1)])):(U(),F(j,{key:1},[P(` 区域列表 `),I(`div`,en,[(U(!0),F(j,null,K(c.value,e=>(U(),F(`div`,{key:e.id,class:V([`custom-area`,`area-${e.type}`])},[I(`div`,tn,[I(`div`,nn,[u.value===e.id?(U(),N(m,{key:0,value:e.title,"onUpdate:value":t=>e.title=t,size:`small`,onBlur:t[5]||=e=>u.value=``,onKeyup:t[6]||=_e(e=>u.value=``,[`enter`]),class:`title-input`},null,8,[`value`,`onUpdate:value`])):(U(),F(`span`,{key:1,class:`area-title`,onClick:t=>u.value=e.id},J(e.title),9,rn)),R(T,{size:`small`},{default:Z(()=>[L(J(e.fields.length)+` 字段`,1)]),_:2},1024)]),I(`div`,an,[R(n,{text:``,onClick:t=>y(e.id),size:`tiny`,type:`error`,title:`删除区域`},{default:Z(()=>t[23]||=[L(` 🗑️ `,-1)]),_:2,__:[23]},1032,[`onClick`])])]),P(` 字段容器(可拖入) `),R(Y(ve),{modelValue:e.fields,"onUpdate:modelValue":t=>e.fields=t,class:`area-fields`,group:{name:`form-fields`,pull:!0,put:!0},animation:200,"ghost-class":`field-ghost`,"item-key":`id`},{default:Z(()=>[(U(!0),F(j,null,K(e.fields,r=>(U(),F(`div`,{key:r.id,class:`field-item`},[I(`div`,on,[t[25]||=I(`span`,{class:`drag-handle`},`⠿`,-1),I(`span`,sn,J(r.label||r.prop),1),I(`span`,cn,J(h(r.type)),1),R(n,{text:``,size:`tiny`,type:`error`,onClick:t=>x(e.id,r.id),title:`移出字段`},{default:Z(()=>t[24]||=[L(` ✕ `,-1)]),_:2,__:[24]},1032,[`onClick`])])]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`]),e.fields.length===0?(U(),F(`div`,ln,` 从下方字段池拖拽字段到这里 `)):P(`v-if`,!0)],2))),128))])],2112)),P(` 字段池(可拖出) `),R(d,{class:`field-pool`,title:`📦 可用字段`},{default:Z(()=>[R(Y(ve),{modelValue:l.value,"onUpdate:modelValue":t[7]||=e=>l.value=e,class:`pool-fields-grid`,group:{name:`form-fields`,pull:`clone`,put:!0},animation:200,sort:!1,"ghost-class":`field-ghost`,"item-key":`id`,clone:b},{default:Z(()=>[(U(!0),F(j,null,K(l.value,e=>(U(),F(`div`,{key:e.id,class:`pool-field`},[t[26]||=I(`span`,{class:`drag-handle`},`⠿`,-1),I(`span`,un,J(e.label||e.prop),1),I(`span`,dn,J(h(e.type)),1)]))),128))]),_:1},8,[`modelValue`])]),_:1})],64)):(U(),F(j,{key:1},[P(` 填写模式 `),c.value.length===0?(U(),F(`div`,fn,[R(E,{description:`尚未设计布局`},{extra:Z(()=>[R(n,{onClick:t[8]||=e=>i.value=!0,type:`primary`},{default:Z(()=>t[27]||=[L(` 🎨 开始设计 `,-1)]),_:1,__:[27]})]),_:1})])):(U(),F(`div`,pn,[I(`div`,mn,[(U(!0),F(j,null,K(c.value,e=>(U(),F(`div`,{key:e.id,class:V([`form-area`,`area-${e.type}`])},[e.fields.length>0?(U(),N(d,{key:0,title:e.title},{default:Z(()=>[I(`div`,{class:V([`area-form-items`,`layout-${e.type}`])},[(U(!0),F(j,null,K(e.fields,e=>(U(),N(q(g(e)),{key:e.prop}))),128))],2)]),_:2},1032,[`title`])):(U(),N(E,{key:1,description:`此区域暂无字段`,size:`small`},{extra:Z(()=>[R(n,{onClick:t[9]||=e=>i.value=!0,size:`small`,secondary:``},{default:Z(()=>t[28]||=[L(` 🎨 添加字段 `,-1)]),_:1,__:[28]})]),_:1}))],2))),128))])]))],64))],2)])}}}),[[`__scopeId`,`data-v-fe093284`]]);const gn=z({name:`C_Form`,__name:`index`,props:{options:{},modelValue:{},config:{default:()=>({})}},emits:[`submit`,`update:modelValue`,`validate-success`,`validate-error`],setup(e,{expose:t,emit:r}){let i={default:Fe,inline:Ie,grid:He,card:pt,tabs:xt,steps:At,dynamic:Vt,custom:hn},o={NFormItem:h,NInput:v,NInputNumber:y,NSwitch:ee,NSlider:T,NRate:C,NDatePicker:f,NTimePicker:ne,NCascader:c,NColorPicker:d,NSelect:w,NCheckboxGroup:u,NCheckbox:l,NRadioGroup:S,NRadio:x,NUpload:ie,NButton:a,NSpace:E,NTooltip:re,C_Editor:n},s=e,p=r,g=M(()=>Se(s.config)),_=G(null),{formModel:b,formRules:D,visibleOptions:O,initialize:k,handleFieldChange:A,validate:te,validateField:j,validateStep:F,validateTab:I,validateDynamicFields:z,validateCustomGroup:B,clearValidation:oe,getModel:V,setFields:le,resetFields:H,setFieldValue:W,getFieldValue:ue,setFieldsValue:K,handleSubmit:fe,handleReset:J,isDirty:pe,getChangedFields:me,isFieldDirty:he,markAsClean:ge,asyncOptionsCache:_e,asyncLoadingMap:ve}=De(M(()=>s.options),g,_,p),{formItems:ye}=Ne({formModel:b,visibleOptions:O,config:g,handleFieldChange:A,componentMap:o,instanceSlots:ae()?.slots,asyncOptionsCache:_e,asyncLoadingMap:ve});X(()=>g.value.initialValues,e=>{e&&g.value.mode===`edit`&&(Object.assign(b,e),ce(()=>ge()))},{immediate:!0});let be=M(()=>i[g.value.layout]||i.default),xe=M(()=>({type:g.value.layout,grid:g.value.grid,inline:g.value.inline,card:g.value.card,tabs:g.value.tabs,steps:g.value.steps,dynamic:g.value.dynamic,custom:g.value.custom})),Q=M(()=>Ce(g.value)),$=(e,...t)=>{let n=g.value[e];n?.(...t)},we=e=>{g.value.onFieldsChange?.(e)},Te=(e,t)=>{g.value.onStepChange?.(e,t)},Ee=async(e,t)=>(g.value.onStepBeforeChange?.(e,t),!0),Oe=async e=>{try{let t=g.value.steps?.steps?.[e]?.key;if(!t)return!0;let n=s.options.filter(e=>e.layout?.step===t).map(e=>e.prop);return n.length===0?!0:(await j(n),g.value.onStepValidate?.(e),!0)}catch(t){return console.warn(`[C_Form] 步骤 ${e} 验证失败:`,t),!1}};return X(()=>s.modelValue,e=>{e&&Object.assign(b,e)},{immediate:!0,deep:!0}),t({validate:te,validateField:j,validateStep:F,validateTab:I,validateDynamicFields:z,validateCustomGroup:B,clearValidation:oe,getModel:V,setFields:le,resetFields:H,setFieldValue:W,getFieldValue:ue,setFieldsValue:K,formRef:_,formModel:b,initialize:k,layoutType:M(()=>g.value.layout),shouldShowDefaultActions:Q,isDirty:pe,getChangedFields:me,isFieldDirty:he,markAsClean:ge,asyncLoadingMap:ve}),(e,t)=>(U(),N(Y(m),se({ref_key:`formRef`,ref:_,model:Y(b),rules:Y(D),"validate-on-rule-change":!1,"label-placement":g.value.labelPlacement,"label-width":g.value.labelWidth,size:g.value.size,disabled:g.value.disabled,readonly:g.value.readonly},e.$attrs),{default:Z(()=>[P(` 布局组件渲染 `),(U(),N(q(be.value),{"form-items":Y(ye),"layout-config":xe.value,options:Y(O),"form-data":Y(b),onTabChange:t[0]||=e=>$(`onTabChange`,e),onTabValidate:t[1]||=e=>$(`onTabValidate`,e),onStepChange:Te,onStepBeforeChange:Ee,onStepValidate:Oe,onFieldAdd:t[2]||=e=>$(`onFieldAdd`,e),onFieldRemove:t[3]||=e=>$(`onFieldRemove`,e),onFieldToggle:t[4]||=(e,t)=>g.value.onFieldToggle?.(e,t),onFieldsClear:t[5]||=e=>$(`onFieldsClear`),onRenderModeChange:t[6]||=e=>$(`onRenderModeChange`,e),onGroupToggle:t[7]||=(e,t)=>g.value.onGroupToggle?.(e,t),onGroupReset:t[8]||=e=>$(`onGroupReset`,e),onValidateSuccess:t[9]||=e=>p(`validate-success`,e),onValidateError:t[10]||=e=>p(`validate-error`,e),onFieldsChange:we},null,40,[`form-items`,`layout-config`,`options`,`form-data`])),P(` 表单操作按钮区域(只在特定布局中显示) `),Q.value?(U(),N(Y(h),{key:0,style:{"margin-top":`20px`}},{default:Z(()=>[de(e.$slots,`action`,{form:_.value,model:Y(b),validate:Y(te),validateField:Y(j),reset:Y(H),setFields:Y(le),getModel:Y(V),clearValidation:Y(oe)},()=>[R(Y(E),null,{default:Z(()=>[R(Y(a),{type:`primary`,onClick:Y(fe)},{default:Z(()=>t[11]||=[L(`提交`,-1)]),_:1,__:[11]},8,[`onClick`]),R(Y(a),{onClick:Y(J)},{default:Z(()=>t[12]||=[L(`重置`,-1)]),_:1,__:[12]},8,[`onClick`])]),_:1})])]),_:3})):P(`v-if`,!0)]),_:3},16,[`model`,`rules`,`label-placement`,`label-width`,`size`,`disabled`,`readonly`]))}});export{je as a,we as c,Se as d,Ce as f,Nt as i,be as l,Pt as n,Ne as o,Mt as r,De as s,gn as t,xe as u};
|
|
1
|
+
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{t as n}from"./C_Editor2.js";import{NAlert as r,NBadge as i,NButton as a,NButtonGroup as o,NCard as s,NCascader as c,NCheckbox as l,NCheckboxGroup as u,NColorPicker as d,NDatePicker as f,NEmpty as p,NForm as m,NFormItem as h,NGrid as g,NGridItem as _,NInput as v,NInputNumber as y,NProgress as b,NRadio as x,NRadioGroup as S,NRate as C,NSelect as w,NSlider as T,NSpace as E,NStep as D,NSteps as O,NSwitch as ee,NTabPane as k,NTabs as te,NTag as A,NTimePicker as ne,NTooltip as re,NUpload as ie}from"naive-ui";import{Fragment as j,computed as M,createBlock as N,createCommentVNode as P,createElementBlock as F,createElementVNode as I,createTextVNode as L,createVNode as R,defineComponent as z,getCurrentInstance as ae,h as B,inject as oe,mergeProps as se,nextTick as ce,normalizeClass as V,normalizeStyle as le,onMounted as H,openBlock as U,reactive as W,readonly as G,ref as K,renderList as q,renderSlot as ue,resolveComponent as de,resolveDynamicComponent as J,toDisplayString as Y,unref as X,vShow as fe,watch as Z,watchEffect as pe,withCtx as Q,withDirectives as me,withKeys as he}from"vue";import{VueDraggable as ge}from"vue-draggable-plus";import{mergeRules as _e}from"@robot-admin/form-validate";const ve={layout:`default`,labelPlacement:`left`,labelWidth:`auto`,size:`medium`,disabled:!1,readonly:!1,showActions:!0,validateOnChange:!1,mode:`create`},ye=[`steps`,`custom`];function be(e){return{...ve,...e}}function xe(e){return!(e.showActions===!1||ye.includes(e.layout))}function Se(e,t){if(Object.is(e,t))return!0;if(e==null||t==null)return e===t;if(typeof e!=typeof t)return!1;if(Array.isArray(e))return!Array.isArray(t)||e.length!==t.length?!1:e.every((e,n)=>Se(e,t[n]));if(typeof e==`object`){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length?n.every(n=>Se(e[n],t[n])):!1}return!1}function Ce(e){return JSON.parse(JSON.stringify(e))}function $(e){let t=K({}),n=M(()=>r().length>0);function r(){let n=t.value,r=new Set([...Object.keys(n),...Object.keys(e)]),i=[];for(let t of r)Se(n[t],e[t])||i.push(t);return i}function i(n){return!Se(t.value[n],e[n])}function a(){t.value=Ce(e)}return{isDirty:n,getChangedFields:r,isFieldDirty:i,markAsClean:a}}const we={input:``,textarea:``,editor:``,select:null,datePicker:null,daterange:null,timePicker:null,cascader:null,colorPicker:null,checkbox:null,upload:[],radio:``,inputNumber:null,slider:null,rate:null,switch:null},Te=e=>we[e]??null;function Ee(e,t,n,r){let i=W({}),a=W({}),o=K({}),s=K({}),{isDirty:c,getChangedFields:l,isFieldDirty:u,markAsClean:d}=$(i),f=M(()=>e.value.filter(e=>e.show===!1?!1:e.showWhen?e.showWhen(i):!0)),p=()=>{try{Object.keys(a).forEach(e=>delete a[e]),e.value.forEach(e=>{e.prop in i||(i[e.prop]=e.value===void 0?Te(e.type):e.value),m(e)}),ce(()=>d()),_()}catch(e){console.error(`[C_Form] 初始化失败:`,e)}};function m(e){let t=[...e.rulesWhen?e.rulesWhen(i):e.rules??[]];if(e.crossFieldValidator){let n=e.crossFieldValidator;t.push({validator:()=>{let e=n(i);return e?Promise.reject(Error(e)):Promise.resolve()},trigger:[`change`,`blur`]})}if(t.length===0){delete a[e.prop];return}let n=t.every(e=>typeof e.validator==`function`);a[e.prop]=n?_e(t):t}function h(){let t=e.value.filter(e=>e.rulesWhen||e.crossFieldValidator);for(let e of t)m(e)}async function g(e){if(!e.asyncOptions)return;let{prop:t}=e;s.value[t]=!0;try{let n=await e.asyncOptions(i);o.value[t]=n}catch(e){console.warn(`[C_Form] asyncOptions 加载失败 (${t}):`,e),o.value[t]=[]}finally{s.value[t]=!1}}function _(){e.value.filter(e=>e.asyncOptions).forEach(e=>g(e))}function v(){let t=e.value.filter(e=>e.valueWhen);for(let e of t){let t=e.valueWhen(i);t!==void 0&&i[e.prop]!==t&&(i[e.prop]=t)}}let y=n=>{v(),h(),e.value.filter(e=>{if(!e.asyncOptions)return!1;let t=e.dependsOn;return t?Array.isArray(t)?t.includes(n):t===n:!1}).forEach(e=>g(e)),t.value.validateOnChange&&ce(()=>{x(n).catch(()=>{})})},b=async()=>{if(!n.value)throw Error(`[C_Form] 表单引用不存在`);try{await n.value.validate(),r(`validate-success`,O())}catch(e){throw r(`validate-error`,e),e}},x=async e=>{if(!n.value)throw Error(`[C_Form] 表单引用不存在`);let t=Array.isArray(e)?e:[e];try{await n.value.validate()}catch(e){if(!Array.isArray(e))throw e;let n=e.filter(e=>e?.some(e=>{let n=e;return typeof n.field==`string`&&t.includes(n.field)}));if(n.length>0)throw n}},S=e=>{n.value&&(e?(Array.isArray(e)?e:[e]).forEach(e=>{i[e]!==void 0&&(i[e]=i[e])}):n.value.restoreValidation())},C=async(t,n)=>{try{let n=e.value.filter(t).map(e=>e.prop);return n.length===0||await x(n),!0}catch(e){return console.warn(`[C_Form] ${n}验证失败:`,e),!1}},w=async e=>{let n=t.value.steps?.steps?.[e]?.key;return n?C(e=>e.layout?.step===n,`步骤 ${e} `):!0},T=async e=>C(t=>t.layout?.tab===e,`标签页 ${e} `),E=async()=>C(e=>!!e.layout?.dynamic,`动态字段 `),D=async e=>C(t=>t.layout?.group===e,`自定义分组 ${e} `),O=()=>({...i}),ee=e=>{Object.assign(i,e)},k=()=>{try{S(),e.value.forEach(e=>{let t=e.value===void 0?Te(e.type):e.value;i[e.prop]=t}),ce(()=>d())}catch(e){console.error(`[C_Form] 重置表单失败:`,e)}};return H(()=>{p(),Z(()=>e.value,()=>p(),{deep:!0}),Z(()=>i,e=>r(`update:modelValue`,{...e}),{deep:!0})}),{formModel:i,formRules:a,visibleOptions:f,initialize:p,handleFieldChange:y,validate:b,validateField:x,validateStep:w,validateTab:T,validateDynamicFields:E,validateCustomGroup:D,clearValidation:S,getModel:O,setFields:ee,resetFields:k,setFieldValue:async(e,t,n=!1)=>{i[e]=t,n&&await x(e)},getFieldValue:e=>i[e],setFieldsValue:async(e,t=!1)=>{Object.assign(i,e),t&&await b()},handleSubmit:async()=>{try{await b(),r(`submit`,{model:O(),form:n.value})}catch(e){console.warn(`[C_Form] 表单验证失败:`,e)}},handleReset:k,isDirty:c,getChangedFields:l,isFieldDirty:u,markAsClean:d,asyncOptionsCache:o,asyncLoadingMap:s}}function De(e,t,n){return e===void 0?t:typeof e==`function`?e(n):e}function Oe(e){return{input:t=>B(e.NInput,{...t}),textarea:t=>B(e.NInput,{...t,type:`textarea`}),inputNumber:t=>B(e.NInputNumber,{...t}),switch:t=>B(e.NSwitch,{...t}),slider:t=>B(e.NSlider,{...t}),rate:t=>B(e.NRate,{...t}),datePicker:t=>B(e.NDatePicker,{...t}),daterange:t=>B(e.NDatePicker,{...t,type:`daterange`}),timePicker:t=>B(e.NTimePicker,{...t}),cascader:t=>B(e.NCascader,{...t}),colorPicker:t=>B(e.NColorPicker,{...t}),select:(t,n)=>B(e.NSelect,{...t,options:n.children?.map(e=>({value:e.value,label:e.label,disabled:e.disabled}))||[]}),checkbox:(t,n)=>B(e.NCheckboxGroup,{...t},{default:()=>B(e.NSpace,{},{default:()=>n.children?.map(t=>B(e.NCheckbox,{value:t.value,label:t.label,disabled:t.disabled,key:String(t.value)}))||[]})}),radio:(t,n)=>B(e.NRadioGroup,{...t},{default:()=>B(e.NSpace,{},{default:()=>n.children?.map(t=>B(e.NRadio,{value:t.value,disabled:t.disabled,key:String(t.value)},{default:()=>t.label}))||[]})}),upload:(t,n,r,i)=>B(e.NUpload,{fileList:t.value||[],"onUpdate:fileList":e=>{t[`onUpdate:value`]?.(e)},...n.attrs},{trigger:()=>i?.slots?.uploadClick?.()||B(e.NButton,{type:`primary`},{default:()=>`选择文件`}),tip:()=>i?.slots?.uploadTip?.()||null}),editor:(t,n,r)=>B(e.C_Editor,{editorId:`editor-${n.prop}`,modelValue:t.value||``,placeholder:n.placeholder,disabled:r.disabled,readonly:r.readonly,"onUpdate:modelValue":e=>{t[`onUpdate:value`]?.(e)},...n.attrs})}}const ke={};function Ae(e,t){ke[e]=t}const je=new Set([`select`,`checkbox`,`radio`,`cascader`]);function Me(e){let{formModel:t,visibleOptions:n,config:r,handleFieldChange:i,componentMap:a,instanceSlots:o,asyncOptionsCache:s,asyncLoadingMap:c}=e,l=a,u={...Oe(l),...ke},d=e=>{let n={value:t[e.prop],"onUpdate:value":n=>{t[e.prop]=n,i(e.prop)},disabled:De(e.disabled,r.value.disabled,t),readonly:De(e.readonly,r.value.readonly,t)};return e.type===`textarea`&&(n.type=`textarea`),e.placeholder&&(n.placeholder=e.placeholder),n};function f(e){let t=e.children??[],n=s.value[e.prop]??[];return n.length>0?n:t}let p=e=>{try{let t=je.has(e.type),n=c.value[e.prop],i=t?{...e,children:f(e)}:e,a=u[i.type];if(!a)return console.warn(`[C_Form] 未支持的组件类型: ${i.type}`),null;let s=d(i);return n&&i.type===`select`&&(s.loading=!0),a({...s,...i.attrs},i,r.value,{slots:o,components:l})}catch(t){return console.error(`[C_Form] 渲染表单项失败:`,t,e),null}};function m(e){if(e.label)return e.help?B(`span`,{style:`display:inline-flex;align-items:center;gap:4px`},[e.label,B(l.NTooltip,{trigger:`hover`},{trigger:()=>B(`span`,{style:`cursor:help;opacity:0.5;font-size:14px`,innerHTML:`ⓘ`}),default:()=>e.help})]):e.label}return{renderFormItem:p,formItems:M(()=>n.value.map(e=>{let t=!!(e.rules?.length||e.rulesWhen||e.crossFieldValidator),n=m(e);return B(l.NFormItem,{label:typeof n==`string`?n:void 0,path:e.prop,key:e.prop,required:t},{...typeof n!=`string`&&n?{label:()=>n}:{},default:()=>p(e)})})),getBaseProps:d}}const Ne={class:`c-form-default`};var Pe=t(z({__name:`index`,props:{formItems:{},layoutConfig:{},options:{}},setup(e){return(e,t)=>(U(),F(`div`,Ne,[(U(!0),F(j,null,q(e.formItems,e=>(U(),N(J(e),{key:e.key}))),128))]))}}),[[`__scopeId`,`data-v-3422ba86`]]),Fe=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(e){let t=e,n=M(()=>280),r=M(()=>t.layoutConfig?.inline?.gap??16),i=M(()=>16),a=M(()=>{let e=t.layoutConfig?.inline?.align;return e===`start`||e===`end`?e:`center`}),o=M(()=>{switch(a.value){case`start`:return`flex-start`;case`end`:return`flex-end`;default:return`center`}}),s=M(()=>{switch(a.value){case`start`:return`flex-start`;case`end`:return`flex-end`;case`center`:return`center`;default:return`flex-start`}}),c=M(()=>({display:`flex`,flexWrap:`wrap`,alignItems:o.value,justifyContent:s.value,gap:`${i.value}px ${r.value}px`,width:`100%`})),l=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`form-item-${t}`},u=e=>{let r=t.options?.[e]?.layout,i={width:`${n.value}px`,flexShrink:0,display:`flex`,flexDirection:`column`};return r?.width!==void 0&&(i.width=typeof r.width==`number`?`${r.width}px`:r.width),r?.style&&Object.assign(i,r.style),i};return(e,t)=>(U(),F(`div`,{class:`c-form-inline`,style:le(c.value)},[(U(!0),F(j,null,q(e.formItems,(e,t)=>(U(),F(`div`,{key:l(e,t),class:`c-form-inline-item`,style:le(u(t))},[(U(),N(J(e)))],4))),128))],4))}}),[[`__scopeId`,`data-v-067214c3`]]);const Ie={class:`c-grid-layout`},Le={class:`config-header`},Re={class:`config-controls`},ze={class:`config-label`},Be={class:`item-wrapper`};var Ve=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},setup(t,{expose:n}){let i=t,a=W({cols:24,gutter:16,responsive:!0}),o=M(()=>i.layoutConfig?.grid||{}),c=M(()=>o.value.showConfigPanel),l=M(()=>o.value.showStats),u=M(()=>({cols:c.value?a.cols:o.value.cols??24,gutter:c.value?a.gutter:o.value.gutter??16,responsive:c.value?a.responsive:o.value.responsive??!0})),d=M(()=>({cols:u.value.cols,xGap:u.value.gutter,yGap:u.value.gutter,responsive:u.value.responsive?`screen`:`self`})),f=M(()=>[{key:`cols`,label:`列数`,component:`NInputNumber`,value:M({get:()=>a.cols,set:e=>a.cols=e}),props:{min:1,max:48,size:`small`}},{key:`gutter`,label:`间距`,component:`NInputNumber`,value:M({get:()=>a.gutter,set:e=>a.gutter=e}),props:{min:0,max:48,size:`small`}},{key:`responsive`,label:`响应式`,component:`NSwitch`,value:M({get:()=>a.responsive,set:e=>a.responsive=e}),props:{size:`small`}}]),p=M(()=>`列数: ${u.value.cols} | 间距: ${u.value.gutter}px | 项目: ${i.formItems.length}个`),m=(e,t)=>String(e.key)||e.props?.path||`grid-item-${t}`,h=(e,t)=>{let n=i.options?.[e]?.layout;return n?.[t]??n?.grid?.[t]},v=()=>{let{cols:e}=u.value;return e<=12?e:e<=24?12:8},y=e=>{let t=h(e,`span`),n=h(e,`offset`),r=h(e,`suffix`);return{span:typeof t==`number`&&t>0&&t<=u.value.cols?t:v(),offset:typeof n==`number`&&n>=0&&n<u.value.cols?n:0,suffix:!!r}};return Z(o,e=>{e.cols!==void 0&&(a.cols=e.cols),e.gutter!==void 0&&(a.gutter=e.gutter),e.responsive!==void 0&&(a.responsive=e.responsive)},{immediate:!0}),n({updateGridConfig:e=>Object.assign(a,e),getCurrentConfig:()=>({...u.value}),getGridInfo:()=>({...u.value,itemCount:i.formItems.length})}),(t,n)=>{let i=s,a=_,o=g,u=r;return U(),F(`div`,Ie,[P(` 配置面板 `),c.value?(U(),N(i,{key:0,size:`small`,bordered:!1,class:`config-panel`},{header:Q(()=>[I(`div`,Le,[R(e,{name:`mdi:view-grid`,size:18}),n[0]||=I(`span`,null,`网格配置`,-1)])]),default:Q(()=>[I(`div`,Re,[(U(!0),F(j,null,q(f.value,e=>(U(),F(`div`,{key:e.key,class:`config-item`},[I(`span`,ze,Y(e.label)+`:`,1),(U(),N(J(e.component),se({value:e.value,"onUpdate:value":t=>e.value=t},{ref_for:!0},e.props),null,16,[`value`,`onUpdate:value`]))]))),128))])]),_:1})):P(`v-if`,!0),P(` 网格容器 `),R(o,se(d.value,{class:`grid-container`}),{default:Q(()=>[(U(!0),F(j,null,q(t.formItems,(e,t)=>(U(),N(a,se({key:m(e,t)},{ref_for:!0},y(t),{class:`grid-item`}),{default:Q(()=>[I(`div`,Be,[(U(),N(J(e)))])]),_:2},1040))),128))]),_:1},16),P(` 统计信息 `),l.value?(U(),N(u,{key:1,type:`info`,"show-icon":!1,size:`small`,class:`grid-stats`},{header:Q(()=>[R(e,{name:`mdi:information-outline`,size:16}),n[1]||=L(` 网格信息 `,-1)]),default:Q(()=>[L(` `+Y(p.value),1)]),_:1})):P(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-a7a655a4`]]);const He={class:`c-form-card`},Ue={class:`flex items-center gap-2`},We={class:`config-controls`},Ge={class:`config-item`},Ke={class:`flex items-center gap-2`},qe={class:`text-xs min-w-12`},Je={class:`config-item`},Ye={class:`config-item`},Xe={class:`config-item`},Ze={class:`flex items-center gap-3`},Qe={class:`card-header`},$e={class:`header-info`},et={class:`header-text`},tt={key:0},nt={class:`header-actions`},rt={class:`field-stats`},it={class:`card-content`},at={key:0,class:`progress-section`},ot={class:`action-content`},st={class:`status-summary`},ct={class:`status-item`},lt={class:`progress-display`},ut={class:`text-sm min-w-12`},dt={class:`action-buttons`};var ft=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},formData:{default:()=>({})}},setup(t){let n=t,r=K(20),o=K(!0),c=K(!0),l=K(!0),u=K(`vertical`),d=K({}),f=M(()=>n.layoutConfig?.card?.groups||[]),p=M(()=>f.value.length>0),m=M(()=>n.layoutConfig?.card?.showLayoutConfig??!0),h=M(()=>n.layoutConfig?.card?.showActionPanel??!0),g=M(()=>p.value?`layout-${u.value}`:`layout-single`),_=M(()=>{if(!p.value)return[];let e=new Map;return f.value.forEach(t=>{e.set(t.key,[])}),n.formItems.forEach((t,r)=>{let i=(n.options?.[r])?.layout?.group||f.value[0]?.key||`default`;e.has(i)||e.set(i,[]),e.get(i).push(t)}),f.value.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),v=M(()=>{let e=Object.keys(d.value);return e.length>0&&e.every(e=>d.value[e])}),y=M(()=>{if(!n.options||n.options.length===0)return 0;let e=n.options.filter(e=>{let t=n.formData?.[e.prop||``];return C(t)}).length;return Math.round(e/n.options.length*100)}),C=e=>e==null?!1:Array.isArray(e)?e.length>0:typeof e==`string`?e.trim()!==``:!0,w=e=>n.options?n.options.filter(t=>t.layout?.group===e.config.key).filter(e=>{let t=n.formData?.[e.prop||``];return C(t)}).length:0,E=e=>{if(e.items.length===0)return 0;let t=w(e);return Math.round(t/e.items.length*100)},D=e=>{let t={basic:`mdi:account`,contact:`mdi:phone`,preferences:`mdi:cog`,settings:`mdi:cog`,info:`mdi:information`,default:`mdi:form-select`};return t[e]||t.default},O=e=>{d.value[e]=!d.value[e]},k=()=>{let e=!v.value;f.value.forEach(t=>{d.value[t.key]=e})};return H(()=>{let e=n.layoutConfig?.card;e?.direction&&(u.value=e.direction),e?.showProgress!==void 0&&(l.value=e.showProgress),f.value.forEach(e=>{d.value[e.key]=!1})}),(t,n)=>{let f=T,C=ee,te=x,A=S,ne=s,re=i,ie=a,M=b;return U(),F(`div`,He,[P(` 布局配置面板 `),p.value&&m.value?(U(),N(ne,{key:0,class:`layout-config-panel`,bordered:!1},{header:Q(()=>[I(`div`,Ue,[R(e,{name:`mdi:cog`,size:18}),n[4]||=I(`span`,null,`布局配置`,-1)])]),default:Q(()=>[I(`div`,We,[I(`div`,Ge,[n[5]||=I(`span`,null,`卡片间距`,-1),I(`div`,Ke,[R(f,{value:r.value,"onUpdate:value":n[0]||=e=>r.value=e,min:12,max:32,step:4,class:`w-24`},null,8,[`value`]),I(`span`,qe,Y(r.value)+`px`,1)])]),I(`div`,Je,[n[6]||=I(`span`,null,`显示图标`,-1),R(C,{value:o.value,"onUpdate:value":n[1]||=e=>o.value=e,size:`small`},null,8,[`value`])]),I(`div`,Ye,[n[7]||=I(`span`,null,`可折叠`,-1),R(C,{value:c.value,"onUpdate:value":n[2]||=e=>c.value=e,size:`small`},null,8,[`value`])]),I(`div`,Xe,[n[10]||=I(`span`,null,`布局方向`,-1),R(A,{value:u.value,"onUpdate:value":n[3]||=e=>u.value=e,size:`small`},{default:Q(()=>[R(te,{value:`vertical`},{default:Q(()=>n[8]||=[L(`垂直`,-1)]),_:1,__:[8]}),R(te,{value:`horizontal`},{default:Q(()=>n[9]||=[L(`水平`,-1)]),_:1,__:[9]})]),_:1},8,[`value`])])])]),_:1})):P(`v-if`,!0),P(` 表单内容区域 `),I(`div`,{class:V([`form-content`,g.value]),style:le({gap:`${r.value}px`})},[P(` 无分组时的单卡片模式 `),p.value?(U(),F(j,{key:1},[P(` 有分组时的多卡片模式 `),(U(!0),F(j,null,q(_.value,t=>(U(),N(ne,{key:t.config.key,class:V([`group-card`,[`${t.config.key}-card`,{collapsed:c.value&&d.value[t.config.key]}]]),hoverable:``},{header:Q(()=>[I(`div`,Qe,[I(`div`,$e,[o.value&&t.config.icon?(U(),N(e,{key:0,name:t.config.icon,size:20,class:`card-icon`},null,8,[`name`])):o.value?(U(),N(e,{key:1,name:D(t.config.key),size:20,class:`card-icon`},null,8,[`name`])):P(`v-if`,!0),I(`div`,et,[I(`h3`,null,Y(t.config.title),1),t.config.description?(U(),F(`p`,tt,Y(t.config.description),1)):P(`v-if`,!0)])]),I(`div`,nt,[P(` 统计信息 `),I(`div`,rt,[R(re,{value:t.items.length,type:`info`,"show-zero":``},null,8,[`value`]),R(re,{value:`${w(t)}/${t.items.length}`,type:w(t)===t.items.length?`success`:`warning`},null,8,[`value`,`type`])]),P(` 折叠按钮 `),c.value?(U(),N(ie,{key:0,quaternary:``,circle:``,size:`small`,onClick:e=>O(t.config.key)},{icon:Q(()=>[R(e,{name:d.value[t.config.key]?`mdi:chevron-down`:`mdi:chevron-up`,size:18},null,8,[`name`])]),_:2},1032,[`onClick`])):P(`v-if`,!0)])])]),default:Q(()=>[me(I(`div`,it,[P(` 进度指示器 `),l.value?(U(),F(`div`,at,[R(M,{percentage:E(t),color:E(t)===100?`#52c41a`:`#1890ff`,"show-indicator":!1,class:`mb-4`},null,8,[`percentage`,`color`])])):P(`v-if`,!0),P(` 表单项 `),(U(!0),F(j,null,q(t.items,e=>(U(),N(J(e),{key:e.key}))),128))],512),[[fe,!d.value[t.config.key]]])]),_:2},1032,[`class`]))),128))],64)):(U(),N(ne,{key:0,class:`single-card`,hoverable:``},{header:Q(()=>[I(`div`,Ze,[o.value?(U(),N(e,{key:0,name:`mdi:form-select`,size:18,style:{color:`#3b82f6`}})):P(`v-if`,!0),n[11]||=I(`span`,null,`表单信息`,-1)])]),default:Q(()=>[(U(!0),F(j,null,q(t.formItems,e=>(U(),N(J(e),{key:e.key}))),128))]),_:1}))],6),P(` 统一操作面板 `),p.value&&h.value?(U(),N(ne,{key:1,class:`action-panel`,bordered:!1},{default:Q(()=>[I(`div`,ot,[I(`div`,st,[I(`div`,ct,[n[12]||=I(`span`,{class:`label`},`完成进度:`,-1),I(`div`,lt,[R(M,{percentage:y.value,"show-indicator":!1,color:y.value===100?`#52c41a`:`#1890ff`,class:`flex-1`},null,8,[`percentage`,`color`]),I(`span`,ut,Y(y.value)+`%`,1)])])]),I(`div`,dt,[c.value?(U(),N(ie,{key:0,onClick:k},{icon:Q(()=>[R(e,{name:v.value?`mdi:unfold-more-horizontal`:`mdi:unfold-less-horizontal`,size:18},null,8,[`name`])]),default:Q(()=>[L(` `+Y(v.value?`展开全部`:`折叠全部`),1)]),_:1})):P(`v-if`,!0)])])]),_:1})):P(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-e4d182af`]]);const pt={class:`c-form-tabs`},mt={key:0,class:`single-panel`},ht={class:`tabs-container`},gt={key:0,class:`tab-header`},_t={class:`tab-description`},vt={class:`tab-form-items`},yt={key:0,class:`tabs-actions`};var bt=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},emits:[`tab-change`,`tab-before-change`,`tab-validate`,`tab-close`,`tab-add`],setup(t,{expose:n,emit:r}){let o=t,s=r,c=K(``),l=W({}),u=()=>({tabs:[],type:`line`,size:`medium`,placement:`top`,animated:!0,closable:!1,addable:!1,showTabHeader:!0,showActions:!1,showCount:!1,validateBeforeSwitch:!1,defaultTab:``}),d=M(()=>{let e=u(),t=o.layoutConfig?.tabs||{};return{...e,...t}}),f=M(()=>d.value.tabs.length>0),m=M(()=>{if(!f.value)return[];let e=new Map;return d.value.tabs.forEach(t=>{e.set(t.key,[])}),o.formItems.forEach((t,n)=>{let r=(o.options?.[n])?.layout?.tab||d.value.tabs[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),d.value.tabs.map(t=>({config:t,items:e.get(t.key)||[]}))}),h=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`tab-item-${t}`},g=async()=>{if(!c.value)return!0;try{return s(`tab-validate`,c.value),l[c.value]=!0,!0}catch(e){return console.error(`[Tabs Layout] 标签验证失败:`,e),l[c.value]=!1,!1}},_=async e=>{if(!e||e===c.value)return!0;if(!m.value.some(t=>t.config.key===e))return!1;try{return d.value.validateBeforeSwitch&&c.value&&!await g()?!1:(c.value&&s(`tab-before-change`,c.value,e),c.value=e,s(`tab-change`,e,m.value.findIndex(t=>t.config.key===e)),!0)}catch(e){return console.error(`[Tabs Layout] 标签切换失败:`,e),!1}},v=e=>{_(e)},y=e=>{s(`tab-close`,e)},b=()=>{s(`tab-add`)},x=()=>{if(!f.value||m.value.length===0)return;let{defaultTab:e}=d.value,t=e||m.value[0]?.config.key;t&&t!==c.value&&(c.value=t,ce(()=>{let e=m.value.findIndex(e=>e.config.key===t);e>=0&&s(`tab-change`,t,e)}))};return H(()=>{x()}),Z(M(()=>d.value.tabs.map(e=>e.key).join(`,`)),()=>{c.value&&!d.value.tabs.some(e=>e.key===c.value)&&x()}),Z(()=>d.value.defaultTab,e=>{e&&e!==c.value&&_(e)}),n({switchToTab:_,validateCurrentTab:g,currentTab:G(c),totalTabs:M(()=>m.value.length),tabsWithItems:G(m)}),(t,n)=>{let r=i,o=E,s=p,l=k,u=te,x=a;return U(),F(`div`,pt,[P(` 无标签配置时的单一面板模式 `),f.value?(U(),F(j,{key:1},[P(` 有标签配置时的分标签模式 `),I(`div`,ht,[R(u,{value:c.value,"onUpdate:value":[n[0]||=e=>c.value=e,v],type:d.value.type,size:d.value.size,placement:d.value.placement,animated:d.value.animated,closable:d.value.closable,addable:d.value.addable,class:`form-tabs`,onClose:y,onAdd:b},{default:Q(()=>[(U(!0),F(j,null,q(m.value,t=>(U(),N(l,{key:t.config.key,name:t.config.key,tab:t.config.title,disabled:t.config.disabled,closable:t.config.closable},{tab:Q(()=>[R(o,{align:`center`,size:8},{default:Q(()=>[t.config.icon?(U(),N(e,{key:0,name:t.config.icon,size:16,class:`tab-icon`},null,8,[`name`])):P(`v-if`,!0),I(`span`,null,Y(t.config.title),1),d.value.showCount?(U(),N(r,{key:1,value:t.items.length,max:99,show:t.items.length>0,type:`info`},null,8,[`value`,`show`])):P(`v-if`,!0)]),_:2},1024)]),default:Q(()=>[d.value.showTabHeader&&t.config.description?(U(),F(`div`,gt,[I(`p`,_t,Y(t.config.description),1)])):P(`v-if`,!0),I(`div`,vt,[(U(!0),F(j,null,q(t.items,(e,t)=>(U(),N(J(e),{key:h(e,t)}))),128))]),t.items.length===0?(U(),N(s,{key:1,description:`暂无表单项`,class:`tab-empty`})):P(`v-if`,!0)]),_:2},1032,[`name`,`tab`,`disabled`,`closable`]))),128))]),_:1},8,[`value`,`type`,`size`,`placement`,`animated`,`closable`,`addable`]),P(` 标签页操作按钮 `),d.value.showActions?(U(),F(`div`,yt,[R(o,{justify:`space-between`},{default:Q(()=>[R(o,null,{default:Q(()=>[d.value.validateBeforeSwitch?(U(),N(x,{key:0,type:`primary`,size:`small`,onClick:g},{default:Q(()=>[R(e,{name:`carbon:star-check`,size:14,style:{"margin-right":`4px`}}),n[1]||=L(` 验证当前标签 `,-1)]),_:1,__:[1]})):P(`v-if`,!0)]),_:1}),R(o,null,{default:Q(()=>[ue(t.$slots,`tab-actions`,{currentTab:c.value,totalTabs:m.value.length,validateTab:g,switchToTab:_},void 0,!0)]),_:3})]),_:3})])):P(`v-if`,!0)])],2112)):(U(),F(`div`,mt,[(U(!0),F(j,null,q(t.formItems,(e,t)=>(U(),N(J(e),{key:h(e,t)}))),128))]))])}}}),[[`__scopeId`,`data-v-330de51f`]]);const xt={class:`c-form-steps`},St={key:0,class:`single-panel`},Ct={class:`steps-container`},wt={key:0,class:`step-header`},Tt={class:`step-title`},Et={key:0,class:`step-description`},Dt={class:`step-form-items`},Ot={class:`steps-actions`};var kt=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]}},emits:[`step-change`,`step-before-change`,`step-validate`],setup(t,{expose:n,emit:r}){let i=t,o=r,c=K(0),l=K(!1),u=W({}),d=M(()=>{let e=i.layoutConfig?.steps||{};return{steps:e.steps||[],vertical:e.vertical||!1,size:e.size||`medium`,showStepHeader:e.showStepHeader!==!1,validateBeforeNext:e.validateBeforeNext||!1,prevButtonText:e.prevButtonText||`上一步`,nextButtonText:e.nextButtonText||`下一步`,defaultStep:e.defaultStep||0}}),f=M(()=>d.value.steps.length>0),p=M(()=>{if(!f.value)return[];let e=new Map;return d.value.steps.forEach(t=>{e.set(t.key,[])}),i.formItems.forEach((t,n)=>{let r=(i.options?.[n])?.layout?.step||d.value.steps[0]?.key||`default`;e.has(r)||e.set(r,[]),e.get(r).push(t)}),d.value.steps.map(t=>({config:t,items:e.get(t.key)||[]})).filter(e=>e.items.length>0)}),m=M(()=>{for(let e=0;e<=c.value;e++)if(u[e]===!1)return`error`;return`process`}),h=M(()=>c.value===0),g=M(()=>c.value===p.value.length-1),_=(e,t)=>{if(e.key!=null)return String(e.key);let n=e.props;return n?.path?n.path:`step-item-${t}`},v=async()=>{try{let e=await Promise.resolve(o(`step-validate`,c.value))!==!1;return u[c.value]=e,e}catch(e){return console.error(`[Steps Layout] 步骤验证失败:`,e),u[c.value]=!1,!1}},y=async(e,t=!1)=>{if(e<0||e>=p.value.length)return!1;if(e===c.value)return!0;try{return l.value=!0,t&&d.value.validateBeforeNext&&!await v()?!1:(await o(`step-before-change`,c.value,e),c.value=e,o(`step-change`,c.value,p.value[c.value].config.key),!0)}catch(e){return console.error(`[Steps Layout] 步骤切换失败:`,e),!1}finally{l.value=!1}},b=async()=>{await y(c.value+1,!0)},x=()=>{y(c.value-1)},S=async e=>{p.value[e]?.config.disabled||await y(e,e>c.value)},C=()=>{if(!f.value||p.value.length===0)return;let{defaultStep:e}=d.value;c.value=e>=0&&e<p.value.length&&!p.value[e]?.config.disabled?e:0};return Z(M(()=>d.value.steps.map(e=>e.key).join(`,`)),()=>{C()}),H(()=>{C()}),n({nextStep:b,previousStep:x,goToStep:S,validateCurrentStep:v,currentStep:G(c),totalSteps:M(()=>p.value.length)}),(t,n)=>{let r=D,i=O,o=s,u=a,v=E;return U(),F(`div`,xt,[P(` 无步骤配置时的单一面板模式 `),f.value?(U(),F(j,{key:1},[P(` 有步骤配置时的分步骤模式 `),I(`div`,Ct,[P(` 步骤指示器 `),R(i,{current:c.value+1,status:m.value,size:d.value.size,vertical:d.value.vertical,class:`steps-indicator`},{default:Q(()=>[(U(!0),F(j,null,q(p.value,e=>(U(),N(r,{key:e.config.key,title:e.config.title,description:e.config.description,disabled:e.config.disabled},null,8,[`title`,`description`,`disabled`]))),128))]),_:1},8,[`current`,`status`,`size`,`vertical`]),P(` 步骤内容区域 `),R(o,{class:`steps-content`,bordered:!1},{default:Q(()=>[(U(!0),F(j,null,q(p.value,(e,t)=>me((U(),F(`div`,{key:e.config.key,class:`step-panel`},[P(` 步骤标题和描述 `),d.value.showStepHeader?(U(),F(`div`,wt,[I(`h3`,Tt,Y(e.config.title),1),e.config.description?(U(),F(`p`,Et,Y(e.config.description),1)):P(`v-if`,!0)])):P(`v-if`,!0),P(` 步骤内的表单项 `),I(`div`,Dt,[(U(!0),F(j,null,q(e.items,(e,t)=>(U(),N(J(e),{key:_(e,t)}))),128))])])),[[fe,c.value===t]])),128))]),_:1}),P(` 步骤操作按钮 `),I(`div`,Ot,[R(v,{justify:`space-between`},{default:Q(()=>[c.value>0?(U(),N(u,{key:0,disabled:l.value,onClick:x},{default:Q(()=>[R(e,{name:`mdi:chevron-left-first`,size:16,style:{"margin-right":`4px`}}),L(` `+Y(d.value.prevButtonText),1)]),_:1},8,[`disabled`])):P(`v-if`,!0),n[0]||=I(`div`,null,null,-1),R(v,null,{default:Q(()=>[c.value<p.value.length-1?(U(),N(u,{key:0,type:`primary`,loading:l.value,onClick:b},{default:Q(()=>[L(Y(d.value.nextButtonText)+` `,1),R(e,{name:`mdi:chevron-right-last`,size:16,style:{"margin-left":`4px`}})]),_:1},8,[`loading`])):P(`v-if`,!0),ue(t.$slots,`step-actions`,{currentStep:c.value,totalSteps:p.value.length,isFirstStep:h.value,isLastStep:g.value,nextStep:b,previousStep:x,goToStep:S},void 0,!0)]),_:3})]),_:3,__:[0]})])])],2112)):(U(),F(`div`,St,[(U(!0),F(j,null,q(t.formItems,(e,t)=>(U(),N(J(e),{key:_(e,t)}))),128))]))])}}}),[[`__scopeId`,`data-v-20345bf3`]]);const At={maxFields:20,autoSave:!1,enableSort:!0,showControls:!0,showItemControls:!0},jt=[{label:`文本输入`,value:`input`},{label:`数字输入`,value:`inputNumber`},{label:`多行文本`,value:`textarea`},{label:`下拉选择`,value:`select`},{label:`开关切换`,value:`switch`},{label:`评分组件`,value:`rate`}],Mt=()=>{let e=W({config:{...At},baseFields:[],dynamicFields:[],hiddenFieldIds:new Set,fieldCounter:0,isInitialized:!1}),t=M(()=>[...e.baseFields,...e.dynamicFields.map(t=>({...t,show:!e.hiddenFieldIds.has(t.prop)}))]),n=M(()=>t.value.filter(e=>e.show!==!1)),r=M(()=>e.dynamicFields.length),i=M(()=>e.hiddenFieldIds.size),a=M(()=>e.dynamicFields.length<e.config.maxFields),o=M(()=>e.hiddenFieldIds.size===0);return{state:G(e),allFields:t,visibleFields:n,dynamicFieldsCount:r,hiddenFieldsCount:i,canAddMoreFields:a,allVisible:o,FIELD_TYPE_OPTIONS:jt,addField:(t={})=>{if(!a.value){console.warn(`[useDynamicFormState] 已达到最大字段数量限制`);return}e.fieldCounter++;let n=t.type||jt[Math.floor(Math.random()*jt.length)].value,r={id:`dynamic_field_${e.fieldCounter}`,type:n,prop:t.prop||`dynamic_${e.fieldCounter}`,label:t.label||`动态字段 ${e.fieldCounter}`,placeholder:t.placeholder||`请输入${t.label||`内容`}`,visible:!0,removable:!0,created:Date.now(),layout:t.layout||{span:12},...t};e.dynamicFields.push(r),console.log(`[useDynamicFormState] 添加字段:`,r)},removeField:t=>{if(e.dynamicFields.length===0){console.warn(`[useDynamicFormState] 没有可移除的动态字段`);return}let n=t??e.dynamicFields.length-1;if(n<0||n>=e.dynamicFields.length){console.warn(`[useDynamicFormState] 字段索引超出范围`);return}let r=e.dynamicFields.splice(n,1)[0];r&&(e.hiddenFieldIds.delete(r.prop),console.log(`[useDynamicFormState] 移除字段:`,r.prop))},clearDynamicFields:()=>{console.log(`[useDynamicFormState] 清空动态字段:`,e.dynamicFields.length),e.dynamicFields.forEach(t=>e.hiddenFieldIds.delete(t.prop)),e.dynamicFields.length=0,e.fieldCounter=0},toggleFieldVisibility:t=>{e.hiddenFieldIds.has(t)?(e.hiddenFieldIds.delete(t),console.log(`[useDynamicFormState] 显示字段:`,t)):(e.hiddenFieldIds.add(t),console.log(`[useDynamicFormState] 隐藏字段:`,t))},toggleAllVisibility:()=>{o.value?(e.dynamicFields.forEach(t=>{e.hiddenFieldIds.add(t.prop)}),console.log(`[useDynamicFormState] 隐藏所有动态字段`)):(e.hiddenFieldIds.clear(),console.log(`[useDynamicFormState] 显示所有字段`))},updateConfig:t=>{Object.assign(e.config,t),console.log(`[useDynamicFormState] 更新配置:`,t)},exportConfig:()=>{let t={baseFields:e.baseFields,dynamicFields:e.dynamicFields,config:e.config,hiddenFields:Array.from(e.hiddenFieldIds),timestamp:Date.now()};return JSON.stringify(t,null,2)},initialize:(t,n={})=>{console.log(`[useDynamicFormState] 初始化状态:`,{baseFieldsCount:t.length,config:n}),e.baseFields=[...t],Object.assign(e.config,n),e.isInitialized=!0,console.log(`[useDynamicFormState] 初始化完成`)}}},Nt=Symbol(`dynamicFormState`),Pt={class:`c-form-dynamic`},Ft={key:0,class:`dynamic-controls`},It={class:`max-fields-config`},Lt={class:`dynamic-stats`},Rt={class:`dynamic-controls-fallback`},zt={class:`dynamic-form-items`};var Bt=t(z({__name:`index`,props:{formItems:{},layoutConfig:{default:()=>({})},options:{default:()=>[]},dynamicFormState:{default:null}},emits:[`field-add`,`field-remove`,`fields-clear`],setup(t,{expose:n}){let o=t,c=oe(Nt,null),l=M(()=>o.dynamicFormState||c),u=M(()=>!!l.value),d=M(()=>o.layoutConfig?.dynamic?.grid?.cols??24),f=M(()=>o.layoutConfig?.dynamic?.grid?.gutter??16),p=M(()=>o.layoutConfig?.dynamic?.controls?.showControls!==!1),m=M(()=>l.value?.state.config.maxFields??o.layoutConfig?.dynamic?.dynamic?.maxFields??50),h=M(()=>l.value?.dynamicFieldsCount.value??0),v=M(()=>l.value?.canAddMoreFields.value??!1),b=M(()=>o.formItems.length),x=(e,t)=>e.key?.toString()||e.props?.path||`dynamic-item-${t}`,S=e=>{let t=o.options?.[e]?.layout?.span;return typeof t==`number`&&t>0&&t<=d.value?t:Math.min(12,d.value)},C=e=>{if(!l.value)return!1;let t=e.props?.path||e.key?.toString()||``;return l.value.state.dynamicFields.some(e=>e.prop===t)};return n({addField:()=>l.value?.addField(),removeField:()=>l.value?.removeField(),clearAllDynamic:()=>l.value?.clearDynamicFields(),isDynamicStateAvailable:u,dynamicState:l}),(t,n)=>{let o=i,c=a,w=E,T=y,D=A,O=s,ee=r,k=_,te=g;return U(),F(`div`,Pt,[P(` 动态控制面板 `),p.value&&u.value?(U(),F(`div`,Ft,[R(O,{size:`small`,title:`动态表单控制`,bordered:!1},{"header-extra":Q(()=>[R(o,{value:h.value,type:`warning`},{default:Q(()=>[R(e,{name:`mdi:layers`,size:16})]),_:1},8,[`value`])]),default:Q(()=>[R(w,{justify:`space-between`,align:`center`},{default:Q(()=>[R(w,null,{default:Q(()=>[R(c,{size:`small`,type:`primary`,disabled:!v.value,onClick:n[0]||=e=>l.value.addField()},{icon:Q(()=>[R(e,{name:`mdi:plus`,size:14})]),default:Q(()=>[L(` 添加字段 (`+Y(h.value)+`/`+Y(m.value)+`) `,1)]),_:1},8,[`disabled`]),R(c,{size:`small`,type:`warning`,disabled:h.value===0,onClick:n[1]||=e=>l.value.removeField()},{icon:Q(()=>[R(e,{name:`mdi:minus`,size:14})]),default:Q(()=>[n[4]||=L(` 移除字段 `,-1)]),_:1,__:[4]},8,[`disabled`]),R(c,{size:`small`,type:`error`,disabled:h.value===0,onClick:n[2]||=e=>l.value.clearDynamicFields()},{icon:Q(()=>[R(e,{name:`mdi:delete-sweep`,size:14})]),default:Q(()=>[n[5]||=L(` 清空动态 `,-1)]),_:1,__:[5]},8,[`disabled`])]),_:1}),P(` 最大字段数配置 `),I(`div`,It,[n[6]||=I(`span`,null,`最大字段数:`,-1),R(T,{value:m.value,"onUpdate:value":n[3]||=e=>e&&l.value.updateConfig({maxFields:e}),min:5,max:50,size:`small`,style:{width:`100px`}},null,8,[`value`])])]),_:1}),I(`div`,Lt,[R(w,null,{default:Q(()=>[R(D,{type:`info`},{default:Q(()=>[L(`总字段: `+Y(b.value),1)]),_:1}),R(D,{type:`warning`},{default:Q(()=>[L(`动态: `+Y(h.value),1)]),_:1})]),_:1})])]),_:1})])):p.value&&!u.value?(U(),F(j,{key:1},[P(` 状态不可用时的提示 `),I(`div`,Rt,[R(O,{size:`small`,title:`动态表单控制 (静态模式)`,bordered:!1},{default:Q(()=>[R(ee,{type:`info`,"show-icon":``},{icon:Q(()=>[R(e,{name:`mdi:information-outline`,size:16})]),default:Q(()=>[n[7]||=L(` 当前为静态模式,如需动态功能请在父组件中提供动态表单状态。 `,-1)]),_:1,__:[7]})]),_:1})])],2112)):P(`v-if`,!0),P(` 表单项渲染区域 `),I(`div`,zt,[R(te,{cols:d.value,"x-gap":f.value,"y-gap":f.value},{default:Q(()=>[(U(!0),F(j,null,q(t.formItems,(e,t)=>(U(),N(k,{key:x(e,t),span:S(t)},{default:Q(()=>[I(`div`,{class:V([`dynamic-item-wrapper`,{"is-dynamic-field":C(e)}])},[(U(),N(J(e)))],2)]),_:2},1032,[`span`]))),128))]),_:1},8,[`cols`,`x-gap`,`y-gap`])])])}}}),[[`__scopeId`,`data-v-a70ec0bb`]]);const Vt={class:`custom-layout`},Ht={class:`toolbar-content`},Ut={class:`mode-section`},Wt={class:`stats-section`},Gt={class:`stat-item`},Kt={class:`stat-value`},qt={class:`stat-item`},Jt={class:`stat-value`},Yt={class:`actions-section`},Xt={class:`design-tools`},Zt={class:`tool-group`},Qt={key:0,class:`canvas-hint`},$t={class:`areas-container`},en={class:`area-header`},tn={class:`area-info`},nn=[`onClick`],rn={class:`area-controls`},an={class:`field-preview`},on={class:`field-label`},sn={class:`field-type`},cn={key:0,class:`area-drop-zone`},ln={class:`field-name`},un={class:`field-type-tag`},dn={key:0,class:`empty-layout`},fn={key:1,class:`form-container`},pn={class:`form-areas`};var mn=t(z({__name:`index`,props:{options:{default:()=>[]},formItems:{default:()=>[]},formData:{default:()=>({})}},emits:[`fields-change`,`export-data`],setup(e,{emit:t}){let n=e,r=t,i=K(!0),c=K([]),l=K([]),u=K(``),d=M(()=>n.options?.length>0?n.options:n.formItems?.map(e=>{let t=e.props;return{prop:t?.path||``,label:t?.label||t?.path||``,type:`input`,show:!0}}).filter(e=>e.prop)||[]),f=M(()=>c.value.reduce((e,t)=>e+t.fields.length,0)),m=()=>`${Date.now()}-${Math.random().toString(36).substring(2,11)}`,h=e=>({input:`输入框`,select:`下拉框`,radio:`单选框`,checkbox:`复选框`,textarea:`文本域`,date:`日期`,number:`数字`})[e]||e,g=e=>n.formItems?.find(t=>t.props?.path===e.prop)||null,_=e=>{let t={id:m(),title:`${e===`horizontal`?`水平`:e===`vertical`?`垂直`:`网格`}区域`,type:e,fields:[]};c.value.push(t)},y=e=>{let t=c.value.findIndex(t=>t.id===e);t!==-1&&c.value.splice(t,1)},b=e=>({...e,id:`${e.prop}-${m()}`}),x=(e,t)=>{let n=c.value.find(t=>t.id===e);if(n){let e=n.fields.findIndex(e=>e.id===t);e!==-1&&n.fields.splice(e,1)}},S=()=>{let e=JSON.stringify(c.value,null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`layout-config-${Date.now()}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)},C=()=>{c.value=[]},w=()=>{r(`export-data`,{layout:c.value,formData:n.formData,timestamp:new Date().toISOString()})};return pe(()=>{let e=new Set(c.value.flatMap(e=>e.fields.map(e=>e.prop)));l.value=d.value.filter(t=>!e.has(t.prop)).map(e=>({...e,id:e.prop}))}),Z(()=>c.value,()=>{r(`fields-change`,c.value.flatMap(e=>e.fields.map(e=>({...e,id:void 0}))))},{deep:!0}),(e,t)=>{let n=a,r=o,d=s,m=v,T=A,E=p;return U(),F(`div`,Vt,[P(` 顶部工具栏 `),R(d,{bordered:!1,class:`toolbar-card`},{default:Q(()=>[I(`div`,Ht,[P(` 模式切换 `),I(`div`,Ut,[t[12]||=I(`span`,{class:`section-label`},`自定义模式:`,-1),R(r,null,{default:Q(()=>[R(n,{type:i.value?`primary`:`default`,onClick:t[0]||=e=>i.value=!0,size:`small`},{default:Q(()=>t[10]||=[L(` 🎨 设计模式 `,-1)]),_:1,__:[10]},8,[`type`]),R(n,{type:i.value?`default`:`primary`,onClick:t[1]||=e=>i.value=!1,size:`small`},{default:Q(()=>t[11]||=[L(` 📝 填写模式 `,-1)]),_:1,__:[11]},8,[`type`])]),_:1})]),P(` 统计信息 `),I(`div`,Wt,[I(`div`,Gt,[I(`div`,Kt,Y(c.value.length),1),t[13]||=I(`div`,{class:`stat-label`},`自定义区域`,-1)]),I(`div`,qt,[I(`div`,Jt,Y(f.value),1),t[14]||=I(`div`,{class:`stat-label`},`字段总数`,-1)])]),P(` 操作按钮 `),I(`div`,Yt,[i.value?(U(),F(j,{key:0},[R(n,{secondary:``,onClick:S,size:`small`},{default:Q(()=>t[15]||=[L(` 💾 保存布局 `,-1)]),_:1,__:[15]}),R(n,{secondary:``,onClick:C,size:`small`},{default:Q(()=>t[16]||=[L(` 🔄 重置布局 `,-1)]),_:1,__:[16]})],64)):(U(),N(n,{key:1,secondary:``,onClick:w,size:`small`},{default:Q(()=>t[17]||=[L(` 📊 导出数据 `,-1)]),_:1,__:[17]}))])])]),_:1}),P(` 设计模式工具面板 `),i.value?(U(),N(d,{key:0,class:`design-panel`,title:`🎨 设计工具`},{default:Q(()=>[I(`div`,Xt,[I(`div`,Zt,[t[21]||=I(`span`,{class:`group-label`},`添加区域:`,-1),R(n,{onClick:t[2]||=e=>_(`horizontal`),size:`small`},{default:Q(()=>t[18]||=[L(` ➡️ 水平区域 `,-1)]),_:1,__:[18]}),R(n,{onClick:t[3]||=e=>_(`vertical`),size:`small`},{default:Q(()=>t[19]||=[L(` ⬇️ 垂直区域 `,-1)]),_:1,__:[19]}),R(n,{onClick:t[4]||=e=>_(`grid`),size:`small`},{default:Q(()=>t[20]||=[L(` ⚏ 网格区域 `,-1)]),_:1,__:[20]})])])]),_:1})):P(`v-if`,!0),P(` 主画布区域 `),I(`div`,{class:V([`layout-canvas`,{"design-mode":i.value}])},[P(` 设计模式 `),i.value?(U(),F(j,{key:0},[c.value.length===0?(U(),F(`div`,Qt,t[22]||=[I(`div`,{class:`hint-content`},[I(`h3`,null,`🎨 开始自定义你的布局`),I(`p`,null,`点击上方按钮添加区域`)],-1)])):(U(),F(j,{key:1},[P(` 区域列表 `),I(`div`,$t,[(U(!0),F(j,null,q(c.value,e=>(U(),F(`div`,{key:e.id,class:V([`custom-area`,`area-${e.type}`])},[I(`div`,en,[I(`div`,tn,[u.value===e.id?(U(),N(m,{key:0,value:e.title,"onUpdate:value":t=>e.title=t,size:`small`,onBlur:t[5]||=e=>u.value=``,onKeyup:t[6]||=he(e=>u.value=``,[`enter`]),class:`title-input`},null,8,[`value`,`onUpdate:value`])):(U(),F(`span`,{key:1,class:`area-title`,onClick:t=>u.value=e.id},Y(e.title),9,nn)),R(T,{size:`small`},{default:Q(()=>[L(Y(e.fields.length)+` 字段`,1)]),_:2},1024)]),I(`div`,rn,[R(n,{text:``,onClick:t=>y(e.id),size:`tiny`,type:`error`,title:`删除区域`},{default:Q(()=>t[23]||=[L(` 🗑️ `,-1)]),_:2,__:[23]},1032,[`onClick`])])]),P(` 字段容器(可拖入) `),R(X(ge),{modelValue:e.fields,"onUpdate:modelValue":t=>e.fields=t,class:`area-fields`,group:{name:`form-fields`,pull:!0,put:!0},animation:200,"ghost-class":`field-ghost`,"item-key":`id`},{default:Q(()=>[(U(!0),F(j,null,q(e.fields,r=>(U(),F(`div`,{key:r.id,class:`field-item`},[I(`div`,an,[t[25]||=I(`span`,{class:`drag-handle`},`⠿`,-1),I(`span`,on,Y(r.label||r.prop),1),I(`span`,sn,Y(h(r.type)),1),R(n,{text:``,size:`tiny`,type:`error`,onClick:t=>x(e.id,r.id),title:`移出字段`},{default:Q(()=>t[24]||=[L(` ✕ `,-1)]),_:2,__:[24]},1032,[`onClick`])])]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`]),e.fields.length===0?(U(),F(`div`,cn,` 从下方字段池拖拽字段到这里 `)):P(`v-if`,!0)],2))),128))])],2112)),P(` 字段池(可拖出) `),R(d,{class:`field-pool`,title:`📦 可用字段`},{default:Q(()=>[R(X(ge),{modelValue:l.value,"onUpdate:modelValue":t[7]||=e=>l.value=e,class:`pool-fields-grid`,group:{name:`form-fields`,pull:`clone`,put:!0},animation:200,sort:!1,"ghost-class":`field-ghost`,"item-key":`id`,clone:b},{default:Q(()=>[(U(!0),F(j,null,q(l.value,e=>(U(),F(`div`,{key:e.id,class:`pool-field`},[t[26]||=I(`span`,{class:`drag-handle`},`⠿`,-1),I(`span`,ln,Y(e.label||e.prop),1),I(`span`,un,Y(h(e.type)),1)]))),128))]),_:1},8,[`modelValue`])]),_:1})],64)):(U(),F(j,{key:1},[P(` 填写模式 `),c.value.length===0?(U(),F(`div`,dn,[R(E,{description:`尚未设计布局`},{extra:Q(()=>[R(n,{onClick:t[8]||=e=>i.value=!0,type:`primary`},{default:Q(()=>t[27]||=[L(` 🎨 开始设计 `,-1)]),_:1,__:[27]})]),_:1})])):(U(),F(`div`,fn,[I(`div`,pn,[(U(!0),F(j,null,q(c.value,e=>(U(),F(`div`,{key:e.id,class:V([`form-area`,`area-${e.type}`])},[e.fields.length>0?(U(),N(d,{key:0,title:e.title},{default:Q(()=>[I(`div`,{class:V([`area-form-items`,`layout-${e.type}`])},[(U(!0),F(j,null,q(e.fields,e=>(U(),N(J(g(e)),{key:e.prop}))),128))],2)]),_:2},1032,[`title`])):(U(),N(E,{key:1,description:`此区域暂无字段`,size:`small`},{extra:Q(()=>[R(n,{onClick:t[9]||=e=>i.value=!0,size:`small`,secondary:``},{default:Q(()=>t[28]||=[L(` 🎨 添加字段 `,-1)]),_:1,__:[28]})]),_:1}))],2))),128))])]))],64))],2)])}}}),[[`__scopeId`,`data-v-fe093284`]]);const hn=z({name:`C_Form`,__name:`index`,props:{options:{},modelValue:{},config:{default:()=>({})}},emits:[`submit`,`update:modelValue`,`validate-success`,`validate-error`],setup(e,{expose:t,emit:r}){let i={default:Pe,inline:Fe,grid:Ve,card:ft,tabs:bt,steps:kt,dynamic:Bt,custom:mn},o={NFormItem:h,NInput:v,NInputNumber:y,NSwitch:ee,NSlider:T,NRate:C,NDatePicker:f,NTimePicker:ne,NCascader:c,NColorPicker:d,NSelect:w,NCheckboxGroup:u,NCheckbox:l,NRadioGroup:S,NRadio:x,NUpload:ie,NButton:a,NSpace:E,NTooltip:re,C_Editor:n},s=e,p=r,g=M(()=>be(s.config)),_=K(null),{formModel:b,formRules:D,visibleOptions:O,initialize:k,handleFieldChange:te,validate:A,validateField:j,validateStep:F,validateTab:I,validateDynamicFields:z,validateCustomGroup:B,clearValidation:oe,getModel:V,setFields:le,resetFields:H,setFieldValue:W,getFieldValue:G,setFieldsValue:q,handleSubmit:de,handleReset:Y,isDirty:fe,getChangedFields:pe,isFieldDirty:me,markAsClean:he,asyncOptionsCache:ge,asyncLoadingMap:_e}=Ee(M(()=>s.options),g,_,p),{formItems:ve}=Me({formModel:b,visibleOptions:O,config:g,handleFieldChange:te,componentMap:o,instanceSlots:ae()?.slots,asyncOptionsCache:ge,asyncLoadingMap:_e});Z(()=>g.value.initialValues,e=>{e&&g.value.mode===`edit`&&(Object.assign(b,e),ce(()=>he()))},{immediate:!0});let ye=M(()=>i[g.value.layout]||i.default),Se=M(()=>({type:g.value.layout,grid:g.value.grid,inline:g.value.inline,card:g.value.card,tabs:g.value.tabs,steps:g.value.steps,dynamic:g.value.dynamic,custom:g.value.custom})),Ce=M(()=>xe(g.value)),$=(e,...t)=>{let n=g.value[e];n?.(...t)},we=e=>{g.value.onFieldsChange?.(e)},Te=(e,t)=>{g.value.onStepChange?.(e,t)},De=async(e,t)=>(g.value.onStepBeforeChange?.(e,t),!0),Oe=async e=>{try{let t=g.value.steps?.steps?.[e]?.key;if(!t)return!0;let n=s.options.filter(e=>e.layout?.step===t).map(e=>e.prop);return n.length===0?!0:(await j(n),g.value.onStepValidate?.(e),!0)}catch(t){return console.warn(`[C_Form] 步骤 ${e} 验证失败:`,t),!1}};return Z(()=>s.modelValue,e=>{e&&Object.assign(b,e)},{immediate:!0,deep:!0}),t({validate:A,validateField:j,validateStep:F,validateTab:I,validateDynamicFields:z,validateCustomGroup:B,clearValidation:oe,getModel:V,setFields:le,resetFields:H,setFieldValue:W,getFieldValue:G,setFieldsValue:q,formRef:_,formModel:b,initialize:k,layoutType:M(()=>g.value.layout),shouldShowDefaultActions:Ce,isDirty:fe,getChangedFields:pe,isFieldDirty:me,markAsClean:he,asyncLoadingMap:_e}),(e,t)=>(U(),N(X(m),se({ref_key:`formRef`,ref:_,model:X(b),rules:X(D),"validate-on-rule-change":!1,"label-placement":g.value.labelPlacement,"label-width":g.value.labelWidth,size:g.value.size,disabled:g.value.disabled,readonly:g.value.readonly},e.$attrs),{default:Q(()=>[P(` 布局组件渲染 `),(U(),N(J(ye.value),{"form-items":X(ve),"layout-config":Se.value,options:X(O),"form-data":X(b),onTabChange:t[0]||=e=>$(`onTabChange`,e),onTabValidate:t[1]||=e=>$(`onTabValidate`,e),onStepChange:Te,onStepBeforeChange:De,onStepValidate:Oe,onFieldAdd:t[2]||=e=>$(`onFieldAdd`,e),onFieldRemove:t[3]||=e=>$(`onFieldRemove`,e),onFieldToggle:t[4]||=(e,t)=>g.value.onFieldToggle?.(e,t),onFieldsClear:t[5]||=e=>$(`onFieldsClear`),onRenderModeChange:t[6]||=e=>$(`onRenderModeChange`,e),onGroupToggle:t[7]||=(e,t)=>g.value.onGroupToggle?.(e,t),onGroupReset:t[8]||=e=>$(`onGroupReset`,e),onValidateSuccess:t[9]||=e=>p(`validate-success`,e),onValidateError:t[10]||=e=>p(`validate-error`,e),onFieldsChange:we},null,40,[`form-items`,`layout-config`,`options`,`form-data`])),P(` 表单操作按钮区域(只在特定布局中显示) `),Ce.value?(U(),N(X(h),{key:0,style:{"margin-top":`20px`}},{default:Q(()=>[ue(e.$slots,`action`,{form:_.value,model:X(b),validate:X(A),validateField:X(j),reset:X(H),setFields:X(le),getModel:X(V),clearValidation:X(oe)},()=>[R(X(E),null,{default:Q(()=>[R(X(a),{type:`primary`,onClick:X(de)},{default:Q(()=>t[11]||=[L(`提交`,-1)]),_:1,__:[11]},8,[`onClick`]),R(X(a),{onClick:X(Y)},{default:Q(()=>t[12]||=[L(`重置`,-1)]),_:1,__:[12]},8,[`onClick`])]),_:1})])]),_:3})):P(`v-if`,!0)]),_:3},16,[`model`,`rules`,`label-placement`,`label-width`,`size`,`disabled`,`readonly`]))}});export{Ae as a,$ as c,be as d,xe as f,Mt as i,ve as l,Nt as n,Me as o,jt as r,Ee as s,hn as t,ye as u};
|
|
2
2
|
//# sourceMappingURL=C_Form2.js.map
|