diff --git a/config.js b/config.js index c37e090..24f2dc2 100644 --- a/config.js +++ b/config.js @@ -24,5 +24,9 @@ module.exports = { url: "" } ] + }, + // 接口替换字符串 + replaceStr: { + '{oss_file_url}': 'https://dy12333.org.cn/api' } } \ No newline at end of file diff --git a/untils/AxiosUtils.js b/untils/AxiosUtils.js index d62574c..e7ad098 100644 --- a/untils/AxiosUtils.js +++ b/untils/AxiosUtils.js @@ -1,205 +1,233 @@ -import { - OpenLoading, - CloseLoading -} from "./Loading"; -import { - BASE_URL, - AIRPORTS -} from "./Constants"; -import website from "../config/website.js" -import { - Base64 -} from 'js-base64' -import store from '@/store/'; -import { - baseUrl -} from '@/config/env.js' - -let showModal = true -/** - * - * @export - * @param {string} url - * @param {*} [data={}] - * @param {*} [config={}] - * @returns {Promise} - */ -export function DoGet(url, data = {}, config = {}) { - return DoAjax({ - url: url, - data, - method: "GET", - dataType: "json" - }, - config - ); -} - -/** - * - * @export - * @param {string} url - * @param {*} [data={}] - * @param {*} [config={}] - * @returns {Promise} - */ -export function DoPost(url, data = {}, config = {}) { - - return DoAjax({ - url: url, - data, - method: "POST", - dataType: "json" - }, - config - ); -} - -export function request(options) { - const params = options.params - if (params) { - let query = '' - for (const key in params) { - if (params[key] !== undefined && params[key] !== null) { - query += `&${key}=${params[key]}` - } - } - query = '?' + query.substring(1) - options.url += query - } - return DoAjax(options) -} - -async function DoAjax(options, config = {}) { - const func = Promisify(uni.request); - - const header = options.headers || {}; - header["Authorization"] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`; - - const token = store.state.user.token; - if (token) { - header[website.tokenName] = "bearer " + token - } - if (baseUrl) { - options.url = baseUrl + options.url - } - options = Object.assign({}, options, { - header - }); - let res = null - try { - res = (await func(options)); - } catch (err) { - console.log({ - err - }) - res = err; - res.data = {} - } finally {} - - // 获取状态码 - const status = res.data.code || res.statusCode; - const statusWhiteList = website.statusWhiteList || []; - let message = res.data.msg || res.data.error_description || '未知错误'; - - //如果在白名单里则自行catch逻辑处理 - if (statusWhiteList.includes(status)) throw res; - //如果是401则跳转到登录页面 - if (status === 401) { - store.dispatch('FedLogOut').then(() => { - GoLogin() - }); - throw new Error(message); - } - // 如果请求为非200否者默认统一处理 - if (status !== 200) { - if (message === 'Bad credentials') { - message = '账号或密码错误' - } - uni.showToast({ - title: message, - icon: 'none' - }); - throw new Error(message); - } - return res; -} - -/** - * 时间格式化 - * @param {*} str - * @param {string} fmt - */ -export function DateFormat(str, fmt = "YYYY-MM-DD HH:mm:ss") { - return str ? moment(str).format(fmt) : "--"; -} - -/** - * 富文本添加域名 - * @export - * @param {string} html - * @returns - */ -export function HtmlImgAddHost(html) { - return html.replace( - / src="\//g, - ` style="width:100% !important" src="${BASE_URL}/` - ); -} - -export function Promisify(func) { - return function(data) { - return new Promise((resolve, reject) => { - func({ - ...data, - success: resolve, - fail: reject - }); - }); - }; -} - -export function GoLogin() { - if (showModal) { - showModal = false - location.href = "https://dy12333.org.cn/h5/" - // uni.showModal({ - // title: "提示", - // content: "您还未登录,点击确认去登录", - // success({ - // confirm - // }) { - // if (confirm) { - // uni.redirectTo({ - // url: "/pages/login/login" - // }); - // } - // showModal = true - // }, - // fail() { - // showModal = true - // } - // }) - } -} - -/** - * 获取服务机场 - * @export - * @param {string[]} list - */ -export function GetServiceIata(...list) { - const dic = new Set(AIRPORTS); - - for (let i = 0; i < list.length; i++) { - if (dic.has(list[i])) return list[i]; - } - - return AIRPORTS[0]; -} - -export async function confirm(options) { - const func = Promisify(wx.showModal); - const res = await func(options); - if (res.confirm !== true) throw new Error(res.cancel); -} +import { + OpenLoading, + CloseLoading +} from "./Loading"; +import { + BASE_URL, + AIRPORTS +} from "./Constants"; +import website from "../config/website.js" +import { + Base64 +} from 'js-base64' +import store from '@/store/'; +import { + baseUrl +} from '@/config/env.js' +import { + replaceStr +} from "../config"; + +let showModal = true +/** + * + * @export + * @param {string} url + * @param {*} [data={}] + * @param {*} [config={}] + * @returns {Promise} + */ +export function DoGet(url, data = {}, config = {}) { + return DoAjax({ + url: url, + data, + method: "GET", + dataType: "json" + }, + config + ); +} + +/** + * + * @export + * @param {string} url + * @param {*} [data={}] + * @param {*} [config={}] + * @returns {Promise} + */ +export function DoPost(url, data = {}, config = {}) { + + return DoAjax({ + url: url, + data, + method: "POST", + dataType: "json" + }, + config + ); +} + +export function request(options) { + const params = options.params + if (params) { + let query = '' + for (const key in params) { + if (params[key] !== undefined && params[key] !== null) { + query += `&${key}=${params[key]}` + } + } + query = '?' + query.substring(1) + options.url += query + } + return DoAjax(options) +} + +async function DoAjax(options, config = {}) { + const func = Promisify(uni.request); + + const header = options.headers || {}; + header["Authorization"] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`; + + const token = store.state.user.token; + if (token) { + header[website.tokenName] = "bearer " + token + } + if (baseUrl) { + options.url = baseUrl + options.url + } + options = Object.assign({}, options, { + header + }); + let res = null + try { + res = (await func(options)); + } catch (err) { + console.log({ + err + }) + res = err; + res.data = {} + } finally {} + + // 获取状态码 + const status = res.data.code || res.statusCode; + const statusWhiteList = website.statusWhiteList || []; + let message = res.data.msg || res.data.error_description || '未知错误'; + + //如果在白名单里则自行catch逻辑处理 + if (statusWhiteList.includes(status)) throw res; + //如果是401则跳转到登录页面 + if (status === 401) { + store.dispatch('FedLogOut').then(() => { + GoLogin() + }); + throw new Error(message); + } + // 如果请求为非200否者默认统一处理 + if (status !== 200) { + if (message === 'Bad credentials') { + message = '账号或密码错误' + } + uni.showToast({ + title: message, + icon: 'none' + }); + throw new Error(message); + } + return transformRepalceString(res); +} + +// 递归替换 url +function transformRepalceString(props) { + if (typeof props !== 'object' || props === null) { + for (const key in replaceStr) { + if (typeof props === 'string') { + props = props.replace(key, replaceStr[key]); + } + } + return props; + } + let result; + if (props instanceof Array) { + result = []; + } else { + result = {}; + } + for (let key in props) { + if (props.hasOwnProperty(key)) { + result[key] = transformRepalceString(props[key]); + } + } + return result; +} + + +/** + * 时间格式化 + * @param {*} str + * @param {string} fmt + */ +export function DateFormat(str, fmt = "YYYY-MM-DD HH:mm:ss") { + return str ? moment(str).format(fmt) : "--"; +} + +/** + * 富文本添加域名 + * @export + * @param {string} html + * @returns + */ +export function HtmlImgAddHost(html) { + return html.replace( + / src="\//g, + ` style="width:100% !important" src="${BASE_URL}/` + ); +} + +export function Promisify(func) { + return function(data) { + return new Promise((resolve, reject) => { + func({ + ...data, + success: resolve, + fail: reject + }); + }); + }; +} + +export function GoLogin() { + if (showModal) { + showModal = false + location.href = "https://dy12333.org.cn/h5/" + // uni.showModal({ + // title: "提示", + // content: "您还未登录,点击确认去登录", + // success({ + // confirm + // }) { + // if (confirm) { + // uni.redirectTo({ + // url: "/pages/login/login" + // }); + // } + // showModal = true + // }, + // fail() { + // showModal = true + // } + // }) + } +} + +/** + * 获取服务机场 + * @export + * @param {string[]} list + */ +export function GetServiceIata(...list) { + const dic = new Set(AIRPORTS); + + for (let i = 0; i < list.length; i++) { + if (dic.has(list[i])) return list[i]; + } + + return AIRPORTS[0]; +} + +export async function confirm(options) { + const func = Promisify(wx.showModal); + const res = await func(options); + if (res.confirm !== true) throw new Error(res.cancel); +} \ No newline at end of file