import configdata from './config' import cache from './cache' import queue from './queue' let domainReadyPromise = null ensureDomainReady() // 确保已经从后端拿到动态域名配置(只会真实请求一次) function ensureDomainReady() { // 1)如果本地已经有 web_config,直接返回 const webConfig = cache.get('web_config') if (webConfig && webConfig.APIHOST) { return Promise.resolve() } // 2)已经在请求中了,复用同一个 Promise if (domainReadyPromise) return domainReadyPromise // 3)第一次:去后端拉取域名配置 domainReadyPromise = new Promise((resolve) => { uni.request({ url: 'https://www.bosszan.com/sqx_fast/app/dict/list', data: { type: '路由' }, method: 'GET', success: (res) => { if (res.data && res.data.code === 0 && res.data.data) { const cfg = res.data.data if (cfg?.length && cfg[0].code) { let webConfigData = cfg[0].code == 'test' ? configdata.test : configdata.production cache.put('web_config', webConfigData) } } }, complete: () => { // 无论成功失败,都结束,失败时后面会走 config.js 兜底 resolve() } }) }) return domainReadyPromise } module.exports = { config: function(name) { let info = null if (!name) return info const name2 = name.split('.') const webConfig = cache.get('web_config') // 1. 先看后端下发的动态配置 if (webConfig) { if (name2.length > 1) { info = webConfig[name2[0]] && webConfig[name2[0]][name2[1]] } else { info = webConfig[name] } } // 2. 动态没有,再用静态 config.js 兜底 if (info == null) { if (name2.length > 1) { info = configdata[name2[0]] && configdata[name2[0]][name2[1]] } else { info = configdata[name] } } return info == null ? null : info }, // config: function(name) { // var info = null; // if (name) { // var name2 = name.split("."); //字符分割 // if (name2.length > 1) { // info = configdata[name2[0]][name2[1]] || null; // } else { // info = configdata[name] || null; // } // if (info == null) { // let web_config = cache.get("web_config"); // console.log('web_config', web_config) // if (web_config) { // if (name2.length > 1) { // info = web_config[name2[0]][name2[1]] || null; // } else { // info = web_config[name] || null; // } // } // } // } // return info; // }, post: function(url, data, header) { header = header || "application/x-www-form-urlencoded"; return ensureDomainReady().then(() => { const host = this.config('APIHOST') const fullUrl = host + url let token = uni.getStorageSync("token"); return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "POST", header: { "content-type": header, "token": token }, success: function(result) { if (result.data.code == 401) { // uni.clearStorage(); uni.removeStorageSync("token") uni.removeStorageSync("userId") uni.removeStorageSync("phone") uni.removeStorageSync("openid") uni.removeStorageSync("userName") uni.removeStorageSync("relation") uni.removeStorageSync("relation_id") uni.removeStorageSync("isInvitation") uni.removeStorageSync("zhiFuBao") uni.removeStorageSync("zhiFuBaoName") uni.showToast({ title: '请先登录,以便更好使用!', icon: 'none' }) setTimeout(() => { // 选择合适的路由方法(根据需求切换) // 1. 跳转到登录页,关闭当前页面(推荐,避免回退到失效页面) queue.toLogin() // uni.redirectTo({ // url: '/pages/public/login' // 替换为你的登录页路径 // }); // 2. 如果需要关闭所有页面,强制跳转到登录页(比如退出登录场景) // uni.reLaunch({ // url: '/pages/public/login' // }); // 3. 普通跳转(保留当前页面栈,不推荐此场景) // uni.navigateTo({ // url: '/pages/public/login' // }); }, 500); // 延迟时间必须 ≥ } succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) }) }, postT: function(url, data, header, timeout) { header = header || "application/x-www-form-urlencoded"; return ensureDomainReady().then(() => { const host = this.config('APIHOST1') const fullUrl = host + url let token = uni.getStorageSync("token"); console.log('timeout', timeout) if (token) { return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "POST", timeout: timeout ? timeout : 60000, header: { "content-type": header, "token": token }, success: function(result) { if (result.data.code == 401) { uni.removeStorageSync("token") uni.removeStorageSync("userId") uni.removeStorageSync("phone") uni.removeStorageSync("openid") uni.removeStorageSync("userName") uni.removeStorageSync("relation") uni.removeStorageSync("relation_id") uni.removeStorageSync("isInvitation") uni.removeStorageSync("zhiFuBao") uni.removeStorageSync("zhiFuBaoName") uni.showToast({ title: '请先登录,以便更好使用!', icon: 'none' }) } succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) } else { return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "POST", header: { "content-type": header, }, success: function(result) { succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) } }) }, postJson: function(url, data, header) { header = header || "application/json"; return ensureDomainReady().then(() => { const host = this.config('APIHOST1') const fullUrl = host + url let token = uni.getStorageSync("token"); if (token) { return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "POST", header: { "content-type": header, "token": token }, success: function(result) { if (result.data.code == 401) { uni.removeStorageSync("token") uni.removeStorageSync("userId") uni.removeStorageSync("phone") uni.removeStorageSync("openid") uni.removeStorageSync("userName") uni.removeStorageSync("relation") uni.removeStorageSync("relation_id") uni.removeStorageSync("isInvitation") uni.removeStorageSync("zhiFuBao") uni.removeStorageSync("zhiFuBaoName") uni.showToast({ title: '请先登录,以便更好使用!', icon: 'none' }) } else if (result.data.code != 0 && result.data.msg != '未进入公司') { uni.showToast({ title: result.data.msg || '查询失败', icon: 'none' }) } succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) } else { return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "POST", header: { "content-type": header, }, success: function(result) { succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) } }); }, getT: function(url, data, header) { header = header || "application/x-www-form-urlencoded"; return ensureDomainReady().then(() => { const host = this.config('APIHOST1') const fullUrl = host + url let token = uni.getStorageSync("token"); if (token) { return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "GET", header: { "content-type": header, "token": token }, success: function(result) { if (result.data.code == 401) { uni.removeStorageSync("token") uni.removeStorageSync("userId") uni.removeStorageSync("phone") uni.removeStorageSync("openid") uni.removeStorageSync("userName") uni.removeStorageSync("relation") uni.removeStorageSync("relation_id") uni.removeStorageSync("isInvitation") uni.removeStorageSync("zhiFuBao") uni.removeStorageSync("zhiFuBaoName") uni.showToast({ title: '请先登录,以便更好使用!', icon: 'none' }) } else if (result.data.code != 0 && result.data.msg != '未进入公司') { uni.showToast({ title: result.data.msg || '查询失败', icon: 'none' }) } succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) } else { return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "GET", header: { "content-type": header }, success: function(result) { if (result.data.code != 0 && result.data.msg != '未进入公司') { uni.showToast({ title: result.data.msg || '查询失败', icon: 'none' }) } succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) } }); }, get: function(url, data, header) { header = header || "application/x-www-form-urlencoded"; return ensureDomainReady().then(() => { const host = this.config('APIHOST') const fullUrl = host + url let token = uni.getStorageSync("token"); return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "GET", header: { "content-type": header, "token": token }, success: function(result) { if (result.data.code == 401) { uni.removeStorageSync("token") uni.removeStorageSync("userId") uni.removeStorageSync("phone") uni.removeStorageSync("openid") uni.removeStorageSync("userName") uni.removeStorageSync("relation") uni.removeStorageSync("relation_id") uni.removeStorageSync("isInvitation") uni.removeStorageSync("zhiFuBao") uni.removeStorageSync("zhiFuBaoName") uni.showToast({ title: '请先登录,以便更好使用!', icon: 'none' }) } else if (result.data.code != 0 && result.data.msg != '未进入公司') { uni.showToast({ title: result.data.msg || '查询失败', icon: 'none' }) } succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) }); }, getMsg: function(url, data, header) { header = header || "application/x-www-form-urlencoded"; return ensureDomainReady().then(() => { const host = this.config('APIHOST2') const fullUrl = host + url let token = uni.getStorageSync("token"); return new Promise((succ, error) => { uni.request({ url: fullUrl, data: data, method: "GET", header: { "content-type": header, "token": token }, success: function(result) { if (result.data.code == 401) { uni.removeStorageSync("token") uni.removeStorageSync("userId") uni.removeStorageSync("phone") uni.removeStorageSync("openid") uni.removeStorageSync("userName") uni.removeStorageSync("relation") uni.removeStorageSync("relation_id") uni.removeStorageSync("isInvitation") uni.removeStorageSync("zhiFuBao") uni.removeStorageSync("zhiFuBaoName") uni.showToast({ title: '请先登录,以便更好使用!', icon: 'none' }) } succ.call(self, result.data) }, fail: function(e) { error.call(self, e) } }) }) }); } }