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
import Vue from 'vue';
import { Subject } from 'rxjs';
import { ViewTool } from '../view-tool/view-tool';
import store from '../../store';
import i18n from '@/locale';
import AppDrawerCompponent from "./app-drawer.vue";
export class AppDrawer {
/**
* 实例对象
*
* @private
* @static
* @memberof AppDrawer
*/
private static readonly $drawer = new AppDrawer();
/**
* 构造方法
*
* @memberof AppDrawer
*/
constructor() {
if (AppDrawer.$drawer) {
return AppDrawer.$drawer;
}
}
/**
* vue 实例
*
* @private
* @type {Vue}
* @memberof AppDrawer
*/
private vueExample!: Vue;
/**
* 获取实例对象
*
* @static
* @returns
* @memberof AppDrawer
*/
public static getInstance() {
return AppDrawer.$drawer;
}
/**
* 创建 Vue 实例对象
*
* @private
* @param {{ viewname: string, title: string, width?: number, height?: number, placement?: any }} view
* @param {*} [context={}] 应用上下文参数
* @param {*} [viewparams={}] 视图参数
* @param {string} uuid 标识
* @returns {Subject<any>}
* @memberof AppDrawer
*/
private createVueExample(view: { viewname: string, title: string, width?: number, height?: number, placement?: any }, context: any = {},viewparams: any = {}, uuid: string): Subject<any> {
try {
let props = { view: view, viewdata: context,viewparams:viewparams,uuid: uuid };
let component = AppDrawerCompponent;
const vm = new Vue({
store: store,
i18n: i18n,
router: (window as any).appRouter,
render(h) {
return h(component, { props });
}
}).$mount();
this.vueExample = vm;
document.body.appendChild(vm.$el);
const comp: any = vm.$children[0];
return comp.getSubject();
} catch (error) {
console.error(error);
return new Subject<any>();
}
}
/**
* 打开抽屉
*
* @param {({ viewname: string, title: string, width?: number, height?: number, placement?: 'DRAWER_LEFT' | 'DRAWER_RIGHT' })} view 视图
* @param {*} [context={}] 应用上下文参数
* @param {any[]} deResParameters 关系实体参数对象
* @param {any[]} parameters 当前应用视图参数对象
* @param {any[]} args 多项数据
* @param {*} [data={}] 行为参数
* @returns {Subject<any>}
* @memberof AppDrawer
*/
public openDrawer(view: { viewname: string, title: string, width?: number, height?: number, placement?: 'DRAWER_LEFT' | 'DRAWER_RIGHT' }, context: any = {}, data: any = {}): Subject<any> {
try {
let viewdata: any = {};
Object.assign(viewdata, JSON.parse(JSON.stringify(context)));
const uuid = this.getUUID();
const subject = this.createVueExample(view, viewdata,data,uuid);
return subject;
} catch (error) {
console.log(error);
return new Subject<any>();
}
}
/**
* 生成uuid
*
* @private
* @returns {string}
* @memberof AppDrawer
*/
private getUUID(): string {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}
}