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.
Files changed (118) hide show
  1. package/es/components/advanced-filtering/index.d.ts +388 -0
  2. package/es/components/advanced-filtering/src/advanced-filtering.vue.d.ts +194 -0
  3. package/es/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +194 -0
  4. package/es/components/cropper/index.d.ts +19 -0
  5. package/es/components/cropper/src/cropper-image.d.ts +2 -0
  6. package/es/components/cropper/src/cropper-image.vue.d.ts +6 -0
  7. package/es/components/cropper/src/cropper-modal.vue.d.ts +13 -0
  8. package/es/components/form/index.d.ts +197 -0
  9. package/es/components/form/src/components/form-component.vue.d.ts +3 -0
  10. package/es/components/form/src/config/form.d.ts +3 -0
  11. package/es/components/form/src/form.vue.d.ts +194 -0
  12. package/es/components/icon-picker/index.d.ts +4 -0
  13. package/es/components/icon-picker/src/components/modal.vue.d.ts +4 -0
  14. package/es/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
  15. package/es/components/input/index.d.ts +2 -0
  16. package/es/components/input/src/input.vue.d.ts +2 -0
  17. package/es/components/input-number/index.d.ts +2 -0
  18. package/es/components/input-number/src/input-number.vue.d.ts +2 -0
  19. package/es/components/key-value/index.d.ts +1493 -338
  20. package/es/components/key-value/src/components/key-value-item.vue.d.ts +385 -0
  21. package/es/components/key-value/src/key-value.vue.d.ts +1493 -338
  22. package/es/components/number-range/index.d.ts +2 -0
  23. package/es/components/number-range/src/number-range.vue.d.ts +2 -0
  24. package/es/packages/components/cropper/src/cropper-image.mjs +8 -0
  25. package/es/packages/components/cropper/src/cropper-image.mjs.map +1 -1
  26. package/es/packages/components/cropper/src/cropper-image.vue2.mjs +43 -22
  27. package/es/packages/components/cropper/src/cropper-image.vue2.mjs.map +1 -1
  28. package/es/packages/components/cropper/src/cropper-modal.vue2.mjs +108 -72
  29. package/es/packages/components/cropper/src/cropper-modal.vue2.mjs.map +1 -1
  30. package/es/packages/components/form/src/components/form-component.vue2.mjs +19 -2
  31. package/es/packages/components/form/src/components/form-component.vue2.mjs.map +1 -1
  32. package/es/packages/components/form/src/config/form.mjs +21 -0
  33. package/es/packages/components/form/src/config/form.mjs.map +1 -1
  34. package/es/packages/components/form/src/form.vue2.mjs +56 -5
  35. package/es/packages/components/form/src/form.vue2.mjs.map +1 -1
  36. package/es/packages/components/icon-picker/src/components/modal.vue2.mjs +97 -76
  37. package/es/packages/components/icon-picker/src/components/modal.vue2.mjs.map +1 -1
  38. package/es/packages/components/input/src/input.vue2.mjs +8 -1
  39. package/es/packages/components/input/src/input.vue2.mjs.map +1 -1
  40. package/es/packages/components/input-number/src/input-number.vue2.mjs +8 -1
  41. package/es/packages/components/input-number/src/input-number.vue2.mjs.map +1 -1
  42. package/es/packages/components/key-value/src/config/key-value.mjs +2 -2
  43. package/es/packages/components/key-value/src/config/key-value.mjs.map +1 -1
  44. package/index.full.js +362 -175
  45. package/index.full.min.js +17 -17
  46. package/index.full.min.js.map +1 -1
  47. package/index.full.min.mjs +21 -21
  48. package/index.full.min.mjs.map +1 -1
  49. package/index.full.mjs +362 -175
  50. package/lib/components/advanced-filtering/index.d.ts +388 -0
  51. package/lib/components/advanced-filtering/src/advanced-filtering.vue.d.ts +194 -0
  52. package/lib/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +194 -0
  53. package/lib/components/cropper/index.d.ts +19 -0
  54. package/lib/components/cropper/src/cropper-image.d.ts +2 -0
  55. package/lib/components/cropper/src/cropper-image.vue.d.ts +6 -0
  56. package/lib/components/cropper/src/cropper-modal.vue.d.ts +13 -0
  57. package/lib/components/form/index.d.ts +197 -0
  58. package/lib/components/form/src/components/form-component.vue.d.ts +3 -0
  59. package/lib/components/form/src/config/form.d.ts +3 -0
  60. package/lib/components/form/src/form.vue.d.ts +194 -0
  61. package/lib/components/icon-picker/index.d.ts +4 -0
  62. package/lib/components/icon-picker/src/components/modal.vue.d.ts +4 -0
  63. package/lib/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
  64. package/lib/components/input/index.d.ts +2 -0
  65. package/lib/components/input/src/input.vue.d.ts +2 -0
  66. package/lib/components/input-number/index.d.ts +2 -0
  67. package/lib/components/input-number/src/input-number.vue.d.ts +2 -0
  68. package/lib/components/key-value/index.d.ts +1493 -338
  69. package/lib/components/key-value/src/components/key-value-item.vue.d.ts +385 -0
  70. package/lib/components/key-value/src/key-value.vue.d.ts +1493 -338
  71. package/lib/components/number-range/index.d.ts +2 -0
  72. package/lib/components/number-range/src/number-range.vue.d.ts +2 -0
  73. package/lib/packages/components/cropper/src/cropper-image.js +8 -0
  74. package/lib/packages/components/cropper/src/cropper-image.js.map +1 -1
  75. package/lib/packages/components/cropper/src/cropper-image.vue2.js +42 -21
  76. package/lib/packages/components/cropper/src/cropper-image.vue2.js.map +1 -1
  77. package/lib/packages/components/cropper/src/cropper-modal.vue2.js +107 -71
  78. package/lib/packages/components/cropper/src/cropper-modal.vue2.js.map +1 -1
  79. package/lib/packages/components/form/src/components/form-component.vue2.js +18 -1
  80. package/lib/packages/components/form/src/components/form-component.vue2.js.map +1 -1
  81. package/lib/packages/components/form/src/config/form.js +21 -0
  82. package/lib/packages/components/form/src/config/form.js.map +1 -1
  83. package/lib/packages/components/form/src/form.vue2.js +54 -3
  84. package/lib/packages/components/form/src/form.vue2.js.map +1 -1
  85. package/lib/packages/components/icon-picker/src/components/modal.vue2.js +96 -75
  86. package/lib/packages/components/icon-picker/src/components/modal.vue2.js.map +1 -1
  87. package/lib/packages/components/input/src/input.vue2.js +8 -1
  88. package/lib/packages/components/input/src/input.vue2.js.map +1 -1
  89. package/lib/packages/components/input-number/src/input-number.vue2.js +8 -1
  90. package/lib/packages/components/input-number/src/input-number.vue2.js.map +1 -1
  91. package/lib/packages/components/key-value/src/config/key-value.js +2 -2
  92. package/lib/packages/components/key-value/src/config/key-value.js.map +1 -1
  93. package/package.json +1 -1
  94. package/theme-chalk/css/icon-picker.css +1 -1
  95. package/theme-chalk/css/index.css +1 -1
  96. package/types/packages/components/advanced-filtering/index.d.ts +388 -0
  97. package/types/packages/components/advanced-filtering/src/advanced-filtering.vue.d.ts +194 -0
  98. package/types/packages/components/advanced-filtering/src/components/advanced-filtering-params.vue.d.ts +194 -0
  99. package/types/packages/components/cropper/index.d.ts +19 -0
  100. package/types/packages/components/cropper/src/cropper-image.d.ts +2 -0
  101. package/types/packages/components/cropper/src/cropper-image.vue.d.ts +6 -0
  102. package/types/packages/components/cropper/src/cropper-modal.vue.d.ts +13 -0
  103. package/types/packages/components/form/index.d.ts +197 -0
  104. package/types/packages/components/form/src/components/form-component.vue.d.ts +3 -0
  105. package/types/packages/components/form/src/config/form.d.ts +3 -0
  106. package/types/packages/components/form/src/form.vue.d.ts +194 -0
  107. package/types/packages/components/icon-picker/index.d.ts +4 -0
  108. package/types/packages/components/icon-picker/src/components/modal.vue.d.ts +4 -0
  109. package/types/packages/components/icon-picker/src/icon-picker.vue.d.ts +4 -0
  110. package/types/packages/components/input/index.d.ts +2 -0
  111. package/types/packages/components/input/src/input.vue.d.ts +2 -0
  112. package/types/packages/components/input-number/index.d.ts +2 -0
  113. package/types/packages/components/input-number/src/input-number.vue.d.ts +2 -0
  114. package/types/packages/components/key-value/index.d.ts +1493 -338
  115. package/types/packages/components/key-value/src/components/key-value-item.vue.d.ts +385 -0
  116. package/types/packages/components/key-value/src/key-value.vue.d.ts +1493 -338
  117. package/types/packages/components/number-range/index.d.ts +2 -0
  118. 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, createElementBlock, normalizeClass, unref, normalizeStyle, withDirectives, createElementVNode, vShow } from 'vue';
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
- return openBlock(), createElementBlock(
112
- "div",
113
- {
114
- class: normalizeClass([unref(bem).b(), props.circled ? unref(bem).is("circled") : ""]),
115
- style: normalizeStyle(getWrapperStyle.value)
116
- },
117
- [
118
- withDirectives(createElementVNode("img", {
119
- ref_key: "imgElRef",
120
- ref: imgElRef,
121
- src: _ctx.src,
122
- alt: _ctx.alt,
123
- crossorigin: _ctx.crossorigin,
124
- style: normalizeStyle(getImageStyle.value)
125
- }, null, 12, _hoisted_1), [
126
- [vShow, isReady.value]
127
- ])
128
- ],
129
- 6
130
- /* CLASS, STYLE */
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 :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 />\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { onMounted, ref, computed, onUnmounted, type CSSProperties } 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 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 cropper.value = new Cropper(imgEl, {\n ...defaultCropperOptions,\n ready() {\n isReady.value = true\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\nonMounted(init)\n\nonUnmounted(() => {\n cropper.value?.destroy()\n})\n</script>\n"],"names":[],"mappings":"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"}
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
- createElementVNode(
330
- "div",
331
- {
332
- class: normalizeClass(unref(bem).e("preview"))
333
- },
334
- [
335
- previewSource.value ? (openBlock(), createElementBlock("img", {
336
- key: 0,
337
- src: previewSource.value,
338
- alt: "\u9884\u89C8"
339
- }, null, 8, _hoisted_1)) : createCommentVNode("v-if", true)
340
- ],
341
- 2
342
- /* CLASS */
343
- ),
344
- previewSource.value ? (openBlock(), createElementBlock(
345
- "div",
346
- {
347
- key: 0,
348
- class: normalizeClass(unref(bem).e("group"))
349
- },
350
- [
351
- createVNode(_component_ll_image, {
352
- preview: false,
353
- src: previewSource.value,
354
- width: 32,
355
- height: 32
356
- }, null, 8, ["src"]),
357
- createVNode(_component_ll_image, {
358
- preview: false,
359
- src: previewSource.value,
360
- width: 48,
361
- height: 48
362
- }, null, 8, ["src"]),
363
- createVNode(_component_ll_image, {
364
- preview: false,
365
- src: previewSource.value,
366
- width: 64,
367
- height: 64
368
- }, null, 8, ["src"]),
369
- createVNode(_component_ll_image, {
370
- preview: false,
371
- src: previewSource.value,
372
- width: 80,
373
- height: 80
374
- }, null, 8, ["src"])
375
- ],
376
- 2
377
- /* CLASS */
378
- )) : createCommentVNode("v-if", true)
349
+ createVNode(_component_a_spin, { spinning: uploadLoading.value }, {
350
+ default: withCtx(() => [
351
+ createElementVNode(
352
+ "div",
353
+ {
354
+ class: normalizeClass(unref(bem).e("preview"))
355
+ },
356
+ [
357
+ previewSource.value ? (openBlock(), createElementBlock("img", {
358
+ key: 0,
359
+ src: previewSource.value,
360
+ alt: "\u9884\u89C8"
361
+ }, null, 8, _hoisted_1)) : createCommentVNode("v-if", true)
362
+ ],
363
+ 2
364
+ /* CLASS */
365
+ ),
366
+ previewSource.value ? (openBlock(), createElementBlock(
367
+ "div",
368
+ {
369
+ key: 0,
370
+ class: normalizeClass(unref(bem).e("group"))
371
+ },
372
+ [
373
+ createVNode(_component_ll_image, {
374
+ preview: false,
375
+ src: previewSource.value,
376
+ width: 32,
377
+ height: 32
378
+ }, null, 8, ["src"]),
379
+ createVNode(_component_ll_image, {
380
+ preview: false,
381
+ src: previewSource.value,
382
+ width: 48,
383
+ height: 48
384
+ }, null, 8, ["src"]),
385
+ createVNode(_component_ll_image, {
386
+ preview: false,
387
+ src: previewSource.value,
388
+ width: 64,
389
+ height: 64
390
+ }, null, 8, ["src"]),
391
+ createVNode(_component_ll_image, {
392
+ preview: false,
393
+ src: previewSource.value,
394
+ width: 80,
395
+ height: 80
396
+ }, null, 8, ["src"])
397
+ ],
398
+ 2
399
+ /* CLASS */
400
+ )) : createCommentVNode("v-if", true)
401
+ ]),
402
+ _: 1
403
+ /* STABLE */
404
+ }, 8, ["spinning"])
379
405
  ],
380
406
  2
381
407
  /* CLASS */
@@ -387,25 +413,35 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
387
413
  ]),
388
414
  _: 1
389
415
  /* STABLE */
390
- }, 8, ["open", "title", "width"]),
416
+ }, 8, ["open", "title", "width", "loading"]),
391
417
  createElementVNode(
392
418
  "div",
393
419
  {
394
420
  class: normalizeClass(unref(bem).e("cropper-avatar")),
395
421
  style: normalizeStyle({
396
- cursor: props.disabled ? "not-allowed" : "pointer"
422
+ cursor: props.disabled ? "not-allowed" : "pointer",
423
+ display: "inline-block"
397
424
  }),
398
425
  onClick: handleOpen
399
426
  },
400
427
  [
401
- renderSlot(_ctx.$slots, "default", { src: avatar.value }, () => [
402
- createVNode(_component_ll_image, {
403
- src: avatar.value,
404
- width: 64,
405
- height: 64,
406
- preview: false
407
- }, null, 8, ["src"])
408
- ])
428
+ createVNode(_component_a_spin, {
429
+ spinning: loading.value,
430
+ style: { "display": "inline-block" }
431
+ }, {
432
+ default: withCtx(() => [
433
+ renderSlot(_ctx.$slots, "default", { src: avatar.value }, () => [
434
+ createVNode(_component_ll_image, {
435
+ src: avatar.value,
436
+ width: 64,
437
+ height: 64,
438
+ preview: false
439
+ }, null, 8, ["src"])
440
+ ])
441
+ ]),
442
+ _: 3
443
+ /* FORWARDED */
444
+ }, 8, ["spinning"])
409
445
  ],
410
446
  6
411
447
  /* CLASS, STYLE */
@@ -1 +1 @@
1
- {"version":3,"file":"cropper-modal.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-modal.vue"],"sourcesContent":["<template>\n <ll-modal\n :open=\"open\"\n :title=\"props.title\"\n :width=\"props.width\"\n :keyboard=\"false\"\n :mask-closable=\"false\"\n :ok-text=\"'确定'\"\n @cancel=\"open = false\"\n @ok=\"handleOk\"\n >\n <div :class=\"bem.b()\">\n <div :class=\"bem.e('left')\">\n <div :class=\"bem.e('cropper')\">\n <cropper-image\n v-if=\"src && open\"\n :src=\"src\"\n height=\"300px\"\n :circled=\"circled\"\n @cropend=\"handleCropend\"\n @on-ready=\"handleReady\"\n />\n </div>\n <div :class=\"bem.e('toolbar')\">\n <a-upload\n :file-list=\"[]\"\n accept=\"image/*\"\n :before-upload=\"handleBeforeUpload\"\n >\n <ll-tooltip :title=\"'选择图片'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-upload\" />\n </ll-button>\n </ll-tooltip>\n </a-upload>\n <ll-space>\n <ll-tooltip :tip=\"'重置'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-refresh\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'逆时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('rotate', -45)\"\n >\n <ll-icon icon-name=\"icon-counter-clockwise\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'顺时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('rotate', 45)\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'水平翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('scaleX')\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'垂直翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('scaleY')\"\n >\n <ll-icon icon-name=\"icon-flip-vertical\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'放大'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('zoom', 0.1)\"\n >\n <ll-icon icon-name=\"icon-amplify1\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'缩小'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src\"\n @click=\"handlerToolbar('zoom', -0.1)\"\n >\n <ll-icon icon-name=\"icon-scale\" />\n </ll-button>\n </ll-tooltip>\n </ll-space>\n </div>\n </div>\n <div :class=\"bem.e('right')\">\n <div :class=\"bem.e('preview')\">\n <img v-if=\"previewSource\" :src=\"previewSource\" :alt=\"'预览'\" />\n </div>\n <template v-if=\"previewSource\">\n <div :class=\"bem.e('group')\">\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"32\"\n :height=\"32\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"48\"\n :height=\"48\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"64\"\n :height=\"64\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"80\"\n :height=\"80\"\n />\n </div>\n </template>\n </div>\n </div>\n </ll-modal>\n <div\n :class=\"bem.e('cropper-avatar')\"\n :style=\"{\n cursor: props.disabled ? 'not-allowed' : 'pointer'\n }\"\n @click=\"handleOpen\"\n >\n <slot :src=\"avatar\">\n <ll-image :src=\"avatar\" :width=\"64\" :height=\"64\" :preview=\"false\" />\n </slot>\n </div>\n</template>\n<script lang=\"ts\" setup>\n//@ts-ignore\nimport type Cropper from 'cropperjs'\n\nimport { ref, watch } from 'vue'\nimport { createNamespace, dataURLtoBlob, type Nullable } from '@ll-plus/utils'\nimport CropperImage from './cropper-image.vue'\nimport {\n cropperModalProps,\n cropperModalEmits,\n type CropendResult\n} from './cropper-image'\n\ndefineOptions({ name: 'LlCropperModal' })\nconst props = defineProps(cropperModalProps)\nconst emits = defineEmits(cropperModalEmits)\nconst bem = createNamespace('cropper-modal')\nconst src = ref(props.avatar || '')\nconst avatar = ref(props.avatar || '')\nconst open = ref(false)\nconst previewSource = ref('')\n\nconst cropper = ref<Nullable<Cropper>>()\nlet scaleX = 1\nlet scaleY = 1\n\n// Block upload\nfunction handleBeforeUpload(file: File) {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n src.value = ''\n previewSource.value = ''\n reader.onload = function (e) {\n src.value = (e.target?.result as string) ?? ''\n // filename = file.name\n }\n return false\n}\nfunction handleOpen() {\n if (props.disabled) return\n open.value = true\n}\nfunction handleCropend({ imgBase64 }: CropendResult) {\n previewSource.value = imgBase64\n}\n\nfunction handleReady(cropperInstance: Cropper) {\n cropper.value = cropperInstance\n}\nfunction handlerToolbar(event: string, arg?: number) {\n if (event === 'scaleX') {\n scaleX = arg = scaleX === -1 ? 1 : -1\n }\n if (event === 'scaleY') {\n scaleY = arg = scaleY === -1 ? 1 : -1\n }\n cropper?.value?.[event]?.(arg)\n}\n\nasync function handleOk() {\n const blob = dataURLtoBlob(previewSource.value)\n emits('confirm', { blob, previewSource: previewSource.value })\n avatar.value = previewSource.value\n open.value = false\n}\n\nwatch(\n () => props.avatar,\n val => {\n console.log({ val })\n src.value = val\n avatar.value = val\n },\n {\n immediate: true\n }\n)\n</script>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cropper-modal.vue2.mjs","sources":["../../../../../../packages/components/cropper/src/cropper-modal.vue"],"sourcesContent":["<template>\n <ll-modal\n :open=\"open\"\n :title=\"props.title\"\n :width=\"props.width\"\n :keyboard=\"false\"\n :mask-closable=\"false\"\n :ok-text=\"'确定'\"\n :loading=\"uploadLoading\"\n @cancel=\"open = false\"\n @ok=\"handleOk\"\n >\n <div :class=\"bem.b()\">\n <div :class=\"bem.e('left')\">\n <div :class=\"bem.e('cropper')\">\n <cropper-image\n v-if=\"src && open\"\n :src=\"src\"\n height=\"300px\"\n :circled=\"circled\"\n :loading=\"uploadLoading\"\n @cropend=\"handleCropend\"\n @on-ready=\"handleReady\"\n />\n </div>\n <div :class=\"bem.e('toolbar')\">\n <a-upload\n :file-list=\"[]\"\n accept=\"image/*\"\n :before-upload=\"handleBeforeUpload\"\n >\n <ll-tooltip :title=\"'选择图片'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"uploadLoading\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-upload\" />\n </ll-button>\n </ll-tooltip>\n </a-upload>\n <ll-space>\n <ll-tooltip :tip=\"'重置'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('reset')\"\n >\n <ll-icon icon-name=\"icon-refresh\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'逆时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('rotate', -45)\"\n >\n <ll-icon icon-name=\"icon-counter-clockwise\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'顺时针旋转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('rotate', 45)\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'水平翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('scaleX')\"\n >\n <ll-icon icon-name=\"icon-flip-horizontal\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'垂直翻转'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('scaleY')\"\n >\n <ll-icon icon-name=\"icon-flip-vertical\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'放大'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('zoom', 0.1)\"\n >\n <ll-icon icon-name=\"icon-amplify1\" />\n </ll-button>\n </ll-tooltip>\n <ll-tooltip :tip=\"'缩小'\" placement=\"bottom\">\n <ll-button\n type=\"primary\"\n size=\"small\"\n :disabled=\"!src || uploadLoading\"\n @click=\"handlerToolbar('zoom', -0.1)\"\n >\n <ll-icon icon-name=\"icon-scale\" />\n </ll-button>\n </ll-tooltip>\n </ll-space>\n </div>\n </div>\n <div :class=\"bem.e('right')\">\n <a-spin :spinning=\"uploadLoading\">\n <div :class=\"bem.e('preview')\">\n <img v-if=\"previewSource\" :src=\"previewSource\" :alt=\"'预览'\" />\n </div>\n <template v-if=\"previewSource\">\n <div :class=\"bem.e('group')\">\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"32\"\n :height=\"32\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"48\"\n :height=\"48\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"64\"\n :height=\"64\"\n />\n <ll-image\n :preview=\"false\"\n :src=\"previewSource\"\n :width=\"80\"\n :height=\"80\"\n />\n </div>\n </template>\n </a-spin>\n </div>\n </div>\n </ll-modal>\n <div\n :class=\"bem.e('cropper-avatar')\"\n :style=\"{\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n display: 'inline-block'\n }\"\n @click=\"handleOpen\"\n >\n <a-spin :spinning=\"loading\" style=\"display: inline-block\">\n <slot :src=\"avatar\">\n <ll-image :src=\"avatar\" :width=\"64\" :height=\"64\" :preview=\"false\" />\n </slot>\n </a-spin>\n </div>\n</template>\n<script lang=\"ts\" setup>\n//@ts-ignore\nimport type Cropper from 'cropperjs'\n\nimport { ref, watch, watchEffect } from 'vue'\nimport { createNamespace, dataURLtoBlob, type Nullable } from '@ll-plus/utils'\nimport CropperImage from './cropper-image.vue'\nimport {\n cropperModalProps,\n cropperModalEmits,\n type CropendResult\n} from './cropper-image'\n\ndefineOptions({ name: 'LlCropperModal' })\nconst props = defineProps(cropperModalProps)\nconst emits = defineEmits(cropperModalEmits)\nconst bem = createNamespace('cropper-modal')\nconst src = ref(props.avatar || '')\nconst avatar = ref(props.avatar || '')\nconst open = ref(false)\nconst previewSource = ref('')\nconst loading = ref<boolean>(props.loading)\nconst uploadLoading = ref(false)\n\nconst cropper = ref<Nullable<Cropper>>()\nlet scaleX = 1\nlet scaleY = 1\n\n// Block upload\nfunction handleBeforeUpload(file: File) {\n const reader = new FileReader()\n reader.readAsDataURL(file)\n uploadLoading.value = true\n src.value = ''\n previewSource.value = ''\n reader.onload = function (e) {\n src.value = (e.target?.result as string) ?? ''\n uploadLoading.value = false\n // filename = file.name\n }\n reader.onerror = () => {\n uploadLoading.value = false\n }\n return false\n}\nfunction handleOpen() {\n if (props.disabled) return\n open.value = true\n}\nfunction handleCropend({ imgBase64 }: CropendResult) {\n previewSource.value = imgBase64\n}\n\nfunction handleReady(cropperInstance: Cropper) {\n cropper.value = cropperInstance\n}\nfunction handlerToolbar(event: string, arg?: number) {\n if (event === 'scaleX') {\n scaleX = arg = scaleX === -1 ? 1 : -1\n }\n if (event === 'scaleY') {\n scaleY = arg = scaleY === -1 ? 1 : -1\n }\n cropper?.value?.[event]?.(arg)\n}\n\nasync function handleOk() {\n const blob = dataURLtoBlob(previewSource.value)\n emits('confirm', { blob, previewSource: previewSource.value })\n avatar.value = previewSource.value\n open.value = false\n}\n\nconst cleanValue = () => {\n src.value = ''\n avatar.value = ''\n}\n\nwatch(\n () => props.avatar,\n val => {\n src.value = val\n avatar.value = val\n },\n {\n immediate: true\n }\n)\nwatchEffect(() => {\n loading.value = props.loading\n})\ndefineExpose({\n cleanValue\n})\n</script>\n"],"names":[],"mappings":"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"}