index.js 7.86 KB
/**
 * store
 * RevertURL  记录登陆返回数据路由
 */

const $sinoocean = '$polysoft_'

// let _Private=new Proxy({
//     height:0
// },{
//     get(target,key){return target[key]},
//     set(target,key,val){
//         target[key]=val;
//     }
// })
// let _Private={};
// Object.defineProperty(_Private, "height", {
//     get :()=>{
//         debugger
//     },
//     set :(newValue)=>{
//        debugger
//     },
//     enumerable : true,
//     configurable : true
//   });

class utils {
  constructor() {
    this.lock = false
  }
  //守卫
  Guard() {}
  storeSet(key, val, time) {
    if (!val) {
      return key
    }
    let name = key.includes($sinoocean) ? key : $sinoocean + key
    let opt = {
      key: name,
      val,
      type: this.isType(val),
      createTime: Date.now(),
      time
    }
    sessionStorage.setItem(name, JSON.stringify(opt))
  }
  storeGet(key) {
    let name = key.includes($sinoocean) ? key : $sinoocean + key
    let date = Date.now()
    let data = sessionStorage.getItem(name)
    if (data) {
      let da = JSON.parse(data)
      if (da.time && da.time >= date) {
        this.storeDel(name)
      }
      return da.val
    } else {
      return null
    }
  }
  storeDel(key) {
    if (key && this.isType(key) == 'String') {
      let name = $sinoocean + key

      key.includes($sinoocean)
        ? sessionStorage.removeItem(key)
        : sessionStorage.removeItem(name)
    }
  }
  storeAll() {
    let item = sessionStorage,
      list = []
    for (let i = 0; i < item.length; i++) {
      let keys = sessionStorage.key(i)
      if (keys.includes($sinoocean)) {
        list.push(this.getItem(keys))
      }
    }
    return list
  }
  //常用呢类型判断
  isType(obj) {
    if (obj) {
      return /\[object(.*?)\]/gi
        .exec(Object.prototype.toString.call(obj))[1]
        .trim()
    }
    return 'undefined'
  }

  URL(url = location.search) {
    if (!url) {
      return ''
    }
    return new Function(
      "return {'" +
        (url.includes('?') ? url.substr(1) : url)
          .split('&')
          .join("','")
          .replace(/\=/gi, "':'") +
        "'}"
    )()
  }
  reView(arg) {}
  //处理application/x-www-form-urlencoded 格式参数
  ParseParam(da) {
    let str = ''
    for (let it in da) {
      str += encodeURIComponent(it) + '=' + encodeURIComponent(da[it]) + '&'
    }
    return str.replace(/\&$/gi, '')
  }
  //
  Fetch(opt) {
    
    const { url, ...params } = opt
    if (!url) {
      console.error('url缺失!')
      return
    }

    let requestInfo = {
      method: params['method'] ? params.method : 'POST',
      mode: 'cors',
      cache: 'no-cache',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }
    Object.assign(requestInfo.headers, params.headers)
    let ParamsStr = this.ParseParam(params.data)
    let _URL
    if (requestInfo.method.toLocaleLowerCase() == 'post') {
      _URL = url
      requestInfo.body = ParamsStr
    } else {
      //get请求添加时间戳
      ParamsStr = ParamsStr
        ? `${ParamsStr}&t=${new Date().getTime()}`
        : `t=${new Date().getTime()}`
      _URL = url.includes('?') ? url + '&' + ParamsStr : url + '?' + ParamsStr
    }

    return fetch(_URL, requestInfo)
      .then(res => {
        if (res.status >= 400) {
          return Promise.reject(res)
        }
        return res
          .json()
          .then(arg => {
            return arg
          })
          .catch(e => {
            return Promise.reject({
              ErrorCode: '500',
              Data: requestInfo,
              Message: `服务器错误`,
              url: _URL
            })
          })
      })
      .catch(res => {
        return Promise.reject(res)
        // if (res["ErrorCode"] && res.ErrorCode == "200") {
        //     return res;
        // } else if (res["ErrorCode"] && res.ErrorCode == "401") {
        //     debugger
        // } else if (res["ErrorCode"] && res.ErrorCode == "500") {
        //     return Promise.reject(res)
        // } else {
        //     return Promise.reject(res);
        // }
      })
  }
  //ajax
  Ajax(params) {
    let th = this;
    let { url, ...opt } = params
    return new Promise((resolve, reject) => {
      
      var data = this.ParseParam(opt.data)
      if(opt.method=='get'){
         url =  url.includes("?")? url+=data:url+'?'+data;
      }
      var xhr; 
      if (window.ActiveXObject){
        xhr =new ActiveXObject("Msxml2.XMLHTTP");
      }else{
        xhr = new XMLHttpRequest();
      }
    
      
      xhr.addEventListener('readystatechange', function() {
        if (this.readyState == 4) {
            
         
            switch(th.isType(this.responseText))
            {
              case 'String': resolve(JSON.parse(this.responseText))
            }
          
          // if (this.status == 400) {
          //   //reject(this)

          // } else if (this.status == 401) {
          //   reject(this)
          // } else if (this.status == 200) {
          //   resolve(this.responseText)
          // }
          // console.log(this.responseText);
        }
      })
      xhr.addEventListener('error', e => {
        reject(e)
       // debugger
      })
      xhr.addEventListener('abort', () => {
        reject(e)
       // debugger
      })
      
      xhr.open(opt.method || 'post', url,true)
      // xhr.withCredentials = false;
       xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
       xhr.setRequestHeader('cache-control', 'no-cache')
      // xhr.setRequestHeader('Accept', 'application/json')
      //xhr.setRequestHeader("postman-token", "f26d82e7-48d2-3037-039a-fc92f1ebc3a9");
      if(opt.method=='post'){
        xhr.send(data||null)
      }else{
        xhr.send();
      }
      
    })
  }
  //废弃
  postman(code) {
    var data =
      'client_id=MyWfAppName&grant_type=authorization_code&client_secret=&code=' +
      code

    var xhr = new XMLHttpRequest()
    xhr.withCredentials = true
    xhr.addEventListener('readystatechange', function() {
      if (this.readyState === 4) {
        
        console.log(this.responseText)
      }
    })

    xhr.open(
      'POST',
      'https://workflow-dev.sinoocean-test.com/THRWebApi/passport/oauth/token'
    )
    
    xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
    xhr.setRequestHeader('cache-control', 'no-cache')

    xhr.send(data)
  }

  exportExcel(response, fileName) {
    var blob = new Blob([response], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    })
    var objectUrl = URL.createObjectURL(blob)
    if (objectUrl != null && objectUrl.length < 44) {
      window.navigator.msSaveOrOpenBlob(blob, fileName)
    } else {
      var span = document.createElement('span')
      span.setAttribute('id', 'downFile')
      var aForExcel = document.createElement('a')
      aForExcel.setAttribute('download', fileName)
      aForExcel.setAttribute('href', objectUrl)
      aForExcel.appendChild(span)
      document.getElementById('body').appendChild(aForExcel)
      document.getElementById('downFile').click()
      aForExcel.remove()
    }
  }
}
let setT
function resize(ev) {
  //触发重绘
  if (setT) clearTimeout(setT)
  setT = setTimeout(() => {
    let _h = Math.max(document.body.offsetHeight, 760)
  }, 500)
}

//window.addEventListener("resize",resize,false);
let _utils = new utils();

export default _utils

/**非标准组建 */

if(!('flat' in Array.prototype)){
  
     Array.prototype.flat=function(){
     // console.log('IE',this);
      
          let arr = [];
          let macks =(item)=>{
            
              item.forEach(el => {
                if(Array.isArray(el)){
                  macks(el)
                }else{
                  arr.push(el);
                }
              }); 
          }
          macks(this);
         
          return arr.filter(d=>d!=null);
     }
}