Vue3 + Element UI 实现文件上传弹出框

这篇具有很好参考价值的文章主要介绍了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实现上传文件以及简单的上传文件格式验证文章来源地址https://www.toymoban.com/news/detail-505874.html

到了这里,关于Vue3 + Element UI 实现文件上传弹出框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element-ui框架的el-dialog弹出框被遮罩层挡住

    解决办法 在el-dialog标签里添加 :modal-append-to-body=‘false’ 问题分析  先来看看element-ui官网提供的属性说明文档 文档解释: 翻译成大白话就是,若el-dialog弹出框设置了modal-append-to-body=\\\'true\\\'(默认)属性,它的遮罩层就会被插入到body标签下(即与组件所在的最外层div同一层级),

    2024年02月16日
    浏览(40)
  • 基于vue+Element Table Popover 弹出框内置表格的封装

    在选择数据的时候需要在已选择的数据中对比选择,具体就是点击一个按钮,弹出一个小的弹出框,但不像对话框那样还需要增加一个遮罩层,更加的轻量化,但是需要查看的数据很多需要一个列表来展示,列表的话还需要一个筛选功能。 我的思路是增加复选框列,将选择的

    2024年02月07日
    浏览(40)
  • vue结合element ui 实现多个文件上传、并删除不符合条件的

    多个文件上传的核心就是将文件append进FormData的实例中,向后台请求时将实例对象传送过去。  多个文件上传,传送的数据: html部分: js部分(this.$request是我自定义的请求方式,大家可以根据自身需要来调整): 1. 我们想要的效果是手动一次性上传多个文件,但是文件选取

    2024年03月20日
    浏览(63)
  • VUE实现弹出框 点击空白页弹框消失

    可以在Vue中实现弹出框然后通过点击空白页面来让弹窗隐藏。具体实现如下: 创建弹出框组件 在Vue中创建一个弹出框组件,用来呈现弹出框的内容和样式。该组件应该接受两个 props,一个是 show,表示弹出框是否显示,另一个是 onClose,表示弹出框的关闭函数。 创建父组件

    2024年02月15日
    浏览(44)
  • vue3+element-plus上传文件,预览文件

    vue3+ts+element-plus上传文件,预览文件 场景:使用element-plus的el-upload标签,手动上传文件,可预览docx,xlsx,pdf,jpg,jpeg,png(本地资源以及网络资源)。 1、使用el-upload标签 检查上传文件的文件格式与大小 上传的附件信息在fileList中,组装接口所需数据进行上传 使用docx-preview插件预览

    2024年02月11日
    浏览(56)
  • vue2+element ui 上传文件

    完全基于elementui组件封装的上传组件 ,后期继续优化 父组件使用 1、引入组件

    2024年02月04日
    浏览(53)
  • 基于vue+Element UI的文件上传(可拖拽上传)

    drag: 支持拖拽上传 action:必选参数,上传的地址 ref:这里主要是用于文件上传完成后清除文件的 on-remove:文件列表移除文件时的钩子 auto-upload:是否在选取文件后立即进行上传 on-change:文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用 注:这里使用的

    2023年04月08日
    浏览(46)
  • vue+element ui 文件上传之文件缩略图缩略图

    文件缩略图按官方文档说的是使用  scoped-slot  去设置缩略图模版。且需要上传的是图片,因为有预览等功能,如果上传的不是图片,会显示不出来。 这里设置了图片的格式等,用户在选择的时候,会自动校准图片格式,官方文档中提供了before-upload方法,可以防止用户在选择

    2024年02月11日
    浏览(82)
  • Vue element ui + AmazonS3上传文件功能

    一、在上传之前,需要先获取到AWS的S3服务的Access key ID和Secret access key 二、代码代码: 别忘记安装AWS.S3!! 三、如果上传失败,报此错误:ETagMissing No access to ETag property on response. Check CORS configuration to expose ETag header. 解决方案: 找到配置的存储桶——权限——跨源资源共享

    2024年02月16日
    浏览(40)
  • vue3中element-plus Upload上传文件

    先上效果图:  上传后:  页面: 我这里做个限制,仅限上传一个pdf文件,如果不需要可以去掉,更多api请参考官方upload上传官方文档 js部分: 完结,撒花~

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包