element UI upload组件-文件显示列表自定义

904 阅读1分钟

image.png 遇到的需求:原本点击名称的放大图片的,又想上传图片后修改图片名称。

想到的解决的方案是点击左侧的缩略图放大图片,点击名称弹出修改名称。

el-upload组件给出的钩子on-preview(点击文件列表中已上传的文件时的钩子),只能点击名称,这样就需要去自定义文件显示列表,插槽slot="file"

image.png

我这里是图片列表的模式,目的是给缩略图加上点击事件,改动较小,通过F12找到对应的代码copy下来(其他展示模式也可这样操作),这样列表的显示样式是不变的,但是对应的事件就需要手动加上了;也可以自行写入想要的样式;

image.png

主要是原来的删除事件,通过调用组件的rmove事件:this.$refs.upload.handleRemove(file),就可以触发on-remove(文件列表移除文件时的钩子);其余在其他元素上添加事件就很方便了;

image.png

涉及模块的代码如下:

    <el-upload
      ref="upload"
      :disabled="isonlyShow"
      action="#"
      :http-request="handleUpload"
      :file-list="itemFileList"
      :accept="imgTypeAccept"
      :limit="limitNum"
      :on-exceed="handleExceed"
      :before-upload="beforeUploadHandle"
      :on-success="successHandle"
      :on-error="ErrorHandle"
      :on-preview="previewHandle"
      :on-remove="removeHandle"
      class="upload-demo"
      list-type="picture"
      drag
    >
      <!-- 上传按钮 -->
      <i class="el-icon-upload" />
      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
      <!-- 上传提示 -->
      <div class="el-upload__tip" slot="tip" v-if="showTip">
        请上传图片文件,
        <template v-if="fileSize">
          大小不超过<b style="color: #f56c6c">{{ fileSize }}MB,</b>
        </template>
      </div>
      <template slot="file" slot-scope="{ file }">
        <img
          class="el-upload-list__item-thumbnail"
          :src="file.url"
          alt=""
          @click="previewHandle(file)"
        />
        <a class="el-upload-list__item-name" @click="changeNameHandle(file)">
          <i class="el-icon-document"></i>{{ file.name ? file.name : "/" }}
        </a>
        <label class="el-upload-list__item-status-label">
          <i class="el-icon-check el-icon-upload-success"> </i>
        </label>
        <i class="el-icon-close" @click="triggerRemoveHandle(file)"></i>
        <i class="el-icon-close-tip">按 delete 键可删除</i>
      </template>
    </el-upload>
    // 手动触发
    triggerRemoveHandle(file) {
      this.$refs.upload.handleRemove(file);
    },
    // 删除文件-钩子
    removeHandle(file, fileList) {
      // this.notifySuccess("删除成功");
      this.formatlistEmit(fileList);
    },

在编辑名称后对应显示的名称是改变了,但本质的file-list是还没更新,我需要再手动更新,通过this.$refs.upload.uploadFiles可以获得最新的文件列表;

记录一下,有些说的不准确,慢慢完善哈~