| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- import configdata from './config'
- import cache from './cache'
- import queue from './queue'
- let domainReadyPromise = null
- // 确保已经从后端拿到动态域名配置(只会真实请求一次)
- 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: configdata.isProduction ? 'https://www.bosszan.com/sqx_fast/app/dict/list' : 'https://yizhizan.edccc.cn/sqx_fast/app/dict/list',
- data: {
- type: '路由'
- },
- method: 'GET',
- timeout: 8000,
- 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 兜底
- // 但如果本次没有成功拿到 web_config,需要允许后续请求再次触发拉取(避免首次安装/弱网导致永久不生效)
- const latest = cache.get('web_config')
- if (!latest || !latest.APIHOST) {
- domainReadyPromise = null
- }
- 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, timeout, hideToast) {
- 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
- },
- timeout: timeout ? timeout : 60000,
- 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 != '未进入公司' && !hideToast) {
- 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)
- }
- })
- })
- });
- }
- }
|