VUE中element-upload上传前校验xls内容

VUE中element-upload上传前校验xls内容里写自定义目录标题)

VUE中element-upload上传前校验xls内容

一个需求就是在用户点击上传xls文件前对文件内容进行校验,不符合的就不能上传
先安装依赖

npm i xlsx

代码如下

<template>
      <el-upload
        v-model:file-list="fileList"
        class="upload-demo"
        drag
        :action="upUrl"
        multiple
        :headers="headersObj"
        name="files"
        :before-upload="handleChange"
      >
        <img src="@/assets/img/jiaowu.png" alt="" class="img2" />
        <div class="el-upload__text">
          <div><em>点击</em>或将文件拖拽到这里上传(支持批量上传)</div>
          <div style="margin: 3%; font-size: 12px">
            支持扩展名 .cov .xis .xisx
          </div>
          <div style="font-size: 12px">
            (每次上传不能超过50MB,每个企业最大上传数据量200MB)
          </div>
        </div>
        <template #tip>
          <div class="el-upload__tip"></div>
        </template>
      </el-upload>

</template>

<script setup lang="ts">
import { reactive, ref } from 'vue'
import { UploadFilled } from '@element-plus/icons-vue'
import type { UploadProps, UploadUserFile } from 'element-plus'
import LocalCache from '@/utils/cache'
import { read, utils } from 'xlsx'
import { ElMessage } from 'element-plus'
import { useRouter } from 'vue-router'
import { arrayBuffer } from 'stream/consumers'
const route = useRouter()
let search = ref(false)
const clickDate = reactive(route.currentRoute.value.query)
const isActive = ref(true)
const upUrl = process.env.VUE_APP_BASE_API + 'v2/excelImport/fileUpload'
const headersObj = { token: LocalCache.getCache('token') }
const btnChange = (n: number) => {
  if (n === 1) {
    isActive.value = true
  }
  if (n === 2) {
    isActive.value = false
  }
}
const fileList = ref<UploadUserFile[]>([])

const handleChange = (file: any, fileList: any) => {
  let files = { 0: file }
  console.log(files[0].name.toLowerCase())

  if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) {
    ElMessage({
      message: '(上传格式不正确,请上传xls或者xlsx格式)',
      type: 'warning'
    })

    return false
  }
//这里需要返回一个promise因为读取xls是异步的
  return new Promise((resolve: any, reject: any) => {
    readExcel1(files, resolve, reject)
  })
}
// 表格导入
const readExcel1 = (files: any, resolve: any, reject: any) => {
  const fileReader = new FileReader()
  fileReader.onload = (ev: any) => {
    try {
      const data = ev.target.result
      const workbook = read(data, {
        type: 'binary'
      })
      // 取第一张表
      const wsname = workbook.SheetNames[0]
      // 生成json表格内容
      const ws: any = utils.sheet_to_json(workbook.Sheets[wsname])
      let name = files[0].name
      let errData = ''
      let status1 = false
      let status2 = false
      let status3 = false
      let code = ws[1]
      let _year = ws[5]
      let temKeys = Object.keys(code)
      let temKeyTime = Object.keys(_year)
      temKeys.forEach((item) => {
        if (code[item] == LocalCache.getCache('creditCode')) {
          status1 = true
        }
      })
      temKeyTime.forEach((item) => {
        if (_year[item] == clickDate.year) {
          status2 = true
        }
        if (_year[item] == clickDate.month) {
          status3 = true
        }
      })

      if (!status1) {
        errData = '统一社会信用码输入有误'
      }
      if (!status2 || !status3) {
        errData += `,请上传${clickDate.year}年${clickDate.month}月的文件`
      }

      if (status1 && status2 && status3) {
        resolve()
        ElMessage({
          message: `上传成功${name}`,
          type: 'success'
        })
        return
      }

      ElMessage({
        message: `${name}${errData}`,
        type: 'warning'
      })
      reject()

      // 后续为自己对ws数据的处理
    } catch (e) {
      return false
    }
  }
  fileReader.readAsBinaryString(files[0])
}
</script>


</style>



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值