Vue3 + Element UI 实现文件上传弹出框
Vue3 Element UI 实现文件上传
实现如下:
1.首页添加按钮点击弹出文件框
给dialog设置传参 展示对话框,设置
页面部分代码如下:
-
<template>
-
<div @click="showfeedbackDialog = true">
-
<i class="iconfont icon-yijianfankui"></i>意见反馈
-
</div>
-
<Feedback
-
:feedbackDialogShow="showfeedbackDialog"
-
@closeDialog="showfeedbackDialog = false"
-
@updateData="updateData()">
-
</Feedback>
-
</template>
-
语法部分代码如下:
-
<script setup>
-
import { ref, onMounted, onUnmounted, watch } from 'vue';
-
import Feedback from '../systemConfig/feedbackPage/feedback.vue';
-
import Bus from '@/utils/eventBus.js';
-
let showfeedbackDialog = ref(false);
-
</script>
2.弹出框
页面部分代码如下:
-
<template>
-
<el-dialog
-
v-model="feedbackDialogShow"
-
:close-on-click-modal="false"
-
:before-close="closeDialog"
-
:destroy-on-close="true"
-
class="dialogNormal"
-
>
-
<template #header>
-
<div class="dialogHeader">
-
<div>意见反馈</div>
-
</div>
-
</template>
-
-
-
<!-- 意见反馈 -->
-
<el-form
-
ref="ruleFormRef"
-
:model="servicesForm"
-
:rules="rules"
-
label-width="5rem"
-
-
>
-
<el-row>
-
<el-col>
-
<el-form-item label="问题描述" prop="description">
-
<el-input v-model="servicesForm.description" type="textarea" rows="4" />
-
</el-form-item>
-
</el-col>
-
</el-row>
-
</el-form>
-
-
<el-form :model="servicesForm" label-width="5rem">
-
<el-row>
-
<el-col
-
><el-form-item label="页面截图">
-
<el-upload
-
v-model:file-list="picList"
-
ref="upload"
-
action="#"
-
:on-change="uploadPic"
-
:on-remove="removePic"
-
:on-preview="handlePictureCardPreview"
-
:auto-upload="false"
-
:multiple="true"
-
:limit="3"
-
:accept="('.jpg', '.jpeg', '.png', '.PNG')"
-
list-type="picture-card"
-
>
-
<el-icon><Plus /></el-icon>
-
<template #tip>
-
<div class="el-upload__tip">
-
仅支持上传jpg、png格式文件,单个文件大小不超过1M,最多可上传3个文件
-
</div>
-
</template>
-
</el-upload>
-
</el-form-item>
-
</el-col>
-
</el-row>
-
-
</el-form>
-
-
<template #footer>
-
<el-config-provider :button="{ autoInsertSpace: true }">
-
<div class="dialogFooter">
-
<el-button @click="closeDialog">取消</el-button>
-
<el-button type="primary" @click="submitForm(ruleFormRef)"> 提交 </el-button>
-
</div>
-
</el-config-provider>
-
</template>
-
<el-dialog v-model="dialogVisible" class="dialogSmall">
-
<template #header>
-
<div class="dialogHeader">
-
<div>查看大图</div>
-
</div>
-
</template>
-
<img w-full :src="dialogImageUrl" alt="Preview Image" style="width: 100%" />
-
</el-dialog>
-
</el-dialog>
-
</template>
-
语法部分代码如下
-
<script setup >
-
//引入部分
-
import { ElMessageBox } from 'element-plus';
-
import { ref, onMounted, nextTick, watch, reactive } from 'vue';
-
import { addFeedback } from '@/api/feedback.js';
-
-
//接受来自父组件的feedbackDialogShow
-
const props = defineProps({
-
feedbackDialogShow: {
-
type: Boolean,
-
require: true,
-
default: false,
-
},
-
});
-
-
let feedbackDialogShow = ref(false);
-
let picList = [];
-
-
//文件在表格内的类名
-
const servicesForm = ref({
-
-
description: '', //问题描述
-
-
});
-
-
//上传所需内容规则
-
const rules = reactive({
-
description: [{ required: true, message: '请填写问题描述', trigger: 'blur' }],
-
});
-
-
//上传图片 通过图片的raw.type确定上传类型进行上传验证
-
function uploadPic(UploadFile, UploadFiles) {
-
if (['image/jpg', 'image/jpeg', 'image/png'].indexOf(UploadFile.raw.type) == -1) {
-
ElMessageBox.alert('请上传正确的图片格式', '提示', {
-
confirmButtonText: 'OK',
-
});
-
}
-
}
-
-
//移除图片 通过找唯一的文件名删除图片
-
function removePic(UploadFile, UploadFiles) {
-
picList.forEach((value, index, array) => {
-
if (value.name == UploadFile.name) {
-
array.splice(index, 1);
-
}
-
});
-
}
-
-
// 查看图片大图
-
function handlePictureCardPreview(file) {
-
dialogImageUrl.value = file.url;
-
dialogVisible.value = true;
-
}
-
-
function closeDialog() {
-
-
feedbackDialogShow.value = false;
-
emit('closeDialog', false);
-
}
-
-
//上传文件
-
-
async function submitForm(formEl) {
-
if (!formEl) return;
-
await formEl.validate((valid, fields) => {
-
if (valid) {
-
let formData = new FormData();
-
formData.append('description', servicesForm.value['description']);
-
if (toRaw(picList).length > 0) {
-
let listPicRaw = [];
-
toRaw(picList).forEach(function (e) {
-
listPicRaw.push(toRaw(e).raw);
-
});
-
listPicRaw.forEach((element) => {
-
formData.append('picFiles', element);
-
});
-
} addFeedback(formData).then((data) => {
-
closeDialog();
-
emit('updateData', '');
-
});
-
}
-
});
-
}
上述实现弹出框上传文件事件,当文件上传后需要更新文件管理展示页面,所以需要传一个更新值给父组件,后用bus.$on/emit/传递参数给展示页面
在父组件语法部分加上
-
function updateData() {
-
Bus.$emit('getFeedbackData');
-
}
在浏览文件页面 添加这一步,当有文件上传后更新文件管理的页面
-
<script setup>
-
onMounted(() => {
-
getData();
-
Bus.$on('getFeedbackData', () => {
-
getData();
-
});
-
});
-
</script>
【vue2 elementUi实现文件上传】指路,另附有一些常用的文件格式element-ui el-upload实现上传文件以及简单的上传文件格式验证
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhcibgfc
系列文章
更多
同类精品
更多
-
微信小程序没声音怎么办
PHP中文网 06-15 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
微信人名旁边有个图标有什么用
PHP中文网 03-11 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
微信获取用户openid失败怎么办
PHP中文网 03-26 -
photoshop怎么把印章抠出并放在另一张图上
PHP中文网 06-15 -
EhViewer(E绅士)最新版_ehviewer白色版彩色版_Ehviewer显示网络错误怎么办?e站进不去了怎么办
Evanpatchouli 09-19 -
Excel筛选和排序是灰色的怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24