123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var vue = require('vue');
- var lodashUnified = require('lodash-unified');
- var uploadDragger = require('./upload-dragger.js');
- var uploadContent = require('./upload-content.js');
- var upload = require('./upload.js');
- var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js');
- var objects = require('../../../utils/objects.js');
- var index = require('../../../hooks/use-namespace/index.js');
- var useFormCommonProps = require('../../form/src/hooks/use-form-common-props.js');
- var shared = require('@vue/shared');
- const __default__ = vue.defineComponent({
- name: "ElUploadContent",
- inheritAttrs: false
- });
- const _sfc_main = /* @__PURE__ */ vue.defineComponent({
- ...__default__,
- props: uploadContent.uploadContentProps,
- setup(__props, { expose }) {
- const props = __props;
- const ns = index.useNamespace("upload");
- const disabled = useFormCommonProps.useFormDisabled();
- const requests = vue.shallowRef({});
- const inputRef = vue.shallowRef();
- const uploadFiles = (files) => {
- if (files.length === 0)
- return;
- const { autoUpload, limit, fileList, multiple, onStart, onExceed } = props;
- if (limit && fileList.length + files.length > limit) {
- onExceed(files, fileList);
- return;
- }
- if (!multiple) {
- files = files.slice(0, 1);
- }
- for (const file of files) {
- const rawFile = file;
- rawFile.uid = upload.genFileId();
- onStart(rawFile);
- if (autoUpload)
- upload$1(rawFile);
- }
- };
- const upload$1 = async (rawFile) => {
- inputRef.value.value = "";
- if (!props.beforeUpload) {
- return doUpload(rawFile);
- }
- let hookResult;
- let beforeData = {};
- try {
- const originData = props.data;
- const beforeUploadPromise = props.beforeUpload(rawFile);
- beforeData = shared.isPlainObject(props.data) ? lodashUnified.cloneDeep(props.data) : props.data;
- hookResult = await beforeUploadPromise;
- if (shared.isPlainObject(props.data) && lodashUnified.isEqual(originData, beforeData)) {
- beforeData = lodashUnified.cloneDeep(props.data);
- }
- } catch (e) {
- hookResult = false;
- }
- if (hookResult === false) {
- props.onRemove(rawFile);
- return;
- }
- let file = rawFile;
- if (hookResult instanceof Blob) {
- if (hookResult instanceof File) {
- file = hookResult;
- } else {
- file = new File([hookResult], rawFile.name, {
- type: rawFile.type
- });
- }
- }
- doUpload(Object.assign(file, {
- uid: rawFile.uid
- }), beforeData);
- };
- const resolveData = async (data, rawFile) => {
- if (shared.isFunction(data)) {
- return data(rawFile);
- }
- return data;
- };
- const doUpload = async (rawFile, beforeData) => {
- const {
- headers,
- data,
- method,
- withCredentials,
- name: filename,
- action,
- onProgress,
- onSuccess,
- onError,
- httpRequest
- } = props;
- try {
- beforeData = await resolveData(beforeData != null ? beforeData : data, rawFile);
- } catch (e) {
- props.onRemove(rawFile);
- return;
- }
- const { uid } = rawFile;
- const options = {
- headers: headers || {},
- withCredentials,
- file: rawFile,
- data: beforeData,
- method,
- filename,
- action,
- onProgress: (evt) => {
- onProgress(evt, rawFile);
- },
- onSuccess: (res) => {
- onSuccess(res, rawFile);
- delete requests.value[uid];
- },
- onError: (err) => {
- onError(err, rawFile);
- delete requests.value[uid];
- }
- };
- const request = httpRequest(options);
- requests.value[uid] = request;
- if (request instanceof Promise) {
- request.then(options.onSuccess, options.onError);
- }
- };
- const handleChange = (e) => {
- const files = e.target.files;
- if (!files)
- return;
- uploadFiles(Array.from(files));
- };
- const handleClick = () => {
- if (!disabled.value) {
- inputRef.value.value = "";
- inputRef.value.click();
- }
- };
- const handleKeydown = () => {
- handleClick();
- };
- const abort = (file) => {
- const _reqs = objects.entriesOf(requests.value).filter(file ? ([uid]) => String(file.uid) === uid : () => true);
- _reqs.forEach(([uid, req]) => {
- if (req instanceof XMLHttpRequest)
- req.abort();
- delete requests.value[uid];
- });
- };
- expose({
- abort,
- upload: upload$1
- });
- return (_ctx, _cache) => {
- return vue.openBlock(), vue.createElementBlock("div", {
- class: vue.normalizeClass([
- vue.unref(ns).b(),
- vue.unref(ns).m(_ctx.listType),
- vue.unref(ns).is("drag", _ctx.drag),
- vue.unref(ns).is("disabled", vue.unref(disabled))
- ]),
- tabindex: vue.unref(disabled) ? "-1" : "0",
- onClick: handleClick,
- onKeydown: vue.withKeys(vue.withModifiers(handleKeydown, ["self"]), ["enter", "space"])
- }, [
- _ctx.drag ? (vue.openBlock(), vue.createBlock(uploadDragger["default"], {
- key: 0,
- disabled: vue.unref(disabled),
- onFile: uploadFiles
- }, {
- default: vue.withCtx(() => [
- vue.renderSlot(_ctx.$slots, "default")
- ]),
- _: 3
- }, 8, ["disabled"])) : vue.renderSlot(_ctx.$slots, "default", { key: 1 }),
- vue.createElementVNode("input", {
- ref_key: "inputRef",
- ref: inputRef,
- class: vue.normalizeClass(vue.unref(ns).e("input")),
- name: _ctx.name,
- disabled: vue.unref(disabled),
- multiple: _ctx.multiple,
- accept: _ctx.accept,
- type: "file",
- onChange: handleChange,
- onClick: vue.withModifiers(() => {
- }, ["stop"])
- }, null, 42, ["name", "disabled", "multiple", "accept", "onClick"])
- ], 42, ["tabindex", "onKeydown"]);
- };
- }
- });
- var UploadContent = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["__file", "upload-content.vue"]]);
- exports["default"] = UploadContent;
- //# sourceMappingURL=upload-content2.js.map
|