showFile.vue 3.54 KB
<script lang="ts" setup name="showFile">
import { onUploadFilePreview, onUploadFileDownload } from '@/api/modules/common';

const props = defineProps({
  file: {
    type: Array<any>,
    default: []
  },
  showRemove: {
    type: Boolean,
    default: false,
  }
});

const emits = defineEmits(['deleteFile'])

const handleUploadFileRemove = (file) => {
  emits("deleteFile");
}

</script>

<template>
  <span v-for="(item) in (file || [])" class="item_value" :style="{ 'padding-left': '0px' }">
    <div class="file-operate">
      <template
        v-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'xls' || item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'xlsx' || item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'csv'">
        <img class="file-img" src="../../../assets/images/excel.png" />
      </template>
      <template
        v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'doc' || item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'docx'">
        <img class="file-img" src="../../../assets/images/word.png" />
      </template>
      <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'zip'">
        <img class="file-img" src="../../../assets/images/zip.png" />
      </template>
      <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'rar'">
        <img class="file-img" src="../../../assets/images/RAR.png" />
      </template>
      <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf'">
        <img class="file-img" src="../../../assets/images/PDF.png" />
      </template>
      <template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'png'">
        <img class="file-img" src="../../../assets/images/png.png" />
      </template>
      <template
        v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'">
        <img class="file-img" src="../../../assets/images/jpg.png" />
      </template>
      <div v-if="props.showRemove" :style="{ right: '72px' }" class="file-preview"
        @click="handleUploadFileRemove(item)">删除
      </div>
      <div class="file-name" :style="{ width: showRemove ? 'calc(100% - 150px)' : 'calc(100% - 120px)' }"><ellipsis-tooltip :content="item.name ?? ''" class-name="w100f"
          refName="tooltipOver"></ellipsis-tooltip></div>
      <div :style="{ right: '36px' }"
        v-if="item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1).toLowerCase() == 'jpeg'"
        class="file-preview" @click="onUploadFilePreview(item)">查看</div>
      <div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div>
    </div>
  </span>
</template>

<style lang="scss" scoped>
.file-operate {
  display: flex;
  align-items: center;
  position: relative;

  .file-img {
    width: 24px;
    height: 24px;
  }

  &:hover {
    background-color: #f5f5f5;
  }

  .file-name {
    width: calc(100% - 120px);
    color: var(--el-color-regular);
    margin-left: 4px;
  }

  .file-preview {
    position: absolute;
    cursor: pointer;
    color: var(--el-color-primary);
    margin-right: 8px;
  }
}
</style>