当前位置: 首页 > article >正文

基于若依框架和Vue2 + Element-UI 实现图片上传组件的重写与优化

背景

在使用 若依分离版Element-UI 的图片上传组件时,需要根据业务需求进行定制化处理,比如:

  1. 需要传递额外的业务参数到后端
  2. 需要对上传路径进行修改
  3. 需要对上传组件进行样式定制

实现步骤

1. 创建本地组件

首先在业务模块下创建本地的图片上传组件:

src/views/xxx/components/ImageUpload/index.vue

2. 组件核心代码

<template>
  <div class="component-upload-image">
    <el-upload
      multiple
      :action="uploadImgUrl"
      :data="{
        bizType: bizType  // 传递业务参数
      }"
      list-type="picture-card"
      :on-success="handleUploadSuccess"
      :before-upload="handleBeforeUpload"
      :headers="headers"
      :file-list="fileList"
      <!-- 其他属性 -->
    >
      <i class="el-icon-plus"></i>
    </el-upload>
  </div>
</template>

<script>
export default {
  name: 'ImageUpload',
  props: {
    value: {
      type: String,
      default: ''
    },
    // 业务类型参数
    bizType: {
      type: String,
      default: 'changeImages'
    }
  },
  data() {
    return {
      uploadImgUrl: process.env.VUE_APP_BASE_API + "/adminCommon/upload", // 自定义上传地址
      headers: {
        Authorization: "Bearer " + getToken()
      }
    }
  }
}
</script>

3. 注册使用

在父组件中注册并使用本地组件:

<script>
import ImageUpload from './components/ImageUpload/index.vue'

export default {
  components: {
    LocalImageUpload: ImageUpload  // 注册为本地组件
  }
}
</script>

<template>
  <LocalImageUpload 
    v-model="form.imagesImg"
    :bizType="'xxx'"   // 业务参数值
  />
</template>

4. 禁用全局组件

在 main.js 中注释掉全局组件的注册(如果有其他地方使用则不需要注释):

// 注释掉全局图片上传组件
// Vue.component('ImageUpload', ImageUpload)

5.后端接收

public AjaxResult uploadFile(MultipartFile file , @RequestParam("bizType") String bizType) throws Exception{}

核心优化点

1.参数传递

  • 通过 props 定义业务参数
  • 使用 el-upload 的 data 属性传递参数到后端

2.上传地址

  • 自定义上传地址
  • 支持环境变量配置

3.文件验证

  • 支持文件类型验证
  • 支持文件大小限制
  • 支持上传数量限制

4.交互优化

  • 上传前预检查
  • 上传中loading提示
  • 上传成功/失败提示
  • 预览功能

使用示例

<!-- 在表单中使用 -->
<el-form-item label="图片" prop="imagesImg">
  <LocalImageUpload 
    v-model="form.imagesImg"
    :bizType="'xxx'"
  />
</el-form-item>

<!-- 在表格中使用 -->
<el-table-column label="图片" align="center" prop="imagesImg">
  <template slot-scope="scope">
    <LocalImageUpload 
      v-model="scope.row.imagesImg"
      :bizType="'xxx'"
    />
  </template>
</el-table-column>

优势

  1. 更灵活的参数传递
  2. 更好的代码组织
  3. 更容易维护和扩展
  4. 避免全局污染
  5. 支持业务定制化
  6. 这样的组件重写既保留了 Element-UI 上传组件的基础功能,又增加了业务所需的定制化能力。

http://www.kler.cn/a/416488.html

相关文章:

  • 在Java中使用Apache POI导入导出Excel(三)
  • Y20030012基于php+mysql的药店药品信息管理系统的设计与实现 源码 配置 文档
  • 【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格
  • uni-app中的样式尺寸单位,px,rpx,vh,vw
  • 软件测试常问面试问题及项目流程相关概念
  • 【Electron学习笔记(四)】进程通信(IPC)
  • Python 3 教程第34篇(MySQL 数据库连接 - PyMySQL 驱动)
  • 表征对齐在训练DiT模型中的重要性
  • PHP ODBC:连接数据库的桥梁
  • ASP.NET Core面试题汇总
  • 首发VM手眼标定xml文件点位取出以及转其他格式
  • 【Python】深入理解Python的字符串处理与正则表达式:文本处理的核心技能
  • A054-基于Spring Boot的青年公寓服务平台
  • docker从入门到入土
  • 【Linux】常见指令 + 权限概念
  • 计算机网络:TCP/IP 协议职责和常见的三种模型介绍
  • HCIA笔记5--STP协议
  • Django-Vue3-Admin - 现代化的前后端分离权限管理系统
  • 53 基于单片机的8路抢答器加记分
  • MySql(面试题理解B+树原理 实操加大白话)
  • 如何在HarmonyOS NEXT中处理页面间的数据传递?
  • logminer挖掘日志归档查找问题
  • 深入理解Oracle DB的锁和闩
  • elementUI非常规数据格式渲染复杂表格(副表头、合并单元格)
  • LeetCode Hot100 1~10
  • 结构型模式-组合模式