import url from 'url'; export class SiteInfo { public protocol?: string = 'https'; public name?: string; public title?: string; public short_title?: string; public host?: string; public port?: number = 443; public api: string; public needLogin?: boolean = true; } export class CjfecOptions { public site: SiteInfo = new SiteInfo(); [prop: string]: any } /** * 组件库全局类 */ export default class Cjfec { /** * 初始化,在项目入口处执行 * @param options */ public static init(options: CjfecOptions) { Cjfec._instance = new Cjfec(options); } /** * 获取单例实例 * @param options */ public static getInstance(): Cjfec { if (!Cjfec._instance) { throw new Error('实例不存在,请先在项目入口处通过Cjfec.init(options: CjfecOptions)初始化!'); } return Cjfec._instance; } private static _instance: Cjfec; private _options: CjfecOptions; /** * 构造函数 */ private constructor(options: CjfecOptions) { if (Cjfec._instance) { throw new Error('实例化失败,请使用 Cjfec.getInstance() 代替new'); } if (options) { this._options = options; } else { throw new Error('Cjfec配置不能为空!'); } Cjfec._instance = this; } /** * 获取配置 */ public getOptions(prop?: string): any { if (prop) { return this._options[prop]; } return this._options; } /** * 获取Api * TODO: * 后续删掉 */ public getApi(): string { const site = this._options.site; return url.format({ protocol: site.protocol, hostname: site.api, }); } }