<template>
  <div class="common-page device-manage">

    <div class="option page-row">
      <!--工具栏-->
      <div class="head-container">
        <!-- 搜索 -->
        <label class="el-form-item-label" style="font-weight: 500;">文件名</label>
        <el-input v-model="query.fileName" clearable size="small" placeholder="请输入文件名称" style="width:180px;"/>
        <label class="el-form-item-label" style="font-weight: 500;">上传时间</label>
        <el-date-picker
          v-model="query.modificationTime"
          type="datetimerange"
          value-format="yyyy-MM-dd HH:mm:ss"
          range-separator="至"
          :default-time="['00:00:00', '23:59:59']"
          start-placeholder="开始日期"
          end-placeholder="结束日期">
        </el-date-picker>
        <el-button size="mini" type="success" icon="el-icon-search" @click="toSearch">搜索</el-button>
        <el-button size="mini" icon="el-icon-refresh" @click="clearLimit">重置</el-button>
      </div>
    </div>

    <!-- 表格 -->
    <div class="panel-bottom page-row">
      <div class="ctin-box">
        <div class="content-within">
          <div class="content-fix">
            <div class="toolbar">
              <el-button slot="left" class="filter-item" size="mini" type="primary" icon="el-icon-upload" @click="uploadVisible=true">上传</el-button>
            </div>
            <div class="content">
              <el-tabs v-model="query.type" @tab-click="loadData">
                <el-tab-pane label="Excel报表" name="excel"></el-tab-pane>
                <el-tab-pane label="三维模型" name="fbx"></el-tab-pane>
              </el-tabs>
              <el-table :data="tableData" v-loading="loading" border style="width:auto">
                <el-table-column prop="fileName" label="文件名" align="center"></el-table-column>
                <el-table-column prop="url" label="文件路由" align="center"></el-table-column>
                <el-table-column prop="modificationTime" label="上传时间" align="center"></el-table-column>
                <el-table-column label="操作" align="center" fixed="right">
                  <template slot-scope="scope">
                    <el-button v-if="query.type==='excel'" size="mini" type="text" icon="el-icon-view" @click="viewTable(scope.row)">在线预览</el-button>
                    <el-button size="mini" type="text" icon="el-icon-download" @click="downloadFile(scope.row)">下载</el-button>
                    <el-button size="mini" type="text" icon="el-icon-delete" @click="toDelete(scope.row)">删除</el-button>
<!--                    <el-progress type="dashboard" :percentage="scope.row.percentage||20" :color="colors"></el-progress>-->
                  </template>
                </el-table-column>
              </el-table>
              <!--分页组件-->
              <el-pagination :total="total" :current-page="page" style="margin-top: 8px;" layout="total, prev, pager, next, sizes" @size-change="sizeChange" @current-change="pageChange"/>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- 表单渲染 -->
    <el-dialog append-to-body :close-on-click-modal="false" :before-close="cancelForm" :visible.sync="visible" :title="title" width="1400px" top="8vh">
      <el-tabs v-model="activeTab" type="border-card" style="margin:0;width:1360px;" @tab-click="handleTabClick">
        <el-tab-pane v-for="(item, index) in tabList" :key="index" :label="item" :name="item"></el-tab-pane>
        <div v-html="tableHtml" style="width:1328px;max-height:66vh;overflow:auto;"/>
      </el-tabs>
      <div slot="footer" class="dialog-footer" style="text-align: center">
        <el-button @click="cancelForm">关闭</el-button>
      </div>
    </el-dialog>
    <el-dialog append-to-body :close-on-click-modal="false" :before-close="cancelForm" :visible.sync="uploadVisible" title="文件上传" width="560px">
      <el-form ref="form" :model="form" size="small" label-width="80px">
        <!--   上传文件   -->
        <el-form-item label="">
          <el-upload
            ref="upload"
            :before-upload="beforeUpload"
            :auto-upload="false"
            :headers="headers"
            :on-change="handleFileChange"
            :on-success="handleSuccess"
            :on-error="handleError"
            action="/api/miningManagement/uploadExcelOrFbx"
            :data="{type:query.type}"
          >
            <div class="eladmin-upload"><i class="el-icon-upload" /> 添加文件</div>
            <div slot="tip" class="el-upload__tip">请上传{{query.type}}文件，且不超过100M</div>
          </el-upload>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="text" @click="cancelForm">取消</el-button>
        <el-button :loading="loading" type="primary" @click="upload">确认</el-button>
      </div>
    </el-dialog>

  </div>
</template>

<script>
import { getToken } from '@/utils/auth'
import {Tools, HttpReq, Dates} from '@/assets/js/common.js';

export default {
  name: 'visitPeople',
  data() {
    return {
      colors: [{color: '#f56c6c', percentage: 20}, {color: '#e6a23c', percentage: 40}, {color: '#5cb87a', percentage: 60}, {color: '#1989fa', percentage: 80}, {color: '#6f7ad3', percentage: 100}],
      title: '',
      fileUploadApi: '',
      headers: { 'Authorization': getToken() },
      visible: false,
      uploadVisible: false,
      loading: false,
      query: {
        type: 'excel',
      },
      page: 1,
      size: 10,
      total: 0,
      tableData: [],
      tabList: ['Sheet1'],
      activeTab: 'Sheet1',
      tableHtml: '',
      form: {},
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.loadData()
    })
  },
  methods: {
    toDelete(item) {
      this.$confirm(`确认删除文件：${item.fileName}?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        HttpReq.truckDispatching.deleteExcelOrFbx({fileName:item.fileName, type:this.query.type}).then((res) => {
          this.$notify({
            title: res.msg,
            type: res.code === 200 ? 'success' : 'error',
            duration: 2500
          })
          if (res.code === 200) {
            this.loadData()
          }
        })
      }).catch(() => {})
    },
    download(text, name, suffix) {
      var link = document.createElement('a');
      link.style.display = 'none';
      link.href = URL.createObjectURL(new Blob([text], { type: this.query.type==='excel'?"application/vnd.ms-excel":"application/octet-stream" }));
      link.setAttribute('download', name + '.' + suffix);
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    },
    downloadFile(item) {
      if(item.isLoading){
        return
      }
      item.isLoading = true
      item.percentage = 0
      let strArr = item.fileName.split('.')
      HttpReq.truckDispatching.downloadExcelOrFbx({url:item.url, type:this.query.type}).then((res) => {
        this.download(res, strArr[0], strArr[1]||'xlsx')
        item.isLoading = false
      })
    },
    upload() {
      this.$refs.upload.submit()
    },
    handleFileChange(file) {

    },
    beforeUpload(file) {
      let isLt2M = true
      isLt2M = file.size / 1024 / 1024 < 100
      if (!isLt2M) {
        this.loading = false
        this.$message.error('上传文件大小不能超过 100MB!')
      }
      return isLt2M
    },
    handleSuccess(res, file, fileList) {
      this.$notify({
        title: res.msg,
        type: res.code === 200 ? 'success' : 'error',
        duration: 2500
      })
      if (res.code === 200) {
        this.cancelForm()
      }
    },
    // 监听上传失败
    handleError(e, file, fileList) {
      const msg = JSON.parse(e.message)
      this.$notify({
        title: msg.message,
        type: 'error',
        duration: 2500
      })
      this.loading = false
    },
    handleTabClick(tab, event) {
      console.log(tab, event);
    },
    viewTable (item) {
      this.visible = true
      this.title = item.fileName
      this.tableHtml = ``
      HttpReq.truckDispatching.scReadExcel({url:item.url}).then((res) => {
        this.$notify({
          title: res.msg,
          type: res.code === 200 ? 'success' : 'error',
          duration: 2500
        })
        if (res.code == 200) {
          let data = res.data
          this.tableHtml+=`<table border="1" bordercolor="black" cellspacing="0" cellpadding="5" style="margin: 0 auto">`
          data.forEach(rowArr=>{
            this.tableHtml+=`<tr>`
            rowArr.forEach(cell=>{
              this.tableHtml+=`<td rowspan="${cell.rowspan}" colspan="${cell.colspan}" style="min-width:150px;text-align:center;">${cell.text}</td>`
            })
            this.tableHtml+=`</tr>`
          })
          this.tableHtml+=`</table>`
        }
      })
    },
    loadData() {
      Object.keys(this.query).length !== 0 && Object.keys(this.query).forEach(item => {
        if (this.query[item] === null || this.query[item] === '') this.query[item] = undefined
      })
      HttpReq.truckDispatching.scFindAllExcelInfo(this.query).then((res) => {
        if (res.code == 200) {
          this.tableData = res.data;
        }
      })
    },
    cancelForm() {
      this.visible = false
      this.uploadVisible = false
      this.$refs.upload.clearFiles()
      this.loadData()
    },
    // 点击搜索
    toSearch() {
      this.page = 1;
      this.loadData();
    },
    // 重置搜索
    clearLimit() {
      this.query = {};
      this.loadData()
    },
    pageChange(e) {
      this.page = e
      this.loadData()
    },
    sizeChange(e) {
      this.page = 1
      this.size = e
      this.loadData()
    }
  },
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
.el-table .warning-row {
  background: oldlace;
}

.el-table .success-row {
  background: #f0f9eb;
}

.cell-input {
  //min-width: 220px;
}

.form-cell {
  margin: 0 !important;
  width: 100%;
}

.grid-content {
  //border: 1px solid rgba(100, 100, 100, 0.1);
  padding: 5px 30px;
}
.cell-box {
  min-width: 120px;
}
.cell-box .el-input__inner {
  border: 1px solid rgba(100, 100, 100, 0.1);
}

.cell-box .el-input.is-disabled .el-input__inner {
  border: 1px solid rgba(100, 100, 100, 0.1);
  background: white;
  cursor: text;
}

.cell-box .el-input.is-disabled .el-input__icon {
  cursor: text;
}

.cell-box .el-icon-arrow-up:before {
  content: '';
}

.mapcontainer {
  height: 30vh;
  width: 680px;
  overflow: hidden;
}
</style>
