/**
|
* 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();
|