<template>
    <el-upload ref="uploadRef" :on-preview="previewFile" :limit="1" :on-change="changeFile" :auto-upload="false"
        :data="uploadForm.data">
        <template #trigger>
            <el-button type="primary">选取DBS文件</el-button>
        </template>
        <el-button style="margin-left: 10px;" type="success" @click="uploadDbs">上传DBS数据</el-button>
    </el-upload>
</template>
<script setup>
import store from '@/store'
import { ref, reactive } from 'vue';
import { uploadExcelDbs } from '@/api/excel.js'
import { ElMessage } from 'element-plus'
import { errorBox } from '@/utils/myMessageBox';
import { sizeFormatter } from '@/utils/formatter.js'
import { loading } from '@/utils/loading.js'
import { getHashString } from '@/utils/hashUtils.js'
const file = ref()
var currentHash = ''
const uploadForm = reactive({
    data: {
        fileId: '',
        name: '',
        type: '',
        size: null,
        hash: '',
        userName: store.getters.getUserName
    }
})
const changeFile = (uploadFile) => {
    file.value = uploadFile
    uploadForm.data = {
        fileId: file.value.raw.uid,
        name: file.value.raw.name,
        type: file.value.raw.type,
        size: sizeFormatter(file.value.raw.size),
        hash: getHashString(uploadFile),
        userName: store.getters.getUserName
    }
}
const uploadRef = ref()
const uploadDbs = () => {
    if (uploadForm == undefined || file.value == undefined) {
        errorBox('请选择文件之后再上传')
        return
    }
    if (currentHash != '' && currentHash == uploadForm.data.hash) {
        errorBox('请勿重复上传')
        return
    }
    currentHash = uploadForm.data.hash
    const jsonStr = JSON.stringify(uploadForm.data);
    const blob = new Blob([jsonStr], {
        type: 'application/json'
    });
    let formData = new FormData();
    // 这里很重要 file.value.raw才是真实的file文件，file.value只是一个Proxy代理对象
    formData.append("fileVo", blob);
    formData.append("file", file.value.raw);
    loading.open('导入中...')
    uploadExcelDbs(formData).then(res => {
        loading.close()
        currentHash = ''
        if (res.data.code == 0) {
            ElMessage({
                message: '上传成功',
                type: 'success',
            })
            clearFileInfos()
        } else {
            errorBox(res.data.message)
        }
    }).catch(err => {
        loading.close()
        currentHash = ''
        console.log(err)
        errorBox('上传错误')
    })
}
const clearFileInfos = () => {
    // 清空选择的文件项
    uploadRef.value.clearFiles()
    uploadForm.data = {
        fileId: '',
        name: '',
        type: '',
        size: null,
        hash: '',
        userName: store.getters.getUserName
    }
    file.value = undefined
}
const previewFile = () => {

}
</script>
<style scoped></style>