upload-sdk 1.0.0
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/README.md +44 -0
- package/client/index.cjs.js +335 -0
- package/client/index.cjs.js.map +1 -0
- package/client/index.d.ts +1 -0
- package/client/index.esm.js +333 -0
- package/client/index.esm.js.map +1 -0
- package/client/index.umd.js +338 -0
- package/client/index.umd.js.map +1 -0
- package/core/index.cjs.js +285 -0
- package/core/index.cjs.js.map +1 -0
- package/core/index.d.ts +32 -0
- package/core/index.esm.js +283 -0
- package/core/index.esm.js.map +1 -0
- package/index.cjs.js +9 -0
- package/index.d.ts +4 -0
- package/index.js +16 -0
- package/package.json +41 -0
- package/utils/index.cjs.js +583 -0
- package/utils/index.cjs.js.map +1 -0
- package/utils/index.d.ts +108 -0
- package/utils/index.esm.js +572 -0
- package/utils/index.esm.js.map +1 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { defineComponent, openBlock, createElementBlock, createElementVNode, reactive, ref, computed, mergeProps, normalizeClass, createTextVNode, createCommentVNode, renderSlot, Fragment, renderList, toDisplayString, createVNode, unref, normalizeStyle } from 'vue';
|
|
2
|
+
import { useUpload } from '@upload-sdk/core';
|
|
3
|
+
|
|
4
|
+
// 文件上传状态
|
|
5
|
+
let FileUploadStatus = /*#__PURE__*/function (FileUploadStatus) {
|
|
6
|
+
FileUploadStatus["PENDING"] = "pending";
|
|
7
|
+
FileUploadStatus["UPLOADING"] = "uploading";
|
|
8
|
+
FileUploadStatus["SUCCESS"] = "success";
|
|
9
|
+
FileUploadStatus["FAILED"] = "failed";
|
|
10
|
+
FileUploadStatus["CANCELED"] = "canceled";
|
|
11
|
+
FileUploadStatus["ABORTED"] = "aborted";
|
|
12
|
+
FileUploadStatus["PAUSED"] = "paused";
|
|
13
|
+
FileUploadStatus["RETRYING"] = "retrying";
|
|
14
|
+
FileUploadStatus["RETRY_FAILED"] = "retry_failed";
|
|
15
|
+
FileUploadStatus["RETRY_SUCCESS"] = "retry_success";
|
|
16
|
+
FileUploadStatus["RETRY_CANCELED"] = "retry_canceled";
|
|
17
|
+
FileUploadStatus["RETRY_ABORTED"] = "retry_aborted";
|
|
18
|
+
FileUploadStatus["RETRY_PAUSED"] = "retry_paused";
|
|
19
|
+
FileUploadStatus["RETRY_PENDING"] = "retry_pending";
|
|
20
|
+
FileUploadStatus["RETRY_UPLOADING"] = "retry_uploading";
|
|
21
|
+
FileUploadStatus["RETRY_RETRYING"] = "retry_retrying";
|
|
22
|
+
return FileUploadStatus;
|
|
23
|
+
}({});
|
|
24
|
+
|
|
25
|
+
const _hoisted_1$2 = {
|
|
26
|
+
class: "icon",
|
|
27
|
+
viewBox: "0 0 1024 1024",
|
|
28
|
+
version: "1.1",
|
|
29
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
30
|
+
width: "200",
|
|
31
|
+
height: "200"
|
|
32
|
+
};
|
|
33
|
+
var script$2 = /*@__PURE__*/defineComponent({
|
|
34
|
+
...{
|
|
35
|
+
name: 'CloseSvg'
|
|
36
|
+
},
|
|
37
|
+
__name: 'CloseSvg',
|
|
38
|
+
setup(__props) {
|
|
39
|
+
return (_ctx, _cache) => {
|
|
40
|
+
return openBlock(), createElementBlock("svg", _hoisted_1$2, [...(_cache[0] || (_cache[0] = [createElementVNode("path", {
|
|
41
|
+
d: "M513.1 139.1c-206.7 0-374.2 167.5-374.2 374s167.6 374 374.2 374c206.7 0 374.2-167.5 374.2-374s-167.5-374-374.2-374z m0 689c-173.8 0-315.2-141.3-315.2-315s141.4-315 315.2-315c173.8 0 315.2 141.3 315.2 315s-141.4 315-315.2 315z",
|
|
42
|
+
fill: "#666666"
|
|
43
|
+
}, null, -1 /* CACHED */), createElementVNode("path", {
|
|
44
|
+
d: "M666 375.8l-13.9-13.9c-3.8-3.8-8.9-5.8-13.9-5.8s-10.1 1.9-13.9 5.8L512.8 473.3 401.5 361.9c-3.9-3.8-8.9-5.8-13.9-5.8s-10.1 1.9-13.9 5.8l-13.9 13.9c-7.7 7.7-7.7 20.2 0 27.9l111.4 111.4-111.5 111.4c-7.7 7.7-7.7 20.2 0 27.9l13.9 13.9c3.8 3.8 8.9 5.8 13.9 5.8s10.1-1.9 13.9-5.8l111.4-111.4 111.4 111.4c3.9 3.8 8.9 5.8 13.9 5.8s10.1-1.9 13.9-5.8l13.9-13.9c7.7-7.7 7.7-20.2 0-27.9L554.6 515.1 666 403.7c7.7-7.7 7.7-20.2 0-27.9z",
|
|
45
|
+
fill: "#666666"
|
|
46
|
+
}, null, -1 /* CACHED */)]))]);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
function styleInject(css, ref) {
|
|
52
|
+
if ( ref === void 0 ) ref = {};
|
|
53
|
+
var insertAt = ref.insertAt;
|
|
54
|
+
|
|
55
|
+
if (!css || typeof document === 'undefined') { return; }
|
|
56
|
+
|
|
57
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
58
|
+
var style = document.createElement('style');
|
|
59
|
+
style.type = 'text/css';
|
|
60
|
+
|
|
61
|
+
if (insertAt === 'top') {
|
|
62
|
+
if (head.firstChild) {
|
|
63
|
+
head.insertBefore(style, head.firstChild);
|
|
64
|
+
} else {
|
|
65
|
+
head.appendChild(style);
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
head.appendChild(style);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (style.styleSheet) {
|
|
72
|
+
style.styleSheet.cssText = css;
|
|
73
|
+
} else {
|
|
74
|
+
style.appendChild(document.createTextNode(css));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
var css_248z$2 = ".icon[data-v-401a1947] {\n width: 16px;\n height: 16px;\n}";
|
|
79
|
+
styleInject(css_248z$2);
|
|
80
|
+
|
|
81
|
+
script$2.__scopeId = "data-v-401a1947";
|
|
82
|
+
script$2.__file = "src/components/svg/CloseSvg.vue";
|
|
83
|
+
|
|
84
|
+
const _hoisted_1$1 = {
|
|
85
|
+
class: "icon",
|
|
86
|
+
viewBox: "0 0 1024 1024",
|
|
87
|
+
version: "1.1",
|
|
88
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
89
|
+
width: "200",
|
|
90
|
+
height: "200"
|
|
91
|
+
};
|
|
92
|
+
var script$1 = /*@__PURE__*/defineComponent({
|
|
93
|
+
...{
|
|
94
|
+
name: 'EyeSvg'
|
|
95
|
+
},
|
|
96
|
+
__name: 'EyeSvg',
|
|
97
|
+
setup(__props) {
|
|
98
|
+
return (_ctx, _cache) => {
|
|
99
|
+
return openBlock(), createElementBlock("svg", _hoisted_1$1, [...(_cache[0] || (_cache[0] = [createElementVNode("path", {
|
|
100
|
+
d: "M512 192c156.448 0 296.021333 98.730667 418.410667 291.605333a52.938667 52.938667 0 0 1 0 56.789334C808.021333 733.269333 668.448 832 512 832c-156.448 0-296.021333-98.730667-418.410667-291.605333a52.938667 52.938667 0 0 1 0-56.789334C215.978667 290.730667 355.552 192 512 192z m0 128c-106.037333 0-192 85.962667-192 192s85.962667 192 192 192 192-85.962667 192-192-85.962667-192-192-192z m0 320c70.688 0 128-57.312 128-128s-57.312-128-128-128-128 57.312-128 128 57.312 128 128 128z",
|
|
101
|
+
fill: "#000000"
|
|
102
|
+
}, null, -1 /* CACHED */)]))]);
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
var css_248z$1 = ".icon[data-v-b79f30a4] {\n width: 16px;\n height: 16px;\n}";
|
|
108
|
+
styleInject(css_248z$1);
|
|
109
|
+
|
|
110
|
+
script$1.__scopeId = "data-v-b79f30a4";
|
|
111
|
+
script$1.__file = "src/components/svg/EyeSvg.vue";
|
|
112
|
+
|
|
113
|
+
const _hoisted_1 = {
|
|
114
|
+
class: "upload-wrapper"
|
|
115
|
+
};
|
|
116
|
+
const _hoisted_2 = {
|
|
117
|
+
class: "pr-upload__file-list-panel"
|
|
118
|
+
};
|
|
119
|
+
const _hoisted_3 = {
|
|
120
|
+
class: "pr-upload__file-list"
|
|
121
|
+
};
|
|
122
|
+
const _hoisted_4 = {
|
|
123
|
+
class: "pr-upload__file-list-item-header"
|
|
124
|
+
};
|
|
125
|
+
const _hoisted_5 = {
|
|
126
|
+
class: "pr-upload__file-list-item-header__name"
|
|
127
|
+
};
|
|
128
|
+
const _hoisted_6 = {
|
|
129
|
+
class: "pr-upload__file-list-item-header__op"
|
|
130
|
+
};
|
|
131
|
+
const _hoisted_7 = {
|
|
132
|
+
key: 0,
|
|
133
|
+
class: "pr-upload__file-list-item-progress"
|
|
134
|
+
};
|
|
135
|
+
var script = /*@__PURE__*/defineComponent({
|
|
136
|
+
...{
|
|
137
|
+
name: 'PrUpload'
|
|
138
|
+
},
|
|
139
|
+
__name: 'upload',
|
|
140
|
+
setup(__props, {
|
|
141
|
+
expose: __expose
|
|
142
|
+
}) {
|
|
143
|
+
const fileList = reactive([]);
|
|
144
|
+
const fileInputBtn = ref(null);
|
|
145
|
+
const uploader = useUpload({
|
|
146
|
+
url: 'http://localhost:3001/api/upload/upload'
|
|
147
|
+
});
|
|
148
|
+
const isDragging = ref(false);
|
|
149
|
+
const selectFile = () => {
|
|
150
|
+
if (!fileInputBtn.value) return;
|
|
151
|
+
// 触发点击事件
|
|
152
|
+
fileInputBtn.value.click();
|
|
153
|
+
};
|
|
154
|
+
const inputChange = e => {
|
|
155
|
+
const _target = e.target;
|
|
156
|
+
if (!_target.files) {
|
|
157
|
+
console.warn('Please select a file!');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const files = _target.files;
|
|
161
|
+
console.log('files', files);
|
|
162
|
+
const needUploadFiles = [];
|
|
163
|
+
if (Array.isArray(files)) {
|
|
164
|
+
needUploadFiles.push(...files);
|
|
165
|
+
} else {
|
|
166
|
+
needUploadFiles.push(files[0]);
|
|
167
|
+
}
|
|
168
|
+
for (let needUploadFile of needUploadFiles) {
|
|
169
|
+
uploadFile(needUploadFile);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
// 文件上传将其放到上传列表中
|
|
174
|
+
const uploadFile = file => {
|
|
175
|
+
const createOneFile = file => {
|
|
176
|
+
// 将 file 对象进行二次封装
|
|
177
|
+
const oneFile = reactive({
|
|
178
|
+
name: file.name,
|
|
179
|
+
size: file.size,
|
|
180
|
+
type: file.type,
|
|
181
|
+
progress: 0,
|
|
182
|
+
status: FileUploadStatus.PENDING,
|
|
183
|
+
file: file
|
|
184
|
+
});
|
|
185
|
+
const progressInterval = setInterval(() => {
|
|
186
|
+
oneFile.progress++;
|
|
187
|
+
oneFile.status = FileUploadStatus.UPLOADING;
|
|
188
|
+
if (oneFile.progress >= 100) {
|
|
189
|
+
oneFile.status = FileUploadStatus.SUCCESS;
|
|
190
|
+
clearInterval(progressInterval);
|
|
191
|
+
}
|
|
192
|
+
}, 100);
|
|
193
|
+
return oneFile;
|
|
194
|
+
};
|
|
195
|
+
const oneFile = createOneFile(file);
|
|
196
|
+
fileList.push(oneFile);
|
|
197
|
+
};
|
|
198
|
+
const inputProps = computed(() => {
|
|
199
|
+
return {
|
|
200
|
+
multiple: true,
|
|
201
|
+
accept: 'image/*',
|
|
202
|
+
type: 'file',
|
|
203
|
+
change: inputChange
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
const interiorClass = computed(() => {
|
|
207
|
+
return {
|
|
208
|
+
'pr-upload__interior': true,
|
|
209
|
+
'focus-within': false,
|
|
210
|
+
'pr-upload-wrapper__dragging': isDragging.value,
|
|
211
|
+
'pr-upload-wrapper__disabled': false
|
|
212
|
+
};
|
|
213
|
+
});
|
|
214
|
+
const prUploadInterior = ref(null);
|
|
215
|
+
|
|
216
|
+
// 鼠标移入事件
|
|
217
|
+
const mouseEnter = () => {
|
|
218
|
+
if (!prUploadInterior.value) return;
|
|
219
|
+
prUploadInterior.value.classList.add('focus-within');
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
// 鼠标移出事件
|
|
223
|
+
const mouseLeave = () => {
|
|
224
|
+
if (!prUploadInterior.value) return;
|
|
225
|
+
prUploadInterior.value.classList.remove('focus-within');
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
// 拖拽事件处理
|
|
229
|
+
const handleDragEnter = e => {
|
|
230
|
+
e.preventDefault();
|
|
231
|
+
e.stopPropagation();
|
|
232
|
+
isDragging.value = true;
|
|
233
|
+
};
|
|
234
|
+
const handleDragOver = e => {
|
|
235
|
+
e.preventDefault();
|
|
236
|
+
e.stopPropagation();
|
|
237
|
+
// 添加复制效果
|
|
238
|
+
if (e.dataTransfer) {
|
|
239
|
+
e.dataTransfer.dropEffect = 'copy';
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const handleDragLeave = e => {
|
|
243
|
+
e.preventDefault();
|
|
244
|
+
e.stopPropagation();
|
|
245
|
+
|
|
246
|
+
// 检查是否真正离开了上传区域
|
|
247
|
+
const relatedTarget = e.relatedTarget;
|
|
248
|
+
const uploadArea = prUploadInterior.value;
|
|
249
|
+
if (!uploadArea) return;
|
|
250
|
+
|
|
251
|
+
// 只有当鼠标离开上传区域且没有进入其子元素时,才取消拖拽状态
|
|
252
|
+
if (!uploadArea.contains(relatedTarget)) {
|
|
253
|
+
isDragging.value = false;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
const handleDrop = e => {
|
|
257
|
+
e.preventDefault();
|
|
258
|
+
e.stopPropagation();
|
|
259
|
+
isDragging.value = false;
|
|
260
|
+
if (!e.dataTransfer || !e.dataTransfer.files) return;
|
|
261
|
+
const files = e.dataTransfer.files;
|
|
262
|
+
handleFiles(files);
|
|
263
|
+
};
|
|
264
|
+
const handleFiles = files => {
|
|
265
|
+
console.log('files', files);
|
|
266
|
+
const needUploadFiles = [];
|
|
267
|
+
if (Array.isArray(files)) {
|
|
268
|
+
needUploadFiles.push(...files);
|
|
269
|
+
} else {
|
|
270
|
+
needUploadFiles.push(files);
|
|
271
|
+
}
|
|
272
|
+
for (let needUploadFile of needUploadFiles) {
|
|
273
|
+
const fileSize = needUploadFile.size;
|
|
274
|
+
let up;
|
|
275
|
+
if (fileSize > 5 * 1024 * 1024) {
|
|
276
|
+
up = uploader.uploadLargeFile(needUploadFile);
|
|
277
|
+
} else {
|
|
278
|
+
up = uploader.uploadFile(needUploadFile);
|
|
279
|
+
}
|
|
280
|
+
up.start();
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
__expose({});
|
|
284
|
+
return (_ctx, _cache) => {
|
|
285
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [createElementVNode("input", mergeProps({
|
|
286
|
+
ref_key: "fileInputBtn",
|
|
287
|
+
ref: fileInputBtn,
|
|
288
|
+
class: "input-box-disable"
|
|
289
|
+
}, inputProps.value, {
|
|
290
|
+
onChange: inputChange
|
|
291
|
+
}), null, 16 /* FULL_PROPS */), createElementVNode("div", {
|
|
292
|
+
ref_key: "prUploadInterior",
|
|
293
|
+
ref: prUploadInterior,
|
|
294
|
+
class: normalizeClass(interiorClass.value),
|
|
295
|
+
onClick: selectFile,
|
|
296
|
+
onMouseenter: mouseEnter,
|
|
297
|
+
onMouseleave: mouseLeave,
|
|
298
|
+
onDragenter: handleDragEnter,
|
|
299
|
+
onDragover: handleDragOver,
|
|
300
|
+
onDragleave: handleDragLeave,
|
|
301
|
+
onDrop: handleDrop
|
|
302
|
+
}, [...(_cache[0] || (_cache[0] = [createElementVNode("svg", {
|
|
303
|
+
class: "pr-upload__interior-icon",
|
|
304
|
+
viewBox: "0 0 1024 1024",
|
|
305
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
306
|
+
}, [createElementVNode("path", {
|
|
307
|
+
fill: "currentColor",
|
|
308
|
+
d: "M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.81 239.81 0 0 1 512 192a239.87 239.87 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6z"
|
|
309
|
+
})], -1 /* CACHED */), createElementVNode("div", {
|
|
310
|
+
class: "pr-upload__interior-tip"
|
|
311
|
+
}, [createTextVNode("拖拽文件到此区域或"), createElementVNode("em", null, "点击上传")], -1 /* CACHED */)]))], 34 /* CLASS, NEED_HYDRATION */), createCommentVNode("提示\t\t"), createCommentVNode(" <slot name=\"tip\">\r\n <div class=\"pr-upload__tip\">只能上传jpg/png文件,且不超过500kb</div>\r\n </slot>"), renderSlot(_ctx.$slots, "fileList", {}, () => [createElementVNode("div", _hoisted_2, [createElementVNode("div", _hoisted_3, [(openBlock(true), createElementBlock(Fragment, null, renderList(fileList, (file, index) => {
|
|
312
|
+
return openBlock(), createElementBlock("div", {
|
|
313
|
+
class: "pr-upload__file-list-item",
|
|
314
|
+
key: index
|
|
315
|
+
}, [createElementVNode("div", _hoisted_4, [createElementVNode("div", _hoisted_5, toDisplayString(file.name), 1 /* TEXT */), createElementVNode("div", _hoisted_6, [createVNode(script$1), createVNode(script$2)])]), file.status === unref(FileUploadStatus).UPLOADING ? (openBlock(), createElementBlock("div", _hoisted_7, [createElementVNode("div", {
|
|
316
|
+
class: "pr-upload__file-list-item-progress-bar",
|
|
317
|
+
style: normalizeStyle({
|
|
318
|
+
width: file.progress + '%'
|
|
319
|
+
})
|
|
320
|
+
}, null, 4 /* STYLE */)])) : createCommentVNode("v-if", true)]);
|
|
321
|
+
}), 128 /* KEYED_FRAGMENT */))])])])]);
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
var css_248z = "@charset \"UTF-8\";\n.input-box-disable[data-v-6a690acc] {\n display: none;\n}\n\n.upload-wrapper[data-v-6a690acc] {\n min-width: 420px;\n}\n.upload-wrapper .pr-upload__interior[data-v-6a690acc] {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 160px;\n border-radius: 8px;\n border: 1px dashed #ccc;\n padding: 0 32px;\n box-sizing: border-box;\n /*拖拽文件效果*/\n /*禁止使用文件上传*/\n}\n.upload-wrapper .pr-upload__interior.focus-within[data-v-6a690acc] {\n border: 1px dashed #409eff !important;\n}\n.upload-wrapper .pr-upload__interior.pr-upload-wrapper__dragging[data-v-6a690acc] {\n border: 2px dashed #409eff;\n background-color: rgba(64, 158, 255, 0.1);\n}\n.upload-wrapper .pr-upload__interior.pr-upload-wrapper__disabled[data-v-6a690acc] {\n pointer-events: none;\n background: #f5f7fa;\n cursor: not-allowed;\n}\n.upload-wrapper .pr-upload__interior.pr-upload-wrapper__disabled .pr-upload__interior-tip[data-v-6a690acc] {\n color: #a8abb2;\n}\n.upload-wrapper .pr-upload__interior.pr-upload-wrapper__disabled .pr-upload__interior-tip em[data-v-6a690acc] {\n font-style: normal;\n color: #a8abb2;\n}\n.upload-wrapper .pr-upload__interior .pr-upload__interior-icon[data-v-6a690acc] {\n margin-top: -8px;\n width: 60px;\n height: 60px;\n font-size: 60px;\n color: #a8abb2;\n}\n.upload-wrapper .pr-upload__interior .pr-upload__interior-tip[data-v-6a690acc] {\n margin-top: 8px;\n font-size: 12px;\n line-height: 12px;\n color: #606266;\n text-align: center;\n letter-spacing: 1px;\n}\n.upload-wrapper .pr-upload__interior .pr-upload__interior-tip em[data-v-6a690acc] {\n color: #409eff;\n}\n.upload-wrapper .pr-upload__tip[data-v-6a690acc] {\n width: 100%;\n padding: 0 2px;\n text-align: left;\n margin-top: 6px;\n font-size: 12px;\n line-height: 16px;\n}\n\n.pr-upload__file-list-panel[data-v-6a690acc] {\n margin-top: 6px;\n width: 100%;\n height: fit-content;\n}\n.pr-upload__file-list-panel .pr-upload__file-list[data-v-6a690acc] {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n gap: 6px;\n}\n.pr-upload__file-list-panel .pr-upload__file-list .pr-upload__file-list-item[data-v-6a690acc] {\n width: 100%;\n display: flex;\n flex-direction: column;\n padding: 6px 8px;\n align-items: center;\n box-sizing: border-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 3px;\n}\n.pr-upload__file-list-panel .pr-upload__file-list .pr-upload__file-list-item .pr-upload__file-list-item-header[data-v-6a690acc] {\n width: 100%;\n font-size: 12px;\n line-height: 16px;\n height: 16px;\n box-sizing: border-box;\n color: #606266;\n display: flex;\n justify-content: space-between;\n}\n.pr-upload__file-list-panel .pr-upload__file-list .pr-upload__file-list-item .pr-upload__file-list-item-header .pr-upload__file-list-item-header__name[data-v-6a690acc] {\n color: #333;\n font-weight: 600;\n font-size: 14px;\n}\n.pr-upload__file-list-panel .pr-upload__file-list .pr-upload__file-list-item .pr-upload__file-list-item-progress[data-v-6a690acc] {\n margin-top: 3px;\n width: 100%;\n height: 4px;\n border-radius: 2px;\n overflow: hidden;\n background-color: #f5f7fa;\n}\n.pr-upload__file-list-panel .pr-upload__file-list .pr-upload__file-list-item .pr-upload__file-list-item-progress .pr-upload__file-list-item-progress-bar[data-v-6a690acc] {\n height: 100%;\n background-color: #409eff;\n}";
|
|
327
|
+
styleInject(css_248z);
|
|
328
|
+
|
|
329
|
+
script.__scopeId = "data-v-6a690acc";
|
|
330
|
+
script.__file = "src/upload.vue";
|
|
331
|
+
|
|
332
|
+
export { script as PrUpload };
|
|
333
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/utils/enums.ts","../src/components/svg/CloseSvg.vue","../../../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../src/components/svg/EyeSvg.vue","../src/upload.vue"],"sourcesContent":["// 文件上传状态\r\nexport enum FileUploadStatus {\r\n PENDING = 'pending',\r\n UPLOADING = 'uploading',\r\n SUCCESS = 'success',\r\n FAILED = 'failed',\r\n CANCELED = 'canceled',\r\n ABORTED = 'aborted',\r\n PAUSED = 'paused',\r\n RETRYING = 'retrying',\r\n RETRY_FAILED = 'retry_failed',\r\n RETRY_SUCCESS = 'retry_success',\r\n RETRY_CANCELED = 'retry_canceled',\r\n RETRY_ABORTED = 'retry_aborted',\r\n RETRY_PAUSED = 'retry_paused',\r\n RETRY_PENDING = 'retry_pending',\r\n RETRY_UPLOADING = 'retry_uploading',\r\n RETRY_RETRYING = 'retry_retrying',\r\n}\r\n\r\nexport enum FileUploadStatusStr {\r\n PENDING = '等待上传',\r\n UPLOADING = '上传中',\r\n SUCCESS = '上传成功',\r\n FAILED = '上传失败',\r\n CANCELED = '取消上传',\r\n ABORTED = '上传中断',\r\n PAUSED = '暂停上传',\r\n RETRYING = '正在重试',\r\n RETRY_FAILED = '重试失败',\r\n RETRY_SUCCESS = '重试成功',\r\n RETRY_CANCELED = '取消重试',\r\n}\r\n","<script setup lang=\"ts\">\r\ndefineOptions({\r\n\tname: 'CloseSvg'\r\n})\r\n</script>\r\n\r\n<template>\r\n\t<svg class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"200\"\r\n\t\t\t height=\"200\">\r\n <path\r\n d=\"M513.1 139.1c-206.7 0-374.2 167.5-374.2 374s167.6 374 374.2 374c206.7 0 374.2-167.5 374.2-374s-167.5-374-374.2-374z m0 689c-173.8 0-315.2-141.3-315.2-315s141.4-315 315.2-315c173.8 0 315.2 141.3 315.2 315s-141.4 315-315.2 315z\"\r\n fill=\"#666666\"></path>\r\n <path\r\n d=\"M666 375.8l-13.9-13.9c-3.8-3.8-8.9-5.8-13.9-5.8s-10.1 1.9-13.9 5.8L512.8 473.3 401.5 361.9c-3.9-3.8-8.9-5.8-13.9-5.8s-10.1 1.9-13.9 5.8l-13.9 13.9c-7.7 7.7-7.7 20.2 0 27.9l111.4 111.4-111.5 111.4c-7.7 7.7-7.7 20.2 0 27.9l13.9 13.9c3.8 3.8 8.9 5.8 13.9 5.8s10.1-1.9 13.9-5.8l111.4-111.4 111.4 111.4c3.9 3.8 8.9 5.8 13.9 5.8s10.1-1.9 13.9-5.8l13.9-13.9c7.7-7.7 7.7-20.2 0-27.9L554.6 515.1 666 403.7c7.7-7.7 7.7-20.2 0-27.9z\"\r\n fill=\"#666666\"></path>\r\n\t</svg>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.icon {\r\n\twidth: 16px;\r\n\theight: 16px;\r\n}\r\n\r\n</style>\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","<script setup lang=\"ts\">\r\ndefineOptions({\r\n name: 'EyeSvg'\r\n})\r\n</script>\r\n\r\n<template>\r\n <svg class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"200\" height=\"200\">\r\n <path\r\n d=\"M512 192c156.448 0 296.021333 98.730667 418.410667 291.605333a52.938667 52.938667 0 0 1 0 56.789334C808.021333 733.269333 668.448 832 512 832c-156.448 0-296.021333-98.730667-418.410667-291.605333a52.938667 52.938667 0 0 1 0-56.789334C215.978667 290.730667 355.552 192 512 192z m0 128c-106.037333 0-192 85.962667-192 192s85.962667 192 192 192 192-85.962667 192-192-85.962667-192-192-192z m0 320c70.688 0 128-57.312 128-128s-57.312-128-128-128-128 57.312-128 128 57.312 128 128 128z\"\r\n fill=\"#000000\"></path>\r\n </svg>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.icon {\r\n width: 16px;\r\n height: 16px;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, reactive, ref } from 'vue'\r\nimport { useUpload } from \"@upload-sdk/core\";\r\nimport { FileUploadStatus } from \"./utils/enums\";\r\nimport CloseSvg from \"./components/svg/CloseSvg.vue\";\r\nimport EyeSvg from \"./components/svg/EyeSvg.vue\";\r\n\r\ndefineOptions({\r\n name: 'PrUpload'\r\n})\r\nconst fileList = reactive<any>([])\r\nconst fileInputBtn = ref<HTMLInputElement | null>(null)\r\nconst uploader = useUpload({\r\n url: 'http://localhost:3001/api/upload/upload'\r\n})\r\n\r\nconst isDragging = ref(false)\r\nconst selectFile = () => {\r\n if (!fileInputBtn.value) return\r\n // 触发点击事件\r\n fileInputBtn.value.click()\r\n}\r\n\r\nconst inputChange = (e: Event) => {\r\n const _target = e.target as HTMLInputElement\r\n if (!_target.files) {\r\n console.warn('Please select a file!')\r\n return\r\n }\r\n const files = _target.files\r\n console.log('files', files)\r\n const needUploadFiles = []\r\n if (Array.isArray(files)) {\r\n needUploadFiles.push(...files)\r\n } else {\r\n needUploadFiles.push(files[0])\r\n }\r\n for (let needUploadFile of needUploadFiles) {\r\n uploadFile(needUploadFile)\r\n }\r\n}\r\n\r\n// 文件上传将其放到上传列表中\r\nconst uploadFile = (file: File) => {\r\n const createOneFile = (file: File) => {\r\n // 将 file 对象进行二次封装\r\n const oneFile = reactive({\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n progress: 0,\r\n status: FileUploadStatus.PENDING,\r\n file: file\r\n })\r\n const progressInterval = setInterval(() => {\r\n oneFile.progress++\r\n oneFile.status = FileUploadStatus.UPLOADING\r\n if (oneFile.progress >= 100) {\r\n oneFile.status = FileUploadStatus.SUCCESS\r\n clearInterval(progressInterval)\r\n }\r\n }, 100)\r\n return oneFile\r\n }\r\n const oneFile = createOneFile(file)\r\n fileList.push(oneFile)\r\n}\r\n\r\nconst inputProps = computed(() => {\r\n return {\r\n multiple: true,\r\n accept: 'image/*',\r\n type: 'file',\r\n change: inputChange\r\n }\r\n})\r\n\r\nconst interiorClass = computed(() => {\r\n return {\r\n 'pr-upload__interior': true,\r\n 'focus-within': false,\r\n 'pr-upload-wrapper__dragging': isDragging.value,\r\n 'pr-upload-wrapper__disabled': false\r\n }\r\n})\r\nconst prUploadInterior = ref<HTMLDivElement | null>(null)\r\n\r\n// 鼠标移入事件\r\nconst mouseEnter = () => {\r\n if (!prUploadInterior.value) return\r\n prUploadInterior.value.classList.add('focus-within')\r\n}\r\n\r\n// 鼠标移出事件\r\nconst mouseLeave = () => {\r\n if (!prUploadInterior.value) return\r\n prUploadInterior.value.classList.remove('focus-within')\r\n}\r\n\r\n// 拖拽事件处理\r\nconst handleDragEnter = (e: DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n isDragging.value = true\r\n}\r\n\r\nconst handleDragOver = (e: DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n // 添加复制效果\r\n if (e.dataTransfer) {\r\n e.dataTransfer.dropEffect = 'copy'\r\n }\r\n}\r\n\r\nconst handleDragLeave = (e: DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n // 检查是否真正离开了上传区域\r\n const relatedTarget = e.relatedTarget as Node\r\n const uploadArea = prUploadInterior.value\r\n\r\n if (!uploadArea) return\r\n\r\n // 只有当鼠标离开上传区域且没有进入其子元素时,才取消拖拽状态\r\n if (!uploadArea.contains(relatedTarget)) {\r\n isDragging.value = false\r\n }\r\n}\r\n\r\nconst handleDrop = (e: DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n isDragging.value = false\r\n if (!e.dataTransfer || !e.dataTransfer.files) return\r\n const files = e.dataTransfer.files\r\n handleFiles(files)\r\n}\r\n\r\nconst handleFiles = (files: FileList) => {\r\n console.log('files', files)\r\n const needUploadFiles = []\r\n if (Array.isArray(files)) {\r\n needUploadFiles.push(...files)\r\n } else {\r\n needUploadFiles.push(files)\r\n }\r\n for (let needUploadFile of needUploadFiles) {\r\n const fileSize = needUploadFile.size\r\n let up\r\n if (fileSize > 5 * 1024 * 1024) {\r\n up = uploader.uploadLargeFile(needUploadFile)\r\n } else {\r\n up = uploader.uploadFile(needUploadFile)\r\n }\r\n up.start()\r\n }\r\n}\r\n\r\ndefineExpose({})\r\n</script>\r\n\r\n<template>\r\n <div class=\"upload-wrapper\">\r\n <input ref=\"fileInputBtn\" class=\"input-box-disable\"\r\n v-bind=\"inputProps\"\r\n @change=\"inputChange\"\r\n />\r\n <div ref=\"prUploadInterior\"\r\n :class=\"interiorClass\"\r\n @click=\"selectFile\"\r\n @mouseenter=\"mouseEnter\"\r\n @mouseleave=\"mouseLeave\"\r\n @dragenter=\"handleDragEnter\"\r\n @dragover=\"handleDragOver\"\r\n @dragleave=\"handleDragLeave\"\r\n @drop=\"handleDrop\"\r\n >\r\n <svg\r\n class=\"pr-upload__interior-icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path fill=\"currentColor\"\r\n d=\"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.81 239.81 0 0 1 512 192a239.87 239.87 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6z\"></path>\r\n </svg>\r\n <div class=\"pr-upload__interior-tip\">拖拽文件到此区域或<em>点击上传</em></div>\r\n </div>\r\n <!--提示\t\t-->\r\n <!-- <slot name=\"tip\">\r\n <div class=\"pr-upload__tip\">只能上传jpg/png文件,且不超过500kb</div>\r\n </slot>-->\r\n <slot name=\"fileList\">\r\n <div class=\"pr-upload__file-list-panel\">\r\n <div class=\"pr-upload__file-list\">\r\n <div class=\"pr-upload__file-list-item\" v-for=\"(file, index) in fileList\" :key=\"index\">\r\n <div class=\"pr-upload__file-list-item-header\">\r\n <div class=\"pr-upload__file-list-item-header__name\">{{ file.name }}</div>\r\n <div class=\"pr-upload__file-list-item-header__op\">\r\n <EyeSvg/>\r\n <CloseSvg/>\r\n </div>\r\n </div>\r\n <div v-if=\"file.status === FileUploadStatus.UPLOADING\" class=\"pr-upload__file-list-item-progress\">\r\n <div class=\"pr-upload__file-list-item-progress-bar\" :style=\"{width: file.progress + '%'}\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </slot>\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n$border-radius: 8px;\r\n\r\n.input-box-disable {\r\n display: none;\r\n}\r\n\r\n.upload-wrapper {\r\n min-width: 420px;\r\n\r\n .pr-upload__interior {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n height: 160px;\r\n border-radius: 8px;\r\n border: 1px dashed #ccc;\r\n padding: 0 32px;\r\n box-sizing: border-box;\r\n\r\n &.focus-within {\r\n border: 1px dashed #409eff !important;\r\n }\r\n\r\n /*拖拽文件效果*/\r\n &.pr-upload-wrapper__dragging {\r\n border: 2px dashed #409eff;\r\n background-color: rgba(64, 158, 255, 0.1);\r\n }\r\n\r\n /*禁止使用文件上传*/\r\n &.pr-upload-wrapper__disabled {\r\n pointer-events: none;\r\n background: #f5f7fa;\r\n cursor: not-allowed;\r\n\r\n .pr-upload__interior-tip {\r\n color: #a8abb2;\r\n\r\n em {\r\n font-style: normal;\r\n color: #a8abb2;\r\n }\r\n }\r\n }\r\n\r\n .pr-upload__interior-icon {\r\n margin-top: -8px;\r\n width: 60px;\r\n height: 60px;\r\n font-size: 60px;\r\n color: #a8abb2;\r\n }\r\n\r\n .pr-upload__interior-tip {\r\n margin-top: 8px;\r\n font-size: 12px;\r\n line-height: 12px;\r\n color: #606266;\r\n text-align: center;\r\n letter-spacing: 1px;\r\n\r\n em {\r\n color: #409eff;\r\n }\r\n }\r\n }\r\n\r\n .pr-upload__tip {\r\n width: 100%;\r\n padding: 0 2px;\r\n text-align: left;\r\n margin-top: 6px;\r\n font-size: 12px;\r\n line-height: 16px;\r\n }\r\n}\r\n\r\n.pr-upload__file-list-panel {\r\n margin-top: 6px;\r\n width: 100%;\r\n height: fit-content;\r\n\r\n .pr-upload__file-list {\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n flex-wrap: wrap;\r\n gap: 6px;\r\n\r\n .pr-upload__file-list-item {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n padding: 6px 8px;\r\n align-items: center;\r\n box-sizing: border-box;\r\n //box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2);\r\n border: 1px solid rgba(0, 0, 0, 0.1);\r\n border-radius: 3px;\r\n\r\n .pr-upload__file-list-item-header {\r\n width: 100%;\r\n font-size: 12px;\r\n line-height: 16px;\r\n height: 16px;\r\n box-sizing: border-box;\r\n color: #606266;\r\n display: flex;\r\n justify-content: space-between;\r\n .pr-upload__file-list-item-header__name {\r\n color: #333;\r\n font-weight: 600;\r\n font-size: 14px;\r\n }\r\n\r\n .pr-upload__file-list-item-header__op {\r\n\r\n }\r\n }\r\n\r\n .pr-upload__file-list-item-progress {\r\n margin-top: 3px;\r\n width: 100%;\r\n height: 4px;\r\n border-radius: 2px;\r\n overflow: hidden;\r\n background-color: #f5f7fa;\r\n\r\n .pr-upload__file-list-item-progress-bar {\r\n height: 100%;\r\n background-color: #409eff;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"],"names":["FileUploadStatus","_openBlock","_createElementBlock","_hoisted_1","_cache","_createElementVNode","d","fill","fileList","reactive","fileInputBtn","ref","uploader","useUpload","url","isDragging","selectFile","value","click","inputChange","e","_target","target","files","console","warn","log","needUploadFiles","Array","isArray","push","needUploadFile","uploadFile","file","createOneFile","oneFile","name","size","type","progress","status","PENDING","progressInterval","setInterval","UPLOADING","SUCCESS","clearInterval","inputProps","computed","multiple","accept","change","interiorClass","prUploadInterior","mouseEnter","classList","add","mouseLeave","remove","handleDragEnter","preventDefault","stopPropagation","handleDragOver","dataTransfer","dropEffect","handleDragLeave","relatedTarget","uploadArea","contains","handleDrop","handleFiles","fileSize","up","uploadLargeFile","start","__expose","_mergeProps","class","onChange","onClick","onMouseenter","onMouseleave","onDragenter","onDragover","onDragleave","onDrop","viewBox","xmlns","_createCommentVNode","_renderSlot","_ctx","_hoisted_2","_hoisted_3","_Fragment","_renderList","index","key","_hoisted_4","_hoisted_5","_toDisplayString","_hoisted_6","_createVNode","EyeSvg","CloseSvg","_unref","_hoisted_7","style","_normalizeStyle","width"],"mappings":"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","x_google_ignoreList":[2]}
|