import { getStorage, removeStorage } from '@/starCloud/storage' import { useStarCloudStore } from '@/starCloud/starCloud' import { Result } from '@/starCloud/basic' /* * config * baseUrl: 请求域名 * url: 请求路径 * method: 请求方法 * header: 请求头 * token: 请求token * data: 请求参数 * */ const request = (config) => { const starCloud = useStarCloudStore() let timer return new Promise(async (resolve) => { const baseConfig = starCloud.getConfig() const token = config?.token ? config.token : getStorage('starCloudToken') // 请求地址 const URL = config.baseUrl ? config.baseUrl + config.url : baseConfig.baseUrl + config.url // 默认请求头 const headerDefault = { version: baseConfig.version + '+' + baseConfig.buildNumber } const header = { ...headerDefault, ...config.header } const method = config.method || 'POST' const data = { ...config.data, accessToken: token, clientId: starCloud.clientId } const timestamp = new Date().getTime() // 超时处理 timer = setTimeout(() => { resolve(new Result(Result.Fail.code, {},'网络访问失败,请检查网络是否正常')) }, 3200) uni.request({ url: URL, method, header, data, timeout: 3000, async success (res) { const { statusCode, data } = res if (timer) { clearTimeout(timer) } if (statusCode === 200) { const code = data.errcode const message = data.errmsg if (code === 10003) { removeStorage('starCloudToken') removeStorage('starCloudUser') const { code } = await starCloud.login( starCloud.accountInfo.username, starCloud.accountInfo.password ) if(code === Result.Success.code) { resolve(await request(config)) } } else { resolve({ code, data: data.data, message }) } } else { resolve(new Result(Result.Fail.code, {},'网络访问失败,请检查网络是否正常')) } }, async fail (res) { console.log('网络访问失败', res) if (timer) { clearTimeout(timer) } resolve(new Result(Result.Fail.code, {},'网络访问失败,请检查网络是否正常')) }, async complete (res) { console.log(URL.substring(baseConfig.baseUrl.length + 1), { env: baseConfig.name, url: URL.substring(baseConfig.baseUrl.length + 1), req: config?.data || {}, code: res?.data?.errcode, res: res?.data?.data, token: header?.authorization || '', message: res?.data?.errmsg, duration: new Date().getTime() - timestamp }) } }) }) } export default request