ll-plus 2.6.17 → 2.6.19

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 (245) hide show
  1. package/es/components/advanced-filtering/index.d.ts +672 -284
  2. package/es/components/advanced-filtering/src/advanced-filtering.vue.d.ts +336 -142
  3. package/es/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +336 -142
  4. package/es/components/breadcrumb-card/index.d.ts +1 -1
  5. package/es/components/breadcrumb-card/src/breadcrumb-card.vue.d.ts +1 -1
  6. package/es/components/cascader/index.d.ts +8 -8
  7. package/es/components/cascader/src/cascader.vue.d.ts +8 -8
  8. package/es/components/checkbox/index.d.ts +217 -217
  9. package/es/components/checkbox/src/checkbox-group.vue.d.ts +217 -217
  10. package/es/components/checkbox/src/checkbox.d.ts +56 -56
  11. package/es/components/cropper/index.d.ts +19 -0
  12. package/es/components/cropper/src/cropper-image.d.ts +2 -0
  13. package/es/components/cropper/src/cropper-image.vue.d.ts +6 -0
  14. package/es/components/cropper/src/cropper-modal.vue.d.ts +13 -0
  15. package/es/components/drawer/index.d.ts +5 -5
  16. package/es/components/drawer/src/components/second-confirmation/index.d.ts +1 -1
  17. package/es/components/drawer/src/components/second-confirmation/src/second-confirmation.vue.d.ts +1 -1
  18. package/es/components/drawer/src/drawer.vue.d.ts +5 -5
  19. package/es/components/easy-cron/index.d.ts +95 -95
  20. package/es/components/easy-cron/src/components/easy-cron-inner.vue.d.ts +88 -88
  21. package/es/components/easy-cron/src/components/easy-cron-modal.vue.d.ts +88 -88
  22. package/es/components/easy-cron/src/easy-cron.vue.d.ts +95 -95
  23. package/es/components/form/index.d.ts +339 -142
  24. package/es/components/form/src/components/form-component.vue.d.ts +4 -1
  25. package/es/components/form/src/config/form.d.ts +59 -56
  26. package/es/components/form/src/form.vue.d.ts +335 -141
  27. package/es/components/icon-picker/index.d.ts +4 -0
  28. package/es/components/icon-picker/src/components/modal.vue.d.ts +4 -0
  29. package/es/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
  30. package/es/components/input/index.d.ts +35 -33
  31. package/es/components/input/src/input.vue.d.ts +35 -33
  32. package/es/components/input-number/index.d.ts +2 -0
  33. package/es/components/input-number/src/input-number.vue.d.ts +2 -0
  34. package/es/components/key-value/index.d.ts +1835 -680
  35. package/es/components/key-value/src/components/key-value-item.vue.d.ts +611 -226
  36. package/es/components/key-value/src/key-value.vue.d.ts +1835 -680
  37. package/es/components/modal/index.d.ts +1 -1
  38. package/es/components/modal/src/modal.vue.d.ts +1 -1
  39. package/es/components/new-drawer/index.d.ts +7 -7
  40. package/es/components/new-drawer/src/drawer.vue.d.ts +7 -7
  41. package/es/components/new-modal/index.d.ts +2 -2
  42. package/es/components/new-modal/src/modal.vue.d.ts +2 -2
  43. package/es/components/number-range/index.d.ts +2 -0
  44. package/es/components/number-range/src/number-range.vue.d.ts +2 -0
  45. package/es/components/rich-text-editor/index.d.ts +1 -1
  46. package/es/components/rich-text-editor/src/rich-text-editor.vue.d.ts +1 -1
  47. package/es/components/select/index.d.ts +4 -4
  48. package/es/components/select/src/select.vue.d.ts +4 -4
  49. package/es/components/select-group/index.d.ts +2 -2
  50. package/es/components/select-group/src/select-group.d.ts +1 -1
  51. package/es/components/select-group/src/select-group.vue.d.ts +2 -2
  52. package/es/components/table/index.d.ts +6 -6
  53. package/es/components/table/src/components/main-table.vue.d.ts +2 -2
  54. package/es/components/table/src/config/table.d.ts +2 -2
  55. package/es/components/table/src/table.vue.d.ts +6 -6
  56. package/es/components/textarea/index.d.ts +5 -5
  57. package/es/components/textarea/src/textarea.vue.d.ts +5 -5
  58. package/es/components/tooltip/index.d.ts +4 -4
  59. package/es/components/tooltip/src/tooltip.d.ts +1 -1
  60. package/es/components/tooltip/src/tooltip.vue.d.ts +4 -4
  61. package/es/components/tree-search/index.d.ts +1 -1
  62. package/es/components/tree-search/src/tree-search.vue.d.ts +1 -1
  63. package/es/components/upload-drag/index.d.ts +2 -2
  64. package/es/components/upload-drag/src/upload-drag.vue.d.ts +2 -2
  65. package/es/packages/components/cropper/src/cropper-image.mjs +8 -0
  66. package/es/packages/components/cropper/src/cropper-image.mjs.map +1 -1
  67. package/es/packages/components/cropper/src/cropper-image.vue2.mjs +43 -22
  68. package/es/packages/components/cropper/src/cropper-image.vue2.mjs.map +1 -1
  69. package/es/packages/components/cropper/src/cropper-modal.vue2.mjs +108 -72
  70. package/es/packages/components/cropper/src/cropper-modal.vue2.mjs.map +1 -1
  71. package/es/packages/components/form/src/components/form-component.vue2.mjs +19 -2
  72. package/es/packages/components/form/src/components/form-component.vue2.mjs.map +1 -1
  73. package/es/packages/components/form/src/config/form.mjs +21 -0
  74. package/es/packages/components/form/src/config/form.mjs.map +1 -1
  75. package/es/packages/components/form/src/form.vue2.mjs +56 -5
  76. package/es/packages/components/form/src/form.vue2.mjs.map +1 -1
  77. package/es/packages/components/icon-picker/src/components/modal.vue2.mjs +97 -76
  78. package/es/packages/components/icon-picker/src/components/modal.vue2.mjs.map +1 -1
  79. package/es/packages/components/input/src/input.vue2.mjs +8 -1
  80. package/es/packages/components/input/src/input.vue2.mjs.map +1 -1
  81. package/es/packages/components/input-number/src/input-number.vue2.mjs +8 -1
  82. package/es/packages/components/input-number/src/input-number.vue2.mjs.map +1 -1
  83. package/es/packages/components/key-value/src/config/key-value.mjs +2 -2
  84. package/es/packages/components/key-value/src/config/key-value.mjs.map +1 -1
  85. package/es/packages/components/select-group/src/select-group.vue2.mjs +1 -0
  86. package/es/packages/components/select-group/src/select-group.vue2.mjs.map +1 -1
  87. package/index.full.js +363 -175
  88. package/index.full.min.js +17 -17
  89. package/index.full.min.js.map +1 -1
  90. package/index.full.min.mjs +21 -21
  91. package/index.full.min.mjs.map +1 -1
  92. package/index.full.mjs +363 -175
  93. package/lib/components/advanced-filtering/index.d.ts +672 -284
  94. package/lib/components/advanced-filtering/src/advanced-filtering.vue.d.ts +336 -142
  95. package/lib/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +336 -142
  96. package/lib/components/breadcrumb-card/index.d.ts +1 -1
  97. package/lib/components/breadcrumb-card/src/breadcrumb-card.vue.d.ts +1 -1
  98. package/lib/components/cascader/index.d.ts +8 -8
  99. package/lib/components/cascader/src/cascader.vue.d.ts +8 -8
  100. package/lib/components/checkbox/index.d.ts +217 -217
  101. package/lib/components/checkbox/src/checkbox-group.vue.d.ts +217 -217
  102. package/lib/components/checkbox/src/checkbox.d.ts +56 -56
  103. package/lib/components/cropper/index.d.ts +19 -0
  104. package/lib/components/cropper/src/cropper-image.d.ts +2 -0
  105. package/lib/components/cropper/src/cropper-image.vue.d.ts +6 -0
  106. package/lib/components/cropper/src/cropper-modal.vue.d.ts +13 -0
  107. package/lib/components/drawer/index.d.ts +5 -5
  108. package/lib/components/drawer/src/components/second-confirmation/index.d.ts +1 -1
  109. package/lib/components/drawer/src/components/second-confirmation/src/second-confirmation.vue.d.ts +1 -1
  110. package/lib/components/drawer/src/drawer.vue.d.ts +5 -5
  111. package/lib/components/easy-cron/index.d.ts +95 -95
  112. package/lib/components/easy-cron/src/components/easy-cron-inner.vue.d.ts +88 -88
  113. package/lib/components/easy-cron/src/components/easy-cron-modal.vue.d.ts +88 -88
  114. package/lib/components/easy-cron/src/easy-cron.vue.d.ts +95 -95
  115. package/lib/components/form/index.d.ts +339 -142
  116. package/lib/components/form/src/components/form-component.vue.d.ts +4 -1
  117. package/lib/components/form/src/config/form.d.ts +59 -56
  118. package/lib/components/form/src/form.vue.d.ts +335 -141
  119. package/lib/components/icon-picker/index.d.ts +4 -0
  120. package/lib/components/icon-picker/src/components/modal.vue.d.ts +4 -0
  121. package/lib/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
  122. package/lib/components/input/index.d.ts +35 -33
  123. package/lib/components/input/src/input.vue.d.ts +35 -33
  124. package/lib/components/input-number/index.d.ts +2 -0
  125. package/lib/components/input-number/src/input-number.vue.d.ts +2 -0
  126. package/lib/components/key-value/index.d.ts +1835 -680
  127. package/lib/components/key-value/src/components/key-value-item.vue.d.ts +611 -226
  128. package/lib/components/key-value/src/key-value.vue.d.ts +1835 -680
  129. package/lib/components/modal/index.d.ts +1 -1
  130. package/lib/components/modal/src/modal.vue.d.ts +1 -1
  131. package/lib/components/new-drawer/index.d.ts +7 -7
  132. package/lib/components/new-drawer/src/drawer.vue.d.ts +7 -7
  133. package/lib/components/new-modal/index.d.ts +2 -2
  134. package/lib/components/new-modal/src/modal.vue.d.ts +2 -2
  135. package/lib/components/number-range/index.d.ts +2 -0
  136. package/lib/components/number-range/src/number-range.vue.d.ts +2 -0
  137. package/lib/components/rich-text-editor/index.d.ts +1 -1
  138. package/lib/components/rich-text-editor/src/rich-text-editor.vue.d.ts +1 -1
  139. package/lib/components/select/index.d.ts +4 -4
  140. package/lib/components/select/src/select.vue.d.ts +4 -4
  141. package/lib/components/select-group/index.d.ts +2 -2
  142. package/lib/components/select-group/src/select-group.d.ts +1 -1
  143. package/lib/components/select-group/src/select-group.vue.d.ts +2 -2
  144. package/lib/components/table/index.d.ts +6 -6
  145. package/lib/components/table/src/components/main-table.vue.d.ts +2 -2
  146. package/lib/components/table/src/config/table.d.ts +2 -2
  147. package/lib/components/table/src/table.vue.d.ts +6 -6
  148. package/lib/components/textarea/index.d.ts +5 -5
  149. package/lib/components/textarea/src/textarea.vue.d.ts +5 -5
  150. package/lib/components/tooltip/index.d.ts +4 -4
  151. package/lib/components/tooltip/src/tooltip.d.ts +1 -1
  152. package/lib/components/tooltip/src/tooltip.vue.d.ts +4 -4
  153. package/lib/components/tree-search/index.d.ts +1 -1
  154. package/lib/components/tree-search/src/tree-search.vue.d.ts +1 -1
  155. package/lib/components/upload-drag/index.d.ts +2 -2
  156. package/lib/components/upload-drag/src/upload-drag.vue.d.ts +2 -2
  157. package/lib/packages/components/cropper/src/cropper-image.js +8 -0
  158. package/lib/packages/components/cropper/src/cropper-image.js.map +1 -1
  159. package/lib/packages/components/cropper/src/cropper-image.vue2.js +42 -21
  160. package/lib/packages/components/cropper/src/cropper-image.vue2.js.map +1 -1
  161. package/lib/packages/components/cropper/src/cropper-modal.vue2.js +107 -71
  162. package/lib/packages/components/cropper/src/cropper-modal.vue2.js.map +1 -1
  163. package/lib/packages/components/form/src/components/form-component.vue2.js +18 -1
  164. package/lib/packages/components/form/src/components/form-component.vue2.js.map +1 -1
  165. package/lib/packages/components/form/src/config/form.js +21 -0
  166. package/lib/packages/components/form/src/config/form.js.map +1 -1
  167. package/lib/packages/components/form/src/form.vue2.js +54 -3
  168. package/lib/packages/components/form/src/form.vue2.js.map +1 -1
  169. package/lib/packages/components/icon-picker/src/components/modal.vue2.js +96 -75
  170. package/lib/packages/components/icon-picker/src/components/modal.vue2.js.map +1 -1
  171. package/lib/packages/components/input/src/input.vue2.js +8 -1
  172. package/lib/packages/components/input/src/input.vue2.js.map +1 -1
  173. package/lib/packages/components/input-number/src/input-number.vue2.js +8 -1
  174. package/lib/packages/components/input-number/src/input-number.vue2.js.map +1 -1
  175. package/lib/packages/components/key-value/src/config/key-value.js +2 -2
  176. package/lib/packages/components/key-value/src/config/key-value.js.map +1 -1
  177. package/lib/packages/components/select-group/src/select-group.vue2.js +1 -0
  178. package/lib/packages/components/select-group/src/select-group.vue2.js.map +1 -1
  179. package/package.json +1 -1
  180. package/theme-chalk/css/icon-picker.css +1 -1
  181. package/theme-chalk/css/index.css +1 -1
  182. package/types/packages/components/advanced-filtering/index.d.ts +672 -284
  183. package/types/packages/components/advanced-filtering/src/advanced-filtering.vue.d.ts +336 -142
  184. package/types/packages/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +336 -142
  185. package/types/packages/components/breadcrumb-card/index.d.ts +1 -1
  186. package/types/packages/components/breadcrumb-card/src/breadcrumb-card.vue.d.ts +1 -1
  187. package/types/packages/components/cascader/index.d.ts +8 -8
  188. package/types/packages/components/cascader/src/cascader.vue.d.ts +8 -8
  189. package/types/packages/components/checkbox/index.d.ts +217 -217
  190. package/types/packages/components/checkbox/src/checkbox-group.vue.d.ts +217 -217
  191. package/types/packages/components/checkbox/src/checkbox.d.ts +56 -56
  192. package/types/packages/components/cropper/index.d.ts +19 -0
  193. package/types/packages/components/cropper/src/cropper-image.d.ts +2 -0
  194. package/types/packages/components/cropper/src/cropper-image.vue.d.ts +6 -0
  195. package/types/packages/components/cropper/src/cropper-modal.vue.d.ts +13 -0
  196. package/types/packages/components/drawer/index.d.ts +5 -5
  197. package/types/packages/components/drawer/src/components/second-confirmation/index.d.ts +1 -1
  198. package/types/packages/components/drawer/src/components/second-confirmation/src/second-confirmation.vue.d.ts +1 -1
  199. package/types/packages/components/drawer/src/drawer.vue.d.ts +5 -5
  200. package/types/packages/components/easy-cron/index.d.ts +95 -95
  201. package/types/packages/components/easy-cron/src/components/easy-cron-inner.vue.d.ts +88 -88
  202. package/types/packages/components/easy-cron/src/components/easy-cron-modal.vue.d.ts +88 -88
  203. package/types/packages/components/easy-cron/src/easy-cron.vue.d.ts +95 -95
  204. package/types/packages/components/form/index.d.ts +339 -142
  205. package/types/packages/components/form/src/components/form-component.vue.d.ts +4 -1
  206. package/types/packages/components/form/src/config/form.d.ts +59 -56
  207. package/types/packages/components/form/src/form.vue.d.ts +335 -141
  208. package/types/packages/components/icon-picker/index.d.ts +4 -0
  209. package/types/packages/components/icon-picker/src/components/modal.vue.d.ts +4 -0
  210. package/types/packages/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
  211. package/types/packages/components/input/index.d.ts +35 -33
  212. package/types/packages/components/input/src/input.vue.d.ts +35 -33
  213. package/types/packages/components/input-number/index.d.ts +2 -0
  214. package/types/packages/components/input-number/src/input-number.vue.d.ts +2 -0
  215. package/types/packages/components/key-value/index.d.ts +1835 -680
  216. package/types/packages/components/key-value/src/components/key-value-item.vue.d.ts +611 -226
  217. package/types/packages/components/key-value/src/key-value.vue.d.ts +1835 -680
  218. package/types/packages/components/modal/index.d.ts +1 -1
  219. package/types/packages/components/modal/src/modal.vue.d.ts +1 -1
  220. package/types/packages/components/new-drawer/index.d.ts +7 -7
  221. package/types/packages/components/new-drawer/src/drawer.vue.d.ts +7 -7
  222. package/types/packages/components/new-modal/index.d.ts +2 -2
  223. package/types/packages/components/new-modal/src/modal.vue.d.ts +2 -2
  224. package/types/packages/components/number-range/index.d.ts +2 -0
  225. package/types/packages/components/number-range/src/number-range.vue.d.ts +2 -0
  226. package/types/packages/components/rich-text-editor/index.d.ts +1 -1
  227. package/types/packages/components/rich-text-editor/src/rich-text-editor.vue.d.ts +1 -1
  228. package/types/packages/components/select/index.d.ts +4 -4
  229. package/types/packages/components/select/src/select.vue.d.ts +4 -4
  230. package/types/packages/components/select-group/index.d.ts +2 -2
  231. package/types/packages/components/select-group/src/select-group.d.ts +1 -1
  232. package/types/packages/components/select-group/src/select-group.vue.d.ts +2 -2
  233. package/types/packages/components/table/index.d.ts +6 -6
  234. package/types/packages/components/table/src/components/main-table.vue.d.ts +2 -2
  235. package/types/packages/components/table/src/config/table.d.ts +2 -2
  236. package/types/packages/components/table/src/table.vue.d.ts +6 -6
  237. package/types/packages/components/textarea/index.d.ts +5 -5
  238. package/types/packages/components/textarea/src/textarea.vue.d.ts +5 -5
  239. package/types/packages/components/tooltip/index.d.ts +4 -4
  240. package/types/packages/components/tooltip/src/tooltip.d.ts +1 -1
  241. package/types/packages/components/tooltip/src/tooltip.vue.d.ts +4 -4
  242. package/types/packages/components/tree-search/index.d.ts +1 -1
  243. package/types/packages/components/tree-search/src/tree-search.vue.d.ts +1 -1
  244. package/types/packages/components/upload-drag/index.d.ts +2 -2
  245. package/types/packages/components/upload-drag/src/upload-drag.vue.d.ts +2 -2
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, watch, resolveComponent, openBlock, createElementBlock, Fragment, createVNode, withCtx, createElementVNode, normalizeClass, unref, createBlock, createCommentVNode, normalizeStyle, renderSlot } from 'vue';
1
+ import { defineComponent, ref, watch, watchEffect, resolveComponent, openBlock, createElementBlock, Fragment, createVNode, withCtx, createElementVNode, normalizeClass, unref, createBlock, createCommentVNode, normalizeStyle, renderSlot } from 'vue';
2
2
  import '../../../utils/index.mjs';
3
3
  import CropperImage from './cropper-image.vue.mjs';
4
4
  import { cropperModalProps, cropperModalEmits } from './cropper-image.mjs';
@@ -12,7 +12,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
12
12
  __name: "cropper-modal",
13
13
  props: cropperModalProps,
14
14
  emits: cropperModalEmits,
15
- setup(__props, { emit: __emit }) {
15
+ setup(__props, { expose: __expose, emit: __emit }) {
16
16
  const props = __props;
17
17
  const emits = __emit;
18
18
  const bem = createNamespace("cropper-modal");
@@ -20,16 +20,23 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
20
20
  const avatar = ref(props.avatar || "");
21
21
  const open = ref(false);
22
22
  const previewSource = ref("");
23
+ const loading = ref(props.loading);
24
+ const uploadLoading = ref(false);
23
25
  const cropper = ref();
24
26
  let scaleX = 1;
25
27
  let scaleY = 1;
26
28
  function handleBeforeUpload(file) {
27
29
  const reader = new FileReader();
28
30
  reader.readAsDataURL(file);
31
+ uploadLoading.value = true;
29
32
  src.value = "";
30
33
  previewSource.value = "";
31
34
  reader.onload = function(e) {
32
35
  src.value = e.target?.result ?? "";
36
+ uploadLoading.value = false;
37
+ };
38
+ reader.onerror = () => {
39
+ uploadLoading.value = false;
33
40
  };
34
41
  return false;
35
42
  }
@@ -59,10 +66,13 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
59
66
  avatar.value = previewSource.value;
60
67
  open.value = false;
61
68
  }
69
+ const cleanValue = () => {
70
+ src.value = "";
71
+ avatar.value = "";
72
+ };
62
73
  watch(
63
74
  () => props.avatar,
64
75
  (val) => {
65
- console.log({ val });
66
76
  src.value = val;
67
77
  avatar.value = val;
68
78
  },
@@ -70,6 +80,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
70
80
  immediate: true
71
81
  }
72
82
  );
83
+ watchEffect(() => {
84
+ loading.value = props.loading;
85
+ });
86
+ __expose({
87
+ cleanValue
88
+ });
73
89
  return (_ctx, _cache) => {
74
90
  const _component_ll_icon = resolveComponent("ll-icon");
75
91
  const _component_ll_button = resolveComponent("ll-button");
@@ -77,6 +93,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
77
93
  const _component_a_upload = resolveComponent("a-upload");
78
94
  const _component_ll_space = resolveComponent("ll-space");
79
95
  const _component_ll_image = resolveComponent("ll-image");
96
+ const _component_a_spin = resolveComponent("a-spin");
80
97
  const _component_ll_modal = resolveComponent("ll-modal");
81
98
  return openBlock(), createElementBlock(
82
99
  Fragment,
@@ -89,6 +106,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
89
106
  keyboard: false,
90
107
  "mask-closable": false,
91
108
  "ok-text": "\u786E\u5B9A",
109
+ loading: uploadLoading.value,
92
110
  onCancel: _cache[8] || (_cache[8] = ($event) => open.value = false),
93
111
  onOk: handleOk
94
112
  }, {
@@ -116,9 +134,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
116
134
  src: src.value,
117
135
  height: "300px",
118
136
  circled: _ctx.circled,
137
+ loading: uploadLoading.value,
119
138
  onCropend: handleCropend,
120
139
  onOnReady: handleReady
121
- }, null, 8, ["src", "circled"])) : createCommentVNode("v-if", true)
140
+ }, null, 8, ["src", "circled", "loading"])) : createCommentVNode("v-if", true)
122
141
  ],
123
142
  2
124
143
  /* CLASS */
@@ -143,6 +162,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
143
162
  createVNode(_component_ll_button, {
144
163
  type: "primary",
145
164
  size: "small",
165
+ disabled: uploadLoading.value,
146
166
  onClick: _cache[0] || (_cache[0] = ($event) => handlerToolbar("reset"))
147
167
  }, {
148
168
  default: withCtx(() => [
@@ -150,7 +170,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
150
170
  ]),
151
171
  _: 1
152
172
  /* STABLE */
153
- })
173
+ }, 8, ["disabled"])
154
174
  ]),
155
175
  _: 1
156
176
  /* STABLE */
@@ -169,7 +189,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
169
189
  createVNode(_component_ll_button, {
170
190
  type: "primary",
171
191
  size: "small",
172
- disabled: !src.value,
192
+ disabled: !src.value || uploadLoading.value,
173
193
  onClick: _cache[1] || (_cache[1] = ($event) => handlerToolbar("reset"))
174
194
  }, {
175
195
  default: withCtx(() => [
@@ -190,7 +210,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
190
210
  createVNode(_component_ll_button, {
191
211
  type: "primary",
192
212
  size: "small",
193
- disabled: !src.value,
213
+ disabled: !src.value || uploadLoading.value,
194
214
  onClick: _cache[2] || (_cache[2] = ($event) => handlerToolbar("rotate", -45))
195
215
  }, {
196
216
  default: withCtx(() => [
@@ -211,7 +231,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
211
231
  createVNode(_component_ll_button, {
212
232
  type: "primary",
213
233
  size: "small",
214
- disabled: !src.value,
234
+ disabled: !src.value || uploadLoading.value,
215
235
  onClick: _cache[3] || (_cache[3] = ($event) => handlerToolbar("rotate", 45))
216
236
  }, {
217
237
  default: withCtx(() => [
@@ -232,7 +252,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
232
252
  createVNode(_component_ll_button, {
233
253
  type: "primary",
234
254
  size: "small",
235
- disabled: !src.value,
255
+ disabled: !src.value || uploadLoading.value,
236
256
  onClick: _cache[4] || (_cache[4] = ($event) => handlerToolbar("scaleX"))
237
257
  }, {
238
258
  default: withCtx(() => [
@@ -253,7 +273,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
253
273
  createVNode(_component_ll_button, {
254
274
  type: "primary",
255
275
  size: "small",
256
- disabled: !src.value,
276
+ disabled: !src.value || uploadLoading.value,
257
277
  onClick: _cache[5] || (_cache[5] = ($event) => handlerToolbar("scaleY"))
258
278
  }, {
259
279
  default: withCtx(() => [
@@ -274,7 +294,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
274
294
  createVNode(_component_ll_button, {
275
295
  type: "primary",
276
296
  size: "small",
277
- disabled: !src.value,
297
+ disabled: !src.value || uploadLoading.value,
278
298
  onClick: _cache[6] || (_cache[6] = ($event) => handlerToolbar("zoom", 0.1))
279
299
  }, {
280
300
  default: withCtx(() => [
@@ -295,7 +315,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
295
315
  createVNode(_component_ll_button, {
296
316
  type: "primary",
297
317
  size: "small",
298
- disabled: !src.value,
318
+ disabled: !src.value || uploadLoading.value,
299
319
  onClick: _cache[7] || (_cache[7] = ($event) => handlerToolbar("zoom", -0.1))
300
320
  }, {
301
321
  default: withCtx(() => [
@@ -326,56 +346,62 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
326
346
  class: normalizeClass(unref(bem).e("right"))
327
347
  },
328
348
  [
329
- createElementVNode(
330
- "div",
331
- {
332
- class: normalizeClass(unref(bem).e("preview"))
333
- },
334
- [
335
- previewSource.value ? (openBlock(), createElementBlock("img", {
336
- key: 0,
337
- src: previewSource.value,
338
- alt: "\u9884\u89C8"
339
- }, null, 8, _hoisted_1)) : createCommentVNode("v-if", true)
340
- ],
341
- 2
342
- /* CLASS */
343
- ),
344
- previewSource.value ? (openBlock(), createElementBlock(
345
- "div",
346
- {
347
- key: 0,
348
- class: normalizeClass(unref(bem).e("group"))
349
- },
350
- [
351
- createVNode(_component_ll_image, {
352
- preview: false,
353
- src: previewSource.value,
354
- width: 32,
355
- height: 32
356
- }, null, 8, ["src"]),
357
- createVNode(_component_ll_image, {
358
- preview: false,
359
- src: previewSource.value,
360
- width: 48,
361
- height: 48
362
- }, null, 8, ["src"]),
363
- createVNode(_component_ll_image, {
364
- preview: false,
365
- src: previewSource.value,
366
- width: 64,
367
- height: 64
368
- }, null, 8, ["src"]),
369
- createVNode(_component_ll_image, {
370
- preview: false,
371
- src: previewSource.value,
372
- width: 80,
373
- height: 80
374
- }, null, 8, ["src"])
375
- ],
376
- 2
377
- /* CLASS */
378
- )) : createCommentVNode("v-if", true)
349
+ createVNode(_component_a_spin, { spinning: uploadLoading.value }, {
350
+ default: withCtx(() => [
351
+ createElementVNode(
352
+ "div",
353
+ {
354
+ class: normalizeClass(unref(bem).e("preview"))
355
+ },
356
+ [
357
+ previewSource.value ? (openBlock(), createElementBlock("img", {
358
+ key: 0,
359
+ src: previewSource.value,
360
+ alt: "\u9884\u89C8"
361
+ }, null, 8, _hoisted_1)) : createCommentVNode("v-if", true)
362
+ ],
363
+ 2
364
+ /* CLASS */
365
+ ),
366
+ previewSource.value ? (openBlock(), createElementBlock(
367
+ "div",
368
+ {
369
+ key: 0,
370
+ class: normalizeClass(unref(bem).e("group"))
371
+ },
372
+ [
373
+ createVNode(_component_ll_image, {
374
+ preview: false,
375
+ src: previewSource.value,
376
+ width: 32,
377
+ height: 32
378
+ }, null, 8, ["src"]),
379
+ createVNode(_component_ll_image, {
380
+ preview: false,
381
+ src: previewSource.value,
382
+ width: 48,
383
+ height: 48
384
+ }, null, 8, ["src"]),
385
+ createVNode(_component_ll_image, {
386
+ preview: false,
387
+ src: previewSource.value,
388
+ width: 64,
389
+ height: 64
390
+ }, null, 8, ["src"]),
391
+ createVNode(_component_ll_image, {
392
+ preview: false,
393
+ src: previewSource.value,
394
+ width: 80,
395
+ height: 80
396
+ }, null, 8, ["src"])
397
+ ],
398
+ 2
399
+ /* CLASS */
400
+ )) : createCommentVNode("v-if", true)
401
+ ]),
402
+ _: 1
403
+ /* STABLE */
404
+ }, 8, ["spinning"])
379
405
  ],
380
406
  2
381
407
  /* CLASS */
@@ -387,25 +413,35 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
387
413
  ]),
388
414
  _: 1
389
415
  /* STABLE */
390
- }, 8, ["open", "title", "width"]),
416
+ }, 8, ["open", "title", "width", "loading"]),
391
417
  createElementVNode(
392
418
  "div",
393
419
  {
394
420
  class: normalizeClass(unref(bem).e("cropper-avatar")),
395
421
  style: normalizeStyle({
396
- cursor: props.disabled ? "not-allowed" : "pointer"
422
+ cursor: props.disabled ? "not-allowed" : "pointer",
423
+ display: "inline-block"
397
424
  }),
398
425
  onClick: handleOpen
399
426
  },
400
427
  [
401
- renderSlot(_ctx.$slots, "default", { src: avatar.value }, () => [
402
- createVNode(_component_ll_image, {
403
- src: avatar.value,
404
- width: 64,
405
- height: 64,
406
- preview: false
407
- }, null, 8, ["src"])
408
- ])
428
+ createVNode(_component_a_spin, {
429
+ spinning: loading.value,
430
+ style: { "display": "inline-block" }
431
+ }, {
432
+ default: withCtx(() => [
433
+ renderSlot(_ctx.$slots, "default", { src: avatar.value }, () => [
434
+ createVNode(_component_ll_image, {
435
+ src: avatar.value,
436
+ width: 64,
437
+ height: 64,
438
+ preview: false
439
+ }, null, 8, ["src"])
440
+ ])
441
+ ]),
442
+ _: 3
443
+ /* FORWARDED */
444
+ }, 8, ["spinning"])
409
445
  ],
410
446
  6
411
447
  /* CLASS, STYLE */
@@ -1 +1 @@
1
- {"version":3,"file":"cropper-modal.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-modal.vue"],"sourcesContent":["<template>\n <ll-modal\n :open=\"open\"\n :title=\"props.title\"\n :width=\"props.width\"\n :keyboard=\"false\"\n :mask-closable=\"false\"\n :ok-text=\"'确定'\"\n @cancel=\"open = false\"\n @ok=\"handleOk\"\n >\n <div :class=\"bem.b()\">\n <div :class=\"bem.e('left')\">\n <div :class=\"bem.e('cropper')\">\n <cropper-image\n v-if=\"src && open\"\n :src=\"src\"\n height=\"300px\"\n :circled=\"circled\"\n @cropend=\"handleCropend\"\n @on-ready=\"handleReady\"\n />\n </div>\n <div :class=\"bem.e('toolbar')\">\n <a-upload\n :file-list=\"[]\"\n accept=\"image/*\"\n :before-upload=\"handleBeforeUpload\"\n >\n <ll-tooltip :title=\"'选择图片'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-upload\" />\n </ll-button>\n </ll-tooltip>\n </a-upload>\n <ll-space>\n <ll-tooltip :tip=\"'重置'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-refresh\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'逆时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('rotate', -45)\"\n >\n <ll-icon icon-name=\"icon-counter-clockwise\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'顺时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('rotate', 45)\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'水平翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('scaleX')\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'垂直翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('scaleY')\"\n >\n <ll-icon icon-name=\"icon-flip-vertical\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'放大'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('zoom', 0.1)\"\n >\n <ll-icon icon-name=\"icon-amplify1\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'缩小'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('zoom', -0.1)\"\n >\n <ll-icon icon-name=\"icon-scale\" />\n </ll-button>\n </ll-tooltip>\n </ll-space>\n </div>\n </div>\n <div :class=\"bem.e('right')\">\n <div :class=\"bem.e('preview')\">\n <img v-if=\"previewSource\" :src=\"previewSource\" :alt=\"'预览'\" />\n </div>\n <template v-if=\"previewSource\">\n <div :class=\"bem.e('group')\">\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"32\"\n :height=\"32\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"48\"\n :height=\"48\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"64\"\n :height=\"64\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"80\"\n :height=\"80\"\n />\n </div>\n </template>\n </div>\n </div>\n </ll-modal>\n <div\n :class=\"bem.e('cropper-avatar')\"\n :style=\"{\n cursor: props.disabled ? 'not-allowed' : 'pointer'\n }\"\n @click=\"handleOpen\"\n >\n <slot :src=\"avatar\">\n <ll-image :src=\"avatar\" :width=\"64\" :height=\"64\" :preview=\"false\" />\n </slot>\n </div>\n</template>\n<script lang=\"ts\" setup>\n//@ts-ignore\nimport type Cropper from 'cropperjs'\n\nimport { ref, watch } from 'vue'\nimport { createNamespace, dataURLtoBlob, type Nullable } from '@ll-plus/utils'\nimport CropperImage from './cropper-image.vue'\nimport {\n cropperModalProps,\n cropperModalEmits,\n type CropendResult\n} from './cropper-image'\n\ndefineOptions({ name: 'LlCropperModal' })\nconst props = defineProps(cropperModalProps)\nconst emits = defineEmits(cropperModalEmits)\nconst bem = createNamespace('cropper-modal')\nconst src = ref(props.avatar || '')\nconst avatar = ref(props.avatar || '')\nconst open = ref(false)\nconst previewSource = ref('')\n\nconst cropper = ref<Nullable<Cropper>>()\nlet scaleX = 1\nlet scaleY = 1\n\n// Block upload\nfunction handleBeforeUpload(file: File) {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n src.value = ''\n previewSource.value = ''\n reader.onload = function (e) {\n src.value = (e.target?.result as string) ?? ''\n // filename = file.name\n }\n return false\n}\nfunction handleOpen() {\n if (props.disabled) return\n open.value = true\n}\nfunction handleCropend({ imgBase64 }: CropendResult) {\n previewSource.value = imgBase64\n}\n\nfunction handleReady(cropperInstance: Cropper) {\n cropper.value = cropperInstance\n}\nfunction handlerToolbar(event: string, arg?: number) {\n if (event === 'scaleX') {\n scaleX = arg = scaleX === -1 ? 1 : -1\n }\n if (event === 'scaleY') {\n scaleY = arg = scaleY === -1 ? 1 : -1\n }\n cropper?.value?.[event]?.(arg)\n}\n\nasync function handleOk() {\n const blob = dataURLtoBlob(previewSource.value)\n emits('confirm', { blob, previewSource: previewSource.value })\n avatar.value = previewSource.value\n open.value = false\n}\n\nwatch(\n () => props.avatar,\n val => {\n console.log({ val })\n src.value = val\n avatar.value = val\n },\n {\n immediate: true\n }\n)\n</script>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cropper-modal.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-modal.vue"],"sourcesContent":["<template>\n <ll-modal\n :open=\"open\"\n :title=\"props.title\"\n :width=\"props.width\"\n :keyboard=\"false\"\n :mask-closable=\"false\"\n :ok-text=\"'确定'\"\n :loading=\"uploadLoading\"\n @cancel=\"open = false\"\n @ok=\"handleOk\"\n >\n <div :class=\"bem.b()\">\n <div :class=\"bem.e('left')\">\n <div :class=\"bem.e('cropper')\">\n <cropper-image\n v-if=\"src && open\"\n :src=\"src\"\n height=\"300px\"\n :circled=\"circled\"\n :loading=\"uploadLoading\"\n @cropend=\"handleCropend\"\n @on-ready=\"handleReady\"\n />\n </div>\n <div :class=\"bem.e('toolbar')\">\n <a-upload\n :file-list=\"[]\"\n accept=\"image/*\"\n :before-upload=\"handleBeforeUpload\"\n >\n <ll-tooltip :title=\"'选择图片'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"uploadLoading\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-upload\" />\n </ll-button>\n </ll-tooltip>\n </a-upload>\n <ll-space>\n <ll-tooltip :tip=\"'重置'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-refresh\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'逆时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('rotate', -45)\"\n >\n <ll-icon icon-name=\"icon-counter-clockwise\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'顺时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('rotate', 45)\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'水平翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('scaleX')\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'垂直翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('scaleY')\"\n >\n <ll-icon icon-name=\"icon-flip-vertical\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'放大'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('zoom', 0.1)\"\n >\n <ll-icon icon-name=\"icon-amplify1\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'缩小'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('zoom', -0.1)\"\n >\n <ll-icon icon-name=\"icon-scale\" />\n </ll-button>\n </ll-tooltip>\n </ll-space>\n </div>\n </div>\n <div :class=\"bem.e('right')\">\n <a-spin :spinning=\"uploadLoading\">\n <div :class=\"bem.e('preview')\">\n <img v-if=\"previewSource\" :src=\"previewSource\" :alt=\"'预览'\" />\n </div>\n <template v-if=\"previewSource\">\n <div :class=\"bem.e('group')\">\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"32\"\n :height=\"32\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"48\"\n :height=\"48\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"64\"\n :height=\"64\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"80\"\n :height=\"80\"\n />\n </div>\n </template>\n </a-spin>\n </div>\n </div>\n </ll-modal>\n <div\n :class=\"bem.e('cropper-avatar')\"\n :style=\"{\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n display: 'inline-block'\n }\"\n @click=\"handleOpen\"\n >\n <a-spin :spinning=\"loading\" style=\"display: inline-block\">\n <slot :src=\"avatar\">\n <ll-image :src=\"avatar\" :width=\"64\" :height=\"64\" :preview=\"false\" />\n </slot>\n </a-spin>\n </div>\n</template>\n<script lang=\"ts\" setup>\n//@ts-ignore\nimport type Cropper from 'cropperjs'\n\nimport { ref, watch, watchEffect } from 'vue'\nimport { createNamespace, dataURLtoBlob, type Nullable } from '@ll-plus/utils'\nimport CropperImage from './cropper-image.vue'\nimport {\n cropperModalProps,\n cropperModalEmits,\n type CropendResult\n} from './cropper-image'\n\ndefineOptions({ name: 'LlCropperModal' })\nconst props = defineProps(cropperModalProps)\nconst emits = defineEmits(cropperModalEmits)\nconst bem = createNamespace('cropper-modal')\nconst src = ref(props.avatar || '')\nconst avatar = ref(props.avatar || '')\nconst open = ref(false)\nconst previewSource = ref('')\nconst loading = ref<boolean>(props.loading)\nconst uploadLoading = ref(false)\n\nconst cropper = ref<Nullable<Cropper>>()\nlet scaleX = 1\nlet scaleY = 1\n\n// Block upload\nfunction handleBeforeUpload(file: File) {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n uploadLoading.value = true\n src.value = ''\n previewSource.value = ''\n reader.onload = function (e) {\n src.value = (e.target?.result as string) ?? ''\n uploadLoading.value = false\n // filename = file.name\n }\n reader.onerror = () => {\n uploadLoading.value = false\n }\n return false\n}\nfunction handleOpen() {\n if (props.disabled) return\n open.value = true\n}\nfunction handleCropend({ imgBase64 }: CropendResult) {\n previewSource.value = imgBase64\n}\n\nfunction handleReady(cropperInstance: Cropper) {\n cropper.value = cropperInstance\n}\nfunction handlerToolbar(event: string, arg?: number) {\n if (event === 'scaleX') {\n scaleX = arg = scaleX === -1 ? 1 : -1\n }\n if (event === 'scaleY') {\n scaleY = arg = scaleY === -1 ? 1 : -1\n }\n cropper?.value?.[event]?.(arg)\n}\n\nasync function handleOk() {\n const blob = dataURLtoBlob(previewSource.value)\n emits('confirm', { blob, previewSource: previewSource.value })\n avatar.value = previewSource.value\n open.value = false\n}\n\nconst cleanValue = () => {\n src.value = ''\n avatar.value = ''\n}\n\nwatch(\n () => props.avatar,\n val => {\n src.value = val\n avatar.value = val\n },\n {\n immediate: true\n }\n)\nwatchEffect(() => {\n loading.value = props.loading\n})\ndefineExpose({\n cleanValue\n})\n</script>\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, reactive, unref, openBlock, createBlock, resolveDynamicComponent, mergeProps } from 'vue';
1
+ import { defineComponent, reactive, ref, nextTick, unref, openBlock, createBlock, resolveDynamicComponent, mergeProps } from 'vue';
2
2
  import { omit, has } from 'lodash-es';
3
3
  import '../config/index.mjs';
4
4
  import { formComponentProps, formComponentEmits } from '../config/form-component.mjs';
@@ -9,10 +9,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
9
9
  __name: "form-component",
10
10
  props: formComponentProps,
11
11
  emits: formComponentEmits,
12
- setup(__props, { emit: __emit }) {
12
+ setup(__props, { expose: __expose, emit: __emit }) {
13
13
  const props = __props;
14
14
  const emits = __emit;
15
15
  const formData = reactive(props.formData);
16
+ const componentRef = ref();
16
17
  const getBindValue = (item) => {
17
18
  const obj = { ...item };
18
19
  return omit(obj, ["label", "onChange", "change"]);
@@ -27,13 +28,29 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
27
28
  }
28
29
  emits("changeField", item);
29
30
  };
31
+ const focus = async () => {
32
+ await nextTick();
33
+ console.log(componentRef.value);
34
+ componentRef.value?.focus();
35
+ };
36
+ const getItem = () => {
37
+ return props.item;
38
+ };
39
+ __expose({
40
+ focus,
41
+ getItem
42
+ });
30
43
  return (_ctx, _cache) => {
31
44
  return unref(checkedType).includes(_ctx.item.type) ? (openBlock(), createBlock(resolveDynamicComponent(`ll-${_ctx.item.type}`), mergeProps({
32
45
  key: 0,
46
+ ref_key: "componentRef",
47
+ ref: componentRef,
33
48
  checked: formData[_ctx.item.key],
34
49
  "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => formData[_ctx.item.key] = $event)
35
50
  }, getBindValue(_ctx.item), { onChange: handleChange }), null, 16, ["checked"])) : (openBlock(), createBlock(resolveDynamicComponent(`ll-${_ctx.item.type}`), mergeProps({
36
51
  key: 1,
52
+ ref_key: "componentRef",
53
+ ref: componentRef,
37
54
  value: formData[_ctx.item.key],
38
55
  "onUpdate:value": _cache[1] || (_cache[1] = ($event) => formData[_ctx.item.key] = $event)
39
56
  }, getBindValue(_ctx.item), { onChange: handleChange }), null, 16, ["value"]));
@@ -1 +1 @@
1
- {"version":3,"file":"form-component.vue2.mjs","sources":["../../../../../../../packages/components/form/src/components/form-component.vue"],"sourcesContent":["<template>\n <template v-if=\"checkedType.includes(item.type)\">\n <component\n :is=\"`ll-${item.type}`\"\n v-model:checked=\"formData[item.key]\"\n v-bind=\"getBindValue(item)\"\n @change=\"handleChange\"\n />\n </template>\n <template v-else>\n <component\n :is=\"`ll-${item.type}`\"\n v-model:value=\"formData[item.key]\"\n v-bind=\"getBindValue(item)\"\n @change=\"handleChange\"\n />\n </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive } from 'vue'\nimport { omit, has } from 'lodash-es'\nimport {\n formComponentProps,\n formComponentEmits,\n checkedType,\n type FormColumn\n} from '../config'\n\nconst props = defineProps(formComponentProps)\n\nconst emits = defineEmits(formComponentEmits)\n\nconst formData = reactive(props.formData)\n\nconst getBindValue = (item: FormColumn) => {\n const obj = { ...item }\n return omit(obj, ['label', 'onChange', 'change'])\n}\n\nconst handleChange = (...arg) => {\n const item: FormColumn = props.item\n if (has(item, 'change')) {\n item.change(...arg)\n }\n if (has(item, 'onChange')) {\n item.onChange(...arg)\n }\n emits('changeField', item)\n}\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;AA6BA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAEd,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;AAEd,IAAM,MAAA,QAAA,GAAW,QAAS,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAA;AAExC,IAAM,MAAA,YAAA,GAAe,CAAC,IAAqB,KAAA;AACzC,MAAM,MAAA,GAAA,GAAM,EAAE,GAAG,IAAK,EAAA,CAAA;AACtB,MAAA,OAAO,KAAK,GAAK,EAAA,CAAC,OAAS,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA,CAAA;AAAA,KAClD,CAAA;AAEA,IAAM,MAAA,YAAA,GAAe,IAAI,GAAQ,KAAA;AAC/B,MAAA,MAAM,OAAmB,KAAM,CAAA,IAAA,CAAA;AAC/B,MAAI,IAAA,GAAA,CAAI,IAAM,EAAA,QAAQ,CAAG,EAAA;AACvB,QAAK,IAAA,CAAA,MAAA,CAAO,GAAG,GAAG,CAAA,CAAA;AAAA,OACpB;AACA,MAAI,IAAA,GAAA,CAAI,IAAM,EAAA,UAAU,CAAG,EAAA;AACzB,QAAK,IAAA,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA,CAAA;AAAA,OACtB;AACA,MAAA,KAAA,CAAM,eAAe,IAAI,CAAA,CAAA;AAAA,KAC3B,CAAA;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"form-component.vue2.mjs","sources":["../../../../../../../packages/components/form/src/components/form-component.vue"],"sourcesContent":["<template>\n <template v-if=\"checkedType.includes(item.type)\">\n <component\n :is=\"`ll-${item.type}`\"\n ref=\"componentRef\"\n v-model:checked=\"formData[item.key]\"\n v-bind=\"getBindValue(item)\"\n @change=\"handleChange\"\n />\n </template>\n <template v-else>\n <component\n :is=\"`ll-${item.type}`\"\n ref=\"componentRef\"\n v-model:value=\"formData[item.key]\"\n v-bind=\"getBindValue(item)\"\n @change=\"handleChange\"\n />\n </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, reactive, ref } from 'vue'\nimport { omit, has } from 'lodash-es'\nimport {\n formComponentProps,\n formComponentEmits,\n checkedType,\n type FormColumn\n} from '../config'\n\nconst props = defineProps(formComponentProps)\n\nconst emits = defineEmits(formComponentEmits)\n\nconst formData = reactive(props.formData)\n\nconst componentRef = ref()\n\nconst getBindValue = (item: FormColumn) => {\n const obj = { ...item }\n return omit(obj, ['label', 'onChange', 'change'])\n}\n\nconst handleChange = (...arg) => {\n const item: FormColumn = props.item\n if (has(item, 'change')) {\n item.change(...arg)\n }\n if (has(item, 'onChange')) {\n item.onChange(...arg)\n }\n emits('changeField', item)\n}\n// 获取焦点\nconst focus = async () => {\n await nextTick()\n console.log(componentRef.value)\n componentRef.value?.focus()\n}\n\nconst getItem = () => {\n return props.item\n}\ndefineExpose({\n focus,\n getItem\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;AA+BA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAEd,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;AAEd,IAAM,MAAA,QAAA,GAAW,QAAS,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAA;AAExC,IAAA,MAAM,eAAe,GAAI,EAAA,CAAA;AAEzB,IAAM,MAAA,YAAA,GAAe,CAAC,IAAqB,KAAA;AACzC,MAAM,MAAA,GAAA,GAAM,EAAE,GAAG,IAAK,EAAA,CAAA;AACtB,MAAA,OAAO,KAAK,GAAK,EAAA,CAAC,OAAS,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA,CAAA;AAAA,KAClD,CAAA;AAEA,IAAM,MAAA,YAAA,GAAe,IAAI,GAAQ,KAAA;AAC/B,MAAA,MAAM,OAAmB,KAAM,CAAA,IAAA,CAAA;AAC/B,MAAI,IAAA,GAAA,CAAI,IAAM,EAAA,QAAQ,CAAG,EAAA;AACvB,QAAK,IAAA,CAAA,MAAA,CAAO,GAAG,GAAG,CAAA,CAAA;AAAA,OACpB;AACA,MAAI,IAAA,GAAA,CAAI,IAAM,EAAA,UAAU,CAAG,EAAA;AACzB,QAAK,IAAA,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA,CAAA;AAAA,OACtB;AACA,MAAA,KAAA,CAAM,eAAe,IAAI,CAAA,CAAA;AAAA,KAC3B,CAAA;AAEA,IAAA,MAAM,QAAQ,YAAY;AACxB,MAAA,MAAM,QAAS,EAAA,CAAA;AACf,MAAQ,OAAA,CAAA,GAAA,CAAI,aAAa,KAAK,CAAA,CAAA;AAC9B,MAAA,YAAA,CAAa,OAAO,KAAM,EAAA,CAAA;AAAA,KAC5B,CAAA;AAEA,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,KACf,CAAA;AACA,IAAa,QAAA,CAAA;AAAA,MACX,KAAA;AAAA,MACA,OAAA;AAAA,KACD,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;"}
@@ -41,6 +41,27 @@ const formProps = buildProps({
41
41
  loading: {
42
42
  type: Boolean,
43
43
  default: false
44
+ },
45
+ /**
46
+ * @description 自动聚焦
47
+ */
48
+ autoFocus: {
49
+ type: Boolean,
50
+ default: false
51
+ },
52
+ /**
53
+ * @description 是否全体禁用
54
+ */
55
+ disabled: {
56
+ type: Boolean,
57
+ default: false
58
+ },
59
+ /**
60
+ * @description 当某一规则校验不通过时,是否停止剩下的规则的校验
61
+ */
62
+ validateErrorStop: {
63
+ type: Boolean,
64
+ default: false
44
65
  }
45
66
  });
46
67
  const formEmits = {
@@ -1 +1 @@
1
- {"version":3,"file":"form.mjs","sources":["../../../../../../../packages/components/form/src/config/form.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type {\n FormItemProps,\n RowProps,\n ColProps,\n FormProps as AntFormProps\n} from 'ant-design-vue'\nimport type { TooltipProps } from '@ll-plus/components'\nimport type Form from '../form.vue'\n\ntype FormType<T = any> = (\n | 'input'\n | 'input-number'\n | 'cascader'\n | 'checkbox'\n | 'checkbox-group'\n | 'code-editor'\n | 'date-picker'\n | 'time-picker'\n | 'date-range'\n | 'time-range'\n | 'radio'\n | 'radio-group'\n | 'select'\n | 'switch'\n | 'textarea'\n | 'upload-image'\n) &\n T\n\nexport interface FormChangeEvent {\n item: FormColumn\n value: any\n formData: FormData\n}\nexport interface BasicFormColumn extends FormItemProps {\n label?: string\n key: string\n spanCol?: number | 24 // 一行几条\n colOptions?: ColProps\n tip?: string\n tipConfig?: TooltipProps\n type: FormType\n unit?: string\n change?: () => void\n rowOptions?: RowProps\n children?: FormColumn[]\n [key: string]: any\n}\n\nexport type FormColumn<T = any> = BasicFormColumn & T\n\nexport type FormData = Record<string, any>\n\nexport const formProps = buildProps({\n /**\n * @description 表单项列表\n */\n formColumns: {\n type: definePropType<FormColumn[]>(Array),\n default: () => []\n },\n /**\n * @description 展开的行变化时触发\n */\n formOptions: {\n type: definePropType<AntFormProps>(Object),\n default: () => ({\n layout: 'horizontal'\n })\n },\n /**\n * @description 展开的行变化时触发\n */\n formData: {\n type: definePropType<FormData>(Object),\n default: () => ({})\n },\n /**\n * @description 展开的行变化时触发\n */\n rowOptions: {\n type: definePropType<RowProps>(Object),\n default: () => ({\n gutter: 16\n })\n },\n /**\n * @description 表单加载状态\n */\n loading: {\n type: Boolean,\n default: false\n }\n} as const)\n\nexport const formEmits = {\n /**\n * @description 表单项值改变时触发\n */\n change: (params: FormChangeEvent) => !!params\n}\n\n// props\nexport type FormProps = ExtractPropTypes<typeof formProps>\n\n// emits\nexport type FormEmits = typeof formEmits\n\n// instance\nexport type FormInstance = InstanceType<typeof Form>\n"],"names":[],"mappings":";;;;AAwDO,MAAM,YAAY,UAAW,CAAA;AAAA;AAAA;AAAA;AAAA,EAIlC,WAAa,EAAA;AAAA,IACX,IAAA,EAAM,eAA6B,KAAK,CAAA;AAAA,IACxC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAa,EAAA;AAAA,IACX,IAAA,EAAM,eAA6B,MAAM,CAAA;AAAA,IACzC,SAAS,OAAO;AAAA,MACd,MAAQ,EAAA,YAAA;AAAA,KACV,CAAA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAIA,QAAU,EAAA;AAAA,IACR,IAAA,EAAM,eAAyB,MAAM,CAAA;AAAA,IACrC,OAAA,EAAS,OAAO,EAAC,CAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACV,IAAA,EAAM,eAAyB,MAAM,CAAA;AAAA,IACrC,SAAS,OAAO;AAAA,MACd,MAAQ,EAAA,EAAA;AAAA,KACV,CAAA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAIA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AACF,CAAU,EAAA;AAEH,MAAM,SAAY,GAAA;AAAA;AAAA;AAAA;AAAA,EAIvB,MAAQ,EAAA,CAAC,MAA4B,KAAA,CAAC,CAAC,MAAA;AACzC;;;;"}
1
+ {"version":3,"file":"form.mjs","sources":["../../../../../../../packages/components/form/src/config/form.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type {\n FormItemProps,\n RowProps,\n ColProps,\n FormProps as AntFormProps\n} from 'ant-design-vue'\nimport type { TooltipProps } from '@ll-plus/components'\nimport type Form from '../form.vue'\n\ntype FormType<T = any> = (\n | 'input'\n | 'input-number'\n | 'cascader'\n | 'checkbox'\n | 'checkbox-group'\n | 'code-editor'\n | 'date-picker'\n | 'time-picker'\n | 'date-range'\n | 'time-range'\n | 'radio'\n | 'radio-group'\n | 'select'\n | 'switch'\n | 'textarea'\n | 'upload-image'\n) &\n T\n\nexport interface FormChangeEvent {\n item: FormColumn\n value: any\n formData: FormData\n}\nexport interface BasicFormColumn extends FormItemProps {\n label?: string\n key: string\n spanCol?: number | 24 // 一行几条\n colOptions?: ColProps\n tip?: string\n tipConfig?: TooltipProps\n type: FormType\n unit?: string\n change?: () => void\n rowOptions?: RowProps\n children?: FormColumn[]\n [key: string]: any\n}\n\nexport type FormColumn<T = any> = BasicFormColumn & T\n\nexport type FormData = Record<string, any>\n\nexport const formProps = buildProps({\n /**\n * @description 表单项列表\n */\n formColumns: {\n type: definePropType<FormColumn[]>(Array),\n default: () => []\n },\n /**\n * @description 展开的行变化时触发\n */\n formOptions: {\n type: definePropType<AntFormProps>(Object),\n default: () => ({\n layout: 'horizontal'\n })\n },\n /**\n * @description 展开的行变化时触发\n */\n formData: {\n type: definePropType<FormData>(Object),\n default: () => ({})\n },\n /**\n * @description 展开的行变化时触发\n */\n rowOptions: {\n type: definePropType<RowProps>(Object),\n default: () => ({\n gutter: 16\n })\n },\n /**\n * @description 表单加载状态\n */\n loading: {\n type: Boolean,\n default: false\n },\n /**\n * @description 自动聚焦\n */\n autoFocus: {\n type: Boolean,\n default: false\n },\n /**\n * @description 是否全体禁用\n */\n disabled: {\n type: Boolean,\n default: false\n },\n /**\n * @description 当某一规则校验不通过时,是否停止剩下的规则的校验\n */\n validateErrorStop: {\n type: Boolean,\n default: false\n }\n} as const)\n\nexport const formEmits = {\n /**\n * @description 表单项值改变时触发\n */\n change: (params: FormChangeEvent) => !!params\n}\n\n// props\nexport type FormProps = ExtractPropTypes<typeof formProps>\n\n// emits\nexport type FormEmits = typeof formEmits\n\n// instance\nexport type FormInstance = InstanceType<typeof Form>\n"],"names":[],"mappings":";;;;AAwDO,MAAM,YAAY,UAAW,CAAA;AAAA;AAAA;AAAA;AAAA,EAIlC,WAAa,EAAA;AAAA,IACX,IAAA,EAAM,eAA6B,KAAK,CAAA;AAAA,IACxC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAa,EAAA;AAAA,IACX,IAAA,EAAM,eAA6B,MAAM,CAAA;AAAA,IACzC,SAAS,OAAO;AAAA,MACd,MAAQ,EAAA,YAAA;AAAA,KACV,CAAA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAIA,QAAU,EAAA;AAAA,IACR,IAAA,EAAM,eAAyB,MAAM,CAAA;AAAA,IACrC,OAAA,EAAS,OAAO,EAAC,CAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACV,IAAA,EAAM,eAAyB,MAAM,CAAA;AAAA,IACrC,SAAS,OAAO;AAAA,MACd,MAAQ,EAAA,EAAA;AAAA,KACV,CAAA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAIA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,iBAAmB,EAAA;AAAA,IACjB,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AACF,CAAU,EAAA;AAEH,MAAM,SAAY,GAAA;AAAA;AAAA;AAAA;AAAA,EAIvB,MAAQ,EAAA,CAAC,MAA4B,KAAA,CAAC,CAAC,MAAA;AACzC;;;;"}
@@ -1,5 +1,5 @@
1
- import { defineComponent, reactive, ref, watch, resolveComponent, openBlock, createElementBlock, normalizeClass, unref, createVNode, withCtx, mergeProps, normalizeProps, guardReactiveProps, Fragment, renderList, createBlock, renderSlot, createElementVNode, toDisplayString, createCommentVNode } from 'vue';
2
- import { omit, isEmpty } from 'lodash-es';
1
+ import { defineComponent, reactive, ref, computed, watch, onMounted, nextTick, resolveComponent, openBlock, createElementBlock, normalizeClass, unref, createVNode, withCtx, mergeProps, normalizeProps, guardReactiveProps, Fragment, renderList, createBlock, renderSlot, createElementVNode, toDisplayString, createCommentVNode } from 'vue';
2
+ import { has, omit, isEmpty } from 'lodash-es';
3
3
  import './config/index.mjs';
4
4
  import '../../../utils/index.mjs';
5
5
  import FormComponent from './components/form-component.vue.mjs';
@@ -18,9 +18,46 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
18
18
  const bem = createNamespace("form");
19
19
  const formData = reactive(props.formData);
20
20
  const formRef = ref();
21
+ const formComponents = ref([]);
22
+ const computedFormColumns = computed(() => {
23
+ return props.formColumns.map((e) => {
24
+ e.disabled = has(e, "disabled") ? e.disabled : props.disabled;
25
+ if (e.children && e.children.length) {
26
+ e.children.map((a) => {
27
+ a.disabled = has(a, "disabled") ? a.disabled : props.disabled;
28
+ return a;
29
+ });
30
+ }
31
+ return e;
32
+ });
33
+ });
34
+ const validateFields = computed(() => {
35
+ return props.formColumns.filter((e) => e.required || has(e, "rules") && e.rules.length > 0).map((e) => {
36
+ return e.key;
37
+ });
38
+ });
39
+ const computedFormOptions = computed(() => {
40
+ return {
41
+ scrollToFirstError: !props.validateErrorStop,
42
+ ...props.formOptions
43
+ };
44
+ });
21
45
  const id = ref(`ll-form-${+/* @__PURE__ */ new Date()}`);
22
46
  const validate = async () => {
23
- return await formRef.value.validateFields();
47
+ if (props.validateErrorStop) {
48
+ clearValidate();
49
+ let bool = true;
50
+ if (!validateFields.value.length)
51
+ return bool;
52
+ for (const i of validateFields.value) {
53
+ bool = await formRef.value.validateFields([i]);
54
+ if (!bool) {
55
+ return bool;
56
+ }
57
+ }
58
+ } else {
59
+ return await formRef.value.validateFields();
60
+ }
24
61
  };
25
62
  const resetFields = async () => {
26
63
  return await formRef.value.resetFields();
@@ -60,6 +97,18 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
60
97
  immediate: true
61
98
  }
62
99
  );
100
+ onMounted(async () => {
101
+ await nextTick();
102
+ if (props.autoFocus) {
103
+ for (const element of formComponents.value) {
104
+ const item = element?.getItem();
105
+ if (["input", "textarea", "input-number"].includes(item.type)) {
106
+ element?.focus();
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ });
63
112
  __expose({
64
113
  validate,
65
114
  resetFields,
@@ -83,7 +132,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
83
132
  spinning: props.loading
84
133
  }, {
85
134
  default: withCtx(() => [
86
- createVNode(_component_a_form, mergeProps(props.formOptions, {
135
+ createVNode(_component_a_form, mergeProps(computedFormOptions.value, {
87
136
  id: id.value,
88
137
  ref_key: "formRef",
89
138
  ref: formRef,
@@ -98,7 +147,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
98
147
  (openBlock(true), createElementBlock(
99
148
  Fragment,
100
149
  null,
101
- renderList(props.formColumns, (item, index) => {
150
+ renderList(computedFormColumns.value, (item, index) => {
102
151
  return openBlock(), createBlock(_component_a_col, mergeProps({
103
152
  key: index,
104
153
  ref_for: true
@@ -209,6 +258,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
209
258
  /* FULL_PROPS, DYNAMIC_SLOTS */
210
259
  )) : (openBlock(), createBlock(FormComponent, {
211
260
  key: 1,
261
+ ref_for: true,
262
+ ref: (el) => formComponents.value[index] = el,
212
263
  item,
213
264
  "form-data": formData,
214
265
  onChangeField: handleChangeField