@minilo/ui 0.0.7 → 0.0.8

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 (212) hide show
  1. package/package.json +2 -2
  2. package/minilo/dist/index.css +0 -1
  3. package/minilo/dist/index.full.js +0 -8393
  4. package/minilo/dist/index.full.min.js +0 -2
  5. package/minilo/dist/index.full.min.js.map +0 -1
  6. package/minilo/dist/index.full.min.mjs +0 -2
  7. package/minilo/dist/index.full.min.mjs.map +0 -1
  8. package/minilo/dist/index.full.mjs +0 -8373
  9. package/minilo/es/components/button/index.d.ts +0 -47
  10. package/minilo/es/components/button/index.mjs +0 -6
  11. package/minilo/es/components/button/index.vue.d.ts +0 -29
  12. package/minilo/es/components/button/index.vue.mjs +0 -5
  13. package/minilo/es/components/button/index.vue2.mjs +0 -67
  14. package/minilo/es/components/button/type.d.ts +0 -10
  15. package/minilo/es/components/chart/index.d.ts +0 -49
  16. package/minilo/es/components/chart/index.mjs +0 -6
  17. package/minilo/es/components/chart/index.vue.d.ts +0 -33
  18. package/minilo/es/components/chart/index.vue.mjs +0 -5
  19. package/minilo/es/components/chart/index.vue2.mjs +0 -124
  20. package/minilo/es/components/chart/type.d.ts +0 -7
  21. package/minilo/es/components/detail/index.d.ts +0 -37
  22. package/minilo/es/components/detail/index.mjs +0 -6
  23. package/minilo/es/components/detail/index.vue.d.ts +0 -23
  24. package/minilo/es/components/detail/index.vue.mjs +0 -5
  25. package/minilo/es/components/detail/index.vue2.mjs +0 -194
  26. package/minilo/es/components/detail/renderLabel.vue.d.ts +0 -8
  27. package/minilo/es/components/detail/renderLabel.vue.mjs +0 -5
  28. package/minilo/es/components/detail/renderLabel.vue2.mjs +0 -23
  29. package/minilo/es/components/detail/renderTooltip.vue.d.ts +0 -8
  30. package/minilo/es/components/detail/renderTooltip.vue.mjs +0 -5
  31. package/minilo/es/components/detail/renderTooltip.vue2.mjs +0 -23
  32. package/minilo/es/components/detail/type.d.ts +0 -27
  33. package/minilo/es/components/image-upload-pro/index.d.ts +0 -544
  34. package/minilo/es/components/image-upload-pro/index.mjs +0 -7
  35. package/minilo/es/components/image-upload-pro/index.vue.d.ts +0 -546
  36. package/minilo/es/components/image-upload-pro/index.vue.mjs +0 -5
  37. package/minilo/es/components/image-upload-pro/index.vue2.mjs +0 -657
  38. package/minilo/es/components/image-upload-pro/type.d.ts +0 -147
  39. package/minilo/es/components/image-upload-pro/type.mjs +0 -81
  40. package/minilo/es/components/index.d.ts +0 -11
  41. package/minilo/es/components/index.mjs +0 -14
  42. package/minilo/es/components/number-range-input/index.d.ts +0 -41
  43. package/minilo/es/components/number-range-input/index.mjs +0 -6
  44. package/minilo/es/components/number-range-input/index.vue.d.ts +0 -33
  45. package/minilo/es/components/number-range-input/index.vue.mjs +0 -5
  46. package/minilo/es/components/number-range-input/index.vue2.mjs +0 -150
  47. package/minilo/es/components/number-range-input/props.d.ts +0 -10
  48. package/minilo/es/components/search/index.d.ts +0 -488
  49. package/minilo/es/components/search/index.mjs +0 -6
  50. package/minilo/es/components/search/index.vue.d.ts +0 -554
  51. package/minilo/es/components/search/index.vue.mjs +0 -5
  52. package/minilo/es/components/search/index.vue2.mjs +0 -297
  53. package/minilo/es/components/search/props.d.ts +0 -107
  54. package/minilo/es/components/search/props.mjs +0 -55
  55. package/minilo/es/components/search-table/index.mjs +0 -6
  56. package/minilo/es/components/search-table/index.vue.d.ts +0 -189
  57. package/minilo/es/components/search-table/index.vue.mjs +0 -5
  58. package/minilo/es/components/search-table/index.vue2.mjs +0 -198
  59. package/minilo/es/components/search-table/props.d.ts +0 -69
  60. package/minilo/es/components/search-table/props.mjs +0 -69
  61. package/minilo/es/components/search-table/render.d.ts +0 -11
  62. package/minilo/es/components/search-table/render.mjs +0 -19
  63. package/minilo/es/components/tree-select/index.d.ts +0 -34
  64. package/minilo/es/components/tree-select/index.mjs +0 -6
  65. package/minilo/es/components/tree-select/index.vue.d.ts +0 -23
  66. package/minilo/es/components/tree-select/index.vue.mjs +0 -5
  67. package/minilo/es/components/tree-select/index.vue2.mjs +0 -229
  68. package/minilo/es/components/tree-select/type.d.ts +0 -34
  69. package/minilo/es/components/tree-select-dialog/index.d.ts +0 -64
  70. package/minilo/es/components/tree-select-dialog/index.mjs +0 -7
  71. package/minilo/es/components/tree-select-dialog/index.vue.d.ts +0 -26
  72. package/minilo/es/components/tree-select-dialog/index.vue.mjs +0 -5
  73. package/minilo/es/components/tree-select-dialog/index.vue2.mjs +0 -145
  74. package/minilo/es/components/tree-select-dialog/type.d.ts +0 -9
  75. package/minilo/es/components/tree-select-dialog/type.mjs +0 -24
  76. package/minilo/es/components/tree-select-drawer/index.d.ts +0 -69
  77. package/minilo/es/components/tree-select-drawer/index.mjs +0 -7
  78. package/minilo/es/components/tree-select-drawer/index.vue.d.ts +0 -26
  79. package/minilo/es/components/tree-select-drawer/index.vue.mjs +0 -5
  80. package/minilo/es/components/tree-select-drawer/index.vue2.mjs +0 -151
  81. package/minilo/es/components/tree-select-drawer/type.d.ts +0 -10
  82. package/minilo/es/components/tree-select-drawer/type.mjs +0 -20
  83. package/minilo/es/components/virtual-list/index.d.ts +0 -59
  84. package/minilo/es/components/virtual-list/index.mjs +0 -6
  85. package/minilo/es/components/virtual-list/index.vue.d.ts +0 -39
  86. package/minilo/es/components/virtual-list/index.vue.mjs +0 -5
  87. package/minilo/es/components/virtual-list/index.vue2.mjs +0 -423
  88. package/minilo/es/components/virtual-list/type.d.ts +0 -20
  89. package/minilo/es/node_modules/.pnpm/@element-plus_icons-vue@2.3.1_vue@3.5.26_typescript@5.9.3_/node_modules/@element-plus/icons-vue/dist/index.mjs +0 -41
  90. package/minilo/es/node_modules/.pnpm/@vueuse_core@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/core/index.mjs +0 -73
  91. package/minilo/es/node_modules/.pnpm/@vueuse_shared@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/shared/index.mjs +0 -76
  92. package/minilo/es/packages/utils/dist/func/common.mjs +0 -14
  93. package/minilo/es/packages/utils/dist/request/index.mjs +0 -105
  94. package/minilo/es/resolver/index.d.ts +0 -8
  95. package/minilo/es/resolver/index.mjs +0 -26
  96. package/minilo/es/utils/index.d.ts +0 -28
  97. package/minilo/es/utils/index.mjs +0 -30
  98. package/minilo/lib/components/button/index.d.ts +0 -47
  99. package/minilo/lib/components/button/index.js +0 -11
  100. package/minilo/lib/components/button/index.vue.d.ts +0 -29
  101. package/minilo/lib/components/button/index.vue.js +0 -9
  102. package/minilo/lib/components/button/index.vue2.js +0 -71
  103. package/minilo/lib/components/button/type.d.ts +0 -10
  104. package/minilo/lib/components/chart/index.d.ts +0 -49
  105. package/minilo/lib/components/chart/index.js +0 -11
  106. package/minilo/lib/components/chart/index.vue.d.ts +0 -33
  107. package/minilo/lib/components/chart/index.vue.js +0 -9
  108. package/minilo/lib/components/chart/index.vue2.js +0 -128
  109. package/minilo/lib/components/chart/type.d.ts +0 -7
  110. package/minilo/lib/components/detail/index.d.ts +0 -37
  111. package/minilo/lib/components/detail/index.js +0 -11
  112. package/minilo/lib/components/detail/index.vue.d.ts +0 -23
  113. package/minilo/lib/components/detail/index.vue.js +0 -9
  114. package/minilo/lib/components/detail/index.vue2.js +0 -198
  115. package/minilo/lib/components/detail/renderLabel.vue.d.ts +0 -8
  116. package/minilo/lib/components/detail/renderLabel.vue.js +0 -9
  117. package/minilo/lib/components/detail/renderLabel.vue2.js +0 -27
  118. package/minilo/lib/components/detail/renderTooltip.vue.d.ts +0 -8
  119. package/minilo/lib/components/detail/renderTooltip.vue.js +0 -9
  120. package/minilo/lib/components/detail/renderTooltip.vue2.js +0 -27
  121. package/minilo/lib/components/detail/type.d.ts +0 -27
  122. package/minilo/lib/components/image-upload-pro/index.d.ts +0 -544
  123. package/minilo/lib/components/image-upload-pro/index.js +0 -13
  124. package/minilo/lib/components/image-upload-pro/index.vue.d.ts +0 -546
  125. package/minilo/lib/components/image-upload-pro/index.vue.js +0 -9
  126. package/minilo/lib/components/image-upload-pro/index.vue2.js +0 -661
  127. package/minilo/lib/components/image-upload-pro/type.d.ts +0 -147
  128. package/minilo/lib/components/image-upload-pro/type.js +0 -83
  129. package/minilo/lib/components/index.d.ts +0 -11
  130. package/minilo/lib/components/index.js +0 -33
  131. package/minilo/lib/components/number-range-input/index.d.ts +0 -41
  132. package/minilo/lib/components/number-range-input/index.js +0 -11
  133. package/minilo/lib/components/number-range-input/index.vue.d.ts +0 -33
  134. package/minilo/lib/components/number-range-input/index.vue.js +0 -9
  135. package/minilo/lib/components/number-range-input/index.vue2.js +0 -154
  136. package/minilo/lib/components/number-range-input/props.d.ts +0 -10
  137. package/minilo/lib/components/search/index.d.ts +0 -488
  138. package/minilo/lib/components/search/index.js +0 -11
  139. package/minilo/lib/components/search/index.vue.d.ts +0 -554
  140. package/minilo/lib/components/search/index.vue.js +0 -9
  141. package/minilo/lib/components/search/index.vue2.js +0 -301
  142. package/minilo/lib/components/search/props.d.ts +0 -107
  143. package/minilo/lib/components/search/props.js +0 -58
  144. package/minilo/lib/components/search-table/index.js +0 -11
  145. package/minilo/lib/components/search-table/index.vue.d.ts +0 -189
  146. package/minilo/lib/components/search-table/index.vue.js +0 -9
  147. package/minilo/lib/components/search-table/index.vue2.js +0 -202
  148. package/minilo/lib/components/search-table/props.d.ts +0 -69
  149. package/minilo/lib/components/search-table/props.js +0 -72
  150. package/minilo/lib/components/search-table/render.d.ts +0 -11
  151. package/minilo/lib/components/search-table/render.js +0 -23
  152. package/minilo/lib/components/tree-select/index.d.ts +0 -34
  153. package/minilo/lib/components/tree-select/index.js +0 -11
  154. package/minilo/lib/components/tree-select/index.vue.d.ts +0 -23
  155. package/minilo/lib/components/tree-select/index.vue.js +0 -9
  156. package/minilo/lib/components/tree-select/index.vue2.js +0 -233
  157. package/minilo/lib/components/tree-select/type.d.ts +0 -34
  158. package/minilo/lib/components/tree-select-dialog/index.d.ts +0 -64
  159. package/minilo/lib/components/tree-select-dialog/index.js +0 -13
  160. package/minilo/lib/components/tree-select-dialog/index.vue.d.ts +0 -26
  161. package/minilo/lib/components/tree-select-dialog/index.vue.js +0 -9
  162. package/minilo/lib/components/tree-select-dialog/index.vue2.js +0 -149
  163. package/minilo/lib/components/tree-select-dialog/type.d.ts +0 -9
  164. package/minilo/lib/components/tree-select-dialog/type.js +0 -26
  165. package/minilo/lib/components/tree-select-drawer/index.d.ts +0 -69
  166. package/minilo/lib/components/tree-select-drawer/index.js +0 -13
  167. package/minilo/lib/components/tree-select-drawer/index.vue.d.ts +0 -26
  168. package/minilo/lib/components/tree-select-drawer/index.vue.js +0 -9
  169. package/minilo/lib/components/tree-select-drawer/index.vue2.js +0 -155
  170. package/minilo/lib/components/tree-select-drawer/type.d.ts +0 -10
  171. package/minilo/lib/components/tree-select-drawer/type.js +0 -22
  172. package/minilo/lib/components/virtual-list/index.d.ts +0 -59
  173. package/minilo/lib/components/virtual-list/index.js +0 -11
  174. package/minilo/lib/components/virtual-list/index.vue.d.ts +0 -39
  175. package/minilo/lib/components/virtual-list/index.vue.js +0 -9
  176. package/minilo/lib/components/virtual-list/index.vue2.js +0 -427
  177. package/minilo/lib/components/virtual-list/type.d.ts +0 -20
  178. package/minilo/lib/node_modules/.pnpm/@element-plus_icons-vue@2.3.1_vue@3.5.26_typescript@5.9.3_/node_modules/@element-plus/icons-vue/dist/index.js +0 -44
  179. package/minilo/lib/node_modules/.pnpm/@vueuse_core@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/core/index.js +0 -84
  180. package/minilo/lib/node_modules/.pnpm/@vueuse_shared@13.9.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/shared/index.js +0 -83
  181. package/minilo/lib/packages/utils/dist/func/common.js +0 -16
  182. package/minilo/lib/packages/utils/dist/request/index.js +0 -115
  183. package/minilo/lib/resolver/index.d.ts +0 -8
  184. package/minilo/lib/resolver/index.js +0 -28
  185. package/minilo/lib/utils/index.d.ts +0 -28
  186. package/minilo/lib/utils/index.js +0 -34
  187. package/minilo/theme-chalk/index.css +0 -1
  188. package/minilo/theme-chalk/ml-button.css +0 -1
  189. package/minilo/theme-chalk/ml-chart.css +0 -1
  190. package/minilo/theme-chalk/ml-detail.css +0 -1
  191. package/minilo/theme-chalk/ml-image-upload-pro.css +0 -1
  192. package/minilo/theme-chalk/ml-number-range-input.css +0 -1
  193. package/minilo/theme-chalk/ml-search-table.css +0 -1
  194. package/minilo/theme-chalk/ml-search.css +0 -1
  195. package/minilo/theme-chalk/ml-tree-select-dialog.css +0 -0
  196. package/minilo/theme-chalk/ml-tree-select-drawer.css +0 -0
  197. package/minilo/theme-chalk/ml-tree-select.css +0 -1
  198. package/minilo/theme-chalk/ml-virtual-list.css +0 -1
  199. package/minilo/theme-chalk/src/button.scss +0 -22
  200. package/minilo/theme-chalk/src/chart.scss +0 -11
  201. package/minilo/theme-chalk/src/default/variable.scss +0 -1
  202. package/minilo/theme-chalk/src/detail.scss +0 -9
  203. package/minilo/theme-chalk/src/image-upload-pro.scss +0 -70
  204. package/minilo/theme-chalk/src/index.scss +0 -14
  205. package/minilo/theme-chalk/src/mixins/mixin.scss +0 -273
  206. package/minilo/theme-chalk/src/number-range-input.scss +0 -9
  207. package/minilo/theme-chalk/src/search-table.scss +0 -47
  208. package/minilo/theme-chalk/src/search.scss +0 -20
  209. package/minilo/theme-chalk/src/tree-select-dialog.scss +0 -0
  210. package/minilo/theme-chalk/src/tree-select-drawer.scss +0 -0
  211. package/minilo/theme-chalk/src/tree-select.scss +0 -47
  212. package/minilo/theme-chalk/src/virtual-list.scss +0 -49
@@ -1,661 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var vue = require('vue');
6
- var elementPlus = require('element-plus');
7
- var type = require('./type.js');
8
- var index$1 = require('../../utils/index.js');
9
- var index = require('../../packages/utils/dist/request/index.js');
10
- var common = require('../../packages/utils/dist/func/common.js');
11
-
12
- const _hoisted_1 = { key: 0 };
13
- const _hoisted_2 = ["onDragstart", "onDrop"];
14
- var _sfc_main = /* @__PURE__ */ vue.defineComponent({
15
- ...{
16
- name: "MlImageUploadPro"
17
- },
18
- __name: "index",
19
- props: type.imageUploadProProps,
20
- emits: ["update:modelValue", "change", "upload"],
21
- setup(__props, { expose: __expose, emit: __emit }) {
22
- const ASPECT_RATIO_OPTIONS = [
23
- { label: "\u81EA\u7531\u6BD4\u4F8B", value: "free" },
24
- { label: "1:1", value: "1:1" },
25
- { label: "4:3", value: "4:3" },
26
- { label: "16:9", value: "16:9" }
27
- ];
28
- const props = __props;
29
- const uploadRef = vue.ref();
30
- const cropperRef = vue.ref();
31
- const fileList = vue.ref([]);
32
- const previewList = vue.ref([]);
33
- const cropDialogVisible = vue.ref(false);
34
- const cropImageUrl = vue.ref("");
35
- const cropTargetItem = vue.ref();
36
- const dragIndex = vue.ref(-1);
37
- const cropForm = vue.reactive({
38
- aspectRatio: "free"
39
- // 裁剪比例
40
- });
41
- const cropWidth = vue.ref(props.sizeLimit.width || 400);
42
- const cropHeight = vue.ref(props.sizeLimit.height || 400);
43
- const displayWidth = vue.ref(props.sizeLimit.width || 400);
44
- const displayHeight = vue.ref(props.sizeLimit.height || 400);
45
- const aspectRatio = vue.reactive({
46
- fixed: false,
47
- value: [1, 1]
48
- });
49
- const axios = vue.computed(() => {
50
- if (!props.uploadApi) return null;
51
- return index.initRequestInstance({
52
- baseURL: "",
53
- headers: props.uploadApi.headers || {}
54
- });
55
- });
56
- const acceptDesc = vue.computed(() => {
57
- return props.acceptType.split(",").map((type) => type.replace("image/", ".")).join("\u3001");
58
- });
59
- vue.watch(
60
- () => props.modelValue,
61
- (val) => {
62
- if (val.length) {
63
- previewList.value = val.map((item) => ({
64
- ...item,
65
- url: item.url || item.response?.url || ""
66
- }));
67
- fileList.value = val;
68
- }
69
- },
70
- { immediate: true, deep: true }
71
- );
72
- const uploadSingleFile = async (file) => {
73
- if (!props.uploadApi || !axios.value) {
74
- throw new Error("\u672A\u914D\u7F6E\u4E0A\u4F20 API");
75
- }
76
- const formData = new FormData();
77
- formData.append(props.uploadApi.fieldName || "file", file);
78
- if (props.uploadApi.data) {
79
- Object.keys(props.uploadApi.data).forEach((key) => {
80
- formData.append(key, props.uploadApi.data[key]);
81
- });
82
- }
83
- const method = props.uploadApi.method || "post";
84
- const response = await axios.value[method](props.uploadApi.url, formData, {
85
- headers: {
86
- "Content-Type": "multipart/form-data"
87
- }
88
- });
89
- const urlField = props.uploadApi.responseUrlField || "data.url";
90
- return common.getNestedValue(response, urlField);
91
- };
92
- const handleBeforeUpload = (file) => {
93
- const isAccept = props.acceptType.includes(file.type);
94
- if (!isAccept) {
95
- elementPlus.ElMessage.error(`\u4EC5\u652F\u6301\u4E0A\u4F20${acceptDesc.value}\u683C\u5F0F\u7684\u56FE\u7247`);
96
- return false;
97
- }
98
- const isOverSize = file.size / 1024 / 1024 > props.sizeLimit.size;
99
- if (isOverSize) {
100
- elementPlus.ElMessage.error(`\u5355\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7${props.sizeLimit.size}MB`);
101
- return false;
102
- }
103
- if (previewList.value.length >= props.maxCount) {
104
- elementPlus.ElMessage.error(`\u6700\u591A\u53EA\u80FD\u4E0A\u4F20${props.maxCount}\u5F20\u56FE\u7247`);
105
- return false;
106
- }
107
- if (props.sizeLimit.width || props.sizeLimit.height) {
108
- return new Promise((resolve) => {
109
- const img = new Image();
110
- img.onload = () => {
111
- const isOverWidth = props.sizeLimit.width && img.width < props.sizeLimit.width;
112
- const isOverHeight = props.sizeLimit.height && img.height < props.sizeLimit.height;
113
- if (isOverWidth || isOverHeight) {
114
- elementPlus.ElMessage.error(
115
- `\u56FE\u7247\u5C3A\u5BF8\u8981\u6C42\uFF1A\u5BBD\u2265${props.sizeLimit.width}px \u9AD8\u2265${props.sizeLimit.height}px\uFF0C\u5F53\u524D\u56FE\u7247\u5BBD${img.width}px \u9AD8${img.height}px`
116
- );
117
- resolve(false);
118
- } else {
119
- resolve(true);
120
- }
121
- };
122
- img.src = URL.createObjectURL(file);
123
- });
124
- }
125
- return true;
126
- };
127
- const handleFileChange = async (file, files) => {
128
- if (file.status === "ready") {
129
- const blobUrl = URL.createObjectURL(file.raw);
130
- const newItem = {
131
- ...file,
132
- rawFile: file.raw,
133
- blobUrl,
134
- // 保存 blob URL 用于裁剪
135
- url: blobUrl
136
- // 初始显示使用 blob URL
137
- };
138
- if (props.allowCrop) {
139
- elementPlus.ElMessageBox.confirm("\u662F\u5426\u9700\u8981\u88C1\u526A\u8BE5\u56FE\u7247\uFF1F", "\u63D0\u793A", {
140
- type: "info",
141
- confirmButtonText: "\u88C1\u526A",
142
- cancelButtonText: "\u76F4\u63A5\u4E0A\u4F20"
143
- }).then(() => {
144
- handleCropImage(newItem);
145
- }).catch(async () => {
146
- if (props.autoUpload && props.uploadApi) {
147
- try {
148
- const uploadedUrl = await uploadSingleFile(file.raw);
149
- newItem.serverUrl = uploadedUrl;
150
- newItem.url = uploadedUrl;
151
- elementPlus.ElMessage.success("\u56FE\u7247\u4E0A\u4F20\u6210\u529F");
152
- } catch (error) {
153
- elementPlus.ElMessage.error("\u56FE\u7247\u4E0A\u4F20\u5931\u8D25");
154
- console.error(error);
155
- return;
156
- }
157
- }
158
- previewList.value.push(newItem);
159
- syncModelValue();
160
- });
161
- } else {
162
- if (props.autoUpload && props.uploadApi) {
163
- try {
164
- const uploadedUrl = await uploadSingleFile(file.raw);
165
- newItem.serverUrl = uploadedUrl;
166
- newItem.url = uploadedUrl;
167
- elementPlus.ElMessage.success("\u56FE\u7247\u4E0A\u4F20\u6210\u529F");
168
- } catch (error) {
169
- elementPlus.ElMessage.error("\u56FE\u7247\u4E0A\u4F20\u5931\u8D25");
170
- console.error(error);
171
- return;
172
- }
173
- }
174
- previewList.value.push(newItem);
175
- syncModelValue();
176
- }
177
- }
178
- fileList.value = files;
179
- };
180
- const handleFileRemove = (file) => {
181
- previewList.value = previewList.value.filter((item) => item.uid !== file.uid);
182
- syncModelValue();
183
- };
184
- const handleCropImage = (item) => {
185
- console.log(item);
186
- if (!props.allowCrop) return;
187
- cropTargetItem.value = item;
188
- cropImageUrl.value = item.blobUrl || item.url || "";
189
- cropDialogVisible.value = true;
190
- vue.nextTick(() => {
191
- cropForm.aspectRatio = "free";
192
- cropWidth.value = props.sizeLimit.width || 400;
193
- cropHeight.value = props.sizeLimit.height || 400;
194
- displayWidth.value = props.sizeLimit.width || 400;
195
- displayHeight.value = props.sizeLimit.height || 400;
196
- aspectRatio.fixed = false;
197
- });
198
- };
199
- const handleAspectRatioChange = (val) => {
200
- if (val === "free") {
201
- aspectRatio.fixed = false;
202
- } else {
203
- aspectRatio.fixed = true;
204
- const parts = val.split(":").map(Number);
205
- const w = parts[0] ?? 1;
206
- const h = parts[1] ?? 1;
207
- aspectRatio.value = [w, h];
208
- }
209
- };
210
- const handleCropRealTime = (data) => {
211
- if (data && data.w && data.h) {
212
- displayWidth.value = Math.round(data.w);
213
- displayHeight.value = Math.round(data.h);
214
- }
215
- };
216
- const handleSizeChange = () => {
217
- cropWidth.value = displayWidth.value;
218
- cropHeight.value = displayHeight.value;
219
- };
220
- const handleCropConfirm = () => {
221
- if (!cropperRef.value || !cropTargetItem.value) return;
222
- cropperRef.value.getCropBlob(async (blob) => {
223
- const croppedFile = new File([blob], cropTargetItem.value.name || "cropped.jpg", {
224
- type: cropTargetItem.value.rawFile?.type || "image/jpeg"
225
- });
226
- const newBlobUrl = URL.createObjectURL(croppedFile);
227
- let displayUrl = newBlobUrl;
228
- if (props.autoUpload && props.uploadApi) {
229
- try {
230
- const serverUrl = await uploadSingleFile(croppedFile);
231
- displayUrl = serverUrl;
232
- elementPlus.ElMessage.success("\u56FE\u7247\u4E0A\u4F20\u6210\u529F");
233
- const index = previewList.value.findIndex((item) => item.uid === cropTargetItem.value.uid);
234
- const targetItem = previewList.value[index];
235
- if (index > -1 && targetItem) {
236
- targetItem.url = displayUrl;
237
- targetItem.blobUrl = newBlobUrl;
238
- targetItem.serverUrl = serverUrl;
239
- targetItem.rawFile = croppedFile;
240
- } else {
241
- previewList.value.push({
242
- ...cropTargetItem.value,
243
- name: cropTargetItem.value.name ?? "cropped.jpg",
244
- url: displayUrl,
245
- blobUrl: newBlobUrl,
246
- serverUrl,
247
- rawFile: croppedFile
248
- });
249
- }
250
- } catch (error) {
251
- elementPlus.ElMessage.error("\u56FE\u7247\u4E0A\u4F20\u5931\u8D25");
252
- console.error(error);
253
- return;
254
- }
255
- } else {
256
- const index = previewList.value.findIndex((item) => item.uid === cropTargetItem.value.uid);
257
- const targetItem = previewList.value[index];
258
- if (index > -1 && targetItem) {
259
- targetItem.url = newBlobUrl;
260
- targetItem.blobUrl = newBlobUrl;
261
- targetItem.rawFile = croppedFile;
262
- } else {
263
- previewList.value.push({
264
- ...cropTargetItem.value,
265
- name: cropTargetItem.value.name ?? "cropped.jpg",
266
- url: newBlobUrl,
267
- blobUrl: newBlobUrl,
268
- rawFile: croppedFile
269
- });
270
- }
271
- }
272
- syncModelValue();
273
- cropDialogVisible.value = false;
274
- elementPlus.ElMessage.success("\u56FE\u7247\u88C1\u526A\u6210\u529F");
275
- });
276
- };
277
- const resetCropper = () => {
278
- cropTargetItem.value = void 0;
279
- cropImageUrl.value = "";
280
- };
281
- const handleRemovePreview = (item) => {
282
- elementPlus.ElMessageBox.confirm("\u786E\u5B9A\u8981\u5220\u9664\u8BE5\u56FE\u7247\u5417\uFF1F", "\u63D0\u793A", {
283
- type: "warning",
284
- confirmButtonText: "\u786E\u5B9A",
285
- cancelButtonText: "\u53D6\u6D88"
286
- }).then(() => {
287
- previewList.value = previewList.value.filter((i) => i.uid !== item.uid);
288
- fileList.value = fileList.value.filter((i) => i.uid !== item.uid);
289
- syncModelValue();
290
- elementPlus.ElMessage.success("\u56FE\u7247\u5220\u9664\u6210\u529F");
291
- });
292
- };
293
- const handleDragStart = (index) => {
294
- if (!props.allowSort) return;
295
- dragIndex.value = index;
296
- };
297
- const handleDragOver = (e) => {
298
- e.preventDefault();
299
- };
300
- const handleDrop = (index) => {
301
- if (!props.allowSort || dragIndex.value === -1 || dragIndex.value === index) return;
302
- const temp = previewList.value[dragIndex.value];
303
- if (!temp) return;
304
- previewList.value.splice(dragIndex.value, 1);
305
- previewList.value.splice(index, 0, temp);
306
- dragIndex.value = -1;
307
- syncModelValue();
308
- };
309
- const syncModelValue = () => {
310
- emit("update:modelValue", [...previewList.value]);
311
- emit("change", [...previewList.value]);
312
- };
313
- const emit = __emit;
314
- const uploadToServer = async (uploadApi) => {
315
- const uploadPromises = previewList.value.map(async (item) => {
316
- if (item.rawFile) {
317
- const url = await uploadApi(item.rawFile);
318
- item.url = url;
319
- return item;
320
- }
321
- return item;
322
- });
323
- const result = await Promise.all(uploadPromises);
324
- previewList.value = result;
325
- syncModelValue();
326
- return result;
327
- };
328
- __expose({
329
- uploadToServer,
330
- // 暴露上传到服务器的方法
331
- clear: () => {
332
- previewList.value = [];
333
- fileList.value = [];
334
- syncModelValue();
335
- }
336
- });
337
- return (_ctx, _cache) => {
338
- const _component_vue_cropper = vue.resolveComponent("vue-cropper");
339
- const _component_el_option = vue.resolveComponent("el-option");
340
- return vue.openBlock(), vue.createElementBlock(
341
- "div",
342
- {
343
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro"))
344
- },
345
- [
346
- vue.createCommentVNode(" \u6838\u5FC3\u4E0A\u4F20\u533A\u57DF "),
347
- vue.createVNode(vue.unref(elementPlus.ElUpload), {
348
- ref_key: "uploadRef",
349
- ref: uploadRef,
350
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro", "upload-container")),
351
- action: "",
352
- "auto-upload": false,
353
- "file-list": fileList.value,
354
- "before-upload": handleBeforeUpload,
355
- "on-change": handleFileChange,
356
- "on-remove": handleFileRemove,
357
- accept: _ctx.acceptType,
358
- "show-file-list": false
359
- }, {
360
- tip: vue.withCtx(() => [
361
- vue.createElementVNode(
362
- "div",
363
- {
364
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro", "upload-text"))
365
- },
366
- [
367
- vue.createTextVNode(
368
- " \u652F\u6301\u683C\u5F0F\uFF1A" + vue.toDisplayString(acceptDesc.value) + " | \u5355\u6587\u4EF6\u5927\u5C0F\u2264" + vue.toDisplayString(props.sizeLimit.size) + "MB ",
369
- 1
370
- /* TEXT */
371
- ),
372
- props.sizeLimit.width || props.sizeLimit.height ? (vue.openBlock(), vue.createElementBlock(
373
- "span",
374
- _hoisted_1,
375
- " | \u5C3A\u5BF8\u8981\u6C42\uFF1A\u5BBD\u2265" + vue.toDisplayString(props.sizeLimit.width) + "px \u9AD8\u2265" + vue.toDisplayString(props.sizeLimit.height) + "px ",
376
- 1
377
- /* TEXT */
378
- )) : vue.createCommentVNode("v-if", true)
379
- ],
380
- 2
381
- /* CLASS */
382
- )
383
- ]),
384
- default: vue.withCtx(() => [
385
- vue.createVNode(vue.unref(elementPlus.ElButton), {
386
- disabled: fileList.value.length === props.maxCount,
387
- type: "primary"
388
- }, {
389
- default: vue.withCtx(() => [..._cache[6] || (_cache[6] = [
390
- vue.createTextVNode(
391
- "\u9009\u62E9\u56FE\u7247",
392
- -1
393
- /* CACHED */
394
- )
395
- ])]),
396
- _: 1
397
- /* STABLE */
398
- }, 8, ["disabled"])
399
- ]),
400
- _: 1
401
- /* STABLE */
402
- }, 8, ["class", "file-list", "accept"]),
403
- vue.createCommentVNode(" \u5DF2\u4E0A\u4F20\u56FE\u7247\u9884\u89C8\u5217\u8868 "),
404
- previewList.value.length ? (vue.openBlock(), vue.createElementBlock(
405
- "div",
406
- {
407
- key: 0,
408
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro", "preview-list"))
409
- },
410
- [
411
- (vue.openBlock(true), vue.createElementBlock(
412
- vue.Fragment,
413
- null,
414
- vue.renderList(previewList.value, (item, index) => {
415
- return vue.openBlock(), vue.createElementBlock("div", {
416
- class: vue.normalizeClass([vue.unref(index$1.bem)("image-upload-pro", "preview-item"), { active: item.isCover }]),
417
- key: item.uid,
418
- draggable: "true",
419
- onDragstart: ($event) => handleDragStart(index),
420
- onDragover: _cache[0] || (_cache[0] = ($event) => handleDragOver($event)),
421
- onDrop: ($event) => handleDrop(index)
422
- }, [
423
- vue.createCommentVNode(" \u56FE\u7247\u9884\u89C8 "),
424
- vue.createElementVNode(
425
- "div",
426
- {
427
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro", "preview-img"))
428
- },
429
- [
430
- vue.createVNode(vue.unref(elementPlus.ElImage), {
431
- src: item.url,
432
- "preview-src-list": previewList.value.filter((i) => i.url).map((i) => i.url),
433
- "preview-current-index": index,
434
- fit: "cover"
435
- }, null, 8, ["src", "preview-src-list", "preview-current-index"])
436
- ],
437
- 2
438
- /* CLASS */
439
- ),
440
- vue.createCommentVNode(" \u64CD\u4F5C\u6309\u94AE\u7EC4 "),
441
- vue.createElementVNode(
442
- "div",
443
- {
444
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro", "preview-actions"))
445
- },
446
- [
447
- vue.createVNode(vue.unref(elementPlus.ElButton), {
448
- type: "primary",
449
- text: "",
450
- size: "small",
451
- onClick: ($event) => handleCropImage(item)
452
- }, {
453
- default: vue.withCtx(() => [..._cache[7] || (_cache[7] = [
454
- vue.createTextVNode(
455
- "\u88C1\u526A",
456
- -1
457
- /* CACHED */
458
- )
459
- ])]),
460
- _: 1
461
- /* STABLE */
462
- }, 8, ["onClick"]),
463
- vue.createVNode(vue.unref(elementPlus.ElButton), {
464
- text: "",
465
- size: "small",
466
- type: "danger",
467
- onClick: ($event) => handleRemovePreview(item)
468
- }, {
469
- default: vue.withCtx(() => [..._cache[8] || (_cache[8] = [
470
- vue.createTextVNode(
471
- "\u5220\u9664",
472
- -1
473
- /* CACHED */
474
- )
475
- ])]),
476
- _: 1
477
- /* STABLE */
478
- }, 8, ["onClick"])
479
- ],
480
- 2
481
- /* CLASS */
482
- )
483
- ], 42, _hoisted_2);
484
- }),
485
- 128
486
- /* KEYED_FRAGMENT */
487
- ))
488
- ],
489
- 2
490
- /* CLASS */
491
- )) : vue.createCommentVNode("v-if", true),
492
- vue.createCommentVNode(" \u88C1\u526A\u5F39\u7A97 "),
493
- vue.createVNode(vue.unref(elementPlus.ElDialog), {
494
- modelValue: cropDialogVisible.value,
495
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => cropDialogVisible.value = $event),
496
- title: "\u56FE\u7247\u88C1\u526A",
497
- width: "900px",
498
- "close-on-click-modal": false,
499
- "destroy-on-close": "",
500
- onClose: resetCropper
501
- }, {
502
- footer: vue.withCtx(() => [
503
- vue.createVNode(vue.unref(elementPlus.ElButton), {
504
- onClick: _cache[4] || (_cache[4] = ($event) => cropDialogVisible.value = false)
505
- }, {
506
- default: vue.withCtx(() => [..._cache[10] || (_cache[10] = [
507
- vue.createTextVNode(
508
- "\u53D6\u6D88",
509
- -1
510
- /* CACHED */
511
- )
512
- ])]),
513
- _: 1
514
- /* STABLE */
515
- }),
516
- vue.createVNode(vue.unref(elementPlus.ElButton), {
517
- type: "primary",
518
- onClick: handleCropConfirm
519
- }, {
520
- default: vue.withCtx(() => [..._cache[11] || (_cache[11] = [
521
- vue.createTextVNode(
522
- "\u786E\u8BA4\u88C1\u526A",
523
- -1
524
- /* CACHED */
525
- )
526
- ])]),
527
- _: 1
528
- /* STABLE */
529
- })
530
- ]),
531
- default: vue.withCtx(() => [
532
- vue.createElementVNode(
533
- "div",
534
- {
535
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro", "cropper-container"))
536
- },
537
- [
538
- vue.createCommentVNode(" \u88C1\u526A\u533A\u57DF "),
539
- vue.createVNode(_component_vue_cropper, {
540
- ref_key: "cropperRef",
541
- ref: cropperRef,
542
- img: cropImageUrl.value,
543
- info: true,
544
- "auto-crop": true,
545
- "auto-crop-width": cropWidth.value,
546
- "auto-crop-height": cropHeight.value,
547
- fixed: aspectRatio.fixed,
548
- "fixed-number": aspectRatio.value,
549
- "can-move": true,
550
- "can-scale": true,
551
- "can-rotate": false,
552
- onRealTime: handleCropRealTime
553
- }, null, 8, ["img", "auto-crop-width", "auto-crop-height", "fixed", "fixed-number"])
554
- ],
555
- 2
556
- /* CLASS */
557
- ),
558
- vue.createElementVNode(
559
- "div",
560
- {
561
- class: vue.normalizeClass(vue.unref(index$1.bem)("image-upload-pro", "cropper-config"))
562
- },
563
- [
564
- vue.createVNode(vue.unref(elementPlus.ElForm), { model: cropForm }, {
565
- default: vue.withCtx(() => [
566
- vue.createVNode(vue.unref(elementPlus.ElRow), { gutter: 10 }, {
567
- default: vue.withCtx(() => [
568
- vue.createVNode(vue.unref(elementPlus.ElCol), { span: 8 }, {
569
- default: vue.withCtx(() => [
570
- vue.createVNode(vue.unref(elementPlus.ElFormItem), { label: "\u88C1\u526A\u6BD4\u4F8B" }, {
571
- default: vue.withCtx(() => [
572
- vue.createVNode(vue.unref(elementPlus.ElSelect), {
573
- style: { "width": "100%" },
574
- modelValue: cropForm.aspectRatio,
575
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => cropForm.aspectRatio = $event),
576
- onChange: handleAspectRatioChange
577
- }, {
578
- default: vue.withCtx(() => [
579
- (vue.openBlock(), vue.createElementBlock(
580
- vue.Fragment,
581
- null,
582
- vue.renderList(ASPECT_RATIO_OPTIONS, (option) => {
583
- return vue.createVNode(_component_el_option, {
584
- key: option.value,
585
- label: option.label,
586
- value: option.value
587
- }, null, 8, ["label", "value"]);
588
- }),
589
- 64
590
- /* STABLE_FRAGMENT */
591
- ))
592
- ]),
593
- _: 1
594
- /* STABLE */
595
- }, 8, ["modelValue"])
596
- ]),
597
- _: 1
598
- /* STABLE */
599
- })
600
- ]),
601
- _: 1
602
- /* STABLE */
603
- }),
604
- vue.createVNode(vue.unref(elementPlus.ElCol), { span: 16 }, {
605
- default: vue.withCtx(() => [
606
- vue.createVNode(vue.unref(elementPlus.ElFormItem), { label: "\u88C1\u526A\u5C3A\u5BF8" }, {
607
- default: vue.withCtx(() => [
608
- vue.createVNode(vue.unref(elementPlus.ElInputNumber), {
609
- modelValue: displayWidth.value,
610
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => displayWidth.value = $event),
611
- placeholder: "\u5BBD\u5EA6",
612
- min: props.sizeLimit.width || 100,
613
- onChange: handleSizeChange
614
- }, null, 8, ["modelValue", "min"]),
615
- _cache[9] || (_cache[9] = vue.createElementVNode(
616
- "span",
617
- { style: { "margin": "0 8px" } },
618
- "*",
619
- -1
620
- /* CACHED */
621
- )),
622
- vue.createVNode(vue.unref(elementPlus.ElInputNumber), {
623
- modelValue: displayHeight.value,
624
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => displayHeight.value = $event),
625
- placeholder: "\u9AD8\u5EA6",
626
- min: props.sizeLimit.height || 100,
627
- onChange: handleSizeChange
628
- }, null, 8, ["modelValue", "min"])
629
- ]),
630
- _: 1
631
- /* STABLE */
632
- })
633
- ]),
634
- _: 1
635
- /* STABLE */
636
- })
637
- ]),
638
- _: 1
639
- /* STABLE */
640
- })
641
- ]),
642
- _: 1
643
- /* STABLE */
644
- }, 8, ["model"])
645
- ],
646
- 2
647
- /* CLASS */
648
- )
649
- ]),
650
- _: 1
651
- /* STABLE */
652
- }, 8, ["modelValue"])
653
- ],
654
- 2
655
- /* CLASS */
656
- );
657
- };
658
- }
659
- });
660
-
661
- exports.default = _sfc_main;