From ff52ea040c49f33c6cb84cdda2deb75c637bc545 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Wed, 20 Jul 2022 11:37:35 +0800 Subject: [PATCH] 变更网络检测图片地址 --- bases/HostBoot.js | 133 +++++++++++++++++++++++++++++--------------- 1 files changed, 87 insertions(+), 46 deletions(-) diff --git a/bases/HostBoot.js b/bases/HostBoot.js index 3434849..6907708 100644 --- a/bases/HostBoot.js +++ b/bases/HostBoot.js @@ -5,6 +5,7 @@ import project from '@project'; import { Tools } from '@components/common/Tools'; +import { $localStorage } from '@components/common/LocalStorage'; export class HostBoot { @@ -14,23 +15,26 @@ constructor() { this._data = { // 可用主机列表 - hostList: { ...project.host.hosts }, + hostList: { + ...project.host.hosts, + }, // 当前主机 activeHost: {}, - defaultHostName: '', + // 默认服务类型 + defaultHostType: '', }; } /** - * 创建主机地址 - * @param {string} hostName - * @param {string} [isDefault=false] + * 创建主机类型 + * @param {string} typeName + * @param {string} [isDefault=''] */ - createHost(hostName, isDefault = false) { + createHostType(typeName, isDefault = '') { if (isDefault === 'default') { - this._data.defaultHostName = hostName; + this._data.defaultHostType = typeName; } - const defaultTypeName = this.isDevMod() ? project.host.devType : project.host.serverType; + const defaultHostName = this.isDevMod() ? project.host.devHost : project.host.buildHost; // 网页模式 if (process.env.TARO_ENV === 'h5') { // 如果网址参数有指定服务器 @@ -41,81 +45,108 @@ const portal = server.split('//')[0]; const domain = server.split('//')[1].split('/')[0]; const host = portal + '//' + domain; - this._data.activeHost[hostName] = { - typeName: this._matchTypeName(host), + this._data.activeHost[typeName] = { + name: this._matchHostName(host), host, + type: typeName, }; } // 如果有匹配服务器,使用指定的服务器地址 if (typeof this._data.hostList[server] !== 'undefined') { - this._data.activeHost[hostName] = { - typeName: server, + this._data.activeHost[typeName] = { + name: server, host: this._data.hostList[server], + type: typeName, }; } // 否则使用默认 else { - this._data.activeHost[hostName] = { - typeName: defaultTypeName, - host: this._data.hostList[defaultTypeName], + this._data.activeHost[typeName] = { + name: defaultHostName, + host: this._data.hostList[defaultHostName], + type: typeName, }; } } // 网页域名提取服务器地址 else if (window.location.protocol.indexOf('http') >= 0) { const host = window.location.protocol + '//' + window.location.host; - this._data.activeHost[hostName] = { - typeName: this._matchTypeName(host), + this._data.activeHost[typeName] = { + name: this._matchHostName(host), host, + type: typeName, }; } // 既不指定server也不是域名访问,使用设置的服务器地址 else { - this._data.activeHost[hostName] = { - typeName: defaultTypeName, - host: this._data.hostList[defaultTypeName], + this._data.activeHost[typeName] = { + name: defaultHostName, + host: this._data.hostList[defaultHostName], + type: typeName, }; } } // 小程序模式 else if (process.env.TARO_ENV === 'weapp') { - this._data.activeHost[hostName] = { - typeName: defaultTypeName, - host: this._data.hostList[defaultTypeName], + this._data.activeHost[typeName] = { + name: defaultHostName, + host: this._data.hostList[defaultHostName], + type: typeName, }; + } + // 如果有缓存,优先使用缓存 + const storageHostTypes = $localStorage.load('HostType'); + if (typeof storageHostTypes[typeName] !== 'undefined') { + this._data.activeHost[typeName] = storageHostTypes[typeName]; } } - _matchTypeName(host) { + _matchHostName(host) { const domain = host.split('//')[1]; - let typeName = ''; + let hostName = ''; if (/127|192|localhost/.test(domain)) { - typeName = 'lc'; + hostName = 'lc'; } else { - typeName = domain.substr(0, 2); + hostName = domain.substr(0, 2); } // 尝试匹配已有主机名称 Object.keys(this._data.hostList).forEach(key => { if (this._data.hostList[key] === host) { - typeName = key; + hostName = key; } }); - return typeName; + return hostName; } /** - * 更新主机 - * @param {string} hostName + * 更新主机类型 + * @param {string} typeName * @param {string} host */ - updateHost(hostName, host) { - hostName = hostName ? hostName : this._data.defaultHostName; - this._data.activeHost[hostName] = { - typeName: this._matchTypeName(host), - host, + updateHostType(typeName, host) { + if (!typeName) { + return; + } + const portal = host.split('//')[0]; + const domain = host.split('//')[1].split('/')[0]; + const host2 = portal + '//' + domain; + this._data.activeHost[typeName] = { + name: this._matchHostName(host), + host: host2, + type: typeName, }; + // 存储自定义主机配置 + const storageHostTypes = $localStorage.load('HostType'); + storageHostTypes[typeName] = this._data.activeHost[typeName]; + $localStorage.save('HostType', storageHostTypes); } + /** + * 清除主机类型缓存 + */ + cleanHostStorage() { + $localStorage.remove('HostType'); + } /** * 判断是否为本地开发模式 @@ -134,28 +165,38 @@ /** * 获取当前主机地址 - * @param {string} hostName + * @param {string} [typeName] * @return {string} */ - getHost(hostName) { - hostName = hostName ? hostName : this._data.defaultHostName; - if (typeof this._data.activeHost[hostName] === 'undefined') { + getHost(typeName = this._data.defaultHostType) { + if (typeof this._data.activeHost[typeName] === 'undefined') { return ''; } - return this._data.activeHost[hostName].host; + return this._data.activeHost[typeName].host; } /** * 获取当前主机类型简称 - * @param {string} hostName + * @param {string} [typeName] * @return {string} */ - getTypeName(hostName) { - hostName = hostName ? hostName : this._data.defaultHostName; - if (typeof this._data.activeHost[hostName] === 'undefined') { + getHostName(typeName = this._data.defaultHostType) { + if (typeof this._data.activeHost[typeName] === 'undefined') { return ''; } - return this._data.activeHost[hostName].typeName; + return this._data.activeHost[typeName].name; + } + + /** + * 是否开启本地 mock + * @return {boolean} + */ + isOnMock() { + if (this.isDevMod()) { + return this.getHostName() === 'lc'; + } else { + return false; + } } } -- Gitblit v1.9.1