/** * HostBoot * @author Tevin */ import project from '@project'; import { Tools } from '@components/common/Tools'; export class HostBoot { /** * @constructor */ constructor() { this._data = { // 可用主机列表 hostList: { ...project.host.hosts }, // 当前主机 activeHost: {}, defaultHostName: '', }; } /** * 创建主机地址 * @param {string} hostName * @param {string} [isDefault=false] */ createHost(hostName, isDefault = false) { if (isDefault === 'default') { this._data.defaultHostName = hostName; } const defaultTypeName = this.isDevMod() ? project.host.devType : project.host.serverType; // 网页模式 if (process.env.TARO_ENV === 'h5') { // 如果网址参数有指定服务器 const server = Tools.getUrlParam('server'); if (server) { // 如果是完整网址,使用网址对应的域名 if (server.indexOf('http') >= 0) { const portal = server.split('//')[0]; const domain = server.split('//')[1].split('/')[0]; const host = portal + '//' + domain; this._data.activeHost[hostName] = { typeName: this._matchTypeName(host), host, }; } // 如果有匹配服务器,使用指定的服务器地址 if (typeof this._data.hostList[server] !== 'undefined') { this._data.activeHost[hostName] = { typeName: server, host: this._data.hostList[server], }; } // 否则使用默认 else { this._data.activeHost[hostName] = { typeName: defaultTypeName, host: this._data.hostList[defaultTypeName], }; } } // 网页域名提取服务器地址 else if (window.location.protocol.indexOf('http') >= 0) { const host = window.location.protocol + '//' + window.location.host; this._data.activeHost[hostName] = { typeName: this._matchTypeName(host), host, }; } // 既不指定server也不是域名访问,使用设置的服务器地址 else { this._data.activeHost[hostName] = { typeName: defaultTypeName, host: this._data.hostList[defaultTypeName], }; } } // 小程序模式 else if (process.env.TARO_ENV === 'weapp') { this._data.activeHost[hostName] = { typeName: defaultTypeName, host: this._data.hostList[defaultTypeName], }; } } _matchTypeName(host) { const domain = host.split('//')[1]; let typeName = ''; if (/127|192|localhost/.test(domain)) { typeName = 'lc'; } else { typeName = domain.substr(0, 2); } // 尝试匹配已有主机名称 Object.keys(this._data.hostList).forEach(key => { if (this._data.hostList[key] === host) { typeName = key; } }); return typeName; } /** * 更新主机 * @param {string} hostName * @param {string} host */ updateHost(hostName, host) { hostName = hostName ? hostName : this._data.defaultHostName; this._data.activeHost[hostName] = { typeName: this._matchTypeName(host), host, }; } /** * 判断是否为本地开发模式 * @return {Boolean} */ isDevMod() { // 开发编译 if (process.env.NODE_ENV === 'development') { return true; } // 生产编译 else if (process.env.NODE_ENV === 'production') { return false; } } /** * 获取当前主机地址 * @param {string} hostName * @return {string} */ getHost(hostName) { hostName = hostName ? hostName : this._data.defaultHostName; if (typeof this._data.activeHost[hostName] === 'undefined') { return ''; } return this._data.activeHost[hostName].host; } /** * 获取当前主机类型简称 * @param {string} hostName * @return {string} */ getTypeName(hostName) { hostName = hostName ? hostName : this._data.defaultHostName; if (typeof this._data.activeHost[hostName] === 'undefined') { return ''; } return this._data.activeHost[hostName].typeName; } } export const $hostBoot = new HostBoot();