el-upload单文件手动上传

单文件上传没有什么好说的,只是因为element官网没有具体的例子,所以需要自己稍微画一个div

全部代码如下:

<!-- 图片上传组件:用于船籍新增按钮,选择国旗 -->
<template>
	<div class="container">
		<!-- 缩略图显示-->
		<div class="img-show" v-if="imgUrl">
			<img :src="imgUrl" class="avatar" />
			<span class="actions">
				<!-- 删除 -->
				<span class="item">
					<el-icon @click="handleDel()"><Delete /></el-icon>
				</span>
			</span>
		</div>
		<!-- 图片上传 -->
		<el-upload
			v-else
			action="#"
			class="uploader-avatar"
			list-type="picture"
			:auto-upload="false"
			:show-file-list="false"
			:on-change="handleUpload"
		>
			<el-icon><Plus /></el-icon>
		</el-upload>
	</div>
</template>
<script lang="ts" setup name="upload-image">
import { ref, watch } from "vue";
import { Plus, Delete } from "@element-plus/icons-vue";
import { ElMessage } from "element-plus";

const emit = defineEmits(["update:modelValue"]);
const props = defineProps({
	base64: String,
});

const imgUrl = ref();

//监听父组件是否传递base64数据过来,从而判断是新增还是修改
watch(
	props,
	newQuestion => {
		imgUrl.value = newQuestion.base64;
	},
	{ immediate: true }
);

//将图片的data返回给父组件registry.vue
const handleUpload = (file: any) => {
	// 检查图片类型是否为 jpg 或 png
	const isJpgOrPng =
		file.raw.type === "image/jpeg" || file.type === "image/png";
	if (!isJpgOrPng) {
		// 如果不是 jpg 或 png,则提示用户
		const errorMsg = "图片类型只能为jpg/png";
		ElMessage.error(errorMsg);
	} else {
		const reader = new FileReader();
		reader.readAsDataURL(file.raw);
		reader.onload = () => {
			imgUrl.value = reader.result as any;
			// 触发自定义事件,并将 Base64 编码传递给父组件
			emit("update:modelValue", imgUrl.value);
		};
	}
};

//删除国旗
const handleDel = () => {
	//清除组件上的国旗图片
	imgUrl.value = "";
	//清除传递给父组件的值
	emit("update:modelValue", "");
};
</script>

<style scoped>
.container {
	width: 124px;
	height: 124px;
	overflow: hidden;
}
.uploader-avatar :deep(.el-upload) {
	background-color: #fbfdff;
	border: 1px dashed #c0ccda;
	border-radius: 6px;
	box-sizing: border-box;
	width: 124px;
	height: 124px;
	cursor: pointer;
	line-height: 124px;
	vertical-align: top;
	overflow: hidden;
}
.img-show {
	position: relative;
	border: 1px solid #c0ccda;
	border-radius: 6px;
	box-sizing: border-box;
	width: 124px;
	height: 124px;
	cursor: pointer;
	overflow: hidden;
}

.uploader-avatar :deep(i) {
	font-size: 28px;
	color: #8c939d;
}
.avatar {
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.actions {
	position: absolute;
	width: 100%;
	height: 100%;
	line-height: 148px;
	left: 0;
	top: 0;
	cursor: default;
	text-align: center;
	color: #fff;
	opacity: 0;
	font-size: 20px;
	background-color: rgba(0, 0, 0, 0.5);
	transition: opacity 0.3s;
}
.actions:hover {
	opacity: 1;
}
.actions:hover span {
	display: inline-block;
}
.actions span {
	display: none;
	margin: 0 16px;
	cursor: pointer;
}
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 `el-upload` 组件来实现多文件手动上传。以下是一个简的示例代码: ```html <template> <div> <el-upload ref="upload" action="/upload" :auto-upload="false" multiple :limit="3" :on-exceed="handleExceed" > <el-button size="small" type="primary">选择文件</el-button> <div slot="tip" class="el-upload__tip">只能上传不超过 3 个文件</div> </el-upload> <el-button size="small" type="success" @click="uploadFiles">上传</el-button> </div> </template> <script> export default { methods: { handleExceed(files, fileList) { this.$message.warning(`只能上传 ${this.limit} 个文件`); }, uploadFiles() { const fileList = this.$refs.upload.uploadFiles; fileList.forEach(file => { // 在这里执行你的上传逻辑 // 例如使用 axios 发送请求 // axios.post('/upload', file) console.log(file); }); }, }, }; </script> ``` 在上面的代码中,我们使用 `el-upload` 组件来创建一个文件上传的区域。设置 `auto-upload` 属性为 `false`,这样选择文件后不会自动上传。通过设置 `multiple` 属性可以实现多文件上传,而 `limit` 属性可以限制最多上传文件数量。 当选择的文件数量超过限制时,会触发 `on-exceed` 方法,我们在这里给出一个提示。 点击"选择文件"按钮后,会调用 `uploadFiles` 方法来获取选择的文件列表,并可以在该方法中执行你的上传逻辑。你可以按照你的需求使用 axios 或其他方式发送请求,将文件上传到服务器。 上述代码只是一个简的示例,你可以根据自己的实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值