tnx-shared 5.3.163 → 5.3.164
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/tnx-shared.umd.js +940 -505
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/component-base.d.ts.map +1 -1
- package/classes/base/i-list-component.d.ts +3 -0
- package/classes/base/i-list-component.d.ts.map +1 -1
- package/classes/base/list-base.d.ts +5 -2
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/base/list-component-base.d.ts +21 -5
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +10 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/settings/settings-authorize-button/settings-authorize-button.component.d.ts +20 -0
- package/components/settings/settings-authorize-button/settings-authorize-button.component.d.ts.map +1 -0
- package/components/settings/settings-authorize-button/settings-authorize-button.component.ngfactory.d.ts.map +1 -0
- package/components/settings/settings-authorize-button/settings-authorize-button.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/configs/component-context.constant.d.ts +8 -0
- package/configs/component-context.constant.d.ts.map +1 -1
- package/const/common.d.ts +2 -2
- package/const/common.d.ts.map +1 -1
- package/directives/authorize.directive.d.ts +8 -3
- package/directives/authorize.directive.d.ts.map +1 -1
- package/enums/common.d.ts +16 -0
- package/enums/common.d.ts.map +1 -1
- package/esm2015/classes/base/component-base.js +5 -1
- package/esm2015/classes/base/i-list-component.js +1 -1
- package/esm2015/classes/base/list-base.js +20 -6
- package/esm2015/classes/base/list-component-base.js +119 -10
- package/esm2015/classes/form-schema.js +12 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/components/settings/settings-authorize-button/settings-authorize-button.component.js +142 -0
- package/esm2015/configs/component-context.constant.js +10 -2
- package/esm2015/const/common.js +5 -5
- package/esm2015/directives/authorize.directive.js +37 -6
- package/esm2015/enums/common.js +19 -1
- package/esm2015/services/authen.service.js +3 -1
- package/esm2015/services/basepermission.service.js +28 -0
- package/esm2015/services/common.service.js +1 -1
- package/esm2015/tnx-shared.js +4 -2
- package/esm2015/tnx-shared.module.js +3 -1
- package/fesm2015/tnx-shared.js +616 -262
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/authen.service.d.ts.map +1 -1
- package/services/basepermission.service.d.ts +11 -0
- package/services/basepermission.service.d.ts.map +1 -0
- package/services/basepermission.service.ngfactory.d.ts.map +1 -0
- package/services/common.service.d.ts.map +1 -1
- package/tnx-shared.d.ts +3 -1
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +2 -1
- package/tnx-shared.module.d.ts.map +1 -1
- package/tnx-shared.module.ngfactory.d.ts.map +1 -1
|
@@ -115,7 +115,15 @@
|
|
|
115
115
|
COLUMN_SETTING: 'COLUMN_SETTING',
|
|
116
116
|
COLOR_SETTING: 'COLOR_SETTING',
|
|
117
117
|
DEFAULT_DATA: 'DEFAULT_DATA',
|
|
118
|
-
ADVANCE_FILTER: 'ADVANCE_FILTER'
|
|
118
|
+
ADVANCE_FILTER: 'ADVANCE_FILTER',
|
|
119
|
+
BUTTON_AUTHORIZE: 'BUTTON_AUTHORIZE',
|
|
120
|
+
BUTTON_SETTING: 'BUTTON_SETTING'
|
|
121
|
+
};
|
|
122
|
+
ComCtxConstants.COMMON_VN = {
|
|
123
|
+
ADD: 'THEM_MOI',
|
|
124
|
+
EDIT: 'SUA',
|
|
125
|
+
DELETE: 'XOA',
|
|
126
|
+
DELETE_MULTIPLE: 'XOA_CAC_MUC_DA_CHON',
|
|
119
127
|
};
|
|
120
128
|
ComCtxConstants.COMMON = {
|
|
121
129
|
ADD: 'ADD',
|
|
@@ -1081,6 +1089,7 @@
|
|
|
1081
1089
|
this.useCommonSearch = false;
|
|
1082
1090
|
this.useCommonFullTextSearch = true;
|
|
1083
1091
|
this.hiddenSearch = false;
|
|
1092
|
+
this.hiddenAuthorizeButton = false;
|
|
1084
1093
|
this.hiddenHeader = false;
|
|
1085
1094
|
this.hiddenPageSetting = false;
|
|
1086
1095
|
this.hiddenTextPage = false;
|
|
@@ -2036,6 +2045,7 @@
|
|
|
2036
2045
|
_this.searchMultiple = true;
|
|
2037
2046
|
_this.disableDisplayFieldServerSearch = false;
|
|
2038
2047
|
_this.loadOnInit = false;
|
|
2048
|
+
_this.isLazyLoad = false;
|
|
2039
2049
|
_this.allowLoadDataWhenParentNull = false;
|
|
2040
2050
|
_this.disabledParentItem = true;
|
|
2041
2051
|
for (var key in init) {
|
|
@@ -2389,6 +2399,16 @@
|
|
|
2389
2399
|
}
|
|
2390
2400
|
return PopupSize;
|
|
2391
2401
|
}());
|
|
2402
|
+
var ButtonAction = /** @class */ (function () {
|
|
2403
|
+
function ButtonAction(init) {
|
|
2404
|
+
this.lstElement = [];
|
|
2405
|
+
this.isAuthorize = false;
|
|
2406
|
+
for (var key in init) {
|
|
2407
|
+
this[key] = init[key];
|
|
2408
|
+
}
|
|
2409
|
+
}
|
|
2410
|
+
return ButtonAction;
|
|
2411
|
+
}());
|
|
2392
2412
|
var EventData = /** @class */ (function () {
|
|
2393
2413
|
function EventData(init) {
|
|
2394
2414
|
for (var key in init) {
|
|
@@ -2885,6 +2905,7 @@
|
|
|
2885
2905
|
Object.keys(sessionStorage).filter(function (item) { return /^AUTHORIZATION/.test(item) || /^V4_AUTHORIZATION/.test(item); }).forEach(function (item) {
|
|
2886
2906
|
sessionStorage.removeItem(item);
|
|
2887
2907
|
});
|
|
2908
|
+
sessionStorage.removeItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE);
|
|
2888
2909
|
sessionStorage.removeItem('profiles');
|
|
2889
2910
|
sessionStorage.removeItem('v4_profiles');
|
|
2890
2911
|
};
|
|
@@ -5395,6 +5416,24 @@
|
|
|
5395
5416
|
EnumCanBo[EnumCanBo["NGOAI_DON_VI"] = 2] = "NGOAI_DON_VI";
|
|
5396
5417
|
EnumCanBo[EnumCanBo["TRONG_DON_VI"] = 3] = "TRONG_DON_VI";
|
|
5397
5418
|
})(exports.EnumCanBo || (exports.EnumCanBo = {}));
|
|
5419
|
+
exports.PermissionName = void 0;
|
|
5420
|
+
(function (PermissionName) {
|
|
5421
|
+
PermissionName["WATCH"] = "Xem";
|
|
5422
|
+
PermissionName["ADD"] = "Th\u00EAm m\u1EDBi";
|
|
5423
|
+
PermissionName["EDIT"] = "S\u1EEDa";
|
|
5424
|
+
PermissionName["DELETE"] = "X\u00F3a";
|
|
5425
|
+
PermissionName["DELETE_MULTIPLE"] = "X\u00F3a c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn";
|
|
5426
|
+
})(exports.PermissionName || (exports.PermissionName = {}));
|
|
5427
|
+
exports.EnumProperties = void 0;
|
|
5428
|
+
(function (EnumProperties) {
|
|
5429
|
+
EnumProperties["NG_REFLECT_TEXT"] = "ng-reflect-text";
|
|
5430
|
+
EnumProperties["NG_REFLECT_LABEL"] = "ng-reflect-label";
|
|
5431
|
+
EnumProperties["CRUD_LIST"] = "crud-list";
|
|
5432
|
+
EnumProperties["LABEL"] = "label";
|
|
5433
|
+
EnumProperties["TAG_NAME"] = "tagName";
|
|
5434
|
+
EnumProperties["TOOLTIP"] = "ptooltip";
|
|
5435
|
+
EnumProperties["RESULTS"] = "_results";
|
|
5436
|
+
})(exports.EnumProperties || (exports.EnumProperties = {}));
|
|
5398
5437
|
|
|
5399
5438
|
var ExportItem = /** @class */ (function () {
|
|
5400
5439
|
function ExportItem(init) {
|
|
@@ -10355,6 +10394,10 @@
|
|
|
10355
10394
|
this._crudService = injector.get(CrudService);
|
|
10356
10395
|
this._commonService = injector.get(CommonService);
|
|
10357
10396
|
this._datePipe = injector.get(i3.DatePipe);
|
|
10397
|
+
var root = this._appContext.getRootContext();
|
|
10398
|
+
if (!root) {
|
|
10399
|
+
this._appContext.addRootContext(this._componentContext, this._activatedRoute);
|
|
10400
|
+
}
|
|
10358
10401
|
this._componentContext = this._appContext.addComponentContext(this._componentContext, this._activatedRoute, this.getComponentId());
|
|
10359
10402
|
if (this._componentContext) {
|
|
10360
10403
|
this.model = this._componentContext.data;
|
|
@@ -11178,9 +11221,9 @@
|
|
|
11178
11221
|
var FieldWorkflowCodeInCrudForm = '_WorkflowCode';
|
|
11179
11222
|
var ɵ0$2 = exports.PermissionBase.READ, ɵ1$1 = exports.PermissionBase.EDIT, ɵ2$1 = exports.PermissionBase.DELETE;
|
|
11180
11223
|
var DataSourcePermissionBase = [
|
|
11181
|
-
{ id: ɵ0$2, ten:
|
|
11182
|
-
{ id: ɵ1$1, ten:
|
|
11183
|
-
{ id: ɵ2$1, ten:
|
|
11224
|
+
{ id: ɵ0$2, ten: exports.PermissionName.WATCH },
|
|
11225
|
+
{ id: ɵ1$1, ten: exports.PermissionName.EDIT },
|
|
11226
|
+
{ id: ɵ2$1, ten: exports.PermissionName.DELETE }
|
|
11184
11227
|
];
|
|
11185
11228
|
var ɵ3 = exports.EnumGioiTinh.NAM, ɵ4 = exports.EnumGioiTinh.NU;
|
|
11186
11229
|
var DataSourceGioiTinh = [
|
|
@@ -19100,307 +19143,6 @@
|
|
|
19100
19143
|
onDataBinded: [{ type: i0.Output }]
|
|
19101
19144
|
};
|
|
19102
19145
|
|
|
19103
|
-
var CauHinhWorkflowService = /** @class */ (function (_super) {
|
|
19104
|
-
__extends(CauHinhWorkflowService, _super);
|
|
19105
|
-
function CauHinhWorkflowService(http, injector, _moduleConfigService) {
|
|
19106
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CauHinhWorkflow") || this;
|
|
19107
|
-
_this._moduleConfigService = _moduleConfigService;
|
|
19108
|
-
_this.serviceCode = 'congviec';
|
|
19109
|
-
_this.entityName = 'CauHinhWorkflow';
|
|
19110
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
19111
|
-
return _this;
|
|
19112
|
-
}
|
|
19113
|
-
return CauHinhWorkflowService;
|
|
19114
|
-
}(BaseService));
|
|
19115
|
-
CauHinhWorkflowService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function CauHinhWorkflowService_Factory() { return new CauHinhWorkflowService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService)); }, token: CauHinhWorkflowService, providedIn: "root" });
|
|
19116
|
-
CauHinhWorkflowService.decorators = [
|
|
19117
|
-
{ type: i0.Injectable, args: [{
|
|
19118
|
-
providedIn: 'root'
|
|
19119
|
-
},] }
|
|
19120
|
-
];
|
|
19121
|
-
CauHinhWorkflowService.ctorParameters = function () { return [
|
|
19122
|
-
{ type: i1$1.HttpClient },
|
|
19123
|
-
{ type: i0.Injector },
|
|
19124
|
-
{ type: ModuleConfigService }
|
|
19125
|
-
]; };
|
|
19126
|
-
|
|
19127
|
-
var StateMachinesService = /** @class */ (function (_super) {
|
|
19128
|
-
__extends(StateMachinesService, _super);
|
|
19129
|
-
function StateMachinesService(http, injector, _moduleConfigService) {
|
|
19130
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/StateMachines") || this;
|
|
19131
|
-
_this._moduleConfigService = _moduleConfigService;
|
|
19132
|
-
_this.entityName = 'StateMachines';
|
|
19133
|
-
_this.serviceCode = 'workflow';
|
|
19134
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint;
|
|
19135
|
-
return _this;
|
|
19136
|
-
}
|
|
19137
|
-
StateMachinesService.prototype.changeState = function (itemWorkflowHistory) {
|
|
19138
|
-
return this.defaultPost(this.serviceUri + "/ChangeState", itemWorkflowHistory);
|
|
19139
|
-
};
|
|
19140
|
-
StateMachinesService.prototype.rollback = function (rowData) {
|
|
19141
|
-
return this.defaultPost(this.serviceUri + "/Rollback/" + rowData.__workflowCode + "/" + rowData.id, {});
|
|
19142
|
-
};
|
|
19143
|
-
StateMachinesService.prototype.getUserInProcessForm = function (workflowCode, stateCode, actionCode, itemId) {
|
|
19144
|
-
return this.defaultPost(this.serviceUri + "/GetUserInProcessForm/" + workflowCode + "/" + stateCode + "/" + actionCode + "/" + itemId, {});
|
|
19145
|
-
};
|
|
19146
|
-
return StateMachinesService;
|
|
19147
|
-
}(BaseService));
|
|
19148
|
-
StateMachinesService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function StateMachinesService_Factory() { return new StateMachinesService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService)); }, token: StateMachinesService, providedIn: "root" });
|
|
19149
|
-
StateMachinesService.decorators = [
|
|
19150
|
-
{ type: i0.Injectable, args: [{
|
|
19151
|
-
providedIn: 'root'
|
|
19152
|
-
},] }
|
|
19153
|
-
];
|
|
19154
|
-
StateMachinesService.ctorParameters = function () { return [
|
|
19155
|
-
{ type: i1$1.HttpClient },
|
|
19156
|
-
{ type: i0.Injector },
|
|
19157
|
-
{ type: ModuleConfigService }
|
|
19158
|
-
]; };
|
|
19159
|
-
|
|
19160
|
-
var DmLoaiCongViecService = /** @class */ (function (_super) {
|
|
19161
|
-
__extends(DmLoaiCongViecService, _super);
|
|
19162
|
-
function DmLoaiCongViecService(http, injector, _moduleConfigService) {
|
|
19163
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/DM_LoaiCongViec") || this;
|
|
19164
|
-
_this._moduleConfigService = _moduleConfigService;
|
|
19165
|
-
_this.serviceCode = 'congviec';
|
|
19166
|
-
_this.entityName = 'DM_LoaiCongViec';
|
|
19167
|
-
_this.dicLoaiCongViec = {};
|
|
19168
|
-
_this.keyIdLoaiCongViecRoot = 'root';
|
|
19169
|
-
_this.getWorkflowSettingByIdLoaiCongViec = function (idLoaiCongViec) { return __awaiter(_this, void 0, void 0, function () {
|
|
19170
|
-
var result, idLoaiCongViecs, i;
|
|
19171
|
-
return __generator(this, function (_a) {
|
|
19172
|
-
switch (_a.label) {
|
|
19173
|
-
case 0:
|
|
19174
|
-
if (!!this.dicWorkflowByLoaiCongViec) return [3 /*break*/, 2];
|
|
19175
|
-
return [4 /*yield*/, this.getDatasourceWorkflowCongViec()];
|
|
19176
|
-
case 1:
|
|
19177
|
-
_a.sent();
|
|
19178
|
-
_a.label = 2;
|
|
19179
|
-
case 2:
|
|
19180
|
-
if (!idLoaiCongViec) {
|
|
19181
|
-
return [2 /*return*/, this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot]];
|
|
19182
|
-
}
|
|
19183
|
-
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViec];
|
|
19184
|
-
if (result)
|
|
19185
|
-
return [2 /*return*/, result];
|
|
19186
|
-
return [4 /*yield*/, this.getIdLoaiCongViecs(idLoaiCongViec)];
|
|
19187
|
-
case 3:
|
|
19188
|
-
idLoaiCongViecs = _a.sent();
|
|
19189
|
-
if (!Array.isArray(idLoaiCongViecs))
|
|
19190
|
-
return [2 /*return*/, null];
|
|
19191
|
-
if (idLoaiCongViecs.length > 1) {
|
|
19192
|
-
for (i = idLoaiCongViecs.length - 2; i >= 0; i--) {
|
|
19193
|
-
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViecs[i]];
|
|
19194
|
-
if (result)
|
|
19195
|
-
return [2 /*return*/, result];
|
|
19196
|
-
}
|
|
19197
|
-
}
|
|
19198
|
-
if (!result) {
|
|
19199
|
-
result = this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot];
|
|
19200
|
-
}
|
|
19201
|
-
return [2 /*return*/, result];
|
|
19202
|
-
}
|
|
19203
|
-
});
|
|
19204
|
-
}); };
|
|
19205
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
19206
|
-
return _this;
|
|
19207
|
-
}
|
|
19208
|
-
DmLoaiCongViecService.prototype.getDatasourceWorkflowCongViec = function () {
|
|
19209
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
19210
|
-
var cauHinhWorkflowService, cauHinhWorkflows, notifierService, workflowCodes, stateMachinesService, workflows;
|
|
19211
|
-
var _this = this;
|
|
19212
|
-
return __generator(this, function (_a) {
|
|
19213
|
-
switch (_a.label) {
|
|
19214
|
-
case 0:
|
|
19215
|
-
if (!this.dicWorkflowByLoaiCongViec) {
|
|
19216
|
-
this.dicWorkflowByLoaiCongViec = {};
|
|
19217
|
-
}
|
|
19218
|
-
cauHinhWorkflowService = this._injector.get(CauHinhWorkflowService);
|
|
19219
|
-
return [4 /*yield*/, cauHinhWorkflowService.getAll([], 'idLoaiCongViec,workflowCodes,workflowCode')];
|
|
19220
|
-
case 1:
|
|
19221
|
-
cauHinhWorkflows = (_a.sent()).data;
|
|
19222
|
-
notifierService = this._injector.get(NotifierService);
|
|
19223
|
-
if (cauHinhWorkflows == null) {
|
|
19224
|
-
notifierService.showWarning('Dịch vụ workflow không phản hồi');
|
|
19225
|
-
return [2 /*return*/, []];
|
|
19226
|
-
}
|
|
19227
|
-
workflowCodes = [];
|
|
19228
|
-
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
19229
|
-
if (itemWorkflowSetting.workflowCodes && !Array.isArray(itemWorkflowSetting.workflowCodes)) {
|
|
19230
|
-
itemWorkflowSetting.workflowCodes = itemWorkflowSetting.workflowCodes.split(',');
|
|
19231
|
-
}
|
|
19232
|
-
else {
|
|
19233
|
-
itemWorkflowSetting.workflowCodes = [];
|
|
19234
|
-
}
|
|
19235
|
-
itemWorkflowSetting.workflowCodes.forEach(function (workflowCode) {
|
|
19236
|
-
if (workflowCodes.indexOf(workflowCode) == -1) {
|
|
19237
|
-
workflowCodes.push(workflowCode);
|
|
19238
|
-
}
|
|
19239
|
-
});
|
|
19240
|
-
});
|
|
19241
|
-
stateMachinesService = this._injector.get(StateMachinesService);
|
|
19242
|
-
return [4 /*yield*/, stateMachinesService.getDataDropdownByFilter([
|
|
19243
|
-
this.newFilter('code', exports.Operator.in, workflowCodes)
|
|
19244
|
-
], new DropdownOptions({
|
|
19245
|
-
valueField: 'code',
|
|
19246
|
-
displayField: 'title',
|
|
19247
|
-
fieldPlus: 'data'
|
|
19248
|
-
}))];
|
|
19249
|
-
case 2:
|
|
19250
|
-
workflows = (_a.sent());
|
|
19251
|
-
workflows.forEach(function (item) {
|
|
19252
|
-
item.data = JSON.parse(item.data);
|
|
19253
|
-
var stateMachineData = item.data;
|
|
19254
|
-
stateMachineData.actions = {};
|
|
19255
|
-
stateMachineData.machines.forEach(function (machine) {
|
|
19256
|
-
stateMachineData.actions[machine.code] = [];
|
|
19257
|
-
stateMachineData.connections.forEach(function (conn) {
|
|
19258
|
-
if (conn.source == machine.id) {
|
|
19259
|
-
stateMachineData.actions[machine.code].push(conn);
|
|
19260
|
-
}
|
|
19261
|
-
});
|
|
19262
|
-
});
|
|
19263
|
-
});
|
|
19264
|
-
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
19265
|
-
itemWorkflowSetting.workflows = workflows.filter(function (q) { return itemWorkflowSetting.workflowCodes.indexOf(q.code) > -1; });
|
|
19266
|
-
if (!itemWorkflowSetting.idLoaiCongViec) {
|
|
19267
|
-
_this.dicWorkflowByLoaiCongViec[_this.keyIdLoaiCongViecRoot] = itemWorkflowSetting;
|
|
19268
|
-
}
|
|
19269
|
-
else {
|
|
19270
|
-
_this.dicWorkflowByLoaiCongViec[itemWorkflowSetting.idLoaiCongViec] = itemWorkflowSetting;
|
|
19271
|
-
}
|
|
19272
|
-
});
|
|
19273
|
-
return [2 /*return*/, workflows];
|
|
19274
|
-
}
|
|
19275
|
-
});
|
|
19276
|
-
});
|
|
19277
|
-
};
|
|
19278
|
-
DmLoaiCongViecService.prototype.getIdLoaiCongViecs = function (idLoaiCongViec) {
|
|
19279
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
19280
|
-
var notifierService, itemLoaiCongViec, idLoaiCongViecs;
|
|
19281
|
-
return __generator(this, function (_a) {
|
|
19282
|
-
switch (_a.label) {
|
|
19283
|
-
case 0:
|
|
19284
|
-
notifierService = this._injector.get(NotifierService);
|
|
19285
|
-
return [4 /*yield*/, this.getItemLoaiCongViec(idLoaiCongViec)];
|
|
19286
|
-
case 1:
|
|
19287
|
-
itemLoaiCongViec = _a.sent();
|
|
19288
|
-
if (itemLoaiCongViec == null) {
|
|
19289
|
-
notifierService.showWarning('Loại công việc không tồn tại');
|
|
19290
|
-
return [2 /*return*/, null];
|
|
19291
|
-
}
|
|
19292
|
-
idLoaiCongViecs = itemLoaiCongViec.idDuongDan.split(';').filter(function (q) { return !!q; });
|
|
19293
|
-
return [2 /*return*/, idLoaiCongViecs];
|
|
19294
|
-
}
|
|
19295
|
-
});
|
|
19296
|
-
});
|
|
19297
|
-
};
|
|
19298
|
-
DmLoaiCongViecService.prototype.getItemLoaiCongViec = function (idLoaiCongViec) {
|
|
19299
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
19300
|
-
var _a, _b;
|
|
19301
|
-
return __generator(this, function (_c) {
|
|
19302
|
-
switch (_c.label) {
|
|
19303
|
-
case 0:
|
|
19304
|
-
if (!!this.dicLoaiCongViec[idLoaiCongViec]) return [3 /*break*/, 2];
|
|
19305
|
-
_a = this.dicLoaiCongViec;
|
|
19306
|
-
_b = idLoaiCongViec;
|
|
19307
|
-
return [4 /*yield*/, this.getDetail(idLoaiCongViec)];
|
|
19308
|
-
case 1:
|
|
19309
|
-
_a[_b] = (_c.sent()).data;
|
|
19310
|
-
_c.label = 2;
|
|
19311
|
-
case 2: return [2 /*return*/, this.dicLoaiCongViec[idLoaiCongViec]];
|
|
19312
|
-
}
|
|
19313
|
-
});
|
|
19314
|
-
});
|
|
19315
|
-
};
|
|
19316
|
-
return DmLoaiCongViecService;
|
|
19317
|
-
}(BaseService));
|
|
19318
|
-
DmLoaiCongViecService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DmLoaiCongViecService_Factory() { return new DmLoaiCongViecService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService)); }, token: DmLoaiCongViecService, providedIn: "root" });
|
|
19319
|
-
DmLoaiCongViecService.decorators = [
|
|
19320
|
-
{ type: i0.Injectable, args: [{
|
|
19321
|
-
providedIn: 'root'
|
|
19322
|
-
},] }
|
|
19323
|
-
];
|
|
19324
|
-
DmLoaiCongViecService.ctorParameters = function () { return [
|
|
19325
|
-
{ type: i1$1.HttpClient },
|
|
19326
|
-
{ type: i0.Injector },
|
|
19327
|
-
{ type: ModuleConfigService }
|
|
19328
|
-
]; };
|
|
19329
|
-
|
|
19330
|
-
var CongViecService = /** @class */ (function (_super) {
|
|
19331
|
-
__extends(CongViecService, _super);
|
|
19332
|
-
function CongViecService(http, injector, _moduleConfigService, _dmLoaiCongViecService) {
|
|
19333
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.vanbanEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/vanbanden") || this;
|
|
19334
|
-
_this._dmLoaiCongViecService = _dmLoaiCongViecService;
|
|
19335
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.vanbanEndpoint;
|
|
19336
|
-
_this._moduleConfig = _moduleConfigService.getConfig();
|
|
19337
|
-
return _this;
|
|
19338
|
-
}
|
|
19339
|
-
CongViecService.prototype.adjustSettingWorkflowForCrudList = function (setting) {
|
|
19340
|
-
this.useWorkflow = true;
|
|
19341
|
-
setting.isWorkflowTree = true;
|
|
19342
|
-
setting.baseService = this;
|
|
19343
|
-
setting.displayField = function (item) { return item.ten; };
|
|
19344
|
-
setting.baseService.useWorkflow = true;
|
|
19345
|
-
setting.workflowConfigAdvance = {
|
|
19346
|
-
getWorkflowSetting: this.getWorkflowConfig.bind(this)
|
|
19347
|
-
};
|
|
19348
|
-
};
|
|
19349
|
-
CongViecService.prototype.getWorkflowConfig = function (rowData) {
|
|
19350
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
19351
|
-
return __generator(this, function (_a) {
|
|
19352
|
-
switch (_a.label) {
|
|
19353
|
-
case 0: return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(rowData.idLoaiCongViec)];
|
|
19354
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
19355
|
-
}
|
|
19356
|
-
});
|
|
19357
|
-
});
|
|
19358
|
-
};
|
|
19359
|
-
CongViecService.prototype.countByMenuState = function (data) {
|
|
19360
|
-
return this.defaultPost(this.serviceUri + "/CountByMenuState", data);
|
|
19361
|
-
};
|
|
19362
|
-
CongViecService.prototype.getDicIdByMenuState = function (data, tuNgay, denNgay) {
|
|
19363
|
-
return this.defaultPost(this.serviceUri + "/GetDicIdByMenuState", {
|
|
19364
|
-
lstTrangThai: data,
|
|
19365
|
-
tuNgay: tuNgay,
|
|
19366
|
-
denNgay: denNgay
|
|
19367
|
-
});
|
|
19368
|
-
};
|
|
19369
|
-
CongViecService.prototype.updateBulkIdCha = function (model) {
|
|
19370
|
-
var url = this.serviceUri + "/UpdateBulkIdCha";
|
|
19371
|
-
return this.defaultPost(url, model);
|
|
19372
|
-
};
|
|
19373
|
-
CongViecService.prototype.deleteBulkCongViecCon = function (ids) {
|
|
19374
|
-
var url = this.serviceUri + "/DeleteBulkCongViecCon";
|
|
19375
|
-
return this.defaultPost(url, ids);
|
|
19376
|
-
};
|
|
19377
|
-
CongViecService.prototype.getDataDashboardCaNhan = function (inputData) {
|
|
19378
|
-
var url = this.serviceUri + "/GetDataDashboardCaNhan";
|
|
19379
|
-
return this.defaultPost(url, inputData);
|
|
19380
|
-
};
|
|
19381
|
-
CongViecService.prototype.getDataDashboardByDonVi = function (inputData) {
|
|
19382
|
-
var url = this.serviceUri + "/GetDataDashboardByDonVi";
|
|
19383
|
-
return this.defaultPost(url, inputData);
|
|
19384
|
-
};
|
|
19385
|
-
CongViecService.prototype.getListTasksDashboard = function (dataFilter) {
|
|
19386
|
-
var url = this.serviceUri + "/getListTasksDashboard";
|
|
19387
|
-
return this.defaultPost(url, dataFilter);
|
|
19388
|
-
};
|
|
19389
|
-
return CongViecService;
|
|
19390
|
-
}(BaseService));
|
|
19391
|
-
CongViecService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function CongViecService_Factory() { return new CongViecService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService), i0__namespace.ɵɵinject(DmLoaiCongViecService)); }, token: CongViecService, providedIn: "root" });
|
|
19392
|
-
CongViecService.decorators = [
|
|
19393
|
-
{ type: i0.Injectable, args: [{
|
|
19394
|
-
providedIn: 'root'
|
|
19395
|
-
},] }
|
|
19396
|
-
];
|
|
19397
|
-
CongViecService.ctorParameters = function () { return [
|
|
19398
|
-
{ type: i1$1.HttpClient },
|
|
19399
|
-
{ type: i0.Injector },
|
|
19400
|
-
{ type: ModuleConfigService },
|
|
19401
|
-
{ type: DmLoaiCongViecService }
|
|
19402
|
-
]; };
|
|
19403
|
-
|
|
19404
19146
|
var SearchInfo = /** @class */ (function () {
|
|
19405
19147
|
function SearchInfo(init) {
|
|
19406
19148
|
this.fieldSearchText = [];
|
|
@@ -21213,6 +20955,307 @@
|
|
|
21213
20955
|
{ type: CrudService }
|
|
21214
20956
|
]; };
|
|
21215
20957
|
|
|
20958
|
+
var StateMachinesService = /** @class */ (function (_super) {
|
|
20959
|
+
__extends(StateMachinesService, _super);
|
|
20960
|
+
function StateMachinesService(http, injector, _moduleConfigService) {
|
|
20961
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/StateMachines") || this;
|
|
20962
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
20963
|
+
_this.entityName = 'StateMachines';
|
|
20964
|
+
_this.serviceCode = 'workflow';
|
|
20965
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint;
|
|
20966
|
+
return _this;
|
|
20967
|
+
}
|
|
20968
|
+
StateMachinesService.prototype.changeState = function (itemWorkflowHistory) {
|
|
20969
|
+
return this.defaultPost(this.serviceUri + "/ChangeState", itemWorkflowHistory);
|
|
20970
|
+
};
|
|
20971
|
+
StateMachinesService.prototype.rollback = function (rowData) {
|
|
20972
|
+
return this.defaultPost(this.serviceUri + "/Rollback/" + rowData.__workflowCode + "/" + rowData.id, {});
|
|
20973
|
+
};
|
|
20974
|
+
StateMachinesService.prototype.getUserInProcessForm = function (workflowCode, stateCode, actionCode, itemId) {
|
|
20975
|
+
return this.defaultPost(this.serviceUri + "/GetUserInProcessForm/" + workflowCode + "/" + stateCode + "/" + actionCode + "/" + itemId, {});
|
|
20976
|
+
};
|
|
20977
|
+
return StateMachinesService;
|
|
20978
|
+
}(BaseService));
|
|
20979
|
+
StateMachinesService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function StateMachinesService_Factory() { return new StateMachinesService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService)); }, token: StateMachinesService, providedIn: "root" });
|
|
20980
|
+
StateMachinesService.decorators = [
|
|
20981
|
+
{ type: i0.Injectable, args: [{
|
|
20982
|
+
providedIn: 'root'
|
|
20983
|
+
},] }
|
|
20984
|
+
];
|
|
20985
|
+
StateMachinesService.ctorParameters = function () { return [
|
|
20986
|
+
{ type: i1$1.HttpClient },
|
|
20987
|
+
{ type: i0.Injector },
|
|
20988
|
+
{ type: ModuleConfigService }
|
|
20989
|
+
]; };
|
|
20990
|
+
|
|
20991
|
+
var CauHinhWorkflowService = /** @class */ (function (_super) {
|
|
20992
|
+
__extends(CauHinhWorkflowService, _super);
|
|
20993
|
+
function CauHinhWorkflowService(http, injector, _moduleConfigService) {
|
|
20994
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CauHinhWorkflow") || this;
|
|
20995
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
20996
|
+
_this.serviceCode = 'congviec';
|
|
20997
|
+
_this.entityName = 'CauHinhWorkflow';
|
|
20998
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
20999
|
+
return _this;
|
|
21000
|
+
}
|
|
21001
|
+
return CauHinhWorkflowService;
|
|
21002
|
+
}(BaseService));
|
|
21003
|
+
CauHinhWorkflowService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function CauHinhWorkflowService_Factory() { return new CauHinhWorkflowService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService)); }, token: CauHinhWorkflowService, providedIn: "root" });
|
|
21004
|
+
CauHinhWorkflowService.decorators = [
|
|
21005
|
+
{ type: i0.Injectable, args: [{
|
|
21006
|
+
providedIn: 'root'
|
|
21007
|
+
},] }
|
|
21008
|
+
];
|
|
21009
|
+
CauHinhWorkflowService.ctorParameters = function () { return [
|
|
21010
|
+
{ type: i1$1.HttpClient },
|
|
21011
|
+
{ type: i0.Injector },
|
|
21012
|
+
{ type: ModuleConfigService }
|
|
21013
|
+
]; };
|
|
21014
|
+
|
|
21015
|
+
var DmLoaiCongViecService = /** @class */ (function (_super) {
|
|
21016
|
+
__extends(DmLoaiCongViecService, _super);
|
|
21017
|
+
function DmLoaiCongViecService(http, injector, _moduleConfigService) {
|
|
21018
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/DM_LoaiCongViec") || this;
|
|
21019
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
21020
|
+
_this.serviceCode = 'congviec';
|
|
21021
|
+
_this.entityName = 'DM_LoaiCongViec';
|
|
21022
|
+
_this.dicLoaiCongViec = {};
|
|
21023
|
+
_this.keyIdLoaiCongViecRoot = 'root';
|
|
21024
|
+
_this.getWorkflowSettingByIdLoaiCongViec = function (idLoaiCongViec) { return __awaiter(_this, void 0, void 0, function () {
|
|
21025
|
+
var result, idLoaiCongViecs, i;
|
|
21026
|
+
return __generator(this, function (_a) {
|
|
21027
|
+
switch (_a.label) {
|
|
21028
|
+
case 0:
|
|
21029
|
+
if (!!this.dicWorkflowByLoaiCongViec) return [3 /*break*/, 2];
|
|
21030
|
+
return [4 /*yield*/, this.getDatasourceWorkflowCongViec()];
|
|
21031
|
+
case 1:
|
|
21032
|
+
_a.sent();
|
|
21033
|
+
_a.label = 2;
|
|
21034
|
+
case 2:
|
|
21035
|
+
if (!idLoaiCongViec) {
|
|
21036
|
+
return [2 /*return*/, this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot]];
|
|
21037
|
+
}
|
|
21038
|
+
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViec];
|
|
21039
|
+
if (result)
|
|
21040
|
+
return [2 /*return*/, result];
|
|
21041
|
+
return [4 /*yield*/, this.getIdLoaiCongViecs(idLoaiCongViec)];
|
|
21042
|
+
case 3:
|
|
21043
|
+
idLoaiCongViecs = _a.sent();
|
|
21044
|
+
if (!Array.isArray(idLoaiCongViecs))
|
|
21045
|
+
return [2 /*return*/, null];
|
|
21046
|
+
if (idLoaiCongViecs.length > 1) {
|
|
21047
|
+
for (i = idLoaiCongViecs.length - 2; i >= 0; i--) {
|
|
21048
|
+
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViecs[i]];
|
|
21049
|
+
if (result)
|
|
21050
|
+
return [2 /*return*/, result];
|
|
21051
|
+
}
|
|
21052
|
+
}
|
|
21053
|
+
if (!result) {
|
|
21054
|
+
result = this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot];
|
|
21055
|
+
}
|
|
21056
|
+
return [2 /*return*/, result];
|
|
21057
|
+
}
|
|
21058
|
+
});
|
|
21059
|
+
}); };
|
|
21060
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
21061
|
+
return _this;
|
|
21062
|
+
}
|
|
21063
|
+
DmLoaiCongViecService.prototype.getDatasourceWorkflowCongViec = function () {
|
|
21064
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
21065
|
+
var cauHinhWorkflowService, cauHinhWorkflows, notifierService, workflowCodes, stateMachinesService, workflows;
|
|
21066
|
+
var _this = this;
|
|
21067
|
+
return __generator(this, function (_a) {
|
|
21068
|
+
switch (_a.label) {
|
|
21069
|
+
case 0:
|
|
21070
|
+
if (!this.dicWorkflowByLoaiCongViec) {
|
|
21071
|
+
this.dicWorkflowByLoaiCongViec = {};
|
|
21072
|
+
}
|
|
21073
|
+
cauHinhWorkflowService = this._injector.get(CauHinhWorkflowService);
|
|
21074
|
+
return [4 /*yield*/, cauHinhWorkflowService.getAll([], 'idLoaiCongViec,workflowCodes,workflowCode')];
|
|
21075
|
+
case 1:
|
|
21076
|
+
cauHinhWorkflows = (_a.sent()).data;
|
|
21077
|
+
notifierService = this._injector.get(NotifierService);
|
|
21078
|
+
if (cauHinhWorkflows == null) {
|
|
21079
|
+
notifierService.showWarning('Dịch vụ workflow không phản hồi');
|
|
21080
|
+
return [2 /*return*/, []];
|
|
21081
|
+
}
|
|
21082
|
+
workflowCodes = [];
|
|
21083
|
+
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
21084
|
+
if (itemWorkflowSetting.workflowCodes && !Array.isArray(itemWorkflowSetting.workflowCodes)) {
|
|
21085
|
+
itemWorkflowSetting.workflowCodes = itemWorkflowSetting.workflowCodes.split(',');
|
|
21086
|
+
}
|
|
21087
|
+
else {
|
|
21088
|
+
itemWorkflowSetting.workflowCodes = [];
|
|
21089
|
+
}
|
|
21090
|
+
itemWorkflowSetting.workflowCodes.forEach(function (workflowCode) {
|
|
21091
|
+
if (workflowCodes.indexOf(workflowCode) == -1) {
|
|
21092
|
+
workflowCodes.push(workflowCode);
|
|
21093
|
+
}
|
|
21094
|
+
});
|
|
21095
|
+
});
|
|
21096
|
+
stateMachinesService = this._injector.get(StateMachinesService);
|
|
21097
|
+
return [4 /*yield*/, stateMachinesService.getDataDropdownByFilter([
|
|
21098
|
+
this.newFilter('code', exports.Operator.in, workflowCodes)
|
|
21099
|
+
], new DropdownOptions({
|
|
21100
|
+
valueField: 'code',
|
|
21101
|
+
displayField: 'title',
|
|
21102
|
+
fieldPlus: 'data'
|
|
21103
|
+
}))];
|
|
21104
|
+
case 2:
|
|
21105
|
+
workflows = (_a.sent());
|
|
21106
|
+
workflows.forEach(function (item) {
|
|
21107
|
+
item.data = JSON.parse(item.data);
|
|
21108
|
+
var stateMachineData = item.data;
|
|
21109
|
+
stateMachineData.actions = {};
|
|
21110
|
+
stateMachineData.machines.forEach(function (machine) {
|
|
21111
|
+
stateMachineData.actions[machine.code] = [];
|
|
21112
|
+
stateMachineData.connections.forEach(function (conn) {
|
|
21113
|
+
if (conn.source == machine.id) {
|
|
21114
|
+
stateMachineData.actions[machine.code].push(conn);
|
|
21115
|
+
}
|
|
21116
|
+
});
|
|
21117
|
+
});
|
|
21118
|
+
});
|
|
21119
|
+
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
21120
|
+
itemWorkflowSetting.workflows = workflows.filter(function (q) { return itemWorkflowSetting.workflowCodes.indexOf(q.code) > -1; });
|
|
21121
|
+
if (!itemWorkflowSetting.idLoaiCongViec) {
|
|
21122
|
+
_this.dicWorkflowByLoaiCongViec[_this.keyIdLoaiCongViecRoot] = itemWorkflowSetting;
|
|
21123
|
+
}
|
|
21124
|
+
else {
|
|
21125
|
+
_this.dicWorkflowByLoaiCongViec[itemWorkflowSetting.idLoaiCongViec] = itemWorkflowSetting;
|
|
21126
|
+
}
|
|
21127
|
+
});
|
|
21128
|
+
return [2 /*return*/, workflows];
|
|
21129
|
+
}
|
|
21130
|
+
});
|
|
21131
|
+
});
|
|
21132
|
+
};
|
|
21133
|
+
DmLoaiCongViecService.prototype.getIdLoaiCongViecs = function (idLoaiCongViec) {
|
|
21134
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
21135
|
+
var notifierService, itemLoaiCongViec, idLoaiCongViecs;
|
|
21136
|
+
return __generator(this, function (_a) {
|
|
21137
|
+
switch (_a.label) {
|
|
21138
|
+
case 0:
|
|
21139
|
+
notifierService = this._injector.get(NotifierService);
|
|
21140
|
+
return [4 /*yield*/, this.getItemLoaiCongViec(idLoaiCongViec)];
|
|
21141
|
+
case 1:
|
|
21142
|
+
itemLoaiCongViec = _a.sent();
|
|
21143
|
+
if (itemLoaiCongViec == null) {
|
|
21144
|
+
notifierService.showWarning('Loại công việc không tồn tại');
|
|
21145
|
+
return [2 /*return*/, null];
|
|
21146
|
+
}
|
|
21147
|
+
idLoaiCongViecs = itemLoaiCongViec.idDuongDan.split(';').filter(function (q) { return !!q; });
|
|
21148
|
+
return [2 /*return*/, idLoaiCongViecs];
|
|
21149
|
+
}
|
|
21150
|
+
});
|
|
21151
|
+
});
|
|
21152
|
+
};
|
|
21153
|
+
DmLoaiCongViecService.prototype.getItemLoaiCongViec = function (idLoaiCongViec) {
|
|
21154
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
21155
|
+
var _a, _b;
|
|
21156
|
+
return __generator(this, function (_c) {
|
|
21157
|
+
switch (_c.label) {
|
|
21158
|
+
case 0:
|
|
21159
|
+
if (!!this.dicLoaiCongViec[idLoaiCongViec]) return [3 /*break*/, 2];
|
|
21160
|
+
_a = this.dicLoaiCongViec;
|
|
21161
|
+
_b = idLoaiCongViec;
|
|
21162
|
+
return [4 /*yield*/, this.getDetail(idLoaiCongViec)];
|
|
21163
|
+
case 1:
|
|
21164
|
+
_a[_b] = (_c.sent()).data;
|
|
21165
|
+
_c.label = 2;
|
|
21166
|
+
case 2: return [2 /*return*/, this.dicLoaiCongViec[idLoaiCongViec]];
|
|
21167
|
+
}
|
|
21168
|
+
});
|
|
21169
|
+
});
|
|
21170
|
+
};
|
|
21171
|
+
return DmLoaiCongViecService;
|
|
21172
|
+
}(BaseService));
|
|
21173
|
+
DmLoaiCongViecService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function DmLoaiCongViecService_Factory() { return new DmLoaiCongViecService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService)); }, token: DmLoaiCongViecService, providedIn: "root" });
|
|
21174
|
+
DmLoaiCongViecService.decorators = [
|
|
21175
|
+
{ type: i0.Injectable, args: [{
|
|
21176
|
+
providedIn: 'root'
|
|
21177
|
+
},] }
|
|
21178
|
+
];
|
|
21179
|
+
DmLoaiCongViecService.ctorParameters = function () { return [
|
|
21180
|
+
{ type: i1$1.HttpClient },
|
|
21181
|
+
{ type: i0.Injector },
|
|
21182
|
+
{ type: ModuleConfigService }
|
|
21183
|
+
]; };
|
|
21184
|
+
|
|
21185
|
+
var CongViecService = /** @class */ (function (_super) {
|
|
21186
|
+
__extends(CongViecService, _super);
|
|
21187
|
+
function CongViecService(http, injector, _moduleConfigService, _dmLoaiCongViecService) {
|
|
21188
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.vanbanEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/vanbanden") || this;
|
|
21189
|
+
_this._dmLoaiCongViecService = _dmLoaiCongViecService;
|
|
21190
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.vanbanEndpoint;
|
|
21191
|
+
_this._moduleConfig = _moduleConfigService.getConfig();
|
|
21192
|
+
return _this;
|
|
21193
|
+
}
|
|
21194
|
+
CongViecService.prototype.adjustSettingWorkflowForCrudList = function (setting) {
|
|
21195
|
+
this.useWorkflow = true;
|
|
21196
|
+
setting.isWorkflowTree = true;
|
|
21197
|
+
setting.baseService = this;
|
|
21198
|
+
setting.displayField = function (item) { return item.ten; };
|
|
21199
|
+
setting.baseService.useWorkflow = true;
|
|
21200
|
+
setting.workflowConfigAdvance = {
|
|
21201
|
+
getWorkflowSetting: this.getWorkflowConfig.bind(this)
|
|
21202
|
+
};
|
|
21203
|
+
};
|
|
21204
|
+
CongViecService.prototype.getWorkflowConfig = function (rowData) {
|
|
21205
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
21206
|
+
return __generator(this, function (_a) {
|
|
21207
|
+
switch (_a.label) {
|
|
21208
|
+
case 0: return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(rowData.idLoaiCongViec)];
|
|
21209
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
21210
|
+
}
|
|
21211
|
+
});
|
|
21212
|
+
});
|
|
21213
|
+
};
|
|
21214
|
+
CongViecService.prototype.countByMenuState = function (data) {
|
|
21215
|
+
return this.defaultPost(this.serviceUri + "/CountByMenuState", data);
|
|
21216
|
+
};
|
|
21217
|
+
CongViecService.prototype.getDicIdByMenuState = function (data, tuNgay, denNgay) {
|
|
21218
|
+
return this.defaultPost(this.serviceUri + "/GetDicIdByMenuState", {
|
|
21219
|
+
lstTrangThai: data,
|
|
21220
|
+
tuNgay: tuNgay,
|
|
21221
|
+
denNgay: denNgay
|
|
21222
|
+
});
|
|
21223
|
+
};
|
|
21224
|
+
CongViecService.prototype.updateBulkIdCha = function (model) {
|
|
21225
|
+
var url = this.serviceUri + "/UpdateBulkIdCha";
|
|
21226
|
+
return this.defaultPost(url, model);
|
|
21227
|
+
};
|
|
21228
|
+
CongViecService.prototype.deleteBulkCongViecCon = function (ids) {
|
|
21229
|
+
var url = this.serviceUri + "/DeleteBulkCongViecCon";
|
|
21230
|
+
return this.defaultPost(url, ids);
|
|
21231
|
+
};
|
|
21232
|
+
CongViecService.prototype.getDataDashboardCaNhan = function (inputData) {
|
|
21233
|
+
var url = this.serviceUri + "/GetDataDashboardCaNhan";
|
|
21234
|
+
return this.defaultPost(url, inputData);
|
|
21235
|
+
};
|
|
21236
|
+
CongViecService.prototype.getDataDashboardByDonVi = function (inputData) {
|
|
21237
|
+
var url = this.serviceUri + "/GetDataDashboardByDonVi";
|
|
21238
|
+
return this.defaultPost(url, inputData);
|
|
21239
|
+
};
|
|
21240
|
+
CongViecService.prototype.getListTasksDashboard = function (dataFilter) {
|
|
21241
|
+
var url = this.serviceUri + "/getListTasksDashboard";
|
|
21242
|
+
return this.defaultPost(url, dataFilter);
|
|
21243
|
+
};
|
|
21244
|
+
return CongViecService;
|
|
21245
|
+
}(BaseService));
|
|
21246
|
+
CongViecService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function CongViecService_Factory() { return new CongViecService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService), i0__namespace.ɵɵinject(DmLoaiCongViecService)); }, token: CongViecService, providedIn: "root" });
|
|
21247
|
+
CongViecService.decorators = [
|
|
21248
|
+
{ type: i0.Injectable, args: [{
|
|
21249
|
+
providedIn: 'root'
|
|
21250
|
+
},] }
|
|
21251
|
+
];
|
|
21252
|
+
CongViecService.ctorParameters = function () { return [
|
|
21253
|
+
{ type: i1$1.HttpClient },
|
|
21254
|
+
{ type: i0.Injector },
|
|
21255
|
+
{ type: ModuleConfigService },
|
|
21256
|
+
{ type: DmLoaiCongViecService }
|
|
21257
|
+
]; };
|
|
21258
|
+
|
|
21216
21259
|
var EntityWorkflowHistoryService = /** @class */ (function (_super) {
|
|
21217
21260
|
__extends(EntityWorkflowHistoryService, _super);
|
|
21218
21261
|
function EntityWorkflowHistoryService(http, injector, _moduleConfigService) {
|
|
@@ -21490,6 +21533,30 @@
|
|
|
21490
21533
|
{ type: ModuleConfigService }
|
|
21491
21534
|
]; };
|
|
21492
21535
|
|
|
21536
|
+
var BasePermissionService = /** @class */ (function (_super) {
|
|
21537
|
+
__extends(BasePermissionService, _super);
|
|
21538
|
+
function BasePermissionService(http, injector, _moduleConfigService) {
|
|
21539
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.authorizationEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/BasePermission") || this;
|
|
21540
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
21541
|
+
_this.entityName = 'BasePermission';
|
|
21542
|
+
_this.serviceCode = 'Authorization';
|
|
21543
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.authorizationEndpoint;
|
|
21544
|
+
return _this;
|
|
21545
|
+
}
|
|
21546
|
+
return BasePermissionService;
|
|
21547
|
+
}(BaseService));
|
|
21548
|
+
BasePermissionService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function BasePermissionService_Factory() { return new BasePermissionService(i0__namespace.ɵɵinject(i1__namespace$1.HttpClient), i0__namespace.ɵɵinject(i0__namespace.INJECTOR), i0__namespace.ɵɵinject(ModuleConfigService)); }, token: BasePermissionService, providedIn: "root" });
|
|
21549
|
+
BasePermissionService.decorators = [
|
|
21550
|
+
{ type: i0.Injectable, args: [{
|
|
21551
|
+
providedIn: 'root'
|
|
21552
|
+
},] }
|
|
21553
|
+
];
|
|
21554
|
+
BasePermissionService.ctorParameters = function () { return [
|
|
21555
|
+
{ type: i1$1.HttpClient },
|
|
21556
|
+
{ type: i0.Injector },
|
|
21557
|
+
{ type: ModuleConfigService }
|
|
21558
|
+
]; };
|
|
21559
|
+
|
|
21493
21560
|
var ListComponentBase = /** @class */ (function (_super) {
|
|
21494
21561
|
__extends(ListComponentBase, _super);
|
|
21495
21562
|
function ListComponentBase(_injector, _isTreeTable) {
|
|
@@ -21581,8 +21648,8 @@
|
|
|
21581
21648
|
_this.showingActionWorkflow = false;
|
|
21582
21649
|
_this.buttonContexts = [];
|
|
21583
21650
|
_this.authorizePaths = {};
|
|
21584
|
-
_this.buttonApplyAuthorize = {};
|
|
21585
21651
|
_this.commonConst = ComCtxConstants.COMMON;
|
|
21652
|
+
_this.buttonApplyAuthorize = {};
|
|
21586
21653
|
_this._defaultTableClass = 'new-table scr-table crud-list-table';
|
|
21587
21654
|
_this._tableClass = '';
|
|
21588
21655
|
_this._showSettingsRowColor = false;
|
|
@@ -21613,11 +21680,19 @@
|
|
|
21613
21680
|
_this.filter_column = [];
|
|
21614
21681
|
_this.dataAdvance = {};
|
|
21615
21682
|
_this.searchModel = {};
|
|
21683
|
+
_this.authorizeButtonKey = '';
|
|
21684
|
+
_this.lstButtonPermission = [];
|
|
21685
|
+
_this.lstButtonTemplate = [];
|
|
21686
|
+
_this.isBtnReady = false;
|
|
21687
|
+
_this.isSuperUser = false;
|
|
21616
21688
|
_this.showFormWorkflow = false;
|
|
21617
21689
|
_this.headerWorkflow = '';
|
|
21690
|
+
_this.lstBtnAuthorizeMenu = [];
|
|
21618
21691
|
_this.popupSizeWorkflow = new PopupSize({ width: 950, height: 540 });
|
|
21619
21692
|
_this.showHistoryWorkflow = false;
|
|
21693
|
+
_this.showAllButtons = false;
|
|
21620
21694
|
_this.hiddenBtnFunction = false;
|
|
21695
|
+
_this.lstButtonAction = [];
|
|
21621
21696
|
// Biến để kiểm tra lần click đầu tiên của user vào dòng trên grid
|
|
21622
21697
|
// Sử dụng để fix bug set selected row từ form cha, nhưng vào form con ấn sang row khác nó k bỏ selected row đã set từ bên ngoài
|
|
21623
21698
|
_this.firstRowClick = true;
|
|
@@ -21651,6 +21726,11 @@
|
|
|
21651
21726
|
_this.detailTaskModel = new DialogModel({
|
|
21652
21727
|
header: 'Chi tiết công việc'
|
|
21653
21728
|
});
|
|
21729
|
+
_this.buttonAuthorizeModel = new DialogModel({
|
|
21730
|
+
header: 'Phân quyền nút chức năng',
|
|
21731
|
+
popupSize: new PopupSize({ width: 1000, height: 700 }),
|
|
21732
|
+
data: { dataSouce: [] }
|
|
21733
|
+
});
|
|
21654
21734
|
_this.shareLinkModel = new DialogModel({
|
|
21655
21735
|
header: 'Chia sẻ quyền',
|
|
21656
21736
|
popupSize: new PopupSize({ width: 650, height: 310 })
|
|
@@ -21660,7 +21740,6 @@
|
|
|
21660
21740
|
});
|
|
21661
21741
|
_this.BUTTON_PHAN_QUYEN = ButtonPermission.BUTTON_PHAN_QUYEN;
|
|
21662
21742
|
_this.BUTTON_CAU_HINH_QUY_TRINH = ButtonPermission.BUTTON_CAU_HINH_QUY_TRINH;
|
|
21663
|
-
_this.lstButtonPermission = [];
|
|
21664
21743
|
_this.buttonPermissionMap = new Map();
|
|
21665
21744
|
_this.sourceIcon = {};
|
|
21666
21745
|
_this.stopCalculatingFunctionColumnWidth = false;
|
|
@@ -21906,6 +21985,7 @@
|
|
|
21906
21985
|
_this._templateInstanceService = _this._injector.get(TemplateInstanceService);
|
|
21907
21986
|
_this._printService = _this._injector.get(PrintService);
|
|
21908
21987
|
_this._federationService = _this._injector.get(FederationService);
|
|
21988
|
+
_this._basePermissionService = _this._injector.get(BasePermissionService);
|
|
21909
21989
|
_this.handleCheckAll = _this.handleCheckAll.bind(_this);
|
|
21910
21990
|
_this.handleCheckAll_Group = _this.handleCheckAll_Group.bind(_this);
|
|
21911
21991
|
_this.environment = _this._moduleConfigService.getConfig().environment;
|
|
@@ -21981,7 +22061,7 @@
|
|
|
21981
22061
|
configurable: true
|
|
21982
22062
|
});
|
|
21983
22063
|
ListComponentBase.prototype.ngOnInit = function () {
|
|
21984
|
-
var e_1,
|
|
22064
|
+
var e_1, _f;
|
|
21985
22065
|
var _this = this;
|
|
21986
22066
|
this.subscribe(ComCtxConstants.COMMON.ENTITY_METADATA_RELOADED, function (service) {
|
|
21987
22067
|
_this.entityMetadataService = service;
|
|
@@ -22004,7 +22084,7 @@
|
|
|
22004
22084
|
}
|
|
22005
22085
|
if (!this.setting.hiddenTrinhKy || !this.setting.disableShare) {
|
|
22006
22086
|
if (!this.menuButtons) {
|
|
22007
|
-
this.menuButtons = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (
|
|
22087
|
+
this.menuButtons = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_f) {
|
|
22008
22088
|
return [2 /*return*/, []];
|
|
22009
22089
|
}); }); };
|
|
22010
22090
|
}
|
|
@@ -22031,11 +22111,12 @@
|
|
|
22031
22111
|
var temp = userService.getCurrentUser();
|
|
22032
22112
|
if (temp != null) {
|
|
22033
22113
|
this.currentUser = new TnUser(userService.getCurrentUser());
|
|
22114
|
+
this.isSuperUser = this.currentUser.issuperuser.toLowerCase() === 'true';
|
|
22034
22115
|
}
|
|
22035
22116
|
if (this.currentUser == null) {
|
|
22036
22117
|
try {
|
|
22037
|
-
for (var
|
|
22038
|
-
var buttonPermissionCode =
|
|
22118
|
+
for (var _g = __values(this.lstButtonPermission), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
22119
|
+
var buttonPermissionCode = _h.value;
|
|
22039
22120
|
var buttonPermission = (this.setting.baseService.serviceCode + "/" + this.setting.baseService.entityName + "/" + buttonPermissionCode).toUpperCase();
|
|
22040
22121
|
this.buttonPermissionMap.set(buttonPermission, false);
|
|
22041
22122
|
}
|
|
@@ -22043,7 +22124,7 @@
|
|
|
22043
22124
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
22044
22125
|
finally {
|
|
22045
22126
|
try {
|
|
22046
|
-
if (
|
|
22127
|
+
if (_h && !_h.done && (_f = _g.return)) _f.call(_g);
|
|
22047
22128
|
}
|
|
22048
22129
|
finally { if (e_1) throw e_1.error; }
|
|
22049
22130
|
}
|
|
@@ -22054,13 +22135,13 @@
|
|
|
22054
22135
|
&& (this._moduleConfigService.getConfig().environment.ignoreAdmin === true
|
|
22055
22136
|
|| this.currentUser.isadmin.toLowerCase() !== 'true')) {
|
|
22056
22137
|
this._permissionService.getServicePermission(this.setting.baseService.serviceCode).then(function (result) {
|
|
22057
|
-
var e_2,
|
|
22138
|
+
var e_2, _f;
|
|
22058
22139
|
var _a;
|
|
22059
22140
|
var lstBasePermission = result;
|
|
22060
22141
|
_this.lstButtonPermission = (_a = _this._moduleConfigService.getConfig().environment.buttonPermissions) !== null && _a !== void 0 ? _a : [];
|
|
22061
22142
|
try {
|
|
22062
|
-
for (var
|
|
22063
|
-
var buttonPermissionCode =
|
|
22143
|
+
for (var _g = __values(_this.lstButtonPermission), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
22144
|
+
var buttonPermissionCode = _h.value;
|
|
22064
22145
|
var buttonPermission = (_this.setting.baseService.serviceCode + "/" + _this.setting.baseService.entityName + "/" + buttonPermissionCode).toUpperCase();
|
|
22065
22146
|
_this.buttonPermissionMap.set(buttonPermission, lstBasePermission.includes(buttonPermission));
|
|
22066
22147
|
}
|
|
@@ -22068,7 +22149,7 @@
|
|
|
22068
22149
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
22069
22150
|
finally {
|
|
22070
22151
|
try {
|
|
22071
|
-
if (
|
|
22152
|
+
if (_h && !_h.done && (_f = _g.return)) _f.call(_g);
|
|
22072
22153
|
}
|
|
22073
22154
|
finally { if (e_2) throw e_2.error; }
|
|
22074
22155
|
}
|
|
@@ -22136,7 +22217,7 @@
|
|
|
22136
22217
|
this.buildFilterColumn(this.setting.cols);
|
|
22137
22218
|
};
|
|
22138
22219
|
ListComponentBase.prototype.extendColumns = function (cols, appendCol) {
|
|
22139
|
-
var e_3,
|
|
22220
|
+
var e_3, _f;
|
|
22140
22221
|
var _this = this;
|
|
22141
22222
|
if (appendCol === void 0) { appendCol = true; }
|
|
22142
22223
|
this.setting.fieldNeedGetRef = [];
|
|
@@ -22282,7 +22363,7 @@
|
|
|
22282
22363
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
22283
22364
|
finally {
|
|
22284
22365
|
try {
|
|
22285
|
-
if (cols_1_1 && !cols_1_1.done && (
|
|
22366
|
+
if (cols_1_1 && !cols_1_1.done && (_f = cols_1.return)) _f.call(cols_1);
|
|
22286
22367
|
}
|
|
22287
22368
|
finally { if (e_3) throw e_3.error; }
|
|
22288
22369
|
}
|
|
@@ -22305,7 +22386,7 @@
|
|
|
22305
22386
|
});
|
|
22306
22387
|
};
|
|
22307
22388
|
ListComponentBase.prototype.formatColumns = function (cols) {
|
|
22308
|
-
var e_4,
|
|
22389
|
+
var e_4, _f;
|
|
22309
22390
|
try {
|
|
22310
22391
|
for (var cols_2 = __values(cols), cols_2_1 = cols_2.next(); !cols_2_1.done; cols_2_1 = cols_2.next()) {
|
|
22311
22392
|
var col = cols_2_1.value;
|
|
@@ -22321,13 +22402,13 @@
|
|
|
22321
22402
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
22322
22403
|
finally {
|
|
22323
22404
|
try {
|
|
22324
|
-
if (cols_2_1 && !cols_2_1.done && (
|
|
22405
|
+
if (cols_2_1 && !cols_2_1.done && (_f = cols_2.return)) _f.call(cols_2);
|
|
22325
22406
|
}
|
|
22326
22407
|
finally { if (e_4) throw e_4.error; }
|
|
22327
22408
|
}
|
|
22328
22409
|
};
|
|
22329
22410
|
ListComponentBase.prototype.getColumnSetting = function (colGroup) {
|
|
22330
|
-
var e_5,
|
|
22411
|
+
var e_5, _f;
|
|
22331
22412
|
this.setting.groupColumn = colGroup;
|
|
22332
22413
|
var dataSetting = localStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.COLUMN_SETTING);
|
|
22333
22414
|
if (dataSetting) {
|
|
@@ -22359,7 +22440,7 @@
|
|
|
22359
22440
|
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
22360
22441
|
finally {
|
|
22361
22442
|
try {
|
|
22362
|
-
if (settings_1_1 && !settings_1_1.done && (
|
|
22443
|
+
if (settings_1_1 && !settings_1_1.done && (_f = settings_1.return)) _f.call(settings_1);
|
|
22363
22444
|
}
|
|
22364
22445
|
finally { if (e_5) throw e_5.error; }
|
|
22365
22446
|
}
|
|
@@ -22614,14 +22695,14 @@
|
|
|
22614
22695
|
};
|
|
22615
22696
|
ListComponentBase.prototype.handleSearch = function (data) {
|
|
22616
22697
|
return __awaiter(this, void 0, void 0, function () {
|
|
22617
|
-
return __generator(this, function (
|
|
22618
|
-
switch (
|
|
22698
|
+
return __generator(this, function (_f) {
|
|
22699
|
+
switch (_f.label) {
|
|
22619
22700
|
case 0:
|
|
22620
22701
|
this.filter_commonSearch = data.filters;
|
|
22621
22702
|
this.dataSearchCommon = data.dataForm;
|
|
22622
22703
|
return [4 /*yield*/, this.onSearched.emit(data)];
|
|
22623
22704
|
case 1:
|
|
22624
|
-
|
|
22705
|
+
_f.sent();
|
|
22625
22706
|
this.setting.pageSetting.page = 1;
|
|
22626
22707
|
this.getData();
|
|
22627
22708
|
return [2 /*return*/];
|
|
@@ -22659,17 +22740,17 @@
|
|
|
22659
22740
|
if (isTree === void 0) { isTree = false; }
|
|
22660
22741
|
return __awaiter(this, void 0, void 0, function () {
|
|
22661
22742
|
var rs;
|
|
22662
|
-
return __generator(this, function (
|
|
22663
|
-
switch (
|
|
22743
|
+
return __generator(this, function (_f) {
|
|
22744
|
+
switch (_f.label) {
|
|
22664
22745
|
case 0:
|
|
22665
22746
|
if (!this.setting.showConfirmExport) return [3 /*break*/, 2];
|
|
22666
22747
|
return [4 /*yield*/, this._notifierService.showConfirm('Bạn có chắc chắn muốn xuất bản ghi đã chọn (Và các bản ghi con tương ứng)', 'Xác nhận xuất file')];
|
|
22667
22748
|
case 1:
|
|
22668
|
-
rs =
|
|
22749
|
+
rs = _f.sent();
|
|
22669
22750
|
if (!rs) {
|
|
22670
22751
|
return [2 /*return*/];
|
|
22671
22752
|
}
|
|
22672
|
-
|
|
22753
|
+
_f.label = 2;
|
|
22673
22754
|
case 2:
|
|
22674
22755
|
switch (this.setting.exportItemsMode) {
|
|
22675
22756
|
case exports.ExportItemsMode.FromHtml:
|
|
@@ -22690,17 +22771,17 @@
|
|
|
22690
22771
|
if (isTree === void 0) { isTree = false; }
|
|
22691
22772
|
return __awaiter(this, void 0, void 0, function () {
|
|
22692
22773
|
var rs, header, element, tableEle, headEle, bodyEle, arrHeadEle, arrRowData, strHeadEle, strBodyEle, css, table;
|
|
22693
|
-
return __generator(this, function (
|
|
22694
|
-
switch (
|
|
22774
|
+
return __generator(this, function (_f) {
|
|
22775
|
+
switch (_f.label) {
|
|
22695
22776
|
case 0:
|
|
22696
22777
|
if (!this.setting.showConfirmExport) return [3 /*break*/, 2];
|
|
22697
22778
|
return [4 /*yield*/, this._notifierService.showConfirm('Bạn có chắc chắn muốn in bản ghi đã chọn (Và các bản ghi con tương ứng)', 'Xác nhận in file')];
|
|
22698
22779
|
case 1:
|
|
22699
|
-
rs =
|
|
22780
|
+
rs = _f.sent();
|
|
22700
22781
|
if (!rs) {
|
|
22701
22782
|
return [2 /*return*/];
|
|
22702
22783
|
}
|
|
22703
|
-
|
|
22784
|
+
_f.label = 2;
|
|
22704
22785
|
case 2:
|
|
22705
22786
|
header = 'Danh sách ' + this.setting.objectName;
|
|
22706
22787
|
element = isTree ? this.treeTable.el.nativeElement : this.table.el.nativeElement;
|
|
@@ -22884,25 +22965,25 @@
|
|
|
22884
22965
|
};
|
|
22885
22966
|
ListComponentBase.prototype.showContextMenu = function (evt, rowData) {
|
|
22886
22967
|
return __awaiter(this, void 0, void 0, function () {
|
|
22887
|
-
var
|
|
22888
|
-
var
|
|
22889
|
-
return __generator(this, function (
|
|
22890
|
-
switch (
|
|
22968
|
+
var _f, _g, shareButtons, showWorkflowAttach;
|
|
22969
|
+
var _h;
|
|
22970
|
+
return __generator(this, function (_j) {
|
|
22971
|
+
switch (_j.label) {
|
|
22891
22972
|
case 0:
|
|
22892
22973
|
this.rowDataCurrent = rowData;
|
|
22893
|
-
|
|
22894
|
-
|
|
22974
|
+
_f = this;
|
|
22975
|
+
_g = this.getMenuButtonAuthorized;
|
|
22895
22976
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
22896
|
-
case 1: return [4 /*yield*/,
|
|
22977
|
+
case 1: return [4 /*yield*/, _g.apply(this, [_j.sent()])];
|
|
22897
22978
|
case 2:
|
|
22898
|
-
|
|
22979
|
+
_f.buttonContexts = _j.sent();
|
|
22899
22980
|
if (!this.setting.disableShare) {
|
|
22900
22981
|
shareButtons = [
|
|
22901
22982
|
{ label: 'Chia sẻ', icon: 'pi pi-link', command: this.createShareLink.bind(this) },
|
|
22902
22983
|
{ label: 'Danh sách chia sẻ', icon: 'pi pi-list', command: this.showLinkSharing.bind(this) },
|
|
22903
22984
|
// { label: 'Danh sách nhìn thấy', icon: 'pi pi-list', command: this.showListPermissionByItem.bind(this) }
|
|
22904
22985
|
];
|
|
22905
|
-
(
|
|
22986
|
+
(_h = this.buttonContexts).push.apply(_h, __spreadArray([], __read(shareButtons)));
|
|
22906
22987
|
}
|
|
22907
22988
|
showWorkflowAttach = localStorage.getItem('__showWorkflowAttach');
|
|
22908
22989
|
if (showWorkflowAttach == 'true') {
|
|
@@ -22924,20 +23005,22 @@
|
|
|
22924
23005
|
ListComponentBase.prototype.getMenuButtonAuthorized = function (menuButtons) {
|
|
22925
23006
|
return __awaiter(this, void 0, void 0, function () {
|
|
22926
23007
|
var authorizedButtons, serviceCodeByBase, promises, _loop_3, this_2, menuButtons_1, menuButtons_1_1, item;
|
|
22927
|
-
var e_6,
|
|
22928
|
-
return __generator(this, function (
|
|
22929
|
-
switch (
|
|
23008
|
+
var e_6, _f;
|
|
23009
|
+
return __generator(this, function (_g) {
|
|
23010
|
+
switch (_g.label) {
|
|
22930
23011
|
case 0:
|
|
22931
23012
|
authorizedButtons = [];
|
|
22932
|
-
serviceCodeByBase = this.setting.baseService != null ? this.setting.baseService.serviceCode : '';
|
|
23013
|
+
serviceCodeByBase = this.setting.baseService != null ? this.setting.baseService.serviceCode.toUpperCase() : '';
|
|
22933
23014
|
promises = [];
|
|
22934
23015
|
_loop_3 = function (item) {
|
|
22935
|
-
|
|
23016
|
+
var permission = this_2.lstBtnAuthorizeMenu.find(function (p) { return p.rawText == item.label; });
|
|
23017
|
+
if (!item.authorizationPermission && !permission) {
|
|
22936
23018
|
authorizedButtons.push(item);
|
|
22937
23019
|
return "continue";
|
|
22938
23020
|
}
|
|
22939
23021
|
var serviceCode = item.authorizationServiceCode ? item.authorizationServiceCode : serviceCodeByBase;
|
|
22940
|
-
|
|
23022
|
+
var permissionCode = permission ? permission.permissionCode : item.authorizationPermission;
|
|
23023
|
+
promises.push(this_2._permissionService.isAuthorized(serviceCode, permissionCode, true).then(function (authorized) {
|
|
22941
23024
|
if (authorized !== true) {
|
|
22942
23025
|
return;
|
|
22943
23026
|
}
|
|
@@ -22954,13 +23037,13 @@
|
|
|
22954
23037
|
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
22955
23038
|
finally {
|
|
22956
23039
|
try {
|
|
22957
|
-
if (menuButtons_1_1 && !menuButtons_1_1.done && (
|
|
23040
|
+
if (menuButtons_1_1 && !menuButtons_1_1.done && (_f = menuButtons_1.return)) _f.call(menuButtons_1);
|
|
22958
23041
|
}
|
|
22959
23042
|
finally { if (e_6) throw e_6.error; }
|
|
22960
23043
|
}
|
|
22961
23044
|
return [4 /*yield*/, Promise.all(promises)];
|
|
22962
23045
|
case 1:
|
|
22963
|
-
|
|
23046
|
+
_g.sent();
|
|
22964
23047
|
return [2 /*return*/, authorizedButtons];
|
|
22965
23048
|
}
|
|
22966
23049
|
});
|
|
@@ -23575,10 +23658,10 @@
|
|
|
23575
23658
|
clearTimeout(this.timeout);
|
|
23576
23659
|
};
|
|
23577
23660
|
ListComponentBase.prototype.disableMultipleDelete = function () {
|
|
23578
|
-
var e_7,
|
|
23661
|
+
var e_7, _f;
|
|
23579
23662
|
try {
|
|
23580
|
-
for (var
|
|
23581
|
-
var item =
|
|
23663
|
+
for (var _g = __values(this.model.selectedItems), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
23664
|
+
var item = _h.value;
|
|
23582
23665
|
if (this.disableDelete(item)) {
|
|
23583
23666
|
return true;
|
|
23584
23667
|
}
|
|
@@ -23587,7 +23670,7 @@
|
|
|
23587
23670
|
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
23588
23671
|
finally {
|
|
23589
23672
|
try {
|
|
23590
|
-
if (
|
|
23673
|
+
if (_h && !_h.done && (_f = _g.return)) _f.call(_g);
|
|
23591
23674
|
}
|
|
23592
23675
|
finally { if (e_7) throw e_7.error; }
|
|
23593
23676
|
}
|
|
@@ -23658,11 +23741,11 @@
|
|
|
23658
23741
|
};
|
|
23659
23742
|
ListComponentBase.prototype.processBaseData = function () {
|
|
23660
23743
|
return __awaiter(this, void 0, void 0, function () {
|
|
23661
|
-
return __generator(this, function (
|
|
23662
|
-
switch (
|
|
23744
|
+
return __generator(this, function (_f) {
|
|
23745
|
+
switch (_f.label) {
|
|
23663
23746
|
case 0: return [4 /*yield*/, this.preProcessData(this._rawDataSource)];
|
|
23664
23747
|
case 1:
|
|
23665
|
-
|
|
23748
|
+
_f.sent();
|
|
23666
23749
|
return [2 /*return*/];
|
|
23667
23750
|
}
|
|
23668
23751
|
});
|
|
@@ -23671,11 +23754,11 @@
|
|
|
23671
23754
|
ListComponentBase.prototype.preProcessData = function (dataSource) {
|
|
23672
23755
|
return __awaiter(this, void 0, void 0, function () {
|
|
23673
23756
|
var colHasPipe, _loop_4, this_3, colHasPipe_1, colHasPipe_1_1, col;
|
|
23674
|
-
var e_8,
|
|
23675
|
-
return __generator(this, function (
|
|
23757
|
+
var e_8, _f;
|
|
23758
|
+
return __generator(this, function (_g) {
|
|
23676
23759
|
colHasPipe = this.setting.cols.filter(function (x) { return x.pipe; });
|
|
23677
23760
|
_loop_4 = function (col) {
|
|
23678
|
-
var e_9,
|
|
23761
|
+
var e_9, _h;
|
|
23679
23762
|
var _loop_5 = function (item) {
|
|
23680
23763
|
this_3.transform(col.pipe, col.asyncPipe, item[col.field]).then(function (rs) {
|
|
23681
23764
|
item["pipe__" + col.field + " "] = rs;
|
|
@@ -23690,7 +23773,7 @@
|
|
|
23690
23773
|
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
23691
23774
|
finally {
|
|
23692
23775
|
try {
|
|
23693
|
-
if (dataSource_1_1 && !dataSource_1_1.done && (
|
|
23776
|
+
if (dataSource_1_1 && !dataSource_1_1.done && (_h = dataSource_1.return)) _h.call(dataSource_1);
|
|
23694
23777
|
}
|
|
23695
23778
|
finally { if (e_9) throw e_9.error; }
|
|
23696
23779
|
}
|
|
@@ -23705,7 +23788,7 @@
|
|
|
23705
23788
|
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
23706
23789
|
finally {
|
|
23707
23790
|
try {
|
|
23708
|
-
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (
|
|
23791
|
+
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (_f = colHasPipe_1.return)) _f.call(colHasPipe_1);
|
|
23709
23792
|
}
|
|
23710
23793
|
finally { if (e_8) throw e_8.error; }
|
|
23711
23794
|
}
|
|
@@ -23716,8 +23799,8 @@
|
|
|
23716
23799
|
ListComponentBase.prototype.transform = function (pipe, asyncPipe, value) {
|
|
23717
23800
|
return __awaiter(this, void 0, void 0, function () {
|
|
23718
23801
|
var val, val;
|
|
23719
|
-
return __generator(this, function (
|
|
23720
|
-
switch (
|
|
23802
|
+
return __generator(this, function (_f) {
|
|
23803
|
+
switch (_f.label) {
|
|
23721
23804
|
case 0:
|
|
23722
23805
|
if (this.cachedTransforms[value]) {
|
|
23723
23806
|
return [2 /*return*/, this.cachedTransforms[value]];
|
|
@@ -23725,7 +23808,7 @@
|
|
|
23725
23808
|
if (!asyncPipe) return [3 /*break*/, 2];
|
|
23726
23809
|
return [4 /*yield*/, pipe.transform(value)];
|
|
23727
23810
|
case 1:
|
|
23728
|
-
val =
|
|
23811
|
+
val = _f.sent();
|
|
23729
23812
|
this.cachedTransforms[value] = val;
|
|
23730
23813
|
return [2 /*return*/, val];
|
|
23731
23814
|
case 2:
|
|
@@ -23881,7 +23964,7 @@
|
|
|
23881
23964
|
}
|
|
23882
23965
|
};
|
|
23883
23966
|
ListComponentBase.prototype.getMinimizeData = function (model) {
|
|
23884
|
-
var e_10,
|
|
23967
|
+
var e_10, _f;
|
|
23885
23968
|
if (isLiteralObject(model)) {
|
|
23886
23969
|
if (model._dropdownvalue != null && model._dropdownvalue !== '') {
|
|
23887
23970
|
return model[model._dropdownvalue];
|
|
@@ -23907,7 +23990,7 @@
|
|
|
23907
23990
|
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
23908
23991
|
finally {
|
|
23909
23992
|
try {
|
|
23910
|
-
if (model_1_1 && !model_1_1.done && (
|
|
23993
|
+
if (model_1_1 && !model_1_1.done && (_f = model_1.return)) _f.call(model_1);
|
|
23911
23994
|
}
|
|
23912
23995
|
finally { if (e_10) throw e_10.error; }
|
|
23913
23996
|
}
|
|
@@ -24042,8 +24125,8 @@
|
|
|
24042
24125
|
};
|
|
24043
24126
|
ListComponentBase.prototype.handleTableRendered = function () {
|
|
24044
24127
|
return __awaiter(this, void 0, void 0, function () {
|
|
24045
|
-
return __generator(this, function (
|
|
24046
|
-
switch (
|
|
24128
|
+
return __generator(this, function (_f) {
|
|
24129
|
+
switch (_f.label) {
|
|
24047
24130
|
case 0:
|
|
24048
24131
|
if (this.table) {
|
|
24049
24132
|
this._processAfterRendered(this.table.el.nativeElement);
|
|
@@ -24053,7 +24136,7 @@
|
|
|
24053
24136
|
}
|
|
24054
24137
|
return [4 /*yield*/, this.modifyButtonFunctionInRow()];
|
|
24055
24138
|
case 1:
|
|
24056
|
-
|
|
24139
|
+
_f.sent();
|
|
24057
24140
|
this.onReloaded.emit(true);
|
|
24058
24141
|
return [2 /*return*/];
|
|
24059
24142
|
}
|
|
@@ -24086,42 +24169,42 @@
|
|
|
24086
24169
|
ListComponentBase.prototype.modifyButtonFunctionInRow = function () {
|
|
24087
24170
|
var _a;
|
|
24088
24171
|
return __awaiter(this, void 0, void 0, function () {
|
|
24089
|
-
var
|
|
24090
|
-
var e_11,
|
|
24091
|
-
return __generator(this, function (
|
|
24092
|
-
switch (
|
|
24172
|
+
var _f, _g, rowData, total, _h, ex_1, e_11_1;
|
|
24173
|
+
var e_11, _j;
|
|
24174
|
+
return __generator(this, function (_k) {
|
|
24175
|
+
switch (_k.label) {
|
|
24093
24176
|
case 0:
|
|
24094
|
-
|
|
24095
|
-
|
|
24096
|
-
|
|
24177
|
+
_k.trys.push([0, 8, 9, 10]);
|
|
24178
|
+
_f = __values(this.model.dataSource), _g = _f.next();
|
|
24179
|
+
_k.label = 1;
|
|
24097
24180
|
case 1:
|
|
24098
|
-
if (!!
|
|
24099
|
-
rowData =
|
|
24100
|
-
|
|
24181
|
+
if (!!_g.done) return [3 /*break*/, 7];
|
|
24182
|
+
rowData = _g.value;
|
|
24183
|
+
_k.label = 2;
|
|
24101
24184
|
case 2:
|
|
24102
|
-
|
|
24103
|
-
|
|
24104
|
-
_e = this.getMenuButtonAuthorized;
|
|
24185
|
+
_k.trys.push([2, 5, , 6]);
|
|
24186
|
+
_h = this.getMenuButtonAuthorized;
|
|
24105
24187
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
24106
|
-
case 3: return [4 /*yield*/,
|
|
24188
|
+
case 3: return [4 /*yield*/, _h.apply(this, [(_a = _k.sent()) !== null && _a !== void 0 ? _a : []])];
|
|
24107
24189
|
case 4:
|
|
24108
|
-
|
|
24190
|
+
total = (_k.sent());
|
|
24191
|
+
rowData.disableFunctionRow = total.length < 1 && this.setting.disableShare;
|
|
24109
24192
|
return [3 /*break*/, 6];
|
|
24110
24193
|
case 5:
|
|
24111
|
-
ex_1 =
|
|
24194
|
+
ex_1 = _k.sent();
|
|
24112
24195
|
this.hiddenBtnFunction = true;
|
|
24113
24196
|
return [2 /*return*/];
|
|
24114
24197
|
case 6:
|
|
24115
|
-
|
|
24198
|
+
_g = _f.next();
|
|
24116
24199
|
return [3 /*break*/, 1];
|
|
24117
24200
|
case 7: return [3 /*break*/, 10];
|
|
24118
24201
|
case 8:
|
|
24119
|
-
e_11_1 =
|
|
24202
|
+
e_11_1 = _k.sent();
|
|
24120
24203
|
e_11 = { error: e_11_1 };
|
|
24121
24204
|
return [3 /*break*/, 10];
|
|
24122
24205
|
case 9:
|
|
24123
24206
|
try {
|
|
24124
|
-
if (
|
|
24207
|
+
if (_g && !_g.done && (_j = _f.return)) _j.call(_f);
|
|
24125
24208
|
}
|
|
24126
24209
|
finally { if (e_11) throw e_11.error; }
|
|
24127
24210
|
return [7 /*endfinally*/];
|
|
@@ -24151,10 +24234,10 @@
|
|
|
24151
24234
|
};
|
|
24152
24235
|
ListComponentBase.prototype.createSearchSchema = function () {
|
|
24153
24236
|
return __awaiter(this, void 0, void 0, function () {
|
|
24154
|
-
var searchInfo,
|
|
24155
|
-
var e_12,
|
|
24156
|
-
return __generator(this, function (
|
|
24157
|
-
switch (
|
|
24237
|
+
var searchInfo, _f, _g, col, control, e_12_1, _loop_6, this_4, _h, _j, field;
|
|
24238
|
+
var e_12, _k, _l, e_13, _m;
|
|
24239
|
+
return __generator(this, function (_o) {
|
|
24240
|
+
switch (_o.label) {
|
|
24158
24241
|
case 0:
|
|
24159
24242
|
if (this.setting.cols == null) {
|
|
24160
24243
|
return [2 /*return*/, this._notifierService.showWarning('Bạn chưa cấu hình cột cho danh sách')];
|
|
@@ -24164,14 +24247,14 @@
|
|
|
24164
24247
|
searchInfo.schema = [];
|
|
24165
24248
|
searchInfo.fieldDropdown = {};
|
|
24166
24249
|
searchInfo.fieldSearchText = [];
|
|
24167
|
-
|
|
24250
|
+
_o.label = 1;
|
|
24168
24251
|
case 1:
|
|
24169
|
-
|
|
24170
|
-
|
|
24171
|
-
|
|
24252
|
+
_o.trys.push([1, 6, 7, 8]);
|
|
24253
|
+
_f = __values(this.setting.cols), _g = _f.next();
|
|
24254
|
+
_o.label = 2;
|
|
24172
24255
|
case 2:
|
|
24173
|
-
if (!!
|
|
24174
|
-
col =
|
|
24256
|
+
if (!!_g.done) return [3 /*break*/, 5];
|
|
24257
|
+
col = _g.value;
|
|
24175
24258
|
if (!(col.allowFilter != false && col.rawColumn == null)) return [3 /*break*/, 4];
|
|
24176
24259
|
if (col.fullTextSearch) {
|
|
24177
24260
|
if (searchInfo.fieldSearchText.indexOf(col.field) == -1) {
|
|
@@ -24184,9 +24267,9 @@
|
|
|
24184
24267
|
}
|
|
24185
24268
|
return [4 /*yield*/, this.setting.function.getSearchControl(col.field)];
|
|
24186
24269
|
case 3:
|
|
24187
|
-
control =
|
|
24270
|
+
control = _o.sent();
|
|
24188
24271
|
if (control != null) {
|
|
24189
|
-
(
|
|
24272
|
+
(_l = searchInfo.schema).push.apply(_l, __spreadArray([], __read(control)));
|
|
24190
24273
|
}
|
|
24191
24274
|
else {
|
|
24192
24275
|
if (col.baseService || (col.dataSource && col.dataSource.length > 0)) {
|
|
@@ -24240,18 +24323,18 @@
|
|
|
24240
24323
|
}
|
|
24241
24324
|
}
|
|
24242
24325
|
}
|
|
24243
|
-
|
|
24326
|
+
_o.label = 4;
|
|
24244
24327
|
case 4:
|
|
24245
|
-
|
|
24328
|
+
_g = _f.next();
|
|
24246
24329
|
return [3 /*break*/, 2];
|
|
24247
24330
|
case 5: return [3 /*break*/, 8];
|
|
24248
24331
|
case 6:
|
|
24249
|
-
e_12_1 =
|
|
24332
|
+
e_12_1 = _o.sent();
|
|
24250
24333
|
e_12 = { error: e_12_1 };
|
|
24251
24334
|
return [3 /*break*/, 8];
|
|
24252
24335
|
case 7:
|
|
24253
24336
|
try {
|
|
24254
|
-
if (
|
|
24337
|
+
if (_g && !_g.done && (_k = _f.return)) _k.call(_f);
|
|
24255
24338
|
}
|
|
24256
24339
|
finally { if (e_12) throw e_12.error; }
|
|
24257
24340
|
return [7 /*endfinally*/];
|
|
@@ -24271,15 +24354,15 @@
|
|
|
24271
24354
|
};
|
|
24272
24355
|
this_4 = this;
|
|
24273
24356
|
try {
|
|
24274
|
-
for (
|
|
24275
|
-
field =
|
|
24357
|
+
for (_h = __values(searchInfo.fieldSearchText), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
24358
|
+
field = _j.value;
|
|
24276
24359
|
_loop_6(field);
|
|
24277
24360
|
}
|
|
24278
24361
|
}
|
|
24279
24362
|
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
24280
24363
|
finally {
|
|
24281
24364
|
try {
|
|
24282
|
-
if (
|
|
24365
|
+
if (_j && !_j.done && (_m = _h.return)) _m.call(_h);
|
|
24283
24366
|
}
|
|
24284
24367
|
finally { if (e_13) throw e_13.error; }
|
|
24285
24368
|
}
|
|
@@ -24317,8 +24400,8 @@
|
|
|
24317
24400
|
ListComponentBase.prototype.getItemWorkflowSetting = function (setting, rowData) {
|
|
24318
24401
|
return __awaiter(this, void 0, void 0, function () {
|
|
24319
24402
|
var workflowSetting;
|
|
24320
|
-
return __generator(this, function (
|
|
24321
|
-
switch (
|
|
24403
|
+
return __generator(this, function (_f) {
|
|
24404
|
+
switch (_f.label) {
|
|
24322
24405
|
case 0:
|
|
24323
24406
|
workflowSetting = setting.workflowSettingNew;
|
|
24324
24407
|
if (!(setting.isWorkflowTree
|
|
@@ -24326,8 +24409,8 @@
|
|
|
24326
24409
|
&& setting.workflowConfigAdvance.getWorkflowSetting)) return [3 /*break*/, 2];
|
|
24327
24410
|
return [4 /*yield*/, setting.workflowConfigAdvance.getWorkflowSetting(rowData)];
|
|
24328
24411
|
case 1:
|
|
24329
|
-
workflowSetting =
|
|
24330
|
-
|
|
24412
|
+
workflowSetting = _f.sent();
|
|
24413
|
+
_f.label = 2;
|
|
24331
24414
|
case 2:
|
|
24332
24415
|
if (!workflowSetting || workflowSetting.workflows.length == 0) {
|
|
24333
24416
|
return [2 /*return*/, this._notifierService.showWarning('Đối tượng chưa được cấu hình quy trình nghiệp vụ')];
|
|
@@ -24341,13 +24424,13 @@
|
|
|
24341
24424
|
return __awaiter(this, void 0, void 0, function () {
|
|
24342
24425
|
var workflowSetting, resultCheckExist, modelTask, contentLink, modelEntity, taskWorkflowSetting, compRef;
|
|
24343
24426
|
var _this = this;
|
|
24344
|
-
return __generator(this, function (
|
|
24345
|
-
switch (
|
|
24427
|
+
return __generator(this, function (_f) {
|
|
24428
|
+
switch (_f.label) {
|
|
24346
24429
|
case 0:
|
|
24347
24430
|
rowData.__startingWorkflow = true;
|
|
24348
24431
|
return [4 /*yield*/, this.getItemWorkflowSetting(this.setting, rowData)];
|
|
24349
24432
|
case 1:
|
|
24350
|
-
workflowSetting =
|
|
24433
|
+
workflowSetting = _f.sent();
|
|
24351
24434
|
if (!workflowSetting) {
|
|
24352
24435
|
rowData.__startingWorkflow = false;
|
|
24353
24436
|
return [2 /*return*/];
|
|
@@ -24359,7 +24442,7 @@
|
|
|
24359
24442
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24360
24443
|
])];
|
|
24361
24444
|
case 2:
|
|
24362
|
-
resultCheckExist = (
|
|
24445
|
+
resultCheckExist = (_f.sent());
|
|
24363
24446
|
if (!resultCheckExist.success) {
|
|
24364
24447
|
rowData.__startingWorkflow = false;
|
|
24365
24448
|
return [2 /*return*/, this._notifierService.showWarning('Có lỗi xảy ra khi kiểm tra trạng thái đã tạo công việc hay chưa')];
|
|
@@ -24371,8 +24454,8 @@
|
|
|
24371
24454
|
if (!this.setting.modifyRowDataForTask) return [3 /*break*/, 4];
|
|
24372
24455
|
return [4 /*yield*/, this.setting.modifyRowDataForTask(rowData)];
|
|
24373
24456
|
case 3:
|
|
24374
|
-
|
|
24375
|
-
|
|
24457
|
+
_f.sent();
|
|
24458
|
+
_f.label = 4;
|
|
24376
24459
|
case 4:
|
|
24377
24460
|
modelTask = {
|
|
24378
24461
|
id: this._commonService.guid(),
|
|
@@ -24387,7 +24470,7 @@
|
|
|
24387
24470
|
};
|
|
24388
24471
|
return [4 /*yield*/, this.getCopyPath(this.setting, rowData)];
|
|
24389
24472
|
case 5:
|
|
24390
|
-
contentLink =
|
|
24473
|
+
contentLink = _f.sent();
|
|
24391
24474
|
if (contentLink) {
|
|
24392
24475
|
modelEntity = this.parseAttachLink(contentLink);
|
|
24393
24476
|
modelTask.dinhKemNghiepVuDtos = modelEntity;
|
|
@@ -24395,27 +24478,27 @@
|
|
|
24395
24478
|
if (!this.setting.modifyItemTask) return [3 /*break*/, 7];
|
|
24396
24479
|
return [4 /*yield*/, this.setting.modifyItemTask(modelTask, rowData)];
|
|
24397
24480
|
case 6:
|
|
24398
|
-
|
|
24399
|
-
|
|
24481
|
+
_f.sent();
|
|
24482
|
+
_f.label = 7;
|
|
24400
24483
|
case 7:
|
|
24401
24484
|
if (!(workflowSetting.autoStartTask
|
|
24402
24485
|
&& workflowSetting.idLoaiCongViecDefault)) return [3 /*break*/, 9];
|
|
24403
24486
|
return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(workflowSetting.idLoaiCongViecDefault)];
|
|
24404
24487
|
case 8:
|
|
24405
|
-
taskWorkflowSetting =
|
|
24488
|
+
taskWorkflowSetting = _f.sent();
|
|
24406
24489
|
if (taskWorkflowSetting != null && taskWorkflowSetting.workflowCode) {
|
|
24407
24490
|
modelTask[FieldWorkflowCodeInCrudForm] = taskWorkflowSetting.workflowCode;
|
|
24408
24491
|
this.insertTaskAndReload(modelTask, rowData, taskWorkflowSetting);
|
|
24409
24492
|
rowData.__startingWorkflow = false;
|
|
24410
24493
|
return [2 /*return*/];
|
|
24411
24494
|
}
|
|
24412
|
-
|
|
24495
|
+
_f.label = 9;
|
|
24413
24496
|
case 9: return [3 /*break*/, 14];
|
|
24414
24497
|
case 10:
|
|
24415
24498
|
if (!(workflowSetting.workflows.length == 1)) return [3 /*break*/, 12];
|
|
24416
24499
|
return [4 /*yield*/, this.startWorkflow(rowData, workflowSetting.workflows[0])];
|
|
24417
24500
|
case 11:
|
|
24418
|
-
|
|
24501
|
+
_f.sent();
|
|
24419
24502
|
rowData.__startingWorkflow = false;
|
|
24420
24503
|
return [2 /*return*/];
|
|
24421
24504
|
case 12:
|
|
@@ -24424,13 +24507,13 @@
|
|
|
24424
24507
|
rowData.__startingWorkflow = false;
|
|
24425
24508
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'StartWorkflowComponent', this.startWorkflowViewContainer)];
|
|
24426
24509
|
case 13:
|
|
24427
|
-
compRef =
|
|
24510
|
+
compRef = _f.sent();
|
|
24428
24511
|
dialog.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24429
24512
|
compRef.workflows = workflowSetting.workflows;
|
|
24430
24513
|
compRef.defaultWorkflow = workflowSetting.workflowCode;
|
|
24431
24514
|
compRef.instance.onSaved.subscribe(function (event) { return _this.handleStartWorkflowFromDialog(event); });
|
|
24432
24515
|
compRef.instance.onCancel.subscribe(function (event) { return _this.startWorkflowModel.showEditForm = false; });
|
|
24433
|
-
|
|
24516
|
+
_f.label = 14;
|
|
24434
24517
|
case 14: return [2 /*return*/];
|
|
24435
24518
|
}
|
|
24436
24519
|
});
|
|
@@ -24476,25 +24559,25 @@
|
|
|
24476
24559
|
};
|
|
24477
24560
|
ListComponentBase.prototype.insertTaskAndReload = function (modelTask, rowData, workflowSetting) {
|
|
24478
24561
|
return __awaiter(this, void 0, void 0, function () {
|
|
24479
|
-
var
|
|
24562
|
+
var _f;
|
|
24480
24563
|
var _this = this;
|
|
24481
|
-
return __generator(this, function (
|
|
24482
|
-
switch (
|
|
24564
|
+
return __generator(this, function (_g) {
|
|
24565
|
+
switch (_g.label) {
|
|
24483
24566
|
case 0:
|
|
24484
24567
|
if (!this.setting.getDataForNextFirstStepTask) return [3 /*break*/, 2];
|
|
24485
|
-
|
|
24568
|
+
_f = modelTask;
|
|
24486
24569
|
return [4 /*yield*/, this.setting.getDataForNextFirstStepTask(rowData)];
|
|
24487
24570
|
case 1:
|
|
24488
|
-
|
|
24571
|
+
_f.itemWorkflowHistory = _g.sent();
|
|
24489
24572
|
modelTask.itemWorkflowHistory = this.tongHopWorkflowHistoryForNextFirstStep(modelTask.itemWorkflowHistory, modelTask, workflowSetting, modelTask[FieldWorkflowCodeInCrudForm]);
|
|
24490
|
-
|
|
24573
|
+
_g.label = 2;
|
|
24491
24574
|
case 2: return [4 /*yield*/, this._congViecService.post(modelTask)
|
|
24492
24575
|
.then(function (res) { return _this.handleResponse(res, '', function (f) {
|
|
24493
24576
|
_this.onStartedWorkflow.emit(rowData.id);
|
|
24494
24577
|
_this.getData();
|
|
24495
24578
|
}); })];
|
|
24496
24579
|
case 3:
|
|
24497
|
-
|
|
24580
|
+
_g.sent();
|
|
24498
24581
|
return [2 /*return*/];
|
|
24499
24582
|
}
|
|
24500
24583
|
});
|
|
@@ -24514,9 +24597,9 @@
|
|
|
24514
24597
|
if (dialogDetailTask === void 0) { dialogDetailTask = null; }
|
|
24515
24598
|
if (dialogChoYKienForm === void 0) { dialogChoYKienForm = null; }
|
|
24516
24599
|
return __awaiter(this, void 0, void 0, function () {
|
|
24517
|
-
var
|
|
24518
|
-
return __generator(this, function (
|
|
24519
|
-
switch (
|
|
24600
|
+
var _f;
|
|
24601
|
+
return __generator(this, function (_g) {
|
|
24602
|
+
switch (_g.label) {
|
|
24520
24603
|
case 0:
|
|
24521
24604
|
if (this.showingActionWorkflow)
|
|
24522
24605
|
return [2 /*return*/];
|
|
@@ -24525,10 +24608,10 @@
|
|
|
24525
24608
|
this.dialogProcessWorkflowForm = dialogProcessWorkflowForm;
|
|
24526
24609
|
this.dialogDetailTask = dialogDetailTask;
|
|
24527
24610
|
this.dialogChoYKienForm = dialogChoYKienForm;
|
|
24528
|
-
|
|
24611
|
+
_f = this;
|
|
24529
24612
|
return [4 /*yield*/, this.getButtonContext(rowData)];
|
|
24530
24613
|
case 1:
|
|
24531
|
-
|
|
24614
|
+
_f.buttonContexts = _g.sent();
|
|
24532
24615
|
if (this.buttonContexts.length === 0) {
|
|
24533
24616
|
return [2 /*return*/];
|
|
24534
24617
|
}
|
|
@@ -24542,20 +24625,20 @@
|
|
|
24542
24625
|
return __awaiter(this, void 0, void 0, function () {
|
|
24543
24626
|
var resultGetActionWorkflow, buttonContexts;
|
|
24544
24627
|
var _this = this;
|
|
24545
|
-
return __generator(this, function (
|
|
24546
|
-
switch (
|
|
24628
|
+
return __generator(this, function (_f) {
|
|
24629
|
+
switch (_f.label) {
|
|
24547
24630
|
case 0:
|
|
24548
24631
|
this.showingActionWorkflow = true;
|
|
24549
24632
|
resultGetActionWorkflow = null;
|
|
24550
24633
|
if (!(!this.setting.isWorkflowTree && this.setting.workflowSettingNew.createTaskInstead)) return [3 /*break*/, 2];
|
|
24551
24634
|
return [4 /*yield*/, this.getActionWorkflowByTask(rowData, rowData.dialogHistory)];
|
|
24552
24635
|
case 1:
|
|
24553
|
-
resultGetActionWorkflow =
|
|
24636
|
+
resultGetActionWorkflow = _f.sent();
|
|
24554
24637
|
return [3 /*break*/, 4];
|
|
24555
24638
|
case 2: return [4 /*yield*/, this.getActionWorkflow(rowData)];
|
|
24556
24639
|
case 3:
|
|
24557
|
-
resultGetActionWorkflow =
|
|
24558
|
-
|
|
24640
|
+
resultGetActionWorkflow = _f.sent();
|
|
24641
|
+
_f.label = 4;
|
|
24559
24642
|
case 4:
|
|
24560
24643
|
this.showingActionWorkflow = false;
|
|
24561
24644
|
if (!Array.isArray(resultGetActionWorkflow)) {
|
|
@@ -24579,11 +24662,11 @@
|
|
|
24579
24662
|
ListComponentBase.prototype.getActionWorkflow = function (rowData) {
|
|
24580
24663
|
return __awaiter(this, void 0, void 0, function () {
|
|
24581
24664
|
var workflowSetting;
|
|
24582
|
-
return __generator(this, function (
|
|
24583
|
-
switch (
|
|
24665
|
+
return __generator(this, function (_f) {
|
|
24666
|
+
switch (_f.label) {
|
|
24584
24667
|
case 0: return [4 /*yield*/, this.getItemWorkflowSetting(this.setting, rowData)];
|
|
24585
24668
|
case 1:
|
|
24586
|
-
workflowSetting =
|
|
24669
|
+
workflowSetting = _f.sent();
|
|
24587
24670
|
if (!workflowSetting)
|
|
24588
24671
|
return [2 /*return*/];
|
|
24589
24672
|
return [2 /*return*/, this._getActionWorkflowBase(this.setting, rowData, workflowSetting)];
|
|
@@ -24593,21 +24676,21 @@
|
|
|
24593
24676
|
};
|
|
24594
24677
|
ListComponentBase.prototype.getActionWorkflowByTask = function (rowData, dialog) {
|
|
24595
24678
|
return __awaiter(this, void 0, void 0, function () {
|
|
24596
|
-
var
|
|
24597
|
-
return __generator(this, function (
|
|
24598
|
-
switch (
|
|
24679
|
+
var _f, workflowPermissionDetailService, userService, result, workflowSetting, crudListSetting;
|
|
24680
|
+
return __generator(this, function (_g) {
|
|
24681
|
+
switch (_g.label) {
|
|
24599
24682
|
case 0:
|
|
24600
24683
|
if (!!rowData.__isGotCongViec) return [3 /*break*/, 2];
|
|
24601
|
-
|
|
24684
|
+
_f = rowData;
|
|
24602
24685
|
return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
24603
24686
|
this.newFilter('serviceCode', exports.Operator.equal, this.setting.baseService.serviceCode),
|
|
24604
24687
|
this.newFilter('entity', exports.Operator.equal, this.setting.baseService.entityName),
|
|
24605
24688
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24606
24689
|
])];
|
|
24607
24690
|
case 1:
|
|
24608
|
-
|
|
24691
|
+
_f.__itemCongViec = (_g.sent()).data;
|
|
24609
24692
|
rowData.__isGotCongViec = true;
|
|
24610
|
-
|
|
24693
|
+
_g.label = 2;
|
|
24611
24694
|
case 2:
|
|
24612
24695
|
rowData = rowData.__itemCongViec;
|
|
24613
24696
|
if (!rowData) {
|
|
@@ -24620,12 +24703,12 @@
|
|
|
24620
24703
|
return [4 /*yield*/, workflowPermissionDetailService.changeEndpoint(this._congViecService)
|
|
24621
24704
|
.appendInfoForWorkflow(userService.getUserIdCombine(), [rowData], 'id', this.setting.ignoreWorkflow)];
|
|
24622
24705
|
case 3:
|
|
24623
|
-
result =
|
|
24706
|
+
result = _g.sent();
|
|
24624
24707
|
if (result !== true)
|
|
24625
24708
|
return [2 /*return*/];
|
|
24626
24709
|
return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(rowData.idLoaiCongViec)];
|
|
24627
24710
|
case 4:
|
|
24628
|
-
workflowSetting =
|
|
24711
|
+
workflowSetting = _g.sent();
|
|
24629
24712
|
if (workflowSetting == null)
|
|
24630
24713
|
return [2 /*return*/];
|
|
24631
24714
|
crudListSetting = new CrudListSetting();
|
|
@@ -24639,8 +24722,8 @@
|
|
|
24639
24722
|
return __awaiter(this, void 0, void 0, function () {
|
|
24640
24723
|
var buttonContexts, itemWorkflowSetting_1, actions_1, actionAllows, workflowHistoryService, userService, userId, userIdStringUpper, itemWorkflowHistoryLast;
|
|
24641
24724
|
var _this = this;
|
|
24642
|
-
return __generator(this, function (
|
|
24643
|
-
switch (
|
|
24725
|
+
return __generator(this, function (_f) {
|
|
24726
|
+
switch (_f.label) {
|
|
24644
24727
|
case 0:
|
|
24645
24728
|
this.currentItem = rowData;
|
|
24646
24729
|
this.buttonContexts = [];
|
|
@@ -24655,7 +24738,7 @@
|
|
|
24655
24738
|
actions_1 = itemWorkflowSetting_1.data.actions[rowData.__trangThai];
|
|
24656
24739
|
return [4 /*yield*/, crudListSetting.baseService.getActionAllow(rowData.id)];
|
|
24657
24740
|
case 2:
|
|
24658
|
-
actionAllows = (
|
|
24741
|
+
actionAllows = (_f.sent()).data;
|
|
24659
24742
|
if (actionAllows) {
|
|
24660
24743
|
actionAllows.forEach(function (actionCode) {
|
|
24661
24744
|
var action = actions_1.find(function (q) { return q.code == actionCode; });
|
|
@@ -24684,7 +24767,7 @@
|
|
|
24684
24767
|
}
|
|
24685
24768
|
return [4 /*yield*/, workflowHistoryService.changeEndpoint(crudListSetting.baseService).getLastByItemId(rowData.id)];
|
|
24686
24769
|
case 3:
|
|
24687
|
-
itemWorkflowHistoryLast = (
|
|
24770
|
+
itemWorkflowHistoryLast = (_f.sent()).data;
|
|
24688
24771
|
if (itemWorkflowHistoryLast
|
|
24689
24772
|
&& itemWorkflowHistoryLast.actionCode != MaActionBatDauQuyTrinh
|
|
24690
24773
|
&& itemWorkflowHistoryLast.userIdCreated.toUpperCase() == userIdStringUpper
|
|
@@ -24704,7 +24787,7 @@
|
|
|
24704
24787
|
label: exports.ButtonTextActionCongViec.XEM_LICH_SU,
|
|
24705
24788
|
command: function () { return _this.viewHistoryWorkflow(crudListSetting, rowData); }
|
|
24706
24789
|
});
|
|
24707
|
-
|
|
24790
|
+
_f.label = 4;
|
|
24708
24791
|
case 4: return [2 /*return*/, buttonContexts];
|
|
24709
24792
|
}
|
|
24710
24793
|
});
|
|
@@ -24714,13 +24797,13 @@
|
|
|
24714
24797
|
return __awaiter(this, void 0, void 0, function () {
|
|
24715
24798
|
var itemTask, taskFormModel, compRef;
|
|
24716
24799
|
var _this = this;
|
|
24717
|
-
return __generator(this, function (
|
|
24718
|
-
switch (
|
|
24800
|
+
return __generator(this, function (_f) {
|
|
24801
|
+
switch (_f.label) {
|
|
24719
24802
|
case 0: return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
24720
24803
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24721
24804
|
])];
|
|
24722
24805
|
case 1:
|
|
24723
|
-
itemTask = (
|
|
24806
|
+
itemTask = (_f.sent()).data;
|
|
24724
24807
|
if (itemTask == null) {
|
|
24725
24808
|
return [2 /*return*/, this._notifierService.showWarning('Không tìm thấy công việc gắn với bản ghi')];
|
|
24726
24809
|
}
|
|
@@ -24731,7 +24814,7 @@
|
|
|
24731
24814
|
this.detailTaskModel.showEditForm = true;
|
|
24732
24815
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('congviec', 'BaseCongViecFormComponent', this.detailTaskViewContainer)];
|
|
24733
24816
|
case 2:
|
|
24734
|
-
compRef =
|
|
24817
|
+
compRef = _f.sent();
|
|
24735
24818
|
if (this.dialogDetailTask) {
|
|
24736
24819
|
this.dialogDetailTask.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24737
24820
|
}
|
|
@@ -24768,11 +24851,11 @@
|
|
|
24768
24851
|
return __awaiter(this, void 0, void 0, function () {
|
|
24769
24852
|
var workflowSetting, compRef;
|
|
24770
24853
|
var _this = this;
|
|
24771
|
-
return __generator(this, function (
|
|
24772
|
-
switch (
|
|
24854
|
+
return __generator(this, function (_f) {
|
|
24855
|
+
switch (_f.label) {
|
|
24773
24856
|
case 0: return [4 /*yield*/, this.getItemWorkflowSetting(crudListSetting, rowData)];
|
|
24774
24857
|
case 1:
|
|
24775
|
-
workflowSetting =
|
|
24858
|
+
workflowSetting = _f.sent();
|
|
24776
24859
|
if (!workflowSetting)
|
|
24777
24860
|
return [2 /*return*/];
|
|
24778
24861
|
this.currentItem = rowData;
|
|
@@ -24782,7 +24865,7 @@
|
|
|
24782
24865
|
this.workflowHistoryModel.showEditForm = true;
|
|
24783
24866
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowHistoryNewComponent', this.workflowHistoryNewViewContainer)];
|
|
24784
24867
|
case 2:
|
|
24785
|
-
compRef =
|
|
24868
|
+
compRef = _f.sent();
|
|
24786
24869
|
compRef.instance.businessSetting = crudListSetting;
|
|
24787
24870
|
compRef.instance.tableName = this.workflowHistoryModel.data.tableName;
|
|
24788
24871
|
compRef.instance.item = rowData;
|
|
@@ -24800,8 +24883,8 @@
|
|
|
24800
24883
|
return __awaiter(this, void 0, void 0, function () {
|
|
24801
24884
|
var domainNewTab, compRef;
|
|
24802
24885
|
var _this = this;
|
|
24803
|
-
return __generator(this, function (
|
|
24804
|
-
switch (
|
|
24886
|
+
return __generator(this, function (_f) {
|
|
24887
|
+
switch (_f.label) {
|
|
24805
24888
|
case 0:
|
|
24806
24889
|
if (workflowAction.openNewTab) {
|
|
24807
24890
|
domainNewTab = workflowAction.domainNewTab;
|
|
@@ -24823,7 +24906,7 @@
|
|
|
24823
24906
|
this.processWorkflowModel.header = workflowAction.name;
|
|
24824
24907
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'ProcessWorkflowFormComponent', this.processWorkflowFormViewContainer)];
|
|
24825
24908
|
case 1:
|
|
24826
|
-
compRef =
|
|
24909
|
+
compRef = _f.sent();
|
|
24827
24910
|
if (this.dialogProcessWorkflowForm) {
|
|
24828
24911
|
this.dialogProcessWorkflowForm.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24829
24912
|
}
|
|
@@ -24842,15 +24925,15 @@
|
|
|
24842
24925
|
return __awaiter(this, void 0, void 0, function () {
|
|
24843
24926
|
var compRef;
|
|
24844
24927
|
var _this = this;
|
|
24845
|
-
return __generator(this, function (
|
|
24846
|
-
switch (
|
|
24928
|
+
return __generator(this, function (_f) {
|
|
24929
|
+
switch (_f.label) {
|
|
24847
24930
|
case 0:
|
|
24848
24931
|
this.choYKienModel.data.rowData = rowData;
|
|
24849
24932
|
this.choYKienModel.data.setting = crudListSetting;
|
|
24850
24933
|
this.choYKienModel.showEditForm = true;
|
|
24851
24934
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'ChoYKienFormComponent', this.choYKienFormViewContainer)];
|
|
24852
24935
|
case 1:
|
|
24853
|
-
compRef =
|
|
24936
|
+
compRef = _f.sent();
|
|
24854
24937
|
if (this.dialogChoYKienForm) {
|
|
24855
24938
|
this.dialogChoYKienForm.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24856
24939
|
}
|
|
@@ -24866,8 +24949,8 @@
|
|
|
24866
24949
|
ListComponentBase.prototype.startWorkflow = function (rowData, workflow) {
|
|
24867
24950
|
return __awaiter(this, void 0, void 0, function () {
|
|
24868
24951
|
var _this = this;
|
|
24869
|
-
return __generator(this, function (
|
|
24870
|
-
switch (
|
|
24952
|
+
return __generator(this, function (_f) {
|
|
24953
|
+
switch (_f.label) {
|
|
24871
24954
|
case 0: return [4 /*yield*/, this.setting.baseService.startWorkflow(rowData.id, workflow.code)
|
|
24872
24955
|
.then(function (res) { return _this.handleResponse(res, 'Chạy quy trình thành công', function (f) {
|
|
24873
24956
|
_this.onStartedWorkflow.emit(rowData.id);
|
|
@@ -24875,7 +24958,7 @@
|
|
|
24875
24958
|
_this.getData();
|
|
24876
24959
|
}); })];
|
|
24877
24960
|
case 1:
|
|
24878
|
-
|
|
24961
|
+
_f.sent();
|
|
24879
24962
|
return [2 /*return*/];
|
|
24880
24963
|
}
|
|
24881
24964
|
});
|
|
@@ -24900,7 +24983,7 @@
|
|
|
24900
24983
|
ListComponentBase.prototype.createShareLink = function () {
|
|
24901
24984
|
return __awaiter(this, void 0, void 0, function () {
|
|
24902
24985
|
var rowData;
|
|
24903
|
-
return __generator(this, function (
|
|
24986
|
+
return __generator(this, function (_f) {
|
|
24904
24987
|
if (!this.setting.checkReadyToTrinhKy()) {
|
|
24905
24988
|
return [2 /*return*/, this._notifierService.showWarning('Đang tải dữ liệu danh sách, chờ một lúc rồi thử lại')];
|
|
24906
24989
|
}
|
|
@@ -24912,17 +24995,17 @@
|
|
|
24912
24995
|
};
|
|
24913
24996
|
ListComponentBase.prototype.createShareLinkMultiple = function () {
|
|
24914
24997
|
return __awaiter(this, void 0, void 0, function () {
|
|
24915
|
-
return __generator(this, function (
|
|
24998
|
+
return __generator(this, function (_f) {
|
|
24916
24999
|
this.showShareLinkForm(this.model.selectedItems);
|
|
24917
25000
|
return [2 /*return*/];
|
|
24918
25001
|
});
|
|
24919
25002
|
});
|
|
24920
25003
|
};
|
|
24921
25004
|
ListComponentBase.prototype.disableMultipleCopyLink = function () {
|
|
24922
|
-
var e_14,
|
|
25005
|
+
var e_14, _f;
|
|
24923
25006
|
try {
|
|
24924
|
-
for (var
|
|
24925
|
-
var item =
|
|
25007
|
+
for (var _g = __values(this.model.selectedItems), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
25008
|
+
var item = _h.value;
|
|
24926
25009
|
if (this.disableCopyLink(item)) {
|
|
24927
25010
|
return true;
|
|
24928
25011
|
}
|
|
@@ -24931,7 +25014,7 @@
|
|
|
24931
25014
|
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
24932
25015
|
finally {
|
|
24933
25016
|
try {
|
|
24934
|
-
if (
|
|
25017
|
+
if (_h && !_h.done && (_f = _g.return)) _f.call(_g);
|
|
24935
25018
|
}
|
|
24936
25019
|
finally { if (e_14) throw e_14.error; }
|
|
24937
25020
|
}
|
|
@@ -24951,7 +25034,7 @@
|
|
|
24951
25034
|
};
|
|
24952
25035
|
ListComponentBase.prototype.showSettingsPermission = function () {
|
|
24953
25036
|
return __awaiter(this, void 0, void 0, function () {
|
|
24954
|
-
return __generator(this, function (
|
|
25037
|
+
return __generator(this, function (_f) {
|
|
24955
25038
|
if (this.creatingSearchInfo)
|
|
24956
25039
|
return [2 /*return*/];
|
|
24957
25040
|
this._showSettingsPermission = true;
|
|
@@ -24963,13 +25046,13 @@
|
|
|
24963
25046
|
return __awaiter(this, void 0, void 0, function () {
|
|
24964
25047
|
var compRef;
|
|
24965
25048
|
var _this = this;
|
|
24966
|
-
return __generator(this, function (
|
|
24967
|
-
switch (
|
|
25049
|
+
return __generator(this, function (_f) {
|
|
25050
|
+
switch (_f.label) {
|
|
24968
25051
|
case 0:
|
|
24969
25052
|
this._showSettingsWorkflow = true;
|
|
24970
25053
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowSettingDialogComponent', this.workflowSettingDialogViewContainer)];
|
|
24971
25054
|
case 1:
|
|
24972
|
-
compRef =
|
|
25055
|
+
compRef = _f.sent();
|
|
24973
25056
|
compRef.instance.parentSetting = this.setting;
|
|
24974
25057
|
compRef.instance.parentContext = this.context;
|
|
24975
25058
|
compRef.instance.parentModel = this.model;
|
|
@@ -24985,13 +25068,13 @@
|
|
|
24985
25068
|
return __awaiter(this, void 0, void 0, function () {
|
|
24986
25069
|
var compRef;
|
|
24987
25070
|
var _this = this;
|
|
24988
|
-
return __generator(this, function (
|
|
24989
|
-
switch (
|
|
25071
|
+
return __generator(this, function (_f) {
|
|
25072
|
+
switch (_f.label) {
|
|
24990
25073
|
case 0:
|
|
24991
25074
|
this.workflowSettingModel.showEditForm = true;
|
|
24992
25075
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowSettingNewComponent', this.workflowsettingnewViewContainer)];
|
|
24993
25076
|
case 1:
|
|
24994
|
-
compRef =
|
|
25077
|
+
compRef = _f.sent();
|
|
24995
25078
|
dialog.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24996
25079
|
compRef.instance.parentSetting = this.setting;
|
|
24997
25080
|
compRef.instance.onSaved.subscribe(function (event) { return _this.onSaveWorkflowSettingsNew(null); });
|
|
@@ -25005,13 +25088,13 @@
|
|
|
25005
25088
|
return __awaiter(this, void 0, void 0, function () {
|
|
25006
25089
|
var compRef;
|
|
25007
25090
|
var _this = this;
|
|
25008
|
-
return __generator(this, function (
|
|
25009
|
-
switch (
|
|
25091
|
+
return __generator(this, function (_f) {
|
|
25092
|
+
switch (_f.label) {
|
|
25010
25093
|
case 0:
|
|
25011
25094
|
this.permissionSharingModel.showEditForm = true;
|
|
25012
25095
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'PermissionSharingComponent', this.permissionSharingViewContainer)];
|
|
25013
25096
|
case 1:
|
|
25014
|
-
compRef =
|
|
25097
|
+
compRef = _f.sent();
|
|
25015
25098
|
compRef.instance.item = this.rowDataCurrent;
|
|
25016
25099
|
compRef.instance.baseService = this.setting.baseService;
|
|
25017
25100
|
compRef.instance.onCancel.subscribe(function (event) { return _this.permissionSharingModel.showEditForm = false; });
|
|
@@ -25023,13 +25106,13 @@
|
|
|
25023
25106
|
ListComponentBase.prototype.showAttachedTask = function () {
|
|
25024
25107
|
return __awaiter(this, void 0, void 0, function () {
|
|
25025
25108
|
var compRef;
|
|
25026
|
-
return __generator(this, function (
|
|
25027
|
-
switch (
|
|
25109
|
+
return __generator(this, function (_f) {
|
|
25110
|
+
switch (_f.label) {
|
|
25028
25111
|
case 0:
|
|
25029
25112
|
this.attachedTaskModel.showEditForm = true;
|
|
25030
25113
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('congviec', 'BaseCongViecComponent', this.baseCongViecViewContainer)];
|
|
25031
25114
|
case 1:
|
|
25032
|
-
compRef =
|
|
25115
|
+
compRef = _f.sent();
|
|
25033
25116
|
compRef.instance.serviceCode = this.setting.baseService.serviceCode;
|
|
25034
25117
|
compRef.instance.entity = this.setting.baseService.entityName;
|
|
25035
25118
|
compRef.instance.itemIdAttach = this.rowDataCurrent.id;
|
|
@@ -25042,13 +25125,13 @@
|
|
|
25042
25125
|
return __awaiter(this, void 0, void 0, function () {
|
|
25043
25126
|
var compRef;
|
|
25044
25127
|
var _this = this;
|
|
25045
|
-
return __generator(this, function (
|
|
25046
|
-
switch (
|
|
25128
|
+
return __generator(this, function (_f) {
|
|
25129
|
+
switch (_f.label) {
|
|
25047
25130
|
case 0:
|
|
25048
25131
|
this.permissionListModel.showEditForm = true;
|
|
25049
25132
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowPermissionComponent', this.workflowPermissionViewContainer)];
|
|
25050
25133
|
case 1:
|
|
25051
|
-
compRef =
|
|
25134
|
+
compRef = _f.sent();
|
|
25052
25135
|
// this.dialogWorkflowPermission.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
25053
25136
|
compRef.instance.item = this.rowDataCurrent;
|
|
25054
25137
|
compRef.instance.businessSetting = this.setting;
|
|
@@ -25105,6 +25188,137 @@
|
|
|
25105
25188
|
});
|
|
25106
25189
|
});
|
|
25107
25190
|
};
|
|
25191
|
+
ListComponentBase.prototype.handleShowFormSettingButton = function () {
|
|
25192
|
+
var _a, _b, _c, _d, _e;
|
|
25193
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
25194
|
+
var lstBtnCustom, lstBtnAction, _loop_7, this_5, lstBtnCustom_1, lstBtnCustom_1_1, item, lstMenuButtons, buttonSetting;
|
|
25195
|
+
var e_15, _f;
|
|
25196
|
+
var _this = this;
|
|
25197
|
+
return __generator(this, function (_g) {
|
|
25198
|
+
switch (_g.label) {
|
|
25199
|
+
case 0:
|
|
25200
|
+
// Tổng hợp dữ liệu các nút từ ngTemplate + base + menuButton
|
|
25201
|
+
this.buttonAuthorizeModel.data.dataSource = [];
|
|
25202
|
+
lstBtnCustom = this.lstButtonElement[exports.EnumProperties.RESULTS].concat(this.lstButtonTemplate);
|
|
25203
|
+
lstBtnAction = [];
|
|
25204
|
+
_loop_7 = function (item) {
|
|
25205
|
+
var buttonText = (_c = (_b = (_a = item.nativeElement.getAttribute(exports.EnumProperties.LABEL)) !== null && _a !== void 0 ? _a : item.nativeElement.getAttribute(exports.EnumProperties.NG_REFLECT_TEXT)) !== null && _b !== void 0 ? _b : item.nativeElement.getAttribute(exports.EnumProperties.NG_REFLECT_LABEL)) !== null && _c !== void 0 ? _c : item.nativeElement.innerText;
|
|
25206
|
+
if (!buttonText || lstBtnAction.some(function (p) { return p.rawText === buttonText; })) {
|
|
25207
|
+
return "continue";
|
|
25208
|
+
}
|
|
25209
|
+
this_5.addButtonAction(lstBtnAction, this_5.authorizeButtonKey, buttonText);
|
|
25210
|
+
};
|
|
25211
|
+
this_5 = this;
|
|
25212
|
+
try {
|
|
25213
|
+
for (lstBtnCustom_1 = __values(lstBtnCustom), lstBtnCustom_1_1 = lstBtnCustom_1.next(); !lstBtnCustom_1_1.done; lstBtnCustom_1_1 = lstBtnCustom_1.next()) {
|
|
25214
|
+
item = lstBtnCustom_1_1.value;
|
|
25215
|
+
_loop_7(item);
|
|
25216
|
+
}
|
|
25217
|
+
}
|
|
25218
|
+
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
25219
|
+
finally {
|
|
25220
|
+
try {
|
|
25221
|
+
if (lstBtnCustom_1_1 && !lstBtnCustom_1_1.done && (_f = lstBtnCustom_1.return)) _f.call(lstBtnCustom_1);
|
|
25222
|
+
}
|
|
25223
|
+
finally { if (e_15) throw e_15.error; }
|
|
25224
|
+
}
|
|
25225
|
+
return [4 /*yield*/, this.menuButtons({})];
|
|
25226
|
+
case 1:
|
|
25227
|
+
lstMenuButtons = (_d = _g.sent()) !== null && _d !== void 0 ? _d : [];
|
|
25228
|
+
if (lstMenuButtons.length) {
|
|
25229
|
+
lstMenuButtons.forEach(function (item) { return _this.addButtonAction(lstBtnAction, _this.authorizeButtonKey, item.label); });
|
|
25230
|
+
}
|
|
25231
|
+
buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
25232
|
+
((_e = buttonSetting[this.authorizeButtonKey]) === null || _e === void 0 ? void 0 : _e.length) && buttonSetting[this.authorizeButtonKey].forEach(function (item) {
|
|
25233
|
+
var permissionItem = lstBtnAction.find(function (p) { return p.permissionCode == item.code; });
|
|
25234
|
+
if (permissionItem) {
|
|
25235
|
+
permissionItem.isAuthorize = true;
|
|
25236
|
+
permissionItem.id = item.id;
|
|
25237
|
+
}
|
|
25238
|
+
});
|
|
25239
|
+
this.buttonAuthorizeModel.data.dataSource = lstBtnAction;
|
|
25240
|
+
this.buttonAuthorizeModel.showEditForm = true;
|
|
25241
|
+
return [2 /*return*/];
|
|
25242
|
+
}
|
|
25243
|
+
});
|
|
25244
|
+
});
|
|
25245
|
+
};
|
|
25246
|
+
ListComponentBase.prototype.onShowFormSettingButton = function () {
|
|
25247
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
25248
|
+
var _this = this;
|
|
25249
|
+
return __generator(this, function (_f) {
|
|
25250
|
+
this.checkedAll = true;
|
|
25251
|
+
this.handleCheckAll();
|
|
25252
|
+
setTimeout(function () {
|
|
25253
|
+
_this.handleShowFormSettingButton();
|
|
25254
|
+
}, 100);
|
|
25255
|
+
return [2 /*return*/];
|
|
25256
|
+
});
|
|
25257
|
+
});
|
|
25258
|
+
};
|
|
25259
|
+
ListComponentBase.prototype.setBtnReady = function (isReady) {
|
|
25260
|
+
this.isBtnReady = isReady;
|
|
25261
|
+
};
|
|
25262
|
+
ListComponentBase.prototype.addButtonAction = function (lstBtnAction, key, rawText, id) {
|
|
25263
|
+
id !== null && id !== void 0 ? id : (id = this._commonService.guid());
|
|
25264
|
+
var permissionCode = this._commonService.convertStringToUnSign(rawText).replace(/ /g, '_').toUpperCase();
|
|
25265
|
+
lstBtnAction.push(new ButtonAction({
|
|
25266
|
+
id: id,
|
|
25267
|
+
rawText: rawText,
|
|
25268
|
+
permissionCode: "[" + key + "]_[" + permissionCode + "]"
|
|
25269
|
+
}));
|
|
25270
|
+
};
|
|
25271
|
+
ListComponentBase.prototype.setAuthorizeButton = function (lstButtonTemplate) {
|
|
25272
|
+
var _a, _b;
|
|
25273
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
25274
|
+
var filterPermission, lstPermissionCode, buttonSetting, lstMenuButton, lstMenuButtons;
|
|
25275
|
+
var _this = this;
|
|
25276
|
+
return __generator(this, function (_f) {
|
|
25277
|
+
switch (_f.label) {
|
|
25278
|
+
case 0:
|
|
25279
|
+
this.authorizeButtonKey = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');
|
|
25280
|
+
if (i0.isDevMode()) {
|
|
25281
|
+
this.authorizeButtonKey = this.serviceCode.toUpperCase() + "_" + window.location.pathname.substring(1).toUpperCase();
|
|
25282
|
+
}
|
|
25283
|
+
filterPermission = [this.newFilter('code', exports.Operator.contain, "[" + this.authorizeButtonKey + "]")];
|
|
25284
|
+
return [4 /*yield*/, this._basePermissionService.getAllWithIgnore(filterPermission, 'code,id')];
|
|
25285
|
+
case 1:
|
|
25286
|
+
lstPermissionCode = (_a = (_f.sent()).data) !== null && _a !== void 0 ? _a : [];
|
|
25287
|
+
buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
25288
|
+
buttonSetting[this.authorizeButtonKey] = lstPermissionCode;
|
|
25289
|
+
this.lstButtonTemplate = lstButtonTemplate;
|
|
25290
|
+
if (!buttonSetting[this.authorizeButtonKey].length) {
|
|
25291
|
+
this.isBtnReady = true;
|
|
25292
|
+
return [2 /*return*/];
|
|
25293
|
+
}
|
|
25294
|
+
sessionStorage.setItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE, JSON.stringify(buttonSetting));
|
|
25295
|
+
lstMenuButton = [];
|
|
25296
|
+
return [4 /*yield*/, this.menuButtons({})];
|
|
25297
|
+
case 2:
|
|
25298
|
+
lstMenuButtons = (_b = _f.sent()) !== null && _b !== void 0 ? _b : [];
|
|
25299
|
+
if (!lstMenuButtons.length) {
|
|
25300
|
+
this.isBtnReady = true;
|
|
25301
|
+
return [2 /*return*/];
|
|
25302
|
+
}
|
|
25303
|
+
lstMenuButtons.forEach(function (item) { return _this.addButtonAction(lstMenuButton, _this.authorizeButtonKey, item.label); });
|
|
25304
|
+
buttonSetting[this.authorizeButtonKey].forEach(function (item) {
|
|
25305
|
+
var itemBtnMenu = lstMenuButton.find(function (p) { return p.permissionCode == item.code; });
|
|
25306
|
+
if (itemBtnMenu) {
|
|
25307
|
+
_this.lstBtnAuthorizeMenu.push(itemBtnMenu);
|
|
25308
|
+
}
|
|
25309
|
+
});
|
|
25310
|
+
this.isBtnReady = true;
|
|
25311
|
+
this.handleTableRendered();
|
|
25312
|
+
return [2 /*return*/];
|
|
25313
|
+
}
|
|
25314
|
+
});
|
|
25315
|
+
});
|
|
25316
|
+
};
|
|
25317
|
+
ListComponentBase.prototype.handleCloseAuthorizeButtonForm = function () {
|
|
25318
|
+
this.checkedAll = false;
|
|
25319
|
+
this.handleCheckAll();
|
|
25320
|
+
this.buttonAuthorizeModel.showEditForm = false;
|
|
25321
|
+
};
|
|
25108
25322
|
return ListComponentBase;
|
|
25109
25323
|
}(ComponentBase));
|
|
25110
25324
|
ListComponentBase.decorators = [
|
|
@@ -25117,6 +25331,7 @@
|
|
|
25117
25331
|
ListComponentBase.propDecorators = {
|
|
25118
25332
|
treeTable: [{ type: i0.ViewChild, args: ['treetable',] }],
|
|
25119
25333
|
_table: [{ type: i0.ViewChild, args: [table.Table, { static: false },] }],
|
|
25334
|
+
lstButtonElement: [{ type: i0.ViewChildren, args: ['buttonBase',] }],
|
|
25120
25335
|
container: [{ type: i0.ViewChild, args: ['container', { static: true },] }],
|
|
25121
25336
|
iconToggleRowGroup: [{ type: i0.ViewChild, args: ['iconToggleRowGroup', { static: true },] }],
|
|
25122
25337
|
iconToggleRowData: [{ type: i0.ViewChild, args: ['iconToggleRowData', { static: true },] }],
|
|
@@ -25380,7 +25595,7 @@
|
|
|
25380
25595
|
{ type: i0.Component, args: [{
|
|
25381
25596
|
// tslint:disable-next-line: component-selector
|
|
25382
25597
|
selector: 'crud-list',
|
|
25383
|
-
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\n [ngStyle]=\"_style\">\n <div class=\"ui-helper-clearfix crud-list-header-area\">\n <div *ngIf=\"!setting.hiddenSearch\">\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container *ngIf=\"!setting.useCommonSearch\">\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"setting.useCommonSearch && !hasTemplate('searchCustom')\"\n class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <div style=\"width: 100%;\">\n <common-search-form #commonSearch [parentSetting]=\"setting\" [parentModel]=\"model\"\n [templateFilter]=\"templateFilter\" [parentContext]=\"context\"\n [searchBoxTooltip]=\"setting.toolTipSearhBoxCommon\"\n (onClickSearch)=\"handleSearch($event)\"></common-search-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{\n crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\n }\">\n </ng-container>\n </div>\n\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\n <ng-container *ngIf=\"!paginationTemplate\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </ng-container>\n <ng-container *ngIf=\"paginationTemplate\">\n <ng-container [ngTemplateOutlet]=\"paginationTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"fit-content crud-list-body-area\">\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\n <div *ngIf=\"!setting.hiddenToolbar\" class=\"p-grid crudListToolbar\">\n <ng-container>\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('toolbar')\" [ngTemplateOutletContext]=\"{\n selectedItems: model.selectedItems, crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\n }\">\n </ng-container>\n </div>\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <button type=\"button\" pButton label=\"\u0110\u00E1nh STT\" class=\"p-button-text\" style=\"display: none\"\n (click)=\"danhSoThuTuGroupLastest()\"></button>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\"\n [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenReorder\" [ngTemplateOutlet]=\"buttonReorder\">\n </ng-container>\n <button *ngIf=\"!setting.disableShare && model.selectedItems.length > 0\"\n label=\"Chia s\u1EBB li\u00EAn k\u1EBFt\" type=\"button\" pButton pRipple\n [pTooltip]=\"'Chia s\u1EBB li\u00EAn k\u1EBFt' | translate\" tooltipPosition=\"top\"\n class=\"p-button-text p-button-info link-or-action\" icon=\"pi pi-link\"\n (click)=\"createShareLinkMultiple()\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n </div>\n </ng-container>\n <div *ngIf=\"!setting.hiddenAdvanceSearch && !setting.useCommonSearch\"\n class=\"p-col-12 advance-search-container\"\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\n <div class=\"container-table-inner\">\n <ng-container *ngIf=\"!_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"table-border-line --top\"></div>\n <div class=\"table-border-line --right\"></div>\n <div class=\"table-border-line --bottom\"></div>\n <div class=\"table-border-line --left\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\n (onDelete)=\"onDeleteSettings()\" (onCancel)=\"_showSettings = false\">\n</settings>\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\n (onCancel)=\"_showSettingsRowColor = false\">\n</settings-row>\n<!-- <workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\">\n</workflow-setting-dialog> -->\n<div #workflowSettingDialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\"></div>\n<tn-dialog #dialogWfSettingNew [visible]=\"workflowSettingModel.showEditForm\" [header]=\"'C\u1EA5u h\u00ECnh quy tr\u00ECnh nghi\u1EC7p v\u1EE5' | translate\"\n [popupSize]=\"workflowSettingModel.popupSize\" (onHide)=\"workflowSettingModel.showEditForm = false\">\n <!-- <workflow-setting-new #formBase [parentSetting]=\"setting\" (onSaved)=\"onSaveWorkflowSettingsNew($event)\"\n (onCancel)=\"workflowSettingModel.showEditForm = false\"></workflow-setting-new> -->\n <div #workflowsettingnew></div>\n</tn-dialog>\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\n (onCancel)=\"_showSettingsPermission = false\">\n</entity-permission>\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [styleClass]=\"'allow-selected'\" [model]=\"buttonContexts\">\n</p-contextMenu>\n<tn-dialog #dialogProcessWorkflowForm [visible]=\"processWorkflowModel.showEditForm\" [header]=\"processWorkflowModel.header | translate\"\n [popupSize]=\"processWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"processWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%; padding: 1rem\">\n <!-- <process-workflow-form #formBase [businessSetting]=\"processWorkflowModel.data.setting\" [item]=\"currentItem\"\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\n </process-workflow-form> -->\n <div #processWorkflowForm></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogChoYKienForm [visible]=\"choYKienModel.showEditForm\" [header]=\"choYKienModel.header | translate\"\n [popupSize]=\"choYKienModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"choYKienModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <cho-y-kien-form #formBase [bussinessSetting]=\"choYKienModel.data.setting\"\n [rowItem]=\"choYKienModel.data.rowData\" (onSaved)=\"choYKienModel.showEditForm = false\"\n (onCancel)=\"choYKienModel.showEditForm = false\">\n </cho-y-kien-form> -->\n <div #choYKienForm></div>\n </div>\n</tn-dialog>\n<tn-dialog [visible]=\"workflowHistoryModel.showEditForm\" [header]=\"workflowHistoryModel.header | translate\"\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-history-new #formBase [businessSetting]=\"workflowHistoryModel.data.setting\"\n [tableName]=\"workflowHistoryModel.data.tableName\" [item]=\"currentItem\"\n [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\n </workflow-history-new> -->\n <div #workflowHistoryNew></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogDetailTask [visible]=\"detailTaskModel.showEditForm\" [header]=\"detailTaskModel.header | translate\"\n [popupSize]=\"detailTaskModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"detailTaskModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [model]=\"detailTaskModel.data.taskFormModel\" [forceOnlyView]=\"true\"\n (onCancel)=\"detailTaskModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #detailTask></div>\n</tn-dialog>\n\n<tn-dialog #dialogPermissionSharing [visible]=\"permissionSharingModel.showEditForm\" [header]=\"permissionSharingModel.header | translate\"\n [popupSize]=\"permissionSharingModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"permissionSharingModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <permission-sharing #formBase [item]=\"rowDataCurrent\" [baseService]=\"setting.baseService\"\n (onCancel)=\"permissionSharingModel.showEditForm = false\">\n </permission-sharing> -->\n <div #permissionSharing></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogWorkflowPermission [visible]=\"permissionListModel.showEditForm\" [header]=\"permissionListModel.header | translate\"\n [popupSize]=\"permissionListModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"permissionListModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-permission #formBase [item]=\"rowDataCurrent\" [businessSetting]=\"setting\"\n (onCancel)=\"permissionListModel.showEditForm = false\">\n </workflow-permission> -->\n <div #workflowPermission></div>\n </div>\n</tn-dialog>\n<!-- <workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\n</workflow-history-dialog> -->\n<div #workflowPermission *ngIf=\"showHistoryWorkflow\"></div>\n<tn-dialog #dialogstartWorkflow [visible]=\"startWorkflowModel.showEditForm\" [header]=\"startWorkflowModel.header | translate\"\n [popupSize]=\"startWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"startWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <start-workflow #formBase [workflows]=\"startWorkflowModel.data.workflows\"\n [defaultWorkflow]=\"startWorkflowModel.data.defaultWorkflow\"\n (onCancel)=\"startWorkflowModel.showEditForm = false\" (onSaved)=\"handleStartWorkflowFromDialog($event)\">\n </start-workflow> -->\n <div #startWorkflow></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViecForm [visible]=\"congViecModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"congViecModel.header | translate\" [popupSize]=\"congViecModel.popupSize\"\n (onHide)=\"congViecModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [parentSetting]=\"congViecModel.data.congViecSetting\"\n [model]=\"congViecModel.data.model\" (onSaved)=\"congViecModel.showEditForm = false;getData()\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #baseCongViecForm></div>\n</tn-dialog>\n<tn-dialog #dialog *ngIf=\"shareLinkModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"shareLinkModel.header | translate\" [popupSize]=\"shareLinkModel.popupSize\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"shareLinkModel.showEditForm = false\">\n <share-link-by-permission #formBase [setting]=\"setting\" [lstItem]=\"shareLinkModel.data.lstItem\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </share-link-by-permission>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViec [visible]=\"attachedTaskModel.showEditForm\" [header]=\"attachedTaskModel.header | translate\"\n [popupSize]=\"attachedTaskModel.popupSize\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"attachedTaskModel.showEditForm = false\">\n <!-- <base-congviec [serviceCode]=\"setting.baseService.serviceCode\" [entity]=\"setting.baseService.entityName\"\n [itemIdAttach]=\"rowDataCurrent.id\"></base-congviec> -->\n <div #baseCongViec></div>\n</tn-dialog>\n<ng-template #tableGetGroupFieldFalse>\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\n [expandedRowKeys]=\"model.expandedRowKeys\" [(selection)]=\"model.selectedItems\"\n (onRowReorder)=\"handleRowOrdered($event)\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"rowExpansion; context: {$implicit: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n</ng-template>\n<ng-template #tableGetGroupFieldTrue>\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\n (onChange)=\"handleCheckRowGroup(rowData)\">\n </p-checkbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!rowGroup\">\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\n <div class=\"container-row-group\">\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\n [class.sticky]=\"setting.stickyColumn\">\n <i style=\"margin-right:5px\"\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n <div class=\"content-row-group\">\n <ng-container *ngIf=\"!contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n </div>\n </a>\n </div>\n </td>\n </ng-container>\n <ng-container *ngIf=\"rowGroup\">\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\n </ng-container>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n <after-view-checked></after-view-checked>\n</ng-template>\n<ng-template #baseColgroup let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" [style.width]=\"widthCheckbox\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" />\n <col *ngIf=\"rowExpansion\" style=\"width: 2.5rem\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"enableReorderRow\" style=\"width: 30px\" />\n <col *ngIf=\"!setting.hiddenFunctionColumn\" [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n</ng-template>\n<ng-template #buttonAdd>\n <span [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.ADD]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.ADD]\">\n <button type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text\"\n [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\n </span>\n</ng-template>\n<ng-template #buttonExport>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon()\"></button>\n</ng-template>\n<ng-template #buttonExportWord>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-word\"\n class=\"p-button-text p-button-success\" (click)=\"printByReadingHtml()\"></button>\n</ng-template>\n<ng-template #buttonDelete>\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\n [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.DELETE_MULTIPLE]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE_MULTIPLE]\" type=\"button\" pButton pRipple\n [label]=\"'X\u00F3a ' + (model.selectedItems.length) | translate\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #buttonReorder>\n <button\n *ngIf=\"showSaveReorder && enableReorderRow && (_sortField == setting.columnSetting.sortField || _sortDir == 0)\"\n [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.REORDER_SAVE]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.REORDER_SAVE]\" type=\"button\" pButton pRipple\n [label]=\"'L\u01B0u s\u1EAFp x\u1EBFp' | translate\" icon=\"pi pi-save\" class=\"p-button-text p-button-success\"\n (click)=\"saveReorder()\"></button>\n</ng-template>\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"title-row\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\n <th class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!hasTemplate('headerCheckbox') && !setting.useCommonSearch\" type=\"button\" pButton pRipple\n icon=\"pi pi-refresh\" class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"reload()\"></button>\n <p-triStateCheckbox *ngIf=\"setting.useCommonSearch\" [(ngModel)]=\"checkedAll\" binary=\"true\"\n (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\" [class.sticky]=\"setting.stickyColumn\"\n (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\n [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngIf=\"hasTemplate('trHeaderBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\" [pTooltip]=\"col.fullLabel\"\n tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\n [className]=\"col.isPinned && col.width ? col.class : ''\" [class.first-th]=\"i==0\" [escape]=\"false\"\n tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\" [tnSortableColumnDisabled]=\"!col.sort\">\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\n <ng-container *ngIf=\"col.sort || col.sortClient\">\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\n </ng-container>\n </th>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('trHeaderAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\n </ng-container>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" [class.sticky]=\"setting.stickyColumn\">\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [className]=\"col.isPinned && col.width ? col.class + ' cell-header-filter center': 'cell-header-filter center'\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'intWithoutMask'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'currency'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </tr>\n</ng-template>\n<ng-template #buttonBaseSetting>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <th class=\"center setting-cell column-function\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew(dialogWfSettingNew)\"></button>\n <div *ngIf=\"setting.hiddenSetting && setting.hiddenSettingPermission && setting.hiddenSettingWorkflow\"\n class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n\n</ng-template>\n<ng-template #colFunctionHeader>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <ng-container *ngIf=\"setting.hiddenFilterRow\">\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!setting.hiddenFilterRow\">\n <th class=\"column-function\" [class.sticky]=\"setting.stickyColumn\">\n <div class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTh let-col>\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\n {{col.label}}\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n</ng-template>\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\n <tr *ngIf=\"!rowData.template\" [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\" [ngClass]=\"rowData.objStyleClass\"\n [class.ui-state-highlight]=\"rowData._checked\" [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\"\n [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\" (click)=\"eventSelectRow($event, rowData)\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox && !rowData.hidden[fieldCheckbox]\">\n <td class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldCheckbox]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldCheckbox]\">\n <ng-container *ngIf=\"!rowData.hiddenCheckBox\">\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\n </p-checkbox>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n <td *ngIf=\"!setting.hiddenOrderColumn && !rowData.hidden[fieldOrder]\" class=\"stt\" style=\"text-align: center;\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\n <span class=\"row-card\" [ngStyle]=\"rowData.bookmarkStyle\"></span>\n {{rowData[fieldOrder]}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <td *ngIf=\"rowExpansion && !rowData.hidden[fieldColExpand]\" class=\"no-padding center row-expansion-toggle\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColExpand]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColExpand]\">\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!hasTemplate('dynamicColBodys')\">\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <ng-container\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodys')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodys')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"enableReorderRow && !rowData.hidden[fieldColReorder]\" class=\"no-padding center\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColReorder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColReorder]\">\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn && !rowData.hidden[fieldFunction]\">\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldFunction]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldFunction]\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"pi pi-calendar\"\n class=\"p-button-rounded p-button-text p-button-success link-or-action\"\n pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\" tooltipPosition=\"top\"\n (click)=\"showListVersion(rowData)\"></button>\n <button *ngIf=\"!rowData.hiddenEdit\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EDIT]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EDIT]\" type=\"button\" pButton pRipple\n [disabled]=\"disableEdit(rowData)\" [pTooltip]=\"'FORM.EDIT' | translate\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\n (click)=\"edit(rowData)\"></button>\n <button *ngIf=\"!rowData.hiddenDelete\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.DELETE]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE]\" type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [pTooltip]=\"'FORM.DELETE' | translate\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\n (click)=\"delete(rowData)\"></button>\n <ng-container *ngIf=\"!hiddenBtnFunction\">\n <button *ngIf=\"showMenuButtons && menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\" [disabled]=\"rowData.disableFunctionRow\"\n (click)=\"showContextMenu($event, rowData)\"></button>\n </ng-container>\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonAfter')\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n </tr>\n <ng-container *ngIf=\"rowData.template\">\n <ng-container *ngTemplateOutlet=\"rowData.template; context: {\n $implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: eventSelectRow, eventChecked: eventChecked\n }\"></ng-container>\n </ng-container>\n</ng-template>\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && !rowData.hidden[col.field]\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <span *ngIf=\"col.pipe\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\" class=\"contentTd\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <ng-container *ngIf=\"col.click\">\n <a href=\"javascript:;\" (click)=\"col.click(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngIf=\"!col.click\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\" class=\"\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'intWithoutMask'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'currency'\">\n {{rowData[field] | currency:\"VND\"}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'fileUpload'\">\n <ng-container\n *ngTemplateOutlet=\"fileUploadColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fileManager'\">\n <ng-container\n *ngTemplateOutlet=\"fileManagerColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n </a>\n</ng-template>\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\n (click)=\"handleToggleRow(rowData, $event)\"></button>\n</ng-template>\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\n </ng-container>\n <span *ngIf=\"setting.columnSetting.showGroupSize\">\n ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\n</ng-template>\n<ng-template #trangThaiV5 let-rowData=\"rowData\">\n <div class=\"container-text-workflow\">\n <button *ngIf=\"!rowData.__workflowCode && !rowData.hiddenWorkflowAction && !rowData.hiddenStartWorkflow\" pButton\n class=\"p-button-text link-or-action\" label=\"B\u1EAFt \u0111\u1EA7u\" style=\"border: 1px solid #7ca9cd;\"\n pTooltip=\"B\u1EAFt \u0111\u1EA7u ch\u1EA1y quy tr\u00ECnh\" tooltipPosition=\"top\"\n [disabled]=\"rowData.__startingWorkflow && !rowData.__notReadyForStart\"\n (click)=\"showFormStartWorkflow(rowData, dialogstartWorkflow)\"></button>\n <ng-container *ngIf=\"rowData.__workflowCode\">\n <span class=\"content\">{{rowData.__textTrangThai}}</span>\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\n [disabled]=\"showingActionWorkflow\" (click)=\"showActionWorkflow($event, rowData, dialogProcessWorkflowForm, dialogDetailTask, dialogChoYKienForm)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #viewHistory let-rowData=\"rowData\">\n <button pButton icon=\"pi pi-calendar\" class=\"p-button-text p-button-rounded link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED\"\n tooltipPosition=\"top\" (click)=\"viewHistoryWorkflow(setting, rowData)\"></button>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #sortIcon let-field=\"field\">\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\n [ngClass]=\"{'pi-sort-amount-up-alt': field == _sortField && _sortDir === 1, 'pi-sort-amount-down': field == _sortField && _sortDir === -1, 'pi-sort-alt': field != _sortField || _sortDir === 0}\"></i>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onChanged)=\"prepareSearch(col)\" (onHideSmartEvent)=\"onSearch()\"\n (onShow)=\"onShowFilterDropdownPanel($event)\" (onHide)=\"onHideFilterDropdownPanel($event)\"\n (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" [placeholder]=\"col.placeholder\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\" let-control=\"control\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"control\" (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton *ngIf=\"!col.minimizeFilter\"\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n <ng-container *ngIf=\"col.minimizeFilter\">\n <button *ngIf=\"!filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter-slash\"\n class=\"btn-filter-boolean\" (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n <button *ngIf=\"filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter\"\n class=\"btn-filter-boolean p-button-primary\"\n (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #fileUploadColumn let-field=\"field\" let-rowData let-fileSetting=\"fileSetting\">\n <file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingFileInstanceId\"\n [sharedFolderType]=\"fileSetting.control.sharedFolderType\" [readonly]=\"fileSetting.control.readonly\"\n [accept]=\"fileSetting.control.accept\" [(ngModel)]=\"rowData[field]\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </file-upload>\n\n <service-file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingServiceFile\"\n [serviceCode]=\"fileSetting.control.serviceCode\" [parentContext]=\"context\" [entity]=\"fileSetting.control.entity\"\n [entityKey]=\"rowData[fileSetting.control.entityKeyField]\" [control]=\"fileSetting.control\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [(ngModel)]=\"rowData.field\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </service-file-upload>\n</ng-template>\n<ng-template #fileManagerColumn let-rowData let-fileSetting=\"fileSetting\" let-field=\"field\">\n <file-manager [control]=\"fileSetting.control\" [serviceCode]=\"fileSetting.control.serviceCode\"\n [entity]=\"fileSetting.control.entity\" [entityKey]=\"rowData[fileSetting.control.entityKeyField]\"\n [readonly]=\"fileSetting.control.readonly\" [layout]=\"fileSetting.control.layout\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [maxFileSize]=\"fileSetting.control.maxFileSize\"\n [inTaiLieu]=\"fileSetting.control.inTaiLieu\" [(value)]=\"rowData[field]\" [disabled]=\"fileSetting.control.disabled\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\"\n (uploaded)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.UPLOADED)\">\n </file-manager>\n</ng-template>",
|
|
25598
|
+
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\n [ngStyle]=\"_style\">\n <div class=\"ui-helper-clearfix crud-list-header-area\">\n <div *ngIf=\"!setting.hiddenSearch\">\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container *ngIf=\"!setting.useCommonSearch\">\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"setting.useCommonSearch && !hasTemplate('searchCustom')\"\n class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <div style=\"width: 100%;\">\n <common-search-form #commonSearch [parentSetting]=\"setting\" [parentModel]=\"model\"\n [templateFilter]=\"templateFilter\" [parentContext]=\"context\"\n [searchBoxTooltip]=\"setting.toolTipSearhBoxCommon\"\n (onClickSearch)=\"handleSearch($event)\"></common-search-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{\n crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\n }\">\n </ng-container>\n </div>\n\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\n <ng-container *ngIf=\"!paginationTemplate\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </ng-container>\n <ng-container *ngIf=\"paginationTemplate\">\n <ng-container [ngTemplateOutlet]=\"paginationTemplate\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"fit-content crud-list-body-area\">\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\n <div *ngIf=\"!setting.hiddenToolbar && isBtnReady\" class=\"p-grid crudListToolbar\">\n <ng-container>\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('toolbar')\" [ngTemplateOutletContext]=\"{\n selectedItems: model.selectedItems, crudList: this,\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\n }\">\n </ng-container>\n </div>\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\n class=\"p-col-12 button-group function-topbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <button type=\"button\" pButton label=\"\u0110\u00E1nh STT\" class=\"p-button-text\" style=\"display: none\"\n (click)=\"danhSoThuTuGroupLastest()\"></button>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\"\n [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenReorder\" [ngTemplateOutlet]=\"buttonReorder\">\n </ng-container>\n <button *ngIf=\"!setting.disableShare && model.selectedItems.length > 0\"\n label=\"Chia s\u1EBB li\u00EAn k\u1EBFt\" type=\"button\" pButton pRipple\n [pTooltip]=\"'Chia s\u1EBB li\u00EAn k\u1EBFt' | translate\" tooltipPosition=\"top\"\n class=\"p-button-text p-button-info link-or-action\" icon=\"pi pi-link\"\n (click)=\"createShareLinkMultiple()\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n\n <ng-container *ngIf=\"isSuperUser\" [ngTemplateOutlet]=\"buttonAuthorize\">\n </ng-container>\n </div>\n </ng-container>\n <div *ngIf=\"!setting.hiddenAdvanceSearch && !setting.useCommonSearch\"\n class=\"p-col-12 advance-search-container\"\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </div>\n </div>\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\n </div>\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\n <div class=\"container-table-inner\">\n <ng-container *ngIf=\"!_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"_groupField\">\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\n [showScrollHorizontal]=\"showScrollHorizontal\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\n </ng-container>\n </tn-custom-scrollbar>\n <div *ngIf=\"!showScrollBar\">\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"table-border-line --top\"></div>\n <div class=\"table-border-line --right\"></div>\n <div class=\"table-border-line --bottom\"></div>\n <div class=\"table-border-line --left\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\n (onDelete)=\"onDeleteSettings()\" (onCancel)=\"_showSettings = false\">\n</settings>\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\n (onCancel)=\"_showSettingsRowColor = false\">\n</settings-row>\n<!-- <workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\">\n</workflow-setting-dialog> -->\n<div #workflowSettingDialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\"></div>\n<tn-dialog #dialogWfSettingNew [visible]=\"workflowSettingModel.showEditForm\"\n [header]=\"'C\u1EA5u h\u00ECnh quy tr\u00ECnh nghi\u1EC7p v\u1EE5' | translate\" [popupSize]=\"workflowSettingModel.popupSize\"\n (onHide)=\"workflowSettingModel.showEditForm = false\">\n <!-- <workflow-setting-new #formBase [parentSetting]=\"setting\" (onSaved)=\"onSaveWorkflowSettingsNew($event)\"\n (onCancel)=\"workflowSettingModel.showEditForm = false\"></workflow-setting-new> -->\n <div #workflowsettingnew></div>\n</tn-dialog>\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\n (onCancel)=\"_showSettingsPermission = false\">\n</entity-permission>\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [styleClass]=\"'allow-selected'\" [model]=\"buttonContexts\">\n</p-contextMenu>\n<tn-dialog #dialogProcessWorkflowForm [visible]=\"processWorkflowModel.showEditForm\"\n [header]=\"processWorkflowModel.header | translate\" [popupSize]=\"processWorkflowModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"processWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%; padding: 1rem\">\n <!-- <process-workflow-form #formBase [businessSetting]=\"processWorkflowModel.data.setting\" [item]=\"currentItem\"\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\n </process-workflow-form> -->\n <div #processWorkflowForm></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogChoYKienForm [visible]=\"choYKienModel.showEditForm\" [header]=\"choYKienModel.header | translate\"\n [popupSize]=\"choYKienModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"choYKienModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <cho-y-kien-form #formBase [bussinessSetting]=\"choYKienModel.data.setting\"\n [rowItem]=\"choYKienModel.data.rowData\" (onSaved)=\"choYKienModel.showEditForm = false\"\n (onCancel)=\"choYKienModel.showEditForm = false\">\n </cho-y-kien-form> -->\n <div #choYKienForm></div>\n </div>\n</tn-dialog>\n<tn-dialog *ngIf=\"buttonAuthorizeModel.showEditForm\" #dialog [header]=\"buttonAuthorizeModel.header | translate\"\n [popupSize]=\"buttonAuthorizeModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"handleCloseAuthorizeButtonForm()\">\n <settings-authorize-button [authorizeButtonKey]=\"authorizeButtonKey\"\n [dataSource]=\"buttonAuthorizeModel.data.dataSource\"></settings-authorize-button>\n</tn-dialog>\n\n<tn-dialog [visible]=\"workflowHistoryModel.showEditForm\" [header]=\"workflowHistoryModel.header | translate\"\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-history-new #formBase [businessSetting]=\"workflowHistoryModel.data.setting\"\n [tableName]=\"workflowHistoryModel.data.tableName\" [item]=\"currentItem\"\n [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\n </workflow-history-new> -->\n <div #workflowHistoryNew></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogDetailTask [visible]=\"detailTaskModel.showEditForm\" [header]=\"detailTaskModel.header | translate\"\n [popupSize]=\"detailTaskModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\n (onHide)=\"detailTaskModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [model]=\"detailTaskModel.data.taskFormModel\" [forceOnlyView]=\"true\"\n (onCancel)=\"detailTaskModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #detailTask></div>\n</tn-dialog>\n\n<tn-dialog #dialogPermissionSharing [visible]=\"permissionSharingModel.showEditForm\"\n [header]=\"permissionSharingModel.header | translate\" [popupSize]=\"permissionSharingModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"permissionSharingModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <permission-sharing #formBase [item]=\"rowDataCurrent\" [baseService]=\"setting.baseService\"\n (onCancel)=\"permissionSharingModel.showEditForm = false\">\n </permission-sharing> -->\n <div #permissionSharing></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogWorkflowPermission [visible]=\"permissionListModel.showEditForm\"\n [header]=\"permissionListModel.header | translate\" [popupSize]=\"permissionListModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"permissionListModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <workflow-permission #formBase [item]=\"rowDataCurrent\" [businessSetting]=\"setting\"\n (onCancel)=\"permissionListModel.showEditForm = false\">\n </workflow-permission> -->\n <div #workflowPermission></div>\n </div>\n</tn-dialog>\n<!-- <workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\n</workflow-history-dialog> -->\n<div #workflowPermission *ngIf=\"showHistoryWorkflow\"></div>\n<tn-dialog #dialogstartWorkflow [visible]=\"startWorkflowModel.showEditForm\"\n [header]=\"startWorkflowModel.header | translate\" [popupSize]=\"startWorkflowModel.popupSize\"\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"startWorkflowModel.showEditForm = false\">\n <div style=\"height: 100%\">\n <!-- <start-workflow #formBase [workflows]=\"startWorkflowModel.data.workflows\"\n [defaultWorkflow]=\"startWorkflowModel.data.defaultWorkflow\"\n (onCancel)=\"startWorkflowModel.showEditForm = false\" (onSaved)=\"handleStartWorkflowFromDialog($event)\">\n </start-workflow> -->\n <div #startWorkflow></div>\n </div>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViecForm [visible]=\"congViecModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"congViecModel.header | translate\" [popupSize]=\"congViecModel.popupSize\"\n (onHide)=\"congViecModel.showEditForm = false\">\n <!-- <base-congviec-form #formBase [parentSetting]=\"congViecModel.data.congViecSetting\"\n [model]=\"congViecModel.data.model\" (onSaved)=\"congViecModel.showEditForm = false;getData()\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </base-congviec-form> -->\n <div #baseCongViecForm></div>\n</tn-dialog>\n<tn-dialog #dialog *ngIf=\"shareLinkModel.showEditForm\" [styleClass]=\"'congviec-form tn-form-dialog'\"\n [header]=\"shareLinkModel.header | translate\" [popupSize]=\"shareLinkModel.popupSize\" [useDefaultScrollBar]=\"true\"\n (onHide)=\"shareLinkModel.showEditForm = false\">\n <share-link-by-permission #formBase [setting]=\"setting\" [lstItem]=\"shareLinkModel.data.lstItem\"\n (onCancel)=\"congViecModel.showEditForm = false\">\n </share-link-by-permission>\n</tn-dialog>\n<tn-dialog #dialogBaseCongViec [visible]=\"attachedTaskModel.showEditForm\"\n [header]=\"attachedTaskModel.header | translate\" [popupSize]=\"attachedTaskModel.popupSize\"\n [useDefaultScrollBar]=\"true\" (onHide)=\"attachedTaskModel.showEditForm = false\">\n <!-- <base-congviec [serviceCode]=\"setting.baseService.serviceCode\" [entity]=\"setting.baseService.entityName\"\n [itemIdAttach]=\"rowDataCurrent.id\"></base-congviec> -->\n <div #baseCongViec></div>\n</tn-dialog>\n<ng-template #tableGetGroupFieldFalse>\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\n [expandedRowKeys]=\"model.expandedRowKeys\" [(selection)]=\"model.selectedItems\"\n (onRowReorder)=\"handleRowOrdered($event)\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\n <ng-container\n *ngTemplateOutlet=\"rowExpansion; context: {$implicit: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n</ng-template>\n<ng-template #tableGetGroupFieldTrue>\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\n (onChange)=\"handleCheckRowGroup(rowData)\">\n </p-checkbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!rowGroup\">\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\n <div class=\"container-row-group\">\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\n [class.sticky]=\"setting.stickyColumn\">\n <i style=\"margin-right:5px\"\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n <div class=\"content-row-group\">\n <ng-container *ngIf=\"!contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"contentRowGroup\">\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\n </ng-container>\n </ng-container>\n </div>\n </a>\n </div>\n </td>\n </ng-container>\n <ng-container *ngIf=\"rowGroup\">\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\n </ng-container>\n </ng-container>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\n <ng-container\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\n </ng-container>\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\n (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\n </ng-template>\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\n </ng-template>\n </p-table>\n <after-view-checked></after-view-checked>\n</ng-template>\n<ng-template #baseColgroup let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" [style.width]=\"widthCheckbox\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" />\n <col *ngIf=\"rowExpansion\" style=\"width: 2.5rem\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"enableReorderRow\" style=\"width: 30px\" />\n <col *ngIf=\"!setting.hiddenFunctionColumn\" [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n</ng-template>\n<ng-template #buttonAdd>\n <button #buttonBase appAuthorize type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\"\n class=\"p-button-text\" [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\n</ng-template>\n<ng-template #buttonExport>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"fas fa-file-excel\" class=\"p-button-text p-button-success\"\n (click)=\"xuatCacMucDaChon()\"></button>\n</ng-template>\n<ng-template #buttonAuthorize>\n <button *ngIf=\"!setting.hiddenAuthorizeButton && authorizeButtonKey\" type=\"button\" pButton\n pRipple label=\"Ph\u00E2n quy\u1EC1n n\u00FAt\" icon=\"fas fa-tools\" class=\"p-button-text\"\n (click)=\"onShowFormSettingButton()\"></button>\n</ng-template>\n\n<ng-template #buttonExportWord>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\"\n icon=\"fas fa-file-word\" class=\"p-button-text p-button-success\" (click)=\"printByReadingHtml()\"></button>\n</ng-template>\n<ng-template #buttonDelete>\n <button #buttonBase *ngIf=\"(!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete())\"\n appAuthorize type=\"button\" pButton pRipple label=\"X\u00F3a c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #buttonReorder>\n <button #buttonBase\n *ngIf=\"showSaveReorder && enableReorderRow && (_sortField == setting.columnSetting.sortField || _sortDir == 0)\"\n appAuthorize type=\"button\" pButton pRipple label=\"L\u01B0u s\u1EAFp x\u1EBFp\" icon=\"pi pi-save\"\n class=\"p-button-text p-button-success\" (click)=\"saveReorder()\"></button>\n</ng-template>\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"title-row\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\n <th class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!hasTemplate('headerCheckbox') && !setting.useCommonSearch\" type=\"button\" pButton pRipple\n icon=\"pi pi-refresh\" class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"reload()\"></button>\n <p-triStateCheckbox *ngIf=\"setting.useCommonSearch\" [(ngModel)]=\"checkedAll\" binary=\"true\"\n (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\" [class.sticky]=\"setting.stickyColumn\"\n (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\n [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngIf=\"hasTemplate('trHeaderBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\" [pTooltip]=\"col.fullLabel\"\n tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\n [className]=\"col.isPinned && col.width ? col.class : ''\" [class.first-th]=\"i==0\" [escape]=\"false\"\n tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\" [tnSortableColumnDisabled]=\"!col.sort\">\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\n <ng-container *ngIf=\"col.sort || col.sortClient\">\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\n </ng-container>\n </th>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('trHeaderAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('trHeaderAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns}\"></ng-container>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\n </ng-container>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" [class.sticky]=\"setting.stickyColumn\">\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [className]=\"col.isPinned && col.width ? col.class + ' cell-header-filter center': 'cell-header-filter center'\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'intWithoutMask'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'currency'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col, control: filterSchema.dateTimeRange}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </tr>\n</ng-template>\n<ng-template #buttonBaseSetting>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <th class=\"center setting-cell column-function\" [class.sticky]=\"setting.stickyColumn\">\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"!checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew(dialogWfSettingNew)\"></button>\n <div *ngIf=\"setting.hiddenSetting && setting.hiddenSettingPermission && setting.hiddenSettingWorkflow\"\n class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n\n</ng-template>\n<ng-template #colFunctionHeader>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\n <ng-container *ngIf=\"setting.hiddenFilterRow\">\n <ng-container *ngTemplateOutlet=\"buttonBaseSetting\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!setting.hiddenFilterRow\">\n <th class=\"column-function\" [class.sticky]=\"setting.stickyColumn\">\n <div class=\"cell-header-function\">\n <span>{{'GRID.FUNCTION'| translate}}</span>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTh let-col>\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\n {{col.label}}\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n</ng-template>\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\n <tr *ngIf=\"!rowData.template\" [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\" [ngClass]=\"rowData.objStyleClass\"\n [class.ui-state-highlight]=\"rowData._checked\" [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\"\n [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\" (click)=\"eventSelectRow($event, rowData)\">\n <ng-container *ngIf=\"!setting.hiddenCheckbox && !rowData.hidden[fieldCheckbox]\">\n <td class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldCheckbox]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldCheckbox]\">\n <ng-container *ngIf=\"!rowData.hiddenCheckBox\">\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\n </p-checkbox>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n <td *ngIf=\"!setting.hiddenOrderColumn && !rowData.hidden[fieldOrder]\" class=\"stt\" style=\"text-align: center;\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\n <span class=\"row-card\" [ngStyle]=\"rowData.bookmarkStyle\"></span>\n {{rowData[fieldOrder]}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <td *ngIf=\"rowExpansion && !rowData.hidden[fieldColExpand]\" class=\"no-padding center row-expansion-toggle\"\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColExpand]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColExpand]\">\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!hasTemplate('dynamicColBodys')\">\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysBefore')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysBefore')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <ng-container\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodysAfter')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodysAfter')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hasTemplate('dynamicColBodys')\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('dynamicColBodys')\"\n [ngTemplateOutletContext]=\"{$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"enableReorderRow && !rowData.hidden[fieldColReorder]\" class=\"no-padding center\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColReorder]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColReorder]\">\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn && !rowData.hidden[fieldFunction]\">\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldFunction]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldFunction]\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"pi pi-calendar\"\n class=\"p-button-rounded p-button-text p-button-success link-or-action\"\n pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\" tooltipPosition=\"top\"\n (click)=\"showListVersion(rowData)\"></button>\n <button #buttonBase *ngIf=\"!rowData.hiddenEdit\" appAuthorize type=\"button\" pButton pRipple\n [disabled]=\"disableEdit(rowData)\" [pTooltip]=\"'FORM.EDIT' | translate\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\n (click)=\"edit(rowData)\"></button>\n <button #buttonBase *ngIf=\"!rowData.hiddenDelete\" appAuthorize type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [pTooltip]=\"'FORM.DELETE' | translate\" tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\n (click)=\"delete(rowData)\"></button>\n <ng-container *ngIf=\"!hiddenBtnFunction\">\n <button *ngIf=\"showMenuButtons && menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\" [disabled]=\"rowData.disableFunctionRow\"\n (click)=\"showContextMenu($event, rowData)\"></button>\n </ng-container>\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonAfter')\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </ng-container>\n </tr>\n <ng-container *ngIf=\"rowData.template\">\n <ng-container *ngTemplateOutlet=\"rowData.template; context: {\n $implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: eventSelectRow, eventChecked: eventChecked\n }\"></ng-container>\n </ng-container>\n</ng-template>\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && !rowData.hidden[col.field]\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [style.left]=\"col.isPinned && col.left ? (col.left + 'px') : ''\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <span *ngIf=\"col.pipe\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\" class=\"contentTd\">\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span>\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <ng-container *ngIf=\"col.click\">\n <a href=\"javascript:;\" (click)=\"col.click(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngIf=\"!col.click\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\"\n tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </ng-container>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\" class=\"\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{rowData[field] | tnDate:col.dataType:col.format}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'intWithoutMask'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'currency'\">\n {{rowData[field] | currency:\"VND\"}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field] | number}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'fileUpload'\">\n <ng-container\n *ngTemplateOutlet=\"fileUploadColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fileManager'\">\n <ng-container\n *ngTemplateOutlet=\"fileManagerColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\n </a>\n</ng-template>\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\n (click)=\"handleToggleRow(rowData, $event)\"></button>\n</ng-template>\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\n </ng-container>\n <span *ngIf=\"setting.columnSetting.showGroupSize\">\n ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\n</ng-template>\n<ng-template #trangThaiV5 let-rowData=\"rowData\">\n <div class=\"container-text-workflow\">\n <button *ngIf=\"!rowData.__workflowCode && !rowData.hiddenWorkflowAction && !rowData.hiddenStartWorkflow\" pButton\n class=\"p-button-text link-or-action\" label=\"B\u1EAFt \u0111\u1EA7u\" style=\"border: 1px solid #7ca9cd;\"\n pTooltip=\"B\u1EAFt \u0111\u1EA7u ch\u1EA1y quy tr\u00ECnh\" tooltipPosition=\"top\"\n [disabled]=\"rowData.__startingWorkflow && !rowData.__notReadyForStart\"\n (click)=\"showFormStartWorkflow(rowData, dialogstartWorkflow)\"></button>\n <ng-container *ngIf=\"rowData.__workflowCode\">\n <span class=\"content\">{{rowData.__textTrangThai}}</span>\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\n [disabled]=\"showingActionWorkflow\"\n (click)=\"showActionWorkflow($event, rowData, dialogProcessWorkflowForm, dialogDetailTask, dialogChoYKienForm)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #viewHistory let-rowData=\"rowData\">\n <button pButton icon=\"pi pi-calendar\" class=\"p-button-text p-button-rounded link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED\"\n tooltipPosition=\"top\" (click)=\"viewHistoryWorkflow(setting, rowData)\"></button>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #sortIcon let-field=\"field\">\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\n [ngClass]=\"{'pi-sort-amount-up-alt': field == _sortField && _sortDir === 1, 'pi-sort-amount-down': field == _sortField && _sortDir === -1, 'pi-sort-alt': field != _sortField || _sortDir === 0}\"></i>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onChanged)=\"prepareSearch(col)\" (onHideSmartEvent)=\"onSearch()\"\n (onShow)=\"onShowFilterDropdownPanel($event)\" (onHide)=\"onHideFilterDropdownPanel($event)\"\n (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" [placeholder]=\"col.placeholder\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\" let-control=\"control\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"control\" (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton *ngIf=\"!col.minimizeFilter\"\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n <ng-container *ngIf=\"col.minimizeFilter\">\n <button *ngIf=\"!filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter-slash\"\n class=\"btn-filter-boolean\" (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n <button *ngIf=\"filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter\"\n class=\"btn-filter-boolean p-button-primary\"\n (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #fileUploadColumn let-field=\"field\" let-rowData let-fileSetting=\"fileSetting\">\n <file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingFileInstanceId\"\n [sharedFolderType]=\"fileSetting.control.sharedFolderType\" [readonly]=\"fileSetting.control.readonly\"\n [accept]=\"fileSetting.control.accept\" [(ngModel)]=\"rowData[field]\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </file-upload>\n\n <service-file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingServiceFile\"\n [serviceCode]=\"fileSetting.control.serviceCode\" [parentContext]=\"context\" [entity]=\"fileSetting.control.entity\"\n [entityKey]=\"rowData[fileSetting.control.entityKeyField]\" [control]=\"fileSetting.control\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [(ngModel)]=\"rowData.field\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\n </service-file-upload>\n</ng-template>\n<ng-template #fileManagerColumn let-rowData let-fileSetting=\"fileSetting\" let-field=\"field\">\n <file-manager [control]=\"fileSetting.control\" [serviceCode]=\"fileSetting.control.serviceCode\"\n [entity]=\"fileSetting.control.entity\" [entityKey]=\"rowData[fileSetting.control.entityKeyField]\"\n [readonly]=\"fileSetting.control.readonly\" [layout]=\"fileSetting.control.layout\"\n [fileDataService]=\"fileSetting.control.fileDataService\" [maxFileSize]=\"fileSetting.control.maxFileSize\"\n [inTaiLieu]=\"fileSetting.control.inTaiLieu\" [(value)]=\"rowData[field]\" [disabled]=\"fileSetting.control.disabled\"\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\"\n (uploaded)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.UPLOADED)\">\n </file-manager>\n</ng-template>",
|
|
25384
25599
|
providers: [i3.DecimalPipe, i3.DatePipe],
|
|
25385
25600
|
styles: [".container-table{display:flex;overflow:hidden;flex-direction:column}.container-table .container-table-inner{display:flex;position:relative;height:auto;max-height:100%;min-height:60px}.container-table-inner>tn-custom-scrollbar{width:100%}.cell-checkbox{text-align:center}.pick-color-row{top:0;left:0;right:0;bottom:0;margin:auto;position:absolute;display:flex;flex-wrap:wrap;width:1.4em;height:1.4em;border:1px solid #d1d1d1;border-radius:2px;cursor:pointer}.pick-color-row>div{flex:0 0 50%;background:#84d140;border:1px solid #fff}.pick-color-row>div:nth-child(2){background:#fc6868}.pick-color-row>div:nth-child(3){background:#fbc02d}.pick-color-row>div:nth-child(4){background:#7dc5ff}.cell-header-function{display:flex;align-items:center}.cell-header-function>span{text-align:center;flex:1 1}.cell-header-function button{width:24px;height:24px;padding:0;margin:0}.group-icon{font-weight:400;color:#256aa2}.group-icon i{font-size:.8em;margin-right:5px}.center{text-align:center!important}.row-card{position:absolute;left:0;top:0;width:5px;height:100%}.column-function{min-width:100px;padding:0}.custom-search-area{margin:-.5em -1em .5em;padding-left:.5em;padding-right:.5em;background-color:#f2f2f2}.main-title>h1{font-size:1.2em}.filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.container-text-workflow{display:flex;align-items:center;justify-content:center}.container-text-workflow .link-or-action{color:#2196f3;cursor:pointer}.container-text-workflow .content{flex:1 1}.btnReload{height:2rem!important;width:2rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.toggle-showfull{color:#00f;cursor:pointer;font-size:.8rem;white-space:nowrap;font-weight:700}.col-share-permission>div:not(:last-child){margin-bottom:5px}.advance-search-container{display:flex;justify-content:flex-end}.btn-filter-boolean{width:26px;height:26px}.btn-filter-boolean:not(.p-button-primary),.btn-filter-boolean:not(.p-button-primary):hover{background:#f5f6f8;color:#6c757d;border-color:#ced4da}::ng-deep crud-list advance-search{display:block;flex:1;max-width:400px}::ng-deep crud-list .ps__rail-x,::ng-deep crud-list .ps__rail-y{z-index:5}::ng-deep crud-list .main-title>*>h1{font-size:1.2em}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th.cell-fixed-filter{z-index:999}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th.cell-fixed-filter .fixed-filter{z-index:10;position:fixed;min-width:200px}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th .container-icon-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}::ng-deep crud-list .check-all-custom{position:absolute;width:0;height:0}::ng-deep crud-list .cell-header-filter{position:relative}::ng-deep crud-list .cell-header-filter .tn-dropdown{height:32px}::ng-deep crud-list .cell-header-filter tn-mask .p-inputtext{width:100%}::ng-deep crud-list .cell-header-filter .filter-box{display:flex;min-width:0;background-color:#fff;border-radius:3px}::ng-deep crud-list .cell-header-filter .filter-box>div{flex:1;border:1px solid #ced4da;border-right:none;border-radius:3px 0 0 3px;outline:none;overflow:hidden}::ng-deep crud-list .cell-header-filter .filter-box>span{cursor:pointer;min-width:unset;flex-basis:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:#f5f6f8;color:#6c757d;border:1px solid #ced4da;outline:none}::ng-deep crud-list .cell-header-filter .filter-box>span.action-clear{border-radius:0 3px 3px 0}::ng-deep crud-list .cell-header-filter .filter-box>span.action-clear.dirty{color:#008eff}::ng-deep crud-list .cell-header-filter .filter-box input{padding-left:5px;padding-right:5px;border:none;box-shadow:none!important}::ng-deep crud-list .cell-header-filter .filter-box:not(.no-transition){transition:min-width .1s}::ng-deep crud-list .cell-header-filter .filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep crud-list .cell-header-filter .p-multiselect-label.p-placeholder{padding-left:.5rem;padding-right:.5rem}::ng-deep crud-list .cell-header-filter.focus-within,::ng-deep crud-list .cell-header-filter:focus-within{z-index:10!important}::ng-deep crud-list .cell-header-filter.focus-within .filter-boolean-box .p-button,::ng-deep crud-list .cell-header-filter:focus-within .filter-boolean-box .p-button{z-index:10}::ng-deep crud-list .cell-header-filter.focus-within .filter-box>div,::ng-deep crud-list .cell-header-filter:focus-within .filter-box>div{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box{position:absolute;top:calc(50% - 16px);min-width:250px;z-index:2;box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763)}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box>div,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box>div{flex:1;box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box>span.action-clear,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box>span.action-clear{display:flex}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box.boolean-filter,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box.boolean-filter{min-width:140px}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box.boolean-filter>div,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep crud-list .cell-header-filter.focus-within:nth-last-child(2) .short-filter-box,::ng-deep crud-list .cell-header-filter:focus-within:nth-last-child(2) .short-filter-box{left:50%;transform:translateX(-50%)}::ng-deep crud-list .cell-header-filter:last-child .filter-box{right:3px}::ng-deep crud-list .table-border-line{position:absolute;z-index:5;background-color:#eee}::ng-deep crud-list .table-border-line.--left,::ng-deep crud-list .table-border-line.--right{top:0;bottom:0;width:1px}::ng-deep crud-list .table-border-line.--bottom,::ng-deep crud-list .table-border-line.--top{left:0;right:0;height:1px}::ng-deep crud-list .table-border-line.--left{left:0}::ng-deep crud-list .table-border-line.--right{right:0}::ng-deep crud-list .table-border-line.--top{top:0}::ng-deep crud-list .table-border-line.--bottom{bottom:0}::ng-deep crud-list .filter-boolean-box{text-align:center}::ng-deep crud-list .filter-boolean-box .p-selectbutton{white-space:nowrap}::ng-deep crud-list .custom-search-area crud-form{width:100%}::ng-deep crud-list .custom-search-area .main-container-search-inner .container-control{overflow:hidden;padding-bottom:0}::ng-deep crud-list>p-contextmenu{display:none}::ng-deep crud-list .contentTd{overflow:hidden;display:-webkit-box;-webkit-line-clamp:7;-webkit-box-orient:vertical}@media (max-width:640px){::ng-deep crud-list .--table-responsive .p-datatable-wrapper{padding:1px}}"]
|
|
25386
25601
|
},] }
|
|
@@ -25693,6 +25908,7 @@
|
|
|
25693
25908
|
_this.hasCrudList = true;
|
|
25694
25909
|
_this.customGetData = false;
|
|
25695
25910
|
_this.readyToTrinhKy = false;
|
|
25911
|
+
_this.showAllButtons = false;
|
|
25696
25912
|
_this.plusUrl = '';
|
|
25697
25913
|
_this.dataSearchCommon = {};
|
|
25698
25914
|
_this.popupSizeMax = new PopupSize({ maximize: true });
|
|
@@ -25791,7 +26007,7 @@
|
|
|
25791
26007
|
};
|
|
25792
26008
|
ListBase.prototype.mergeInfoToColumnSchema = function () {
|
|
25793
26009
|
var _this = this;
|
|
25794
|
-
var i = 0, constWidth = 83, sumWidth = 0, widthColBefore = 0; // 83 tổng chiều dài checkbox + stt crud-list
|
|
26010
|
+
var i = 0, constWidth = 83, sumWidth = 0, widthColBefore = 0; // 83 tổng chiều dài checkbox + stt crud-list
|
|
25795
26011
|
if (this.setting.hiddenCheckbox)
|
|
25796
26012
|
constWidth -= 35;
|
|
25797
26013
|
if (this.setting.hiddenOrderColumn)
|
|
@@ -26119,6 +26335,7 @@
|
|
|
26119
26335
|
ListBase.prototype.processGetData = function (response) {
|
|
26120
26336
|
return __awaiter(this, void 0, void 0, function () {
|
|
26121
26337
|
var _a, dataSource, rawDataSource, resetSelectedItems;
|
|
26338
|
+
var _this = this;
|
|
26122
26339
|
return __generator(this, function (_b) {
|
|
26123
26340
|
switch (_b.label) {
|
|
26124
26341
|
case 0:
|
|
@@ -26154,11 +26371,26 @@
|
|
|
26154
26371
|
// this._getRefDataDropdown(this.model.dataSource);
|
|
26155
26372
|
// K dùng hàm ở trên vì đối với tree list thì model.dataSource đã bị tái cấu trúc
|
|
26156
26373
|
this._getRefDataDropdown(rawDataSource);
|
|
26374
|
+
setTimeout(function () {
|
|
26375
|
+
_this.setAuthorizeButtons();
|
|
26376
|
+
}, 10);
|
|
26157
26377
|
return [2 /*return*/];
|
|
26158
26378
|
}
|
|
26159
26379
|
});
|
|
26160
26380
|
});
|
|
26161
26381
|
};
|
|
26382
|
+
ListBase.prototype.setAuthorizeButtons = function () {
|
|
26383
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
26384
|
+
return __generator(this, function (_a) {
|
|
26385
|
+
if (this.setting.hiddenAuthorizeButton) {
|
|
26386
|
+
this.crudList.setBtnReady(true);
|
|
26387
|
+
return [2 /*return*/];
|
|
26388
|
+
}
|
|
26389
|
+
this.crudList.setAuthorizeButton(this.lstButtonElement['_results']);
|
|
26390
|
+
return [2 /*return*/];
|
|
26391
|
+
});
|
|
26392
|
+
});
|
|
26393
|
+
};
|
|
26162
26394
|
ListBase.prototype.beforeRenderDataSource = function (datasource) {
|
|
26163
26395
|
return datasource;
|
|
26164
26396
|
};
|
|
@@ -26876,6 +27108,7 @@
|
|
|
26876
27108
|
{ type: Boolean }
|
|
26877
27109
|
]; };
|
|
26878
27110
|
ListBase.propDecorators = {
|
|
27111
|
+
lstButtonElement: [{ type: i0.ViewChildren, args: ['button',] }],
|
|
26879
27112
|
contentCrudList: [{ type: i0.ViewChild, args: [CrudListComponent,] }],
|
|
26880
27113
|
contentTreeTable: [{ type: i0.ViewChild, args: [TreeTableComponent,] }],
|
|
26881
27114
|
parentModel: [{ type: i0.Input }],
|
|
@@ -38351,10 +38584,11 @@
|
|
|
38351
38584
|
]; };
|
|
38352
38585
|
|
|
38353
38586
|
var AuthorizeDirective = /** @class */ (function () {
|
|
38354
|
-
function AuthorizeDirective(_el, _permissionService, _userService, _moduleConfigService) {
|
|
38587
|
+
function AuthorizeDirective(_el, _permissionService, _userService, _commonService, _moduleConfigService) {
|
|
38355
38588
|
this._el = _el;
|
|
38356
38589
|
this._permissionService = _permissionService;
|
|
38357
38590
|
this._userService = _userService;
|
|
38591
|
+
this._commonService = _commonService;
|
|
38358
38592
|
this._moduleConfigService = _moduleConfigService;
|
|
38359
38593
|
this._permissionTypes = exports.PermissionTypes.CONTROL;
|
|
38360
38594
|
this.ignoreAdmin = false;
|
|
@@ -38382,13 +38616,16 @@
|
|
|
38382
38616
|
configurable: true
|
|
38383
38617
|
});
|
|
38384
38618
|
AuthorizeDirective.prototype.ngOnInit = function () {
|
|
38619
|
+
};
|
|
38620
|
+
AuthorizeDirective.prototype.ngAfterViewInit = function () {
|
|
38385
38621
|
var _this = this;
|
|
38386
|
-
|
|
38387
|
-
return;
|
|
38388
|
-
}
|
|
38622
|
+
this.setAuthorizeButton();
|
|
38389
38623
|
if (this._moduleCode) {
|
|
38390
38624
|
this.appCode = this._moduleCode;
|
|
38391
38625
|
}
|
|
38626
|
+
if (!this.enableAuthorize) {
|
|
38627
|
+
return;
|
|
38628
|
+
}
|
|
38392
38629
|
var currentUser = this._userService.getCurrentUser();
|
|
38393
38630
|
if (!currentUser || !(this.appCode)) {
|
|
38394
38631
|
console.log('Không đọc được user hoặc appCode');
|
|
@@ -38420,6 +38657,31 @@
|
|
|
38420
38657
|
}
|
|
38421
38658
|
});
|
|
38422
38659
|
};
|
|
38660
|
+
AuthorizeDirective.prototype.setAuthorizeButton = function () {
|
|
38661
|
+
var _a, _b, _c;
|
|
38662
|
+
var key = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');
|
|
38663
|
+
if (i0.isDevMode()) {
|
|
38664
|
+
key = this.appCode + "_" + window.location.pathname.substring(1).toUpperCase();
|
|
38665
|
+
}
|
|
38666
|
+
// const componentName = this._element.closest(EnumProperties.CRUD_LIST)?.parentNode[EnumProperties.TAG_NAME];
|
|
38667
|
+
// if (componentName && !key.endsWith(componentName)) {
|
|
38668
|
+
// key += `_${componentName}`;
|
|
38669
|
+
// }
|
|
38670
|
+
var buttonText = (_b = (_a = this._element.getAttribute(exports.EnumProperties.LABEL)) !== null && _a !== void 0 ? _a : this._element.getAttribute(exports.EnumProperties.NG_REFLECT_TEXT)) !== null && _b !== void 0 ? _b : this._element.getAttribute(exports.EnumProperties.NG_REFLECT_LABEL);
|
|
38671
|
+
if (!buttonText) {
|
|
38672
|
+
this.enableAuthorize = false;
|
|
38673
|
+
return;
|
|
38674
|
+
}
|
|
38675
|
+
this.buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
38676
|
+
var permissionCode = "[" + key + "]_[" + this._commonService.convertStringToUnSign(buttonText).replace(/ /g, '_').toUpperCase() + "]";
|
|
38677
|
+
var isSetAuthorize = (_c = this.buttonSetting[key]) === null || _c === void 0 ? void 0 : _c.find(function (p) { return p.code == permissionCode; });
|
|
38678
|
+
if (isSetAuthorize) {
|
|
38679
|
+
this.permission = permissionCode;
|
|
38680
|
+
}
|
|
38681
|
+
else {
|
|
38682
|
+
this.enableAuthorize = false;
|
|
38683
|
+
}
|
|
38684
|
+
};
|
|
38423
38685
|
AuthorizeDirective.prototype.ngAfterContentChecked = function () {
|
|
38424
38686
|
if (this._label && !this._bind && this._element.innerHTML !== '' && this.keepHTML) {
|
|
38425
38687
|
this._label.innerHTML = this._element.innerHTML;
|
|
@@ -38438,6 +38700,7 @@
|
|
|
38438
38700
|
{ type: i0.ElementRef },
|
|
38439
38701
|
{ type: PermissionService },
|
|
38440
38702
|
{ type: UserService },
|
|
38703
|
+
{ type: CommonService },
|
|
38441
38704
|
{ type: ModuleConfigService }
|
|
38442
38705
|
]; };
|
|
38443
38706
|
AuthorizeDirective.propDecorators = {
|
|
@@ -49749,6 +50012,174 @@
|
|
|
49749
50012
|
parentSetting: [{ type: i0.Input }]
|
|
49750
50013
|
};
|
|
49751
50014
|
|
|
50015
|
+
var SettingAuthorizeButtonComponent = /** @class */ (function (_super) {
|
|
50016
|
+
__extends(SettingAuthorizeButtonComponent, _super);
|
|
50017
|
+
function SettingAuthorizeButtonComponent(_injector, _basePermissionService, _moduleConfigService) {
|
|
50018
|
+
var _this = _super.call(this, _injector) || this;
|
|
50019
|
+
_this._injector = _injector;
|
|
50020
|
+
_this._basePermissionService = _basePermissionService;
|
|
50021
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
50022
|
+
_this.authorizeButtonKey = '';
|
|
50023
|
+
_this.dataSource = [];
|
|
50024
|
+
_this.appCode = '';
|
|
50025
|
+
return _this;
|
|
50026
|
+
}
|
|
50027
|
+
SettingAuthorizeButtonComponent.prototype.ngOnInit = function () {
|
|
50028
|
+
this.appCode = this._moduleConfigService.getConfig().appCode;
|
|
50029
|
+
this.setting.baseService = this._basePermissionService;
|
|
50030
|
+
this.customGetData = true;
|
|
50031
|
+
this.setting.hiddenAdvanceSearch = true;
|
|
50032
|
+
this.setting.hiddenHeader = true;
|
|
50033
|
+
this.setting.heightType = exports.HeightType.dynamic;
|
|
50034
|
+
this.setting.hiddenOrderColumn = true;
|
|
50035
|
+
this.setting.hiddenFilterRow = true;
|
|
50036
|
+
this.setting.hiddenSettingWorkflow = true;
|
|
50037
|
+
this.setting.hiddenAuthorizeButton = true;
|
|
50038
|
+
this.setting.hiddenSettingPermission = true;
|
|
50039
|
+
this.setting.fixHeightTypeInDialog = false;
|
|
50040
|
+
this.setting.hiddenCheckbox = false;
|
|
50041
|
+
this.setting.showEditLink = false;
|
|
50042
|
+
this.setting.modelSchemas = [
|
|
50043
|
+
new ModelSchema({
|
|
50044
|
+
field: 'permissionCode',
|
|
50045
|
+
name: 'Mã',
|
|
50046
|
+
}),
|
|
50047
|
+
new ModelSchema({
|
|
50048
|
+
field: 'rawText',
|
|
50049
|
+
name: 'Tên',
|
|
50050
|
+
}),
|
|
50051
|
+
new ModelSchema({
|
|
50052
|
+
field: 'isAuthorize',
|
|
50053
|
+
name: 'Đã tạo quyền',
|
|
50054
|
+
}),
|
|
50055
|
+
new ModelSchema({
|
|
50056
|
+
field: 'ma1',
|
|
50057
|
+
name: 'Mã',
|
|
50058
|
+
}),
|
|
50059
|
+
];
|
|
50060
|
+
this.setting.cols = [
|
|
50061
|
+
new ColumnSchemaBase({ field: 'permissionCode', sort: false, showEditLink: false }),
|
|
50062
|
+
new ColumnSchemaBase({ field: 'rawText', width: '230px', sort: false }),
|
|
50063
|
+
new ColumnSchemaBase({ field: 'isAuthorize', dataType: exports.DataType.boolean, width: '100px', sort: false }),
|
|
50064
|
+
];
|
|
50065
|
+
_super.prototype.ngOnInit.call(this);
|
|
50066
|
+
};
|
|
50067
|
+
SettingAuthorizeButtonComponent.prototype.getDataCustom = function (gridInfo) {
|
|
50068
|
+
this.model.dataSource = this.dataSource;
|
|
50069
|
+
this.afterGetData();
|
|
50070
|
+
};
|
|
50071
|
+
SettingAuthorizeButtonComponent.prototype.addBasePermission = function (rowData) {
|
|
50072
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
50073
|
+
var insertRes;
|
|
50074
|
+
return __generator(this, function (_a) {
|
|
50075
|
+
switch (_a.label) {
|
|
50076
|
+
case 0: return [4 /*yield*/, this._basePermissionService.post(rowData)];
|
|
50077
|
+
case 1:
|
|
50078
|
+
insertRes = _a.sent();
|
|
50079
|
+
if (insertRes.success) {
|
|
50080
|
+
this._notifierService.showSuccess('Thêm quyền thành công');
|
|
50081
|
+
this.updateDataSource(insertRes.data);
|
|
50082
|
+
return [2 /*return*/];
|
|
50083
|
+
}
|
|
50084
|
+
this._notifierService.showWarning('Có lỗi trong quá trình xử lý, vui lòng thử lại');
|
|
50085
|
+
return [2 /*return*/];
|
|
50086
|
+
}
|
|
50087
|
+
});
|
|
50088
|
+
});
|
|
50089
|
+
};
|
|
50090
|
+
SettingAuthorizeButtonComponent.prototype.deleteBasePermission = function (rowData) {
|
|
50091
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
50092
|
+
var _this = this;
|
|
50093
|
+
return __generator(this, function (_a) {
|
|
50094
|
+
this._notifierService.showConfirm('Xác nhận xóa quyền').then(function (res) { return __awaiter(_this, void 0, void 0, function () {
|
|
50095
|
+
var deleteRes;
|
|
50096
|
+
return __generator(this, function (_a) {
|
|
50097
|
+
switch (_a.label) {
|
|
50098
|
+
case 0:
|
|
50099
|
+
if (!res)
|
|
50100
|
+
return [2 /*return*/];
|
|
50101
|
+
return [4 /*yield*/, this._basePermissionService.delete(rowData.id)];
|
|
50102
|
+
case 1:
|
|
50103
|
+
deleteRes = _a.sent();
|
|
50104
|
+
if (deleteRes.success) {
|
|
50105
|
+
this._notifierService.showSuccess('Xóa quyền thành công');
|
|
50106
|
+
this.updateDataSource(rowData.id, true);
|
|
50107
|
+
return [2 /*return*/];
|
|
50108
|
+
}
|
|
50109
|
+
this._notifierService.showWarning(deleteRes.message);
|
|
50110
|
+
return [2 /*return*/];
|
|
50111
|
+
}
|
|
50112
|
+
});
|
|
50113
|
+
}); });
|
|
50114
|
+
return [2 /*return*/];
|
|
50115
|
+
});
|
|
50116
|
+
});
|
|
50117
|
+
};
|
|
50118
|
+
SettingAuthorizeButtonComponent.prototype.updateDataSource = function (id, isDeleted) {
|
|
50119
|
+
if (isDeleted === void 0) { isDeleted = false; }
|
|
50120
|
+
var currentRow = this.model.dataSource.find(function (p) { return p.id == id; });
|
|
50121
|
+
if (!currentRow)
|
|
50122
|
+
return;
|
|
50123
|
+
if (isDeleted) {
|
|
50124
|
+
currentRow.id = this._commonService.guid();
|
|
50125
|
+
}
|
|
50126
|
+
currentRow.isAuthorize = !isDeleted;
|
|
50127
|
+
this.afterGetData();
|
|
50128
|
+
};
|
|
50129
|
+
SettingAuthorizeButtonComponent.prototype.afterGetData = function () {
|
|
50130
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
50131
|
+
var _this = this;
|
|
50132
|
+
return __generator(this, function (_a) {
|
|
50133
|
+
this._unmarkLoading();
|
|
50134
|
+
if (!this.model.dataSource.length)
|
|
50135
|
+
return [2 /*return*/];
|
|
50136
|
+
this.model.dataSource.forEach(function (item) {
|
|
50137
|
+
item.name = item.rawText;
|
|
50138
|
+
item.code = item.permissionCode;
|
|
50139
|
+
item.moduleCode = _this.appCode;
|
|
50140
|
+
});
|
|
50141
|
+
return [2 /*return*/];
|
|
50142
|
+
});
|
|
50143
|
+
});
|
|
50144
|
+
};
|
|
50145
|
+
SettingAuthorizeButtonComponent.prototype.ngOnDestroy = function () {
|
|
50146
|
+
var _this = this;
|
|
50147
|
+
var buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
50148
|
+
this.model.dataSource.forEach(function (rowData) {
|
|
50149
|
+
var buttonItem = buttonSetting[_this.authorizeButtonKey].find(function (p) { return p.code == rowData.code; });
|
|
50150
|
+
if (rowData.isAuthorize && !buttonItem) {
|
|
50151
|
+
buttonSetting[_this.authorizeButtonKey].push({
|
|
50152
|
+
id: rowData.id,
|
|
50153
|
+
code: rowData.code,
|
|
50154
|
+
});
|
|
50155
|
+
}
|
|
50156
|
+
else if (!rowData.isAuthorize && buttonItem) {
|
|
50157
|
+
var index = buttonSetting[_this.authorizeButtonKey].indexOf(buttonItem);
|
|
50158
|
+
buttonSetting[_this.authorizeButtonKey].splice(index, 1);
|
|
50159
|
+
}
|
|
50160
|
+
});
|
|
50161
|
+
sessionStorage.setItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE, JSON.stringify(buttonSetting));
|
|
50162
|
+
};
|
|
50163
|
+
return SettingAuthorizeButtonComponent;
|
|
50164
|
+
}(DataListBase));
|
|
50165
|
+
SettingAuthorizeButtonComponent.decorators = [
|
|
50166
|
+
{ type: i0.Component, args: [{
|
|
50167
|
+
selector: 'settings-authorize-button',
|
|
50168
|
+
template: "<crud-list #crudList [menuButtons]=\"getMenuButtons\" [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\n [hiddenAdd]=\"true\" [hiddenDelete]=\"true\" [hiddenCopyLink]=\"true\" (onReload)=\"_triggerProcessData($event)\"\n (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\"\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_handleReloaded($event)\" (onCopyLink)=\"_copyLink($event)\"\n (onCopyLinkMultiple)=\"_copyLinkMultiple()\">\n <ng-template #function let-rowData=\"rowData\">\n <button *ngIf=\"!rowData.isAuthorize\" class=\"p-button-rounded p-button-text p-button-info link-or-action\"\n type=\"button\" pButton icon=\"pi pi-plus\" pTooltip=\"Th\u00EAm m\u1EDBi\" (click)=\"addBasePermission(rowData)\"></button>\n <button *ngIf=\"rowData.isAuthorize\"\n class=\"p-button-rounded p-button-text p-button-danger p-button-info link-or-action\" type=\"button\" pButton\n icon=\"pi pi-trash\" pTooltip=\"X\u00F3a\" (click)=\"deleteBasePermission(rowData)\"></button>\n </ng-template>\n</crud-list>",
|
|
50169
|
+
providers: [ComponentContextService],
|
|
50170
|
+
styles: [""]
|
|
50171
|
+
},] }
|
|
50172
|
+
];
|
|
50173
|
+
SettingAuthorizeButtonComponent.ctorParameters = function () { return [
|
|
50174
|
+
{ type: i0.Injector },
|
|
50175
|
+
{ type: BasePermissionService },
|
|
50176
|
+
{ type: ModuleConfigService }
|
|
50177
|
+
]; };
|
|
50178
|
+
SettingAuthorizeButtonComponent.propDecorators = {
|
|
50179
|
+
authorizeButtonKey: [{ type: i0.Input }],
|
|
50180
|
+
dataSource: [{ type: i0.Input }]
|
|
50181
|
+
};
|
|
50182
|
+
|
|
49752
50183
|
var SettingsComponent = /** @class */ (function (_super) {
|
|
49753
50184
|
__extends(SettingsComponent, _super);
|
|
49754
50185
|
function SettingsComponent(_injector, _domService, _userService) {
|
|
@@ -53815,6 +54246,7 @@
|
|
|
53815
54246
|
TnAccordionTabComponent,
|
|
53816
54247
|
SplashComponentComponent,
|
|
53817
54248
|
SettingsWorkflowComponent,
|
|
54249
|
+
SettingAuthorizeButtonComponent,
|
|
53818
54250
|
SettingsWorkflowNo1Component,
|
|
53819
54251
|
CommonLibComponent
|
|
53820
54252
|
];
|
|
@@ -54022,6 +54454,7 @@
|
|
|
54022
54454
|
exports.BaseModule = BaseModule;
|
|
54023
54455
|
exports.BaseService = BaseService;
|
|
54024
54456
|
exports.BooleanFormatPipe = BooleanFormatPipe;
|
|
54457
|
+
exports.ButtonAction = ButtonAction;
|
|
54025
54458
|
exports.ButtonControlSchema = ButtonControlSchema;
|
|
54026
54459
|
exports.ButtonPermission = ButtonPermission;
|
|
54027
54460
|
exports.ButtonPermissions = ButtonPermissions;
|
|
@@ -54499,7 +54932,9 @@
|
|
|
54499
54932
|
exports["ɵdt"] = CheckReadyComponent;
|
|
54500
54933
|
exports["ɵdu"] = TnAccordionTabComponent;
|
|
54501
54934
|
exports["ɵdv"] = SettingsWorkflowComponent;
|
|
54502
|
-
exports["ɵdw"] =
|
|
54935
|
+
exports["ɵdw"] = SettingAuthorizeButtonComponent;
|
|
54936
|
+
exports["ɵdx"] = BasePermissionService;
|
|
54937
|
+
exports["ɵdy"] = SettingsWorkflowNo1Component;
|
|
54503
54938
|
exports["ɵe"] = ListBase;
|
|
54504
54939
|
exports["ɵf"] = ListComponentBase;
|
|
54505
54940
|
exports["ɵg"] = TreeTableComponent;
|