Source: packages/UpLoadFile/utils/fileType.js




const typeObjectList = {
  jpg: 'image/jpg',
  png: 'image/png',
  jpeg: 'image/jpeg',
  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  xls: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  ppt: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  pdf: 'application/pdf',
  doc: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  txt: 'text/plain',
  rar: "",
  zip: 'application/x-zip-compressed',
  ofd: 'application/ofd',
}
/**
 * 文件类型分组
 */
const fileTypeList = {
  "图片": ['jpg', 'png', 'jpeg'],
  "文档": ['xlsx', 'xls', 'pptx', 'ppt', 'pdf', 'doc', 'docx', 'txt'],
  "压缩包": ['zip', 'rar'],
  "发票": ['pdf', 'jpg', 'png', 'jpeg', 'doc', 'docx', 'zip', 'rar'],
  "PDF": ['pdf'],
  "委托代征协议": ['pdf','jpg', 'png', 'jpeg'],
  "我的任务":['jpg', 'png', 'jpeg','pdf','xlsx', 'xls', 'pdf', 'doc', 'docx','zip', 'rar' ],
  "": 'all'
}

/**
 * 文件类型图标
 */
const fileIcon = {
  pdf: 'icon-pdf',
  ppt: 'icon-ppt',
  pptx: 'icon-ppt',
  doc: 'icon-word',
  docx: 'icon-word',
  xlsx: 'icon-excel',
  xls: 'icon-excel',
  zip: 'icon-zip',
  rar: 'icon-zip',
  txt: 'icon-txt',
  jpg: 'icon-tupian',
  png: 'icon-tupian',
  jpeg: 'icon-tupian',
  'wz': 'icon-weizhigeshi',
}

/**
 * 文件分组的错误提示
 */
const fileTypeErrList = {
  "图片": '只允许上传jpg,jpeg,png格式的图片',
  "文档": "只允许上传 PDF,DOC,DOCX,XLS,XLSX 类型文件",
  "压缩包": "只允许上传 RAR 类型文件",
  "发票": '只允许上传 PDF,JPG, PNG,JPEG,DOC,DOCX,ZIP,RAR 类型文件',
  "PDF": '只允许上传 PDF 类型文件',
  "委托代征协议": '只允许上传 PDF,JPG, PNG,JPEG 类型文件',
  "我的任务": '只允许上传 PDF,JPG, PNG,JPEG,XLS,XLSX,DOC,DOCX,ZIP,RAR 类型文件',
}
/**
 * 获取文件后缀
 * @returns {string} 返回文件后缀
 */
const getFileSuffix = (filePath) => {
  var startIndex = filePath.lastIndexOf(".");
  if (startIndex != -1)
    return filePath.substring(startIndex + 1, filePath.length).toLowerCase();
  else return "";
}

/**
 * 根据文件后缀获取对应的图标
 * @param {string} filePath
 * @param {string} type 表示是否是不能识别的类型 
 * @param {string} suffix 文件后缀
 * @returns {string} 文件后缀获取对应的图标
 */
const getFielIcon = (filePath, type,suffix) => {
  // console.log('getFielIcon===>',filePath, type,suffix);
  const fileSuffix = suffix|| getFileSuffix(filePath)
  const notData = ['jpg', 'png', 'jpeg']
  let res = fileIcon[fileSuffix]
  if (!res) {
    res = fileIcon['wz']
  }
  if (type === '1' && notData.indexOf(fileSuffix) >= 0) {
    res = 'icon-none'
  }

  return res
}

/**
 * 根据分组名称获取对应的文件后缀
 * @param {*} groupName
 * @returns {boolean} true 表示是对应的后缀 false 表示不是
 */
const getFileGroupName = (fileSuffix, groupName, cardName) => {
  if (Object.prototype.toString.call(groupName) === '[object Object]') {
    const tempgroupName = groupName[cardName]
    if (tempgroupName === '') {
      return true
    }
    if (fileTypeList[tempgroupName].indexOf(fileSuffix) >= 0) {
      return true
    }
  }
  if (Object.prototype.toString.call(groupName) === '[object String]') {
    if (groupName === '') {
      return true
    }
    if (fileTypeList[groupName].indexOf(fileSuffix) >= 0) {
      return true
    }
  }
  return false
}

/**
 * 校验文件类型
 * @param {*} file
 * @param {*} typeNmae
 * @returns {Object} 校验文件类型结果 {checkResult:true,mesg:''}
 */
const checkFileType = (file, typeNmae, cardName) => {
  const { name, type } = file
  const res = {
    checkResult: false,
    mesg: ''
  }
  if (Object.prototype.toString.call(typeNmae) === '[object Object]') {
    // typeNmae 为对象时,并且为每一个cardName指定文件类型时就分别校验
    const temptypeNmae = typeNmae[cardName]
    const tempTypes = fileTypeList[temptypeNmae]
    const tempFileSuffix = getFileSuffix(name)
    if (temptypeNmae === '') {
      res.checkResult = true
      res.mesg = ''
    } else {
      if (tempTypes.indexOf(tempFileSuffix) >= 0) {
        res.checkResult = true
        res.mesg = ''
      } else {
        res.mesg = fileTypeErrList[temptypeNmae]
        res.checkResult = false
      }
    }
  }
  if (Object.prototype.toString.call(typeNmae) === '[object String]') {
    // typeNmae 为字符串时,所有的文件都执行同一个文件类型
    const tempTypes = fileTypeList[typeNmae]
    const tempFileSuffix = getFileSuffix(name)
    if (typeNmae === '') {
      res.checkResult = true
      res.mesg = ''
    } else {
      if (tempTypes.indexOf(tempFileSuffix) >= 0) {
        res.checkResult = true
        res.mesg = ''
      } else {
        res.mesg = fileTypeErrList[typeNmae]
        res.checkResult = false
      }
    }
  }

  return res
}

export default {
  getFileSuffix,
  getFileGroupName,
  getFielIcon,
  checkFileType
}