/**
 * 工具类，已注册到全局，使用this.$util调用
 */
var SIGN_REGEXP = /([yMdhsm])(\1*)/g
var DEFAULT_PATTERN = 'yyyy-MM-dd'
import { getAllCommonList, getCommonListWithModule } from '@/api/system'
function padding(s, len) {
  var len = len - (s + '').length
  for (var i = 0; i < len; i++) {
    s = '0' + s
  }
  return s
}

function prevZero(num) {
  return '' + (num > 9 ? num : ('0' + num))
}
export default {
  /**
     * 获取待办业务类型名称
     * @param {string} typeCode 类型编码
     * @returns {string} 待办业务类型名称
     * @author lroyia
     * @since 2021年2月7日 14:06:26
     */
  getTaskBusinessTypeName(typeCode) {
    switch (typeCode) {
      case '5':
        return '企业经营异常名录列入'
      case '6':
        return '企业经营异常名录异议'
      case '7':
        return '企业经营异常名录信用修复'
      case '11':
        return '个体户经营异常状态标记'
      case '12':
        return '个体户经营异常状态信用修复'
      case '13':
        return '农专社经营异常名录列入'
      case '14':
        return '农专社经营异常名录信用修复'
      case '55':
        return '严重违法失信名单拟列入'
      case '15':
        return '严重违法失信名单列入'
      case '16':
        return '严重违法失信名单异议'
      case '17':
        return '严重违法失信移出'
      case '20':
        return '移出异常名录异议'
      case '27':
        return '行政处罚修复'
      case '30':
        return '照面信息异议反馈'
      case '31':
        return '撤销登记案件'
      case '32':
        return '问题处置反馈'
      case '33':
        return '严重违法失信名单信用修复'
      case '36':
        return '信用风险异议申请'
      case '40':
        return '列异勘误'
      case '41':
        return '列严勘误'
      case '42':
        return '批量吊销勘误'
      case '51':
        return '批量吊销'
      case '52':
        return '撤销'
      case '53':
        return '复议'
      case '54':
        return '诉讼'
      case '61':
        return '联合惩戒锁定'
      case '62':
        return '联合惩戒解锁'
      case '66':
        return '现场核查'
      case '71':
        return '企业地址批量列入'
      case '72':
        return '个体户地址批量列入'
      case '73':
        return '农合地址批量列入'
      case '81':
        return '录入处理结果'
      case '82':
        return '撤销撤销案件'
      case '83':
        return '批量撤销登记'
      case '84':
        return '撤销变更案件'
      case '85':
        return '变更录入结果'
      case '86':
        return '撤销撤销变更案件'
      case '87':
        return '撤销注销案件'
      case '88':
        return '注销录入结果'
      case '89':
        return '撤销撤销注销案件'
      case '91':
        return '批量注销'
      default:
        return '未知业务类型'
    }
  },
  /**
     * 获取待办节点名称
     * @param {string} nodeId 状态码
     * @returns {string} 业务状态名称
     * @author lroyia
     * @since 2021年2月7日 15:38:47
     */
  getTaskNodeName(nodeId) {
    switch (nodeId) {
      // 异常名录 begin
      case 'exptlistEnter':
        return '待受理'
      case 'clueReturn':
        return '线索回退'
      case 'handleExptlist':
        return '待审核'
      case 'approvelist':
        return '待审批'
      case 'endExptlist':
        return '审批通过'
      case 'overExptlist':
        return '审批不通过'
      case 'acceptDissentEnter':
        return '待受理'
      case 'handleDissentAccept':
        return '待审批'
      case 'approveDissent':
        return '待受理'
      case 'approveDissentAccept':
        return '待受理'
      case 'approveDissentReview':
        return '待审核'
      case 'handleDissentApprove':
        return '待审批'
      case 'endDissent':
        return '审批通过'
      case 'overDissent':
        return '审批不通过'
      case 'overFinish':
        return '结束流程'
        // 异常名录 end
        // 严重违法 begin
      case 'serIllegalEnter':
        return '待受理'
      case 'handleSerIllegal':
        return '待审核'
      case 'approveSerIllegal':
        return '待审批'
      case 'endSerIllegal':
        return '审批通过'
      case 'overSerIllegal':
        return '审批不通过'
      case 'feedbackEnter':
        return '待受理'
      case 'handleFeedback':
        return '待审核'
      case 'endFeedback':
        return '审批通过'
      case 'overFeedback':
        return '审批不通过'
      case 'overKwFinish':
        return '结束流程'
        // 严重违法 end
        // 冒用他人身份 begin
      case 'startAccept':
        return '登记-待受理'
      case 'handleCancel':
        return '登记-待审核'
      case 'approvalCancel':
        return '登记-待审批'
      case 'cancelShow':
        return '公示中'
      case 'resultAddEnter':
        return '结果录入-待受理'
      case 'handleResultAdd':
        return '结果录入-待审核'
      case 'approvalResultAdd':
        return '结果录入-待审批'
      case 'endCase':
        return '审批通过'
      case 'handleCase':
        return '立案经办'
      case 'overCase':
        return '审批不通过' // 不同意
      case 'cancelCase':
        return '结束流程'
        // 冒用他人身份 end
      // 撤销案件录入处理结果 begin
      case 'startLrAccept':
        return '录入-待受理'
      case 'approvalLrCancel':
        return '录入-待审批'
      case 'endLrCase':
        return '录入-已完成'
      // 撤销案件录入处理结果 end
      // 撤销撤销案件 begin
      case 'startCxAccept':
        return '撤销-待受理'
      case 'handleCancelCx':
        return '撤销-待审核'
      case 'approvalCancelCx':
        return '撤销-待审批'
      case 'endApprovalCancel':
        return '撤销-已完成'
      case 'overCxFinish':
        return '撤销-经办结束'
      // 撤销撤销案件 end
        // 批量吊销 begin
      case '0': return '线索录入'
      case '1': return '立案审批-待受理'
      case '2': return '立案审批-待审核'
      case '3': return '立案审批-待审批'
      case '4' : return '调查与听证-待受理'
      // case '5' : return '调查-待审核'
      // case '6' : return '调查-待审批'
      // case '7' : return '听证告知-待受理'
      case '8' : return '调查与听证-待审核'
      case '9' : return '调查与听证-待审批'
      case '10' : return '行政处罚决定-待受理'
      case '11' : return '行政处罚决定-待审核'
      // case '12' : return '处罚决定-待法规部门审查'
      case '13' : return '处罚决定-待审批'
      case '14' : return '归档'
      // case '15' : return '送达-待审核'
      // case '16' : return '送达-待审批'
      case '20' : return '已归档'
      case '22' : return '案件终结'
      case '24' : return '调查与听证-法规部门分派'
      case '25' : return '调查与听证-法规部门经办'
      case '26' : return '调查与听证-法规部门审核'
      case '27' : return '行政处罚决定-法规部门分派'
      case '28' : return '行政处罚决定-法规部门经办'
      case '29' : return '行政处罚决定-法规部门审核'
      case '31' : return '公告待受理'
      case '32' : return '公告待审核'
      case '33' : return '公告待审批'
      case '34' : return '注销待受理'
      case 'endRevoke' : return '审批通过'
      case 'overRevoke' : return '审批不通过'
        // 批量吊销 end
        // 撤销复议诉讼 begin
      case 'revCancelEnter' : return '待受理'
      case 'handleRevCancel' : return '待审核'
      case 'approveRevCancel' : return '待审批'
      case 'endRevCancel' : return '审批通过'
      case 'overRevCancel' : return '审批不通过'
        // 撤销复议诉讼 end
        // 联合惩戒 begin
      case 'punishEnter' : return '待受理'
      case 'handlePunish' : return '待审核'
      case 'reviewPunish' : return '待审批'
      case 'approvePunish' : return '待审批'
      case 'endPunish' : return '审批通过'
      case 'overPunish' : return '审批不通过'
        // 联合惩戒 end
      // 年报公示反馈 begin
      case 'annualDissentEnter':
        return '待受理'
      case 'handleAnnualDissent':
        return '待审核'
      case 'approveAnnualDissent':
        return '待审批'
      case 'endAnnualDissent':
        return '结束-同意'
      case 'overAnnualDissent':
        return '结束-不同意'
      case 'revokeAnnualDissent':
        return '撤销'
      case 'accept':
        return '待受理'
      case 'review':
        return '待审核'
      case 'overNullify':
        return '作废'
      case 'examine':
        return '待审批'
      case 'endExamineSuccess':
        return '审批通过'
      case 'bureauExamineSuccess':
        return '待送市局办理'
      case 'examineSuccess':
        return '待归档'
      case 'endArchives':
        return '审批通过'
      case 'endExamineFail':
        return '审批不通过'
      case 'end' :
        return '办结'
      // 年报公示反馈 end
      // 市场所协同现场核查 start
      case 'startInspect' :
        return '待核查'
      case 'bak-startInspect' :
        return '回退待核查'
      case 'endInspect' :
        return '核查完成'
      // 市场所协同现场核查 end
      case 'endRemPunish' :
        return '办结'
      // 批量撤销登记 start
      case 'startTZAccept' :
        return '听证经办'
      case 'handleCancelTZ' :
        return '听证审核'
      case 'approvalCancelTZ' :
        return '听证审批'
      case 'startDJAccept' :
        return '经办'
      case 'handleCancelDJ' :
        return '审核'
      case 'approvalCancelDJ' :
        return '审批'
      case 'endApprovalplcx' :
        return '结束流程'
      case 'overPlCxFinish' :
        return '结束流程'
      // 批量撤销登记 end
      default:
        return '未知节点状态'
    }
  },
  /**
     * 是否为空字串
     * @param {string} str 源字符串
     * @returns boolean
     * @author lroyia
     * @since 2021年2月19日 15:14:20
     */
  isEmpty(str) {
    return !str || str.length === 0 || str === null || str === 'null'
  },
  /**
     * 是否为非空字串
     * @param {string} str 字符串
     * @returns boolean
     * @author lroyia
     * @since 2021年2月19日 15:15:23
     */
  isNotEmpty(str) {
    return !this.isEmpty(str)
  },
  /**
     * element-ui的table对象反选
     * @param {el-table} table
     * @author lroyia
     * @since 2021年3月11日 10:34:20
     */
  toggleSelect(table) {
    const selection = []
    table.selection.forEach(each => {
      selection.push(each)
    })
    table.toggleAllSelection()
    setTimeout(() => {
      table.$nextTick(() => {
        selection.forEach(each => {
          table.toggleRowSelection(each, false)
        })
      })
    }, 50)
  },
  formatDate: {
    format: function(date, pattern) {
      pattern = pattern || DEFAULT_PATTERN
      return pattern.replace(SIGN_REGEXP, function($0) {
        switch ($0.charAt(0)) {
          case 'y':
            return padding(date.getFullYear(), $0.length)
          case 'M':
            return padding(date.getMonth() + 1, $0.length)
          case 'd':
            return padding(date.getDate(), $0.length)
          case 'w':
            return date.getDay() + 1
          case 'h':
            return padding(date.getHours(), $0.length)
          case 'm':
            return padding(date.getMinutes(), $0.length)
          case 's':
            return padding(date.getSeconds(), $0.length)
        }
      })
    },
    parse: function(dateString, pattern) {
      var matchs1 = pattern.match(SIGN_REGEXP)
      var matchs2 = dateString.match(/(\d)+/g)
      if (matchs1.length === matchs2.length) {
        var _date = new Date(1970, 0, 1)
        for (var i = 0; i < matchs1.length; i++) {
          var _int = parseInt(matchs2[i])
          var sign = matchs1[i]
          switch (sign.charAt(0)) {
            case 'y':
              _date.setFullYear(_int)
              break
            case 'M':
              _date.setMonth(_int - 1)
              break
            case 'd':
              _date.setDate(_int)
              break
            case 'h':
              _date.setHours(_int)
              break
            case 'm':
              _date.setMinutes(_int)
              break
            case 's':
              _date.setSeconds(_int)
              break
          }
        }
        return _date
      }
      return null
    }
  },

  /**
     * 获取n天后的日期
     * @param {number} n 为0时当前日期
     */
  getDate(n) {
    var ss = 24 * 60 * 60 * 1000 // 一天的毫秒数86400
    var timestamp = new Date().getTime() // 获取当前时间戳
    var date1 = new Date(ss * n + timestamp) // 加上n天的国际标准日期
    var sDate = this.formatDate.format(date1, 'yyyy-MM-dd')
    return sDate
  },
  /**
     * 获取n天后的日期
     * @param {number} n 为0时当前日期
     */
  getDateByDate(date, n) {
    var timestamp = new Date(Date.parse(date, 'yyyy-MM-dd')).getTime()
    var ss = 24 * 60 * 60 * 1000 // 一天的毫秒数86400
    var date1 = new Date(ss * n + timestamp) // 加上n天的国际标准日期
    var sDate = this.formatDate.format(date1, 'yyyy-MM-dd')
    return sDate
  },
  /**
     * 后端localDateTime转字符串
     * @param {object} date localDateTime
     */
  localDateTimeFormat(date) {
    if (!date || !date.chronology) return
    return date.yeear + '-' + prevZero(date.monthValue) + '-' + prevZero(date.dayOfMonth) + ' ' + prevZero(date.hour) + ':' + prevZero(date.minute) + ':' + prevZero(date.second)
  },
  /**
     * 后端localDate转字符串
     * @param {object} date localDateTime
     */
  localDateFormat(date) {
    if (!date || !date.chronology) return
    return date.yeear + '-' + prevZero(date.monthValue) + '-' + prevZero(date.dayOfMonth)
  },
  getGuid() {
    function S4() {
      return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
    }
    return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4())
  },
  /**
   * sDate和当前日期相差天数
   * @param {Date} sDate 日期参数yyyy-MM-dd
   * @returns 相差天数
   */
  DateDiff(sDate) { // sDate和当前日期相差天数 sDate-当前
    // var aDate, oDate1, oDate2, iDays
    // aDate = sDate.split('-')
    // oDate1 = new Date(aDate[0], aDate[1], aDate[2])// 转换为07-14-2021格式
    // const yy = new Date().getFullYear()
    // const mm = new Date().getMonth() + 1
    // const dd = new Date().getDate()
    // oDate2 = new Date(yy, mm, dd)
    // iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24)// 把相差的毫秒数转换为天数
    // return iDays
    var startDate = Date.parse(sDate)
    var endDate = Date.parse(new Date())
    var days = parseInt(Math.abs(endDate - startDate) / (1 * 24 * 60 * 60 * 1000))
    return days
  },
  /**
   * 打包json对象至formData
   * @param {object} data json对象数据
   * @author lroyia
   * @since 2021年4月20日 17:51:19
   */
  packForm(data) {
    const form = new FormData()
    if (data) {
      for (const key in data) {
        const each = data[key]
        if (!each) continue
        if (typeof each === 'object') {
          for (const k in each) {
            form.append(`${key}[${k}]`, each[k])
          }
        } else {
          form.append(key, each)
        }
      }
    }
    return form
  },
  /**
   * 判断对象或数组中是否存在该值
   * @param {object|Array} objArr 对象或数组
   * @param {*} value 值
   * @author lroyia
   * @since 2021年5月12日 10:04:03
   */
  existValue(objArr, value) {
    if (!objArr) return false
    for (const key in objArr) {
      if (objArr[key] === value) {
        return true
      }
    }
    return false
  },
  /**
   * 枚举数组进行匹配，返回匹配到的值
   * @param {*} list  枚举数组 [{value:''，label:''}]
   * @param {*} value 进行匹配的value
   * @returns 匹配到的值
   */
  enumFormatter(list, value) {
    let name = ''
    list.forEach(each => {
      if (each.value === value) {
        name = each.label
      }
    })
    return name
  },
  /**
   * 是否为统一码
   */
  isUscc(str) {
    if (this.isNotEmpty(str)) {
      const str1 = str.trim()
      return str1.length === 18
    }
    return false
  },
  getCommonWords(userId) {
    const list = []
    getAllCommonList(userId).then(res => {
      if (res.data.length > 0) {
        res.data.forEach(each => {
          list.push({
            value: each.verifycommonid,
            label: each.commonlanguage,
            tag: each.tag,
            module: each.module
          })
        })
      }
    })
    return list
  },
  getCommonWordsWithModule(userId, module) {
    const list = []
    getCommonListWithModule(userId, module).then(res => {
      if (res.data.length > 0) {
        res.data.forEach(each => {
          list.push({
            value: each.verifycommonid,
            label: each.commonlanguage,
            tag: each.tag,
            module: each.module
          })
        })
      }
    })
    return list
  },
  getEntstatusList(){
    return [
      {
        value: '002001',
        label: '开业登记中'
      }, {
        value: '003',
        label: '已开业'
      }, {
        value: '003001',
        label: '待迁入'
      }, {
        value: '003004',
        label: '停业'
      }, {
        value: '003006',
        label: '清算中'
      }, {
        value: '010',
        label: '已迁出企业'
      }
    ]
  }
}
