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
@@ -16,7 +16,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
16
16
  __name: "cropper-modal",
17
17
  props: cropperImage.cropperModalProps,
18
18
  emits: cropperImage.cropperModalEmits,
19
- setup(__props, { emit: __emit }) {
19
+ setup(__props, { expose: __expose, emit: __emit }) {
20
20
  const props = __props;
21
21
  const emits = __emit;
22
22
  const bem = createNamespace.createNamespace("cropper-modal");
@@ -24,16 +24,23 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
24
24
  const avatar = vue.ref(props.avatar || "");
25
25
  const open = vue.ref(false);
26
26
  const previewSource = vue.ref("");
27
+ const loading = vue.ref(props.loading);
28
+ const uploadLoading = vue.ref(false);
27
29
  const cropper = vue.ref();
28
30
  let scaleX = 1;
29
31
  let scaleY = 1;
30
32
  function handleBeforeUpload(file) {
31
33
  const reader = new FileReader();
32
34
  reader.readAsDataURL(file);
35
+ uploadLoading.value = true;
33
36
  src.value = "";
34
37
  previewSource.value = "";
35
38
  reader.onload = function(e) {
36
39
  src.value = e.target?.result ?? "";
40
+ uploadLoading.value = false;
41
+ };
42
+ reader.onerror = () => {
43
+ uploadLoading.value = false;
37
44
  };
38
45
  return false;
39
46
  }
@@ -63,10 +70,13 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
63
70
  avatar.value = previewSource.value;
64
71
  open.value = false;
65
72
  }
73
+ const cleanValue = () => {
74
+ src.value = "";
75
+ avatar.value = "";
76
+ };
66
77
  vue.watch(
67
78
  () => props.avatar,
68
79
  (val) => {
69
- console.log({ val });
70
80
  src.value = val;
71
81
  avatar.value = val;
72
82
  },
@@ -74,6 +84,12 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
74
84
  immediate: true
75
85
  }
76
86
  );
87
+ vue.watchEffect(() => {
88
+ loading.value = props.loading;
89
+ });
90
+ __expose({
91
+ cleanValue
92
+ });
77
93
  return (_ctx, _cache) => {
78
94
  const _component_ll_icon = vue.resolveComponent("ll-icon");
79
95
  const _component_ll_button = vue.resolveComponent("ll-button");
@@ -81,6 +97,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
81
97
  const _component_a_upload = vue.resolveComponent("a-upload");
82
98
  const _component_ll_space = vue.resolveComponent("ll-space");
83
99
  const _component_ll_image = vue.resolveComponent("ll-image");
100
+ const _component_a_spin = vue.resolveComponent("a-spin");
84
101
  const _component_ll_modal = vue.resolveComponent("ll-modal");
85
102
  return vue.openBlock(), vue.createElementBlock(
86
103
  vue.Fragment,
@@ -93,6 +110,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
93
110
  keyboard: false,
94
111
  "mask-closable": false,
95
112
  "ok-text": "\u786E\u5B9A",
113
+ loading: uploadLoading.value,
96
114
  onCancel: _cache[8] || (_cache[8] = ($event) => open.value = false),
97
115
  onOk: handleOk
98
116
  }, {
@@ -120,9 +138,10 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
120
138
  src: src.value,
121
139
  height: "300px",
122
140
  circled: _ctx.circled,
141
+ loading: uploadLoading.value,
123
142
  onCropend: handleCropend,
124
143
  onOnReady: handleReady
125
- }, null, 8, ["src", "circled"])) : vue.createCommentVNode("v-if", true)
144
+ }, null, 8, ["src", "circled", "loading"])) : vue.createCommentVNode("v-if", true)
126
145
  ],
127
146
  2
128
147
  /* CLASS */
@@ -147,6 +166,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
147
166
  vue.createVNode(_component_ll_button, {
148
167
  type: "primary",
149
168
  size: "small",
169
+ disabled: uploadLoading.value,
150
170
  onClick: _cache[0] || (_cache[0] = ($event) => handlerToolbar("reset"))
151
171
  }, {
152
172
  default: vue.withCtx(() => [
@@ -154,7 +174,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
154
174
  ]),
155
175
  _: 1
156
176
  /* STABLE */
157
- })
177
+ }, 8, ["disabled"])
158
178
  ]),
159
179
  _: 1
160
180
  /* STABLE */
@@ -173,7 +193,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
173
193
  vue.createVNode(_component_ll_button, {
174
194
  type: "primary",
175
195
  size: "small",
176
- disabled: !src.value,
196
+ disabled: !src.value || uploadLoading.value,
177
197
  onClick: _cache[1] || (_cache[1] = ($event) => handlerToolbar("reset"))
178
198
  }, {
179
199
  default: vue.withCtx(() => [
@@ -194,7 +214,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
194
214
  vue.createVNode(_component_ll_button, {
195
215
  type: "primary",
196
216
  size: "small",
197
- disabled: !src.value,
217
+ disabled: !src.value || uploadLoading.value,
198
218
  onClick: _cache[2] || (_cache[2] = ($event) => handlerToolbar("rotate", -45))
199
219
  }, {
200
220
  default: vue.withCtx(() => [
@@ -215,7 +235,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
215
235
  vue.createVNode(_component_ll_button, {
216
236
  type: "primary",
217
237
  size: "small",
218
- disabled: !src.value,
238
+ disabled: !src.value || uploadLoading.value,
219
239
  onClick: _cache[3] || (_cache[3] = ($event) => handlerToolbar("rotate", 45))
220
240
  }, {
221
241
  default: vue.withCtx(() => [
@@ -236,7 +256,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
236
256
  vue.createVNode(_component_ll_button, {
237
257
  type: "primary",
238
258
  size: "small",
239
- disabled: !src.value,
259
+ disabled: !src.value || uploadLoading.value,
240
260
  onClick: _cache[4] || (_cache[4] = ($event) => handlerToolbar("scaleX"))
241
261
  }, {
242
262
  default: vue.withCtx(() => [
@@ -257,7 +277,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
257
277
  vue.createVNode(_component_ll_button, {
258
278
  type: "primary",
259
279
  size: "small",
260
- disabled: !src.value,
280
+ disabled: !src.value || uploadLoading.value,
261
281
  onClick: _cache[5] || (_cache[5] = ($event) => handlerToolbar("scaleY"))
262
282
  }, {
263
283
  default: vue.withCtx(() => [
@@ -278,7 +298,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
278
298
  vue.createVNode(_component_ll_button, {
279
299
  type: "primary",
280
300
  size: "small",
281
- disabled: !src.value,
301
+ disabled: !src.value || uploadLoading.value,
282
302
  onClick: _cache[6] || (_cache[6] = ($event) => handlerToolbar("zoom", 0.1))
283
303
  }, {
284
304
  default: vue.withCtx(() => [
@@ -299,7 +319,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
299
319
  vue.createVNode(_component_ll_button, {
300
320
  type: "primary",
301
321
  size: "small",
302
- disabled: !src.value,
322
+ disabled: !src.value || uploadLoading.value,
303
323
  onClick: _cache[7] || (_cache[7] = ($event) => handlerToolbar("zoom", -0.1))
304
324
  }, {
305
325
  default: vue.withCtx(() => [
@@ -330,56 +350,62 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
330
350
  class: vue.normalizeClass(vue.unref(bem).e("right"))
331
351
  },
332
352
  [
333
- vue.createElementVNode(
334
- "div",
335
- {
336
- class: vue.normalizeClass(vue.unref(bem).e("preview"))
337
- },
338
- [
339
- previewSource.value ? (vue.openBlock(), vue.createElementBlock("img", {
340
- key: 0,
341
- src: previewSource.value,
342
- alt: "\u9884\u89C8"
343
- }, null, 8, _hoisted_1)) : vue.createCommentVNode("v-if", true)
344
- ],
345
- 2
346
- /* CLASS */
347
- ),
348
- previewSource.value ? (vue.openBlock(), vue.createElementBlock(
349
- "div",
350
- {
351
- key: 0,
352
- class: vue.normalizeClass(vue.unref(bem).e("group"))
353
- },
354
- [
355
- vue.createVNode(_component_ll_image, {
356
- preview: false,
357
- src: previewSource.value,
358
- width: 32,
359
- height: 32
360
- }, null, 8, ["src"]),
361
- vue.createVNode(_component_ll_image, {
362
- preview: false,
363
- src: previewSource.value,
364
- width: 48,
365
- height: 48
366
- }, null, 8, ["src"]),
367
- vue.createVNode(_component_ll_image, {
368
- preview: false,
369
- src: previewSource.value,
370
- width: 64,
371
- height: 64
372
- }, null, 8, ["src"]),
373
- vue.createVNode(_component_ll_image, {
374
- preview: false,
375
- src: previewSource.value,
376
- width: 80,
377
- height: 80
378
- }, null, 8, ["src"])
379
- ],
380
- 2
381
- /* CLASS */
382
- )) : vue.createCommentVNode("v-if", true)
353
+ vue.createVNode(_component_a_spin, { spinning: uploadLoading.value }, {
354
+ default: vue.withCtx(() => [
355
+ vue.createElementVNode(
356
+ "div",
357
+ {
358
+ class: vue.normalizeClass(vue.unref(bem).e("preview"))
359
+ },
360
+ [
361
+ previewSource.value ? (vue.openBlock(), vue.createElementBlock("img", {
362
+ key: 0,
363
+ src: previewSource.value,
364
+ alt: "\u9884\u89C8"
365
+ }, null, 8, _hoisted_1)) : vue.createCommentVNode("v-if", true)
366
+ ],
367
+ 2
368
+ /* CLASS */
369
+ ),
370
+ previewSource.value ? (vue.openBlock(), vue.createElementBlock(
371
+ "div",
372
+ {
373
+ key: 0,
374
+ class: vue.normalizeClass(vue.unref(bem).e("group"))
375
+ },
376
+ [
377
+ vue.createVNode(_component_ll_image, {
378
+ preview: false,
379
+ src: previewSource.value,
380
+ width: 32,
381
+ height: 32
382
+ }, null, 8, ["src"]),
383
+ vue.createVNode(_component_ll_image, {
384
+ preview: false,
385
+ src: previewSource.value,
386
+ width: 48,
387
+ height: 48
388
+ }, null, 8, ["src"]),
389
+ vue.createVNode(_component_ll_image, {
390
+ preview: false,
391
+ src: previewSource.value,
392
+ width: 64,
393
+ height: 64
394
+ }, null, 8, ["src"]),
395
+ vue.createVNode(_component_ll_image, {
396
+ preview: false,
397
+ src: previewSource.value,
398
+ width: 80,
399
+ height: 80
400
+ }, null, 8, ["src"])
401
+ ],
402
+ 2
403
+ /* CLASS */
404
+ )) : vue.createCommentVNode("v-if", true)
405
+ ]),
406
+ _: 1
407
+ /* STABLE */
408
+ }, 8, ["spinning"])
383
409
  ],
384
410
  2
385
411
  /* CLASS */
@@ -391,25 +417,35 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
391
417
  ]),
392
418
  _: 1
393
419
  /* STABLE */
394
- }, 8, ["open", "title", "width"]),
420
+ }, 8, ["open", "title", "width", "loading"]),
395
421
  vue.createElementVNode(
396
422
  "div",
397
423
  {
398
424
  class: vue.normalizeClass(vue.unref(bem).e("cropper-avatar")),
399
425
  style: vue.normalizeStyle({
400
- cursor: props.disabled ? "not-allowed" : "pointer"
426
+ cursor: props.disabled ? "not-allowed" : "pointer",
427
+ display: "inline-block"
401
428
  }),
402
429
  onClick: handleOpen
403
430
  },
404
431
  [
405
- vue.renderSlot(_ctx.$slots, "default", { src: avatar.value }, () => [
406
- vue.createVNode(_component_ll_image, {
407
- src: avatar.value,
408
- width: 64,
409
- height: 64,
410
- preview: false
411
- }, null, 8, ["src"])
412
- ])
432
+ vue.createVNode(_component_a_spin, {
433
+ spinning: loading.value,
434
+ style: { "display": "inline-block" }
435
+ }, {
436
+ default: vue.withCtx(() => [
437
+ vue.renderSlot(_ctx.$slots, "default", { src: avatar.value }, () => [
438
+ vue.createVNode(_component_ll_image, {
439
+ src: avatar.value,
440
+ width: 64,
441
+ height: 64,
442
+ preview: false
443
+ }, null, 8, ["src"])
444
+ ])
445
+ ]),
446
+ _: 3
447
+ /* FORWARDED */
448
+ }, 8, ["spinning"])
413
449
  ],
414
450
  6
415
451
  /* CLASS, STYLE */
@@ -1 +1 @@
1
- {"version":3,"file":"cropper-modal.vue2.js","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":["createNamespace","ref","dataURLtoBlob","watch"],"mappings":"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"}
1
+ {"version":3,"file":"cropper-modal.vue2.js","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":["createNamespace","ref","dataURLtoBlob","watch","watchEffect"],"mappings":"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"}
@@ -13,10 +13,11 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
13
13
  __name: "form-component",
14
14
  props: formComponent.formComponentProps,
15
15
  emits: formComponent.formComponentEmits,
16
- setup(__props, { emit: __emit }) {
16
+ setup(__props, { expose: __expose, emit: __emit }) {
17
17
  const props = __props;
18
18
  const emits = __emit;
19
19
  const formData = vue.reactive(props.formData);
20
+ const componentRef = vue.ref();
20
21
  const getBindValue = (item) => {
21
22
  const obj = { ...item };
22
23
  return lodashEs.omit(obj, ["label", "onChange", "change"]);
@@ -31,13 +32,29 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
31
32
  }
32
33
  emits("changeField", item);
33
34
  };
35
+ const focus = async () => {
36
+ await vue.nextTick();
37
+ console.log(componentRef.value);
38
+ componentRef.value?.focus();
39
+ };
40
+ const getItem = () => {
41
+ return props.item;
42
+ };
43
+ __expose({
44
+ focus,
45
+ getItem
46
+ });
34
47
  return (_ctx, _cache) => {
35
48
  return vue.unref(components.checkedType).includes(_ctx.item.type) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(`ll-${_ctx.item.type}`), vue.mergeProps({
36
49
  key: 0,
50
+ ref_key: "componentRef",
51
+ ref: componentRef,
37
52
  checked: formData[_ctx.item.key],
38
53
  "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => formData[_ctx.item.key] = $event)
39
54
  }, getBindValue(_ctx.item), { onChange: handleChange }), null, 16, ["checked"])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(`ll-${_ctx.item.type}`), vue.mergeProps({
40
55
  key: 1,
56
+ ref_key: "componentRef",
57
+ ref: componentRef,
41
58
  value: formData[_ctx.item.key],
42
59
  "onUpdate:value": _cache[1] || (_cache[1] = ($event) => formData[_ctx.item.key] = $event)
43
60
  }, getBindValue(_ctx.item), { onChange: handleChange }), null, 16, ["value"]));
@@ -1 +1 @@
1
- {"version":3,"file":"form-component.vue2.js","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":["reactive","omit","has"],"mappings":";;;;;;;;;;;;;;;;AA6BA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAEd,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;AAEd,IAAM,MAAA,QAAA,GAAWA,YAAS,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,OAAOC,cAAK,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,IAAAC,YAAA,CAAI,IAAM,EAAA,QAAQ,CAAG,EAAA;AACvB,QAAK,IAAA,CAAA,MAAA,CAAO,GAAG,GAAG,CAAA,CAAA;AAAA,OACpB;AACA,MAAI,IAAAA,YAAA,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.js","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":["reactive","ref","omit","has","nextTick"],"mappings":";;;;;;;;;;;;;;;;AA+BA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAEd,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAA;AAEd,IAAM,MAAA,QAAA,GAAWA,YAAS,CAAA,KAAA,CAAM,QAAQ,CAAA,CAAA;AAExC,IAAA,MAAM,eAAeC,OAAI,EAAA,CAAA;AAEzB,IAAM,MAAA,YAAA,GAAe,CAAC,IAAqB,KAAA;AACzC,MAAM,MAAA,GAAA,GAAM,EAAE,GAAG,IAAK,EAAA,CAAA;AACtB,MAAA,OAAOC,cAAK,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,IAAAC,YAAA,CAAI,IAAM,EAAA,QAAQ,CAAG,EAAA;AACvB,QAAK,IAAA,CAAA,MAAA,CAAO,GAAG,GAAG,CAAA,CAAA;AAAA,OACpB;AACA,MAAI,IAAAA,YAAA,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,MAAMC,YAAS,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;;;;;;;;;;;;;;;;;;;;;"}
@@ -43,6 +43,27 @@ const formProps = runtime.buildProps({
43
43
  loading: {
44
44
  type: Boolean,
45
45
  default: false
46
+ },
47
+ /**
48
+ * @description 自动聚焦
49
+ */
50
+ autoFocus: {
51
+ type: Boolean,
52
+ default: false
53
+ },
54
+ /**
55
+ * @description 是否全体禁用
56
+ */
57
+ disabled: {
58
+ type: Boolean,
59
+ default: false
60
+ },
61
+ /**
62
+ * @description 当某一规则校验不通过时,是否停止剩下的规则的校验
63
+ */
64
+ validateErrorStop: {
65
+ type: Boolean,
66
+ default: false
46
67
  }
47
68
  });
48
69
  const formEmits = {
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","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":["buildProps","definePropType"],"mappings":";;;;;;AAwDO,MAAM,YAAYA,kBAAW,CAAA;AAAA;AAAA;AAAA;AAAA,EAIlC,WAAa,EAAA;AAAA,IACX,IAAA,EAAMC,uBAA6B,KAAK,CAAA;AAAA,IACxC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAa,EAAA;AAAA,IACX,IAAA,EAAMA,uBAA6B,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,EAAMA,uBAAyB,MAAM,CAAA;AAAA,IACrC,OAAA,EAAS,OAAO,EAAC,CAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACV,IAAA,EAAMA,uBAAyB,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.js","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":["buildProps","definePropType"],"mappings":";;;;;;AAwDO,MAAM,YAAYA,kBAAW,CAAA;AAAA;AAAA;AAAA;AAAA,EAIlC,WAAa,EAAA;AAAA,IACX,IAAA,EAAMC,uBAA6B,KAAK,CAAA;AAAA,IACxC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAa,EAAA;AAAA,IACX,IAAA,EAAMA,uBAA6B,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,EAAMA,uBAAyB,MAAM,CAAA;AAAA,IACrC,OAAA,EAAS,OAAO,EAAC,CAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAY,EAAA;AAAA,IACV,IAAA,EAAMA,uBAAyB,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;;;;;"}
@@ -22,9 +22,46 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
22
22
  const bem = createNamespace.createNamespace("form");
23
23
  const formData = vue.reactive(props.formData);
24
24
  const formRef = vue.ref();
25
+ const formComponents = vue.ref([]);
26
+ const computedFormColumns = vue.computed(() => {
27
+ return props.formColumns.map((e) => {
28
+ e.disabled = lodashEs.has(e, "disabled") ? e.disabled : props.disabled;
29
+ if (e.children && e.children.length) {
30
+ e.children.map((a) => {
31
+ a.disabled = lodashEs.has(a, "disabled") ? a.disabled : props.disabled;
32
+ return a;
33
+ });
34
+ }
35
+ return e;
36
+ });
37
+ });
38
+ const validateFields = vue.computed(() => {
39
+ return props.formColumns.filter((e) => e.required || lodashEs.has(e, "rules") && e.rules.length > 0).map((e) => {
40
+ return e.key;
41
+ });
42
+ });
43
+ const computedFormOptions = vue.computed(() => {
44
+ return {
45
+ scrollToFirstError: !props.validateErrorStop,
46
+ ...props.formOptions
47
+ };
48
+ });
25
49
  const id = vue.ref(`ll-form-${+/* @__PURE__ */ new Date()}`);
26
50
  const validate = async () => {
27
- return await formRef.value.validateFields();
51
+ if (props.validateErrorStop) {
52
+ clearValidate();
53
+ let bool = true;
54
+ if (!validateFields.value.length)
55
+ return bool;
56
+ for (const i of validateFields.value) {
57
+ bool = await formRef.value.validateFields([i]);
58
+ if (!bool) {
59
+ return bool;
60
+ }
61
+ }
62
+ } else {
63
+ return await formRef.value.validateFields();
64
+ }
28
65
  };
29
66
  const resetFields = async () => {
30
67
  return await formRef.value.resetFields();
@@ -64,6 +101,18 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
64
101
  immediate: true
65
102
  }
66
103
  );
104
+ vue.onMounted(async () => {
105
+ await vue.nextTick();
106
+ if (props.autoFocus) {
107
+ for (const element of formComponents.value) {
108
+ const item = element?.getItem();
109
+ if (["input", "textarea", "input-number"].includes(item.type)) {
110
+ element?.focus();
111
+ break;
112
+ }
113
+ }
114
+ }
115
+ });
67
116
  __expose({
68
117
  validate,
69
118
  resetFields,
@@ -87,7 +136,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
87
136
  spinning: props.loading
88
137
  }, {
89
138
  default: vue.withCtx(() => [
90
- vue.createVNode(_component_a_form, vue.mergeProps(props.formOptions, {
139
+ vue.createVNode(_component_a_form, vue.mergeProps(computedFormOptions.value, {
91
140
  id: id.value,
92
141
  ref_key: "formRef",
93
142
  ref: formRef,
@@ -102,7 +151,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
102
151
  (vue.openBlock(true), vue.createElementBlock(
103
152
  vue.Fragment,
104
153
  null,
105
- vue.renderList(props.formColumns, (item, index) => {
154
+ vue.renderList(computedFormColumns.value, (item, index) => {
106
155
  return vue.openBlock(), vue.createBlock(_component_a_col, vue.mergeProps({
107
156
  key: index,
108
157
  ref_for: true
@@ -213,6 +262,8 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
213
262
  /* FULL_PROPS, DYNAMIC_SLOTS */
214
263
  )) : (vue.openBlock(), vue.createBlock(formComponent.default, {
215
264
  key: 1,
265
+ ref_for: true,
266
+ ref: (el) => formComponents.value[index] = el,
216
267
  item,
217
268
  "form-data": formData,
218
269
  onChangeField: handleChangeField
@@ -1 +1 @@
1
- {"version":3,"file":"form.vue2.js","sources":["../../../../../../packages/components/form/src/form.vue"],"sourcesContent":["<template>\n <div :class=\"bem.b()\">\n <a-spin :spinning=\"props.loading\">\n <a-form\n v-bind=\"props.formOptions\"\n :id=\"id\"\n ref=\"formRef\"\n :model=\"props.formData\"\n >\n <a-row v-bind=\"props.rowOptions\">\n <a-col\n v-for=\"(item, index) in props.formColumns\"\n :key=\"index\"\n v-bind=\"item?.colOptions ?? {}\"\n :span=\"item?.spanCol ?? 24\"\n >\n <slot name=\"formItem\" :item=\"item\" :index=\"index\">\n <ll-form-item\n :name=\"item?.key ?? index\"\n :class=\"getFormItemClass(item)\"\n v-bind=\"getBindValue(item)\"\n >\n <template #label>\n <slot name=\"label\" :item=\"item\" :index=\"index\">\n <span>{{ item.label }}</span>\n <span v-if=\"item?.tip\" :class=\"bem.e('tooltip-wrapper')\">\n <ll-tooltip\n style=\"margin-left: 8px\"\n :overlay-class-name=\"bem.e('tooltip')\"\n :arrow-point-at-center=\"true\"\n :max-width=\"item?.tipConfig?.maxWidth ?? 406\"\n :placement=\"item?.tipConfig?.placement ?? 'top'\"\n :tip=\"item.tip\"\n :font-size=\"'16px'\"\n v-bind=\"item?.tipConfig\"\n />\n </span>\n </slot>\n </template>\n <slot name=\"content\" :item=\"item\" :index=\"index\">\n <template v-if=\"!isEmpty(item.children)\">\n <a-row :gutter=\"5\" v-bind=\"item.rowOptions\">\n <a-col\n v-for=\"(child, childIndex) in item.children\"\n :key=\"childIndex\"\n :style=\"{\n display: 'flex',\n 'align-items': 'center'\n }\"\n v-bind=\"item?.colOptions ?? {}\"\n >\n <slot name=\"children\" :item=\"child\" :index=\"index\">\n <form-component\n :item=\"child\"\n :form-data=\"formData\"\n @change-field=\"handleChangeField\"\n />\n </slot>\n </a-col>\n </a-row>\n </template>\n <form-component\n v-else\n :item=\"item\"\n :form-data=\"formData\"\n @change-field=\"handleChangeField\"\n />\n </slot>\n </ll-form-item>\n </slot>\n </a-col>\n </a-row>\n </a-form>\n </a-spin>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { reactive, ref, watch } from 'vue'\nimport { omit, isEmpty } from 'lodash-es'\nimport { formProps, formEmits, type FormColumn } from './config'\n\nimport type { NamePath } from 'ant-design-vue/es/form/interface'\n\nimport { createNamespace } from '@ll-plus/utils'\n\nimport formComponent from './components/form-component.vue'\n\n// 定义组件名称\ndefineOptions({ name: 'LlForm' })\n\n// Props\nconst props = defineProps(formProps)\n\nconst emits = defineEmits(formEmits)\n\nconst bem = createNamespace('form')\n\nconst formData = reactive(props.formData)\n\nconst formRef = ref()\n\nconst id = ref(`ll-form-${+new Date()}`)\n\nconst validate = async () => {\n return await formRef.value.validateFields()\n}\n\nconst resetFields = async () => {\n return await formRef.value.resetFields()\n}\n\nconst clearValidate = async (nameList?: NamePath[]) => {\n return await formRef.value.clearValidate(nameList)\n}\n\nconst scrollToField = async (name: NamePath, options?: ScrollOptions) => {\n return await formRef.value.scrollToField(name, options)\n}\n\nconst getBindValue = (item: FormColumn) => {\n const obj = { ...item }\n return omit(obj, ['label'])\n}\n\nconst getFormItemClass = (item = {} as FormColumn) => {\n if (props.formOptions.layout === 'horizontal') {\n if (item?.labelCol) {\n return item.labelCol.span && item.labelCol.span >= 24\n ? bem.is('label-top')\n : bem.is('label-left')\n } else {\n return bem.is('label-left')\n }\n }\n return bem.is('label-top')\n}\n\nconst handleChangeField = (item: FormColumn) => {\n emits('change', { item, value: formData[item.key], formData })\n}\n\n// watch(\n// () => formData,\n// val => {\n// emits('change', val)\n// },\n// {\n// deep: true\n// }\n// )\n\nwatch(\n () => props.formData,\n async val => {\n for (const i in val) {\n formData[i] = val[i]\n }\n },\n {\n deep: true,\n immediate: true\n }\n)\n\ndefineExpose({\n validate,\n resetFields,\n clearValidate,\n scrollToField\n})\n</script>\n"],"names":["createNamespace","reactive","ref","omit","watch"],"mappings":"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"}
1
+ {"version":3,"file":"form.vue2.js","sources":["../../../../../../packages/components/form/src/form.vue"],"sourcesContent":["<template>\n <div :class=\"bem.b()\">\n <a-spin :spinning=\"props.loading\">\n <a-form\n v-bind=\"computedFormOptions\"\n :id=\"id\"\n ref=\"formRef\"\n :model=\"props.formData\"\n >\n <a-row v-bind=\"props.rowOptions\">\n <a-col\n v-for=\"(item, index) in computedFormColumns\"\n :key=\"index\"\n v-bind=\"item?.colOptions ?? {}\"\n :span=\"item?.spanCol ?? 24\"\n >\n <slot name=\"formItem\" :item=\"item\" :index=\"index\">\n <ll-form-item\n :name=\"item?.key ?? index\"\n :class=\"getFormItemClass(item)\"\n v-bind=\"getBindValue(item)\"\n >\n <template #label>\n <slot name=\"label\" :item=\"item\" :index=\"index\">\n <span>{{ item.label }}</span>\n <span v-if=\"item?.tip\" :class=\"bem.e('tooltip-wrapper')\">\n <ll-tooltip\n style=\"margin-left: 8px\"\n :overlay-class-name=\"bem.e('tooltip')\"\n :arrow-point-at-center=\"true\"\n :max-width=\"item?.tipConfig?.maxWidth ?? 406\"\n :placement=\"item?.tipConfig?.placement ?? 'top'\"\n :tip=\"item.tip\"\n :font-size=\"'16px'\"\n v-bind=\"item?.tipConfig\"\n />\n </span>\n </slot>\n </template>\n <slot name=\"content\" :item=\"item\" :index=\"index\">\n <template v-if=\"!isEmpty(item.children)\">\n <a-row :gutter=\"5\" v-bind=\"item.rowOptions\">\n <a-col\n v-for=\"(child, childIndex) in item.children\"\n :key=\"childIndex\"\n :style=\"{\n display: 'flex',\n 'align-items': 'center'\n }\"\n v-bind=\"item?.colOptions ?? {}\"\n >\n <slot name=\"children\" :item=\"child\" :index=\"index\">\n <form-component\n :item=\"child\"\n :form-data=\"formData\"\n @change-field=\"handleChangeField\"\n />\n </slot>\n </a-col>\n </a-row>\n </template>\n <form-component\n v-else\n :ref=\"el => (formComponents[index] = el)\"\n :item=\"item\"\n :form-data=\"formData\"\n @change-field=\"handleChangeField\"\n />\n </slot>\n </ll-form-item>\n </slot>\n </a-col>\n </a-row>\n </a-form>\n </a-spin>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { reactive, ref, watch, onMounted, nextTick, computed } from 'vue'\nimport { omit, isEmpty, has } from 'lodash-es'\nimport { formProps, formEmits, type FormColumn } from './config'\n\nimport type { NamePath } from 'ant-design-vue/es/form/interface'\n\nimport { createNamespace } from '@ll-plus/utils'\n\nimport formComponent from './components/form-component.vue'\n\n// 定义组件名称\ndefineOptions({ name: 'LlForm' })\n\n// Props\nconst props = defineProps(formProps)\n\nconst emits = defineEmits(formEmits)\n\nconst bem = createNamespace('form')\n\nconst formData = reactive(props.formData)\n\nconst formRef = ref()\n\nconst formComponents = ref<InstanceType<typeof formComponent>[]>([])\n\nconst computedFormColumns = computed(() => {\n return props.formColumns.map(e => {\n e.disabled = has(e, 'disabled') ? e.disabled : props.disabled\n if (e.children && e.children.length) {\n e.children.map(a => {\n a.disabled = has(a, 'disabled') ? a.disabled : props.disabled\n return a\n })\n }\n return e\n })\n})\n\nconst validateFields = computed(() => {\n return props.formColumns\n .filter(e => e.required || (has(e, 'rules') && e.rules.length > 0))\n .map(e => {\n return e.key\n })\n})\n\nconst computedFormOptions = computed(() => {\n return {\n scrollToFirstError: !props.validateErrorStop,\n ...props.formOptions\n }\n})\n\nconst id = ref(`ll-form-${+new Date()}`)\n\nconst validate = async () => {\n if (props.validateErrorStop) {\n clearValidate()\n let bool = true\n if (!validateFields.value.length) return bool\n for (const i of validateFields.value) {\n bool = await formRef.value.validateFields([i])\n if (!bool) {\n return bool\n }\n }\n } else {\n return await formRef.value.validateFields()\n }\n}\n\nconst resetFields = async () => {\n return await formRef.value.resetFields()\n}\n\nconst clearValidate = async (nameList?: NamePath[]) => {\n return await formRef.value.clearValidate(nameList)\n}\n\nconst scrollToField = async (name: NamePath, options?: ScrollOptions) => {\n return await formRef.value.scrollToField(name, options)\n}\n\nconst getBindValue = (item: FormColumn) => {\n const obj = { ...item }\n return omit(obj, ['label'])\n}\n\nconst getFormItemClass = (item = {} as FormColumn) => {\n if (props.formOptions.layout === 'horizontal') {\n if (item?.labelCol) {\n return item.labelCol.span && item.labelCol.span >= 24\n ? bem.is('label-top')\n : bem.is('label-left')\n } else {\n return bem.is('label-left')\n }\n }\n return bem.is('label-top')\n}\n\nconst handleChangeField = (item: FormColumn) => {\n emits('change', { item, value: formData[item.key], formData })\n}\n\nwatch(\n () => props.formData,\n async val => {\n for (const i in val) {\n formData[i] = val[i]\n }\n },\n {\n deep: true,\n immediate: true\n }\n)\n\nonMounted(async () => {\n await nextTick()\n if (props.autoFocus) {\n for (const element of formComponents.value) {\n const item = element?.getItem()\n if (['input', 'textarea', 'input-number'].includes(item.type)) {\n element?.focus()\n break\n }\n }\n }\n})\n\ndefineExpose({\n validate,\n resetFields,\n clearValidate,\n scrollToField\n})\n</script>\n"],"names":["createNamespace","reactive","ref","computed","has","omit","watch","onMounted","nextTick"],"mappings":"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"}