You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.2 KiB
125 lines
2.2 KiB
import functions from "@/utils/functions.js"; |
|
import { |
|
getToken, |
|
getRefreshToken, |
|
setToken |
|
} from "@/utils/auth.js"; |
|
|
|
// params拿到开发环境还是线上环境 |
|
const service = (params) => { |
|
|
|
return new Promise((relove, reject) => { |
|
|
|
let result = doRequest(params); |
|
|
|
result.then(res => { |
|
if (res != null) { |
|
relove(res); |
|
} else { |
|
reject(res); |
|
} |
|
}) |
|
|
|
}); |
|
|
|
} |
|
|
|
//请求接口 里面嵌套刷新token |
|
async function doRequest(params) { |
|
|
|
// 加载中的一个动画 |
|
functions.showWaiting(); |
|
|
|
// 设置请求头 |
|
let header = { |
|
"Content-Type": "application/json", |
|
"token": getToken() |
|
} |
|
|
|
// 如果传递了请求头就用 传递的请求头 |
|
if (params.header) { |
|
header = { |
|
...header, |
|
...params.header |
|
}; |
|
} |
|
|
|
// 等待结果 将成功与失败的结果解构 |
|
const [err, success] = await uni.request({ |
|
url: params.url, |
|
data: params.data, |
|
method: params.method, |
|
// 传递模式 以json的方式传递 |
|
dataType: "json", |
|
header: header |
|
}); |
|
|
|
// 结果回来之后 关闭请求的动画 |
|
functions.closeWaiting(); |
|
|
|
if (!err) { |
|
|
|
if (success.statusCode == 200) { |
|
|
|
let data = success.data; |
|
|
|
if (data.code == 200) { |
|
return data.data ? data.data : {}; |
|
} else if (data.code == 203) { |
|
// 如果状态码为203 代表状态码过期 从新发送请求获取token |
|
return refreshTokenRequest(params); |
|
} else if (data.code == 205) { |
|
functions.logout(); |
|
return false; |
|
} else { |
|
functions.error(data.msg); |
|
return null; |
|
} |
|
|
|
} else { |
|
|
|
//请求失败 |
|
functions.error("服务器请求失败"); |
|
return null; |
|
} |
|
|
|
} else { |
|
|
|
//请求失败 |
|
functions.error("服务器请求失败"); |
|
return null; |
|
} |
|
|
|
} |
|
|
|
//刷新token 需要问问 |
|
async function refreshTokenRequest(params) { |
|
// 如果请求不为空 |
|
if (!getRefreshToken()) { |
|
functions.logout(); |
|
return false; |
|
} |
|
|
|
let apiUrl = `${functions.getDomain()}/api/cy-check-sure`; |
|
|
|
const result = doRequest({ |
|
url: apiUrl, |
|
method: "post", |
|
data: {}, |
|
header: { |
|
"Refresh-Token": getRefreshToken() |
|
} |
|
}); |
|
|
|
const newToken = await result; |
|
if (!newToken || !newToken.token) { |
|
functions.logout(); |
|
return false; |
|
} |
|
|
|
setToken(newToken.token); |
|
|
|
return doRequest(params); |
|
} |
|
|
|
export default service;
|
|
|