WebApp【公共组件库】@前端(For Git Submodule)
Tevin
2022-06-08 27e315223bee73db65ebc919859364c4e9ef781c
实现主机地址独立管理工具
1 files added
163 ■■■■■ changed files
bases/HostBoot.js 163 ●●●●● patch | view | raw | blame | history
bases/HostBoot.js
New file
@@ -0,0 +1,163 @@
/**
 * 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();