request.uts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import { LogOut } from '@/store'
  2. import {globalConfig} from '@/config'
  3. import { getToken } from '@/utils/auth'
  4. import errorCode from '@/utils/errorCode'
  5. import { toast, showConfirm, tansParams } from '@/utils/common'
  6. const request = (cfg:UTSJSONObject):Promise<UTSJSONObject> => {
  7. // 是否需要设置 token
  8. let isToken:boolean=true
  9. let header:UTSJSONObject={}
  10. let cfgMap:Map<string,any>=cfg.toMap() as Map<string,any>
  11. if(cfg.toMap().has("header")&&cfg.getJSON("header")!=null){
  12. header=cfg.getJSON("header") as UTSJSONObject
  13. if(header.toMap().has("isToken")&& header.getBoolean("isToken") == false){
  14. isToken=header.getBoolean("isToken") as boolean
  15. }
  16. }
  17. const token:string=getToken()
  18. if (token!=null&&token!="" && isToken) {
  19. header.set('Authorization','Bearer ' + token)
  20. }
  21. let url:string=""
  22. if(cfgMap.has("url")&&cfg.getString("url")!=""&&cfg.getString("url")!=null){
  23. url=cfg.getString("url") as string
  24. }
  25. if (cfgMap.has("params")&&cfg.getJSON("params")!=null) {
  26. let paramsJson:UTSJSONObject=cfg.getJSON("params") as UTSJSONObject
  27. url+= '?' + tansParams(paramsJson)
  28. url = url.slice(0, -1)
  29. }
  30. let method:string="get"
  31. if(cfgMap.has("method")&&cfg.getString("method")!=""&&cfg.getString("method")!=null){
  32. method=cfg.getString("method") as string
  33. }
  34. let baseUrl:string=globalConfig.baseUrl
  35. if(cfgMap.has("baseUrl")&&cfg.getString("baseUrl")!=""&&cfg.getString("baseUrl")!=null){
  36. baseUrl=cfg.getString("baseUrl") as string
  37. }
  38. let timeout:number = 10000
  39. if(cfgMap.has("timeout")&&cfg.getString("timeout")!=null){
  40. timeout=cfg.getNumber("timeout") as number
  41. }
  42. let data:any|null=null;
  43. if(cfgMap.has("data")&&cfg.getAny("data")!=null){
  44. data=cfg.getAny("data") as any
  45. }
  46. return new Promise((resolve, reject) => {
  47. uni.request<any>({
  48. method,
  49. timeout,
  50. url: baseUrl + url,
  51. data,
  52. header,
  53. dataType: 'json',
  54. success:(res:RequestSuccess<UTSJSONObject>) => {
  55. const data:UTSJSONObject=res.data as UTSJSONObject
  56. const dataMap:Map<string,any>=data.toMap() as Map<string,any>
  57. let code:number=200
  58. if(dataMap.has("code")&&data.getNumber("code")!=null){
  59. code=data.getNumber("code") as number
  60. }
  61. let msg:string|null=errorCode[code] as string|null
  62. if(msg==""||msg==null){
  63. msg=data.getString("msg") as string|null
  64. }
  65. if(msg==""||msg==null){
  66. msg=errorCode['default'] as string
  67. }
  68. if (code === 401) {
  69. showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then((res0:ShowModalSuccess) => {
  70. if (res0.confirm) {
  71. LogOut().then(() => {
  72. uni.reLaunch({ url: '/pages/login' })
  73. })
  74. }
  75. })
  76. reject('无效的会话,或者会话已过期,请重新登录。')
  77. } else if (code === 500) {
  78. toast(msg)
  79. reject('500')
  80. } else if (code !== 200) {
  81. toast(msg)
  82. reject(code)
  83. }
  84. resolve(data)
  85. },
  86. fail:(error:RequestFail) => {
  87. let { errCode,errMsg } = error
  88. switch(errCode){
  89. case 5:
  90. errMsg='接口超时'
  91. break
  92. case 1000:
  93. errMsg='服务端系统错误'
  94. break
  95. case 100001:
  96. errMsg='json数据解析错误'
  97. break
  98. case 100002:
  99. errMsg="错误信息json解析失败"
  100. break
  101. case 600003:
  102. errMsg="网络中断"
  103. break
  104. case 600009:
  105. errMsg="URL格式不合法"
  106. break
  107. case 602001:
  108. errMsg="request系统错误"
  109. break
  110. }
  111. toast(errMsg)
  112. reject(error)
  113. }
  114. } as RequestOptions<any>)
  115. })
  116. }
  117. export default request