ll-plus 2.6.17 → 2.6.18
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 +388 -0
- package/es/components/advanced-filtering/src/advanced-filtering.vue.d.ts +194 -0
- package/es/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +194 -0
- 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/form/index.d.ts +197 -0
- package/es/components/form/src/components/form-component.vue.d.ts +3 -0
- package/es/components/form/src/config/form.d.ts +3 -0
- package/es/components/form/src/form.vue.d.ts +194 -0
- 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 +2 -0
- package/es/components/input/src/input.vue.d.ts +2 -0
- 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 +1493 -338
- package/es/components/key-value/src/components/key-value-item.vue.d.ts +385 -0
- package/es/components/key-value/src/key-value.vue.d.ts +1493 -338
- 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/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/index.full.js +362 -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 +362 -175
- package/lib/components/advanced-filtering/index.d.ts +388 -0
- package/lib/components/advanced-filtering/src/advanced-filtering.vue.d.ts +194 -0
- package/lib/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +194 -0
- 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/form/index.d.ts +197 -0
- package/lib/components/form/src/components/form-component.vue.d.ts +3 -0
- package/lib/components/form/src/config/form.d.ts +3 -0
- package/lib/components/form/src/form.vue.d.ts +194 -0
- 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 +2 -0
- package/lib/components/input/src/input.vue.d.ts +2 -0
- 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 +1493 -338
- package/lib/components/key-value/src/components/key-value-item.vue.d.ts +385 -0
- package/lib/components/key-value/src/key-value.vue.d.ts +1493 -338
- 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/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/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 +388 -0
- package/types/packages/components/advanced-filtering/src/advanced-filtering.vue.d.ts +194 -0
- package/types/packages/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +194 -0
- 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/form/index.d.ts +197 -0
- package/types/packages/components/form/src/components/form-component.vue.d.ts +3 -0
- package/types/packages/components/form/src/config/form.d.ts +3 -0
- package/types/packages/components/form/src/form.vue.d.ts +194 -0
- 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 +2 -0
- package/types/packages/components/input/src/input.vue.d.ts +2 -0
- 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 +1493 -338
- package/types/packages/components/key-value/src/components/key-value-item.vue.d.ts +385 -0
- package/types/packages/components/key-value/src/key-value.vue.d.ts +1493 -338
- 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
|
@@ -71,6 +71,7 @@ export declare const LlNumberRange: import("ll-plus/es/utils").SFCWithInstall<im
|
|
|
71
71
|
[x: string]: unknown;
|
|
72
72
|
};
|
|
73
73
|
innerValue: import("vue").Ref<string>;
|
|
74
|
+
inputRef: import("vue").Ref<any>;
|
|
74
75
|
integerCongfig: import("vue").ComputedRef<import("../input-number/src/config").Integer>;
|
|
75
76
|
getBindValue: import("vue").ComputedRef<Partial<import("vue").ExtractPropTypes<{
|
|
76
77
|
size: {
|
|
@@ -198,6 +199,7 @@ export declare const LlNumberRange: import("ll-plus/es/utils").SFCWithInstall<im
|
|
|
198
199
|
getChineseName: import("vue").ComputedRef<string>;
|
|
199
200
|
setValue: (value: any) => void;
|
|
200
201
|
onChange: (value: any) => void;
|
|
202
|
+
focus: () => void;
|
|
201
203
|
readonly InputNumber: {
|
|
202
204
|
new (...args: any[]): import("@vue/runtime-core").CreateComponentPublicInstance<Readonly<import("vue").ExtractPropTypes<{
|
|
203
205
|
size: {
|
|
@@ -70,6 +70,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
70
70
|
[x: string]: unknown;
|
|
71
71
|
};
|
|
72
72
|
innerValue: import("vue").Ref<string>;
|
|
73
|
+
inputRef: import("vue").Ref<any>;
|
|
73
74
|
integerCongfig: import("vue").ComputedRef<import("../../input-number/src/config").Integer>;
|
|
74
75
|
getBindValue: import("vue").ComputedRef<Partial<import("vue").ExtractPropTypes<{
|
|
75
76
|
size: {
|
|
@@ -197,6 +198,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
197
198
|
getChineseName: import("vue").ComputedRef<string>;
|
|
198
199
|
setValue: (value: any) => void;
|
|
199
200
|
onChange: (value: any) => void;
|
|
201
|
+
focus: () => void;
|
|
200
202
|
readonly InputNumber: {
|
|
201
203
|
new (...args: any[]): import("vue").CreateComponentPublicInstance<Readonly<import("vue").ExtractPropTypes<{
|
|
202
204
|
size: {
|
|
@@ -36,6 +36,10 @@ const cropperImageProps = buildProps({
|
|
|
36
36
|
type: Boolean,
|
|
37
37
|
default: false
|
|
38
38
|
},
|
|
39
|
+
loading: {
|
|
40
|
+
type: Boolean,
|
|
41
|
+
default: false
|
|
42
|
+
},
|
|
39
43
|
realTimePreview: {
|
|
40
44
|
type: Boolean,
|
|
41
45
|
default: true
|
|
@@ -73,6 +77,10 @@ const cropperModalProps = buildProps({
|
|
|
73
77
|
type: Boolean,
|
|
74
78
|
default: false
|
|
75
79
|
},
|
|
80
|
+
loading: {
|
|
81
|
+
type: Boolean,
|
|
82
|
+
default: false
|
|
83
|
+
},
|
|
76
84
|
avatar: {
|
|
77
85
|
type: String,
|
|
78
86
|
default: ""
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cropper-image.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-image.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\n\nimport type { ExtractPropTypes, CSSProperties } from 'vue'\nimport type Cropper from 'cropperjs'\nimport type CropperImage from './cropper-image.vue'\nimport type CropperModal from './cropper-modal.vue'\n\nexport interface CropendResult {\n imgBase64: string\n imgInfo: Cropper.Data\n}\n\nexport const defaultCropperOptions: Cropper.Options = {\n aspectRatio: 1,\n zoomable: true,\n zoomOnTouch: true,\n zoomOnWheel: true,\n cropBoxMovable: true,\n cropBoxResizable: true,\n toggleDragModeOnDblclick: true,\n autoCrop: true,\n background: true,\n highlight: true,\n center: true,\n responsive: true,\n restore: true,\n checkCrossOrigin: true,\n checkOrientation: true,\n scalable: true,\n modal: true,\n guides: true,\n movable: true,\n rotatable: true\n}\n\nexport const cropperImageProps = buildProps({\n src: {\n type: String,\n required: true\n },\n alt: {\n type: String\n },\n circled: {\n type: Boolean,\n default: false\n },\n realTimePreview: {\n type: Boolean,\n default: true\n },\n height: {\n type: [String, Number],\n default: '360px'\n },\n crossorigin: {\n type: definePropType<'' | 'anonymous' | 'use-credentials' | undefined>(\n String\n ),\n default: undefined\n },\n imageStyle: {\n type: definePropType<CSSProperties>(Object),\n default: () => ({})\n },\n options: {\n type: definePropType<Cropper.Options>(Object),\n default: () => ({})\n }\n} as const)\n\nexport const cropperImageEmits = {\n cropend: (params: CropendResult) => !!params,\n onReady: (cropper: Cropper) => !!cropper,\n cropendError: () => true\n} as const\n\nexport const cropperModalProps = buildProps({\n circled: {\n type: Boolean,\n default: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n avatar: {\n type: String,\n default: ''\n },\n avatarSize: {\n type: [String, Number],\n default: 64\n },\n avatarType: {\n type: definePropType<'square' | 'circle'>(String),\n default: () => 'circle'\n },\n title: {\n type: String,\n default: '图片裁剪'\n },\n width: {\n type: [String, Number],\n default: '800px'\n }\n} as const)\n\nexport const cropperModalEmits = {\n confirm: (params: { blob: Blob; previewSource: string }) => !!params\n} as const\n\n// props\nexport type CropperImageProps = ExtractPropTypes<typeof cropperImageProps>\nexport type CropperModalProps = ExtractPropTypes<typeof cropperModalProps>\n\n// emits\nexport type CropperImageEmits = typeof cropperImageEmits\nexport type CropperModalEmits = typeof cropperModalEmits\n\n// instance\nexport type CropperImageInstance = InstanceType<typeof CropperImage>\nexport type CropperModalInstance = InstanceType<typeof CropperModal>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cropper-image.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-image.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\n\nimport type { ExtractPropTypes, CSSProperties } from 'vue'\nimport type Cropper from 'cropperjs'\nimport type CropperImage from './cropper-image.vue'\nimport type CropperModal from './cropper-modal.vue'\n\nexport interface CropendResult {\n imgBase64: string\n imgInfo: Cropper.Data\n}\n\nexport const defaultCropperOptions: Cropper.Options = {\n aspectRatio: 1,\n zoomable: true,\n zoomOnTouch: true,\n zoomOnWheel: true,\n cropBoxMovable: true,\n cropBoxResizable: true,\n toggleDragModeOnDblclick: true,\n autoCrop: true,\n background: true,\n highlight: true,\n center: true,\n responsive: true,\n restore: true,\n checkCrossOrigin: true,\n checkOrientation: true,\n scalable: true,\n modal: true,\n guides: true,\n movable: true,\n rotatable: true\n}\n\nexport const cropperImageProps = buildProps({\n src: {\n type: String,\n required: true\n },\n alt: {\n type: String\n },\n circled: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n },\n realTimePreview: {\n type: Boolean,\n default: true\n },\n height: {\n type: [String, Number],\n default: '360px'\n },\n crossorigin: {\n type: definePropType<'' | 'anonymous' | 'use-credentials' | undefined>(\n String\n ),\n default: undefined\n },\n imageStyle: {\n type: definePropType<CSSProperties>(Object),\n default: () => ({})\n },\n options: {\n type: definePropType<Cropper.Options>(Object),\n default: () => ({})\n }\n} as const)\n\nexport const cropperImageEmits = {\n cropend: (params: CropendResult) => !!params,\n onReady: (cropper: Cropper) => !!cropper,\n cropendError: () => true\n} as const\n\nexport const cropperModalProps = buildProps({\n circled: {\n type: Boolean,\n default: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n },\n avatar: {\n type: String,\n default: ''\n },\n avatarSize: {\n type: [String, Number],\n default: 64\n },\n avatarType: {\n type: definePropType<'square' | 'circle'>(String),\n default: () => 'circle'\n },\n title: {\n type: String,\n default: '图片裁剪'\n },\n width: {\n type: [String, Number],\n default: '800px'\n }\n} as const)\n\nexport const cropperModalEmits = {\n confirm: (params: { blob: Blob; previewSource: string }) => !!params\n} as const\n\n// props\nexport type CropperImageProps = ExtractPropTypes<typeof cropperImageProps>\nexport type CropperModalProps = ExtractPropTypes<typeof cropperModalProps>\n\n// emits\nexport type CropperImageEmits = typeof cropperImageEmits\nexport type CropperModalEmits = typeof cropperModalEmits\n\n// instance\nexport type CropperImageInstance = InstanceType<typeof CropperImage>\nexport type CropperModalInstance = InstanceType<typeof CropperModal>\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, ref, computed, onMounted, onUnmounted, openBlock,
|
|
1
|
+
import { defineComponent, ref, computed, onMounted, onUnmounted, watch, resolveComponent, openBlock, createBlock, withCtx, createElementVNode, normalizeClass, unref, normalizeStyle, withDirectives, vShow } from 'vue';
|
|
2
2
|
import '../../../utils/index.mjs';
|
|
3
3
|
import Cropper from 'cropperjs';
|
|
4
4
|
import { useDebounceFn } from '../../../../node_modules/.pnpm/@vueuse_shared@10.9.0_vue@3.4.25/node_modules/@vueuse/shared/index.mjs';
|
|
@@ -19,6 +19,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
19
19
|
const imgElRef = ref();
|
|
20
20
|
const cropper = ref();
|
|
21
21
|
const isReady = ref(false);
|
|
22
|
+
const loading = ref(props.loading);
|
|
22
23
|
const getImageStyle = computed(() => {
|
|
23
24
|
return {
|
|
24
25
|
height: props.height,
|
|
@@ -34,10 +35,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
34
35
|
if (!imgEl) {
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
38
|
+
loading.value = true;
|
|
37
39
|
cropper.value = new Cropper(imgEl, {
|
|
38
40
|
...defaultCropperOptions,
|
|
39
41
|
ready() {
|
|
40
42
|
isReady.value = true;
|
|
43
|
+
loading.value = false;
|
|
41
44
|
realTimeCroppered();
|
|
42
45
|
emits("onReady", cropper.value);
|
|
43
46
|
},
|
|
@@ -103,32 +106,50 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
103
106
|
context.fill();
|
|
104
107
|
return canvas;
|
|
105
108
|
};
|
|
109
|
+
const handleLoading = () => {
|
|
110
|
+
loading.value = true;
|
|
111
|
+
console.log("loading");
|
|
112
|
+
};
|
|
106
113
|
onMounted(init);
|
|
107
114
|
onUnmounted(() => {
|
|
108
115
|
cropper.value?.destroy();
|
|
109
116
|
});
|
|
117
|
+
watch(
|
|
118
|
+
() => props.loading,
|
|
119
|
+
(val) => {
|
|
120
|
+
loading.value = val;
|
|
121
|
+
}
|
|
122
|
+
);
|
|
110
123
|
return (_ctx, _cache) => {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
const _component_a_spin = resolveComponent("a-spin");
|
|
125
|
+
return openBlock(), createBlock(_component_a_spin, { spinning: loading.value }, {
|
|
126
|
+
default: withCtx(() => [
|
|
127
|
+
createElementVNode(
|
|
128
|
+
"div",
|
|
129
|
+
{
|
|
130
|
+
class: normalizeClass([unref(bem).b(), props.circled ? unref(bem).is("circled") : ""]),
|
|
131
|
+
style: normalizeStyle(getWrapperStyle.value)
|
|
132
|
+
},
|
|
133
|
+
[
|
|
134
|
+
withDirectives(createElementVNode("img", {
|
|
135
|
+
ref_key: "imgElRef",
|
|
136
|
+
ref: imgElRef,
|
|
137
|
+
src: _ctx.src,
|
|
138
|
+
alt: _ctx.alt,
|
|
139
|
+
crossorigin: _ctx.crossorigin,
|
|
140
|
+
style: normalizeStyle(getImageStyle.value),
|
|
141
|
+
onLoad: handleLoading
|
|
142
|
+
}, null, 44, _hoisted_1), [
|
|
143
|
+
[vShow, isReady.value]
|
|
144
|
+
])
|
|
145
|
+
],
|
|
146
|
+
6
|
|
147
|
+
/* CLASS, STYLE */
|
|
148
|
+
)
|
|
149
|
+
]),
|
|
150
|
+
_: 1
|
|
151
|
+
/* STABLE */
|
|
152
|
+
}, 8, ["spinning"]);
|
|
132
153
|
};
|
|
133
154
|
}
|
|
134
155
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cropper-image.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-image.vue"],"sourcesContent":["<template>\n <div\n
|
|
1
|
+
{"version":3,"file":"cropper-image.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-image.vue"],"sourcesContent":["<template>\n <a-spin :spinning=\"loading\">\n <div\n :class=\"[bem.b(), props.circled ? bem.is('circled') : '']\"\n :style=\"getWrapperStyle\"\n >\n <img\n v-show=\"isReady\"\n ref=\"imgElRef\"\n :src=\"src\"\n :alt=\"alt\"\n :crossorigin=\"crossorigin\"\n :style=\"getImageStyle\"\n @load=\"handleLoading\"\n />\n </div>\n </a-spin>\n</template>\n<script lang=\"ts\" setup>\nimport {\n onMounted,\n ref,\n computed,\n onUnmounted,\n type CSSProperties,\n watch\n} from 'vue'\nimport { createNamespace } from '@ll-plus/utils'\n//@ts-ignore\nimport Cropper from 'cropperjs'\n// import 'cropperjs/dist/cropper.css'\nimport { useDebounceFn } from '@vueuse/shared'\nimport {\n cropperImageProps,\n cropperImageEmits,\n defaultCropperOptions,\n type CropendResult\n} from './cropper-image'\n\ndefineOptions({ name: 'CropperImage' })\nconst props = defineProps(cropperImageProps)\nconst emits = defineEmits(cropperImageEmits)\n\nconst bem = createNamespace('cropper-image')\n\nconst imgElRef = ref<HTMLImageElement>()\nconst cropper = ref<Cropper>()\nconst isReady = ref(false)\nconst loading = ref(props.loading)\nconst getImageStyle = computed((): CSSProperties => {\n return {\n height: props.height,\n maxWidth: '100%',\n ...props.imageStyle\n }\n})\nconst getWrapperStyle = computed((): CSSProperties => {\n return { height: `${props.height}`.replace(/px/, '') + 'px' }\n})\n\nconst init = async () => {\n const imgEl = imgElRef.value\n if (!imgEl) {\n return\n }\n loading.value = true\n cropper.value = new Cropper(imgEl, {\n ...defaultCropperOptions,\n ready() {\n isReady.value = true\n loading.value = false\n realTimeCroppered()\n //@ts-ignore\n emits('onReady', cropper.value)\n },\n crop() {\n debounceRealTimeCroppered()\n },\n zoom() {\n debounceRealTimeCroppered()\n },\n cropmove() {\n debounceRealTimeCroppered()\n },\n ...props.options\n })\n}\n\n// Real-time display preview\nconst realTimeCroppered = () => {\n props.realTimePreview && croppered()\n}\n\nconst debounceRealTimeCroppered = useDebounceFn(realTimeCroppered, 80)\n\n// event: return base64 and width and height information after cropping\nconst croppered = () => {\n if (!cropper.value) {\n return\n }\n const imgInfo = cropper.value.getData()\n const canvas = props.circled\n ? getRoundedCanvas()\n : cropper.value.getCroppedCanvas()\n canvas.toBlob(blob => {\n if (!blob) {\n return\n }\n const fileReader: FileReader = new FileReader()\n fileReader.readAsDataURL(blob)\n fileReader.onloadend = e => {\n emits('cropend', {\n imgBase64: e.target?.result ?? '',\n imgInfo\n } as CropendResult)\n }\n fileReader.onerror = () => {\n emits('cropendError')\n }\n }, 'image/png')\n}\n\n// Get a circular picture canvas\nconst getRoundedCanvas = () => {\n const sourceCanvas = cropper.value!.getCroppedCanvas()\n const canvas = document.createElement('canvas')\n const context = canvas.getContext('2d')!\n const width = sourceCanvas.width\n const height = sourceCanvas.height\n canvas.width = width\n canvas.height = height\n context.imageSmoothingEnabled = true\n context.drawImage(sourceCanvas, 0, 0, width, height)\n context.globalCompositeOperation = 'destination-in'\n context.beginPath()\n context.arc(\n width / 2,\n height / 2,\n Math.min(width, height) / 2,\n 0,\n 2 * Math.PI,\n true\n )\n context.fill()\n return canvas\n}\n//获取图片加载中\nconst handleLoading = () => {\n loading.value = true\n console.log('loading')\n}\n\nonMounted(init)\n\nonUnmounted(() => {\n cropper.value?.destroy()\n})\n\nwatch(\n () => props.loading,\n val => {\n loading.value = val\n }\n)\n</script>\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, ref, watch, resolveComponent, openBlock, createElementBlock, Fragment, createVNode, withCtx, createElementVNode, normalizeClass, unref, createBlock, createCommentVNode, normalizeStyle, renderSlot } from 'vue';
|
|
1
|
+
import { defineComponent, ref, watch, watchEffect, resolveComponent, openBlock, createElementBlock, Fragment, createVNode, withCtx, createElementVNode, normalizeClass, unref, createBlock, createCommentVNode, normalizeStyle, renderSlot } from 'vue';
|
|
2
2
|
import '../../../utils/index.mjs';
|
|
3
3
|
import CropperImage from './cropper-image.vue.mjs';
|
|
4
4
|
import { cropperModalProps, cropperModalEmits } from './cropper-image.mjs';
|
|
@@ -12,7 +12,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
12
12
|
__name: "cropper-modal",
|
|
13
13
|
props: cropperModalProps,
|
|
14
14
|
emits: cropperModalEmits,
|
|
15
|
-
setup(__props, { emit: __emit }) {
|
|
15
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
16
16
|
const props = __props;
|
|
17
17
|
const emits = __emit;
|
|
18
18
|
const bem = createNamespace("cropper-modal");
|
|
@@ -20,16 +20,23 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
20
20
|
const avatar = ref(props.avatar || "");
|
|
21
21
|
const open = ref(false);
|
|
22
22
|
const previewSource = ref("");
|
|
23
|
+
const loading = ref(props.loading);
|
|
24
|
+
const uploadLoading = ref(false);
|
|
23
25
|
const cropper = ref();
|
|
24
26
|
let scaleX = 1;
|
|
25
27
|
let scaleY = 1;
|
|
26
28
|
function handleBeforeUpload(file) {
|
|
27
29
|
const reader = new FileReader();
|
|
28
30
|
reader.readAsDataURL(file);
|
|
31
|
+
uploadLoading.value = true;
|
|
29
32
|
src.value = "";
|
|
30
33
|
previewSource.value = "";
|
|
31
34
|
reader.onload = function(e) {
|
|
32
35
|
src.value = e.target?.result ?? "";
|
|
36
|
+
uploadLoading.value = false;
|
|
37
|
+
};
|
|
38
|
+
reader.onerror = () => {
|
|
39
|
+
uploadLoading.value = false;
|
|
33
40
|
};
|
|
34
41
|
return false;
|
|
35
42
|
}
|
|
@@ -59,10 +66,13 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
59
66
|
avatar.value = previewSource.value;
|
|
60
67
|
open.value = false;
|
|
61
68
|
}
|
|
69
|
+
const cleanValue = () => {
|
|
70
|
+
src.value = "";
|
|
71
|
+
avatar.value = "";
|
|
72
|
+
};
|
|
62
73
|
watch(
|
|
63
74
|
() => props.avatar,
|
|
64
75
|
(val) => {
|
|
65
|
-
console.log({ val });
|
|
66
76
|
src.value = val;
|
|
67
77
|
avatar.value = val;
|
|
68
78
|
},
|
|
@@ -70,6 +80,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
70
80
|
immediate: true
|
|
71
81
|
}
|
|
72
82
|
);
|
|
83
|
+
watchEffect(() => {
|
|
84
|
+
loading.value = props.loading;
|
|
85
|
+
});
|
|
86
|
+
__expose({
|
|
87
|
+
cleanValue
|
|
88
|
+
});
|
|
73
89
|
return (_ctx, _cache) => {
|
|
74
90
|
const _component_ll_icon = resolveComponent("ll-icon");
|
|
75
91
|
const _component_ll_button = resolveComponent("ll-button");
|
|
@@ -77,6 +93,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
77
93
|
const _component_a_upload = resolveComponent("a-upload");
|
|
78
94
|
const _component_ll_space = resolveComponent("ll-space");
|
|
79
95
|
const _component_ll_image = resolveComponent("ll-image");
|
|
96
|
+
const _component_a_spin = resolveComponent("a-spin");
|
|
80
97
|
const _component_ll_modal = resolveComponent("ll-modal");
|
|
81
98
|
return openBlock(), createElementBlock(
|
|
82
99
|
Fragment,
|
|
@@ -89,6 +106,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
89
106
|
keyboard: false,
|
|
90
107
|
"mask-closable": false,
|
|
91
108
|
"ok-text": "\u786E\u5B9A",
|
|
109
|
+
loading: uploadLoading.value,
|
|
92
110
|
onCancel: _cache[8] || (_cache[8] = ($event) => open.value = false),
|
|
93
111
|
onOk: handleOk
|
|
94
112
|
}, {
|
|
@@ -116,9 +134,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
116
134
|
src: src.value,
|
|
117
135
|
height: "300px",
|
|
118
136
|
circled: _ctx.circled,
|
|
137
|
+
loading: uploadLoading.value,
|
|
119
138
|
onCropend: handleCropend,
|
|
120
139
|
onOnReady: handleReady
|
|
121
|
-
}, null, 8, ["src", "circled"])) : createCommentVNode("v-if", true)
|
|
140
|
+
}, null, 8, ["src", "circled", "loading"])) : createCommentVNode("v-if", true)
|
|
122
141
|
],
|
|
123
142
|
2
|
|
124
143
|
/* CLASS */
|
|
@@ -143,6 +162,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
143
162
|
createVNode(_component_ll_button, {
|
|
144
163
|
type: "primary",
|
|
145
164
|
size: "small",
|
|
165
|
+
disabled: uploadLoading.value,
|
|
146
166
|
onClick: _cache[0] || (_cache[0] = ($event) => handlerToolbar("reset"))
|
|
147
167
|
}, {
|
|
148
168
|
default: withCtx(() => [
|
|
@@ -150,7 +170,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
150
170
|
]),
|
|
151
171
|
_: 1
|
|
152
172
|
/* STABLE */
|
|
153
|
-
})
|
|
173
|
+
}, 8, ["disabled"])
|
|
154
174
|
]),
|
|
155
175
|
_: 1
|
|
156
176
|
/* STABLE */
|
|
@@ -169,7 +189,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
169
189
|
createVNode(_component_ll_button, {
|
|
170
190
|
type: "primary",
|
|
171
191
|
size: "small",
|
|
172
|
-
disabled: !src.value,
|
|
192
|
+
disabled: !src.value || uploadLoading.value,
|
|
173
193
|
onClick: _cache[1] || (_cache[1] = ($event) => handlerToolbar("reset"))
|
|
174
194
|
}, {
|
|
175
195
|
default: withCtx(() => [
|
|
@@ -190,7 +210,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
190
210
|
createVNode(_component_ll_button, {
|
|
191
211
|
type: "primary",
|
|
192
212
|
size: "small",
|
|
193
|
-
disabled: !src.value,
|
|
213
|
+
disabled: !src.value || uploadLoading.value,
|
|
194
214
|
onClick: _cache[2] || (_cache[2] = ($event) => handlerToolbar("rotate", -45))
|
|
195
215
|
}, {
|
|
196
216
|
default: withCtx(() => [
|
|
@@ -211,7 +231,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
211
231
|
createVNode(_component_ll_button, {
|
|
212
232
|
type: "primary",
|
|
213
233
|
size: "small",
|
|
214
|
-
disabled: !src.value,
|
|
234
|
+
disabled: !src.value || uploadLoading.value,
|
|
215
235
|
onClick: _cache[3] || (_cache[3] = ($event) => handlerToolbar("rotate", 45))
|
|
216
236
|
}, {
|
|
217
237
|
default: withCtx(() => [
|
|
@@ -232,7 +252,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
232
252
|
createVNode(_component_ll_button, {
|
|
233
253
|
type: "primary",
|
|
234
254
|
size: "small",
|
|
235
|
-
disabled: !src.value,
|
|
255
|
+
disabled: !src.value || uploadLoading.value,
|
|
236
256
|
onClick: _cache[4] || (_cache[4] = ($event) => handlerToolbar("scaleX"))
|
|
237
257
|
}, {
|
|
238
258
|
default: withCtx(() => [
|
|
@@ -253,7 +273,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
253
273
|
createVNode(_component_ll_button, {
|
|
254
274
|
type: "primary",
|
|
255
275
|
size: "small",
|
|
256
|
-
disabled: !src.value,
|
|
276
|
+
disabled: !src.value || uploadLoading.value,
|
|
257
277
|
onClick: _cache[5] || (_cache[5] = ($event) => handlerToolbar("scaleY"))
|
|
258
278
|
}, {
|
|
259
279
|
default: withCtx(() => [
|
|
@@ -274,7 +294,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
274
294
|
createVNode(_component_ll_button, {
|
|
275
295
|
type: "primary",
|
|
276
296
|
size: "small",
|
|
277
|
-
disabled: !src.value,
|
|
297
|
+
disabled: !src.value || uploadLoading.value,
|
|
278
298
|
onClick: _cache[6] || (_cache[6] = ($event) => handlerToolbar("zoom", 0.1))
|
|
279
299
|
}, {
|
|
280
300
|
default: withCtx(() => [
|
|
@@ -295,7 +315,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
295
315
|
createVNode(_component_ll_button, {
|
|
296
316
|
type: "primary",
|
|
297
317
|
size: "small",
|
|
298
|
-
disabled: !src.value,
|
|
318
|
+
disabled: !src.value || uploadLoading.value,
|
|
299
319
|
onClick: _cache[7] || (_cache[7] = ($event) => handlerToolbar("zoom", -0.1))
|
|
300
320
|
}, {
|
|
301
321
|
default: withCtx(() => [
|
|
@@ -326,56 +346,62 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
326
346
|
class: normalizeClass(unref(bem).e("right"))
|
|
327
347
|
},
|
|
328
348
|
[
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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
|
-
|
|
349
|
+
createVNode(_component_a_spin, { spinning: uploadLoading.value }, {
|
|
350
|
+
default: withCtx(() => [
|
|
351
|
+
createElementVNode(
|
|
352
|
+
"div",
|
|
353
|
+
{
|
|
354
|
+
class: normalizeClass(unref(bem).e("preview"))
|
|
355
|
+
},
|
|
356
|
+
[
|
|
357
|
+
previewSource.value ? (openBlock(), createElementBlock("img", {
|
|
358
|
+
key: 0,
|
|
359
|
+
src: previewSource.value,
|
|
360
|
+
alt: "\u9884\u89C8"
|
|
361
|
+
}, null, 8, _hoisted_1)) : createCommentVNode("v-if", true)
|
|
362
|
+
],
|
|
363
|
+
2
|
|
364
|
+
/* CLASS */
|
|
365
|
+
),
|
|
366
|
+
previewSource.value ? (openBlock(), createElementBlock(
|
|
367
|
+
"div",
|
|
368
|
+
{
|
|
369
|
+
key: 0,
|
|
370
|
+
class: normalizeClass(unref(bem).e("group"))
|
|
371
|
+
},
|
|
372
|
+
[
|
|
373
|
+
createVNode(_component_ll_image, {
|
|
374
|
+
preview: false,
|
|
375
|
+
src: previewSource.value,
|
|
376
|
+
width: 32,
|
|
377
|
+
height: 32
|
|
378
|
+
}, null, 8, ["src"]),
|
|
379
|
+
createVNode(_component_ll_image, {
|
|
380
|
+
preview: false,
|
|
381
|
+
src: previewSource.value,
|
|
382
|
+
width: 48,
|
|
383
|
+
height: 48
|
|
384
|
+
}, null, 8, ["src"]),
|
|
385
|
+
createVNode(_component_ll_image, {
|
|
386
|
+
preview: false,
|
|
387
|
+
src: previewSource.value,
|
|
388
|
+
width: 64,
|
|
389
|
+
height: 64
|
|
390
|
+
}, null, 8, ["src"]),
|
|
391
|
+
createVNode(_component_ll_image, {
|
|
392
|
+
preview: false,
|
|
393
|
+
src: previewSource.value,
|
|
394
|
+
width: 80,
|
|
395
|
+
height: 80
|
|
396
|
+
}, null, 8, ["src"])
|
|
397
|
+
],
|
|
398
|
+
2
|
|
399
|
+
/* CLASS */
|
|
400
|
+
)) : createCommentVNode("v-if", true)
|
|
401
|
+
]),
|
|
402
|
+
_: 1
|
|
403
|
+
/* STABLE */
|
|
404
|
+
}, 8, ["spinning"])
|
|
379
405
|
],
|
|
380
406
|
2
|
|
381
407
|
/* CLASS */
|
|
@@ -387,25 +413,35 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
387
413
|
]),
|
|
388
414
|
_: 1
|
|
389
415
|
/* STABLE */
|
|
390
|
-
}, 8, ["open", "title", "width"]),
|
|
416
|
+
}, 8, ["open", "title", "width", "loading"]),
|
|
391
417
|
createElementVNode(
|
|
392
418
|
"div",
|
|
393
419
|
{
|
|
394
420
|
class: normalizeClass(unref(bem).e("cropper-avatar")),
|
|
395
421
|
style: normalizeStyle({
|
|
396
|
-
cursor: props.disabled ? "not-allowed" : "pointer"
|
|
422
|
+
cursor: props.disabled ? "not-allowed" : "pointer",
|
|
423
|
+
display: "inline-block"
|
|
397
424
|
}),
|
|
398
425
|
onClick: handleOpen
|
|
399
426
|
},
|
|
400
427
|
[
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
428
|
+
createVNode(_component_a_spin, {
|
|
429
|
+
spinning: loading.value,
|
|
430
|
+
style: { "display": "inline-block" }
|
|
431
|
+
}, {
|
|
432
|
+
default: withCtx(() => [
|
|
433
|
+
renderSlot(_ctx.$slots, "default", { src: avatar.value }, () => [
|
|
434
|
+
createVNode(_component_ll_image, {
|
|
435
|
+
src: avatar.value,
|
|
436
|
+
width: 64,
|
|
437
|
+
height: 64,
|
|
438
|
+
preview: false
|
|
439
|
+
}, null, 8, ["src"])
|
|
440
|
+
])
|
|
441
|
+
]),
|
|
442
|
+
_: 3
|
|
443
|
+
/* FORWARDED */
|
|
444
|
+
}, 8, ["spinning"])
|
|
409
445
|
],
|
|
410
446
|
6
|
|
411
447
|
/* CLASS, STYLE */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cropper-modal.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-modal.vue"],"sourcesContent":["<template>\n <ll-modal\n :open=\"open\"\n :title=\"props.title\"\n :width=\"props.width\"\n :keyboard=\"false\"\n :mask-closable=\"false\"\n :ok-text=\"'确定'\"\n @cancel=\"open = false\"\n @ok=\"handleOk\"\n >\n <div :class=\"bem.b()\">\n <div :class=\"bem.e('left')\">\n <div :class=\"bem.e('cropper')\">\n <cropper-image\n v-if=\"src && open\"\n :src=\"src\"\n height=\"300px\"\n :circled=\"circled\"\n @cropend=\"handleCropend\"\n @on-ready=\"handleReady\"\n />\n </div>\n <div :class=\"bem.e('toolbar')\">\n <a-upload\n :file-list=\"[]\"\n accept=\"image/*\"\n :before-upload=\"handleBeforeUpload\"\n >\n <ll-tooltip :title=\"'选择图片'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-upload\" />\n </ll-button>\n </ll-tooltip>\n </a-upload>\n <ll-space>\n <ll-tooltip :tip=\"'重置'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-refresh\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'逆时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('rotate', -45)\"\n >\n <ll-icon icon-name=\"icon-counter-clockwise\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'顺时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('rotate', 45)\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'水平翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('scaleX')\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'垂直翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('scaleY')\"\n >\n <ll-icon icon-name=\"icon-flip-vertical\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'放大'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('zoom', 0.1)\"\n >\n <ll-icon icon-name=\"icon-amplify1\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'缩小'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('zoom', -0.1)\"\n >\n <ll-icon icon-name=\"icon-scale\" />\n </ll-button>\n </ll-tooltip>\n </ll-space>\n </div>\n </div>\n <div :class=\"bem.e('right')\">\n <div :class=\"bem.e('preview')\">\n <img v-if=\"previewSource\" :src=\"previewSource\" :alt=\"'预览'\" />\n </div>\n <template v-if=\"previewSource\">\n <div :class=\"bem.e('group')\">\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"32\"\n :height=\"32\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"48\"\n :height=\"48\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"64\"\n :height=\"64\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"80\"\n :height=\"80\"\n />\n </div>\n </template>\n </div>\n </div>\n </ll-modal>\n <div\n :class=\"bem.e('cropper-avatar')\"\n :style=\"{\n cursor: props.disabled ? 'not-allowed' : 'pointer'\n }\"\n @click=\"handleOpen\"\n >\n <slot :src=\"avatar\">\n <ll-image :src=\"avatar\" :width=\"64\" :height=\"64\" :preview=\"false\" />\n </slot>\n </div>\n</template>\n<script lang=\"ts\" setup>\n//@ts-ignore\nimport type Cropper from 'cropperjs'\n\nimport { ref, watch } from 'vue'\nimport { createNamespace, dataURLtoBlob, type Nullable } from '@ll-plus/utils'\nimport CropperImage from './cropper-image.vue'\nimport {\n cropperModalProps,\n cropperModalEmits,\n type CropendResult\n} from './cropper-image'\n\ndefineOptions({ name: 'LlCropperModal' })\nconst props = defineProps(cropperModalProps)\nconst emits = defineEmits(cropperModalEmits)\nconst bem = createNamespace('cropper-modal')\nconst src = ref(props.avatar || '')\nconst avatar = ref(props.avatar || '')\nconst open = ref(false)\nconst previewSource = ref('')\n\nconst cropper = ref<Nullable<Cropper>>()\nlet scaleX = 1\nlet scaleY = 1\n\n// Block upload\nfunction handleBeforeUpload(file: File) {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n src.value = ''\n previewSource.value = ''\n reader.onload = function (e) {\n src.value = (e.target?.result as string) ?? ''\n // filename = file.name\n }\n return false\n}\nfunction handleOpen() {\n if (props.disabled) return\n open.value = true\n}\nfunction handleCropend({ imgBase64 }: CropendResult) {\n previewSource.value = imgBase64\n}\n\nfunction handleReady(cropperInstance: Cropper) {\n cropper.value = cropperInstance\n}\nfunction handlerToolbar(event: string, arg?: number) {\n if (event === 'scaleX') {\n scaleX = arg = scaleX === -1 ? 1 : -1\n }\n if (event === 'scaleY') {\n scaleY = arg = scaleY === -1 ? 1 : -1\n }\n cropper?.value?.[event]?.(arg)\n}\n\nasync function handleOk() {\n const blob = dataURLtoBlob(previewSource.value)\n emits('confirm', { blob, previewSource: previewSource.value })\n avatar.value = previewSource.value\n open.value = false\n}\n\nwatch(\n () => props.avatar,\n val => {\n console.log({ val })\n src.value = val\n avatar.value = val\n },\n {\n immediate: true\n }\n)\n</script>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cropper-modal.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-modal.vue"],"sourcesContent":["<template>\n <ll-modal\n :open=\"open\"\n :title=\"props.title\"\n :width=\"props.width\"\n :keyboard=\"false\"\n :mask-closable=\"false\"\n :ok-text=\"'确定'\"\n :loading=\"uploadLoading\"\n @cancel=\"open = false\"\n @ok=\"handleOk\"\n >\n <div :class=\"bem.b()\">\n <div :class=\"bem.e('left')\">\n <div :class=\"bem.e('cropper')\">\n <cropper-image\n v-if=\"src && open\"\n :src=\"src\"\n height=\"300px\"\n :circled=\"circled\"\n :loading=\"uploadLoading\"\n @cropend=\"handleCropend\"\n @on-ready=\"handleReady\"\n />\n </div>\n <div :class=\"bem.e('toolbar')\">\n <a-upload\n :file-list=\"[]\"\n accept=\"image/*\"\n :before-upload=\"handleBeforeUpload\"\n >\n <ll-tooltip :title=\"'选择图片'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"uploadLoading\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-upload\" />\n </ll-button>\n </ll-tooltip>\n </a-upload>\n <ll-space>\n <ll-tooltip :tip=\"'重置'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-refresh\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'逆时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('rotate', -45)\"\n >\n <ll-icon icon-name=\"icon-counter-clockwise\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'顺时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('rotate', 45)\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'水平翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('scaleX')\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'垂直翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('scaleY')\"\n >\n <ll-icon icon-name=\"icon-flip-vertical\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'放大'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('zoom', 0.1)\"\n >\n <ll-icon icon-name=\"icon-amplify1\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'缩小'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('zoom', -0.1)\"\n >\n <ll-icon icon-name=\"icon-scale\" />\n </ll-button>\n </ll-tooltip>\n </ll-space>\n </div>\n </div>\n <div :class=\"bem.e('right')\">\n <a-spin :spinning=\"uploadLoading\">\n <div :class=\"bem.e('preview')\">\n <img v-if=\"previewSource\" :src=\"previewSource\" :alt=\"'预览'\" />\n </div>\n <template v-if=\"previewSource\">\n <div :class=\"bem.e('group')\">\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"32\"\n :height=\"32\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"48\"\n :height=\"48\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"64\"\n :height=\"64\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"80\"\n :height=\"80\"\n />\n </div>\n </template>\n </a-spin>\n </div>\n </div>\n </ll-modal>\n <div\n :class=\"bem.e('cropper-avatar')\"\n :style=\"{\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n display: 'inline-block'\n }\"\n @click=\"handleOpen\"\n >\n <a-spin :spinning=\"loading\" style=\"display: inline-block\">\n <slot :src=\"avatar\">\n <ll-image :src=\"avatar\" :width=\"64\" :height=\"64\" :preview=\"false\" />\n </slot>\n </a-spin>\n </div>\n</template>\n<script lang=\"ts\" setup>\n//@ts-ignore\nimport type Cropper from 'cropperjs'\n\nimport { ref, watch, watchEffect } from 'vue'\nimport { createNamespace, dataURLtoBlob, type Nullable } from '@ll-plus/utils'\nimport CropperImage from './cropper-image.vue'\nimport {\n cropperModalProps,\n cropperModalEmits,\n type CropendResult\n} from './cropper-image'\n\ndefineOptions({ name: 'LlCropperModal' })\nconst props = defineProps(cropperModalProps)\nconst emits = defineEmits(cropperModalEmits)\nconst bem = createNamespace('cropper-modal')\nconst src = ref(props.avatar || '')\nconst avatar = ref(props.avatar || '')\nconst open = ref(false)\nconst previewSource = ref('')\nconst loading = ref<boolean>(props.loading)\nconst uploadLoading = ref(false)\n\nconst cropper = ref<Nullable<Cropper>>()\nlet scaleX = 1\nlet scaleY = 1\n\n// Block upload\nfunction handleBeforeUpload(file: File) {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n uploadLoading.value = true\n src.value = ''\n previewSource.value = ''\n reader.onload = function (e) {\n src.value = (e.target?.result as string) ?? ''\n uploadLoading.value = false\n // filename = file.name\n }\n reader.onerror = () => {\n uploadLoading.value = false\n }\n return false\n}\nfunction handleOpen() {\n if (props.disabled) return\n open.value = true\n}\nfunction handleCropend({ imgBase64 }: CropendResult) {\n previewSource.value = imgBase64\n}\n\nfunction handleReady(cropperInstance: Cropper) {\n cropper.value = cropperInstance\n}\nfunction handlerToolbar(event: string, arg?: number) {\n if (event === 'scaleX') {\n scaleX = arg = scaleX === -1 ? 1 : -1\n }\n if (event === 'scaleY') {\n scaleY = arg = scaleY === -1 ? 1 : -1\n }\n cropper?.value?.[event]?.(arg)\n}\n\nasync function handleOk() {\n const blob = dataURLtoBlob(previewSource.value)\n emits('confirm', { blob, previewSource: previewSource.value })\n avatar.value = previewSource.value\n open.value = false\n}\n\nconst cleanValue = () => {\n src.value = ''\n avatar.value = ''\n}\n\nwatch(\n () => props.avatar,\n val => {\n src.value = val\n avatar.value = val\n },\n {\n immediate: true\n }\n)\nwatchEffect(() => {\n loading.value = props.loading\n})\ndefineExpose({\n cleanValue\n})\n</script>\n"],"names":[],"mappings":"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"}
|