app-popover.ts 3.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
import Vue from 'vue';
import AppPopoverComponent from "./app-popover.vue";
import { AppServiceBase, Util } from 'ibiz-core';

/**
 * popover组件
 *
 * @export
 * @class AppPopover
 */
export class AppPopover {

    /**
     * 实例对象
     *
     * @private
     * @static
     * @memberof AppPopover
     */
    private static popover = new AppPopover();

    /**
     * store对象
     *
     * @private
     * @memberof AppPopover
     */
    private store: any;

    /**
     * i18n对象
     *
     * @private
     * @memberof AppPopover
     */
    private i18n: any;

    /**
     * 路由对象
     *
     * @private
     * @memberof AppPopover
     */
    private router: any;

    /**
     * Creates an instance of AppPopover.
     * 
     * @memberof AppPopover
     */
    private constructor() {
        if (AppPopover.popover) {
            return AppPopover.popover;
        }
    }

    /**
     * 初始化基础数据
     * 
     * @memberof AppPopover
     */
    private initBasicData() {
        const appService = AppServiceBase.getInstance();
        this.store = appService.getAppStore();
        this.i18n = appService.getI18n();
        this.router = appService.getRouter();
    }

    /**
     * 获取单例对象
     *
     * @static
     * @returns {AppPopover}
     * @memberof AppPopover
     */
    public static getInstance(): AppPopover {
        if (!AppPopover.popover) {
            AppPopover.popover = new AppPopover();
        }
        return AppPopover.popover;
    }

    /**
     * 创建 Vue 实例对象
     *
     * @private
     * @param {*} view
     * @param {*} [context={}]
     * @param {*} [viewparams={}]
     * @param {string} uuid
     * @return {*}  {Promise<any>}
     * @memberof AppPopover
     */
    private async createVueExample(view: any, context: any = {}, viewparams: any = {}, customProps: any = {}): Promise<any> {
        const self: any = this;
        if (!self.store || !self.i18n) {
            self.initBasicData();
        }
        let props = { view: view, context: context, viewparams: viewparams, ...customProps };
        let component = AppPopoverComponent;
        let vm: any = new Vue({
            store: this.store,
            i18n: this.i18n,
            router: this.router,
            render(h) {
                return h(component, { props });
            },
        }).$mount();
        let app = document.getElementById("app");
        if (app) {
            app.appendChild(vm.$el);
        }
        const comp: any = vm.$children[0];
        return new Promise((resolve, reject) => {
            const sub = comp.getSubject();
            sub.subscribe((result: any) => {
                resolve(result);
            });
        });
    }


    /**
     * 打开模态视图
     *
     * @param {*} view
     * @param {*} [context={}]
     * @param {*} [viewparams={}]
     * @return {*}  {Promise<any>}
     * @memberof AppPopover
     */
    public async openPopOver(view: any, context: any = {}, viewparams: any = {}, customProps?: any): Promise<any> {
        const result: any = await this.createVueExample(view, context, viewparams, customProps);
        return result;
    }

}