element-plus
Version:
A Component Library for Vue 3
1 lines • 8.68 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/upload/src/index.vue"],"sourcesContent":["<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n h,\n getCurrentInstance,\n inject,\n ref,\n provide,\n onBeforeUnmount,\n} from 'vue'\nimport { NOOP } from '@vue/shared'\nimport { elFormKey } from '@element-plus/tokens'\n\nimport ajax from './ajax'\nimport UploadList from './upload-list.vue'\nimport Upload from './upload.vue'\nimport useHandlers from './useHandlers'\n\nimport type { PropType } from 'vue'\nimport type { ElFormContext } from '@element-plus/tokens'\nimport type { Nullable } from '@element-plus/utils'\nimport type {\n ListType,\n UploadFile,\n FileHandler,\n FileResultHandler,\n} from './upload.type'\n\ntype PFileHandler<T> = PropType<FileHandler<T>>\ntype PFileResultHandler<T = any> = PropType<FileResultHandler<T>>\n\nexport default defineComponent({\n name: 'ElUpload',\n components: {\n Upload,\n UploadList,\n },\n props: {\n action: {\n type: String,\n required: true,\n },\n headers: {\n type: Object as PropType<Headers>,\n default: () => ({}),\n },\n method: {\n type: String,\n default: 'post',\n },\n data: {\n type: Object,\n default: () => ({}),\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n name: {\n type: String,\n default: 'file',\n },\n drag: {\n type: Boolean,\n default: false,\n },\n withCredentials: Boolean,\n showFileList: {\n type: Boolean,\n default: true,\n },\n accept: {\n type: String,\n default: '',\n },\n type: {\n type: String,\n default: 'select',\n },\n beforeUpload: {\n type: Function as PFileHandler<void>,\n default: NOOP,\n },\n beforeRemove: {\n type: Function as PFileHandler<boolean>,\n default: NOOP,\n },\n onRemove: {\n type: Function as PFileHandler<void>,\n default: NOOP,\n },\n onChange: {\n type: Function as PFileHandler<void>,\n default: NOOP,\n },\n onPreview: {\n type: Function as PropType<() => void>,\n default: NOOP,\n },\n onSuccess: {\n type: Function as PFileResultHandler,\n default: NOOP,\n },\n onProgress: {\n type: Function as PFileResultHandler<ProgressEvent>,\n default: NOOP,\n },\n onError: {\n type: Function as PFileResultHandler<Error>,\n default: NOOP,\n },\n fileList: {\n type: Array as PropType<UploadFile[]>,\n default: () => {\n return [] as UploadFile[]\n },\n },\n autoUpload: {\n type: Boolean,\n default: true,\n },\n listType: {\n type: String as PropType<ListType>,\n default: 'text' as ListType, // text,picture,picture-card\n },\n httpRequest: {\n type: Function,\n default: ajax,\n },\n disabled: Boolean,\n limit: {\n type: Number as PropType<Nullable<number>>,\n default: null,\n },\n onExceed: {\n type: Function,\n default: () => NOOP,\n },\n },\n setup(props) {\n const elForm = inject(elFormKey, {} as ElFormContext)\n\n const uploadDisabled = computed(() => {\n return props.disabled || elForm.disabled\n })\n\n const {\n abort,\n clearFiles,\n handleError,\n handleProgress,\n handleStart,\n handleSuccess,\n handleRemove,\n submit,\n uploadRef,\n uploadFiles,\n } = useHandlers(props)\n\n provide('uploader', getCurrentInstance())\n\n onBeforeUnmount(() => {\n uploadFiles.value.forEach((file) => {\n if (file.url && file.url.indexOf('blob:') === 0) {\n URL.revokeObjectURL(file.url)\n }\n })\n })\n\n return {\n abort,\n dragOver: ref(false),\n draging: ref(false),\n handleError,\n handleProgress,\n handleRemove,\n handleStart,\n handleSuccess,\n uploadDisabled,\n uploadFiles,\n uploadRef,\n submit,\n clearFiles,\n }\n },\n render() {\n let uploadList\n if (this.showFileList) {\n uploadList = h(\n UploadList,\n {\n disabled: this.uploadDisabled,\n listType: this.listType,\n files: this.uploadFiles,\n onRemove: this.handleRemove,\n handlePreview: this.onPreview,\n },\n this.$slots.file\n ? {\n default: (props: { file: UploadFile }) => {\n return this.$slots.file({\n file: props.file,\n })\n },\n }\n : null\n )\n } else {\n uploadList = null\n }\n\n const uploadData = {\n type: this.type,\n drag: this.drag,\n action: this.action,\n multiple: this.multiple,\n 'before-upload': this.beforeUpload,\n 'with-credentials': this.withCredentials,\n headers: this.headers,\n method: this.method,\n name: this.name,\n data: this.data,\n accept: this.accept,\n fileList: this.uploadFiles,\n autoUpload: this.autoUpload,\n listType: this.listType,\n disabled: this.uploadDisabled,\n limit: this.limit,\n 'on-exceed': this.onExceed,\n 'on-start': this.handleStart,\n 'on-progress': this.handleProgress,\n 'on-success': this.handleSuccess,\n 'on-error': this.handleError,\n 'on-preview': this.onPreview,\n 'on-remove': this.handleRemove,\n 'http-request': this.httpRequest,\n ref: 'uploadRef',\n }\n const trigger = this.$slots.trigger || this.$slots.default\n const uploadComponent = h(Upload, uploadData, {\n default: () => trigger?.(),\n })\n return h('div', [\n this.listType === 'picture-card' ? uploadList : null,\n this.$slots.trigger\n ? [uploadComponent, this.$slots.default()]\n : uploadComponent,\n this.$slots.tip?.(),\n this.listType !== 'picture-card' ? uploadList : null,\n ])\n },\n})\n</script>\n"],"names":["ajax"],"mappings":";;;;;;;;;MAgCK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA;AAAA,EAEF,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA;AAAA,IAEZ,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAO;AAAA,IAElB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAO;AAAA,IAElB,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,iBAAiB;AAAA,IACjB,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,WAAW;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;AAAA;AAAA;AAAA,IAGX,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAASA;AAAA;AAAA,IAEX,UAAU;AAAA,IACV,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS,MAAM;AAAA;AAAA;AAAA,EAGnB,MAAM,OAAO;AACX,UAAM,SAAS,OAAO,WAAW;AAEjC,UAAM,iBAAiB,SAAS,MAAM;AACpC,aAAO,MAAM,YAAY,OAAO;AAAA;AAGlC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,YAAY;AAEhB,YAAQ,YAAY;AAEpB,oBAAgB,MAAM;AACpB,kBAAY,MAAM,QAAQ,CAAC,SAAS;AAClC,YAAI,KAAK,OAAO,KAAK,IAAI,QAAQ,aAAa,GAAG;AAC/C,cAAI,gBAAgB,KAAK;AAAA;AAAA;AAAA;AAK/B,WAAO;AAAA,MACL;AAAA,MACA,UAAU,IAAI;AAAA,MACd,SAAS,IAAI;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,EAGJ,SAAS;AACP,QAAI;AACJ,QAAI;AACF;AAEE;AACiB,QACf,UAAU,KAAK;AAAA,QACf;AAAY,QACZ;AAAe,QACf,eAAe;AAAK,qBAEV,OACR;AAAA,4BAC4C;AACxC,iBAAO;AAAiB;AACV;AAAA;AAAA;AAIlB;AAGN;AAAa;AAGf;AAAmB;AACN,MACX,MAAM,KAAK;AAAA,MACX;AAAa,MACb;AAAe,MACf;AAAsB,MACtB;AAAyB,MACzB;AAAc,MACd,aAAa;AAAA,MACb,MAAM;AAAK,MACX,MAAM,KAAK;AAAA,MACX;AAAa,MACb;AAAe,MACf;AAAiB,MACjB,UAAU;AAAK,MACf,UAAU,KAAK;AAAA,MACf;AAAY,MACZ;AAAkB,MAClB,iBAAiB;AAAA,MACjB;AAAoB,MACpB,mBAAmB;AAAA,MACnB,YAAY;AAAK,MACjB;AAAmB,MACnB,kBAAkB;AAAA,MAClB;AAAqB,MACrB;AAAK;AAEP;AACA,UAAM;AAAwC;AAC7B;AAEjB;AAAgB,WACT;AAA2C,MAChD,KAAK,wCACsB,OAAO;AAC9B,MACJ,KAAK,OAAO;AAAA,MACZ;AAAgD;AAAA;AAAA;;;;;"}