UNPKG

tplus-api

Version:

tplus api invoke

1 lines 11.5 kB
{"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"]}