<template>
  <div>
    <h3>分割文件(根據書籤)</h3>
    <el-alert
      title="系統將會根據書籤來分割文件, 請在需要分割的位置加上書籤，書籤名稱為分頁1，數字可由1開始持續累加"
      type="info"
    />
    <br>
    <el-form ref="searchForm" size="small" label-width="160px">
      <el-row>
        <el-col :span="12">
          <el-form-item label="Word" prop="business">
            <el-upload
              ref="upload"
              class="upload-demo"
              drag
              :limit="1"
              :file-list="fileList"
              :action="uploadURL"
              :on-change="handelFileChange"
              :on-remove="handleFileRemove"
              :on-exceed="handleExceed"
              :auto-upload="false"
              accept=".doc, .docx"
            >
              <i class="el-icon-upload" />
              <div class="el-upload__text">
                将文件拖到此处，或<em>点击上传</em>
              </div>
            </el-upload>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12" :offset="10">
          <el-button
            style="margin-left: 10px"
            size="small"
            type="success"
            @click="submitUpload"
          >
            开始转换
          </el-button>
        </el-col>
      </el-row>
    </el-form>
  </div>
</template>
<script>
import { splitDocxByBookMark } from '@api/graphApi'
export default {
  name: 'SplitWordForm',
  props:{
    baseUrl:{
      type: String
    }
  },
  data: function() {
    return {
      uploadURL: 'Word/SplitDocxByBookMark',
      fileList: []
    }
  },
  methods: {
    // 上传到服务器
    async submitUpload() {
      console.log(this.fileList)
      if (this.fileList.length <= 0) {
        this.$message.error('请先选择需要上传的文件！')
        return false
      }
      const formData = new FormData()
      this.fileList.forEach(e => {
        formData.append('file', e.raw)
      })
      const response = await splitDocxByBookMark(this.baseUrl, formData)
      if (response) {
        this.fileList = []
        this.$refs.upload.clearFiles()
        const excelFileName = response.data
        this.downloadFile(excelFileName)
      } else {
        this.$refs.upload.abort()
        this.$message.error('下载档案失败!')
      }
    },
    // 文件状态改变时的钩子，添加文件、上传成功和上传失败时都会被调用
    handelFileChange(file, fileList) {
      // 存在文件标识
      let existsFileFlag = false

      for (let i = 0; i < this.fileList.length; i++) {
        if (
          file.name === this.fileList[i].name &&
          file.size === this.fileList[i].size
        ) {
          // 如果存在了，赋值true
          existsFileFlag = true
        }
      }
      // 遍历的这个文件存在当前列表直接结束
      if (existsFileFlag) {
        // 否则不加入
        fileList.pop()
        // console.log(`文件已经存在：${file.name}`)
        // this.handleMsg(`文件已经选择过了：${file.name})`);
        this.$message({
          showClose: true,
          message: `文件已经选择过了：${file.name})`,
          type: 'error'
        })
        return
      }
      this.fileList.push(file)
    },
    handelDetailFileChange(file, fileList) {
      // 存在文件标识
      let existsFileFlag = false

      for (let i = 0; i < this.detailFileList.length; i++) {
        if (
          file.name === this.detailFileList[i].name &&
          file.size === this.detailFileList[i].size
        ) {
          // 如果存在了，赋值true
          existsFileFlag = true
        }
      }
      // 遍历的这个文件存在当前列表直接结束
      if (existsFileFlag) {
        // 否则不加入
        fileList.pop()
        // console.log(`文件已经存在：${file.name}`)
        // this.handleMsg(`文件已经选择过了：${file.name})`);
        this.$message({
          showClose: true,
          message: `文件已经选择过了：${file.name})`,
          type: 'error'
        })
        return
      }
      this.detailFileList.push(file)
    },
    // 文件列表移除文件时的钩子
    handleFileRemove(file, fileList) {
      this.fileList = fileList
    },
    handleDetailFileRemove(file, fileList) {
      this.detailFileList = fileList
    },
    handleExceed(files, fileList) {
      this.$set(fileList[0], 'raw', files[0])
      this.$set(fileList[0], 'name', files[0].name)
      this.$refs['rebateUpload'].clearFiles()// 清除文件
      this.$refs['rebateUpload'].handleStart(files[0])// 选择文件后的赋值方法
    }
  }
}
</script>
