import { downFile } from '@/api/manage'

/**
 * 文件导入导出 Mixins
 *
 * 接口调用：在 data 中定义 interface 对象，在对象中定义接口名。具体对应关系如下：
 * file: 文件接口
 * @author Matrix
 * @since 2022/09/01
 */
export const FileMixin = {
  data() {
    return {
      interface: {},
      fileParams: {}
    }
  },
  methods: {
    /**
     * 导出/下载 文件
     * @param {String} fileName 文件名称
     * @author Matrix
     * @since 2022/09/01
     */
    handleExportFile(fileName) {
      if (!this?.interface?.file) {
        this.$message.error('请设置 interface.file 属性!')
        return
      }
      if (typeof fileName !== 'string' || !fileName) {
        fileName = '导出文件'
      }
      if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
        this.fileParams['selections'] = this.selectedRowKeys.join(',')
      }
      downFile(this.interface.file, this.fileParams).then(result => {
        if (!result) {
          this.$message.warning('文件下载失败')
          return
        }
        if (typeof window.navigator.msSaveBlob !== 'undefined') {
          window.navigator.msSaveBlob(new Blob([result]), fileName + '.xls')
        } else {
          const url = window.URL.createObjectURL(new Blob([result]))
          const link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
          link.setAttribute('download', fileName + '.xls')
          document.body.appendChild(link)
          link.click()
          document.body.removeChild(link) // 下载完成移除元素
          window.URL.revokeObjectURL(url) // 释放掉blob对象
        }
      })
    }
  }
}
