@wuxiaolins/form 0.0.10

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.
Files changed (118) hide show
  1. package/README.md +297 -0
  2. package/dist/es/_virtual/_plugin-vue_export-helper.js +1 -0
  3. package/dist/es/assets/UserAvatar.vue_vue_type_style_index_0_scoped_1f5ca2f1_lang-c84fa0dd.css +1 -0
  4. package/dist/es/assets/UserSelector.vue_vue_type_style_index_0_scoped_d1da15a2_lang-10fe93cf.css +1 -0
  5. package/dist/es/assets/UserSelector.vue_vue_type_style_index_0_scoped_e5931f05_lang-cc9e9617.css +1 -0
  6. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_20d7bb32_lang-1a84b608.css +1 -0
  7. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_2decce67_lang-3aa03f71.css +1 -0
  8. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_3bc314b8_lang-55157ef2.css +1 -0
  9. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_67c7d6a5_lang-8a12956d.css +1 -0
  10. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_95db6420_lang-9bcc3df8.css +1 -0
  11. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_b4ba048a_lang-d7e21de3.css +1 -0
  12. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_ceac5a29_lang-44bd119a.css +1 -0
  13. package/dist/es/assets/index.vue_vue_type_style_index_0_scoped_ef6eae82_lang-68f222b0.css +1 -0
  14. package/dist/es/assets/index.vue_vue_type_style_index_1_lang-14e3eb9c.css +1 -0
  15. package/dist/es/form/approval-flow/UserAvatar.vue.js +1 -0
  16. package/dist/es/form/approval-flow/UserAvatar.vue2.js +1 -0
  17. package/dist/es/form/approval-flow/UserSelector.vue.js +1 -0
  18. package/dist/es/form/approval-flow/UserSelector.vue2.js +1 -0
  19. package/dist/es/form/approval-flow/index.js +1 -0
  20. package/dist/es/form/approval-flow/src/index.vue.js +1 -0
  21. package/dist/es/form/approval-flow/src/index.vue2.js +1 -0
  22. package/dist/es/form/checkbox-field/index.js +1 -0
  23. package/dist/es/form/checkbox-field/src/index.vue.js +1 -0
  24. package/dist/es/form/checkbox-field/src/index.vue2.js +1 -0
  25. package/dist/es/form/date-field/index.js +1 -0
  26. package/dist/es/form/date-field/src/index.vue.js +1 -0
  27. package/dist/es/form/date-field/src/index.vue2.js +1 -0
  28. package/dist/es/form/date-range-field/index.js +1 -0
  29. package/dist/es/form/date-range-field/src/index.vue.js +1 -0
  30. package/dist/es/form/date-range-field/src/index.vue2.js +1 -0
  31. package/dist/es/form/department-field/index.js +1 -0
  32. package/dist/es/form/department-field/src/index.vue.js +1 -0
  33. package/dist/es/form/department-field/src/index.vue2.js +1 -0
  34. package/dist/es/form/dingtalk-form/index.js +1 -0
  35. package/dist/es/form/dingtalk-form/src/index.vue.js +1 -0
  36. package/dist/es/form/dingtalk-form/src/index.vue2.js +1 -0
  37. package/dist/es/form/form-render/index.js +1 -0
  38. package/dist/es/form/form-render/src/index.vue.js +1 -0
  39. package/dist/es/form/form-render/src/index.vue2.js +1 -0
  40. package/dist/es/form/input/index.js +1 -0
  41. package/dist/es/form/input/src/index.vue.js +1 -0
  42. package/dist/es/form/input/src/index.vue2.js +1 -0
  43. package/dist/es/form/number-field/index.js +1 -0
  44. package/dist/es/form/number-field/src/index.vue.js +1 -0
  45. package/dist/es/form/number-field/src/index.vue2.js +1 -0
  46. package/dist/es/form/radio-field/index.js +1 -0
  47. package/dist/es/form/radio-field/src/index.vue.js +1 -0
  48. package/dist/es/form/radio-field/src/index.vue2.js +1 -0
  49. package/dist/es/form/select-field/index.js +1 -0
  50. package/dist/es/form/select-field/src/index.vue.js +1 -0
  51. package/dist/es/form/select-field/src/index.vue2.js +1 -0
  52. package/dist/es/form/signature-field/index.js +1 -0
  53. package/dist/es/form/signature-field/src/index.vue.js +1 -0
  54. package/dist/es/form/signature-field/src/index.vue2.js +1 -0
  55. package/dist/es/form/switch-field/index.js +1 -0
  56. package/dist/es/form/switch-field/src/index.vue.js +1 -0
  57. package/dist/es/form/switch-field/src/index.vue2.js +1 -0
  58. package/dist/es/form/table-field/index.js +1 -0
  59. package/dist/es/form/table-field/src/index.vue.js +1 -0
  60. package/dist/es/form/table-field/src/index.vue2.js +1 -0
  61. package/dist/es/form/text-field/index.js +1 -0
  62. package/dist/es/form/text-field/src/index.vue.js +1 -0
  63. package/dist/es/form/text-field/src/index.vue2.js +1 -0
  64. package/dist/es/form/textarea-field/index.js +1 -0
  65. package/dist/es/form/textarea-field/src/index.vue.js +1 -0
  66. package/dist/es/form/textarea-field/src/index.vue2.js +1 -0
  67. package/dist/es/form/upload-field/index.js +1 -0
  68. package/dist/es/form/upload-field/src/index.vue.js +1 -0
  69. package/dist/es/form/upload-field/src/index.vue2.js +1 -0
  70. package/dist/es/index.js +1 -0
  71. package/dist/es/utils/dingtalk-adapter.js +3 -0
  72. package/dist/index.es.js +2431 -0
  73. package/dist/index.umd.js +3 -0
  74. package/dist/style.css +1 -0
  75. package/dist/types/form/approval-flow/index.d.ts +4 -0
  76. package/dist/types/form/approval-flow/index.d.ts.map +1 -0
  77. package/dist/types/form/approval-flow/types.d.ts +17 -0
  78. package/dist/types/form/approval-flow/types.d.ts.map +1 -0
  79. package/dist/types/form/checkbox-field/index.d.ts +2 -0
  80. package/dist/types/form/checkbox-field/index.d.ts.map +1 -0
  81. package/dist/types/form/date-field/index.d.ts +2 -0
  82. package/dist/types/form/date-field/index.d.ts.map +1 -0
  83. package/dist/types/form/date-range-field/index.d.ts +2 -0
  84. package/dist/types/form/date-range-field/index.d.ts.map +1 -0
  85. package/dist/types/form/department-field/index.d.ts +2 -0
  86. package/dist/types/form/department-field/index.d.ts.map +1 -0
  87. package/dist/types/form/dingtalk-form/index.d.ts +2 -0
  88. package/dist/types/form/dingtalk-form/index.d.ts.map +1 -0
  89. package/dist/types/form/form-render/index.d.ts +2 -0
  90. package/dist/types/form/form-render/index.d.ts.map +1 -0
  91. package/dist/types/form/input/index.d.ts +2 -0
  92. package/dist/types/form/input/index.d.ts.map +1 -0
  93. package/dist/types/form/number-field/index.d.ts +2 -0
  94. package/dist/types/form/number-field/index.d.ts.map +1 -0
  95. package/dist/types/form/radio-field/index.d.ts +2 -0
  96. package/dist/types/form/radio-field/index.d.ts.map +1 -0
  97. package/dist/types/form/select-field/index.d.ts +2 -0
  98. package/dist/types/form/select-field/index.d.ts.map +1 -0
  99. package/dist/types/form/signature-field/index.d.ts +2 -0
  100. package/dist/types/form/signature-field/index.d.ts.map +1 -0
  101. package/dist/types/form/switch-field/index.d.ts +2 -0
  102. package/dist/types/form/switch-field/index.d.ts.map +1 -0
  103. package/dist/types/form/table-field/index.d.ts +3 -0
  104. package/dist/types/form/table-field/index.d.ts.map +1 -0
  105. package/dist/types/form/text-field/index.d.ts +2 -0
  106. package/dist/types/form/text-field/index.d.ts.map +1 -0
  107. package/dist/types/form/textarea-field/index.d.ts +2 -0
  108. package/dist/types/form/textarea-field/index.d.ts.map +1 -0
  109. package/dist/types/form/upload-field/index.d.ts +2 -0
  110. package/dist/types/form/upload-field/index.d.ts.map +1 -0
  111. package/dist/types/index.d.ts +23 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/types/form-types.d.ts +201 -0
  114. package/dist/types/types/form-types.d.ts.map +1 -0
  115. package/dist/types/utils/dingtalk-adapter.d.ts +359 -0
  116. package/dist/types/utils/dingtalk-adapter.d.ts.map +1 -0
  117. package/dist/uno.css +34 -0
  118. package/package.json +88 -0
@@ -0,0 +1 @@
1
+ import{default as o}from"./src/index.vue.js";export{o as default};
@@ -0,0 +1 @@
1
+ import e from"./index.vue2.js";/* empty css */import o from"../../../_virtual/_plugin-vue_export-helper.js";const f=o(e,[["__scopeId","data-v-ef6eae82"]]);export{f as default};
@@ -0,0 +1 @@
1
+ import{defineComponent as z,computed as I,ref as k,watch as L,openBlock as w,createElementBlock as S,createElementVNode as g,createVNode as s,unref as o,withCtx as a,createTextVNode as f,createCommentVNode as O,createBlock as J,toDisplayString as P}from"vue";import{Button as v,Modal as $,Space as j,message as C}from"ant-design-vue";import{EditOutlined as T,DeleteOutlined as q}from"@ant-design/icons-vue";const A={class:"bsy-signature-field"},F={key:0,class:"signature-preview"},G=["src"],H={key:0,class:"signature-actions"},K={class:"signature-modal-content"},Q={class:"canvas-container"},Z=["width","height"],ee={class:"signature-modal-actions"},oe=z({__name:"index",props:{modelValue:{default:void 0},placeholder:{default:"点击签名"},disabled:{type:Boolean,default:!1},width:{default:400},height:{default:200},lineWidth:{default:2},lineColor:{default:"#000000"},backgroundColor:{default:"#ffffff"}},emits:["update:modelValue","change"],setup(X,{emit:Y}){const n=X,y=Y,d=I({get:()=>n.modelValue,set:t=>y("update:modelValue",t)}),u=k(),c=k(!1),p=k(!1),m=k(!1);let l=null,h=0,_=0;const E=()=>{u.value&&(l=u.value.getContext("2d"),l&&(l.fillStyle=n.backgroundColor,l.fillRect(0,0,n.width,n.height),l.strokeStyle=n.lineColor,l.lineWidth=n.lineWidth,l.lineCap="round",l.lineJoin="round"))},V=t=>{var i;if(n.disabled)return;p.value=!0,m.value=!0;const e=(i=u.value)==null?void 0:i.getBoundingClientRect();if(e)if(t instanceof MouseEvent)h=t.clientX-e.left,_=t.clientY-e.top;else{const r=t.touches[0];h=r.clientX-e.left,_=r.clientY-e.top}},M=t=>{var B;if(!p.value||!l)return;const e=(B=u.value)==null?void 0:B.getBoundingClientRect();if(!e)return;let i=0,r=0;if(t instanceof MouseEvent)i=t.clientX-e.left,r=t.clientY-e.top;else{t.preventDefault();const D=t.touches[0];i=D.clientX-e.left,r=D.clientY-e.top}l.beginPath(),l.moveTo(h,_),l.lineTo(i,r),l.stroke(),h=i,_=r},b=()=>{p.value=!1},x=()=>{l&&(l.fillStyle=n.backgroundColor,l.fillRect(0,0,n.width,n.height),m.value=!1)},N=()=>{if(!m.value){C.warning("请先签名");return}if(u.value)try{const t=u.value.toDataURL("image/png");d.value=t,y("change",t),c.value=!1,C.success("签名保存成功")}catch(t){console.error("保存签名失败:",t),C.error("保存签名失败")}},R=()=>{n.disabled||(c.value=!0,setTimeout(()=>{E(),d.value&&U(d.value)},100))},U=t=>{if(!l||!u.value)return;const e=new Image;e.onload=()=>{l.drawImage(e,0,0),m.value=!0},e.src=t},W=()=>{d.value=void 0,y("change",void 0),C.success("签名已删除")};return L(c,t=>{t||(p.value=!1)}),(t,e)=>(w(),S("div",A,[d.value?(w(),S("div",F,[g("img",{src:d.value,alt:"签名",class:"signature-image"},null,8,G),t.disabled?O("",!0):(w(),S("div",H,[s(o(v),{type:"link",size:"small",onClick:R},{icon:a(()=>[s(o(T))]),default:a(()=>[e[2]||(e[2]=f(" 重新签名 "))]),_:1,__:[2]}),s(o(v),{type:"link",danger:"",size:"small",onClick:W},{icon:a(()=>[s(o(q))]),default:a(()=>[e[3]||(e[3]=f(" 删除 "))]),_:1,__:[3]})]))])):(w(),J(o(v),{key:1,type:"dashed",block:"",disabled:t.disabled,onClick:R},{icon:a(()=>[s(o(T))]),default:a(()=>[f(" "+P(t.placeholder),1)]),_:1},8,["disabled"])),s(o($),{open:c.value,"onUpdate:open":e[1]||(e[1]=i=>c.value=i),title:"手写签名",width:n.width+80,footer:null,"mask-closable":!1},{default:a(()=>[g("div",K,[g("div",Q,[g("canvas",{ref_key:"canvasRef",ref:u,width:n.width,height:n.height,class:"signature-canvas",onMousedown:V,onMousemove:M,onMouseup:b,onMouseleave:b,onTouchstart:V,onTouchmove:M,onTouchend:b},null,40,Z)]),g("div",ee,[s(o(j),null,{default:a(()=>[s(o(v),{type:"primary",danger:"",onClick:x},{default:a(()=>e[4]||(e[4]=[f("清空")])),_:1,__:[4]}),s(o(v),{onClick:e[0]||(e[0]=i=>c.value=!1)},{default:a(()=>e[5]||(e[5]=[f(" 取消 ")])),_:1,__:[5]}),s(o(v),{type:"primary",onClick:N},{default:a(()=>e[6]||(e[6]=[f(" 保存 ")])),_:1,__:[6]})]),_:1})])])]),_:1},8,["open","width"])]))}});export{oe as default};
@@ -0,0 +1 @@
1
+ import{default as o}from"./src/index.vue2.js";export{o as default};
@@ -0,0 +1 @@
1
+ import f from"./index.vue2.js";export{f as default};
@@ -0,0 +1 @@
1
+ import{defineComponent as h,computed as i,openBlock as r,createBlock as s,unref as k}from"vue";import{Switch as f}from"ant-design-vue";const C=h({__name:"index",props:{modelValue:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},size:{default:"default"},checkedChildren:{default:void 0},unCheckedChildren:{default:void 0},checkedValue:{type:[Boolean,String,Number],default:!0},unCheckedValue:{type:[Boolean,String,Number],default:!1}},emits:["update:modelValue","change"],setup(c,{emit:u}){const l=c,a=u,n=i({get:()=>l.modelValue,set:e=>a("update:modelValue",e)}),o=e=>{const d=e?l.checkedValue:l.unCheckedValue;a("change",d)};return(e,d)=>(r(),s(k(f),{checked:n.value,"onUpdate:checked":d[0]||(d[0]=t=>n.value=t),disabled:e.disabled,loading:e.loading,size:e.size,"checked-children":e.checkedChildren,"un-checked-children":e.unCheckedChildren,"checked-value":e.checkedValue,"un-checked-value":e.unCheckedValue,onChange:o},null,8,["checked","disabled","loading","size","checked-children","un-checked-children","checked-value","un-checked-value"]))}});export{C as default};
@@ -0,0 +1 @@
1
+ import a from"./src/index.vue.js";export{a as default};
@@ -0,0 +1 @@
1
+ import o from"./index.vue2.js";/* empty css */import t from"../../../_virtual/_plugin-vue_export-helper.js";const m=t(o,[["__scopeId","data-v-95db6420"]]);export{m as default};
@@ -0,0 +1 @@
1
+ import{defineComponent as S,ref as T,watch as E,openBlock as n,createElementBlock as m,Fragment as v,renderList as y,createElementVNode as u,toDisplayString as b,createBlock as f,unref as i,withCtx as r,createTextVNode as R,createCommentVNode as q,createVNode as c,resolveDynamicComponent as O,mergeProps as U}from"vue";import{Button as F,Row as x,Col as J,FormItem as M}from"ant-design-vue";import{PlusOutlined as P}from"@ant-design/icons-vue";import C from"../../text-field/src/index.vue2.js";import z from"../../textarea-field/src/index.vue2.js";import I from"../../number-field/src/index.vue2.js";import L from"../../select-field/src/index.vue2.js";import j from"../../radio-field/src/index.vue2.js";import G from"../../checkbox-field/src/index.vue2.js";import H from"../../date-field/src/index.vue2.js";import K from"../../date-range-field/src/index.vue.js";import Q from"../../switch-field/src/index.vue2.js";import V from"../../upload-field/src/index.vue2.js";import W from"../../department-field/src/index.vue2.js";import X from"../../signature-field/src/index.vue.js";const Y={class:"bsy-table-field"},Z={class:"item-header"},ee={class:"item-index"},oe={class:"item-content"},_e=S({__name:"index",props:{modelValue:{default:()=>[]},children:{default:()=>[]},actionName:{default:"添加"},maxRows:{default:void 0},minRows:{default:void 0},disabled:{type:Boolean,default:!1},labelCol:{default:()=>({span:6})},wrapperCol:{default:()=>({span:18})}},emits:["update:modelValue","change"],setup(k,{emit:$}){var _;const o=k,g=$,a=T([]);console.log("🎯 TableField 组件初始化"),console.log(" -> props.children:",JSON.stringify(o.children,null,2)),console.log(" -> props.children 长度:",(_=o.children)==null?void 0:_.length),console.log(" -> props.children 类型:",typeof o.children),console.log(" -> props.children 是数组:",Array.isArray(o.children)),console.log(" -> props.modelValue:",JSON.stringify(o.modelValue,null,2)),console.log(" -> props.actionName:",o.actionName),E(()=>o.modelValue,e=>{if(console.log("🔍 TableField modelValue 变化:",e),console.log(" -> 类型:",typeof e),console.log(" -> 是数组:",Array.isArray(e)),console.log(" -> 长度:",e==null?void 0:e.length),Array.isArray(e)&&e.length>0)console.log(" -> 第一行数据:",e[0]),console.log(" -> 第一行数据类型:",typeof e[0]),console.log(" -> 第一行是数组:",Array.isArray(e[0])),a.value=e.map((l,s)=>(console.log(` -> 处理第 ${s+1} 行:`,l),{...l})),console.log(" -> tableData 设置为:",a.value);else if(a.value.length===0&&(console.log(" -> 没有初始数据,根据 minRows 添加空行"),o.minRows&&o.minRows>0)){for(let l=0;l<o.minRows;l++)a.value.push(h());console.log(" -> 添加了",o.minRows,"个空行")}},{immediate:!0});const w=e=>({TextField:C,TextareaField:z,NumberField:I,SelectField:L,RadioField:j,CheckboxField:G,DateField:H,DateRangeField:K,SwitchField:Q,UploadField:V,DepartmentField:W,SignatureField:X})[e]||C;function h(){const e={};return o.children&&o.children.forEach(l=>{e[l.id]=void 0}),e}function N(){o.maxRows&&a.value.length>=o.maxRows||(a.value.push(h()),p())}function A(e){o.minRows&&a.value.length<=o.minRows||(a.value.splice(e,1),p())}function D(e,l,s){a.value[e][l]=s,p()}function p(){const e=a.value.map(l=>({...l}));g("update:modelValue",e),g("change",e)}return(e,l)=>(n(),m("div",Y,[(n(!0),m(v,null,y(a.value,(s,d)=>(n(),m("div",{key:d,class:"table-field-item"},[u("div",Z,[u("span",ee,b(d+1),1),!e.disabled&&!(e.minRows&&a.value.length<=e.minRows)?(n(),f(i(F),{key:0,type:"link",danger:"",size:"small",onClick:t=>A(d)},{default:r(()=>l[0]||(l[0]=[R(" 删除 ")])),_:2,__:[0]},1032,["onClick"])):q("",!0)]),u("div",oe,[c(i(x),{gutter:16},{default:r(()=>[(n(!0),m(v,null,y(e.children,t=>(n(),f(i(J),{key:t.id,span:t.span||24},{default:r(()=>[c(i(M),{label:t.label,"label-col":o.labelCol,"wrapper-col":o.wrapperCol,required:t.required},{default:r(()=>[(n(),f(O(w(t.type)),U({"model-value":s[t.id]},{ref_for:!0},t.props||{},{disabled:e.disabled,"onUpdate:modelValue":B=>D(d,t.id,B)}),null,16,["model-value","disabled","onUpdate:modelValue"]))]),_:2},1032,["label","label-col","wrapper-col","required"])]),_:2},1032,["span"]))),128))]),_:2},1024)])]))),128)),c(i(F),{type:"dashed",block:"",disabled:e.disabled||!!(e.maxRows&&a.value.length>=e.maxRows),onClick:N},{icon:r(()=>[c(i(P))]),default:r(()=>[R(" "+b(e.actionName),1)]),_:1},8,["disabled"])]))}});export{_e as default};
@@ -0,0 +1 @@
1
+ import{default as o}from"./src/index.vue2.js";export{o as default};
@@ -0,0 +1 @@
1
+ import f from"./index.vue2.js";export{f as default};
@@ -0,0 +1 @@
1
+ import{defineComponent as i,computed as p,openBlock as m,createBlock as h,unref as c}from"vue";import{Input as g}from"ant-design-vue";const y=i({__name:"index",props:{modelValue:{default:""},placeholder:{default:"请输入"},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},maxLength:{default:void 0},showCount:{type:Boolean,default:!1},allowClear:{type:Boolean,default:!0},size:{default:"middle"},prefix:{default:void 0},suffix:{default:void 0}},emits:["update:modelValue","change","blur","focus"],setup(u,{emit:n}){const t=u,l=n,o=p({get:()=>t.modelValue,set:e=>l("update:modelValue",e)}),d=e=>{const a=e.target;l("change",a.value)},s=e=>{l("blur",e)},r=e=>{l("focus",e)};return(e,a)=>(m(),h(c(g),{value:o.value,"onUpdate:value":a[0]||(a[0]=f=>o.value=f),placeholder:e.placeholder,disabled:e.disabled,readonly:e.readonly,maxlength:e.maxLength,"show-count":e.showCount,"allow-clear":e.allowClear,size:e.size,prefix:e.prefix,suffix:e.suffix,onChange:d,onBlur:s,onFocus:r},null,8,["value","placeholder","disabled","readonly","maxlength","show-count","allow-clear","size","prefix","suffix"]))}});export{y as default};
@@ -0,0 +1 @@
1
+ import{default as o}from"./src/index.vue2.js";export{o as default};
@@ -0,0 +1 @@
1
+ import f from"./index.vue2.js";export{f as default};
@@ -0,0 +1 @@
1
+ import{defineComponent as c,computed as m,openBlock as h,createBlock as i,unref as w}from"vue";import{Input as g}from"ant-design-vue";const v=c({__name:"index",props:{modelValue:{default:""},placeholder:{default:"请输入"},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},maxLength:{default:void 0},showCount:{type:Boolean,default:!1},allowClear:{type:Boolean,default:!0},rows:{default:4},autoSize:{type:[Boolean,Object],default:!1}},emits:["update:modelValue","change","blur","focus"],setup(t,{emit:n}){const{TextArea:u}=g,d=t,l=n,o=m({get:()=>d.modelValue,set:e=>l("update:modelValue",e)}),s=e=>{const a=e.target;l("change",a.value)},r=e=>{l("blur",e)},p=e=>{l("focus",e)};return(e,a)=>(h(),i(w(u),{value:o.value,"onUpdate:value":a[0]||(a[0]=f=>o.value=f),placeholder:e.placeholder,disabled:e.disabled,readonly:e.readonly,maxlength:e.maxLength,"show-count":e.showCount,"allow-clear":e.allowClear,rows:e.rows,"auto-size":e.autoSize,onChange:s,onBlur:r,onFocus:p},null,8,["value","placeholder","disabled","readonly","maxlength","show-count","allow-clear","rows","auto-size"]))}});export{v as default};
@@ -0,0 +1 @@
1
+ import{default as o}from"./src/index.vue2.js";export{o as default};
@@ -0,0 +1 @@
1
+ import f from"./index.vue2.js";export{f as default};
@@ -0,0 +1 @@
1
+ import{defineComponent as S,computed as x,openBlock as s,createBlock as i,unref as o,withCtx as n,createVNode as r,createTextVNode as B,toDisplayString as u,createElementBlock as T,createElementVNode as V}from"vue";import{Upload as z,Button as C,message as p}from"ant-design-vue";import{UploadOutlined as c}from"@ant-design/icons-vue";const k={key:1},E={style:{"margin-top":"8px"}},N=S({__name:"index",props:{modelValue:{default:()=>[]},action:{default:"/upload"},accept:{default:void 0},multiple:{type:Boolean,default:!1},maxCount:{default:1},maxSize:{default:10},disabled:{type:Boolean,default:!1},listType:{default:"text"},buttonText:{default:"上传文件"},headers:{default:void 0},data:{type:[Object,Function],default:void 0}},emits:["update:modelValue","change","success","error"],setup(m,{emit:f}){const l=m,a=f,d=x({get:()=>l.modelValue,set:e=>a("update:modelValue",e)}),b=({fileList:e})=>{d.value=e,a("change",e)},h=e=>e.size/1024/1024<l.maxSize?!0:(p.error(`文件大小不能超过 ${l.maxSize}MB`),!1),y=(e,t)=>{a("success",t,e)},g=(e,t)=>{a("error",t,e),p.error(`${t.name} 上传失败`)};return(e,t)=>(s(),i(o(z),{"file-list":d.value,"onUpdate:fileList":t[0]||(t[0]=v=>d.value=v),action:e.action,accept:e.accept,multiple:e.multiple,"max-count":e.maxCount,disabled:e.disabled,"list-type":e.listType,headers:e.headers,data:e.data,"before-upload":h,onChange:b,onSuccess:y,onError:g},{default:n(()=>[e.listType!=="picture-card"?(s(),i(o(C),{key:0,disabled:e.disabled},{default:n(()=>[r(o(c)),B(" "+u(e.buttonText),1)]),_:1},8,["disabled"])):(s(),T("div",k,[r(o(c)),V("div",E,u(e.buttonText),1)]))]),_:1},8,["file-list","action","accept","multiple","max-count","disabled","list-type","headers","data"]))}});export{N as default};
@@ -0,0 +1 @@
1
+ import{default as a}from"./form/input/src/index.vue.js";import{default as o}from"./form/text-field/src/index.vue2.js";import{default as f}from"./form/textarea-field/src/index.vue2.js";import{default as d}from"./form/number-field/src/index.vue2.js";import{default as p}from"./form/select-field/src/index.vue2.js";import{default as u}from"./form/radio-field/src/index.vue2.js";import{default as y}from"./form/checkbox-field/src/index.vue2.js";import{default as F}from"./form/date-field/src/index.vue2.js";import{default as D}from"./form/date-range-field/src/index.vue.js";import{default as c}from"./form/switch-field/src/index.vue2.js";import{default as S}from"./form/upload-field/src/index.vue2.js";import{default as k}from"./form/table-field/src/index.vue.js";import{default as h}from"./form/department-field/src/index.vue2.js";import{default as A}from"./form/signature-field/src/index.vue.js";import{default as v}from"./form/form-render/src/index.vue.js";import{default as I}from"./form/dingtalk-form/src/index.vue.js";import{default as j}from"./form/approval-flow/src/index.vue.js";import{default as z}from"./form/approval-flow/UserSelector.vue.js";import{DingTalkFormAdapter as G}from"./utils/dingtalk-adapter.js";export{j as BsyApprovalFlow,y as BsyCheckboxField,F as BsyDateField,D as BsyDateRangeField,h as BsyDepartmentField,I as BsyDingTalkForm,a as BsyFormInput,v as BsyFormRender,d as BsyNumberField,u as BsyRadioField,p as BsySelectField,A as BsySignatureField,c as BsySwitchField,k as BsyTableField,o as BsyTextField,f as BsyTextareaField,S as BsyUploadField,z as BsyUserSelector,G as DingTalkFormAdapter};
@@ -0,0 +1,3 @@
1
+ import d from"dayjs";class p{static parseSchema(e){let s;try{s=typeof e.schemaContent=="string"?JSON.parse(e.schemaContent):e.schemaContent}catch(t){throw console.error("解析 Schema 失败:",t),new Error("无效的 Schema 格式")}const a=[];return s.items&&Array.isArray(s.items)&&(console.log("📋 Schema items 总数:",s.items.length),s.items.forEach((t,i)=>{var o,n,l;console.log(`
2
+ 处理 item ${i+1}:`,{componentName:t.componentName,id:(o=t.props)==null?void 0:o.id,hasChildren:!!t.children,childrenCount:((n=t.children)==null?void 0:n.length)||0});const r=this.convertSchemaItem(t);r?(console.log(` ✓ 添加字段: ${r.id} (${r.type}), children: ${((l=r.children)==null?void 0:l.length)||0}`),a.push(r)):console.log(" ✗ 字段转换失败或被跳过")}),console.log(`
3
+ 📊 最终 fields 总数:`,a.length)),a.sort((t,i)=>(t.order||0)-(i.order||0)),console.log("解析后的字段列表:",a),{title:e.name||s.title,description:e.description||s.description,fields:a,gutter:s.gutter,groups:s.groups}}static convertSchemaItem(e){var c;const s=((c=e.props)==null?void 0:c.id)||e.id,a=e.componentName;if(!s||!a)return console.warn("字段缺少 id 或 componentName:",e),null;const i={TextField:"TextField",TextareaField:"TextareaField",NumberField:"NumberField",DDSelectField:"SelectField",DDMultiSelectField:"SelectField",RadioField:"RadioField",CheckboxField:"CheckboxField",DateField:"DateField",DateRangeField:"DateRangeField",DDDateField:"DateField",DDDateRangeField:"DateRangeField",SwitchField:"SwitchField",DDAttachmentField:"UploadField",DDPhotoField:"UploadField",PhoneField:"TextField",EmailField:"TextField",DepartmentField:"DepartmentField",SignatureField:"SignatureField",TableField:"TableField"}[a];if(!i)return console.log(`跳过非输入组件: ${a}`),null;const r=e.props||{},o={placeholder:r.placeholder||`请输入${r.label||""}`};i==="SelectField"?(o.options=this.convertOptions(r.options||[]),o.showSearch=r.showSearch??!0,o.allowClear=r.allowClear??!0,a==="DDMultiSelectField"&&(o.mode="multiple"),a==="DepartmentField"&&(o.placeholder=r.placeholder||"请选择部门",console.warn(`DepartmentField (${s}) 需要从钉钉 API 获取部门列表`))):i==="RadioField"||i==="CheckboxField"?o.options=this.convertOptions(r.options||[]):i==="NumberField"?(o.min=r.min,o.max=r.max,o.step=r.step??1,o.precision=r.precision):i==="DateField"?(o.format=r.format||"YYYY-MM-DD",o.showTime=r.showTime??!1):i==="DateRangeField"?(o.format=r.format||"YYYY-MM-DD",o.showTime=r.showTime??!1,o.placeholder=["开始日期","结束日期"]):i==="TextareaField"?(o.rows=r.rows??4,o.maxLength=r.maxLength,o.showCount=r.showCount??!1):i==="TextField"?(o.maxLength=r.maxLength,o.showCount=r.showCount??!1,a==="PhoneField"&&(o.placeholder=r.placeholder||"请输入手机号",o.maxLength=r.maxLength||11),a==="EmailField"&&(o.placeholder=r.placeholder||"请输入邮箱")):i==="UploadField"?(o.action=r.action||"/api/upload",o.maxCount=r.maxCount??9,o.maxSize=r.maxSize??10,a==="DDPhotoField"?(o.accept=r.accept||"image/*",o.listType="picture-card"):o.accept=r.accept):i==="TableField"?(o.actionName=r.actionName||"添加",o.showIndex=r.showIndex??!0,o.maxRows=r.maxRows,o.minRows=r.minRows):i==="DepartmentField"?(o.placeholder=r.placeholder||"请选择部门",o.showSearch=r.showSearch??!0,o.allowClear=r.allowClear??!0,o.treeDefaultExpandAll=r.treeDefaultExpandAll??!1,o.apiUrl=r.apiUrl||"/api/dingtalk/departments",o.useTreeSelect=r.useTreeSelect??!0,(r.multiple||r.mode==="multiple")&&(o.mode="multiple")):i==="SignatureField"&&(o.placeholder=r.placeholder||"点击签名",o.width=r.width??400,o.height=r.height??200,o.lineWidth=r.lineWidth??2,o.lineColor=r.lineColor||"#000000",o.backgroundColor=r.backgroundColor||"#ffffff"),r.disabled&&(o.disabled=!0),r.behaviorLinkage&&(o.behaviorLinkage=r.behaviorLinkage);let n;i==="TableField"&&(console.log(`🔍 处理 TableField ${s}:`,JSON.stringify(e,null,2)),e.children&&Array.isArray(e.children)?(console.log(` ✅ item.children 存在,数量: ${e.children.length}`),n=[],e.children.forEach((f,h)=>{console.log(` -> 处理子字段 ${h+1}:`,JSON.stringify(f,null,2));const m=this.convertSchemaItem(f);m?(console.log(` ✓ 成功转换: ${m.id} (${m.type})`),n.push(m)):console.log(" ✗ 转换失败或被跳过")}),console.log(" -> 最终 children 数量:",n.length),console.log(" -> 最终 children 内容:",JSON.stringify(n,null,2))):(console.error(` ❌ TableField ${s} 没有 children 或 children 不是数组!`),console.error(" -> item.children:",e.children)));const l={id:s,type:i,label:r.label||r.bizAlias||s,required:r.required??!1,props:o,children:n,rules:r.rules||[],span:e.span??r.span??24,offset:e.offset??r.offset,order:e.order??r.order??0,labelCol:e.labelCol??r.labelCol,wrapperCol:e.wrapperCol??r.wrapperCol,hidden:e.hidden??r.hidden??r.hiddenInApprovalDetail??!1,group:e.group??r.group};return i==="TableField"&&console.log("📦 返回 TableField 配置:",JSON.stringify(l,null,2)),l}static convertOptions(e){return Array.isArray(e)?e.map(s=>{let a=s;if(typeof s=="string")try{a=JSON.parse(s)}catch(t){return console.warn("解析选项 JSON 失败:",s,t),{label:s,value:s,disabled:!1}}return{label:a.value||a.label||a.text||a.key,value:a.key||a.value||a.label,disabled:a.disabled??!1}}):[]}static convertInstanceToFormData(e,s){const a={};if(!e.formComponentValues||!Array.isArray(e.formComponentValues))return console.warn("实例数据中没有 formComponentValues 或不是数组"),a;const t=new Map;return s.fields.forEach(i=>{t.set(i.id,i)}),console.log("字段映射表:",Array.from(t.keys())),console.log("实例数据字段:",e.formComponentValues.map(i=>i.name)),e.formComponentValues.forEach(i=>{const r=t.get(i.name);if(!r){console.warn(`未找到字段配置: ${i.name}`,i);return}console.log(`转换字段 ${i.name}:`,{原始值:i.value,字段类型:r.type,字段属性:r.props});const o=this.convertValueByType(i.value,r.type,r.props);console.log("转换后的值:",o),a[i.name]=o}),console.log("最终表单数据:",a),a}static convertValueByType(e,s,a){if(!(e==null||e===""))switch(console.log(`convertValueByType - 类型: ${s}, 原始值:`,e),s){case"NumberField":if(typeof e=="number")return e;if(typeof e=="string"){const t=Number(e);return isNaN(t)?void 0:t}return;case"DateField":if(typeof e=="string"||typeof e=="number"){const t=d(e);return t.isValid()?t:void 0}return d.isDayjs(e)?e:void 0;case"DateRangeField":if(Array.isArray(e)&&e.length===2){const t=d(e[0]),i=d(e[1]);if(t.isValid()&&i.isValid())return[t,i]}return;case"CheckboxField":if(Array.isArray(e))return e;if(typeof e=="string")try{const t=JSON.parse(e);return Array.isArray(t)?t:[e]}catch{return e.includes(",")?e.split(",").map(t=>t.trim()):[e]}return[];case"SelectField":if((a==null?void 0:a.mode)==="multiple"){if(Array.isArray(e))return e;if(typeof e=="string")try{const t=JSON.parse(e);return Array.isArray(t)?t:[e]}catch{return e.includes(",")?e.split(",").map(t=>t.trim()):[e]}return[]}return Array.isArray(e)?e[0]:e;case"SwitchField":return typeof e=="boolean"?e:typeof e=="string"?e==="true"||e==="1":typeof e=="number"?e===1:!1;case"UploadField":if(Array.isArray(e))return e.map((t,i)=>({uid:t.fileId||t.spaceId||t.photoId||t.uid||`file-${i}`,name:t.fileName||t.name||"未命名文件",status:"done",url:t.fileUrl||t.url,size:t.fileSize||t.size,type:t.fileType||t.type}));if(typeof e=="string")try{const t=JSON.parse(e);return Array.isArray(t)?this.convertValueByType(t,s,a):[]}catch{return e.startsWith("http://")||e.startsWith("https://")?[{uid:"file-0",name:"图片",status:"done",url:e}]:[]}return[];case"TextField":case"TextareaField":return String(e);case"RadioField":return Array.isArray(e)?e[0]:e;case"TableField":if(Array.isArray(e))return e.map(t=>{if(typeof t=="object"&&!Array.isArray(t))return t;if(Array.isArray(t)){const i={};return t.forEach(r=>{r&&r.name&&(i[r.name]=r.value)}),i}return t});if(typeof e=="string")try{const t=JSON.parse(e);return Array.isArray(t)?this.convertValueByType(t,s,a):[]}catch{return[]}return[];case"DepartmentField":if((a==null?void 0:a.mode)==="multiple"){if(Array.isArray(e))return e;if(typeof e=="string")try{const t=JSON.parse(e);return Array.isArray(t)?t:[e]}catch{return e.includes(",")?e.split(",").map(t=>t.trim()):[e]}return[]}return Array.isArray(e)?e[0]:e;case"SignatureField":return typeof e=="string"?e:void 0;default:return e}}static convertFormDataToInstance(e,s){const a=[];return console.log("开始转换表单数据为钉钉格式:",e),s.fields.forEach(t=>{const i=e[t.id];if(i==null){console.log(`跳过未填写的字段: ${t.id}`);return}if(t.hidden){console.log(`跳过隐藏字段: ${t.id}`);return}const r=this.convertValueToComponent(i,t.type,t.id,t.label,t.props);r&&(console.log(`字段 ${t.id} 转换结果:`,r),a.push(r))}),console.log("最终钉钉格式数据:",a),a}static createSubmitData(e,s,a){const t=this.convertFormDataToInstance(e,s),i={formUuid:a.formUuid,originatorUserId:a.originatorUserId,formComponentValues:t};return a.processCode&&(i.processCode=a.processCode),a.deptId&&(i.deptId=a.deptId),a.approvers&&a.approvers.length>0&&(i.approvers=a.approvers),a.ccList&&a.ccList.length>0&&(i.ccList=a.ccList),a.title&&(i.title=a.title),a.url&&(i.url=a.url),console.log("完整的钉钉提交数据:",i),i}static convertValueToComponent(e,s,a,t,i){let r=e,o;switch(console.log(`转换字段 ${t} ${a} (${s}):`,e),s){case"TextField":case"TextareaField":r=String(e),o=r;break;case"NumberField":r=typeof e=="number"?e:Number(e),o=String(r);break;case"DateField":if(d.isDayjs(e))r=e.valueOf(),o=e.format("YYYY-MM-DD HH:mm:ss");else if(e instanceof Date)r=e.getTime(),o=d(e).format("YYYY-MM-DD HH:mm:ss");else if(typeof e=="string"||typeof e=="number"){const n=d(e);r=n.valueOf(),o=n.format("YYYY-MM-DD HH:mm:ss")}break;case"DateRangeField":if(Array.isArray(e)&&e.length===2){const n=d.isDayjs(e[0])?e[0]:d(e[0]),l=d.isDayjs(e[1])?e[1]:d(e[1]);r=[n.valueOf(),l.valueOf()],o=`${n.format("YYYY-MM-DD")} 至 ${l.format("YYYY-MM-DD")}`}break;case"SelectField":if((i==null?void 0:i.mode)==="multiple")r=Array.isArray(e)?e:[e],i!=null&&i.options&&Array.isArray(r)&&(o=r.map(l=>{const c=i.options.find(f=>f.value===l);return(c==null?void 0:c.label)||l}).join(","));else if(r=Array.isArray(e)?e[0]:e,i!=null&&i.options){const n=i.options.find(l=>l.value===r);o=(n==null?void 0:n.label)||String(r)}break;case"RadioField":if(r=Array.isArray(e)?e[0]:e,i!=null&&i.options){const n=i.options.find(l=>l.value===r);o=(n==null?void 0:n.label)||String(r)}break;case"CheckboxField":r=Array.isArray(e)?e:[e],i!=null&&i.options&&Array.isArray(r)&&(o=r.map(l=>{const c=i.options.find(f=>f.value===l);return(c==null?void 0:c.label)||l}).join(","));break;case"SwitchField":r=e?1:0,o=e?"是":"否";break;case"UploadField":Array.isArray(e)?(r=e.map(n=>{const l={fileId:n.uid||n.fileId||n.photoId,fileName:n.name||n.fileName,fileUrl:n.url||n.fileUrl,fileSize:n.size||n.fileSize,fileType:n.type||n.fileType};return n.photoId&&(l.photoId=n.photoId),l}),o=e.map(n=>n.name||n.fileName||"文件").join(",")):(r=[],o="");break;case"TableField":Array.isArray(e)?(r=e.map(n=>Array.isArray(n)?n:typeof n=="object"?Object.keys(n).map(l=>({name:l,value:n[l]})):[]),o=`${e.length} 条记录`):(r=[],o="0 条记录");break;default:r=e,o=String(e);break}return{name:a,label:t,value:r,extValue:o}}static convertInstancesToFormDataList(e,s){return e.map(a=>({id:a.processInstanceId||a.formUuid,data:this.convertInstanceToFormData(a,s),meta:{createTime:a.createTime,modifyTime:a.modifyTime,originator:a.originator,title:a.title}}))}static validateFormData(e,s){const a=[];return s.fields.forEach(t=>{const i=e[t.id];t.required&&((i==null||i==="")&&a.push({field:t.id,message:`${t.label}不能为空`}),Array.isArray(i)&&i.length===0&&a.push({field:t.id,message:`${t.label}不能为空`})),t.rules&&Array.isArray(t.rules)&&t.rules.forEach(r=>{r.validator&&typeof r.validator=="function"&&r.validator(i)!==!0&&a.push({field:t.id,message:r.message||`${t.label}验证失败`})})}),{valid:a.length===0,errors:a}}}export{p as DingTalkFormAdapter,p as default};