vue项目实战:element-ui上传组件 upload的源码改造


``` 基于项目需求需要把上传成功的文件图标logo区别对待好一眼知道哪个文件是ppt、哪个是图片、哪个是word 哪个是文本txt等文件类型;由于element-ui 的upload组件源码是写死的此时需要copy一份源码稍加改造即可!如下: <template>
  <transition-group tag="ul" :class="[ 'el-upload-list', 'el-upload-list--' + listType, { 'is-disabled': disabled } ]" name="el-list"
  >
    <li v-for="(file, index) in files" :class="['el-upload-list__item', 'is-' + file.status, focusing ? 'focusing' : '']" :key="index.toString()" tabindex="0" @focus="focusing = true" @blur="focusing = false" @click="focusing = false"
    >
      <img class="el-upload-list__item-thumbnail" v-if="file.status !== 'uploading' && ['picture-card', 'picture'].indexOf(listType) > -1" :src="file.url" alt >
      <a class="el-upload-list__item-name" @click="handleClick(file)">
        <!-- <i class="el-icon-document"></i>{{file.name}} 原本的源码 以下是改造后的源码!就是一个i标签即可-->
        <i class="ext-name-icon" :class="fileExtName(file.fName || file.name)"></i>
        <span class="file_f_name">{{file.fName || file.name}}</span>
      </a>
      <label class="el-upload-list__item-status-label">
        <i :class="{ 'el-icon-upload-success': true, 'el-icon-circle-check': listType === 'text', 'el-icon-check': ['picture-card', 'picture'].indexOf(listType) > -1 }"
        ></i>
      </label>
      <i class="el-icon-close" v-if="!disabled && !file.fileDelete" @click="$emit('remove', file)"></i>
      <!-- 此为附件删除按钮 -->
      <el-progress v-if="file.status === 'uploading'" :type="listType === 'picture-card' ? 'circle' : 'line'" :stroke-width="listType === 'picture-card' ? 6 : 2" :percentage="parsePercentage(file.percentage)"
      ></el-progress>
    </li>
  </transition-group>
</template>
<script> import ElProgress from "./progress"; export default { data() { return { focusing: false }; }, components: { ElProgress }, props: { files: { type: Array, default() { return []; } }, disabled: { type: Boolean, default: false }, handlePreview: Function, listType: String }, methods: { parsePercentage(val) { return parseInt(val, 10); }, handleClick(file) { this.handlePreview && this.handlePreview(file); }, fileExtName(name) { let iName = ""; if (name && name.indexOf("xls") > -1) { iName = "ic_excel"; } if (name && name.indexOf("fo") > -1) { iName = "ic_folder"; } if (name && name.indexOf("g") > -1) { iName = "ic_img"; } if (name && name.indexOf("pdf") > -1) { iName = "ic_pdf"; } if (name && name.indexOf("ppt") > -1) { iName = "ic_ppt"; } if (name && name.indexOf("doc") > -1) { iName = "ic_word"; } return iName; } } }; </script>

<style lang="scss"> .file_f_name { vertical-align: middle; word-wrap: break-word; word-break: break-all;
} .ext-name-icon { display: inline-block; height: 16px; width: 16px; vertical-align: middle; margin-right: 5px; background: url("../../../assets/images/ic_commonfile.png") no-repeat center center; background-size: 100% 100%; &.ic_excel { background: url("../../../assets/images/ic_excel.png") no-repeat center center; background-size: 100% 100%;
  } &.ic_folder { background: url("../../../assets/images/ic_folder.png") no-repeat center center; background-size: 100% 100%;
  } &.ic_img { background: url("../../../assets/images/ic_img.png") no-repeat center center; background-size: 100% 100%;
  } &.ic_pdf { background: url("../../../assets/images/ic_pdf.png") no-repeat center center; background-size: 100% 100%;
  }`` &.ic_ppt { background: url("../../../assets/images/ic_ppt.png") no-repeat center center; background-size: 100% 100%;
  } &.ic_word { background: url("../../../assets/images/ic_word.png") no-repeat center center; background-size: 100% 100%;
  } } </style> ```

上传组件的api参照官网!!

以上代码本人项目实测!!!真实可靠,请勿随意转载~转载请注明出处~~~谢谢合作!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM