• wangxl's avatar
    3333 · f5ae7c8c
    wangxl authored
    f5ae7c8c
documentView.vue 2.17 KB
<template>
  <div class="file_doc_v">
    <div>
      <a class="ant-dropdown-link dlw" style="width: calc(100% - 4px);margin-left:6px;display: block;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;" :href="fileUrl" :download="fileName">
        <a-tag :color="enums.fileColor[getFileExtension(fileName).toLowerCase()]" class="file_name" :title=" fileName" style="cursor: pointer;">{{ fileName }}</a-tag>
      </a>
    </div>
    <a-button v-show="isOpen" shape="circle" size="small" icon="search" @click="FileView()" class="btn" style="margin: 0 2px;" />
    <a-modal v-model="visibleFileView" :title="'[' + fileName + '] 文件查看'" width="1000px" :dialog-style="{ top: '10%' }" :footer="null" destroyOnClose>
      <preview-file v-model="fileUrl" :fileName="fileName"></preview-file>
    </a-modal>
  </div>
</template>

<script>
import { checkImageFileType, checkDocumentFileType, getFileExtension, enums } from "@/views/utils/common"
import previewFile from '@/views/components/common/previewFile'

export default {
  name: 'documentView',
  components: {
    previewFile
  },
  data () {
    return {
      visibleFileView: false,
      enums: enums,
    };
  },
  props: {
    fileUrl: {
      type: String,
      default () {
        return null;
      },
    },
    fileName: {
      type: String,
      default () {
        return null;
      },
    },
    imageArray: {
      type: Array,
      default () {
        return []
      }
    }
  },
  computed: {
    isOpen: function () {
      return checkDocumentFileType(this.fileName)
    }
  },
  methods: {
    getFileExtension,
    FileView () {
      if (checkImageFileType(this.fileName)) {//文件为图片
        this.$viewerApi({ images: this.imageArray })
      } else {
        if (checkDocumentFileType(this.fileName))
          this.visibleFileView = true
      }
    },
  }
};
</script>
<style scoped lang="less">
.file_doc_v {
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  > div:nth-child(1) {
    max-width: calc(100% - 20px);
  }
  .ant-tag-blue {
    background: none !important;
  }
  .ant-tag {
    display: inline !important;
    border:0 !important;
    font-size: 14px;
  }
}
</style>