element ui 上传文件组件

222 阅读1分钟
<template>
	<div class="single-file-uploader-item">
		<el-upload
			:action="action"
			:accept="accept"
			:limit="1"
			:on-exceed="handleExceed"
			:file-list="fileList"
			:before-remove="beforeRemove"
			:data="{
				fileType: fileType
			}"
			:on-success="handleSuccess"
		>
			<el-button size="small" type="primary">点击上传</el-button>
			<div slot="tip" class="el-upload__tip" style="line-height:1em;">
				{{ tip }}
			</div>
		</el-upload>
	</div>
</template>

<script>
import axios from 'axios';
export default {
	data() {
		return {
			fileList: this.value ? [{ name: this.value, url: this.value }] : []
		};
	},
	props: {
		value: {
			type: String,
			default: ''
		},
		field: {
			type: String,
			default: 'file'
		},
		action: {
			type: String,
			default: '/api/file/upload-one'
		},
		fileType: {
			type: String,
			required: true
		},
		otherId: {
			type: String,
			default: ''
		},
		tip: {
			type: String,
			default: ''
		},
		accept: {
			type: String,
			default: 'image/jpeg, image/png, video/mp4'
		}
	},
	methods: {
		beforeRemove(file, fileList) {
			return this.$confirm(`确定移除 ${file.name}?`);
		},
		handleExceed(files, fileList) {
			this.$message.warning(
				`当前限制选择 1 个文件,本次选择了 ${
					files.length
				} 个文件,共选择了 ${files.length + fileList.length} 个文件`
			);
		},
		handleSuccess(response, file, fileList) {
			this.$emit('input', response.data.fileUrls[0]);
		}
	},
	watch: {
		value(newVal) {
			this.fileList = [{ name: newVal, url: newVal }];
		}
	}
};
</script>
应用
	<el-form-item
							label="活动介绍视频"
							prop="activityInfo.explainUrl_video"
							v-if="form.activityInfo.mediaType == 'VIDEO'"
						>
							<SingleFileUploader
								v-model="form.activityInfo.explainUrl_video"
								fileType="INFORMATION"
								accept="video/mp4"
								tip="只能上传mp4文件"
							></SingleFileUploader>
						</el-form-item>
						<el-form-item
							label="视频封面图片"
							prop="activityInfo.coverUrl"
							v-if="form.activityInfo.mediaType == 'VIDEO'"
						>
							<SingleImgUploader
								v-model="form.activityInfo.coverUrl"
								fileType="INFORMATION"
							></SingleImgUploader>
						</el-form-item>