daoji_h5/utils/req.js

569 lines
12 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 接口返回值code说明
// 200=>正常;
// 400=>报错;
// 401=>需要登陆;
// 402=>错误并且弹出报错,报错内容为 error
// 403=>错误并且弹出报错,报错内容为 error(小程序跳转到个人中心)
// 404=>错误并且弹出报错,报错内容为 error(小程序跳转到首页)
var Fly = require("./wx.js") //wx.js为您下载的源码文件
var fly = new Fly; //创建fly实例
var tokenFly = new Fly();
import $api from '@/api/index.js';
import $util from './index.js';
import siteInfo from '../siteinfo.js';
import $store from "@/store/index.js"
// 打印站点信息siteInfo
let allSiteInfo = Object.assign({}, {
time: "2023年03月13日 18:00",
remark: "(test)~ update:sp86~",
}, siteInfo)
import {
networkError,
serverError,
msgError
} from './error.js';
import store from '@/store/index.js';
//添加finally方法,用于指定不管 Promise 对象最后状态如何,都会执行的操作
Promise.prototype.finally = function(callback) {
let P = this.constructor;
return this.then(
value => P.resolve(callback()).then(() => value),
reason => P.resolve(callback()).then(() => {
throw reason
})
);
};
let isW7 = false
let isH5 = false
const formatUrl = function(url) {
let model_name = "longbing_massages_city";
let baseUrl = isW7 ?
`${siteInfo.siteroot}?i=${siteInfo.uniacid}&t=${siteInfo.multiid}&v=${siteInfo.version}&from=wxapp&c=entry&a=wxapp&do=api&core=core2&m=${model_name}&s=${url}&urls=${url}` :
`${siteInfo.siteroot}?i=${siteInfo.uniacid}&m=${model_name}&s=${url}&urls=${url}`
if (isH5) {
baseUrl = `/api?i=${siteInfo.uniacid}&m=${model_name}&s=${url}`
}
return baseUrl
}
//阿里云地址转为本地域名的
const formatImageUrl = function(url) {
return url.includes(siteInfo.siteroot) ? url :
`${formatUrl("card/getImage")}&path=${encodeURIComponent(url)}`
}
//微信小程序登录
const wxLogin = async function() {
let {
query
} = await uni.getLaunchOptionsSync();
let url = formatUrl("index/login")
try {
uni.showLoading({
title: "登录中..."
})
let [providerErr, providerData] = await uni.getProvider({
service: 'oauth',
});
let [loginErr, loginData] = await uni.login({
provider: providerData.provider[0]
});
let {
pid = 0,
coupon_atv_id = 0,
} = query
let login_param = {
code: loginData.code,
pid,
coupon_atv_id,
}
// console.log("login_param==>", login_param);
let d = await tokenFly.post(url, login_param);
let {
code,
data,
error
} = d.data
if (code !== 200) {
uni.hideLoading()
serverError({
code,
msg: error
});
throw d;
}
//登录成功
uni.hideLoading()
$store.commit('updateUserItem', {
key: 'userInfo',
val: data.data
})
$store.commit('updateUserItem', {
key: 'autograph',
val: data.autograph
})
return data;
} catch (e) {
uni.hideLoading()
let {
code,
error
} = e.response.data
if (code !== 200) {
serverError({
code,
msg: error
});
}
return await Promise.reject(e);
}
}
//公众号登录
let H5LoginNum = 0
let pageArr = ['/pages/order']
const gzhLogin = async function() {
let code = $util.getQueryString('code')
let pageUrl = window.location.href
console.log(H5LoginNum, "======H5LoginNum")
if (H5LoginNum == 0 && code) {
code = ''
}
if (code) {
let coupon_atv_id = $util.getQueryString('coupon_atv_id') || 0
let pid = $util.getQueryString('pid') || 0
// console.log("index/webLogin ==>", code, coupon_atv_id, pid)
let url = formatUrl("index/webLogin")
try {
let d = await tokenFly.post(url, {
login_type: 'gzh',
code,
pid,
coupon_atv_id
});
H5LoginNum = 0
let {
code: res_code,
data,
error
} = d.data
if (res_code !== 200) {
uni.hideLoading()
serverError({
code: res_code,
msg: error
});
throw d;
}
//登录成功
uni.hideLoading()
$store.commit('updateUserItem', {
key: 'isGzhLogin',
val: true
})
$store.commit('updateUserItem', {
key: 'userInfo',
val: data.data
})
$store.commit('updateUserItem', {
key: 'autograph',
val: data.autograph
})
return data;
} catch (e) {
uni.hideLoading()
let {
code,
error
} = e.response.data
// console.log("catch e code error=======", code, error)
if (code == 40163) {
let pages = getCurrentPages()
let {
route,
options = {}
} = pages[pages.length - 1]
let routeUrl = $util.getUrlToStr(`/${route}`, options)
let {
userPageType = 1
} = $store.state.user
let pageParam = route === 'pages/mine' ? `?type=${userPageType}` : ``
let loginPage = `${routeUrl}${pageParam}`
let openType = pageArr.includes(loginPage) ? `reLaunch` : `navigateTo`
setTimeout(() => {
$store.commit('updateUserItem', {
key: 'loginPage',
val: loginPage
})
$util.goUrl({
url: `/pages/login`,
openType
})
fly.unlock()
}, 200)
} else {
serverError({
code,
msg: error
});
uni.hideLoading()
}
return await Promise.reject(e)
}
} else {
H5LoginNum = 0
let pages = getCurrentPages()
let {
route,
options = {}
} = pages[pages.length - 1]
let routeUrl = $util.getUrlToStr(`/${route}`, options)
let {
userPageType = 1
} = $store.state.user
let pageParam = route === 'pages/mine' ? `?type=${userPageType}` : ``
let loginPage = `${routeUrl}${pageParam}`
let openType = pageArr.includes(loginPage) ? `reLaunch` : `navigateTo`
$store.commit('updateUserItem', {
key: 'loginPage',
val: loginPage
})
$util.goUrl({
url: `/pages/login`,
openType
})
$util.hideAll()
fly.unlock()
return await Promise.reject("跳转授权===============")
}
}
// app登录
let appLoginNum = 0
const appLogin = async function() {
let {
autograph = '',
appLogin = {},
loginType = 'weixin'
} = $store.state.user
if (appLoginNum == 0 && autograph) {
appLogin = ''
}
// console.log(autograph, "=========================appLogin autograph")
if (appLogin) {
code = ''
let url = formatUrl(loginType == 'weixin' ? 'index/appLogin' : 'index/iosLogin')
try {
let d = await tokenFly.post(url, {
data: appLogin
});
appLoginNum = 0
let {
code: res_code,
data,
error
} = d.data
if (res_code !== 200) {
uni.hideLoading()
serverError({
code: res_code,
msg: error
});
throw d;
}
//登录成功
uni.hideLoading()
$store.commit('updateUserItem', {
key: 'isShowLogin',
val: false
})
$store.commit('updateUserItem', {
key: 'userInfo',
val: data.data
})
$store.commit('updateUserItem', {
key: 'autograph',
val: data.autograph
})
return data;
} catch (e) {
uni.hideLoading()
appLoginNum = 0
let {
code,
error
} = e.response.data
if (code !== 200) {
serverError({
code,
msg: error
});
}
return await Promise.reject(e);
}
} else {
appLoginNum = 0
let pages = getCurrentPages()
let {
route,
options = {}
} = pages[pages.length - 1]
let routeUrl = $util.getUrlToStr(`/${route}`, options)
let {
userPageType = 1
} = $store.state.user
let pageParam = route === 'pages/mine' ? `?type=${userPageType}` : ``
let loginPage = `${routeUrl}${pageParam}`
let openType = pageArr.includes(loginPage) ? `reLaunch` : `navigateTo`
$store.commit('updateUserItem', {
key: 'loginPage',
val: loginPage
})
$util.goUrl({
url: `/pages/login`,
openType
})
$util.hideAll()
fly.unlock()
return await Promise.reject("跳转授权===============");
}
}
//设置超时
fly.config.timeout = 30000;
//设置请求基地址
//给所有请求添加自定义header
fly.config.headers = tokenFly.config.headers = {
"content-type": "application/json"
}
let isapp = 0
// #ifdef APP-PLUS
isapp = 1;
// #endif
// #ifdef H5
isapp = 2;
// #endif
//添加请求拦截器
fly.interceptors.request.use(
async (request) => {
//添加验证token
request.headers['autograph'] = $store.state.user.autograph || '';
request.headers['isapp'] = isapp;
return request;
})
//添加响应拦截器响应拦截器会在then/catch处理之前执行
fly.interceptors.response.use(
async (response) => {
// #ifdef H5
let h5code = $util.getQueryString('code')
console.log(h5code, "=======h5code")
if (h5code && !$store.state.user.autograph && H5LoginNum == 0) {
response.data.code = 401
H5LoginNum++
}
// #endif
//token过期验证
// console.log("response====>", response.request.url.split('&urls=')[1], "=== urls ====>", response.data.code, response)
if (response.data.code != 401) return response;
fly.lock()
//#ifdef MP-WEIXIN
console.log("==> MP-WEIXIN 401")
await wxLogin()
//#endif
//#ifdef H5
console.log("==> H5 401")
if ($store.state.user.autograph) {
let storeArr = ['userInfo', 'mineInfo', 'coachInfo', 'userPageType']
storeArr.map(key => {
$store.commit('updateUserItem', {
key,
val: key == 'coachInfo' ? {
id: -1,
} : key == 'userPageType' ? 1 : ''
})
})
H5LoginNum++
}
await gzhLogin()
//#endif
//#ifdef APP-PLUS
console.log("==> APP-PLUS 401")
if (!$store.state.user.autograph) {
appLoginNum++
}
await appLogin()
//#endif
response.request.headers["autograph"] = $store.state.user.autograph || ''
fly.unlock();
return fly.request(response.request);
},
async (err) => {
console.log(err, "=======fly.interceptors.response.use err");
let {
status = 0,
} = err
$util.hideAll()
networkError({
code: status,
})
//网络错误
return await Promise.reject(err);
}
)
//统一处理请求,satus=200网络正常code=200服务器正常
const httpType = ["post", "get"]
const formatReq = function() {
let req = {};
httpType.forEach((type) => {
req[type] = async function(url, param) {
//构造请求地址
url = formatUrl(url);
let res = await fly[type](url, param)
// console.log(res, "========= formatReq res")
// #ifdef MP-BAIDU
res.data = typeof(res.data) == "string" ? JSON.parse(res.data) : res.data;
// #endif
let {
code,
error,
data
} = res.data
code = code * 1
if (code === 200) return data;
//code!=200抛出错误
$util.hideAll();
if (code == 400 && error) {
console.log(code, error, "code != 200");
msgError({
msg: error
})
}
return await Promise.reject(res.data);
}
})
return req;
}
const req = formatReq();
// 定义上传,picture--代表图片 audio--音频 video--视频,默认picture
const uploadFile = async (url, {
name = "file",
filePath,
contentType = '',
header = {
autograph: $store.state.user.autograph || '',
isapp: isapp
},
formData = {
type: 'picture'
}
} = {}) => {
url = formatUrl(url);
let [resErr, res] = await uni.uploadFile({
url,
filePath,
name,
formData,
header,
})
// console.log(res, "======uploadFile res")
if (res.statusCode != 200) {
$util.hideAll()
networkError();
return await Promise.reject(res);
}
let parseData = JSON.parse(res.data)
//服务器错误
let {
code,
error,
data
} = parseData;
if (code != 200) {
$util.hideAll()
if (code === 401) {
fly.lock()
//#ifdef MP-WEIXIN
console.log("==> MP-WEIXIN 401")
await wxLogin()
//#endif
//#ifdef H5
console.log("==> H5 401")
if ($store.state.user.autograph) {
let storeArr = ['userInfo', 'autograph', 'mineInfo', 'coachInfo', 'userPageType']
storeArr.map(key => {
$store.commit('updateUserItem', {
key,
val: key == 'coachInfo' ? {
id: -1,
} : key == 'userPageType' ? 1 : ''
})
})
H5LoginNum = 0
}
await gzhLogin()
//#endif
//#ifdef APP-PLUS
console.log("==> APP-PLUS 401")
if (!$store.state.user.autograph) {
appLoginNum++
}
await appLogin()
//#endif
} else {
serverError({
code,
msg: error
});
}
return await Promise.reject(res);
}
return data
}
export {
fly,
req,
uploadFile,
formatImageUrl,
formatUrl,
}