基于vue+ts 的上传组件封装(上传+预览<包括图片+PDF>) 功能超全hh

一、依赖包

  • vue-pdf "^4.0.12"
  • v-viewer "^1.5.1"
  • jquery "^3.4.1"
  • element-ui "^2.13.0"

二、初衷、思路、想法

绝大数后台管理项目和少数C端项目都离不开文件的上传及预览,所以我就做了一个这个自认为适用于绝大多数项目的组件~
用户上传图片orPDF,预览上传的文件无论图片orPDF,由于在现在的公司做的主要项目针对的是后台管理,且有的页面上传的文件较多,有的文件必传、有的文件需要显示示例图、有的文件需要对文件类型及文件大小做限制、有的场景希望上传的区域较大或较小、直接拖拽文件到某一特定区域上传、在文件较多的页面希望用户“直接”定位到有哪一个或哪一些文件上传的校验没通过
对于开发者,希望在用户上传特定的一些文件后立即触发回调事件对用户上传的文件及时做处理。

三、组件预览图

  • 总揽


  • pdf预览


  • 图片预览


  • gif


    QQ20200826-174338-HD.gif

四、使用



fileNameList: Array = [
    {
      id: "idCardFront",
      fileName: "身份证正面",
      required: true, // 必上传
      fileSizeByte: 15360, // 自定义当前文件最大15兆
      fileType: ["pdf"],
      callback: (file: any) => {
        console.log("回调成功", file);
      },
    },
    {
      id: "idCardBack",
      fileName: "身份证反面",
    },
    {
      id: "vin",
      fileName: "vim码",
    },
    {
      id: "businessLicense",
      fileName: "营业执照",
    },
    {
      id: "engine",
      fileName: "车辆发动机舱全景",
      initImg: require("@/assets/img/11592459733_.pic.jpg"),
    },
  ];

// 获取上传的所有文件
(this as any).$refs.filePdf.getFiles("object");

五、源码

基本上全都写了注释

  • 文件上传组件





  • 图片预览组件







  • 删除弹框样式
.deleteUpload {
  width: 160px;
  height: 68px;
  padding: 10px 5px 0 7px;
  margin-left: -120px;
  box-sizing: border-box;

  .el-popconfirm__main {
    font-size: 12px;
    color: #515151;
    margin-bottom: 8px;

    i {
      display: none;
    }
  }

  &[x-placement^=top] {
    // margin-bottom: 0px;

    .popper__arrow {
      left: 132px !important;
      right: 18px;
    }
  }

  &[x-placement^=bottom] {
    // margin-top: 1px;

    .popper__arrow {
      left: 132px !important;
      right: 18px;
    }
  }

  .el-popconfirm__action {
    text-align: center;

    .el-button {
      width: 60px;
      height: 20px;
      padding: 0;
    }

    .el-button--text {
      border: 1px solid rgba(239, 244, 255, 1);
      color: #AEAEAE;
    }

    .el-button--primary {
      background-color: #4b6cf6;
      border-color: #4b6cf6;
    }
  }
}

你可能感兴趣的:(基于vue+ts 的上传组件封装(上传+预览<包括图片+PDF>) 功能超全hh)