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.
- package/es/components/advanced-filtering/index.d.ts +672 -284
- package/es/components/advanced-filtering/src/advanced-filtering.vue.d.ts +336 -142
- package/es/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +336 -142
- package/es/components/breadcrumb-card/index.d.ts +1 -1
- package/es/components/breadcrumb-card/src/breadcrumb-card.vue.d.ts +1 -1
- package/es/components/cascader/index.d.ts +8 -8
- package/es/components/cascader/src/cascader.vue.d.ts +8 -8
- package/es/components/checkbox/index.d.ts +217 -217
- package/es/components/checkbox/src/checkbox-group.vue.d.ts +217 -217
- package/es/components/checkbox/src/checkbox.d.ts +56 -56
- package/es/components/cropper/index.d.ts +19 -0
- package/es/components/cropper/src/cropper-image.d.ts +2 -0
- package/es/components/cropper/src/cropper-image.vue.d.ts +6 -0
- package/es/components/cropper/src/cropper-modal.vue.d.ts +13 -0
- package/es/components/drawer/index.d.ts +5 -5
- package/es/components/drawer/src/components/second-confirmation/index.d.ts +1 -1
- package/es/components/drawer/src/components/second-confirmation/src/second-confirmation.vue.d.ts +1 -1
- package/es/components/drawer/src/drawer.vue.d.ts +5 -5
- package/es/components/easy-cron/index.d.ts +95 -95
- package/es/components/easy-cron/src/components/easy-cron-inner.vue.d.ts +88 -88
- package/es/components/easy-cron/src/components/easy-cron-modal.vue.d.ts +88 -88
- package/es/components/easy-cron/src/easy-cron.vue.d.ts +95 -95
- package/es/components/form/index.d.ts +339 -142
- package/es/components/form/src/components/form-component.vue.d.ts +4 -1
- package/es/components/form/src/config/form.d.ts +59 -56
- package/es/components/form/src/form.vue.d.ts +335 -141
- package/es/components/icon-picker/index.d.ts +4 -0
- package/es/components/icon-picker/src/components/modal.vue.d.ts +4 -0
- package/es/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
- package/es/components/input/index.d.ts +35 -33
- package/es/components/input/src/input.vue.d.ts +35 -33
- package/es/components/input-number/index.d.ts +2 -0
- package/es/components/input-number/src/input-number.vue.d.ts +2 -0
- package/es/components/key-value/index.d.ts +1835 -680
- package/es/components/key-value/src/components/key-value-item.vue.d.ts +611 -226
- package/es/components/key-value/src/key-value.vue.d.ts +1835 -680
- package/es/components/modal/index.d.ts +1 -1
- package/es/components/modal/src/modal.vue.d.ts +1 -1
- package/es/components/new-drawer/index.d.ts +7 -7
- package/es/components/new-drawer/src/drawer.vue.d.ts +7 -7
- package/es/components/new-modal/index.d.ts +2 -2
- package/es/components/new-modal/src/modal.vue.d.ts +2 -2
- package/es/components/number-range/index.d.ts +2 -0
- package/es/components/number-range/src/number-range.vue.d.ts +2 -0
- package/es/components/rich-text-editor/index.d.ts +1 -1
- package/es/components/rich-text-editor/src/rich-text-editor.vue.d.ts +1 -1
- package/es/components/select/index.d.ts +4 -4
- package/es/components/select/src/select.vue.d.ts +4 -4
- package/es/components/select-group/index.d.ts +2 -2
- package/es/components/select-group/src/select-group.d.ts +1 -1
- package/es/components/select-group/src/select-group.vue.d.ts +2 -2
- package/es/components/table/index.d.ts +6 -6
- package/es/components/table/src/components/main-table.vue.d.ts +2 -2
- package/es/components/table/src/config/table.d.ts +2 -2
- package/es/components/table/src/table.vue.d.ts +6 -6
- package/es/components/textarea/index.d.ts +5 -5
- package/es/components/textarea/src/textarea.vue.d.ts +5 -5
- package/es/components/tooltip/index.d.ts +4 -4
- package/es/components/tooltip/src/tooltip.d.ts +1 -1
- package/es/components/tooltip/src/tooltip.vue.d.ts +4 -4
- package/es/components/tree-search/index.d.ts +1 -1
- package/es/components/tree-search/src/tree-search.vue.d.ts +1 -1
- package/es/components/upload-drag/index.d.ts +2 -2
- package/es/components/upload-drag/src/upload-drag.vue.d.ts +2 -2
- package/es/packages/components/cropper/src/cropper-image.mjs +8 -0
- package/es/packages/components/cropper/src/cropper-image.mjs.map +1 -1
- package/es/packages/components/cropper/src/cropper-image.vue2.mjs +43 -22
- package/es/packages/components/cropper/src/cropper-image.vue2.mjs.map +1 -1
- package/es/packages/components/cropper/src/cropper-modal.vue2.mjs +108 -72
- package/es/packages/components/cropper/src/cropper-modal.vue2.mjs.map +1 -1
- package/es/packages/components/form/src/components/form-component.vue2.mjs +19 -2
- package/es/packages/components/form/src/components/form-component.vue2.mjs.map +1 -1
- package/es/packages/components/form/src/config/form.mjs +21 -0
- package/es/packages/components/form/src/config/form.mjs.map +1 -1
- package/es/packages/components/form/src/form.vue2.mjs +56 -5
- package/es/packages/components/form/src/form.vue2.mjs.map +1 -1
- package/es/packages/components/icon-picker/src/components/modal.vue2.mjs +97 -76
- package/es/packages/components/icon-picker/src/components/modal.vue2.mjs.map +1 -1
- package/es/packages/components/input/src/input.vue2.mjs +8 -1
- package/es/packages/components/input/src/input.vue2.mjs.map +1 -1
- package/es/packages/components/input-number/src/input-number.vue2.mjs +8 -1
- package/es/packages/components/input-number/src/input-number.vue2.mjs.map +1 -1
- package/es/packages/components/key-value/src/config/key-value.mjs +2 -2
- package/es/packages/components/key-value/src/config/key-value.mjs.map +1 -1
- package/es/packages/components/select-group/src/select-group.vue2.mjs +1 -0
- package/es/packages/components/select-group/src/select-group.vue2.mjs.map +1 -1
- package/index.full.js +363 -175
- package/index.full.min.js +17 -17
- package/index.full.min.js.map +1 -1
- package/index.full.min.mjs +21 -21
- package/index.full.min.mjs.map +1 -1
- package/index.full.mjs +363 -175
- package/lib/components/advanced-filtering/index.d.ts +672 -284
- package/lib/components/advanced-filtering/src/advanced-filtering.vue.d.ts +336 -142
- package/lib/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +336 -142
- package/lib/components/breadcrumb-card/index.d.ts +1 -1
- package/lib/components/breadcrumb-card/src/breadcrumb-card.vue.d.ts +1 -1
- package/lib/components/cascader/index.d.ts +8 -8
- package/lib/components/cascader/src/cascader.vue.d.ts +8 -8
- package/lib/components/checkbox/index.d.ts +217 -217
- package/lib/components/checkbox/src/checkbox-group.vue.d.ts +217 -217
- package/lib/components/checkbox/src/checkbox.d.ts +56 -56
- package/lib/components/cropper/index.d.ts +19 -0
- package/lib/components/cropper/src/cropper-image.d.ts +2 -0
- package/lib/components/cropper/src/cropper-image.vue.d.ts +6 -0
- package/lib/components/cropper/src/cropper-modal.vue.d.ts +13 -0
- package/lib/components/drawer/index.d.ts +5 -5
- package/lib/components/drawer/src/components/second-confirmation/index.d.ts +1 -1
- package/lib/components/drawer/src/components/second-confirmation/src/second-confirmation.vue.d.ts +1 -1
- package/lib/components/drawer/src/drawer.vue.d.ts +5 -5
- package/lib/components/easy-cron/index.d.ts +95 -95
- package/lib/components/easy-cron/src/components/easy-cron-inner.vue.d.ts +88 -88
- package/lib/components/easy-cron/src/components/easy-cron-modal.vue.d.ts +88 -88
- package/lib/components/easy-cron/src/easy-cron.vue.d.ts +95 -95
- package/lib/components/form/index.d.ts +339 -142
- package/lib/components/form/src/components/form-component.vue.d.ts +4 -1
- package/lib/components/form/src/config/form.d.ts +59 -56
- package/lib/components/form/src/form.vue.d.ts +335 -141
- package/lib/components/icon-picker/index.d.ts +4 -0
- package/lib/components/icon-picker/src/components/modal.vue.d.ts +4 -0
- package/lib/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
- package/lib/components/input/index.d.ts +35 -33
- package/lib/components/input/src/input.vue.d.ts +35 -33
- package/lib/components/input-number/index.d.ts +2 -0
- package/lib/components/input-number/src/input-number.vue.d.ts +2 -0
- package/lib/components/key-value/index.d.ts +1835 -680
- package/lib/components/key-value/src/components/key-value-item.vue.d.ts +611 -226
- package/lib/components/key-value/src/key-value.vue.d.ts +1835 -680
- package/lib/components/modal/index.d.ts +1 -1
- package/lib/components/modal/src/modal.vue.d.ts +1 -1
- package/lib/components/new-drawer/index.d.ts +7 -7
- package/lib/components/new-drawer/src/drawer.vue.d.ts +7 -7
- package/lib/components/new-modal/index.d.ts +2 -2
- package/lib/components/new-modal/src/modal.vue.d.ts +2 -2
- package/lib/components/number-range/index.d.ts +2 -0
- package/lib/components/number-range/src/number-range.vue.d.ts +2 -0
- package/lib/components/rich-text-editor/index.d.ts +1 -1
- package/lib/components/rich-text-editor/src/rich-text-editor.vue.d.ts +1 -1
- package/lib/components/select/index.d.ts +4 -4
- package/lib/components/select/src/select.vue.d.ts +4 -4
- package/lib/components/select-group/index.d.ts +2 -2
- package/lib/components/select-group/src/select-group.d.ts +1 -1
- package/lib/components/select-group/src/select-group.vue.d.ts +2 -2
- package/lib/components/table/index.d.ts +6 -6
- package/lib/components/table/src/components/main-table.vue.d.ts +2 -2
- package/lib/components/table/src/config/table.d.ts +2 -2
- package/lib/components/table/src/table.vue.d.ts +6 -6
- package/lib/components/textarea/index.d.ts +5 -5
- package/lib/components/textarea/src/textarea.vue.d.ts +5 -5
- package/lib/components/tooltip/index.d.ts +4 -4
- package/lib/components/tooltip/src/tooltip.d.ts +1 -1
- package/lib/components/tooltip/src/tooltip.vue.d.ts +4 -4
- package/lib/components/tree-search/index.d.ts +1 -1
- package/lib/components/tree-search/src/tree-search.vue.d.ts +1 -1
- package/lib/components/upload-drag/index.d.ts +2 -2
- package/lib/components/upload-drag/src/upload-drag.vue.d.ts +2 -2
- package/lib/packages/components/cropper/src/cropper-image.js +8 -0
- package/lib/packages/components/cropper/src/cropper-image.js.map +1 -1
- package/lib/packages/components/cropper/src/cropper-image.vue2.js +42 -21
- package/lib/packages/components/cropper/src/cropper-image.vue2.js.map +1 -1
- package/lib/packages/components/cropper/src/cropper-modal.vue2.js +107 -71
- package/lib/packages/components/cropper/src/cropper-modal.vue2.js.map +1 -1
- package/lib/packages/components/form/src/components/form-component.vue2.js +18 -1
- package/lib/packages/components/form/src/components/form-component.vue2.js.map +1 -1
- package/lib/packages/components/form/src/config/form.js +21 -0
- package/lib/packages/components/form/src/config/form.js.map +1 -1
- package/lib/packages/components/form/src/form.vue2.js +54 -3
- package/lib/packages/components/form/src/form.vue2.js.map +1 -1
- package/lib/packages/components/icon-picker/src/components/modal.vue2.js +96 -75
- package/lib/packages/components/icon-picker/src/components/modal.vue2.js.map +1 -1
- package/lib/packages/components/input/src/input.vue2.js +8 -1
- package/lib/packages/components/input/src/input.vue2.js.map +1 -1
- package/lib/packages/components/input-number/src/input-number.vue2.js +8 -1
- package/lib/packages/components/input-number/src/input-number.vue2.js.map +1 -1
- package/lib/packages/components/key-value/src/config/key-value.js +2 -2
- package/lib/packages/components/key-value/src/config/key-value.js.map +1 -1
- package/lib/packages/components/select-group/src/select-group.vue2.js +1 -0
- package/lib/packages/components/select-group/src/select-group.vue2.js.map +1 -1
- package/package.json +1 -1
- package/theme-chalk/css/icon-picker.css +1 -1
- package/theme-chalk/css/index.css +1 -1
- package/types/packages/components/advanced-filtering/index.d.ts +672 -284
- package/types/packages/components/advanced-filtering/src/advanced-filtering.vue.d.ts +336 -142
- package/types/packages/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +336 -142
- package/types/packages/components/breadcrumb-card/index.d.ts +1 -1
- package/types/packages/components/breadcrumb-card/src/breadcrumb-card.vue.d.ts +1 -1
- package/types/packages/components/cascader/index.d.ts +8 -8
- package/types/packages/components/cascader/src/cascader.vue.d.ts +8 -8
- package/types/packages/components/checkbox/index.d.ts +217 -217
- package/types/packages/components/checkbox/src/checkbox-group.vue.d.ts +217 -217
- package/types/packages/components/checkbox/src/checkbox.d.ts +56 -56
- package/types/packages/components/cropper/index.d.ts +19 -0
- package/types/packages/components/cropper/src/cropper-image.d.ts +2 -0
- package/types/packages/components/cropper/src/cropper-image.vue.d.ts +6 -0
- package/types/packages/components/cropper/src/cropper-modal.vue.d.ts +13 -0
- package/types/packages/components/drawer/index.d.ts +5 -5
- package/types/packages/components/drawer/src/components/second-confirmation/index.d.ts +1 -1
- package/types/packages/components/drawer/src/components/second-confirmation/src/second-confirmation.vue.d.ts +1 -1
- package/types/packages/components/drawer/src/drawer.vue.d.ts +5 -5
- package/types/packages/components/easy-cron/index.d.ts +95 -95
- package/types/packages/components/easy-cron/src/components/easy-cron-inner.vue.d.ts +88 -88
- package/types/packages/components/easy-cron/src/components/easy-cron-modal.vue.d.ts +88 -88
- package/types/packages/components/easy-cron/src/easy-cron.vue.d.ts +95 -95
- package/types/packages/components/form/index.d.ts +339 -142
- package/types/packages/components/form/src/components/form-component.vue.d.ts +4 -1
- package/types/packages/components/form/src/config/form.d.ts +59 -56
- package/types/packages/components/form/src/form.vue.d.ts +335 -141
- package/types/packages/components/icon-picker/index.d.ts +4 -0
- package/types/packages/components/icon-picker/src/components/modal.vue.d.ts +4 -0
- package/types/packages/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
- package/types/packages/components/input/index.d.ts +35 -33
- package/types/packages/components/input/src/input.vue.d.ts +35 -33
- package/types/packages/components/input-number/index.d.ts +2 -0
- package/types/packages/components/input-number/src/input-number.vue.d.ts +2 -0
- package/types/packages/components/key-value/index.d.ts +1835 -680
- package/types/packages/components/key-value/src/components/key-value-item.vue.d.ts +611 -226
- package/types/packages/components/key-value/src/key-value.vue.d.ts +1835 -680
- package/types/packages/components/modal/index.d.ts +1 -1
- package/types/packages/components/modal/src/modal.vue.d.ts +1 -1
- package/types/packages/components/new-drawer/index.d.ts +7 -7
- package/types/packages/components/new-drawer/src/drawer.vue.d.ts +7 -7
- package/types/packages/components/new-modal/index.d.ts +2 -2
- package/types/packages/components/new-modal/src/modal.vue.d.ts +2 -2
- package/types/packages/components/number-range/index.d.ts +2 -0
- package/types/packages/components/number-range/src/number-range.vue.d.ts +2 -0
- package/types/packages/components/rich-text-editor/index.d.ts +1 -1
- package/types/packages/components/rich-text-editor/src/rich-text-editor.vue.d.ts +1 -1
- package/types/packages/components/select/index.d.ts +4 -4
- package/types/packages/components/select/src/select.vue.d.ts +4 -4
- package/types/packages/components/select-group/index.d.ts +2 -2
- package/types/packages/components/select-group/src/select-group.d.ts +1 -1
- package/types/packages/components/select-group/src/select-group.vue.d.ts +2 -2
- package/types/packages/components/table/index.d.ts +6 -6
- package/types/packages/components/table/src/components/main-table.vue.d.ts +2 -2
- package/types/packages/components/table/src/config/table.d.ts +2 -2
- package/types/packages/components/table/src/table.vue.d.ts +6 -6
- package/types/packages/components/textarea/index.d.ts +5 -5
- package/types/packages/components/textarea/src/textarea.vue.d.ts +5 -5
- package/types/packages/components/tooltip/index.d.ts +4 -4
- package/types/packages/components/tooltip/src/tooltip.d.ts +1 -1
- package/types/packages/components/tooltip/src/tooltip.vue.d.ts +4 -4
- package/types/packages/components/tree-search/index.d.ts +1 -1
- package/types/packages/components/tree-search/src/tree-search.vue.d.ts +1 -1
- package/types/packages/components/upload-drag/index.d.ts +2 -2
- 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.
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
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.
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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":";;;;;;;;;;;;;;;;
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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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"}
|