fantasy-ngzorro 1.3.29 → 1.3.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/fantasy-ngzorro.umd.js +6035 -6035
- package/esm2015/fantasy-ngzorro.js +38 -38
- package/esm2015/fantasy-ngzorro.module.js +18 -18
- package/esm2015/hd-button/hd-button.component.js +91 -91
- package/esm2015/hd-button/hd-button.module.js +22 -22
- package/esm2015/hd-button/hd-button.service.js +36 -36
- package/esm2015/hd-button-group/hd-button-group.component.js +32 -32
- package/esm2015/hd-button-group/hd-button-group.module.js +22 -22
- package/esm2015/hd-component.module.js +43 -43
- package/esm2015/hd-current-table/hd-current-table.component.js +224 -224
- package/esm2015/hd-current-table/hd-current-table.module.js +23 -23
- package/esm2015/hd-current-table/hd-current-table.service.js +34 -34
- package/esm2015/hd-detail-form/hd-detail-form.component.js +64 -64
- package/esm2015/hd-detail-form/hd-detail-form.module.js +20 -20
- package/esm2015/hd-detail-form/hd-detail-form.service.js +17 -17
- package/esm2015/hd-detail-lines/hd-detail-lines.component.js +266 -266
- package/esm2015/hd-detail-lines/hd-detail-lines.module.js +23 -23
- package/esm2015/hd-detail-lines/hd-detail-lines.service.js +18 -18
- package/esm2015/hd-detail-tip/hd-detail-tip.component.js +61 -61
- package/esm2015/hd-detail-tip/hd-detail-tip.module.js +22 -22
- package/esm2015/hd-filter/hd-filter.component.js +192 -192
- package/esm2015/hd-filter/hd-filter.module.js +25 -25
- package/esm2015/hd-filter/hd-filter.service.js +69 -69
- package/esm2015/hd-form/hd-form.component.js +369 -369
- package/esm2015/hd-form/hd-form.module.js +25 -25
- package/esm2015/hd-form/hd-form.service.js +129 -129
- package/esm2015/hd-form-lines/hd-form-lines.component.js +1537 -1537
- package/esm2015/hd-form-lines/hd-form-lines.module.js +29 -29
- package/esm2015/hd-form-lines/hd-form-lines.service.js +121 -121
- package/esm2015/hd-log/hd-log.component.js +30 -30
- package/esm2015/hd-log/hd-log.module.js +25 -25
- package/esm2015/hd-log/hd-log.service.js +47 -47
- package/esm2015/hd-popconfirm/hd-popconfirm.component.js +52 -52
- package/esm2015/hd-popconfirm/hd-popconfirm.module.js +27 -27
- package/esm2015/hd-space/hd-space.component.js +51 -51
- package/esm2015/hd-space/hd-space.module.js +23 -23
- package/esm2015/hd-space/hd-space.service.js +33 -33
- package/esm2015/hd-status/hd-status.component.js +50 -50
- package/esm2015/hd-status/hd-status.module.js +27 -27
- package/esm2015/hd-status/hd-status.service.js +33 -33
- package/esm2015/hd-table/hd-table.component.js +972 -972
- package/esm2015/hd-table/hd-table.module.js +43 -43
- package/esm2015/hd-table/hd-table.service.js +116 -116
- package/esm2015/hd-tip/hd-tip.component.js +37 -37
- package/esm2015/hd-tip/hd-tip.module.js +20 -20
- package/esm2015/index.js +6 -6
- package/esm2015/model/colWidth.js +36 -36
- package/esm2015/model/common-type.js +122 -122
- package/esm2015/model/staticConst.js +8 -8
- package/esm2015/public-api.js +19 -19
- package/esm2015/service/common-session.service.js +37 -37
- package/esm2015/utils.js +128 -128
- package/esm5/fantasy-ngzorro.js +38 -38
- package/esm5/fantasy-ngzorro.module.js +22 -22
- package/esm5/hd-button/hd-button.component.js +104 -104
- package/esm5/hd-button/hd-button.module.js +26 -26
- package/esm5/hd-button/hd-button.service.js +39 -39
- package/esm5/hd-button-group/hd-button-group.component.js +38 -38
- package/esm5/hd-button-group/hd-button-group.module.js +26 -26
- package/esm5/hd-component.module.js +47 -47
- package/esm5/hd-current-table/hd-current-table.component.js +260 -260
- package/esm5/hd-current-table/hd-current-table.module.js +27 -27
- package/esm5/hd-current-table/hd-current-table.service.js +46 -46
- package/esm5/hd-detail-form/hd-detail-form.component.js +77 -77
- package/esm5/hd-detail-form/hd-detail-form.module.js +24 -24
- package/esm5/hd-detail-form/hd-detail-form.service.js +20 -20
- package/esm5/hd-detail-lines/hd-detail-lines.component.js +314 -314
- package/esm5/hd-detail-lines/hd-detail-lines.module.js +27 -27
- package/esm5/hd-detail-lines/hd-detail-lines.service.js +22 -22
- package/esm5/hd-detail-tip/hd-detail-tip.component.js +72 -72
- package/esm5/hd-detail-tip/hd-detail-tip.module.js +26 -26
- package/esm5/hd-filter/hd-filter.component.js +231 -231
- package/esm5/hd-filter/hd-filter.module.js +29 -29
- package/esm5/hd-filter/hd-filter.service.js +77 -77
- package/esm5/hd-form/hd-form.component.js +424 -424
- package/esm5/hd-form/hd-form.module.js +29 -29
- package/esm5/hd-form/hd-form.service.js +141 -141
- package/esm5/hd-form-lines/hd-form-lines.component.js +1844 -1844
- package/esm5/hd-form-lines/hd-form-lines.module.js +33 -33
- package/esm5/hd-form-lines/hd-form-lines.service.js +137 -137
- package/esm5/hd-log/hd-log.component.js +35 -35
- package/esm5/hd-log/hd-log.module.js +29 -29
- package/esm5/hd-log/hd-log.service.js +50 -50
- package/esm5/hd-popconfirm/hd-popconfirm.component.js +65 -65
- package/esm5/hd-popconfirm/hd-popconfirm.module.js +31 -31
- package/esm5/hd-space/hd-space.component.js +56 -56
- package/esm5/hd-space/hd-space.module.js +27 -27
- package/esm5/hd-space/hd-space.service.js +40 -40
- package/esm5/hd-status/hd-status.component.js +62 -62
- package/esm5/hd-status/hd-status.module.js +31 -31
- package/esm5/hd-status/hd-status.service.js +35 -35
- package/esm5/hd-table/hd-table.component.js +1100 -1100
- package/esm5/hd-table/hd-table.module.js +47 -47
- package/esm5/hd-table/hd-table.service.js +136 -136
- package/esm5/hd-tip/hd-tip.component.js +42 -42
- package/esm5/hd-tip/hd-tip.module.js +24 -24
- package/esm5/index.js +6 -6
- package/esm5/model/colWidth.js +36 -36
- package/esm5/model/common-type.js +146 -146
- package/esm5/model/staticConst.js +8 -8
- package/esm5/public-api.js +19 -19
- package/esm5/service/common-session.service.js +54 -54
- package/esm5/utils.js +128 -128
- package/fantasy-ngzorro.d.ts +34 -34
- package/fantasy-ngzorro.module.d.ts +2 -2
- package/fesm2015/fantasy-ngzorro.js +5223 -5223
- package/fesm5/fantasy-ngzorro.js +6044 -6044
- package/hd-button/hd-button.component.d.ts +14 -14
- package/hd-button/hd-button.module.d.ts +2 -2
- package/hd-button/hd-button.service.d.ts +17 -17
- package/hd-button-group/hd-button-group.component.d.ts +7 -7
- package/hd-button-group/hd-button-group.module.d.ts +2 -2
- package/hd-component.module.d.ts +2 -2
- package/hd-current-table/hd-current-table.component.d.ts +43 -43
- package/hd-current-table/hd-current-table.module.d.ts +2 -2
- package/hd-current-table/hd-current-table.service.d.ts +13 -13
- package/hd-detail-form/hd-detail-form.component.d.ts +9 -9
- package/hd-detail-form/hd-detail-form.module.d.ts +2 -2
- package/hd-detail-form/hd-detail-form.service.d.ts +3 -3
- package/hd-detail-lines/hd-detail-lines.component.d.ts +48 -48
- package/hd-detail-lines/hd-detail-lines.module.d.ts +2 -2
- package/hd-detail-lines/hd-detail-lines.service.d.ts +7 -7
- package/hd-detail-tip/hd-detail-tip.component.d.ts +12 -12
- package/hd-detail-tip/hd-detail-tip.module.d.ts +2 -2
- package/hd-filter/hd-filter.component.d.ts +23 -23
- package/hd-filter/hd-filter.module.d.ts +2 -2
- package/hd-filter/hd-filter.service.d.ts +25 -25
- package/hd-form/hd-form.component.d.ts +25 -25
- package/hd-form/hd-form.module.d.ts +2 -2
- package/hd-form/hd-form.service.d.ts +51 -51
- package/hd-form-lines/hd-form-lines.component.d.ts +147 -147
- package/hd-form-lines/hd-form-lines.module.d.ts +2 -2
- package/hd-form-lines/hd-form-lines.service.d.ts +53 -53
- package/hd-log/hd-log.component.d.ts +6 -6
- package/hd-log/hd-log.module.d.ts +2 -2
- package/hd-log/hd-log.service.d.ts +6 -6
- package/hd-popconfirm/hd-popconfirm.component.d.ts +10 -10
- package/hd-popconfirm/hd-popconfirm.module.d.ts +2 -2
- package/hd-space/hd-space.component.d.ts +10 -10
- package/hd-space/hd-space.module.d.ts +2 -2
- package/hd-space/hd-space.service.d.ts +12 -12
- package/hd-status/hd-status.component.d.ts +9 -9
- package/hd-status/hd-status.module.d.ts +2 -2
- package/hd-status/hd-status.service.d.ts +11 -11
- package/hd-table/hd-table.component.d.ts +91 -91
- package/hd-table/hd-table.module.d.ts +2 -2
- package/hd-table/hd-table.service.d.ts +42 -42
- package/hd-tip/hd-tip.component.d.ts +8 -8
- package/hd-tip/hd-tip.module.d.ts +2 -2
- package/index.d.ts +2 -2
- package/model/colWidth.d.ts +17 -17
- package/model/common-type.d.ts +46 -46
- package/model/staticConst.d.ts +3 -3
- package/package.json +1 -1
- package/public-api.d.ts +15 -15
- package/service/common-session.service.d.ts +5 -5
- package/utils.d.ts +28 -28
|
@@ -1,973 +1,973 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import * as tslib_1 from "tslib";
|
|
6
|
-
import { ChangeDetectorRef, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
|
|
7
|
-
import * as localforage from 'localforage';
|
|
8
|
-
import { InputBoolean } from 'ng-zorro-antd/core';
|
|
9
|
-
import { of } from 'rxjs';
|
|
10
|
-
import { delay } from 'rxjs/operators';
|
|
11
|
-
import { ColWidth } from '../model/colWidth';
|
|
12
|
-
import { Page } from '../model/common-type';
|
|
13
|
-
import { CommonSessionService } from '../service/common-session.service';
|
|
14
|
-
import { TableCacheOption, TreeGrid } from './hd-table.service';
|
|
15
|
-
export class HdTableComponent {
|
|
16
|
-
/**
|
|
17
|
-
* @param {?} cdr
|
|
18
|
-
* @param {?} commonSessionService
|
|
19
|
-
*/
|
|
20
|
-
constructor(cdr, commonSessionService) {
|
|
21
|
-
this.cdr = cdr;
|
|
22
|
-
this.commonSessionService = commonSessionService;
|
|
23
|
-
this.tableCols = [];
|
|
24
|
-
this.showSelected = false;
|
|
25
|
-
this.showOperateColWarpButton = false;
|
|
26
|
-
this.selectField = 'billNumber';
|
|
27
|
-
// 合计区域
|
|
28
|
-
this.showTableTotal = false;
|
|
29
|
-
this.sortEvent = new EventEmitter();
|
|
30
|
-
this.selectEvent = new EventEmitter();
|
|
31
|
-
this.tableSearchEvent = new EventEmitter();
|
|
32
|
-
this.tableLoading = false;
|
|
33
|
-
// 表格分页参数
|
|
34
|
-
this.tablePageIndex = 1;
|
|
35
|
-
this.tablePageIndexChange = new EventEmitter();
|
|
36
|
-
this.tablePageSizeChange = new EventEmitter();
|
|
37
|
-
this.scroll = null;
|
|
38
|
-
// 表格勾选参数
|
|
39
|
-
this.isAllDisplayDataChecked = false;
|
|
40
|
-
this.isIndeterminate = false;
|
|
41
|
-
this.listOfDisplayData = [];
|
|
42
|
-
this.listOfAllData = [];
|
|
43
|
-
this.mapOfCheckedId = {};
|
|
44
|
-
this.mapOfCheckList = {};
|
|
45
|
-
// 合计参数
|
|
46
|
-
this.tableTotalOptionList = [];
|
|
47
|
-
this.textWidthCache = {};
|
|
48
|
-
// 缓存信息
|
|
49
|
-
this.tableCacheOption = new TableCacheOption();
|
|
50
|
-
this.tableColsCache = [];
|
|
51
|
-
this.showTable = false;
|
|
52
|
-
this.selectColListNodes = [];
|
|
53
|
-
this.selectColListNodesCache = [];
|
|
54
|
-
this.showListNodes = false;
|
|
55
|
-
this.isDropdownVisible = false;
|
|
56
|
-
// 设置列的可见操作数组
|
|
57
|
-
this.nowListNodes = [];
|
|
58
|
-
// 设置列的不可见操作数组
|
|
59
|
-
this.hideListNodes = [];
|
|
60
|
-
// 点击时需要有临时数组存放两个tree,用于取消时候恢复调整前的状态
|
|
61
|
-
this.cancelNowListNodes = [];
|
|
62
|
-
this.cancelHideListNodes = [];
|
|
63
|
-
this.showDetail = false;
|
|
64
|
-
this.localforage = null;
|
|
65
|
-
this.localtionTmp = '';
|
|
66
|
-
// 拖拽操作
|
|
67
|
-
this.beforeDrop = (/**
|
|
68
|
-
* @param {?} arg
|
|
69
|
-
* @return {?}
|
|
70
|
-
*/
|
|
71
|
-
(arg) => {
|
|
72
|
-
if (arg.node.origin.disabled || !arg.dragNode.origin.checked || arg.pos === 0) {
|
|
73
|
-
return of(false);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
/** @type {?} */
|
|
77
|
-
let node = new TreeGrid();
|
|
78
|
-
node.checked = arg.dragNode.origin.checked;
|
|
79
|
-
node.disabled = arg.dragNode.origin.disabled;
|
|
80
|
-
node.expanded = arg.dragNode.origin.expanded;
|
|
81
|
-
node.isLeaf = arg.dragNode.origin.isLeaf;
|
|
82
|
-
node.key = arg.dragNode.origin.key;
|
|
83
|
-
node.selectable = arg.dragNode.origin.selectable;
|
|
84
|
-
node.title = arg.dragNode.origin.title;
|
|
85
|
-
// 拖拽元素下标
|
|
86
|
-
/** @type {?} */
|
|
87
|
-
let dragNodeIndex = this.nowListNodes.findIndex((/**
|
|
88
|
-
* @param {?} item
|
|
89
|
-
* @return {?}
|
|
90
|
-
*/
|
|
91
|
-
item => { return item.title == arg.dragNode.origin.title; }));
|
|
92
|
-
// 目标位置的下标
|
|
93
|
-
/** @type {?} */
|
|
94
|
-
let nodeIndex = this.nowListNodes.findIndex((/**
|
|
95
|
-
* @param {?} item
|
|
96
|
-
* @return {?}
|
|
97
|
-
*/
|
|
98
|
-
item => { return item.title == arg.node.origin.title; })) + (arg.pos === -1 ? 0 : arg.pos);
|
|
99
|
-
this.nowListNodes.splice(nodeIndex, 0, node);
|
|
100
|
-
this.nowListNodes.splice(nodeIndex >= dragNodeIndex ? dragNodeIndex : dragNodeIndex + 1, 1);
|
|
101
|
-
return of(true).pipe(delay(100));
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
this.localforage = localforage.createInstance({
|
|
105
|
-
driver: localforage.INDEXEDDB,
|
|
106
|
-
name: 'hd-fscm',
|
|
107
|
-
// 设置存储库的名称
|
|
108
|
-
version: 1.0,
|
|
109
|
-
// 设置存储库的版本
|
|
110
|
-
storeName: 'hd-fscm-store',
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* @return {?}
|
|
115
|
-
*/
|
|
116
|
-
ngOnInit() {
|
|
117
|
-
this.localtionTmp = location.pathname;
|
|
118
|
-
if (this.localtionTmp) {
|
|
119
|
-
this.localtionTmp = this.localtionTmp.replace(/\//g, "_");
|
|
120
|
-
}
|
|
121
|
-
this.userSession = this.commonSessionService.getSession('__jy_authorization_session__');
|
|
122
|
-
// 用于开发环境调试
|
|
123
|
-
if (!this.userSession) {
|
|
124
|
-
this.userSession = {
|
|
125
|
-
userCode: 'dev'
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
this.deleteHideItem();
|
|
129
|
-
if (!this.tableCols || this.tableCols.length === 0) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
this.localforage.ready().then((/**
|
|
133
|
-
* @return {?}
|
|
134
|
-
*/
|
|
135
|
-
() => {
|
|
136
|
-
this.getInitLocalforage();
|
|
137
|
-
})).catch((/**
|
|
138
|
-
* @param {?} e
|
|
139
|
-
* @return {?}
|
|
140
|
-
*/
|
|
141
|
-
function (e) {
|
|
142
|
-
console.log('localforage加载异常step1', e);
|
|
143
|
-
throw 'localforage加载异常';
|
|
144
|
-
}));
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* @param {?} changes
|
|
148
|
-
* @return {?}
|
|
149
|
-
*/
|
|
150
|
-
ngOnChanges(changes) {
|
|
151
|
-
// 数据改变时,重置勾选状态
|
|
152
|
-
if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {
|
|
153
|
-
if (changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']
|
|
154
|
-
|| changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
this.resetStatus();
|
|
158
|
-
}
|
|
159
|
-
if (changes['tableCols'] && JSON.stringify(changes['tableCols'].currentValue) !== JSON.stringify(changes['tableCols'].previousValue)) {
|
|
160
|
-
this.deleteHideItem();
|
|
161
|
-
if (!this.tableCols || this.tableCols.length === 0) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
this.localforage.ready().then((/**
|
|
165
|
-
* @return {?}
|
|
166
|
-
*/
|
|
167
|
-
() => {
|
|
168
|
-
this.getInitLocalforage();
|
|
169
|
-
})).catch((/**
|
|
170
|
-
* @param {?} e
|
|
171
|
-
* @return {?}
|
|
172
|
-
*/
|
|
173
|
-
function (e) {
|
|
174
|
-
console.log('localforage加载异常step2', e);
|
|
175
|
-
throw 'localforage加载异常';
|
|
176
|
-
}));
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* @return {?}
|
|
181
|
-
*/
|
|
182
|
-
deleteHideItem() {
|
|
183
|
-
// 首先把isShow为false数据剔除掉
|
|
184
|
-
this.tableCols = this.tableCols.filter((/**
|
|
185
|
-
* @param {?} item
|
|
186
|
-
* @return {?}
|
|
187
|
-
*/
|
|
188
|
-
item => {
|
|
189
|
-
// 如果对象没有 isShow 属性,则默认为 true,保留该对象
|
|
190
|
-
if (!item.hasOwnProperty('isShow')) {
|
|
191
|
-
return true;
|
|
192
|
-
}
|
|
193
|
-
// 如果对象有 isShow 属性,则检查其值是否为 true
|
|
194
|
-
return item.isShow === true;
|
|
195
|
-
}));
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* @param {?} sort
|
|
199
|
-
* @return {?}
|
|
200
|
-
*/
|
|
201
|
-
sort(sort) {
|
|
202
|
-
this.sortEvent.emit(sort);
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* @return {?}
|
|
206
|
-
*/
|
|
207
|
-
getInitLocalforage() {
|
|
208
|
-
// 首先获取当前hd-table存储的数据 如果没有,则初始化下当前的数据
|
|
209
|
-
this.localforage.getItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid).then((/**
|
|
210
|
-
* @param {?} value
|
|
211
|
-
* @return {?}
|
|
212
|
-
*/
|
|
213
|
-
(value) => {
|
|
214
|
-
this.tableCacheOption = value;
|
|
215
|
-
if (this.tableCacheOption.pageSize && this.tableCacheOption.pageSize > 10) {
|
|
216
|
-
this.tablePageSize = this.tableCacheOption.pageSize;
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
this.tablePageSize = this.tableCacheOption.pageSize || 10;
|
|
220
|
-
}
|
|
221
|
-
if (!this.tableCacheOption.colWidths) {
|
|
222
|
-
this.tableCacheOption.colWidths = new Map();
|
|
223
|
-
}
|
|
224
|
-
this.tablePageSizeChange.emit(this.tablePageSize);
|
|
225
|
-
this.initTable();
|
|
226
|
-
})).catch((/**
|
|
227
|
-
* @param {?} err
|
|
228
|
-
* @return {?}
|
|
229
|
-
*/
|
|
230
|
-
(err) => {
|
|
231
|
-
this.tableCacheOption = new TableCacheOption();
|
|
232
|
-
this.tablePageSize = 10;
|
|
233
|
-
this.tableCacheOption.pageSize = 10;
|
|
234
|
-
this.tableCacheOption.colWidths = new Map();
|
|
235
|
-
this.tablePageSizeChange.emit(this.tablePageSize);
|
|
236
|
-
this.initTable();
|
|
237
|
-
}));
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* @return {?}
|
|
241
|
-
*/
|
|
242
|
-
initTable() {
|
|
243
|
-
this.showTable = false;
|
|
244
|
-
if (!this.uuid) {
|
|
245
|
-
throw 'hd-table缺失uuid参数,请使用编辑器插件生成并给hd-table赋予uuid属性';
|
|
246
|
-
}
|
|
247
|
-
if (this.judgeRepeatCols()) {
|
|
248
|
-
this.dealCols();
|
|
249
|
-
this.setCols();
|
|
250
|
-
this.dealScroll();
|
|
251
|
-
this.dealOperateBtn();
|
|
252
|
-
this.showTable = true;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// 设置列点击取消
|
|
256
|
-
/**
|
|
257
|
-
* @return {?}
|
|
258
|
-
*/
|
|
259
|
-
cancelDropdown() {
|
|
260
|
-
this.isDropdownVisible = false;
|
|
261
|
-
this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));
|
|
262
|
-
this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));
|
|
263
|
-
}
|
|
264
|
-
// 点击触发设置列
|
|
265
|
-
/**
|
|
266
|
-
* @return {?}
|
|
267
|
-
*/
|
|
268
|
-
confirmDropdown() {
|
|
269
|
-
// 临时存放下,取消的时候恢复原来的状态 深拷贝下对象数组
|
|
270
|
-
this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));
|
|
271
|
-
this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));
|
|
272
|
-
this.isDropdownVisible = true;
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* @return {?}
|
|
276
|
-
*/
|
|
277
|
-
submitGrids() {
|
|
278
|
-
this.tableCacheOption.cols = [];
|
|
279
|
-
this.nowListNodes.forEach((/**
|
|
280
|
-
* @param {?} item
|
|
281
|
-
* @return {?}
|
|
282
|
-
*/
|
|
283
|
-
item => {
|
|
284
|
-
this.tableCacheOption.cols.push(item.title);
|
|
285
|
-
}));
|
|
286
|
-
this.saveTableCacheOption();
|
|
287
|
-
this.initTable();
|
|
288
|
-
this.isDropdownVisible = false;
|
|
289
|
-
}
|
|
290
|
-
// 从缓存设置列
|
|
291
|
-
/**
|
|
292
|
-
* @return {?}
|
|
293
|
-
*/
|
|
294
|
-
setCols() {
|
|
295
|
-
this.showListNodes = false;
|
|
296
|
-
this.nowListNodes = [];
|
|
297
|
-
this.hideListNodes = [];
|
|
298
|
-
if (this.tableCacheOption.cols) {
|
|
299
|
-
let { notIncols, incols } = this.tableColsCache.reduce((/**
|
|
300
|
-
* @param {?} acc
|
|
301
|
-
* @param {?} item
|
|
302
|
-
* @return {?}
|
|
303
|
-
*/
|
|
304
|
-
(acc, item) => {
|
|
305
|
-
if (this.tableCacheOption.cols.includes(item.title)) {
|
|
306
|
-
acc.incols.push(item);
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
acc.notIncols.push(item);
|
|
310
|
-
}
|
|
311
|
-
return acc;
|
|
312
|
-
}), { notIncols: [], incols: [] });
|
|
313
|
-
incols.sort((/**
|
|
314
|
-
* @param {?} a
|
|
315
|
-
* @param {?} b
|
|
316
|
-
* @return {?}
|
|
317
|
-
*/
|
|
318
|
-
(a, b) => {
|
|
319
|
-
return this.tableCacheOption.cols.indexOf(a.title) - this.tableCacheOption.cols.indexOf(b.title);
|
|
320
|
-
}));
|
|
321
|
-
this.tableCols = incols.concat(notIncols);
|
|
322
|
-
}
|
|
323
|
-
this.tableCols.forEach((/**
|
|
324
|
-
* @param {?} element
|
|
325
|
-
* @param {?} index
|
|
326
|
-
* @return {?}
|
|
327
|
-
*/
|
|
328
|
-
(element, index) => {
|
|
329
|
-
if (this.tableCacheOption.cols) {
|
|
330
|
-
element.isShow = this.tableCacheOption.cols.includes(element.title) ? true : false;
|
|
331
|
-
if (element.isShow) {
|
|
332
|
-
this.nowListNodes.push({
|
|
333
|
-
title: element.title,
|
|
334
|
-
key: element.title,
|
|
335
|
-
disabled: element.fixed ? true : false,
|
|
336
|
-
// selectable: false,
|
|
337
|
-
checked: this.tableCacheOption.cols.includes(element.title) ? true : false
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
else {
|
|
341
|
-
this.hideListNodes.push({
|
|
342
|
-
title: element.title,
|
|
343
|
-
key: element.title,
|
|
344
|
-
disabled: element.fixed ? true : false,
|
|
345
|
-
// selectable: false,
|
|
346
|
-
checked: this.tableCacheOption.cols.includes(element.title) ? true : false
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
element.isShow = true;
|
|
352
|
-
this.nowListNodes.push({
|
|
353
|
-
title: element.title,
|
|
354
|
-
key: element.title,
|
|
355
|
-
checked: true,
|
|
356
|
-
// selectable: false,
|
|
357
|
-
disabled: element.fixed ? true : false
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
}));
|
|
361
|
-
// 调整列宽为缓存宽度
|
|
362
|
-
if (this.tableCacheOption && this.tableCacheOption.colWidths && this.tableCacheOption.colWidths.size !== 0) {
|
|
363
|
-
this.tableCols.forEach((/**
|
|
364
|
-
* @param {?} col
|
|
365
|
-
* @return {?}
|
|
366
|
-
*/
|
|
367
|
-
(col) => {
|
|
368
|
-
if (this.tableCacheOption.colWidths.has(col.title)) {
|
|
369
|
-
col.width = this.tableCacheOption.colWidths.get(col.title);
|
|
370
|
-
}
|
|
371
|
-
}));
|
|
372
|
-
}
|
|
373
|
-
this.dealCols();
|
|
374
|
-
setTimeout((/**
|
|
375
|
-
* @return {?}
|
|
376
|
-
*/
|
|
377
|
-
() => {
|
|
378
|
-
this.showListNodes = true;
|
|
379
|
-
}), 0);
|
|
380
|
-
}
|
|
381
|
-
/**
|
|
382
|
-
* @param {?} arr
|
|
383
|
-
* @param {?} elementToMoveTitle
|
|
384
|
-
* @param {?} targetElementTitle
|
|
385
|
-
* @param {?} pos
|
|
386
|
-
* @return {?}
|
|
387
|
-
*/
|
|
388
|
-
moveElementNearby(arr, elementToMoveTitle, targetElementTitle, pos) {
|
|
389
|
-
/** @type {?} */
|
|
390
|
-
const tmpArray = JSON.parse(JSON.stringify(arr));
|
|
391
|
-
/** @type {?} */
|
|
392
|
-
const targetIndex = tmpArray.findIndex((/**
|
|
393
|
-
* @param {?} item
|
|
394
|
-
* @return {?}
|
|
395
|
-
*/
|
|
396
|
-
item => item.title === targetElementTitle));
|
|
397
|
-
/** @type {?} */
|
|
398
|
-
const elementIndex = tmpArray.findIndex((/**
|
|
399
|
-
* @param {?} item
|
|
400
|
-
* @return {?}
|
|
401
|
-
*/
|
|
402
|
-
item => item.title === elementToMoveTitle));
|
|
403
|
-
/** @type {?} */
|
|
404
|
-
const newIndex = pos < 0 ? (targetIndex + pos) : targetIndex;
|
|
405
|
-
// 移除目标元素,并插入到新的位置
|
|
406
|
-
/** @type {?} */
|
|
407
|
-
const removedElement = tmpArray.splice(elementIndex, 1);
|
|
408
|
-
tmpArray.splice(newIndex + 1, 0, removedElement[0]);
|
|
409
|
-
return tmpArray;
|
|
410
|
-
}
|
|
411
|
-
// 勾选操作
|
|
412
|
-
/**
|
|
413
|
-
* @param {?} event
|
|
414
|
-
* @return {?}
|
|
415
|
-
*/
|
|
416
|
-
checkAction(event) {
|
|
417
|
-
// 勾选只有在hideListNodes,取消勾选只有在nowListNodes
|
|
418
|
-
if (event.node.origin.checked) {
|
|
419
|
-
/** @type {?} */
|
|
420
|
-
let node = new TreeGrid();
|
|
421
|
-
node = this.hideListNodes.find((/**
|
|
422
|
-
* @param {?} item
|
|
423
|
-
* @return {?}
|
|
424
|
-
*/
|
|
425
|
-
(item) => {
|
|
426
|
-
return item.title === event.node.origin.title;
|
|
427
|
-
}));
|
|
428
|
-
node.checked = true;
|
|
429
|
-
// 找到第一个fixed属性为right的title,找到插入元素的位置
|
|
430
|
-
/** @type {?} */
|
|
431
|
-
let title = null;
|
|
432
|
-
for (let i = this.tableColsCache.length - 1; i >= 0; i--) {
|
|
433
|
-
if (this.tableColsCache[i].fixed === 'right') {
|
|
434
|
-
title = this.tableColsCache[i].title;
|
|
435
|
-
break;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
/** @type {?} */
|
|
439
|
-
let temporaryNodeList = this.nowListNodes.slice(0);
|
|
440
|
-
if (!title) {
|
|
441
|
-
temporaryNodeList.push(node);
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
/** @type {?} */
|
|
445
|
-
const index = this.nowListNodes.findIndex((/**
|
|
446
|
-
* @param {?} node
|
|
447
|
-
* @return {?}
|
|
448
|
-
*/
|
|
449
|
-
node => node.title === title));
|
|
450
|
-
temporaryNodeList.splice(index, 0, node);
|
|
451
|
-
}
|
|
452
|
-
this.nowListNodes = temporaryNodeList;
|
|
453
|
-
this.hideListNodes = this.hideListNodes.filter((/**
|
|
454
|
-
* @param {?} item
|
|
455
|
-
* @return {?}
|
|
456
|
-
*/
|
|
457
|
-
(item) => {
|
|
458
|
-
return item.title !== event.node.origin.title;
|
|
459
|
-
}));
|
|
460
|
-
}
|
|
461
|
-
else {
|
|
462
|
-
// if (this.hideListNodes.length === 0 && this.tableCacheOption && this.tableCacheOption.cols) {
|
|
463
|
-
// this.hideListNodes = this.getHideListNodes();
|
|
464
|
-
// }
|
|
465
|
-
/** @type {?} */
|
|
466
|
-
let temporaryNodeList = this.hideListNodes.slice(0);
|
|
467
|
-
this.nowListNodes.forEach((/**
|
|
468
|
-
* @param {?} item
|
|
469
|
-
* @return {?}
|
|
470
|
-
*/
|
|
471
|
-
item => {
|
|
472
|
-
if (item.title === event.node.origin.title) {
|
|
473
|
-
/** @type {?} */
|
|
474
|
-
const innerItem = JSON.parse(JSON.stringify(item));
|
|
475
|
-
innerItem.checked = false;
|
|
476
|
-
temporaryNodeList.push(innerItem);
|
|
477
|
-
}
|
|
478
|
-
}));
|
|
479
|
-
this.hideListNodes = temporaryNodeList;
|
|
480
|
-
// 为了防止未选择的数组顺序因为push方法而改变,通过初始数据获取显示的字段列表
|
|
481
|
-
this.nowListNodes = this.nowListNodes.filter((/**
|
|
482
|
-
* @param {?} item
|
|
483
|
-
* @return {?}
|
|
484
|
-
*/
|
|
485
|
-
(item) => {
|
|
486
|
-
return item.title !== event.node.origin.title;
|
|
487
|
-
}));
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
// 防止未选择的数组顺序因为push方法而改变,从初始数据获取隐藏未显示的字段列表
|
|
491
|
-
/**
|
|
492
|
-
* @return {?}
|
|
493
|
-
*/
|
|
494
|
-
getHideListNodes() {
|
|
495
|
-
/** @type {?} */
|
|
496
|
-
let temporaryNodeList = [];
|
|
497
|
-
// 从tableColsCache里面找没有在storage里面出现的字段,组成hideList
|
|
498
|
-
this.tableColsCache.forEach((/**
|
|
499
|
-
* @param {?} item
|
|
500
|
-
* @return {?}
|
|
501
|
-
*/
|
|
502
|
-
(item) => {
|
|
503
|
-
if (!this.tableCacheOption.cols.includes(item.title)) {
|
|
504
|
-
/** @type {?} */
|
|
505
|
-
let nodeItem = new TreeGrid();
|
|
506
|
-
nodeItem.title = item.title;
|
|
507
|
-
nodeItem.key = item.title;
|
|
508
|
-
nodeItem.disabled = item.fixed ? true : false;
|
|
509
|
-
nodeItem.checked = false;
|
|
510
|
-
temporaryNodeList.push(nodeItem);
|
|
511
|
-
}
|
|
512
|
-
}));
|
|
513
|
-
return temporaryNodeList;
|
|
514
|
-
}
|
|
515
|
-
/**
|
|
516
|
-
* @return {?}
|
|
517
|
-
*/
|
|
518
|
-
dealCols() {
|
|
519
|
-
if (!this.tableCols[0].minWidth) {
|
|
520
|
-
this.tableCols.forEach((/**
|
|
521
|
-
* @param {?} item
|
|
522
|
-
* @return {?}
|
|
523
|
-
*/
|
|
524
|
-
item => {
|
|
525
|
-
/** @type {?} */
|
|
526
|
-
const span = document.createElement('span');
|
|
527
|
-
span.style.visibility = 'hidden';
|
|
528
|
-
span.style.position = 'absolute';
|
|
529
|
-
span.style.whiteSpace = 'nowrap';
|
|
530
|
-
span.style.fontSize = '12px';
|
|
531
|
-
span.style.display = 'inline-block'; // 将样式修改为 inline-block
|
|
532
|
-
span.innerText = item.title;
|
|
533
|
-
document.body.appendChild(span);
|
|
534
|
-
item.minWidth = span.offsetWidth + 16;
|
|
535
|
-
span.style.display = 'none';
|
|
536
|
-
document.body.removeChild(span);
|
|
537
|
-
}));
|
|
538
|
-
}
|
|
539
|
-
// 处理左右吸附的数据在数组中的位置
|
|
540
|
-
/** @type {?} */
|
|
541
|
-
const leftFixedCols = this.tableCols.filter((/**
|
|
542
|
-
* @param {?} col
|
|
543
|
-
* @return {?}
|
|
544
|
-
*/
|
|
545
|
-
col => col.fixed === 'left'));
|
|
546
|
-
/** @type {?} */
|
|
547
|
-
const rightFixedCols = this.tableCols.filter((/**
|
|
548
|
-
* @param {?} col
|
|
549
|
-
* @return {?}
|
|
550
|
-
*/
|
|
551
|
-
col => col.fixed === 'right'));
|
|
552
|
-
/** @type {?} */
|
|
553
|
-
const normalCols = this.tableCols.filter((/**
|
|
554
|
-
* @param {?} col
|
|
555
|
-
* @return {?}
|
|
556
|
-
*/
|
|
557
|
-
col => !col.fixed));
|
|
558
|
-
/** @type {?} */
|
|
559
|
-
const resultCols = leftFixedCols.concat(normalCols).concat(rightFixedCols);
|
|
560
|
-
this.tableCols = resultCols;
|
|
561
|
-
if (!this.tableColsCache || this.tableColsCache.length === 0) {
|
|
562
|
-
// 缓存一下表格的数据
|
|
563
|
-
this.tableColsCache = [...this.tableCols];
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
/**
|
|
567
|
-
* @return {?}
|
|
568
|
-
*/
|
|
569
|
-
saveTableCacheOption() {
|
|
570
|
-
this.localforage.setItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid, this.tableCacheOption);
|
|
571
|
-
}
|
|
572
|
-
/**
|
|
573
|
-
* @return {?}
|
|
574
|
-
*/
|
|
575
|
-
judgeRepeatCols() {
|
|
576
|
-
for (let i = 0; i < this.tableCols.length; i++) {
|
|
577
|
-
for (let j = i + 1; j < this.tableCols.length; j++) {
|
|
578
|
-
if (this.tableCols[i].title === this.tableCols[j].title) {
|
|
579
|
-
throw `hd-table组件中列名 ${this.tableCols[i].title} 重复`;
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
return true;
|
|
584
|
-
}
|
|
585
|
-
/**
|
|
586
|
-
* @param {?} __0
|
|
587
|
-
* @param {?} col
|
|
588
|
-
* @return {?}
|
|
589
|
-
*/
|
|
590
|
-
onResize({ width }, col) {
|
|
591
|
-
/** @type {?} */
|
|
592
|
-
let tempWidth = 0;
|
|
593
|
-
if (width > col.minWidth) {
|
|
594
|
-
tempWidth = width;
|
|
595
|
-
}
|
|
596
|
-
else {
|
|
597
|
-
tempWidth = col.minWidth;
|
|
598
|
-
}
|
|
599
|
-
this.tableCacheOption.colWidths.set(col.title, tempWidth);
|
|
600
|
-
this.saveTableCacheOption();
|
|
601
|
-
this.tableCols = this.tableCols.map((/**
|
|
602
|
-
* @param {?} e
|
|
603
|
-
* @return {?}
|
|
604
|
-
*/
|
|
605
|
-
e => (e.title === col.title ? Object.assign({}, e, { width: tempWidth }) : e)));
|
|
606
|
-
this.dealScroll();
|
|
607
|
-
}
|
|
608
|
-
/**
|
|
609
|
-
* @return {?}
|
|
610
|
-
*/
|
|
611
|
-
dealOperateBtn() {
|
|
612
|
-
/** @type {?} */
|
|
613
|
-
let operateCol = this.tableCols.find((/**
|
|
614
|
-
* @param {?} col
|
|
615
|
-
* @return {?}
|
|
616
|
-
*/
|
|
617
|
-
col => col.title === '操作')) || null;
|
|
618
|
-
if (operateCol) {
|
|
619
|
-
/** @type {?} */
|
|
620
|
-
let textStr = '';
|
|
621
|
-
operateCol.btnList.forEach((/**
|
|
622
|
-
* @param {?} btn
|
|
623
|
-
* @return {?}
|
|
624
|
-
*/
|
|
625
|
-
btn => {
|
|
626
|
-
if (!btn.isRepeat) {
|
|
627
|
-
textStr += btn.name;
|
|
628
|
-
}
|
|
629
|
-
}));
|
|
630
|
-
/** @type {?} */
|
|
631
|
-
const span = document.createElement('a');
|
|
632
|
-
span.style.visibility = 'hidden';
|
|
633
|
-
span.style.position = 'absolute';
|
|
634
|
-
span.style.whiteSpace = 'nowrap';
|
|
635
|
-
span.style.fontSize = '12px';
|
|
636
|
-
span.style.display = 'inline-block'; // 将样式修改为 inline-block
|
|
637
|
-
span.innerText = textStr;
|
|
638
|
-
document.body.appendChild(span);
|
|
639
|
-
operateCol.width = span.offsetWidth + (operateCol.btnList.filter((/**
|
|
640
|
-
* @param {?} item
|
|
641
|
-
* @return {?}
|
|
642
|
-
*/
|
|
643
|
-
item => !item.isRepeat)).length - 1) * 4 + 16;
|
|
644
|
-
span.style.display = 'none';
|
|
645
|
-
document.body.removeChild(span);
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
/**
|
|
649
|
-
* @param {?} fn
|
|
650
|
-
* @param {?} event
|
|
651
|
-
* @return {?}
|
|
652
|
-
*/
|
|
653
|
-
triggerEvent(fn, event) {
|
|
654
|
-
if (fn) {
|
|
655
|
-
fn(event);
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
/**
|
|
659
|
-
* @return {?}
|
|
660
|
-
*/
|
|
661
|
-
dealScroll() {
|
|
662
|
-
/** @type {?} */
|
|
663
|
-
let colWidth = 0;
|
|
664
|
-
if (this.showSelected) {
|
|
665
|
-
colWidth += 40;
|
|
666
|
-
}
|
|
667
|
-
this.tableCols.forEach((/**
|
|
668
|
-
* @param {?} item
|
|
669
|
-
* @return {?}
|
|
670
|
-
*/
|
|
671
|
-
item => {
|
|
672
|
-
if (!item.width) {
|
|
673
|
-
item.width = ColWidth.fixColWidth;
|
|
674
|
-
}
|
|
675
|
-
if (item.isShow) {
|
|
676
|
-
item.fixedWidth = colWidth;
|
|
677
|
-
colWidth += item.width;
|
|
678
|
-
}
|
|
679
|
-
}));
|
|
680
|
-
if (this.tableTotal) {
|
|
681
|
-
this.scroll = {
|
|
682
|
-
x: '1px',
|
|
683
|
-
y: 'calc(100vh - 180px)'
|
|
684
|
-
};
|
|
685
|
-
}
|
|
686
|
-
else {
|
|
687
|
-
this.scroll = {
|
|
688
|
-
x: '1px',
|
|
689
|
-
y: 'calc(100vh - 140px)'
|
|
690
|
-
};
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
/**
|
|
694
|
-
* @param {?} text
|
|
695
|
-
* @param {?} maxWidth
|
|
696
|
-
* @return {?}
|
|
697
|
-
*/
|
|
698
|
-
isTextOverflow(text, maxWidth) {
|
|
699
|
-
/** @type {?} */
|
|
700
|
-
const cachedWidth = this.textWidthCache[text];
|
|
701
|
-
if (cachedWidth !== undefined) {
|
|
702
|
-
return cachedWidth + 15 >= maxWidth;
|
|
703
|
-
}
|
|
704
|
-
/** @type {?} */
|
|
705
|
-
const span = document.createElement('span');
|
|
706
|
-
span.style.visibility = 'hidden';
|
|
707
|
-
span.style.position = 'absolute';
|
|
708
|
-
span.style.whiteSpace = 'nowrap';
|
|
709
|
-
span.style.fontSize = '12px';
|
|
710
|
-
span.style.display = 'inline-block'; // 将样式修改为 inline-block
|
|
711
|
-
span.innerText = text;
|
|
712
|
-
document.body.appendChild(span);
|
|
713
|
-
/** @type {?} */
|
|
714
|
-
const isOverflow = span.offsetWidth + 15 >= maxWidth;
|
|
715
|
-
this.textWidthCache[text] = span.offsetWidth;
|
|
716
|
-
span.style.display = 'none';
|
|
717
|
-
document.body.removeChild(span);
|
|
718
|
-
return isOverflow;
|
|
719
|
-
}
|
|
720
|
-
// 表格勾选逻辑
|
|
721
|
-
/**
|
|
722
|
-
* @param {?} $event
|
|
723
|
-
* @return {?}
|
|
724
|
-
*/
|
|
725
|
-
currentPageDataChange($event) {
|
|
726
|
-
this.listOfDisplayData = $event;
|
|
727
|
-
this.refreshStatus();
|
|
728
|
-
this.resetStatus();
|
|
729
|
-
}
|
|
730
|
-
/**
|
|
731
|
-
* @param {?} reset
|
|
732
|
-
* @return {?}
|
|
733
|
-
*/
|
|
734
|
-
search(reset) {
|
|
735
|
-
this.tableCacheOption.pageSize = this.tablePageSize;
|
|
736
|
-
this.saveTableCacheOption();
|
|
737
|
-
if (reset) {
|
|
738
|
-
this.tablePageSizeChange.emit(this.tablePageSize);
|
|
739
|
-
}
|
|
740
|
-
else {
|
|
741
|
-
this.tablePageIndexChange.emit(this.tablePageIndex);
|
|
742
|
-
// 触发父组件查询事件
|
|
743
|
-
this.tableSearchEvent.emit(reset);
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
/**
|
|
747
|
-
* @return {?}
|
|
748
|
-
*/
|
|
749
|
-
resetStatus() {
|
|
750
|
-
this.isAllDisplayDataChecked = false;
|
|
751
|
-
this.isIndeterminate = false;
|
|
752
|
-
this.mapOfCheckedId = {};
|
|
753
|
-
this.mapOfCheckList = {};
|
|
754
|
-
this.selectEvent.emit([]);
|
|
755
|
-
}
|
|
756
|
-
/**
|
|
757
|
-
* @param {?=} event
|
|
758
|
-
* @param {?=} data
|
|
759
|
-
* @return {?}
|
|
760
|
-
*/
|
|
761
|
-
refreshStatus(event = false, data = null) {
|
|
762
|
-
if (event && data) {
|
|
763
|
-
!this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);
|
|
764
|
-
}
|
|
765
|
-
else if (!event && data) {
|
|
766
|
-
this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];
|
|
767
|
-
}
|
|
768
|
-
this.isAllDisplayDataChecked = this.listOfDisplayData.every((/**
|
|
769
|
-
* @param {?} item
|
|
770
|
-
* @return {?}
|
|
771
|
-
*/
|
|
772
|
-
item => this.mapOfCheckedId[item[this.selectField]]));
|
|
773
|
-
this.isIndeterminate =
|
|
774
|
-
this.listOfDisplayData.some((/**
|
|
775
|
-
* @param {?} item
|
|
776
|
-
* @return {?}
|
|
777
|
-
*/
|
|
778
|
-
item => this.mapOfCheckedId[item[this.selectField]])) && !this.isAllDisplayDataChecked;
|
|
779
|
-
// 触发select事件
|
|
780
|
-
if (this.selectEvent) {
|
|
781
|
-
/** @type {?} */
|
|
782
|
-
const selectedList = Object.values(this.mapOfCheckList);
|
|
783
|
-
this.selectEvent.emit(selectedList);
|
|
784
|
-
}
|
|
785
|
-
// 如果数据为空,则清空勾选标识
|
|
786
|
-
if (this.tableData.content.length === 0) {
|
|
787
|
-
this.isAllDisplayDataChecked = false;
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
/**
|
|
791
|
-
* @param {?} value
|
|
792
|
-
* @return {?}
|
|
793
|
-
*/
|
|
794
|
-
checkAll(value) {
|
|
795
|
-
this.listOfDisplayData.forEach((/**
|
|
796
|
-
* @param {?} item
|
|
797
|
-
* @return {?}
|
|
798
|
-
*/
|
|
799
|
-
item => {
|
|
800
|
-
if (value) {
|
|
801
|
-
!this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);
|
|
802
|
-
}
|
|
803
|
-
else {
|
|
804
|
-
this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];
|
|
805
|
-
}
|
|
806
|
-
this.mapOfCheckedId[item[this.selectField]] = value;
|
|
807
|
-
}));
|
|
808
|
-
this.refreshStatus();
|
|
809
|
-
}
|
|
810
|
-
/**
|
|
811
|
-
* @param {?} str
|
|
812
|
-
* @return {?}
|
|
813
|
-
*/
|
|
814
|
-
judgeColEmpty(str) {
|
|
815
|
-
if (str || str === 0) {
|
|
816
|
-
return str;
|
|
817
|
-
}
|
|
818
|
-
else {
|
|
819
|
-
return '<空>';
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
HdTableComponent.decorators = [
|
|
824
|
-
{ type: Component, args: [{
|
|
825
|
-
selector: 'hd-table',
|
|
826
|
-
template: "<ng-container>\n <hd-button-group>\n <ng-template #buttonGroupLeft>\n <ng-container *ngTemplateOutlet=\"tableLeftButton\"></ng-container>\n <hd-button *ngIf=\"showOperateColWarpButton\" type=\"default\" (click)=\"showDetail = !showDetail\">{{showDetail ?\n '\u7F29\u7565\u663E\u793A': '\u5C55\u5F00\u663E\u793A'}}</hd-button>\n </ng-template>\n <ng-template #buttonGroupRight>\n <ng-container *ngTemplateOutlet=\"tableRightButton\"></ng-container>\n <hd-button type=\"primary\" nz-dropdown nzTrigger=\"click\" [nzDropdownMenu]=\"menu\" (clickAction)=\"confirmDropdown()\"\n [nzVisible]=\"isDropdownVisible\">\u8BBE\u7F6E\u5217</hd-button>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <div style=\"max-height: 400px;overflow-y: scroll;\">\n <div *ngIf=\"showListNodes && nowListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"nowListNodes\" nzCheckable nzDraggable nzBlockNode\n nzShowExpand=\"false\" (nzCheckBoxChange)=\"checkAction($event)\" [nzBeforeDrop]=\"beforeDrop\"\n [nzTreeTemplate]=\"nzTreeTemplate\">\n </nz-tree>\n <ng-template #nzTreeTemplate let-node>\n <span\n class=\"ng-tns-c31-110 draggable ng-star-inserted ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close\"\n [title]=\"node.key\" draggable=\"true\" aria-grabbed=\"true\">\n <span class=\"ant-tree-title\">\n <div class=\"hd-table-tree-node\">\n <span>{{node.key}}</span>\n <div *ngIf=\"!node.origin.disabled\" class=\"hd-table-tree-node-img\">\n <i nz-icon nzType=\"caret-up\" nzTheme=\"outline\"></i>\n <i nz-icon nzType=\"caret-down\" nzTheme=\"outline\"></i>\n </div>\n </div>\n </span>\n </span>\n </ng-template>\n </div>\n <div *ngIf=\"showListNodes && hideListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"hideListNodes\" nzCheckable nzShowExpand=\"false\"\n (nzCheckBoxChange)=\"checkAction($event)\">\n </nz-tree>\n </div>\n </div>\n <div style=\"text-align: right;background: #fff;padding: 4px;\">\n <hd-button style=\"margin-right: 4px;\" type=\"default\" size=\"small\" (clickAction)=\"cancelDropdown()\">\u53D6\u6D88\n </hd-button>\n <hd-button type=\"primary\" size=\"small\" (clickAction)=\"submitGrids()\">\u5B8C\u6210</hd-button>\n </div>\n </nz-dropdown-menu>\n </ng-template>\n </hd-button-group>\n <hd-space type=\"row\" size=\"12\"></hd-space>\n <ng-container *ngTemplateOutlet=\"tableTotal\"></ng-container>\n <hd-space *ngIf=\"tableTotal\" type=\"row\" size=\"12\"></hd-space>\n <nz-table *ngIf=\"showTable\" #hdTable class=\"hd-table-container\" [nzScroll]=\"scroll\" nzShowSizeChanger\n nzShowSizeChanger nzShowQuickJumper nzFrontPagination=\"false\" nzSize=\"middle\" [nzData]=\"tableData.content\"\n [nzTotal]=\"tableData.totalElements\" [(nzPageIndex)]=\"tablePageIndex\" [nzLoading]=\"tableLoading\"\n [nzPageSizeOptions]=\"[ 10, 50, 100, 200 ]\" [(nzPageSize)]=\"tablePageSize\" (nzPageSizeChange)=\"search(true)\"\n (nzPageIndexChange)=\"search(false)\" (nzCurrentPageDataChange)=\"showSelected ? currentPageDataChange($event) : null\"\n [nzShowTotal]=\"tableTotalTemplate\">\n <thead (nzSortChange)=\"sort($event)\" nzSingleSort>\n <tr>\n <th nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected\" nzShowCheckbox [(nzChecked)]=\"isAllDisplayDataChecked\"\n [nzIndeterminate]=\"isIndeterminate\" (nzCheckedChange)=\"checkAll($event)\"></th>\n <ng-container *ngFor=\"let col of tableCols\">\n <th *ngIf=\"col.isShow\" [nzWidth]=\"col.width + 'px'\" [nzAlign]=\"col.align\"\n [nzLeft]=\"col.fixed === 'left' ? col.fixedWidth + 'px' : null\"\n [nzRight]=\"col.fixed === 'right' ? 0 + 'px' : null\" nz-resizable nzBounds=\"window\" nzPreview\n (nzResizeEnd)=\"onResize($event, col)\" [nzShowSort]=\"col.canSort\" [nzSortKey]=\"col.name\">\n {{ col.title }}\n <nz-resize-handle nzDirection=\"right\">\n <div class=\"resize-trigger\"></div>\n </nz-resize-handle>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of hdTable.data;index as i\">\n <td nzLeft=\"0px\" *ngIf=\"showSelected\" nzShowCheckbox [(nzChecked)]=\"mapOfCheckedId[data[selectField]]\"\n (nzCheckedChange)=\"refreshStatus($event, data)\"></td>\n <ng-container *ngFor=\"let col of tableCols\">\n <td *ngIf=\"col.isShow\" [ngStyle]=\"{'max-width': col.width + 'px'}\" [nzAlign]=\"col.align\"\n [nzLeft]=\"col.fixed === 'left' ? col.fixedWidth + 'px' : null\"\n [nzRight]=\"col.fixed === 'right' ? 0 + 'px' : null\"\n [ngClass]=\"(col.canWarp && showDetail) ? 'common-td-wrap' : ''\">\n <ng-container *ngIf=\"col.title === '\u64CD\u4F5C';else notOperateTemplate\">\n <div class=\"common-btn-group\">\n <ng-container *ngFor=\"let btn of col.btnList\">\n <ng-container *ngIf=\"!btn.showConfirm;else showConfirmTemplate\">\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"btn.name === '\u5220\u9664' ? 'common-danger-btn': ''\"\n (click)=\"triggerEvent(btn.click || null, data)\">{{ btn.name }}</a>\n </ng-container>\n <ng-template #showConfirmTemplate>\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"btn.name === '\u5220\u9664' ? 'common-danger-btn': ''\" nz-popconfirm\n [nzPopconfirmTitle]=\"'\u786E\u8BA4\u8981' + btn.name + '\u5417?'\"\n (nzOnConfirm)=\"triggerEvent(btn.click || null, data)\">{{\n btn.name }}</a>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #notOperateTemplate>\n <ng-container *ngIf=\"col.name === 'state';else otherTemplate\">\n <hd-status [status]=\"data['state']\">{{ judgeColEmpty(col.render ? col.render(data) : data['state'])}}\n </hd-status>\n </ng-container>\n <ng-template #otherTemplate>\n <ng-container *ngIf=\"col.click;else noClickTemplate\">\n <ng-container\n *ngIf=\"!isTextOverflow(col.render ? col.render(data) : data[col.name], col.width);else overflowTemplate\">\n <a [ngStyle]=\"{'color': col?.color ? col.color : null}\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ judgeColEmpty(col.render ? col.render(data) :\n data[col.name])}}</a>\n </ng-container>\n <ng-template #overflowTemplate>\n <a [ngStyle]=\"{'color': col?.color ? col.color : null}\" nz-tooltip\n [nzTooltipTitle]=\"col.render ? col.render(data) : data[col.name]\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ judgeColEmpty(col.render ? col.render(data) :\n data[col.name])}}</a>\n </ng-template>\n </ng-container>\n <ng-template #noClickTemplate>\n <ng-container\n *ngIf=\"!isTextOverflow(col.render ? col.render(data) : data[col.name], col.width);else overflowTemplate\">\n <span [ngStyle]=\"{'color': col?.color ? col.color : null}\">{{ judgeColEmpty(col.render ?\n col.render(data) :\n data[col.name])}}</span>\n </ng-container>\n <ng-template #overflowTemplate>\n <span [ngStyle]=\"{'color': col?.color ? col.color : null}\" nz-tooltip\n [nzTooltipTitle]=\"col.render ? col.render(data) : data[col.name]\">\n {{ judgeColEmpty(col.render ? col.render(data) : data[col.name])}}</span>\n </ng-template>\n </ng-template>\n </ng-template>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n <!-- \u5408\u8BA1\u6240\u6709\u6570\u636E\u533A\u57DF \u9700\u8981\u540E\u7AEF\u63A5\u53E3\u914D\u5408 -->\n <tr *ngIf=\"showTableTotal\" class=\"hd-table-total\">\n <td>\u5408\u8BA1</td>\n <ng-container *ngFor=\"let tableTotalOption of tableTotalOptionList\">\n <td>{{ tableTotalOption }}</td>\n </ng-container>\n </tr>\n </tbody>\n <ng-template #tableTotalTemplate>\n \u5171 {{tableData.totalElements}} \u6761\u6570\u636E\n </ng-template>\n </nz-table>\n</ng-container>",
|
|
827
|
-
styles: ["::ng-deep .common-btn-group>a{font-size:12px;font-weight:400;color:#12a34f!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset;padding:0 6px!important}::ng-deep .ant-form-item-label>label{color:#4b504e}::ng-deep .ant-input-number-input{height:28px}::ng-deep .ant-input-number{height:28px}textarea.ant-input{height:auto;min-height:28px}::ng-deep .ant-select-selection--multiple{min-height:28px}::ng-deep .ant-select-selection__rendered>ul>li{height:22px!important;margin-top:3px!important;line-height:22px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:28px!important}::ng-deep .ant-input{height:28px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:28px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:12px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:12px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-time-picker{width:100%}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}.nz-resizable-preview{position:absolute;top:0;left:0;z-index:8;border:1px dashed #d1d1d1}.nz-resizable-handle{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:9}.nz-resizable-handle-top{width:100%;height:10px;top:-5px;left:0}.nz-resizable-handle-right{height:100%}.nz-resizable-handle-bottom{width:100%;height:10px;bottom:-5px;left:0}.nz-resizable-handle-left{width:10px;height:100%;top:0;left:-5px}.nz-resizable-handle-topRight{width:20px;height:20px;top:-5px;right:-5px;z-index:10}.nz-resizable-handle-bottomRight{width:20px;height:20px;right:-5px;bottom:-5px;z-index:10}.nz-resizable-handle-bottomLeft{width:20px;height:20px;bottom:-5px;left:-5px;z-index:10}.nz-resizable-handle-topLeft{width:20px;height:20px;top:-5px;left:-5px;z-index:10}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottom,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-top{cursor:row-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-left,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-right{cursor:col-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottomRight,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-topLeft{cursor:nwse-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottomLeft,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-topRight{cursor:nesw-resize}.hd-table-container ::ng-deep .ant-pagination-options-quick-jumper input{border-radius:2px;border:1px solid #d9d9d9}.hd-table-container ::ng-deep .ant-pagination-options .ant-select-selection{border-radius:2px}.hd-table-container ::ng-deep .ant-table-thead>tr>th{border-bottom:1px solid #ecf1ed;white-space:nowrap;text-overflow:ellipsis}.hd-table-container ::ng-deep .ant-table-tbody>tr>td{border-bottom:1px solid #ecf1ed;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.hd-table-container ::ng-deep .hd-table-total>td{border:0!important}::ng-deep .ant-dropdown-menu{border-radius:0}::ng-deep .ant-dropdown{margin-top:8px!important}.common-td-wrap{white-space:normal!important;word-break:break-all}.nz-resizable-preview{border-width:0 1px 0 0}.resize-trigger{width:10px;height:15px;position:relative;top:calc((100% - 15px)/ 2)}.resize-trigger::after{position:absolute;top:calc((100% - 15px)/ 2);left:0;background:#d5d5d5;content:'';width:1px;height:15px;z-index:1}.nz-resizable-handle-right{position:absolute;width:10px;top:0;right:-5px;z-index:inherit}.hd-table-tree-node{display:inline-flex;align-items:center;padding-right:10px}.hd-table-tree-node .hd-table-tree-node-img{display:flex;flex-direction:column;position:absolute;right:0;margin-top:-2.5px}.hd-table-tree-node .hd-table-tree-node-img i{opacity:.3}.hd-table-tree-node .hd-table-tree-node-img i:last-child{margin-top:-5px}img{width:20px;height:20px}.ant-table-th-left-sticky{z-index:2}::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}"]
|
|
828
|
-
}] }
|
|
829
|
-
];
|
|
830
|
-
/** @nocollapse */
|
|
831
|
-
HdTableComponent.ctorParameters = () => [
|
|
832
|
-
{ type: ChangeDetectorRef },
|
|
833
|
-
{ type: CommonSessionService }
|
|
834
|
-
];
|
|
835
|
-
HdTableComponent.propDecorators = {
|
|
836
|
-
uuid: [{ type: Input }],
|
|
837
|
-
tableCols: [{ type: Input }],
|
|
838
|
-
tableData: [{ type: Input }],
|
|
839
|
-
showSelected: [{ type: Input }],
|
|
840
|
-
showOperateColWarpButton: [{ type: Input }],
|
|
841
|
-
selectField: [{ type: Input }],
|
|
842
|
-
showTableTotal: [{ type: Input }],
|
|
843
|
-
tableTotalOption: [{ type: Input }],
|
|
844
|
-
sortEvent: [{ type: Output }],
|
|
845
|
-
selectEvent: [{ type: Output }],
|
|
846
|
-
tableSearchEvent: [{ type: Output }],
|
|
847
|
-
tableLoading: [{ type: Input }],
|
|
848
|
-
tablePageIndex: [{ type: Input }],
|
|
849
|
-
tablePageSize: [{ type: Input }],
|
|
850
|
-
tablePageIndexChange: [{ type: Output }],
|
|
851
|
-
tablePageSizeChange: [{ type: Output }],
|
|
852
|
-
tableTotal: [{ type: ContentChild, args: ["tableTotal", { static: false },] }],
|
|
853
|
-
tableLeftButton: [{ type: ContentChild, args: ["tableLeftButton", { static: false },] }],
|
|
854
|
-
tableRightButton: [{ type: ContentChild, args: ["tableRightButton", { static: false },] }]
|
|
855
|
-
};
|
|
856
|
-
tslib_1.__decorate([
|
|
857
|
-
InputBoolean(),
|
|
858
|
-
tslib_1.__metadata("design:type", Boolean)
|
|
859
|
-
], HdTableComponent.prototype, "showSelected", void 0);
|
|
860
|
-
tslib_1.__decorate([
|
|
861
|
-
InputBoolean(),
|
|
862
|
-
tslib_1.__metadata("design:type", Boolean)
|
|
863
|
-
], HdTableComponent.prototype, "showOperateColWarpButton", void 0);
|
|
864
|
-
tslib_1.__decorate([
|
|
865
|
-
InputBoolean(),
|
|
866
|
-
tslib_1.__metadata("design:type", Boolean)
|
|
867
|
-
], HdTableComponent.prototype, "showTableTotal", void 0);
|
|
868
|
-
if (false) {
|
|
869
|
-
/** @type {?} */
|
|
870
|
-
HdTableComponent.prototype.uuid;
|
|
871
|
-
/** @type {?} */
|
|
872
|
-
HdTableComponent.prototype.tableCols;
|
|
873
|
-
/** @type {?} */
|
|
874
|
-
HdTableComponent.prototype.tableData;
|
|
875
|
-
/** @type {?} */
|
|
876
|
-
HdTableComponent.prototype.showSelected;
|
|
877
|
-
/** @type {?} */
|
|
878
|
-
HdTableComponent.prototype.showOperateColWarpButton;
|
|
879
|
-
/** @type {?} */
|
|
880
|
-
HdTableComponent.prototype.selectField;
|
|
881
|
-
/** @type {?} */
|
|
882
|
-
HdTableComponent.prototype.showTableTotal;
|
|
883
|
-
/** @type {?} */
|
|
884
|
-
HdTableComponent.prototype.tableTotalOption;
|
|
885
|
-
/** @type {?} */
|
|
886
|
-
HdTableComponent.prototype.sortEvent;
|
|
887
|
-
/** @type {?} */
|
|
888
|
-
HdTableComponent.prototype.selectEvent;
|
|
889
|
-
/** @type {?} */
|
|
890
|
-
HdTableComponent.prototype.tableSearchEvent;
|
|
891
|
-
/** @type {?} */
|
|
892
|
-
HdTableComponent.prototype.tableLoading;
|
|
893
|
-
/** @type {?} */
|
|
894
|
-
HdTableComponent.prototype.tablePageIndex;
|
|
895
|
-
/** @type {?} */
|
|
896
|
-
HdTableComponent.prototype.tablePageSize;
|
|
897
|
-
/** @type {?} */
|
|
898
|
-
HdTableComponent.prototype.tablePageIndexChange;
|
|
899
|
-
/** @type {?} */
|
|
900
|
-
HdTableComponent.prototype.tablePageSizeChange;
|
|
901
|
-
/** @type {?} */
|
|
902
|
-
HdTableComponent.prototype.tableTotal;
|
|
903
|
-
/** @type {?} */
|
|
904
|
-
HdTableComponent.prototype.tableLeftButton;
|
|
905
|
-
/** @type {?} */
|
|
906
|
-
HdTableComponent.prototype.tableRightButton;
|
|
907
|
-
/** @type {?} */
|
|
908
|
-
HdTableComponent.prototype.scroll;
|
|
909
|
-
/** @type {?} */
|
|
910
|
-
HdTableComponent.prototype.isAllDisplayDataChecked;
|
|
911
|
-
/** @type {?} */
|
|
912
|
-
HdTableComponent.prototype.isIndeterminate;
|
|
913
|
-
/** @type {?} */
|
|
914
|
-
HdTableComponent.prototype.listOfDisplayData;
|
|
915
|
-
/** @type {?} */
|
|
916
|
-
HdTableComponent.prototype.listOfAllData;
|
|
917
|
-
/** @type {?} */
|
|
918
|
-
HdTableComponent.prototype.listOfSelection;
|
|
919
|
-
/** @type {?} */
|
|
920
|
-
HdTableComponent.prototype.mapOfCheckedId;
|
|
921
|
-
/** @type {?} */
|
|
922
|
-
HdTableComponent.prototype.mapOfCheckList;
|
|
923
|
-
/** @type {?} */
|
|
924
|
-
HdTableComponent.prototype.tableTotalOptionList;
|
|
925
|
-
/**
|
|
926
|
-
* @type {?}
|
|
927
|
-
* @private
|
|
928
|
-
*/
|
|
929
|
-
HdTableComponent.prototype.textWidthCache;
|
|
930
|
-
/** @type {?} */
|
|
931
|
-
HdTableComponent.prototype.tableCacheOption;
|
|
932
|
-
/** @type {?} */
|
|
933
|
-
HdTableComponent.prototype.userSession;
|
|
934
|
-
/** @type {?} */
|
|
935
|
-
HdTableComponent.prototype.tableColsCache;
|
|
936
|
-
/** @type {?} */
|
|
937
|
-
HdTableComponent.prototype.showTable;
|
|
938
|
-
/** @type {?} */
|
|
939
|
-
HdTableComponent.prototype.selectColListNodes;
|
|
940
|
-
/** @type {?} */
|
|
941
|
-
HdTableComponent.prototype.selectColListNodesCache;
|
|
942
|
-
/** @type {?} */
|
|
943
|
-
HdTableComponent.prototype.showListNodes;
|
|
944
|
-
/** @type {?} */
|
|
945
|
-
HdTableComponent.prototype.isDropdownVisible;
|
|
946
|
-
/** @type {?} */
|
|
947
|
-
HdTableComponent.prototype.nowListNodes;
|
|
948
|
-
/** @type {?} */
|
|
949
|
-
HdTableComponent.prototype.hideListNodes;
|
|
950
|
-
/** @type {?} */
|
|
951
|
-
HdTableComponent.prototype.cancelNowListNodes;
|
|
952
|
-
/** @type {?} */
|
|
953
|
-
HdTableComponent.prototype.cancelHideListNodes;
|
|
954
|
-
/** @type {?} */
|
|
955
|
-
HdTableComponent.prototype.showDetail;
|
|
956
|
-
/** @type {?} */
|
|
957
|
-
HdTableComponent.prototype.localforage;
|
|
958
|
-
/** @type {?} */
|
|
959
|
-
HdTableComponent.prototype.localtionTmp;
|
|
960
|
-
/** @type {?} */
|
|
961
|
-
HdTableComponent.prototype.beforeDrop;
|
|
962
|
-
/**
|
|
963
|
-
* @type {?}
|
|
964
|
-
* @private
|
|
965
|
-
*/
|
|
966
|
-
HdTableComponent.prototype.cdr;
|
|
967
|
-
/**
|
|
968
|
-
* @type {?}
|
|
969
|
-
* @private
|
|
970
|
-
*/
|
|
971
|
-
HdTableComponent.prototype.commonSessionService;
|
|
972
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import * as tslib_1 from "tslib";
|
|
6
|
+
import { ChangeDetectorRef, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
|
|
7
|
+
import * as localforage from 'localforage';
|
|
8
|
+
import { InputBoolean } from 'ng-zorro-antd/core';
|
|
9
|
+
import { of } from 'rxjs';
|
|
10
|
+
import { delay } from 'rxjs/operators';
|
|
11
|
+
import { ColWidth } from '../model/colWidth';
|
|
12
|
+
import { Page } from '../model/common-type';
|
|
13
|
+
import { CommonSessionService } from '../service/common-session.service';
|
|
14
|
+
import { TableCacheOption, TreeGrid } from './hd-table.service';
|
|
15
|
+
export class HdTableComponent {
|
|
16
|
+
/**
|
|
17
|
+
* @param {?} cdr
|
|
18
|
+
* @param {?} commonSessionService
|
|
19
|
+
*/
|
|
20
|
+
constructor(cdr, commonSessionService) {
|
|
21
|
+
this.cdr = cdr;
|
|
22
|
+
this.commonSessionService = commonSessionService;
|
|
23
|
+
this.tableCols = [];
|
|
24
|
+
this.showSelected = false;
|
|
25
|
+
this.showOperateColWarpButton = false;
|
|
26
|
+
this.selectField = 'billNumber';
|
|
27
|
+
// 合计区域
|
|
28
|
+
this.showTableTotal = false;
|
|
29
|
+
this.sortEvent = new EventEmitter();
|
|
30
|
+
this.selectEvent = new EventEmitter();
|
|
31
|
+
this.tableSearchEvent = new EventEmitter();
|
|
32
|
+
this.tableLoading = false;
|
|
33
|
+
// 表格分页参数
|
|
34
|
+
this.tablePageIndex = 1;
|
|
35
|
+
this.tablePageIndexChange = new EventEmitter();
|
|
36
|
+
this.tablePageSizeChange = new EventEmitter();
|
|
37
|
+
this.scroll = null;
|
|
38
|
+
// 表格勾选参数
|
|
39
|
+
this.isAllDisplayDataChecked = false;
|
|
40
|
+
this.isIndeterminate = false;
|
|
41
|
+
this.listOfDisplayData = [];
|
|
42
|
+
this.listOfAllData = [];
|
|
43
|
+
this.mapOfCheckedId = {};
|
|
44
|
+
this.mapOfCheckList = {};
|
|
45
|
+
// 合计参数
|
|
46
|
+
this.tableTotalOptionList = [];
|
|
47
|
+
this.textWidthCache = {};
|
|
48
|
+
// 缓存信息
|
|
49
|
+
this.tableCacheOption = new TableCacheOption();
|
|
50
|
+
this.tableColsCache = [];
|
|
51
|
+
this.showTable = false;
|
|
52
|
+
this.selectColListNodes = [];
|
|
53
|
+
this.selectColListNodesCache = [];
|
|
54
|
+
this.showListNodes = false;
|
|
55
|
+
this.isDropdownVisible = false;
|
|
56
|
+
// 设置列的可见操作数组
|
|
57
|
+
this.nowListNodes = [];
|
|
58
|
+
// 设置列的不可见操作数组
|
|
59
|
+
this.hideListNodes = [];
|
|
60
|
+
// 点击时需要有临时数组存放两个tree,用于取消时候恢复调整前的状态
|
|
61
|
+
this.cancelNowListNodes = [];
|
|
62
|
+
this.cancelHideListNodes = [];
|
|
63
|
+
this.showDetail = false;
|
|
64
|
+
this.localforage = null;
|
|
65
|
+
this.localtionTmp = '';
|
|
66
|
+
// 拖拽操作
|
|
67
|
+
this.beforeDrop = (/**
|
|
68
|
+
* @param {?} arg
|
|
69
|
+
* @return {?}
|
|
70
|
+
*/
|
|
71
|
+
(arg) => {
|
|
72
|
+
if (arg.node.origin.disabled || !arg.dragNode.origin.checked || arg.pos === 0) {
|
|
73
|
+
return of(false);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
/** @type {?} */
|
|
77
|
+
let node = new TreeGrid();
|
|
78
|
+
node.checked = arg.dragNode.origin.checked;
|
|
79
|
+
node.disabled = arg.dragNode.origin.disabled;
|
|
80
|
+
node.expanded = arg.dragNode.origin.expanded;
|
|
81
|
+
node.isLeaf = arg.dragNode.origin.isLeaf;
|
|
82
|
+
node.key = arg.dragNode.origin.key;
|
|
83
|
+
node.selectable = arg.dragNode.origin.selectable;
|
|
84
|
+
node.title = arg.dragNode.origin.title;
|
|
85
|
+
// 拖拽元素下标
|
|
86
|
+
/** @type {?} */
|
|
87
|
+
let dragNodeIndex = this.nowListNodes.findIndex((/**
|
|
88
|
+
* @param {?} item
|
|
89
|
+
* @return {?}
|
|
90
|
+
*/
|
|
91
|
+
item => { return item.title == arg.dragNode.origin.title; }));
|
|
92
|
+
// 目标位置的下标
|
|
93
|
+
/** @type {?} */
|
|
94
|
+
let nodeIndex = this.nowListNodes.findIndex((/**
|
|
95
|
+
* @param {?} item
|
|
96
|
+
* @return {?}
|
|
97
|
+
*/
|
|
98
|
+
item => { return item.title == arg.node.origin.title; })) + (arg.pos === -1 ? 0 : arg.pos);
|
|
99
|
+
this.nowListNodes.splice(nodeIndex, 0, node);
|
|
100
|
+
this.nowListNodes.splice(nodeIndex >= dragNodeIndex ? dragNodeIndex : dragNodeIndex + 1, 1);
|
|
101
|
+
return of(true).pipe(delay(100));
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
this.localforage = localforage.createInstance({
|
|
105
|
+
driver: localforage.INDEXEDDB,
|
|
106
|
+
name: 'hd-fscm',
|
|
107
|
+
// 设置存储库的名称
|
|
108
|
+
version: 1.0,
|
|
109
|
+
// 设置存储库的版本
|
|
110
|
+
storeName: 'hd-fscm-store',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* @return {?}
|
|
115
|
+
*/
|
|
116
|
+
ngOnInit() {
|
|
117
|
+
this.localtionTmp = location.pathname;
|
|
118
|
+
if (this.localtionTmp) {
|
|
119
|
+
this.localtionTmp = this.localtionTmp.replace(/\//g, "_");
|
|
120
|
+
}
|
|
121
|
+
this.userSession = this.commonSessionService.getSession('__jy_authorization_session__');
|
|
122
|
+
// 用于开发环境调试
|
|
123
|
+
if (!this.userSession) {
|
|
124
|
+
this.userSession = {
|
|
125
|
+
userCode: 'dev'
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
this.deleteHideItem();
|
|
129
|
+
if (!this.tableCols || this.tableCols.length === 0) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.localforage.ready().then((/**
|
|
133
|
+
* @return {?}
|
|
134
|
+
*/
|
|
135
|
+
() => {
|
|
136
|
+
this.getInitLocalforage();
|
|
137
|
+
})).catch((/**
|
|
138
|
+
* @param {?} e
|
|
139
|
+
* @return {?}
|
|
140
|
+
*/
|
|
141
|
+
function (e) {
|
|
142
|
+
console.log('localforage加载异常step1', e);
|
|
143
|
+
throw 'localforage加载异常';
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* @param {?} changes
|
|
148
|
+
* @return {?}
|
|
149
|
+
*/
|
|
150
|
+
ngOnChanges(changes) {
|
|
151
|
+
// 数据改变时,重置勾选状态
|
|
152
|
+
if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {
|
|
153
|
+
if (changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']
|
|
154
|
+
|| changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this.resetStatus();
|
|
158
|
+
}
|
|
159
|
+
if (changes['tableCols'] && JSON.stringify(changes['tableCols'].currentValue) !== JSON.stringify(changes['tableCols'].previousValue)) {
|
|
160
|
+
this.deleteHideItem();
|
|
161
|
+
if (!this.tableCols || this.tableCols.length === 0) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
this.localforage.ready().then((/**
|
|
165
|
+
* @return {?}
|
|
166
|
+
*/
|
|
167
|
+
() => {
|
|
168
|
+
this.getInitLocalforage();
|
|
169
|
+
})).catch((/**
|
|
170
|
+
* @param {?} e
|
|
171
|
+
* @return {?}
|
|
172
|
+
*/
|
|
173
|
+
function (e) {
|
|
174
|
+
console.log('localforage加载异常step2', e);
|
|
175
|
+
throw 'localforage加载异常';
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* @return {?}
|
|
181
|
+
*/
|
|
182
|
+
deleteHideItem() {
|
|
183
|
+
// 首先把isShow为false数据剔除掉
|
|
184
|
+
this.tableCols = this.tableCols.filter((/**
|
|
185
|
+
* @param {?} item
|
|
186
|
+
* @return {?}
|
|
187
|
+
*/
|
|
188
|
+
item => {
|
|
189
|
+
// 如果对象没有 isShow 属性,则默认为 true,保留该对象
|
|
190
|
+
if (!item.hasOwnProperty('isShow')) {
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
// 如果对象有 isShow 属性,则检查其值是否为 true
|
|
194
|
+
return item.isShow === true;
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* @param {?} sort
|
|
199
|
+
* @return {?}
|
|
200
|
+
*/
|
|
201
|
+
sort(sort) {
|
|
202
|
+
this.sortEvent.emit(sort);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* @return {?}
|
|
206
|
+
*/
|
|
207
|
+
getInitLocalforage() {
|
|
208
|
+
// 首先获取当前hd-table存储的数据 如果没有,则初始化下当前的数据
|
|
209
|
+
this.localforage.getItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid).then((/**
|
|
210
|
+
* @param {?} value
|
|
211
|
+
* @return {?}
|
|
212
|
+
*/
|
|
213
|
+
(value) => {
|
|
214
|
+
this.tableCacheOption = value;
|
|
215
|
+
if (this.tableCacheOption.pageSize && this.tableCacheOption.pageSize > 10) {
|
|
216
|
+
this.tablePageSize = this.tableCacheOption.pageSize;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.tablePageSize = this.tableCacheOption.pageSize || 10;
|
|
220
|
+
}
|
|
221
|
+
if (!this.tableCacheOption.colWidths) {
|
|
222
|
+
this.tableCacheOption.colWidths = new Map();
|
|
223
|
+
}
|
|
224
|
+
this.tablePageSizeChange.emit(this.tablePageSize);
|
|
225
|
+
this.initTable();
|
|
226
|
+
})).catch((/**
|
|
227
|
+
* @param {?} err
|
|
228
|
+
* @return {?}
|
|
229
|
+
*/
|
|
230
|
+
(err) => {
|
|
231
|
+
this.tableCacheOption = new TableCacheOption();
|
|
232
|
+
this.tablePageSize = 10;
|
|
233
|
+
this.tableCacheOption.pageSize = 10;
|
|
234
|
+
this.tableCacheOption.colWidths = new Map();
|
|
235
|
+
this.tablePageSizeChange.emit(this.tablePageSize);
|
|
236
|
+
this.initTable();
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* @return {?}
|
|
241
|
+
*/
|
|
242
|
+
initTable() {
|
|
243
|
+
this.showTable = false;
|
|
244
|
+
if (!this.uuid) {
|
|
245
|
+
throw 'hd-table缺失uuid参数,请使用编辑器插件生成并给hd-table赋予uuid属性';
|
|
246
|
+
}
|
|
247
|
+
if (this.judgeRepeatCols()) {
|
|
248
|
+
this.dealCols();
|
|
249
|
+
this.setCols();
|
|
250
|
+
this.dealScroll();
|
|
251
|
+
this.dealOperateBtn();
|
|
252
|
+
this.showTable = true;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// 设置列点击取消
|
|
256
|
+
/**
|
|
257
|
+
* @return {?}
|
|
258
|
+
*/
|
|
259
|
+
cancelDropdown() {
|
|
260
|
+
this.isDropdownVisible = false;
|
|
261
|
+
this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));
|
|
262
|
+
this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));
|
|
263
|
+
}
|
|
264
|
+
// 点击触发设置列
|
|
265
|
+
/**
|
|
266
|
+
* @return {?}
|
|
267
|
+
*/
|
|
268
|
+
confirmDropdown() {
|
|
269
|
+
// 临时存放下,取消的时候恢复原来的状态 深拷贝下对象数组
|
|
270
|
+
this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));
|
|
271
|
+
this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));
|
|
272
|
+
this.isDropdownVisible = true;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* @return {?}
|
|
276
|
+
*/
|
|
277
|
+
submitGrids() {
|
|
278
|
+
this.tableCacheOption.cols = [];
|
|
279
|
+
this.nowListNodes.forEach((/**
|
|
280
|
+
* @param {?} item
|
|
281
|
+
* @return {?}
|
|
282
|
+
*/
|
|
283
|
+
item => {
|
|
284
|
+
this.tableCacheOption.cols.push(item.title);
|
|
285
|
+
}));
|
|
286
|
+
this.saveTableCacheOption();
|
|
287
|
+
this.initTable();
|
|
288
|
+
this.isDropdownVisible = false;
|
|
289
|
+
}
|
|
290
|
+
// 从缓存设置列
|
|
291
|
+
/**
|
|
292
|
+
* @return {?}
|
|
293
|
+
*/
|
|
294
|
+
setCols() {
|
|
295
|
+
this.showListNodes = false;
|
|
296
|
+
this.nowListNodes = [];
|
|
297
|
+
this.hideListNodes = [];
|
|
298
|
+
if (this.tableCacheOption.cols) {
|
|
299
|
+
let { notIncols, incols } = this.tableColsCache.reduce((/**
|
|
300
|
+
* @param {?} acc
|
|
301
|
+
* @param {?} item
|
|
302
|
+
* @return {?}
|
|
303
|
+
*/
|
|
304
|
+
(acc, item) => {
|
|
305
|
+
if (this.tableCacheOption.cols.includes(item.title)) {
|
|
306
|
+
acc.incols.push(item);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
acc.notIncols.push(item);
|
|
310
|
+
}
|
|
311
|
+
return acc;
|
|
312
|
+
}), { notIncols: [], incols: [] });
|
|
313
|
+
incols.sort((/**
|
|
314
|
+
* @param {?} a
|
|
315
|
+
* @param {?} b
|
|
316
|
+
* @return {?}
|
|
317
|
+
*/
|
|
318
|
+
(a, b) => {
|
|
319
|
+
return this.tableCacheOption.cols.indexOf(a.title) - this.tableCacheOption.cols.indexOf(b.title);
|
|
320
|
+
}));
|
|
321
|
+
this.tableCols = incols.concat(notIncols);
|
|
322
|
+
}
|
|
323
|
+
this.tableCols.forEach((/**
|
|
324
|
+
* @param {?} element
|
|
325
|
+
* @param {?} index
|
|
326
|
+
* @return {?}
|
|
327
|
+
*/
|
|
328
|
+
(element, index) => {
|
|
329
|
+
if (this.tableCacheOption.cols) {
|
|
330
|
+
element.isShow = this.tableCacheOption.cols.includes(element.title) ? true : false;
|
|
331
|
+
if (element.isShow) {
|
|
332
|
+
this.nowListNodes.push({
|
|
333
|
+
title: element.title,
|
|
334
|
+
key: element.title,
|
|
335
|
+
disabled: element.fixed ? true : false,
|
|
336
|
+
// selectable: false,
|
|
337
|
+
checked: this.tableCacheOption.cols.includes(element.title) ? true : false
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
this.hideListNodes.push({
|
|
342
|
+
title: element.title,
|
|
343
|
+
key: element.title,
|
|
344
|
+
disabled: element.fixed ? true : false,
|
|
345
|
+
// selectable: false,
|
|
346
|
+
checked: this.tableCacheOption.cols.includes(element.title) ? true : false
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
element.isShow = true;
|
|
352
|
+
this.nowListNodes.push({
|
|
353
|
+
title: element.title,
|
|
354
|
+
key: element.title,
|
|
355
|
+
checked: true,
|
|
356
|
+
// selectable: false,
|
|
357
|
+
disabled: element.fixed ? true : false
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
}));
|
|
361
|
+
// 调整列宽为缓存宽度
|
|
362
|
+
if (this.tableCacheOption && this.tableCacheOption.colWidths && this.tableCacheOption.colWidths.size !== 0) {
|
|
363
|
+
this.tableCols.forEach((/**
|
|
364
|
+
* @param {?} col
|
|
365
|
+
* @return {?}
|
|
366
|
+
*/
|
|
367
|
+
(col) => {
|
|
368
|
+
if (this.tableCacheOption.colWidths.has(col.title)) {
|
|
369
|
+
col.width = this.tableCacheOption.colWidths.get(col.title);
|
|
370
|
+
}
|
|
371
|
+
}));
|
|
372
|
+
}
|
|
373
|
+
this.dealCols();
|
|
374
|
+
setTimeout((/**
|
|
375
|
+
* @return {?}
|
|
376
|
+
*/
|
|
377
|
+
() => {
|
|
378
|
+
this.showListNodes = true;
|
|
379
|
+
}), 0);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* @param {?} arr
|
|
383
|
+
* @param {?} elementToMoveTitle
|
|
384
|
+
* @param {?} targetElementTitle
|
|
385
|
+
* @param {?} pos
|
|
386
|
+
* @return {?}
|
|
387
|
+
*/
|
|
388
|
+
moveElementNearby(arr, elementToMoveTitle, targetElementTitle, pos) {
|
|
389
|
+
/** @type {?} */
|
|
390
|
+
const tmpArray = JSON.parse(JSON.stringify(arr));
|
|
391
|
+
/** @type {?} */
|
|
392
|
+
const targetIndex = tmpArray.findIndex((/**
|
|
393
|
+
* @param {?} item
|
|
394
|
+
* @return {?}
|
|
395
|
+
*/
|
|
396
|
+
item => item.title === targetElementTitle));
|
|
397
|
+
/** @type {?} */
|
|
398
|
+
const elementIndex = tmpArray.findIndex((/**
|
|
399
|
+
* @param {?} item
|
|
400
|
+
* @return {?}
|
|
401
|
+
*/
|
|
402
|
+
item => item.title === elementToMoveTitle));
|
|
403
|
+
/** @type {?} */
|
|
404
|
+
const newIndex = pos < 0 ? (targetIndex + pos) : targetIndex;
|
|
405
|
+
// 移除目标元素,并插入到新的位置
|
|
406
|
+
/** @type {?} */
|
|
407
|
+
const removedElement = tmpArray.splice(elementIndex, 1);
|
|
408
|
+
tmpArray.splice(newIndex + 1, 0, removedElement[0]);
|
|
409
|
+
return tmpArray;
|
|
410
|
+
}
|
|
411
|
+
// 勾选操作
|
|
412
|
+
/**
|
|
413
|
+
* @param {?} event
|
|
414
|
+
* @return {?}
|
|
415
|
+
*/
|
|
416
|
+
checkAction(event) {
|
|
417
|
+
// 勾选只有在hideListNodes,取消勾选只有在nowListNodes
|
|
418
|
+
if (event.node.origin.checked) {
|
|
419
|
+
/** @type {?} */
|
|
420
|
+
let node = new TreeGrid();
|
|
421
|
+
node = this.hideListNodes.find((/**
|
|
422
|
+
* @param {?} item
|
|
423
|
+
* @return {?}
|
|
424
|
+
*/
|
|
425
|
+
(item) => {
|
|
426
|
+
return item.title === event.node.origin.title;
|
|
427
|
+
}));
|
|
428
|
+
node.checked = true;
|
|
429
|
+
// 找到第一个fixed属性为right的title,找到插入元素的位置
|
|
430
|
+
/** @type {?} */
|
|
431
|
+
let title = null;
|
|
432
|
+
for (let i = this.tableColsCache.length - 1; i >= 0; i--) {
|
|
433
|
+
if (this.tableColsCache[i].fixed === 'right') {
|
|
434
|
+
title = this.tableColsCache[i].title;
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/** @type {?} */
|
|
439
|
+
let temporaryNodeList = this.nowListNodes.slice(0);
|
|
440
|
+
if (!title) {
|
|
441
|
+
temporaryNodeList.push(node);
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
/** @type {?} */
|
|
445
|
+
const index = this.nowListNodes.findIndex((/**
|
|
446
|
+
* @param {?} node
|
|
447
|
+
* @return {?}
|
|
448
|
+
*/
|
|
449
|
+
node => node.title === title));
|
|
450
|
+
temporaryNodeList.splice(index, 0, node);
|
|
451
|
+
}
|
|
452
|
+
this.nowListNodes = temporaryNodeList;
|
|
453
|
+
this.hideListNodes = this.hideListNodes.filter((/**
|
|
454
|
+
* @param {?} item
|
|
455
|
+
* @return {?}
|
|
456
|
+
*/
|
|
457
|
+
(item) => {
|
|
458
|
+
return item.title !== event.node.origin.title;
|
|
459
|
+
}));
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
// if (this.hideListNodes.length === 0 && this.tableCacheOption && this.tableCacheOption.cols) {
|
|
463
|
+
// this.hideListNodes = this.getHideListNodes();
|
|
464
|
+
// }
|
|
465
|
+
/** @type {?} */
|
|
466
|
+
let temporaryNodeList = this.hideListNodes.slice(0);
|
|
467
|
+
this.nowListNodes.forEach((/**
|
|
468
|
+
* @param {?} item
|
|
469
|
+
* @return {?}
|
|
470
|
+
*/
|
|
471
|
+
item => {
|
|
472
|
+
if (item.title === event.node.origin.title) {
|
|
473
|
+
/** @type {?} */
|
|
474
|
+
const innerItem = JSON.parse(JSON.stringify(item));
|
|
475
|
+
innerItem.checked = false;
|
|
476
|
+
temporaryNodeList.push(innerItem);
|
|
477
|
+
}
|
|
478
|
+
}));
|
|
479
|
+
this.hideListNodes = temporaryNodeList;
|
|
480
|
+
// 为了防止未选择的数组顺序因为push方法而改变,通过初始数据获取显示的字段列表
|
|
481
|
+
this.nowListNodes = this.nowListNodes.filter((/**
|
|
482
|
+
* @param {?} item
|
|
483
|
+
* @return {?}
|
|
484
|
+
*/
|
|
485
|
+
(item) => {
|
|
486
|
+
return item.title !== event.node.origin.title;
|
|
487
|
+
}));
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
// 防止未选择的数组顺序因为push方法而改变,从初始数据获取隐藏未显示的字段列表
|
|
491
|
+
/**
|
|
492
|
+
* @return {?}
|
|
493
|
+
*/
|
|
494
|
+
getHideListNodes() {
|
|
495
|
+
/** @type {?} */
|
|
496
|
+
let temporaryNodeList = [];
|
|
497
|
+
// 从tableColsCache里面找没有在storage里面出现的字段,组成hideList
|
|
498
|
+
this.tableColsCache.forEach((/**
|
|
499
|
+
* @param {?} item
|
|
500
|
+
* @return {?}
|
|
501
|
+
*/
|
|
502
|
+
(item) => {
|
|
503
|
+
if (!this.tableCacheOption.cols.includes(item.title)) {
|
|
504
|
+
/** @type {?} */
|
|
505
|
+
let nodeItem = new TreeGrid();
|
|
506
|
+
nodeItem.title = item.title;
|
|
507
|
+
nodeItem.key = item.title;
|
|
508
|
+
nodeItem.disabled = item.fixed ? true : false;
|
|
509
|
+
nodeItem.checked = false;
|
|
510
|
+
temporaryNodeList.push(nodeItem);
|
|
511
|
+
}
|
|
512
|
+
}));
|
|
513
|
+
return temporaryNodeList;
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* @return {?}
|
|
517
|
+
*/
|
|
518
|
+
dealCols() {
|
|
519
|
+
if (!this.tableCols[0].minWidth) {
|
|
520
|
+
this.tableCols.forEach((/**
|
|
521
|
+
* @param {?} item
|
|
522
|
+
* @return {?}
|
|
523
|
+
*/
|
|
524
|
+
item => {
|
|
525
|
+
/** @type {?} */
|
|
526
|
+
const span = document.createElement('span');
|
|
527
|
+
span.style.visibility = 'hidden';
|
|
528
|
+
span.style.position = 'absolute';
|
|
529
|
+
span.style.whiteSpace = 'nowrap';
|
|
530
|
+
span.style.fontSize = '12px';
|
|
531
|
+
span.style.display = 'inline-block'; // 将样式修改为 inline-block
|
|
532
|
+
span.innerText = item.title;
|
|
533
|
+
document.body.appendChild(span);
|
|
534
|
+
item.minWidth = span.offsetWidth + 16;
|
|
535
|
+
span.style.display = 'none';
|
|
536
|
+
document.body.removeChild(span);
|
|
537
|
+
}));
|
|
538
|
+
}
|
|
539
|
+
// 处理左右吸附的数据在数组中的位置
|
|
540
|
+
/** @type {?} */
|
|
541
|
+
const leftFixedCols = this.tableCols.filter((/**
|
|
542
|
+
* @param {?} col
|
|
543
|
+
* @return {?}
|
|
544
|
+
*/
|
|
545
|
+
col => col.fixed === 'left'));
|
|
546
|
+
/** @type {?} */
|
|
547
|
+
const rightFixedCols = this.tableCols.filter((/**
|
|
548
|
+
* @param {?} col
|
|
549
|
+
* @return {?}
|
|
550
|
+
*/
|
|
551
|
+
col => col.fixed === 'right'));
|
|
552
|
+
/** @type {?} */
|
|
553
|
+
const normalCols = this.tableCols.filter((/**
|
|
554
|
+
* @param {?} col
|
|
555
|
+
* @return {?}
|
|
556
|
+
*/
|
|
557
|
+
col => !col.fixed));
|
|
558
|
+
/** @type {?} */
|
|
559
|
+
const resultCols = leftFixedCols.concat(normalCols).concat(rightFixedCols);
|
|
560
|
+
this.tableCols = resultCols;
|
|
561
|
+
if (!this.tableColsCache || this.tableColsCache.length === 0) {
|
|
562
|
+
// 缓存一下表格的数据
|
|
563
|
+
this.tableColsCache = [...this.tableCols];
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* @return {?}
|
|
568
|
+
*/
|
|
569
|
+
saveTableCacheOption() {
|
|
570
|
+
this.localforage.setItem('hd-table_' + this.userSession.userCode + '_' + this.localtionTmp + '_' + this.uuid, this.tableCacheOption);
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* @return {?}
|
|
574
|
+
*/
|
|
575
|
+
judgeRepeatCols() {
|
|
576
|
+
for (let i = 0; i < this.tableCols.length; i++) {
|
|
577
|
+
for (let j = i + 1; j < this.tableCols.length; j++) {
|
|
578
|
+
if (this.tableCols[i].title === this.tableCols[j].title) {
|
|
579
|
+
throw `hd-table组件中列名 ${this.tableCols[i].title} 重复`;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
return true;
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* @param {?} __0
|
|
587
|
+
* @param {?} col
|
|
588
|
+
* @return {?}
|
|
589
|
+
*/
|
|
590
|
+
onResize({ width }, col) {
|
|
591
|
+
/** @type {?} */
|
|
592
|
+
let tempWidth = 0;
|
|
593
|
+
if (width > col.minWidth) {
|
|
594
|
+
tempWidth = width;
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
tempWidth = col.minWidth;
|
|
598
|
+
}
|
|
599
|
+
this.tableCacheOption.colWidths.set(col.title, tempWidth);
|
|
600
|
+
this.saveTableCacheOption();
|
|
601
|
+
this.tableCols = this.tableCols.map((/**
|
|
602
|
+
* @param {?} e
|
|
603
|
+
* @return {?}
|
|
604
|
+
*/
|
|
605
|
+
e => (e.title === col.title ? Object.assign({}, e, { width: tempWidth }) : e)));
|
|
606
|
+
this.dealScroll();
|
|
607
|
+
}
|
|
608
|
+
/**
|
|
609
|
+
* @return {?}
|
|
610
|
+
*/
|
|
611
|
+
dealOperateBtn() {
|
|
612
|
+
/** @type {?} */
|
|
613
|
+
let operateCol = this.tableCols.find((/**
|
|
614
|
+
* @param {?} col
|
|
615
|
+
* @return {?}
|
|
616
|
+
*/
|
|
617
|
+
col => col.title === '操作')) || null;
|
|
618
|
+
if (operateCol) {
|
|
619
|
+
/** @type {?} */
|
|
620
|
+
let textStr = '';
|
|
621
|
+
operateCol.btnList.forEach((/**
|
|
622
|
+
* @param {?} btn
|
|
623
|
+
* @return {?}
|
|
624
|
+
*/
|
|
625
|
+
btn => {
|
|
626
|
+
if (!btn.isRepeat) {
|
|
627
|
+
textStr += btn.name;
|
|
628
|
+
}
|
|
629
|
+
}));
|
|
630
|
+
/** @type {?} */
|
|
631
|
+
const span = document.createElement('a');
|
|
632
|
+
span.style.visibility = 'hidden';
|
|
633
|
+
span.style.position = 'absolute';
|
|
634
|
+
span.style.whiteSpace = 'nowrap';
|
|
635
|
+
span.style.fontSize = '12px';
|
|
636
|
+
span.style.display = 'inline-block'; // 将样式修改为 inline-block
|
|
637
|
+
span.innerText = textStr;
|
|
638
|
+
document.body.appendChild(span);
|
|
639
|
+
operateCol.width = span.offsetWidth + (operateCol.btnList.filter((/**
|
|
640
|
+
* @param {?} item
|
|
641
|
+
* @return {?}
|
|
642
|
+
*/
|
|
643
|
+
item => !item.isRepeat)).length - 1) * 4 + 16;
|
|
644
|
+
span.style.display = 'none';
|
|
645
|
+
document.body.removeChild(span);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* @param {?} fn
|
|
650
|
+
* @param {?} event
|
|
651
|
+
* @return {?}
|
|
652
|
+
*/
|
|
653
|
+
triggerEvent(fn, event) {
|
|
654
|
+
if (fn) {
|
|
655
|
+
fn(event);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* @return {?}
|
|
660
|
+
*/
|
|
661
|
+
dealScroll() {
|
|
662
|
+
/** @type {?} */
|
|
663
|
+
let colWidth = 0;
|
|
664
|
+
if (this.showSelected) {
|
|
665
|
+
colWidth += 40;
|
|
666
|
+
}
|
|
667
|
+
this.tableCols.forEach((/**
|
|
668
|
+
* @param {?} item
|
|
669
|
+
* @return {?}
|
|
670
|
+
*/
|
|
671
|
+
item => {
|
|
672
|
+
if (!item.width) {
|
|
673
|
+
item.width = ColWidth.fixColWidth;
|
|
674
|
+
}
|
|
675
|
+
if (item.isShow) {
|
|
676
|
+
item.fixedWidth = colWidth;
|
|
677
|
+
colWidth += item.width;
|
|
678
|
+
}
|
|
679
|
+
}));
|
|
680
|
+
if (this.tableTotal) {
|
|
681
|
+
this.scroll = {
|
|
682
|
+
x: '1px',
|
|
683
|
+
y: 'calc(100vh - 180px)'
|
|
684
|
+
};
|
|
685
|
+
}
|
|
686
|
+
else {
|
|
687
|
+
this.scroll = {
|
|
688
|
+
x: '1px',
|
|
689
|
+
y: 'calc(100vh - 140px)'
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* @param {?} text
|
|
695
|
+
* @param {?} maxWidth
|
|
696
|
+
* @return {?}
|
|
697
|
+
*/
|
|
698
|
+
isTextOverflow(text, maxWidth) {
|
|
699
|
+
/** @type {?} */
|
|
700
|
+
const cachedWidth = this.textWidthCache[text];
|
|
701
|
+
if (cachedWidth !== undefined) {
|
|
702
|
+
return cachedWidth + 15 >= maxWidth;
|
|
703
|
+
}
|
|
704
|
+
/** @type {?} */
|
|
705
|
+
const span = document.createElement('span');
|
|
706
|
+
span.style.visibility = 'hidden';
|
|
707
|
+
span.style.position = 'absolute';
|
|
708
|
+
span.style.whiteSpace = 'nowrap';
|
|
709
|
+
span.style.fontSize = '12px';
|
|
710
|
+
span.style.display = 'inline-block'; // 将样式修改为 inline-block
|
|
711
|
+
span.innerText = text;
|
|
712
|
+
document.body.appendChild(span);
|
|
713
|
+
/** @type {?} */
|
|
714
|
+
const isOverflow = span.offsetWidth + 15 >= maxWidth;
|
|
715
|
+
this.textWidthCache[text] = span.offsetWidth;
|
|
716
|
+
span.style.display = 'none';
|
|
717
|
+
document.body.removeChild(span);
|
|
718
|
+
return isOverflow;
|
|
719
|
+
}
|
|
720
|
+
// 表格勾选逻辑
|
|
721
|
+
/**
|
|
722
|
+
* @param {?} $event
|
|
723
|
+
* @return {?}
|
|
724
|
+
*/
|
|
725
|
+
currentPageDataChange($event) {
|
|
726
|
+
this.listOfDisplayData = $event;
|
|
727
|
+
this.refreshStatus();
|
|
728
|
+
this.resetStatus();
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
731
|
+
* @param {?} reset
|
|
732
|
+
* @return {?}
|
|
733
|
+
*/
|
|
734
|
+
search(reset) {
|
|
735
|
+
this.tableCacheOption.pageSize = this.tablePageSize;
|
|
736
|
+
this.saveTableCacheOption();
|
|
737
|
+
if (reset) {
|
|
738
|
+
this.tablePageSizeChange.emit(this.tablePageSize);
|
|
739
|
+
}
|
|
740
|
+
else {
|
|
741
|
+
this.tablePageIndexChange.emit(this.tablePageIndex);
|
|
742
|
+
// 触发父组件查询事件
|
|
743
|
+
this.tableSearchEvent.emit(reset);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
/**
|
|
747
|
+
* @return {?}
|
|
748
|
+
*/
|
|
749
|
+
resetStatus() {
|
|
750
|
+
this.isAllDisplayDataChecked = false;
|
|
751
|
+
this.isIndeterminate = false;
|
|
752
|
+
this.mapOfCheckedId = {};
|
|
753
|
+
this.mapOfCheckList = {};
|
|
754
|
+
this.selectEvent.emit([]);
|
|
755
|
+
}
|
|
756
|
+
/**
|
|
757
|
+
* @param {?=} event
|
|
758
|
+
* @param {?=} data
|
|
759
|
+
* @return {?}
|
|
760
|
+
*/
|
|
761
|
+
refreshStatus(event = false, data = null) {
|
|
762
|
+
if (event && data) {
|
|
763
|
+
!this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);
|
|
764
|
+
}
|
|
765
|
+
else if (!event && data) {
|
|
766
|
+
this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];
|
|
767
|
+
}
|
|
768
|
+
this.isAllDisplayDataChecked = this.listOfDisplayData.every((/**
|
|
769
|
+
* @param {?} item
|
|
770
|
+
* @return {?}
|
|
771
|
+
*/
|
|
772
|
+
item => this.mapOfCheckedId[item[this.selectField]]));
|
|
773
|
+
this.isIndeterminate =
|
|
774
|
+
this.listOfDisplayData.some((/**
|
|
775
|
+
* @param {?} item
|
|
776
|
+
* @return {?}
|
|
777
|
+
*/
|
|
778
|
+
item => this.mapOfCheckedId[item[this.selectField]])) && !this.isAllDisplayDataChecked;
|
|
779
|
+
// 触发select事件
|
|
780
|
+
if (this.selectEvent) {
|
|
781
|
+
/** @type {?} */
|
|
782
|
+
const selectedList = Object.values(this.mapOfCheckList);
|
|
783
|
+
this.selectEvent.emit(selectedList);
|
|
784
|
+
}
|
|
785
|
+
// 如果数据为空,则清空勾选标识
|
|
786
|
+
if (this.tableData.content.length === 0) {
|
|
787
|
+
this.isAllDisplayDataChecked = false;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
/**
|
|
791
|
+
* @param {?} value
|
|
792
|
+
* @return {?}
|
|
793
|
+
*/
|
|
794
|
+
checkAll(value) {
|
|
795
|
+
this.listOfDisplayData.forEach((/**
|
|
796
|
+
* @param {?} item
|
|
797
|
+
* @return {?}
|
|
798
|
+
*/
|
|
799
|
+
item => {
|
|
800
|
+
if (value) {
|
|
801
|
+
!this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];
|
|
805
|
+
}
|
|
806
|
+
this.mapOfCheckedId[item[this.selectField]] = value;
|
|
807
|
+
}));
|
|
808
|
+
this.refreshStatus();
|
|
809
|
+
}
|
|
810
|
+
/**
|
|
811
|
+
* @param {?} str
|
|
812
|
+
* @return {?}
|
|
813
|
+
*/
|
|
814
|
+
judgeColEmpty(str) {
|
|
815
|
+
if (str || str === 0) {
|
|
816
|
+
return str;
|
|
817
|
+
}
|
|
818
|
+
else {
|
|
819
|
+
return '<空>';
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
HdTableComponent.decorators = [
|
|
824
|
+
{ type: Component, args: [{
|
|
825
|
+
selector: 'hd-table',
|
|
826
|
+
template: "<ng-container>\n <hd-button-group>\n <ng-template #buttonGroupLeft>\n <ng-container *ngTemplateOutlet=\"tableLeftButton\"></ng-container>\n <hd-button *ngIf=\"showOperateColWarpButton\" type=\"default\" (click)=\"showDetail = !showDetail\">{{showDetail ?\n '\u7F29\u7565\u663E\u793A': '\u5C55\u5F00\u663E\u793A'}}</hd-button>\n </ng-template>\n <ng-template #buttonGroupRight>\n <ng-container *ngTemplateOutlet=\"tableRightButton\"></ng-container>\n <hd-button type=\"primary\" nz-dropdown nzTrigger=\"click\" [nzDropdownMenu]=\"menu\" (clickAction)=\"confirmDropdown()\"\n [nzVisible]=\"isDropdownVisible\">\u8BBE\u7F6E\u5217</hd-button>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <div style=\"max-height: 400px;overflow-y: scroll;\">\n <div *ngIf=\"showListNodes && nowListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"nowListNodes\" nzCheckable nzDraggable nzBlockNode\n nzShowExpand=\"false\" (nzCheckBoxChange)=\"checkAction($event)\" [nzBeforeDrop]=\"beforeDrop\"\n [nzTreeTemplate]=\"nzTreeTemplate\">\n </nz-tree>\n <ng-template #nzTreeTemplate let-node>\n <span\n class=\"ng-tns-c31-110 draggable ng-star-inserted ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close\"\n [title]=\"node.key\" draggable=\"true\" aria-grabbed=\"true\">\n <span class=\"ant-tree-title\">\n <div class=\"hd-table-tree-node\">\n <span>{{node.key}}</span>\n <div *ngIf=\"!node.origin.disabled\" class=\"hd-table-tree-node-img\">\n <i nz-icon nzType=\"caret-up\" nzTheme=\"outline\"></i>\n <i nz-icon nzType=\"caret-down\" nzTheme=\"outline\"></i>\n </div>\n </div>\n </span>\n </span>\n </ng-template>\n </div>\n <div *ngIf=\"showListNodes && hideListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"hideListNodes\" nzCheckable nzShowExpand=\"false\"\n (nzCheckBoxChange)=\"checkAction($event)\">\n </nz-tree>\n </div>\n </div>\n <div style=\"text-align: right;background: #fff;padding: 4px;\">\n <hd-button style=\"margin-right: 4px;\" type=\"default\" size=\"small\" (clickAction)=\"cancelDropdown()\">\u53D6\u6D88\n </hd-button>\n <hd-button type=\"primary\" size=\"small\" (clickAction)=\"submitGrids()\">\u5B8C\u6210</hd-button>\n </div>\n </nz-dropdown-menu>\n </ng-template>\n </hd-button-group>\n <hd-space type=\"row\" size=\"12\"></hd-space>\n <ng-container *ngTemplateOutlet=\"tableTotal\"></ng-container>\n <hd-space *ngIf=\"tableTotal\" type=\"row\" size=\"12\"></hd-space>\n <nz-table *ngIf=\"showTable\" #hdTable class=\"hd-table-container\" [nzScroll]=\"scroll\" nzShowSizeChanger\n nzShowSizeChanger nzShowQuickJumper nzFrontPagination=\"false\" nzSize=\"middle\" [nzData]=\"tableData.content\"\n [nzTotal]=\"tableData.totalElements\" [(nzPageIndex)]=\"tablePageIndex\" [nzLoading]=\"tableLoading\"\n [nzPageSizeOptions]=\"[ 10, 50, 100, 200 ]\" [(nzPageSize)]=\"tablePageSize\" (nzPageSizeChange)=\"search(true)\"\n (nzPageIndexChange)=\"search(false)\" (nzCurrentPageDataChange)=\"showSelected ? currentPageDataChange($event) : null\"\n [nzShowTotal]=\"tableTotalTemplate\">\n <thead (nzSortChange)=\"sort($event)\" nzSingleSort>\n <tr>\n <th nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected\" nzShowCheckbox [(nzChecked)]=\"isAllDisplayDataChecked\"\n [nzIndeterminate]=\"isIndeterminate\" (nzCheckedChange)=\"checkAll($event)\"></th>\n <ng-container *ngFor=\"let col of tableCols\">\n <th *ngIf=\"col.isShow\" [nzWidth]=\"col.width + 'px'\" [nzAlign]=\"col.align\"\n [nzLeft]=\"col.fixed === 'left' ? col.fixedWidth + 'px' : null\"\n [nzRight]=\"col.fixed === 'right' ? 0 + 'px' : null\" nz-resizable nzBounds=\"window\" nzPreview\n (nzResizeEnd)=\"onResize($event, col)\" [nzShowSort]=\"col.canSort\" [nzSortKey]=\"col.name\">\n {{ col.title }}\n <nz-resize-handle nzDirection=\"right\">\n <div class=\"resize-trigger\"></div>\n </nz-resize-handle>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of hdTable.data;index as i\">\n <td nzLeft=\"0px\" *ngIf=\"showSelected\" nzShowCheckbox [(nzChecked)]=\"mapOfCheckedId[data[selectField]]\"\n (nzCheckedChange)=\"refreshStatus($event, data)\"></td>\n <ng-container *ngFor=\"let col of tableCols\">\n <td *ngIf=\"col.isShow\" [ngStyle]=\"{'max-width': col.width + 'px'}\" [nzAlign]=\"col.align\"\n [nzLeft]=\"col.fixed === 'left' ? col.fixedWidth + 'px' : null\"\n [nzRight]=\"col.fixed === 'right' ? 0 + 'px' : null\"\n [ngClass]=\"(col.canWarp && showDetail) ? 'common-td-wrap' : ''\">\n <ng-container *ngIf=\"col.title === '\u64CD\u4F5C';else notOperateTemplate\">\n <div class=\"common-btn-group\">\n <ng-container *ngFor=\"let btn of col.btnList\">\n <ng-container *ngIf=\"!btn.showConfirm;else showConfirmTemplate\">\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"btn.name === '\u5220\u9664' ? 'common-danger-btn': ''\"\n (click)=\"triggerEvent(btn.click || null, data)\">{{ btn.name }}</a>\n </ng-container>\n <ng-template #showConfirmTemplate>\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"btn.name === '\u5220\u9664' ? 'common-danger-btn': ''\" nz-popconfirm\n [nzPopconfirmTitle]=\"'\u786E\u8BA4\u8981' + btn.name + '\u5417?'\"\n (nzOnConfirm)=\"triggerEvent(btn.click || null, data)\">{{\n btn.name }}</a>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #notOperateTemplate>\n <ng-container *ngIf=\"col.name === 'state';else otherTemplate\">\n <hd-status [status]=\"data['state']\">{{ judgeColEmpty(col.render ? col.render(data) : data['state'])}}\n </hd-status>\n </ng-container>\n <ng-template #otherTemplate>\n <ng-container *ngIf=\"col.click;else noClickTemplate\">\n <ng-container\n *ngIf=\"!isTextOverflow(col.render ? col.render(data) : data[col.name], col.width);else overflowTemplate\">\n <a [ngStyle]=\"{'color': col?.color ? col.color : null}\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ judgeColEmpty(col.render ? col.render(data) :\n data[col.name])}}</a>\n </ng-container>\n <ng-template #overflowTemplate>\n <a [ngStyle]=\"{'color': col?.color ? col.color : null}\" nz-tooltip\n [nzTooltipTitle]=\"col.render ? col.render(data) : data[col.name]\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ judgeColEmpty(col.render ? col.render(data) :\n data[col.name])}}</a>\n </ng-template>\n </ng-container>\n <ng-template #noClickTemplate>\n <ng-container\n *ngIf=\"!isTextOverflow(col.render ? col.render(data) : data[col.name], col.width);else overflowTemplate\">\n <span [ngStyle]=\"{'color': col?.color ? col.color : null}\">{{ judgeColEmpty(col.render ?\n col.render(data) :\n data[col.name])}}</span>\n </ng-container>\n <ng-template #overflowTemplate>\n <span [ngStyle]=\"{'color': col?.color ? col.color : null}\" nz-tooltip\n [nzTooltipTitle]=\"col.render ? col.render(data) : data[col.name]\">\n {{ judgeColEmpty(col.render ? col.render(data) : data[col.name])}}</span>\n </ng-template>\n </ng-template>\n </ng-template>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n <!-- \u5408\u8BA1\u6240\u6709\u6570\u636E\u533A\u57DF \u9700\u8981\u540E\u7AEF\u63A5\u53E3\u914D\u5408 -->\n <tr *ngIf=\"showTableTotal\" class=\"hd-table-total\">\n <td>\u5408\u8BA1</td>\n <ng-container *ngFor=\"let tableTotalOption of tableTotalOptionList\">\n <td>{{ tableTotalOption }}</td>\n </ng-container>\n </tr>\n </tbody>\n <ng-template #tableTotalTemplate>\n \u5171 {{tableData.totalElements}} \u6761\u6570\u636E\n </ng-template>\n </nz-table>\n</ng-container>",
|
|
827
|
+
styles: ["::ng-deep .common-btn-group>a{font-size:12px;font-weight:400;color:#12a34f!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset;padding:0 6px!important}::ng-deep .ant-form-item-label>label{color:#4b504e}::ng-deep .ant-input-number-input{height:28px}::ng-deep .ant-input-number{height:28px}textarea.ant-input{height:auto;min-height:28px}::ng-deep .ant-select-selection--multiple{min-height:28px}::ng-deep .ant-select-selection__rendered>ul>li{height:22px!important;margin-top:3px!important;line-height:22px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:28px!important}::ng-deep .ant-input{height:28px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:28px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:12px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:12px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-time-picker{width:100%}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}.nz-resizable-preview{position:absolute;top:0;left:0;z-index:8;border:1px dashed #d1d1d1}.nz-resizable-handle{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:9}.nz-resizable-handle-top{width:100%;height:10px;top:-5px;left:0}.nz-resizable-handle-right{height:100%}.nz-resizable-handle-bottom{width:100%;height:10px;bottom:-5px;left:0}.nz-resizable-handle-left{width:10px;height:100%;top:0;left:-5px}.nz-resizable-handle-topRight{width:20px;height:20px;top:-5px;right:-5px;z-index:10}.nz-resizable-handle-bottomRight{width:20px;height:20px;right:-5px;bottom:-5px;z-index:10}.nz-resizable-handle-bottomLeft{width:20px;height:20px;bottom:-5px;left:-5px;z-index:10}.nz-resizable-handle-topLeft{width:20px;height:20px;top:-5px;left:-5px;z-index:10}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottom,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-top{cursor:row-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-left,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-right{cursor:col-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottomRight,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-topLeft{cursor:nwse-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottomLeft,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-topRight{cursor:nesw-resize}.hd-table-container ::ng-deep .ant-pagination-options-quick-jumper input{border-radius:2px;border:1px solid #d9d9d9}.hd-table-container ::ng-deep .ant-pagination-options .ant-select-selection{border-radius:2px}.hd-table-container ::ng-deep .ant-table-thead>tr>th{border-bottom:1px solid #ecf1ed;white-space:nowrap;text-overflow:ellipsis}.hd-table-container ::ng-deep .ant-table-tbody>tr>td{border-bottom:1px solid #ecf1ed;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.hd-table-container ::ng-deep .hd-table-total>td{border:0!important}::ng-deep .ant-dropdown-menu{border-radius:0}::ng-deep .ant-dropdown{margin-top:8px!important}.common-td-wrap{white-space:normal!important;word-break:break-all}.nz-resizable-preview{border-width:0 1px 0 0}.resize-trigger{width:10px;height:15px;position:relative;top:calc((100% - 15px)/ 2)}.resize-trigger::after{position:absolute;top:calc((100% - 15px)/ 2);left:0;background:#d5d5d5;content:'';width:1px;height:15px;z-index:1}.nz-resizable-handle-right{position:absolute;width:10px;top:0;right:-5px;z-index:inherit}.hd-table-tree-node{display:inline-flex;align-items:center;padding-right:10px}.hd-table-tree-node .hd-table-tree-node-img{display:flex;flex-direction:column;position:absolute;right:0;margin-top:-2.5px}.hd-table-tree-node .hd-table-tree-node-img i{opacity:.3}.hd-table-tree-node .hd-table-tree-node-img i:last-child{margin-top:-5px}img{width:20px;height:20px}.ant-table-th-left-sticky{z-index:2}::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}"]
|
|
828
|
+
}] }
|
|
829
|
+
];
|
|
830
|
+
/** @nocollapse */
|
|
831
|
+
HdTableComponent.ctorParameters = () => [
|
|
832
|
+
{ type: ChangeDetectorRef },
|
|
833
|
+
{ type: CommonSessionService }
|
|
834
|
+
];
|
|
835
|
+
HdTableComponent.propDecorators = {
|
|
836
|
+
uuid: [{ type: Input }],
|
|
837
|
+
tableCols: [{ type: Input }],
|
|
838
|
+
tableData: [{ type: Input }],
|
|
839
|
+
showSelected: [{ type: Input }],
|
|
840
|
+
showOperateColWarpButton: [{ type: Input }],
|
|
841
|
+
selectField: [{ type: Input }],
|
|
842
|
+
showTableTotal: [{ type: Input }],
|
|
843
|
+
tableTotalOption: [{ type: Input }],
|
|
844
|
+
sortEvent: [{ type: Output }],
|
|
845
|
+
selectEvent: [{ type: Output }],
|
|
846
|
+
tableSearchEvent: [{ type: Output }],
|
|
847
|
+
tableLoading: [{ type: Input }],
|
|
848
|
+
tablePageIndex: [{ type: Input }],
|
|
849
|
+
tablePageSize: [{ type: Input }],
|
|
850
|
+
tablePageIndexChange: [{ type: Output }],
|
|
851
|
+
tablePageSizeChange: [{ type: Output }],
|
|
852
|
+
tableTotal: [{ type: ContentChild, args: ["tableTotal", { static: false },] }],
|
|
853
|
+
tableLeftButton: [{ type: ContentChild, args: ["tableLeftButton", { static: false },] }],
|
|
854
|
+
tableRightButton: [{ type: ContentChild, args: ["tableRightButton", { static: false },] }]
|
|
855
|
+
};
|
|
856
|
+
tslib_1.__decorate([
|
|
857
|
+
InputBoolean(),
|
|
858
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
859
|
+
], HdTableComponent.prototype, "showSelected", void 0);
|
|
860
|
+
tslib_1.__decorate([
|
|
861
|
+
InputBoolean(),
|
|
862
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
863
|
+
], HdTableComponent.prototype, "showOperateColWarpButton", void 0);
|
|
864
|
+
tslib_1.__decorate([
|
|
865
|
+
InputBoolean(),
|
|
866
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
867
|
+
], HdTableComponent.prototype, "showTableTotal", void 0);
|
|
868
|
+
if (false) {
|
|
869
|
+
/** @type {?} */
|
|
870
|
+
HdTableComponent.prototype.uuid;
|
|
871
|
+
/** @type {?} */
|
|
872
|
+
HdTableComponent.prototype.tableCols;
|
|
873
|
+
/** @type {?} */
|
|
874
|
+
HdTableComponent.prototype.tableData;
|
|
875
|
+
/** @type {?} */
|
|
876
|
+
HdTableComponent.prototype.showSelected;
|
|
877
|
+
/** @type {?} */
|
|
878
|
+
HdTableComponent.prototype.showOperateColWarpButton;
|
|
879
|
+
/** @type {?} */
|
|
880
|
+
HdTableComponent.prototype.selectField;
|
|
881
|
+
/** @type {?} */
|
|
882
|
+
HdTableComponent.prototype.showTableTotal;
|
|
883
|
+
/** @type {?} */
|
|
884
|
+
HdTableComponent.prototype.tableTotalOption;
|
|
885
|
+
/** @type {?} */
|
|
886
|
+
HdTableComponent.prototype.sortEvent;
|
|
887
|
+
/** @type {?} */
|
|
888
|
+
HdTableComponent.prototype.selectEvent;
|
|
889
|
+
/** @type {?} */
|
|
890
|
+
HdTableComponent.prototype.tableSearchEvent;
|
|
891
|
+
/** @type {?} */
|
|
892
|
+
HdTableComponent.prototype.tableLoading;
|
|
893
|
+
/** @type {?} */
|
|
894
|
+
HdTableComponent.prototype.tablePageIndex;
|
|
895
|
+
/** @type {?} */
|
|
896
|
+
HdTableComponent.prototype.tablePageSize;
|
|
897
|
+
/** @type {?} */
|
|
898
|
+
HdTableComponent.prototype.tablePageIndexChange;
|
|
899
|
+
/** @type {?} */
|
|
900
|
+
HdTableComponent.prototype.tablePageSizeChange;
|
|
901
|
+
/** @type {?} */
|
|
902
|
+
HdTableComponent.prototype.tableTotal;
|
|
903
|
+
/** @type {?} */
|
|
904
|
+
HdTableComponent.prototype.tableLeftButton;
|
|
905
|
+
/** @type {?} */
|
|
906
|
+
HdTableComponent.prototype.tableRightButton;
|
|
907
|
+
/** @type {?} */
|
|
908
|
+
HdTableComponent.prototype.scroll;
|
|
909
|
+
/** @type {?} */
|
|
910
|
+
HdTableComponent.prototype.isAllDisplayDataChecked;
|
|
911
|
+
/** @type {?} */
|
|
912
|
+
HdTableComponent.prototype.isIndeterminate;
|
|
913
|
+
/** @type {?} */
|
|
914
|
+
HdTableComponent.prototype.listOfDisplayData;
|
|
915
|
+
/** @type {?} */
|
|
916
|
+
HdTableComponent.prototype.listOfAllData;
|
|
917
|
+
/** @type {?} */
|
|
918
|
+
HdTableComponent.prototype.listOfSelection;
|
|
919
|
+
/** @type {?} */
|
|
920
|
+
HdTableComponent.prototype.mapOfCheckedId;
|
|
921
|
+
/** @type {?} */
|
|
922
|
+
HdTableComponent.prototype.mapOfCheckList;
|
|
923
|
+
/** @type {?} */
|
|
924
|
+
HdTableComponent.prototype.tableTotalOptionList;
|
|
925
|
+
/**
|
|
926
|
+
* @type {?}
|
|
927
|
+
* @private
|
|
928
|
+
*/
|
|
929
|
+
HdTableComponent.prototype.textWidthCache;
|
|
930
|
+
/** @type {?} */
|
|
931
|
+
HdTableComponent.prototype.tableCacheOption;
|
|
932
|
+
/** @type {?} */
|
|
933
|
+
HdTableComponent.prototype.userSession;
|
|
934
|
+
/** @type {?} */
|
|
935
|
+
HdTableComponent.prototype.tableColsCache;
|
|
936
|
+
/** @type {?} */
|
|
937
|
+
HdTableComponent.prototype.showTable;
|
|
938
|
+
/** @type {?} */
|
|
939
|
+
HdTableComponent.prototype.selectColListNodes;
|
|
940
|
+
/** @type {?} */
|
|
941
|
+
HdTableComponent.prototype.selectColListNodesCache;
|
|
942
|
+
/** @type {?} */
|
|
943
|
+
HdTableComponent.prototype.showListNodes;
|
|
944
|
+
/** @type {?} */
|
|
945
|
+
HdTableComponent.prototype.isDropdownVisible;
|
|
946
|
+
/** @type {?} */
|
|
947
|
+
HdTableComponent.prototype.nowListNodes;
|
|
948
|
+
/** @type {?} */
|
|
949
|
+
HdTableComponent.prototype.hideListNodes;
|
|
950
|
+
/** @type {?} */
|
|
951
|
+
HdTableComponent.prototype.cancelNowListNodes;
|
|
952
|
+
/** @type {?} */
|
|
953
|
+
HdTableComponent.prototype.cancelHideListNodes;
|
|
954
|
+
/** @type {?} */
|
|
955
|
+
HdTableComponent.prototype.showDetail;
|
|
956
|
+
/** @type {?} */
|
|
957
|
+
HdTableComponent.prototype.localforage;
|
|
958
|
+
/** @type {?} */
|
|
959
|
+
HdTableComponent.prototype.localtionTmp;
|
|
960
|
+
/** @type {?} */
|
|
961
|
+
HdTableComponent.prototype.beforeDrop;
|
|
962
|
+
/**
|
|
963
|
+
* @type {?}
|
|
964
|
+
* @private
|
|
965
|
+
*/
|
|
966
|
+
HdTableComponent.prototype.cdr;
|
|
967
|
+
/**
|
|
968
|
+
* @type {?}
|
|
969
|
+
* @private
|
|
970
|
+
*/
|
|
971
|
+
HdTableComponent.prototype.commonSessionService;
|
|
972
|
+
}
|
|
973
973
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZmFudGFzeS1uZ3pvcnJvLyIsInNvdXJjZXMiOlsiaGQtdGFibGUvaGQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWdCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEtBQUssV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUE4QyxNQUFNLG9CQUFvQixDQUFDO0FBRTlGLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFxQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU1uRyxNQUFNLE9BQU8sZ0JBQWdCOzs7OztJQTBEM0IsWUFDVSxHQUFzQixFQUN0QixvQkFBMEM7UUFEMUMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQTFEM0MsY0FBUyxHQUF5QixFQUFFLENBQUM7UUFFckIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBQzFELGdCQUFXLEdBQVcsWUFBWSxDQUFDOztRQUVuQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUUvQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztR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RCxZQUFZLFNBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOztBQWpCMUI7SUFBZixZQUFZLEVBQUU7O3NEQUErQjtBQUM5QjtJQUFmLFlBQVksRUFBRTs7a0VBQTJDO0FBRzFDO0lBQWYsWUFBWSxFQUFFOzt3REFBaUM7OztJQVB6RCxnQ0FBc0I7O0lBQ3RCLHFDQUE4Qzs7SUFDOUMscUNBQThCOztJQUM5Qix3Q0FBdUQ7O0lBQ3ZELG9EQUFtRTs7SUFDbkUsdUNBQTRDOztJQUU1QywwQ0FBeUQ7O0lBQ3pELDRDQUFxRDs7SUFDckQscUNBQXlDOztJQUN6Qyx1Q0FBMkM7O0lBQzNDLDRDQUFnRDs7SUFDaEQsd0NBQXVDOztJQUV2QywwQ0FBb0M7O0lBQ3BDLHlDQUErQjs7SUFDL0IsZ0RBQXlEOztJQUN6RCwrQ0FBd0Q7O0lBQ3hELHNDQUE0RTs7SUFDNUUsMkNBQXNGOztJQUN0Riw0Q0FBd0Y7O0lBQ3hGLGtDQUFjOztJQUdkLG1EQUFnQzs7SUFDaEMsMkNBQXdCOztJQUN4Qiw2Q0FBdUI7O0lBQ3ZCLHlDQUFtQjs7SUFDbkIsMkNBQWdEOztJQUNoRCwwQ0FBaUQ7O0lBQ2pELDBDQUE2Qzs7SUFFN0MsZ0RBQTBCOzs7OztJQUMxQiwwQ0FBd0Q7O0lBRXhELDRDQUE0RDs7SUFDNUQsdUNBQWlCOztJQUVqQiwwQ0FBMEM7O0lBQzFDLHFDQUEyQjs7SUFDM0IsOENBQXlDOztJQUN6QyxtREFBOEM7O0lBQzlDLHlDQUErQjs7SUFFL0IsNkNBQW1DOztJQUVuQyx3Q0FBbUM7O0lBRW5DLHlDQUFvQzs7SUFHcEMsOENBQXlDOztJQUN6QywrQ0FBMEM7O0lBQzFDLHNDQUE0Qjs7SUFDNUIsdUNBQXdCOztJQUN4Qix3Q0FBMEI7O0lBbU4xQixzQ0FvQkU7Ozs7O0lBcE9BLCtCQUE4Qjs7Ozs7SUFDOUIsZ0RBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgbG9jYWxmb3JhZ2UgZnJvbSAnbG9jYWxmb3JhZ2UnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBOekZvcm1hdEJlZm9yZURyb3BFdmVudCwgTnpGb3JtYXRFbWl0RXZlbnQgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUnO1xuaW1wb3J0IHsgTnpSZXNpemVFdmVudCB9IGZyb20gJ25nLXpvcnJvLWFudGQvcmVzaXphYmxlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbFdpZHRoIH0gZnJvbSAnLi4vbW9kZWwvY29sV2lkdGgnO1xuaW1wb3J0IHsgUGFnZSB9IGZyb20gJy4uL21vZGVsL2NvbW1vbi10eXBlJztcbmltcG9ydCB7IENvbW1vblNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9jb21tb24tc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEhkVGFibGVDb2x1bW4sIEhkVGFibGVUb3RhbE9wdGlvbiwgVGFibGVDYWNoZU9wdGlvbiwgVHJlZUdyaWQgfSBmcm9tICcuL2hkLXRhYmxlLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGQtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZC10YWJsZS5jb21wb25lbnQubGVzcyddXG59KVxuZXhwb3J0IGNsYXNzIEhkVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB1dWlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRhYmxlQ29sczogQXJyYXk8SGRUYWJsZUNvbHVtbj4gPSBbXTtcbiAgQElucHV0KCkgdGFibGVEYXRhOiBQYWdlPGFueT47XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93U2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dPcGVyYXRlQ29sV2FycEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RGaWVsZDogc3RyaW5nID0gJ2JpbGxOdW1iZXInO1xuICAvLyDlkIjorqHljLrln59cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dUYWJsZVRvdGFsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRhYmxlVG90YWxPcHRpb246IEFycmF5PEhkVGFibGVUb3RhbE9wdGlvbj47XG4gIEBPdXRwdXQoKSBzb3J0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRhYmxlU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHRhYmxlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyDooajmoLzliIbpobXlj4LmlbBcbiAgQElucHV0KCkgdGFibGVQYWdlSW5kZXg6IG51bWJlciA9IDE7XG4gIEBJbnB1dCgpIHRhYmxlUGFnZVNpemU6IG51bWJlcjtcbiAgQE91dHB1dCgpIHRhYmxlUGFnZUluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB0YWJsZVBhZ2VTaXplQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBDb250ZW50Q2hpbGQoXCJ0YWJsZVRvdGFsXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZVRvdGFsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFwidGFibGVMZWZ0QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZUxlZnRCdXR0b246IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoXCJ0YWJsZVJpZ2h0QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZVJpZ2h0QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzY3JvbGwgPSBudWxsO1xuXG4gIC8vIOihqOagvOWLvumAieWPguaVsFxuICBpc0FsbERpc3BsYXlEYXRhQ2hlY2tlZCA9IGZhbHNlO1xuICBpc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgbGlzdE9mRGlzcGxheURhdGEgPSBbXTtcbiAgbGlzdE9mQWxsRGF0YSA9IFtdO1xuICBsaXN0T2ZTZWxlY3Rpb246IEFycmF5PGFueT4gfCBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgbWFwT2ZDaGVja2VkSWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHt9O1xuICBtYXBPZkNoZWNrTGlzdDogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0gPSB7fTtcbiAgLy8g5ZCI6K6h5Y+C5pWwXG4gIHRhYmxlVG90YWxPcHRpb25MaXN0ID0gW107XG4gIHByaXZhdGUgdGV4dFdpZHRoQ2FjaGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyOyB9ID0ge307XG4gIC8vIOe8k+WtmOS/oeaBr1xuICB0YWJsZUNhY2hlT3B0aW9uOiBUYWJsZUNhY2hlT3B0aW9uID0gbmV3IFRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgdXNlclNlc3Npb246IGFueTtcblxuICB0YWJsZUNvbHNDYWNoZTogQXJyYXk8SGRUYWJsZUNvbHVtbj4gPSBbXTtcbiAgc2hvd1RhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdENvbExpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIHNlbGVjdENvbExpc3ROb2Rlc0NhY2hlOiBBcnJheTxUcmVlR3JpZD4gPSBbXTtcbiAgc2hvd0xpc3ROb2RlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGlzRHJvcGRvd25WaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIOiuvue9ruWIl+eahOWPr+ingeaTjeS9nOaVsOe7hFxuICBub3dMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICAvLyDorr7nva7liJfnmoTkuI3lj6/op4Hmk43kvZzmlbDnu4RcbiAgaGlkZUxpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG5cbiAgLy8g54K55Ye75pe26ZyA6KaB5pyJ5Li05pe25pWw57uE5a2Y5pS+5Lik5LiqdHJlZSznlKjkuo7lj5bmtojml7blgJnmgaLlpI3osIPmlbTliY3nmoTnirbmgIFcbiAgY2FuY2VsTm93TGlzdE5vZGVzOiBBcnJheTxUcmVlR3JpZD4gPSBbXTtcbiAgY2FuY2VsSGlkZUxpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIHNob3dEZXRhaWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbG9jYWxmb3JhZ2U6IGFueSA9IG51bGw7XG4gIGxvY2FsdGlvblRtcDogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY29tbW9uU2Vzc2lvblNlcnZpY2U6IENvbW1vblNlc3Npb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubG9jYWxmb3JhZ2UgPSBsb2NhbGZvcmFnZS5jcmVhdGVJbnN0YW5jZSh7XG4gICAgICBkcml2ZXI6IGxvY2FsZm9yYWdlLklOREVYRUREQixcbiAgICAgIG5hbWU6ICdoZC1mc2NtJywgLy8g6K6+572u5a2Y5YKo5bqT55qE5ZCN56ewXG4gICAgICB2ZXJzaW9uOiAxLjAsIC8vIOiuvue9ruWtmOWCqOW6k+eahOeJiOacrFxuICAgICAgc3RvcmVOYW1lOiAnaGQtZnNjbS1zdG9yZScsIC8vIOiuvue9ruWtmOWCqOW6k+eahOWtmOWCqOepuumXtOWQjeensFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbHRpb25UbXAgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICBpZiAodGhpcy5sb2NhbHRpb25UbXApIHtcbiAgICAgIHRoaXMubG9jYWx0aW9uVG1wID0gdGhpcy5sb2NhbHRpb25UbXAucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcbiAgICB9XG4gICAgdGhpcy51c2VyU2Vzc2lvbiA9IHRoaXMuY29tbW9uU2Vzc2lvblNlcnZpY2UuZ2V0U2Vzc2lvbignX19qeV9hdXRob3JpemF0aW9uX3Nlc3Npb25fXycpO1xuICAgIC8vIOeUqOS6juW8gOWPkeeOr+Wig+iwg+ivlVxuICAgIGlmICghdGhpcy51c2VyU2Vzc2lvbikge1xuICAgICAgdGhpcy51c2VyU2Vzc2lvbiA9IHtcbiAgICAgICAgdXNlckNvZGU6ICdkZXYnXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuZGVsZXRlSGlkZUl0ZW0oKTtcbiAgICBpZiAoIXRoaXMudGFibGVDb2xzIHx8IHRoaXMudGFibGVDb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9jYWxmb3JhZ2UucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZ2V0SW5pdExvY2FsZm9yYWdlKCk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdsb2NhbGZvcmFnZeWKoOi9veW8guW4uHN0ZXAxJywgZSk7XG4gICAgICB0aHJvdyAnbG9jYWxmb3JhZ2XliqDovb3lvILluLgnO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlKSB7XG4gICAgLy8g5pWw5o2u5pS55Y+Y5pe277yM6YeN572u5Yu+6YCJ54q25oCBXG4gICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1sndGFibGVEYXRhJ10gJiYgY2hhbmdlc1sndGFibGVEYXRhJ11bJ2N1cnJlbnRWYWx1ZSddICYmIGNoYW5nZXNbJ3RhYmxlRGF0YSddWydwcmV2aW91c1ZhbHVlJ10pIHtcbiAgICAgIGlmIChjaGFuZ2VzWyd0YWJsZURhdGEnXVsnY3VycmVudFZhbHVlJ11bJ3BhZ2VTaXplJ10gIT09IGNoYW5nZXNbJ3RhYmxlRGF0YSddWydwcmV2aW91c1ZhbHVlJ11bJ3BhZ2VTaXplJ11cbiAgICAgICAgfHwgY2hhbmdlc1sndGFibGVEYXRhJ11bJ2N1cnJlbnRWYWx1ZSddWydwYWdlTnVtYmVyJ10gIT09IGNoYW5nZXNbJ3RhYmxlRGF0YSddWydwcmV2aW91c1ZhbHVlJ11bJ3BhZ2VOdW1iZXInXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlc2V0U3RhdHVzKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlQ29scyddICYmIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3RhYmxlQ29scyddLmN1cnJlbnRWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3RhYmxlQ29scyddLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICB0aGlzLmRlbGV0ZUhpZGVJdGVtKCk7XG4gICAgICBpZiAoIXRoaXMudGFibGVDb2xzIHx8IHRoaXMudGFibGVDb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmxvY2FsZm9yYWdlLnJlYWR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0SW5pdExvY2FsZm9yYWdlKCk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnbG9jYWxmb3JhZ2XliqDovb3lvILluLhzdGVwMicsIGUpO1xuICAgICAgICB0aHJvdyAnbG9jYWxmb3JhZ2XliqDovb3lvILluLgnO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlSGlkZUl0ZW0oKSB7XG4gICAgLy8g6aaW5YWI5oqKaXNTaG935Li6ZmFsc2XmlbDmja7liZTpmaTmjolcbiAgICB0aGlzLnRhYmxlQ29scyA9IHRoaXMudGFibGVDb2xzLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIC8vIOWmguaenOWvueixoeayoeaciSBpc1Nob3cg5bGe5oCn77yM5YiZ6buY6K6k5Li6IHRydWXvvIzkv53nlZnor6Xlr7nosaFcbiAgICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnaXNTaG93JykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICAvLyDlpoLmnpzlr7nosaHmnIkgaXNTaG93IOWxnuaAp++8jOWImeajgOafpeWFtuWAvOaYr+WQpuS4uiB0cnVlXG4gICAgICByZXR1cm4gaXRlbS5pc1Nob3cgPT09IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBzb3J0KHNvcnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IH0pIHtcbiAgICB0aGlzLnNvcnRFdmVudC5lbWl0KHNvcnQpO1xuICB9XG5cbiAgZ2V0SW5pdExvY2FsZm9yYWdlKCkge1xuICAgIC8vIOmmluWFiOiOt+WPluW9k+WJjWhkLXRhYmxl5a2Y5YKo55qE5pWw5o2uIOWmguaenOayoeacie+8jOWImeWIneWni+WMluS4i+W9k+WJjeeahOaVsOaNrlxuICAgIHRoaXMubG9jYWxmb3JhZ2UuZ2V0SXRlbSgnaGQtdGFibGVfJyArIHRoaXMudXNlclNlc3Npb24udXNlckNvZGUgKyAnXycgKyB0aGlzLmxvY2FsdGlvblRtcCArICdfJyArIHRoaXMudXVpZCkudGhlbigodmFsdWU6IFRhYmxlQ2FjaGVPcHRpb24pID0+IHtcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbiA9IHZhbHVlO1xuICAgICAgaWYgKHRoaXMudGFibGVDYWNoZU9wdGlvbi5wYWdlU2l6ZSAmJiB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemUgPiAxMCkge1xuICAgICAgICB0aGlzLnRhYmxlUGFnZVNpemUgPSB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlUGFnZVNpemUgPSB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemUgfHwgMTA7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMpIHtcbiAgICAgICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYmxlUGFnZVNpemVDaGFuZ2UuZW1pdCh0aGlzLnRhYmxlUGFnZVNpemUpO1xuICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gPSBuZXcgVGFibGVDYWNoZU9wdGlvbigpO1xuICAgICAgdGhpcy50YWJsZVBhZ2VTaXplID0gMTA7XG4gICAgICB0aGlzLnRhYmxlQ2FjaGVPcHRpb24ucGFnZVNpemUgPSAxMDtcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgdGhpcy50YWJsZVBhZ2VTaXplQ2hhbmdlLmVtaXQodGhpcy50YWJsZVBhZ2VTaXplKTtcbiAgICAgIHRoaXMuaW5pdFRhYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBpbml0VGFibGUoKSB7XG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMudXVpZCkge1xuICAgICAgdGhyb3cgJ2hkLXRhYmxl57y65aSxdXVpZOWPguaVsO+8jOivt+S9v+eUqOe8lui+keWZqOaPkuS7tueUn+aIkOW5tue7mWhkLXRhYmxl6LWL5LqIdXVpZOWxnuaApyc7XG4gICAgfVxuICAgIGlmICh0aGlzLmp1ZGdlUmVwZWF0Q29scygpKSB7XG4gICAgICB0aGlzLmRlYWxDb2xzKCk7XG4gICAgICB0aGlzLnNldENvbHMoKTtcbiAgICAgIHRoaXMuZGVhbFNjcm9sbCgpO1xuICAgICAgdGhpcy5kZWFsT3BlcmF0ZUJ0bigpO1xuICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIOiuvue9ruWIl+eCueWHu+WPlua2iFxuICBjYW5jZWxEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbmNlbEhpZGVMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLm5vd0xpc3ROb2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYW5jZWxOb3dMaXN0Tm9kZXMpKTtcbiAgfVxuXG4gIC8vIOeCueWHu+inpuWPkeiuvue9ruWIl1xuICBjb25maXJtRHJvcGRvd24oKTogdm9pZCB7XG4gICAgLy8g5Li05pe25a2Y5pS+5LiL77yM5Y+W5raI55qE5pe25YCZ5oGi5aSN5Y6f5p2l55qE54q25oCBICAg5rex5ou36LSd5LiL5a+56LGh5pWw57uEXG4gICAgdGhpcy5jYW5jZWxIaWRlTGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmhpZGVMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLmNhbmNlbE5vd0xpc3ROb2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ub3dMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHN1Ym1pdEdyaWRzKCkge1xuICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzID0gW107XG4gICAgdGhpcy5ub3dMaXN0Tm9kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLnB1c2goaXRlbS50aXRsZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zYXZlVGFibGVDYWNoZU9wdGlvbigpO1xuICAgIHRoaXMuaW5pdFRhYmxlKCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8g5LuO57yT5a2Y6K6+572u5YiXXG4gIHNldENvbHMoKSB7XG4gICAgdGhpcy5zaG93TGlzdE5vZGVzID0gZmFsc2U7XG4gICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSBbXTtcbiAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSBbXTtcbiAgICBpZiAodGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMpIHtcbiAgICAgIGxldCB7IG5vdEluY29scywgaW5jb2xzIH0gPSB0aGlzLnRhYmxlQ29sc0NhY2hlLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scy5pbmNsdWRlcyhpdGVtLnRpdGxlKSkge1xuICAgICAgICAgIGFjYy5pbmNvbHMucHVzaChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY2Mubm90SW5jb2xzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHsgbm90SW5jb2xzOiBbXSwgaW5jb2xzOiBbXSB9KTtcbiAgICAgIGluY29scy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scy5pbmRleE9mKGEudGl0bGUpIC0gdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5kZXhPZihiLnRpdGxlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YWJsZUNvbHMgPSBpbmNvbHMuY29uY2F0KG5vdEluY29scyk7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZUNvbHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29scykge1xuICAgICAgICBlbGVtZW50LmlzU2hvdyA9IHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmluY2x1ZGVzKGVsZW1lbnQudGl0bGUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBpZiAoZWxlbWVudC5pc1Nob3cpIHtcbiAgICAgICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgICAga2V5OiBlbGVtZW50LnRpdGxlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGVsZW1lbnQuZml4ZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAvLyBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xzLmluY2x1ZGVzKGVsZW1lbnQudGl0bGUpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oaWRlTGlzdE5vZGVzLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAgICBrZXk6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAgICBkaXNhYmxlZDogZWxlbWVudC5maXhlZCA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5jbHVkZXMoZWxlbWVudC50aXRsZSkgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5pc1Nob3cgPSB0cnVlO1xuICAgICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5wdXNoKHtcbiAgICAgICAgICB0aXRsZTogZWxlbWVudC50aXRsZSxcbiAgICAgICAgICBrZXk6IGVsZW1lbnQudGl0bGUsXG4gICAgICAgICAgY2hlY2tlZDogdHJ1ZSxcbiAgICAgICAgICAvLyBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkaXNhYmxlZDogZWxlbWVudC5maXhlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIOiwg+aVtOWIl+WuveS4uue8k+WtmOWuveW6plxuICAgIGlmICh0aGlzLnRhYmxlQ2FjaGVPcHRpb24gJiYgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocyAmJiB0aGlzLnRhYmxlQ2FjaGVPcHRpb24uY29sV2lkdGhzLnNpemUgIT09IDApIHtcbiAgICAgIHRoaXMudGFibGVDb2xzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpZiAodGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbFdpZHRocy5oYXMoY29sLnRpdGxlKSkge1xuICAgICAgICAgIGNvbC53aWR0aCA9IHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMuZ2V0KGNvbC50aXRsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZGVhbENvbHMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0xpc3ROb2RlcyA9IHRydWU7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyDmi5bmi73mk43kvZxcbiAgYmVmb3JlRHJvcCA9IChhcmc6IE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50KTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PiB7XG4gICAgaWYgKGFyZy5ub2RlLm9yaWdpbi5kaXNhYmxlZCB8fCAhYXJnLmRyYWdOb2RlLm9yaWdpbi5jaGVja2VkIHx8IGFyZy5wb3MgPT09IDApIHtcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBub2RlOiBUcmVlR3JpZCA9IG5ldyBUcmVlR3JpZCgpO1xuICAgICAgbm9kZS5jaGVja2VkID0gYXJnLmRyYWdOb2RlLm9yaWdpbi5jaGVja2VkO1xuICAgICAgbm9kZS5kaXNhYmxlZCA9IGFyZy5kcmFnTm9kZS5vcmlnaW4uZGlzYWJsZWQ7XG4gICAgICBub2RlLmV4cGFuZGVkID0gYXJnLmRyYWdOb2RlLm9yaWdpbi5leHBhbmRlZDtcbiAgICAgIG5vZGUuaXNMZWFmID0gYXJnLmRyYWdOb2RlLm9yaWdpbi5pc0xlYWY7XG4gICAgICBub2RlLmtleSA9IGFyZy5kcmFnTm9kZS5vcmlnaW4ua2V5O1xuICAgICAgbm9kZS5zZWxlY3RhYmxlID0gYXJnLmRyYWdOb2RlLm9yaWdpbi5zZWxlY3RhYmxlO1xuICAgICAgbm9kZS50aXRsZSA9IGFyZy5kcmFnTm9kZS5vcmlnaW4udGl0bGU7XG4gICAgICAvLyDmi5bmi73lhYPntKDkuIvmoIdcbiAgICAgIGxldCBkcmFnTm9kZUluZGV4ID0gdGhpcy5ub3dMaXN0Tm9kZXMuZmluZEluZGV4KGl0ZW0gPT4geyByZXR1cm4gaXRlbS50aXRsZSA9PSBhcmcuZHJhZ05vZGUub3JpZ2luLnRpdGxlOyB9KTtcbiAgICAgIC8vIOebruagh+S9jee9rueahOS4i+agh1xuICAgICAgbGV0IG5vZGVJbmRleCA9IHRoaXMubm93TGlzdE5vZGVzLmZpbmRJbmRleChpdGVtID0+IHsgcmV0dXJuIGl0ZW0udGl0bGUgPT0gYXJnLm5vZGUub3JpZ2luLnRpdGxlOyB9KSArIChhcmcucG9zID09PSAtMSA/IDAgOiBhcmcucG9zKTtcbiAgICAgIHRoaXMubm93TGlzdE5vZGVzLnNwbGljZShub2RlSW5kZXgsIDAsIG5vZGUpO1xuICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMuc3BsaWNlKG5vZGVJbmRleCA+PSBkcmFnTm9kZUluZGV4ID8gZHJhZ05vZGVJbmRleCA6IGRyYWdOb2RlSW5kZXggKyAxLCAxKTtcbiAgICAgIHJldHVybiBvZih0cnVlKS5waXBlKGRlbGF5KDEwMCkpO1xuICAgIH1cbiAgfTtcblxuICBtb3ZlRWxlbWVudE5lYXJieShhcnIsIGVsZW1lbnRUb01vdmVUaXRsZSwgdGFyZ2V0RWxlbWVudFRpdGxlLCBwb3MpIHtcbiAgICBjb25zdCB0bXBBcnJheSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXJyKSk7XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0bXBBcnJheS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnRpdGxlID09PSB0YXJnZXRFbGVtZW50VGl0bGUpO1xuICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IHRtcEFycmF5LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udGl0bGUgPT09IGVsZW1lbnRUb01vdmVUaXRsZSk7XG4gICAgY29uc3QgbmV3SW5kZXggPSBwb3MgPCAwID8gKHRhcmdldEluZGV4ICsgcG9zKSA6IHRhcmdldEluZGV4O1xuICAgIC8vIOenu+mZpOebruagh+WFg+e0oO+8jOW5tuaPkuWFpeWIsOaWsOeahOS9jee9rlxuICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50ID0gdG1wQXJyYXkuc3BsaWNlKGVsZW1lbnRJbmRleCwgMSk7XG4gICAgdG1wQXJyYXkuc3BsaWNlKG5ld0luZGV4ICsgMSwgMCwgcmVtb3ZlZEVsZW1lbnRbMF0pO1xuICAgIHJldHVybiB0bXBBcnJheTtcbiAgfVxuXG4gIC8vIOWLvumAieaTjeS9nFxuICBjaGVja0FjdGlvbihldmVudDogTnpGb3JtYXRFbWl0RXZlbnQpOiB2b2lkIHtcbiAgICAvLyDli77pgInlj6rmnInlnKhoaWRlTGlzdE5vZGVzLOWPlua2iOWLvumAieWPquacieWcqG5vd0xpc3ROb2Rlc1xuICAgIGlmIChldmVudC5ub2RlLm9yaWdpbi5jaGVja2VkKSB7XG4gICAgICBsZXQgbm9kZTogVHJlZUdyaWQgPSBuZXcgVHJlZUdyaWQoKTtcbiAgICAgIG5vZGUgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50aXRsZSA9PT0gZXZlbnQubm9kZS5vcmlnaW4udGl0bGU7XG4gICAgICB9KTtcbiAgICAgIG5vZGUuY2hlY2tlZCA9IHRydWU7XG4gICAgICAvLyDmib7liLDnrKzkuIDkuKpmaXhlZOWxnuaAp+S4unJpZ2h055qEdGl0bGXvvIzmib7liLDmj5LlhaXlhYPntKDnmoTkvY3nva5cbiAgICAgIGxldCB0aXRsZSA9IG51bGw7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy50YWJsZUNvbHNDYWNoZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodGhpcy50YWJsZUNvbHNDYWNoZVtpXS5maXhlZCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIHRpdGxlID0gdGhpcy50YWJsZUNvbHNDYWNoZVtpXS50aXRsZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHRlbXBvcmFyeU5vZGVMaXN0ID0gdGhpcy5ub3dMaXN0Tm9kZXMuc2xpY2UoMCk7XG4gICAgICBpZiAoIXRpdGxlKSB7XG4gICAgICAgIHRlbXBvcmFyeU5vZGVMaXN0LnB1c2gobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubm93TGlzdE5vZGVzLmZpbmRJbmRleChub2RlID0+IG5vZGUudGl0bGUgPT09IHRpdGxlKTtcbiAgICAgICAgdGVtcG9yYXJ5Tm9kZUxpc3Quc3BsaWNlKGluZGV4LCAwLCBub2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm93TGlzdE5vZGVzID0gdGVtcG9yYXJ5Tm9kZUxpc3Q7XG4gICAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnRpdGxlICE9PSBldmVudC5ub2RlLm9yaWdpbi50aXRsZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiAodGhpcy5oaWRlTGlzdE5vZGVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnRhYmxlQ2FjaGVPcHRpb24gJiYgdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMpIHtcbiAgICAgIC8vICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gdGhpcy5nZXRIaWRlTGlzdE5vZGVzKCk7XG4gICAgICAvLyB9XG4gICAgICBsZXQgdGVtcG9yYXJ5Tm9kZUxpc3QgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuc2xpY2UoMCk7XG4gICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS50aXRsZSA9PT0gZXZlbnQubm9kZS5vcmlnaW4udGl0bGUpIHtcbiAgICAgICAgICBjb25zdCBpbm5lckl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcbiAgICAgICAgICBpbm5lckl0ZW0uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgIHRlbXBvcmFyeU5vZGVMaXN0LnB1c2goaW5uZXJJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSB0ZW1wb3JhcnlOb2RlTGlzdDtcblxuICAgICAgLy8g5Li65LqG6Ziy5q2i5pyq6YCJ5oup55qE5pWw57uE6aG65bqP5Zug5Li6cHVzaOaWueazleiAjOaUueWPmO+8jOmAmui/h+WIneWni+aVsOaNruiOt+WPluaYvuekuueahOWtl+auteWIl+ihqFxuICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSB0aGlzLm5vd0xpc3ROb2Rlcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGl0bGUgIT09IGV2ZW50Lm5vZGUub3JpZ2luLnRpdGxlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8g6Ziy5q2i5pyq6YCJ5oup55qE5pWw57uE6aG65bqP5Zug5Li6cHVzaOaWueazleiAjOaUueWPmO+8jOS7juWIneWni+aVsOaNruiOt+WPlumakOiXj+acquaYvuekuueahOWtl+auteWIl+ihqFxuICBnZXRIaWRlTGlzdE5vZGVzKCk6IEFycmF5PFRyZWVHcmlkPiB7XG4gICAgbGV0IHRlbXBvcmFyeU5vZGVMaXN0OiBBcnJheTxUcmVlR3JpZD4gPSBbXTtcbiAgICAvLyDku450YWJsZUNvbHNDYWNoZemHjOmdouaJvuayoeacieWcqHN0b3JhZ2Xph4zpnaLlh7rnjrDnmoTlrZfmrrUs57uE5oiQaGlkZUxpc3RcbiAgICB0aGlzLnRhYmxlQ29sc0NhY2hlLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmICghdGhpcy50YWJsZUNhY2hlT3B0aW9uLmNvbHMuaW5jbHVkZXMoaXRlbS50aXRsZSkpIHtcbiAgICAgICAgbGV0IG5vZGVJdGVtOiBUcmVlR3JpZCA9IG5ldyBUcmVlR3JpZCgpO1xuICAgICAgICBub2RlSXRlbS50aXRsZSA9IGl0ZW0udGl0bGU7XG4gICAgICAgIG5vZGVJdGVtLmtleSA9IGl0ZW0udGl0bGU7XG4gICAgICAgIG5vZGVJdGVtLmRpc2FibGVkID0gaXRlbS5maXhlZCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgbm9kZUl0ZW0uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB0ZW1wb3JhcnlOb2RlTGlzdC5wdXNoKG5vZGVJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGVtcG9yYXJ5Tm9kZUxpc3Q7XG4gIH1cblxuICBkZWFsQ29scygpIHtcbiAgICBpZiAoIXRoaXMudGFibGVDb2xzWzBdLm1pbldpZHRoKSB7XG4gICAgICB0aGlzLnRhYmxlQ29scy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBzcGFuLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgc3Bhbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gJzEycHgnO1xuICAgICAgICBzcGFuLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgLy8g5bCG5qC35byP5L+u5pS55Li6IGlubGluZS1ibG9ja1xuICAgICAgICBzcGFuLmlubmVyVGV4dCA9IGl0ZW0udGl0bGU7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgIGl0ZW0ubWluV2lkdGggPSBzcGFuLm9mZnNldFdpZHRoICsgMTY7XG4gICAgICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyDlpITnkIblt6blj7PlkLjpmYTnmoTmlbDmja7lnKjmlbDnu4TkuK3nmoTkvY3nva5cbiAgICBjb25zdCBsZWZ0Rml4ZWRDb2xzID0gdGhpcy50YWJsZUNvbHMuZmlsdGVyKGNvbCA9PiBjb2wuZml4ZWQgPT09ICdsZWZ0Jyk7XG4gICAgY29uc3QgcmlnaHRGaXhlZENvbHMgPSB0aGlzLnRhYmxlQ29scy5maWx0ZXIoY29sID0+IGNvbC5maXhlZCA9PT0gJ3JpZ2h0Jyk7XG4gICAgY29uc3Qgbm9ybWFsQ29scyA9IHRoaXMudGFibGVDb2xzLmZpbHRlcihjb2wgPT4gIWNvbC5maXhlZCk7XG4gICAgY29uc3QgcmVzdWx0Q29scyA9IGxlZnRGaXhlZENvbHMuY29uY2F0KG5vcm1hbENvbHMpLmNvbmNhdChyaWdodEZpeGVkQ29scyk7XG4gICAgdGhpcy50YWJsZUNvbHMgPSByZXN1bHRDb2xzO1xuICAgIGlmICghdGhpcy50YWJsZUNvbHNDYWNoZSB8fCB0aGlzLnRhYmxlQ29sc0NhY2hlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8g57yT5a2Y5LiA5LiL6KGo5qC855qE5pWw5o2uXG4gICAgICB0aGlzLnRhYmxlQ29sc0NhY2hlID0gWy4uLnRoaXMudGFibGVDb2xzXTtcbiAgICB9XG4gIH1cblxuICBzYXZlVGFibGVDYWNoZU9wdGlvbigpIHtcbiAgICB0aGlzLmxvY2FsZm9yYWdlLnNldEl0ZW0oJ2hkLXRhYmxlXycgKyB0aGlzLnVzZXJTZXNzaW9uLnVzZXJDb2RlICsgJ18nICsgdGhpcy5sb2NhbHRpb25UbXAgKyAnXycgKyB0aGlzLnV1aWQsIHRoaXMudGFibGVDYWNoZU9wdGlvbik7XG4gIH1cblxuICBqdWRnZVJlcGVhdENvbHMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYmxlQ29scy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgdGhpcy50YWJsZUNvbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGVDb2xzW2ldLnRpdGxlID09PSB0aGlzLnRhYmxlQ29sc1tqXS50aXRsZSkge1xuICAgICAgICAgIHRocm93IGBoZC10YWJsZee7hOS7tuS4reWIl+WQjSAke3RoaXMudGFibGVDb2xzW2ldLnRpdGxlfSDph43lpI1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25SZXNpemUoeyB3aWR0aCB9OiBOelJlc2l6ZUV2ZW50LCBjb2w6IEhkVGFibGVDb2x1bW4pOiB2b2lkIHtcbiAgICBsZXQgdGVtcFdpZHRoID0gMDtcbiAgICBpZiAod2lkdGggPiBjb2wubWluV2lkdGgpIHtcbiAgICAgIHRlbXBXaWR0aCA9IHdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wV2lkdGggPSBjb2wubWluV2lkdGg7XG4gICAgfVxuICAgIHRoaXMudGFibGVDYWNoZU9wdGlvbi5jb2xXaWR0aHMuc2V0KGNvbC50aXRsZSwgdGVtcFdpZHRoKTtcbiAgICB0aGlzLnNhdmVUYWJsZUNhY2hlT3B0aW9uKCk7XG4gICAgdGhpcy50YWJsZUNvbHMgPSB0aGlzLnRhYmxlQ29scy5tYXAoZSA9PiAoZS50aXRsZSA9PT0gY29sLnRpdGxlID8geyAuLi5lLCB3aWR0aDogdGVtcFdpZHRoIH0gOiBlKSk7XG4gICAgdGhpcy5kZWFsU2Nyb2xsKCk7XG4gIH1cblxuICBkZWFsT3BlcmF0ZUJ0bigpIHtcbiAgICBsZXQgb3BlcmF0ZUNvbCA9IHRoaXMudGFibGVDb2xzLmZpbmQoY29sID0+IGNvbC50aXRsZSA9PT0gJ+aTjeS9nCcpIHx8IG51bGw7XG4gICAgaWYgKG9wZXJhdGVDb2wpIHtcbiAgICAgIGxldCB0ZXh0U3RyID0gJyc7XG4gICAgICBvcGVyYXRlQ29sLmJ0bkxpc3QuZm9yRWFjaChidG4gPT4ge1xuICAgICAgICBpZiAoIWJ0bi5pc1JlcGVhdCkge1xuICAgICAgICAgIHRleHRTdHIgKz0gYnRuLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgc3Bhbi5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBzcGFuLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JztcbiAgICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAvLyDlsIbmoLflvI/kv67mlLnkuLogaW5saW5lLWJsb2NrXG4gICAgICBzcGFuLmlubmVyVGV4dCA9IHRleHRTdHI7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgb3BlcmF0ZUNvbC53aWR0aCA9IHNwYW4ub2Zmc2V0V2lkdGggKyAob3BlcmF0ZUNvbC5idG5MaXN0LmZpbHRlcihpdGVtID0+ICFpdGVtLmlzUmVwZWF0KS5sZW5ndGggLSAxKSAqIDQgKyAxNjtcbiAgICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc3Bhbik7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIGZuKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBkZWFsU2Nyb2xsKCkge1xuICAgIGxldCBjb2xXaWR0aCA9IDA7XG4gICAgaWYgKHRoaXMuc2hvd1NlbGVjdGVkKSB7XG4gICAgICBjb2xXaWR0aCArPSA0MDtcbiAgICB9XG4gICAgdGhpcy50YWJsZUNvbHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmICghaXRlbS53aWR0aCkge1xuICAgICAgICBpdGVtLndpZHRoID0gQ29sV2lkdGguZml4Q29sV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5pc1Nob3cpIHtcbiAgICAgICAgaXRlbS5maXhlZFdpZHRoID0gY29sV2lkdGg7XG4gICAgICAgIGNvbFdpZHRoICs9IGl0ZW0ud2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy50YWJsZVRvdGFsKSB7XG4gICAgICB0aGlzLnNjcm9sbCA9IHtcbiAgICAgICAgeDogJzFweCcsXG4gICAgICAgIHk6ICdjYWxjKDEwMHZoIC0gMTgwcHgpJ1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGwgPSB7XG4gICAgICAgIHg6ICcxcHgnLFxuICAgICAgICB5OiAnY2FsYygxMDB2aCAtIDE0MHB4KSdcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaXNUZXh0T3ZlcmZsb3codGV4dDogc3RyaW5nLCBtYXhXaWR0aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2FjaGVkV2lkdGggPSB0aGlzLnRleHRXaWR0aENhY2hlW3RleHRdO1xuICAgIGlmIChjYWNoZWRXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkV2lkdGggKyAxNSA+PSBtYXhXaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHNwYW4uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIHNwYW4uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHNwYW4uc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSAnMTJweCc7XG4gICAgc3Bhbi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7IC8vIOWwhuagt+W8j+S/ruaUueS4uiBpbmxpbmUtYmxvY2tcbiAgICBzcGFuLmlubmVyVGV4dCA9IHRleHQ7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICBjb25zdCBpc092ZXJmbG93ID0gc3Bhbi5vZmZzZXRXaWR0aCArIDE1ID49IG1heFdpZHRoO1xuICAgIHRoaXMudGV4dFdpZHRoQ2FjaGVbdGV4dF0gPSBzcGFuLm9mZnNldFdpZHRoO1xuICAgIHNwYW4uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNwYW4pO1xuICAgIHJldHVybiBpc092ZXJmbG93O1xuICB9XG5cbiAgLy8g6KGo5qC85Yu+6YCJ6YC76L6RXG4gIGN1cnJlbnRQYWdlRGF0YUNoYW5nZSgkZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMubGlzdE9mRGlzcGxheURhdGEgPSAkZXZlbnQ7XG4gICAgdGhpcy5yZWZyZXNoU3RhdHVzKCk7XG4gICAgdGhpcy5yZXNldFN0YXR1cygpO1xuICB9XG5cbiAgc2VhcmNoKHJlc2V0OiBib29sZWFuKSB7XG4gICAgdGhpcy50YWJsZUNhY2hlT3B0aW9uLnBhZ2VTaXplID0gdGhpcy50YWJsZVBhZ2VTaXplO1xuICAgIHRoaXMuc2F2ZVRhYmxlQ2FjaGVPcHRpb24oKTtcbiAgICBpZiAocmVzZXQpIHtcbiAgICAgIHRoaXMudGFibGVQYWdlU2l6ZUNoYW5nZS5lbWl0KHRoaXMudGFibGVQYWdlU2l6ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFibGVQYWdlSW5kZXhDaGFuZ2UuZW1pdCh0aGlzLnRhYmxlUGFnZUluZGV4KTtcbiAgICAgIC8vIOinpuWPkeeItue7hOS7tuafpeivouS6i+S7tlxuICAgICAgdGhpcy50YWJsZVNlYXJjaEV2ZW50LmVtaXQocmVzZXQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U3RhdHVzKCkge1xuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIHRoaXMubWFwT2ZDaGVja2VkSWQgPSB7fTtcbiAgICB0aGlzLm1hcE9mQ2hlY2tMaXN0ID0ge307XG4gICAgdGhpcy5zZWxlY3RFdmVudC5lbWl0KFtdKTtcbiAgfVxuXG4gIHJlZnJlc2hTdGF0dXMoZXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSwgZGF0YTogYW55ID0gbnVsbCk6IHZvaWQge1xuICAgIGlmIChldmVudCAmJiBkYXRhKSB7XG4gICAgICAhdGhpcy5tYXBPZkNoZWNrTGlzdFtkYXRhW3RoaXMuc2VsZWN0RmllbGRdXSAmJiAodGhpcy5tYXBPZkNoZWNrTGlzdFtkYXRhW3RoaXMuc2VsZWN0RmllbGRdXSA9IGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50ICYmIGRhdGEpIHtcbiAgICAgIHRoaXMubWFwT2ZDaGVja0xpc3RbZGF0YVt0aGlzLnNlbGVjdEZpZWxkXV0gJiYgZGVsZXRlIHRoaXMubWFwT2ZDaGVja0xpc3RbZGF0YVt0aGlzLnNlbGVjdEZpZWxkXV07XG4gICAgfVxuICAgIHRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQgPSB0aGlzLmxpc3RPZkRpc3BsYXlEYXRhLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXSk7XG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPVxuICAgICAgdGhpcy5saXN0T2ZEaXNwbGF5RGF0YS5zb21lKGl0ZW0gPT4gdGhpcy5tYXBPZkNoZWNrZWRJZFtpdGVtW3RoaXMuc2VsZWN0RmllbGRdXSkgJiYgIXRoaXMuaXNBbGxEaXNwbGF5RGF0YUNoZWNrZWQ7XG4gICAgLy8g6Kem5Y+Rc2VsZWN05LqL5Lu2XG4gICAgaWYgKHRoaXMuc2VsZWN0RXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTGlzdDogQXJyYXk8YW55PiA9IE9iamVjdC52YWx1ZXModGhpcy5tYXBPZkNoZWNrTGlzdCk7XG4gICAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoc2VsZWN0ZWRMaXN0KTtcbiAgICB9XG4gICAgLy8g5aaC5p6c5pWw5o2u5Li656m677yM5YiZ5riF56m65Yu+6YCJ5qCH6K+GXG4gICAgaWYgKHRoaXMudGFibGVEYXRhLmNvbnRlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmlzQWxsRGlzcGxheURhdGFDaGVja2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tBbGwodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RPZkRpc3BsYXlEYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgIXRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gJiYgKHRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gPSBpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gJiYgZGVsZXRlIHRoaXMubWFwT2ZDaGVja0xpc3RbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWFwT2ZDaGVja2VkSWRbaXRlbVt0aGlzLnNlbGVjdEZpZWxkXV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZnJlc2hTdGF0dXMoKTtcbiAgfVxuXG4gIGp1ZGdlQ29sRW1wdHkoc3RyOiBhbnkpIHtcbiAgICBpZiAoc3RyIHx8IHN0ciA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc856m6Pic7XG4gICAgfVxuICB9XG59XG4iXX0=
|