{"version":3,"sources":["tplus-api/../src/api/response-interceptor.ts"],"names":[],"mappings":"AAuLA,QAAA,MAAM,UAAU,sBA+Gf,CAAC;AAEF,eAAe,UAAU,CAAC","file":"response-interceptor.d.ts","sourcesContent":["import User from '../model/User';\nimport serverLog from '../log/ServerLog';\nimport {AXIOS_HTTP_ERROR,TPLUS_HTTP_999,TPLUS_LOGIN_ERROR} from '../log/LogEventIds';\nimport UIConfirm from '../components/UIConfirm';\nimport bizError from  '../bizError';\nimport _findIndex from 'lodash/findIndex';\nimport {stores} from 'mutants-microfx';\nimport {noErrorTips} from '../const/app';\nimport { Toast } from 'antd-mobile';\n\nconst QS = require('qs');\n// import {env} from 'mutants-microfx';\n// const {constant,platform,browser,os} = env;\n\nconst config = {\n  proxy: {\n    'throughProxy': false,\n    'error': {\n      \"10101\": \"连接服务器超时\",\n      \"10107\": \"T+服务器网络不给力，请确认T+云应用下云应用设置-服务器网络连接是否成功\",\n      \"10104\": \"企业id不存在\",\n      \"10106\": \"用户信息认证失败\",\n      \"10108\": \"用户信息认证失败\",\n      \"10109\":\"服务器内部错误\",\n      \"T10108\":\"用户信息认证失败\"\n    }\n  },\n  cia: {\n    'error': {\n      '20109':'账号或密码错误',\n      '20129':'账号或密码错误',\n      '10002':'账号或密码错误',\n      '20024':'密码输入错误次数超过10次，账号被锁定，请十五分钟之后再试！',\n      '10001':'格式错误',\n      '10004':'非空参数错误',\n      '10005':'JSON格式错误',\n      '10006':'appKey错误',\n      '10007':'appSecret错误',\n      '20001':'注册来源不存在',\n      '20119':'账号或密码错误',\n      '20122':'用户昵称被占用',\n      '20123':'用户不在组织内',\n      '20203':'组织的账号被占用',\n      '20204':'企业id不存在',\n      '20231':'企业全称已存在',\n      '20305':'appKey没有访问权限',\n      '20306':'应用不存在',\n      '25015':'未授权的 客户端',\n      '50000':'服务器内部异常',\n      '20911':'友空间服务出现异常，正在紧急修复中，请稍后重试。'\n    }\n  },\n  axios_error:{\n      error_signs:['timeout of '],\n      error_tips:['请求超时,请稍候再试!']\n  },\n  skip_error:[\n      'chanjet.Authorization.Logout'\n  ],\n  login_method:[\n      'chanjet.EAP.GZQ.CSP.GetTPlusToken',\n      'chanjet.MB.MBPortal.GetPortalByAppid'\n  ]\n}\n\nconst errorShow = (message:string,callback? :()=>any) => {\n      UIConfirm.show(message,()=>{\n        callback && callback();\n      });\n}\n\nconst reloginErrorCodes = ['EXSM0001','EXSM0002','EXSM0003','EXSM0004','EXSM0005'];\n// const authReloginErrorCodes = ['EXERROR0001'];//没有权限\n// else if(authReloginErrorCodes.some(reloginErrorCode=>{return reloginErrorCode===tplusErrorCode})){\n//   errorShow(error.Message,()=>{\n//     User.logout();\n//   });\n// }\nconst tplus999Handler = (axios, err) => {\n\n  \n\n  // 处理T+返回的异常\n  const response = err.response;\n  if (response.status === 999) {\n\n      const error = response.data.Error;\n      const tplusErrorCode = error.Code;\n      //上传阿里云日志  登录异常不记录\n      const {data:requestData,baseURL} = err.config;\n      const data = QS.parse(requestData);\n      const apis = JSON.parse(data.Apis);\n      const methodName = apis.Method;\n      if(reloginErrorCodes.some(reloginErrorCode=>{return reloginErrorCode===tplusErrorCode})){\n        errorShow('登录信息异常，请保存当前操作数据后，重新进入应用!',()=>{\n          User.logout(null,false);\n        });\n      }else if('Login1040' === tplusErrorCode){\n        errorShow('可用量正在整理，不能登录，请稍后再试！',()=>{\n          User.logout();\n        });\n      }else if('EXSV0011'=== tplusErrorCode){\n        //提供的服务名称不正确  将异常抛给前端的业务捕获\n        console.error('error.Message======',error.Message);\n      }else if(bizError.indexOf(tplusErrorCode)>-1){\n        //业务异常不做处理\n      }else if(_findIndex(config.login_method , method => method === methodName)>-1){\n        \n        let errorMsg = error && !!error.Message ? error.Message :'登录信息异常，请保存当前操作数据后，重新进入应用!';\n        \n        const eventId = TPLUS_LOGIN_ERROR;\n        const logParam = {baseURL,eventId,bodyData:JSON.stringify(data),errorMsg};\n        serverLog(stores.logStore.logParam.logStore,logParam);\n        \n        errorShow(errorMsg,()=>{\n          if(apis.Args && apis.Args.NoLogout){\n            return;\n          }\n          User.logout(null,false);\n        });\n      }else{\n        if(stores.logStore.isUpload(baseURL)){\n          let bodyData = JSON.stringify(data);\n          if(bodyData.length > 4096){\n            if(data.Apis){\n              bodyData = JSON.stringify({Method:methodName,Body:bodyData.substr(0,4096)});\n            }\n          }\n          const eventId = TPLUS_HTTP_999;\n          const logParam = {baseURL,eventId,bodyData,...error};\n          serverLog(stores.logStore.logParam.logStore,logParam);\n        }\n\n        errorShow(error.Message);\n      }\n  }else{\n    Toast.info('当前网络不可用，请检查网络设置', 1);\n  }\n};\n\nconst ciaErrorHandler = (axios, res) => {\n    var errorMsg = config.cia.error[res.errorCode];\n    if(errorMsg){\n        errorShow(`CIA接口调用异常:${errorMsg},ErrorCode:${res.errorCode}`);\n    }else{\n        let errorMsg = (typeof res == 'object'?JSON.stringify(res):res);\n        errorShow(`CIA接口调用异常:返回结果${errorMsg},ErrorCode:${res.errorCode}`);\n    }\n}\n\nconst cloudProxyHandler = (axios, res)  => {\n  var errorMsg = config.proxy.error[res.code];\n\n  const {targetURL} = window.localStorage;\n  const eventId = TPLUS_LOGIN_ERROR;\n  const logParam = {targetURL,eventId,bodyData:JSON.stringify(res),errorMsg};\n  serverLog(stores.logStore.logParam.logStore,logParam);\n\n  if(exitApp(res.code)){\n      return;\n  }\n        \n  if(errorMsg){\n    errorShow(errorMsg);\n  }else{\n    errorShow('云代理接口调用异常:返回结果'+res);\n  }\n}\n\nconst exitApp = (code:string,error? :string)=>{\n  var msg = config.proxy.error[code];\n  if(msg){\n    if(error){\n      msg = error;\n    }\n    errorShow(msg,()=>{\n      //User.logout();\n    });\n    return true;\n  }\n  return false;\n}\n\nconst middleware = function (axios) {\n    axios.interceptors.response.use(\n     \n        function logResponse(res) {\n          const isSkipService = config.skip_error.some((item)=>{\n            return res.request.responseURL.indexOf(item) > -1;\n          });\n          if(isSkipService){\n            return res;\n          }\n\n          // console.log('%c Request Success:', 'color: #4CAF50; font-weight: bold', res);\n              //setLoading(false);\n              //处理CIA返回的异常  状态码是200\n            if(res.data){\n              if(res.data.hasOwnProperty(\"errorCode\")){\n                  ciaErrorHandler(axios,res.data);\n                  return Promise.reject(res.data);\n              }\n              //处理云代理返回的异常\n              if(res.data.hasOwnProperty(\"code\") && res.config.baseURL.indexOf('cloudproxy01.chanapp.chanjet.com') > -1){\n                  cloudProxyHandler(axios,res.data);\n                  return Promise.reject(res.data);\n              }\n            }\n            return res;\n        },\n\n        function logPromiseError(err) {\n            // const isSkipService = config.skip_error.some((item)=>{\n            //   return res.request.responseURL.indexOf(item) > -1;\n            // });\n            // if(isSkipService){\n            //   return res;\n            // }\n            // console.log('%c Request Error:', 'color: #EC6060; font-weight: bold', err);\n            //处理T+返回的异常\n            if (err&&err.response&&err.response.status === 999) {\n                if(err.response.data&&err.response.data.Error&&err.response.data.Error.Code){\n                  if(exitApp(err.response.data.Error.Code,err.response.data.Error.Message)){\n                    return;\n                  }\n                }\n                tplus999Handler(axios, err);\n                return Promise.reject(err.response.data.Error);\n            }\n            if (/Network Error/.test(err.toString())){\n                const {baseURL} = err.config;\n                const cancelErrorTips = noErrorTips.some((noErrorTip)=>{\n                  return baseURL.indexOf(noErrorTip) > -1;\n                });\n                if(!cancelErrorTips){\n                  Toast.info('网络繁忙，请稍后下拉刷新操作', 1);\n                }\n            }else{\n              const errorMsg = err.message;\n              const {data:requestData,baseURL} = err.config;\n              //当请求参数为空时  也要上传相关日志 帮助分析是哪个接口调用异常\n              let bodyData = '';\n              if(stores.logStore.isUpload(baseURL)){\n                if(!!requestData){\n                  bodyData = JSON.stringify(QS.parse(requestData));\n                }\n                const eventId = AXIOS_HTTP_ERROR;\n                const logParam = {baseURL,eventId,bodyData,errorMsg};\n                serverLog(stores.logStore.logParam.logStore,logParam);\n              }\n\n              //增加对getTplusToken接口的特殊处理，如果出现访问异常，提示用户进行检测\n              try{\n                if(!!requestData){\n                  const data = QS.parse(requestData);\n                  const methodName = JSON.parse(data.Apis).Method;\n                  \n                  if(_findIndex(config.login_method,method=>method === methodName)>-1){\n                    errorShow(config.proxy.error['10107'],()=>{\n                        //User.logout();\n                    });\n                    return;\n                  }\n                }\n              }catch(err){\n                console.error('response-interceptor.logPromiseError=====',err);\n              }\n              \n              \n\n              //将请求框架的提示语转化成中文，方面客户理解\n              const needReTip =  _findIndex(config.axios_error.error_signs,sign=>{\n                return !!errorMsg && errorMsg.indexOf(sign) > -1;\n              });\n\n              //是否需要弹出提示框 某些地方不需要提示出来  比如上传阿里云的错误\n              const cancelErrorTips = noErrorTips.some((noErrorTip)=>{\n                return baseURL.indexOf(noErrorTip) > -1;\n              })\n              if(!cancelErrorTips){\n                //解决部分外围接口报错  没有带请求参数  不影响到主体业务使用  就不显示错误提示框了  暂时先用requestData判断下\n                //主要针对pos 偶发性弹出接口超时的提示  临时的解决方案  后续待改进\n                if(!!requestData){\n                  if(needReTip > -1){\n                    errorShow(config.axios_error.error_tips[needReTip]);\n                  }else{\n                    errorShow(errorMsg);\n                  }\n                }\n              }\n              return Promise.reject(err);\n            }\n        }\n    );\n};\n\nexport default middleware;\n"]}