import { Subject } from 'rxjs'; import Vue from 'vue'; import { MessageBoxOptions } from './interface/message-box-options'; import appMessageBox from "./app-message-box.vue"; import { AppServiceBase } from '@ibizstudio/runtime'; /** * 提示信息 * * @export * @class AppMessageBox */ export class AppMessageBox { /** * 唯一实例 * * @private * @static * @memberof AppMessageBox */ private static readonly instance = new AppMessageBox(); /** * vue 实例 * * @private * @type {Vue} * @memberof AppModal */ private vueExample!: Vue; /** * 引用对象 * * @private * @type {*} * @memberof AppMessageBox */ private refs: any; /** * vue全局对象 * * @type {*} * @memberof AppMessageBox */ store: any; /** * 多语言 * * @type {*} * @memberof AppMessageBox */ i18n: any; /** * 获取唯一实例 * * @static * @return {*} {AppMessageBox} * @memberof AppMessageBox */ static getInstance(): AppMessageBox { return AppMessageBox.instance; } /** * 初始化基础数据 * * @memberof AppModal */ private initBasicData() { const appService = AppServiceBase.getInstance(); this.store = appService.getAppStore(); this.i18n = appService.getI18n(); } /** * 打开提示信息 * * @param {*} options * @return {*} * @memberof AppMessageBox */ open(options: any): Subject { return this.createVueExample(options) } /** * 创建vue 实例 * * @private * @param {ModalConfirmOptions} opt * @return {*} {Subject} * @memberof AppMessageBox */ private createVueExample(opt: MessageBoxOptions): Subject { const self: any = this; if (!self.store || !self.i18n) { self.initBasicData(); } try { let props = { ...opt }; let component = appMessageBox; const vm = new Vue(({ store: this.store, i18n: this.i18n, render(h: any) { return h(component, { props, class: opt.customClass }); } }) as any).$mount(); this.vueExample = vm; document.body.appendChild(vm.$el); this.refs = vm.$children[0]; return this.refs.getSubject(); } catch (error) { console.error(error); } return null as any; } /** * 关闭 * * @memberof AppMessageBox */ close() { if (this.refs) { this.refs.close(); } } }