tnx-shared 5.3.163 → 5.3.165
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 +943 -514
- 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 -11
- 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 -263
- 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,18 +22695,12 @@
|
|
|
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
|
-
|
|
22619
|
-
|
|
22620
|
-
|
|
22621
|
-
|
|
22622
|
-
|
|
22623
|
-
case 1:
|
|
22624
|
-
_b.sent();
|
|
22625
|
-
this.setting.pageSetting.page = 1;
|
|
22626
|
-
this.getData();
|
|
22627
|
-
return [2 /*return*/];
|
|
22628
|
-
}
|
|
22698
|
+
return __generator(this, function (_f) {
|
|
22699
|
+
this.filter_commonSearch = data.filters;
|
|
22700
|
+
this.dataSearchCommon = data.dataForm;
|
|
22701
|
+
this.setting.pageSetting.page = 1;
|
|
22702
|
+
this.getData();
|
|
22703
|
+
return [2 /*return*/];
|
|
22629
22704
|
});
|
|
22630
22705
|
});
|
|
22631
22706
|
};
|
|
@@ -22659,17 +22734,17 @@
|
|
|
22659
22734
|
if (isTree === void 0) { isTree = false; }
|
|
22660
22735
|
return __awaiter(this, void 0, void 0, function () {
|
|
22661
22736
|
var rs;
|
|
22662
|
-
return __generator(this, function (
|
|
22663
|
-
switch (
|
|
22737
|
+
return __generator(this, function (_f) {
|
|
22738
|
+
switch (_f.label) {
|
|
22664
22739
|
case 0:
|
|
22665
22740
|
if (!this.setting.showConfirmExport) return [3 /*break*/, 2];
|
|
22666
22741
|
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
22742
|
case 1:
|
|
22668
|
-
rs =
|
|
22743
|
+
rs = _f.sent();
|
|
22669
22744
|
if (!rs) {
|
|
22670
22745
|
return [2 /*return*/];
|
|
22671
22746
|
}
|
|
22672
|
-
|
|
22747
|
+
_f.label = 2;
|
|
22673
22748
|
case 2:
|
|
22674
22749
|
switch (this.setting.exportItemsMode) {
|
|
22675
22750
|
case exports.ExportItemsMode.FromHtml:
|
|
@@ -22690,17 +22765,17 @@
|
|
|
22690
22765
|
if (isTree === void 0) { isTree = false; }
|
|
22691
22766
|
return __awaiter(this, void 0, void 0, function () {
|
|
22692
22767
|
var rs, header, element, tableEle, headEle, bodyEle, arrHeadEle, arrRowData, strHeadEle, strBodyEle, css, table;
|
|
22693
|
-
return __generator(this, function (
|
|
22694
|
-
switch (
|
|
22768
|
+
return __generator(this, function (_f) {
|
|
22769
|
+
switch (_f.label) {
|
|
22695
22770
|
case 0:
|
|
22696
22771
|
if (!this.setting.showConfirmExport) return [3 /*break*/, 2];
|
|
22697
22772
|
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
22773
|
case 1:
|
|
22699
|
-
rs =
|
|
22774
|
+
rs = _f.sent();
|
|
22700
22775
|
if (!rs) {
|
|
22701
22776
|
return [2 /*return*/];
|
|
22702
22777
|
}
|
|
22703
|
-
|
|
22778
|
+
_f.label = 2;
|
|
22704
22779
|
case 2:
|
|
22705
22780
|
header = 'Danh sách ' + this.setting.objectName;
|
|
22706
22781
|
element = isTree ? this.treeTable.el.nativeElement : this.table.el.nativeElement;
|
|
@@ -22884,25 +22959,25 @@
|
|
|
22884
22959
|
};
|
|
22885
22960
|
ListComponentBase.prototype.showContextMenu = function (evt, rowData) {
|
|
22886
22961
|
return __awaiter(this, void 0, void 0, function () {
|
|
22887
|
-
var
|
|
22888
|
-
var
|
|
22889
|
-
return __generator(this, function (
|
|
22890
|
-
switch (
|
|
22962
|
+
var _f, _g, shareButtons, showWorkflowAttach;
|
|
22963
|
+
var _h;
|
|
22964
|
+
return __generator(this, function (_j) {
|
|
22965
|
+
switch (_j.label) {
|
|
22891
22966
|
case 0:
|
|
22892
22967
|
this.rowDataCurrent = rowData;
|
|
22893
|
-
|
|
22894
|
-
|
|
22968
|
+
_f = this;
|
|
22969
|
+
_g = this.getMenuButtonAuthorized;
|
|
22895
22970
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
22896
|
-
case 1: return [4 /*yield*/,
|
|
22971
|
+
case 1: return [4 /*yield*/, _g.apply(this, [_j.sent()])];
|
|
22897
22972
|
case 2:
|
|
22898
|
-
|
|
22973
|
+
_f.buttonContexts = _j.sent();
|
|
22899
22974
|
if (!this.setting.disableShare) {
|
|
22900
22975
|
shareButtons = [
|
|
22901
22976
|
{ label: 'Chia sẻ', icon: 'pi pi-link', command: this.createShareLink.bind(this) },
|
|
22902
22977
|
{ label: 'Danh sách chia sẻ', icon: 'pi pi-list', command: this.showLinkSharing.bind(this) },
|
|
22903
22978
|
// { label: 'Danh sách nhìn thấy', icon: 'pi pi-list', command: this.showListPermissionByItem.bind(this) }
|
|
22904
22979
|
];
|
|
22905
|
-
(
|
|
22980
|
+
(_h = this.buttonContexts).push.apply(_h, __spreadArray([], __read(shareButtons)));
|
|
22906
22981
|
}
|
|
22907
22982
|
showWorkflowAttach = localStorage.getItem('__showWorkflowAttach');
|
|
22908
22983
|
if (showWorkflowAttach == 'true') {
|
|
@@ -22924,20 +22999,22 @@
|
|
|
22924
22999
|
ListComponentBase.prototype.getMenuButtonAuthorized = function (menuButtons) {
|
|
22925
23000
|
return __awaiter(this, void 0, void 0, function () {
|
|
22926
23001
|
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 (
|
|
23002
|
+
var e_6, _f;
|
|
23003
|
+
return __generator(this, function (_g) {
|
|
23004
|
+
switch (_g.label) {
|
|
22930
23005
|
case 0:
|
|
22931
23006
|
authorizedButtons = [];
|
|
22932
|
-
serviceCodeByBase = this.setting.baseService != null ? this.setting.baseService.serviceCode : '';
|
|
23007
|
+
serviceCodeByBase = this.setting.baseService != null ? this.setting.baseService.serviceCode.toUpperCase() : '';
|
|
22933
23008
|
promises = [];
|
|
22934
23009
|
_loop_3 = function (item) {
|
|
22935
|
-
|
|
23010
|
+
var permission = this_2.lstBtnAuthorizeMenu.find(function (p) { return p.rawText == item.label; });
|
|
23011
|
+
if (!item.authorizationPermission && !permission) {
|
|
22936
23012
|
authorizedButtons.push(item);
|
|
22937
23013
|
return "continue";
|
|
22938
23014
|
}
|
|
22939
23015
|
var serviceCode = item.authorizationServiceCode ? item.authorizationServiceCode : serviceCodeByBase;
|
|
22940
|
-
|
|
23016
|
+
var permissionCode = permission ? permission.permissionCode : item.authorizationPermission;
|
|
23017
|
+
promises.push(this_2._permissionService.isAuthorized(serviceCode, permissionCode, true).then(function (authorized) {
|
|
22941
23018
|
if (authorized !== true) {
|
|
22942
23019
|
return;
|
|
22943
23020
|
}
|
|
@@ -22954,13 +23031,13 @@
|
|
|
22954
23031
|
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
22955
23032
|
finally {
|
|
22956
23033
|
try {
|
|
22957
|
-
if (menuButtons_1_1 && !menuButtons_1_1.done && (
|
|
23034
|
+
if (menuButtons_1_1 && !menuButtons_1_1.done && (_f = menuButtons_1.return)) _f.call(menuButtons_1);
|
|
22958
23035
|
}
|
|
22959
23036
|
finally { if (e_6) throw e_6.error; }
|
|
22960
23037
|
}
|
|
22961
23038
|
return [4 /*yield*/, Promise.all(promises)];
|
|
22962
23039
|
case 1:
|
|
22963
|
-
|
|
23040
|
+
_g.sent();
|
|
22964
23041
|
return [2 /*return*/, authorizedButtons];
|
|
22965
23042
|
}
|
|
22966
23043
|
});
|
|
@@ -23575,10 +23652,10 @@
|
|
|
23575
23652
|
clearTimeout(this.timeout);
|
|
23576
23653
|
};
|
|
23577
23654
|
ListComponentBase.prototype.disableMultipleDelete = function () {
|
|
23578
|
-
var e_7,
|
|
23655
|
+
var e_7, _f;
|
|
23579
23656
|
try {
|
|
23580
|
-
for (var
|
|
23581
|
-
var item =
|
|
23657
|
+
for (var _g = __values(this.model.selectedItems), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
23658
|
+
var item = _h.value;
|
|
23582
23659
|
if (this.disableDelete(item)) {
|
|
23583
23660
|
return true;
|
|
23584
23661
|
}
|
|
@@ -23587,7 +23664,7 @@
|
|
|
23587
23664
|
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
23588
23665
|
finally {
|
|
23589
23666
|
try {
|
|
23590
|
-
if (
|
|
23667
|
+
if (_h && !_h.done && (_f = _g.return)) _f.call(_g);
|
|
23591
23668
|
}
|
|
23592
23669
|
finally { if (e_7) throw e_7.error; }
|
|
23593
23670
|
}
|
|
@@ -23658,11 +23735,11 @@
|
|
|
23658
23735
|
};
|
|
23659
23736
|
ListComponentBase.prototype.processBaseData = function () {
|
|
23660
23737
|
return __awaiter(this, void 0, void 0, function () {
|
|
23661
|
-
return __generator(this, function (
|
|
23662
|
-
switch (
|
|
23738
|
+
return __generator(this, function (_f) {
|
|
23739
|
+
switch (_f.label) {
|
|
23663
23740
|
case 0: return [4 /*yield*/, this.preProcessData(this._rawDataSource)];
|
|
23664
23741
|
case 1:
|
|
23665
|
-
|
|
23742
|
+
_f.sent();
|
|
23666
23743
|
return [2 /*return*/];
|
|
23667
23744
|
}
|
|
23668
23745
|
});
|
|
@@ -23671,11 +23748,11 @@
|
|
|
23671
23748
|
ListComponentBase.prototype.preProcessData = function (dataSource) {
|
|
23672
23749
|
return __awaiter(this, void 0, void 0, function () {
|
|
23673
23750
|
var colHasPipe, _loop_4, this_3, colHasPipe_1, colHasPipe_1_1, col;
|
|
23674
|
-
var e_8,
|
|
23675
|
-
return __generator(this, function (
|
|
23751
|
+
var e_8, _f;
|
|
23752
|
+
return __generator(this, function (_g) {
|
|
23676
23753
|
colHasPipe = this.setting.cols.filter(function (x) { return x.pipe; });
|
|
23677
23754
|
_loop_4 = function (col) {
|
|
23678
|
-
var e_9,
|
|
23755
|
+
var e_9, _h;
|
|
23679
23756
|
var _loop_5 = function (item) {
|
|
23680
23757
|
this_3.transform(col.pipe, col.asyncPipe, item[col.field]).then(function (rs) {
|
|
23681
23758
|
item["pipe__" + col.field + " "] = rs;
|
|
@@ -23690,7 +23767,7 @@
|
|
|
23690
23767
|
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
23691
23768
|
finally {
|
|
23692
23769
|
try {
|
|
23693
|
-
if (dataSource_1_1 && !dataSource_1_1.done && (
|
|
23770
|
+
if (dataSource_1_1 && !dataSource_1_1.done && (_h = dataSource_1.return)) _h.call(dataSource_1);
|
|
23694
23771
|
}
|
|
23695
23772
|
finally { if (e_9) throw e_9.error; }
|
|
23696
23773
|
}
|
|
@@ -23705,7 +23782,7 @@
|
|
|
23705
23782
|
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
23706
23783
|
finally {
|
|
23707
23784
|
try {
|
|
23708
|
-
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (
|
|
23785
|
+
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (_f = colHasPipe_1.return)) _f.call(colHasPipe_1);
|
|
23709
23786
|
}
|
|
23710
23787
|
finally { if (e_8) throw e_8.error; }
|
|
23711
23788
|
}
|
|
@@ -23716,8 +23793,8 @@
|
|
|
23716
23793
|
ListComponentBase.prototype.transform = function (pipe, asyncPipe, value) {
|
|
23717
23794
|
return __awaiter(this, void 0, void 0, function () {
|
|
23718
23795
|
var val, val;
|
|
23719
|
-
return __generator(this, function (
|
|
23720
|
-
switch (
|
|
23796
|
+
return __generator(this, function (_f) {
|
|
23797
|
+
switch (_f.label) {
|
|
23721
23798
|
case 0:
|
|
23722
23799
|
if (this.cachedTransforms[value]) {
|
|
23723
23800
|
return [2 /*return*/, this.cachedTransforms[value]];
|
|
@@ -23725,7 +23802,7 @@
|
|
|
23725
23802
|
if (!asyncPipe) return [3 /*break*/, 2];
|
|
23726
23803
|
return [4 /*yield*/, pipe.transform(value)];
|
|
23727
23804
|
case 1:
|
|
23728
|
-
val =
|
|
23805
|
+
val = _f.sent();
|
|
23729
23806
|
this.cachedTransforms[value] = val;
|
|
23730
23807
|
return [2 /*return*/, val];
|
|
23731
23808
|
case 2:
|
|
@@ -23881,7 +23958,7 @@
|
|
|
23881
23958
|
}
|
|
23882
23959
|
};
|
|
23883
23960
|
ListComponentBase.prototype.getMinimizeData = function (model) {
|
|
23884
|
-
var e_10,
|
|
23961
|
+
var e_10, _f;
|
|
23885
23962
|
if (isLiteralObject(model)) {
|
|
23886
23963
|
if (model._dropdownvalue != null && model._dropdownvalue !== '') {
|
|
23887
23964
|
return model[model._dropdownvalue];
|
|
@@ -23907,7 +23984,7 @@
|
|
|
23907
23984
|
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
23908
23985
|
finally {
|
|
23909
23986
|
try {
|
|
23910
|
-
if (model_1_1 && !model_1_1.done && (
|
|
23987
|
+
if (model_1_1 && !model_1_1.done && (_f = model_1.return)) _f.call(model_1);
|
|
23911
23988
|
}
|
|
23912
23989
|
finally { if (e_10) throw e_10.error; }
|
|
23913
23990
|
}
|
|
@@ -24042,8 +24119,8 @@
|
|
|
24042
24119
|
};
|
|
24043
24120
|
ListComponentBase.prototype.handleTableRendered = function () {
|
|
24044
24121
|
return __awaiter(this, void 0, void 0, function () {
|
|
24045
|
-
return __generator(this, function (
|
|
24046
|
-
switch (
|
|
24122
|
+
return __generator(this, function (_f) {
|
|
24123
|
+
switch (_f.label) {
|
|
24047
24124
|
case 0:
|
|
24048
24125
|
if (this.table) {
|
|
24049
24126
|
this._processAfterRendered(this.table.el.nativeElement);
|
|
@@ -24053,7 +24130,7 @@
|
|
|
24053
24130
|
}
|
|
24054
24131
|
return [4 /*yield*/, this.modifyButtonFunctionInRow()];
|
|
24055
24132
|
case 1:
|
|
24056
|
-
|
|
24133
|
+
_f.sent();
|
|
24057
24134
|
this.onReloaded.emit(true);
|
|
24058
24135
|
return [2 /*return*/];
|
|
24059
24136
|
}
|
|
@@ -24086,42 +24163,42 @@
|
|
|
24086
24163
|
ListComponentBase.prototype.modifyButtonFunctionInRow = function () {
|
|
24087
24164
|
var _a;
|
|
24088
24165
|
return __awaiter(this, void 0, void 0, function () {
|
|
24089
|
-
var
|
|
24090
|
-
var e_11,
|
|
24091
|
-
return __generator(this, function (
|
|
24092
|
-
switch (
|
|
24166
|
+
var _f, _g, rowData, total, _h, ex_1, e_11_1;
|
|
24167
|
+
var e_11, _j;
|
|
24168
|
+
return __generator(this, function (_k) {
|
|
24169
|
+
switch (_k.label) {
|
|
24093
24170
|
case 0:
|
|
24094
|
-
|
|
24095
|
-
|
|
24096
|
-
|
|
24171
|
+
_k.trys.push([0, 8, 9, 10]);
|
|
24172
|
+
_f = __values(this.model.dataSource), _g = _f.next();
|
|
24173
|
+
_k.label = 1;
|
|
24097
24174
|
case 1:
|
|
24098
|
-
if (!!
|
|
24099
|
-
rowData =
|
|
24100
|
-
|
|
24175
|
+
if (!!_g.done) return [3 /*break*/, 7];
|
|
24176
|
+
rowData = _g.value;
|
|
24177
|
+
_k.label = 2;
|
|
24101
24178
|
case 2:
|
|
24102
|
-
|
|
24103
|
-
|
|
24104
|
-
_e = this.getMenuButtonAuthorized;
|
|
24179
|
+
_k.trys.push([2, 5, , 6]);
|
|
24180
|
+
_h = this.getMenuButtonAuthorized;
|
|
24105
24181
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
24106
|
-
case 3: return [4 /*yield*/,
|
|
24182
|
+
case 3: return [4 /*yield*/, _h.apply(this, [(_a = _k.sent()) !== null && _a !== void 0 ? _a : []])];
|
|
24107
24183
|
case 4:
|
|
24108
|
-
|
|
24184
|
+
total = (_k.sent());
|
|
24185
|
+
rowData.disableFunctionRow = total.length < 1 && this.setting.disableShare;
|
|
24109
24186
|
return [3 /*break*/, 6];
|
|
24110
24187
|
case 5:
|
|
24111
|
-
ex_1 =
|
|
24188
|
+
ex_1 = _k.sent();
|
|
24112
24189
|
this.hiddenBtnFunction = true;
|
|
24113
24190
|
return [2 /*return*/];
|
|
24114
24191
|
case 6:
|
|
24115
|
-
|
|
24192
|
+
_g = _f.next();
|
|
24116
24193
|
return [3 /*break*/, 1];
|
|
24117
24194
|
case 7: return [3 /*break*/, 10];
|
|
24118
24195
|
case 8:
|
|
24119
|
-
e_11_1 =
|
|
24196
|
+
e_11_1 = _k.sent();
|
|
24120
24197
|
e_11 = { error: e_11_1 };
|
|
24121
24198
|
return [3 /*break*/, 10];
|
|
24122
24199
|
case 9:
|
|
24123
24200
|
try {
|
|
24124
|
-
if (
|
|
24201
|
+
if (_g && !_g.done && (_j = _f.return)) _j.call(_f);
|
|
24125
24202
|
}
|
|
24126
24203
|
finally { if (e_11) throw e_11.error; }
|
|
24127
24204
|
return [7 /*endfinally*/];
|
|
@@ -24151,10 +24228,10 @@
|
|
|
24151
24228
|
};
|
|
24152
24229
|
ListComponentBase.prototype.createSearchSchema = function () {
|
|
24153
24230
|
return __awaiter(this, void 0, void 0, function () {
|
|
24154
|
-
var searchInfo,
|
|
24155
|
-
var e_12,
|
|
24156
|
-
return __generator(this, function (
|
|
24157
|
-
switch (
|
|
24231
|
+
var searchInfo, _f, _g, col, control, e_12_1, _loop_6, this_4, _h, _j, field;
|
|
24232
|
+
var e_12, _k, _l, e_13, _m;
|
|
24233
|
+
return __generator(this, function (_o) {
|
|
24234
|
+
switch (_o.label) {
|
|
24158
24235
|
case 0:
|
|
24159
24236
|
if (this.setting.cols == null) {
|
|
24160
24237
|
return [2 /*return*/, this._notifierService.showWarning('Bạn chưa cấu hình cột cho danh sách')];
|
|
@@ -24164,14 +24241,14 @@
|
|
|
24164
24241
|
searchInfo.schema = [];
|
|
24165
24242
|
searchInfo.fieldDropdown = {};
|
|
24166
24243
|
searchInfo.fieldSearchText = [];
|
|
24167
|
-
|
|
24244
|
+
_o.label = 1;
|
|
24168
24245
|
case 1:
|
|
24169
|
-
|
|
24170
|
-
|
|
24171
|
-
|
|
24246
|
+
_o.trys.push([1, 6, 7, 8]);
|
|
24247
|
+
_f = __values(this.setting.cols), _g = _f.next();
|
|
24248
|
+
_o.label = 2;
|
|
24172
24249
|
case 2:
|
|
24173
|
-
if (!!
|
|
24174
|
-
col =
|
|
24250
|
+
if (!!_g.done) return [3 /*break*/, 5];
|
|
24251
|
+
col = _g.value;
|
|
24175
24252
|
if (!(col.allowFilter != false && col.rawColumn == null)) return [3 /*break*/, 4];
|
|
24176
24253
|
if (col.fullTextSearch) {
|
|
24177
24254
|
if (searchInfo.fieldSearchText.indexOf(col.field) == -1) {
|
|
@@ -24184,9 +24261,9 @@
|
|
|
24184
24261
|
}
|
|
24185
24262
|
return [4 /*yield*/, this.setting.function.getSearchControl(col.field)];
|
|
24186
24263
|
case 3:
|
|
24187
|
-
control =
|
|
24264
|
+
control = _o.sent();
|
|
24188
24265
|
if (control != null) {
|
|
24189
|
-
(
|
|
24266
|
+
(_l = searchInfo.schema).push.apply(_l, __spreadArray([], __read(control)));
|
|
24190
24267
|
}
|
|
24191
24268
|
else {
|
|
24192
24269
|
if (col.baseService || (col.dataSource && col.dataSource.length > 0)) {
|
|
@@ -24240,18 +24317,18 @@
|
|
|
24240
24317
|
}
|
|
24241
24318
|
}
|
|
24242
24319
|
}
|
|
24243
|
-
|
|
24320
|
+
_o.label = 4;
|
|
24244
24321
|
case 4:
|
|
24245
|
-
|
|
24322
|
+
_g = _f.next();
|
|
24246
24323
|
return [3 /*break*/, 2];
|
|
24247
24324
|
case 5: return [3 /*break*/, 8];
|
|
24248
24325
|
case 6:
|
|
24249
|
-
e_12_1 =
|
|
24326
|
+
e_12_1 = _o.sent();
|
|
24250
24327
|
e_12 = { error: e_12_1 };
|
|
24251
24328
|
return [3 /*break*/, 8];
|
|
24252
24329
|
case 7:
|
|
24253
24330
|
try {
|
|
24254
|
-
if (
|
|
24331
|
+
if (_g && !_g.done && (_k = _f.return)) _k.call(_f);
|
|
24255
24332
|
}
|
|
24256
24333
|
finally { if (e_12) throw e_12.error; }
|
|
24257
24334
|
return [7 /*endfinally*/];
|
|
@@ -24271,15 +24348,15 @@
|
|
|
24271
24348
|
};
|
|
24272
24349
|
this_4 = this;
|
|
24273
24350
|
try {
|
|
24274
|
-
for (
|
|
24275
|
-
field =
|
|
24351
|
+
for (_h = __values(searchInfo.fieldSearchText), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
24352
|
+
field = _j.value;
|
|
24276
24353
|
_loop_6(field);
|
|
24277
24354
|
}
|
|
24278
24355
|
}
|
|
24279
24356
|
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
24280
24357
|
finally {
|
|
24281
24358
|
try {
|
|
24282
|
-
if (
|
|
24359
|
+
if (_j && !_j.done && (_m = _h.return)) _m.call(_h);
|
|
24283
24360
|
}
|
|
24284
24361
|
finally { if (e_13) throw e_13.error; }
|
|
24285
24362
|
}
|
|
@@ -24317,8 +24394,8 @@
|
|
|
24317
24394
|
ListComponentBase.prototype.getItemWorkflowSetting = function (setting, rowData) {
|
|
24318
24395
|
return __awaiter(this, void 0, void 0, function () {
|
|
24319
24396
|
var workflowSetting;
|
|
24320
|
-
return __generator(this, function (
|
|
24321
|
-
switch (
|
|
24397
|
+
return __generator(this, function (_f) {
|
|
24398
|
+
switch (_f.label) {
|
|
24322
24399
|
case 0:
|
|
24323
24400
|
workflowSetting = setting.workflowSettingNew;
|
|
24324
24401
|
if (!(setting.isWorkflowTree
|
|
@@ -24326,8 +24403,8 @@
|
|
|
24326
24403
|
&& setting.workflowConfigAdvance.getWorkflowSetting)) return [3 /*break*/, 2];
|
|
24327
24404
|
return [4 /*yield*/, setting.workflowConfigAdvance.getWorkflowSetting(rowData)];
|
|
24328
24405
|
case 1:
|
|
24329
|
-
workflowSetting =
|
|
24330
|
-
|
|
24406
|
+
workflowSetting = _f.sent();
|
|
24407
|
+
_f.label = 2;
|
|
24331
24408
|
case 2:
|
|
24332
24409
|
if (!workflowSetting || workflowSetting.workflows.length == 0) {
|
|
24333
24410
|
return [2 /*return*/, this._notifierService.showWarning('Đối tượng chưa được cấu hình quy trình nghiệp vụ')];
|
|
@@ -24341,13 +24418,13 @@
|
|
|
24341
24418
|
return __awaiter(this, void 0, void 0, function () {
|
|
24342
24419
|
var workflowSetting, resultCheckExist, modelTask, contentLink, modelEntity, taskWorkflowSetting, compRef;
|
|
24343
24420
|
var _this = this;
|
|
24344
|
-
return __generator(this, function (
|
|
24345
|
-
switch (
|
|
24421
|
+
return __generator(this, function (_f) {
|
|
24422
|
+
switch (_f.label) {
|
|
24346
24423
|
case 0:
|
|
24347
24424
|
rowData.__startingWorkflow = true;
|
|
24348
24425
|
return [4 /*yield*/, this.getItemWorkflowSetting(this.setting, rowData)];
|
|
24349
24426
|
case 1:
|
|
24350
|
-
workflowSetting =
|
|
24427
|
+
workflowSetting = _f.sent();
|
|
24351
24428
|
if (!workflowSetting) {
|
|
24352
24429
|
rowData.__startingWorkflow = false;
|
|
24353
24430
|
return [2 /*return*/];
|
|
@@ -24359,7 +24436,7 @@
|
|
|
24359
24436
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24360
24437
|
])];
|
|
24361
24438
|
case 2:
|
|
24362
|
-
resultCheckExist = (
|
|
24439
|
+
resultCheckExist = (_f.sent());
|
|
24363
24440
|
if (!resultCheckExist.success) {
|
|
24364
24441
|
rowData.__startingWorkflow = false;
|
|
24365
24442
|
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 +24448,8 @@
|
|
|
24371
24448
|
if (!this.setting.modifyRowDataForTask) return [3 /*break*/, 4];
|
|
24372
24449
|
return [4 /*yield*/, this.setting.modifyRowDataForTask(rowData)];
|
|
24373
24450
|
case 3:
|
|
24374
|
-
|
|
24375
|
-
|
|
24451
|
+
_f.sent();
|
|
24452
|
+
_f.label = 4;
|
|
24376
24453
|
case 4:
|
|
24377
24454
|
modelTask = {
|
|
24378
24455
|
id: this._commonService.guid(),
|
|
@@ -24387,7 +24464,7 @@
|
|
|
24387
24464
|
};
|
|
24388
24465
|
return [4 /*yield*/, this.getCopyPath(this.setting, rowData)];
|
|
24389
24466
|
case 5:
|
|
24390
|
-
contentLink =
|
|
24467
|
+
contentLink = _f.sent();
|
|
24391
24468
|
if (contentLink) {
|
|
24392
24469
|
modelEntity = this.parseAttachLink(contentLink);
|
|
24393
24470
|
modelTask.dinhKemNghiepVuDtos = modelEntity;
|
|
@@ -24395,27 +24472,27 @@
|
|
|
24395
24472
|
if (!this.setting.modifyItemTask) return [3 /*break*/, 7];
|
|
24396
24473
|
return [4 /*yield*/, this.setting.modifyItemTask(modelTask, rowData)];
|
|
24397
24474
|
case 6:
|
|
24398
|
-
|
|
24399
|
-
|
|
24475
|
+
_f.sent();
|
|
24476
|
+
_f.label = 7;
|
|
24400
24477
|
case 7:
|
|
24401
24478
|
if (!(workflowSetting.autoStartTask
|
|
24402
24479
|
&& workflowSetting.idLoaiCongViecDefault)) return [3 /*break*/, 9];
|
|
24403
24480
|
return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(workflowSetting.idLoaiCongViecDefault)];
|
|
24404
24481
|
case 8:
|
|
24405
|
-
taskWorkflowSetting =
|
|
24482
|
+
taskWorkflowSetting = _f.sent();
|
|
24406
24483
|
if (taskWorkflowSetting != null && taskWorkflowSetting.workflowCode) {
|
|
24407
24484
|
modelTask[FieldWorkflowCodeInCrudForm] = taskWorkflowSetting.workflowCode;
|
|
24408
24485
|
this.insertTaskAndReload(modelTask, rowData, taskWorkflowSetting);
|
|
24409
24486
|
rowData.__startingWorkflow = false;
|
|
24410
24487
|
return [2 /*return*/];
|
|
24411
24488
|
}
|
|
24412
|
-
|
|
24489
|
+
_f.label = 9;
|
|
24413
24490
|
case 9: return [3 /*break*/, 14];
|
|
24414
24491
|
case 10:
|
|
24415
24492
|
if (!(workflowSetting.workflows.length == 1)) return [3 /*break*/, 12];
|
|
24416
24493
|
return [4 /*yield*/, this.startWorkflow(rowData, workflowSetting.workflows[0])];
|
|
24417
24494
|
case 11:
|
|
24418
|
-
|
|
24495
|
+
_f.sent();
|
|
24419
24496
|
rowData.__startingWorkflow = false;
|
|
24420
24497
|
return [2 /*return*/];
|
|
24421
24498
|
case 12:
|
|
@@ -24424,13 +24501,13 @@
|
|
|
24424
24501
|
rowData.__startingWorkflow = false;
|
|
24425
24502
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'StartWorkflowComponent', this.startWorkflowViewContainer)];
|
|
24426
24503
|
case 13:
|
|
24427
|
-
compRef =
|
|
24504
|
+
compRef = _f.sent();
|
|
24428
24505
|
dialog.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24429
24506
|
compRef.workflows = workflowSetting.workflows;
|
|
24430
24507
|
compRef.defaultWorkflow = workflowSetting.workflowCode;
|
|
24431
24508
|
compRef.instance.onSaved.subscribe(function (event) { return _this.handleStartWorkflowFromDialog(event); });
|
|
24432
24509
|
compRef.instance.onCancel.subscribe(function (event) { return _this.startWorkflowModel.showEditForm = false; });
|
|
24433
|
-
|
|
24510
|
+
_f.label = 14;
|
|
24434
24511
|
case 14: return [2 /*return*/];
|
|
24435
24512
|
}
|
|
24436
24513
|
});
|
|
@@ -24476,25 +24553,25 @@
|
|
|
24476
24553
|
};
|
|
24477
24554
|
ListComponentBase.prototype.insertTaskAndReload = function (modelTask, rowData, workflowSetting) {
|
|
24478
24555
|
return __awaiter(this, void 0, void 0, function () {
|
|
24479
|
-
var
|
|
24556
|
+
var _f;
|
|
24480
24557
|
var _this = this;
|
|
24481
|
-
return __generator(this, function (
|
|
24482
|
-
switch (
|
|
24558
|
+
return __generator(this, function (_g) {
|
|
24559
|
+
switch (_g.label) {
|
|
24483
24560
|
case 0:
|
|
24484
24561
|
if (!this.setting.getDataForNextFirstStepTask) return [3 /*break*/, 2];
|
|
24485
|
-
|
|
24562
|
+
_f = modelTask;
|
|
24486
24563
|
return [4 /*yield*/, this.setting.getDataForNextFirstStepTask(rowData)];
|
|
24487
24564
|
case 1:
|
|
24488
|
-
|
|
24565
|
+
_f.itemWorkflowHistory = _g.sent();
|
|
24489
24566
|
modelTask.itemWorkflowHistory = this.tongHopWorkflowHistoryForNextFirstStep(modelTask.itemWorkflowHistory, modelTask, workflowSetting, modelTask[FieldWorkflowCodeInCrudForm]);
|
|
24490
|
-
|
|
24567
|
+
_g.label = 2;
|
|
24491
24568
|
case 2: return [4 /*yield*/, this._congViecService.post(modelTask)
|
|
24492
24569
|
.then(function (res) { return _this.handleResponse(res, '', function (f) {
|
|
24493
24570
|
_this.onStartedWorkflow.emit(rowData.id);
|
|
24494
24571
|
_this.getData();
|
|
24495
24572
|
}); })];
|
|
24496
24573
|
case 3:
|
|
24497
|
-
|
|
24574
|
+
_g.sent();
|
|
24498
24575
|
return [2 /*return*/];
|
|
24499
24576
|
}
|
|
24500
24577
|
});
|
|
@@ -24514,9 +24591,9 @@
|
|
|
24514
24591
|
if (dialogDetailTask === void 0) { dialogDetailTask = null; }
|
|
24515
24592
|
if (dialogChoYKienForm === void 0) { dialogChoYKienForm = null; }
|
|
24516
24593
|
return __awaiter(this, void 0, void 0, function () {
|
|
24517
|
-
var
|
|
24518
|
-
return __generator(this, function (
|
|
24519
|
-
switch (
|
|
24594
|
+
var _f;
|
|
24595
|
+
return __generator(this, function (_g) {
|
|
24596
|
+
switch (_g.label) {
|
|
24520
24597
|
case 0:
|
|
24521
24598
|
if (this.showingActionWorkflow)
|
|
24522
24599
|
return [2 /*return*/];
|
|
@@ -24525,10 +24602,10 @@
|
|
|
24525
24602
|
this.dialogProcessWorkflowForm = dialogProcessWorkflowForm;
|
|
24526
24603
|
this.dialogDetailTask = dialogDetailTask;
|
|
24527
24604
|
this.dialogChoYKienForm = dialogChoYKienForm;
|
|
24528
|
-
|
|
24605
|
+
_f = this;
|
|
24529
24606
|
return [4 /*yield*/, this.getButtonContext(rowData)];
|
|
24530
24607
|
case 1:
|
|
24531
|
-
|
|
24608
|
+
_f.buttonContexts = _g.sent();
|
|
24532
24609
|
if (this.buttonContexts.length === 0) {
|
|
24533
24610
|
return [2 /*return*/];
|
|
24534
24611
|
}
|
|
@@ -24542,20 +24619,20 @@
|
|
|
24542
24619
|
return __awaiter(this, void 0, void 0, function () {
|
|
24543
24620
|
var resultGetActionWorkflow, buttonContexts;
|
|
24544
24621
|
var _this = this;
|
|
24545
|
-
return __generator(this, function (
|
|
24546
|
-
switch (
|
|
24622
|
+
return __generator(this, function (_f) {
|
|
24623
|
+
switch (_f.label) {
|
|
24547
24624
|
case 0:
|
|
24548
24625
|
this.showingActionWorkflow = true;
|
|
24549
24626
|
resultGetActionWorkflow = null;
|
|
24550
24627
|
if (!(!this.setting.isWorkflowTree && this.setting.workflowSettingNew.createTaskInstead)) return [3 /*break*/, 2];
|
|
24551
24628
|
return [4 /*yield*/, this.getActionWorkflowByTask(rowData, rowData.dialogHistory)];
|
|
24552
24629
|
case 1:
|
|
24553
|
-
resultGetActionWorkflow =
|
|
24630
|
+
resultGetActionWorkflow = _f.sent();
|
|
24554
24631
|
return [3 /*break*/, 4];
|
|
24555
24632
|
case 2: return [4 /*yield*/, this.getActionWorkflow(rowData)];
|
|
24556
24633
|
case 3:
|
|
24557
|
-
resultGetActionWorkflow =
|
|
24558
|
-
|
|
24634
|
+
resultGetActionWorkflow = _f.sent();
|
|
24635
|
+
_f.label = 4;
|
|
24559
24636
|
case 4:
|
|
24560
24637
|
this.showingActionWorkflow = false;
|
|
24561
24638
|
if (!Array.isArray(resultGetActionWorkflow)) {
|
|
@@ -24579,11 +24656,11 @@
|
|
|
24579
24656
|
ListComponentBase.prototype.getActionWorkflow = function (rowData) {
|
|
24580
24657
|
return __awaiter(this, void 0, void 0, function () {
|
|
24581
24658
|
var workflowSetting;
|
|
24582
|
-
return __generator(this, function (
|
|
24583
|
-
switch (
|
|
24659
|
+
return __generator(this, function (_f) {
|
|
24660
|
+
switch (_f.label) {
|
|
24584
24661
|
case 0: return [4 /*yield*/, this.getItemWorkflowSetting(this.setting, rowData)];
|
|
24585
24662
|
case 1:
|
|
24586
|
-
workflowSetting =
|
|
24663
|
+
workflowSetting = _f.sent();
|
|
24587
24664
|
if (!workflowSetting)
|
|
24588
24665
|
return [2 /*return*/];
|
|
24589
24666
|
return [2 /*return*/, this._getActionWorkflowBase(this.setting, rowData, workflowSetting)];
|
|
@@ -24593,21 +24670,21 @@
|
|
|
24593
24670
|
};
|
|
24594
24671
|
ListComponentBase.prototype.getActionWorkflowByTask = function (rowData, dialog) {
|
|
24595
24672
|
return __awaiter(this, void 0, void 0, function () {
|
|
24596
|
-
var
|
|
24597
|
-
return __generator(this, function (
|
|
24598
|
-
switch (
|
|
24673
|
+
var _f, workflowPermissionDetailService, userService, result, workflowSetting, crudListSetting;
|
|
24674
|
+
return __generator(this, function (_g) {
|
|
24675
|
+
switch (_g.label) {
|
|
24599
24676
|
case 0:
|
|
24600
24677
|
if (!!rowData.__isGotCongViec) return [3 /*break*/, 2];
|
|
24601
|
-
|
|
24678
|
+
_f = rowData;
|
|
24602
24679
|
return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
24603
24680
|
this.newFilter('serviceCode', exports.Operator.equal, this.setting.baseService.serviceCode),
|
|
24604
24681
|
this.newFilter('entity', exports.Operator.equal, this.setting.baseService.entityName),
|
|
24605
24682
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24606
24683
|
])];
|
|
24607
24684
|
case 1:
|
|
24608
|
-
|
|
24685
|
+
_f.__itemCongViec = (_g.sent()).data;
|
|
24609
24686
|
rowData.__isGotCongViec = true;
|
|
24610
|
-
|
|
24687
|
+
_g.label = 2;
|
|
24611
24688
|
case 2:
|
|
24612
24689
|
rowData = rowData.__itemCongViec;
|
|
24613
24690
|
if (!rowData) {
|
|
@@ -24620,12 +24697,12 @@
|
|
|
24620
24697
|
return [4 /*yield*/, workflowPermissionDetailService.changeEndpoint(this._congViecService)
|
|
24621
24698
|
.appendInfoForWorkflow(userService.getUserIdCombine(), [rowData], 'id', this.setting.ignoreWorkflow)];
|
|
24622
24699
|
case 3:
|
|
24623
|
-
result =
|
|
24700
|
+
result = _g.sent();
|
|
24624
24701
|
if (result !== true)
|
|
24625
24702
|
return [2 /*return*/];
|
|
24626
24703
|
return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(rowData.idLoaiCongViec)];
|
|
24627
24704
|
case 4:
|
|
24628
|
-
workflowSetting =
|
|
24705
|
+
workflowSetting = _g.sent();
|
|
24629
24706
|
if (workflowSetting == null)
|
|
24630
24707
|
return [2 /*return*/];
|
|
24631
24708
|
crudListSetting = new CrudListSetting();
|
|
@@ -24639,8 +24716,8 @@
|
|
|
24639
24716
|
return __awaiter(this, void 0, void 0, function () {
|
|
24640
24717
|
var buttonContexts, itemWorkflowSetting_1, actions_1, actionAllows, workflowHistoryService, userService, userId, userIdStringUpper, itemWorkflowHistoryLast;
|
|
24641
24718
|
var _this = this;
|
|
24642
|
-
return __generator(this, function (
|
|
24643
|
-
switch (
|
|
24719
|
+
return __generator(this, function (_f) {
|
|
24720
|
+
switch (_f.label) {
|
|
24644
24721
|
case 0:
|
|
24645
24722
|
this.currentItem = rowData;
|
|
24646
24723
|
this.buttonContexts = [];
|
|
@@ -24655,7 +24732,7 @@
|
|
|
24655
24732
|
actions_1 = itemWorkflowSetting_1.data.actions[rowData.__trangThai];
|
|
24656
24733
|
return [4 /*yield*/, crudListSetting.baseService.getActionAllow(rowData.id)];
|
|
24657
24734
|
case 2:
|
|
24658
|
-
actionAllows = (
|
|
24735
|
+
actionAllows = (_f.sent()).data;
|
|
24659
24736
|
if (actionAllows) {
|
|
24660
24737
|
actionAllows.forEach(function (actionCode) {
|
|
24661
24738
|
var action = actions_1.find(function (q) { return q.code == actionCode; });
|
|
@@ -24684,7 +24761,7 @@
|
|
|
24684
24761
|
}
|
|
24685
24762
|
return [4 /*yield*/, workflowHistoryService.changeEndpoint(crudListSetting.baseService).getLastByItemId(rowData.id)];
|
|
24686
24763
|
case 3:
|
|
24687
|
-
itemWorkflowHistoryLast = (
|
|
24764
|
+
itemWorkflowHistoryLast = (_f.sent()).data;
|
|
24688
24765
|
if (itemWorkflowHistoryLast
|
|
24689
24766
|
&& itemWorkflowHistoryLast.actionCode != MaActionBatDauQuyTrinh
|
|
24690
24767
|
&& itemWorkflowHistoryLast.userIdCreated.toUpperCase() == userIdStringUpper
|
|
@@ -24704,7 +24781,7 @@
|
|
|
24704
24781
|
label: exports.ButtonTextActionCongViec.XEM_LICH_SU,
|
|
24705
24782
|
command: function () { return _this.viewHistoryWorkflow(crudListSetting, rowData); }
|
|
24706
24783
|
});
|
|
24707
|
-
|
|
24784
|
+
_f.label = 4;
|
|
24708
24785
|
case 4: return [2 /*return*/, buttonContexts];
|
|
24709
24786
|
}
|
|
24710
24787
|
});
|
|
@@ -24714,13 +24791,13 @@
|
|
|
24714
24791
|
return __awaiter(this, void 0, void 0, function () {
|
|
24715
24792
|
var itemTask, taskFormModel, compRef;
|
|
24716
24793
|
var _this = this;
|
|
24717
|
-
return __generator(this, function (
|
|
24718
|
-
switch (
|
|
24794
|
+
return __generator(this, function (_f) {
|
|
24795
|
+
switch (_f.label) {
|
|
24719
24796
|
case 0: return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
24720
24797
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24721
24798
|
])];
|
|
24722
24799
|
case 1:
|
|
24723
|
-
itemTask = (
|
|
24800
|
+
itemTask = (_f.sent()).data;
|
|
24724
24801
|
if (itemTask == null) {
|
|
24725
24802
|
return [2 /*return*/, this._notifierService.showWarning('Không tìm thấy công việc gắn với bản ghi')];
|
|
24726
24803
|
}
|
|
@@ -24731,7 +24808,7 @@
|
|
|
24731
24808
|
this.detailTaskModel.showEditForm = true;
|
|
24732
24809
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('congviec', 'BaseCongViecFormComponent', this.detailTaskViewContainer)];
|
|
24733
24810
|
case 2:
|
|
24734
|
-
compRef =
|
|
24811
|
+
compRef = _f.sent();
|
|
24735
24812
|
if (this.dialogDetailTask) {
|
|
24736
24813
|
this.dialogDetailTask.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24737
24814
|
}
|
|
@@ -24768,11 +24845,11 @@
|
|
|
24768
24845
|
return __awaiter(this, void 0, void 0, function () {
|
|
24769
24846
|
var workflowSetting, compRef;
|
|
24770
24847
|
var _this = this;
|
|
24771
|
-
return __generator(this, function (
|
|
24772
|
-
switch (
|
|
24848
|
+
return __generator(this, function (_f) {
|
|
24849
|
+
switch (_f.label) {
|
|
24773
24850
|
case 0: return [4 /*yield*/, this.getItemWorkflowSetting(crudListSetting, rowData)];
|
|
24774
24851
|
case 1:
|
|
24775
|
-
workflowSetting =
|
|
24852
|
+
workflowSetting = _f.sent();
|
|
24776
24853
|
if (!workflowSetting)
|
|
24777
24854
|
return [2 /*return*/];
|
|
24778
24855
|
this.currentItem = rowData;
|
|
@@ -24782,7 +24859,7 @@
|
|
|
24782
24859
|
this.workflowHistoryModel.showEditForm = true;
|
|
24783
24860
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowHistoryNewComponent', this.workflowHistoryNewViewContainer)];
|
|
24784
24861
|
case 2:
|
|
24785
|
-
compRef =
|
|
24862
|
+
compRef = _f.sent();
|
|
24786
24863
|
compRef.instance.businessSetting = crudListSetting;
|
|
24787
24864
|
compRef.instance.tableName = this.workflowHistoryModel.data.tableName;
|
|
24788
24865
|
compRef.instance.item = rowData;
|
|
@@ -24800,8 +24877,8 @@
|
|
|
24800
24877
|
return __awaiter(this, void 0, void 0, function () {
|
|
24801
24878
|
var domainNewTab, compRef;
|
|
24802
24879
|
var _this = this;
|
|
24803
|
-
return __generator(this, function (
|
|
24804
|
-
switch (
|
|
24880
|
+
return __generator(this, function (_f) {
|
|
24881
|
+
switch (_f.label) {
|
|
24805
24882
|
case 0:
|
|
24806
24883
|
if (workflowAction.openNewTab) {
|
|
24807
24884
|
domainNewTab = workflowAction.domainNewTab;
|
|
@@ -24823,7 +24900,7 @@
|
|
|
24823
24900
|
this.processWorkflowModel.header = workflowAction.name;
|
|
24824
24901
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'ProcessWorkflowFormComponent', this.processWorkflowFormViewContainer)];
|
|
24825
24902
|
case 1:
|
|
24826
|
-
compRef =
|
|
24903
|
+
compRef = _f.sent();
|
|
24827
24904
|
if (this.dialogProcessWorkflowForm) {
|
|
24828
24905
|
this.dialogProcessWorkflowForm.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24829
24906
|
}
|
|
@@ -24842,15 +24919,15 @@
|
|
|
24842
24919
|
return __awaiter(this, void 0, void 0, function () {
|
|
24843
24920
|
var compRef;
|
|
24844
24921
|
var _this = this;
|
|
24845
|
-
return __generator(this, function (
|
|
24846
|
-
switch (
|
|
24922
|
+
return __generator(this, function (_f) {
|
|
24923
|
+
switch (_f.label) {
|
|
24847
24924
|
case 0:
|
|
24848
24925
|
this.choYKienModel.data.rowData = rowData;
|
|
24849
24926
|
this.choYKienModel.data.setting = crudListSetting;
|
|
24850
24927
|
this.choYKienModel.showEditForm = true;
|
|
24851
24928
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'ChoYKienFormComponent', this.choYKienFormViewContainer)];
|
|
24852
24929
|
case 1:
|
|
24853
|
-
compRef =
|
|
24930
|
+
compRef = _f.sent();
|
|
24854
24931
|
if (this.dialogChoYKienForm) {
|
|
24855
24932
|
this.dialogChoYKienForm.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24856
24933
|
}
|
|
@@ -24866,8 +24943,8 @@
|
|
|
24866
24943
|
ListComponentBase.prototype.startWorkflow = function (rowData, workflow) {
|
|
24867
24944
|
return __awaiter(this, void 0, void 0, function () {
|
|
24868
24945
|
var _this = this;
|
|
24869
|
-
return __generator(this, function (
|
|
24870
|
-
switch (
|
|
24946
|
+
return __generator(this, function (_f) {
|
|
24947
|
+
switch (_f.label) {
|
|
24871
24948
|
case 0: return [4 /*yield*/, this.setting.baseService.startWorkflow(rowData.id, workflow.code)
|
|
24872
24949
|
.then(function (res) { return _this.handleResponse(res, 'Chạy quy trình thành công', function (f) {
|
|
24873
24950
|
_this.onStartedWorkflow.emit(rowData.id);
|
|
@@ -24875,7 +24952,7 @@
|
|
|
24875
24952
|
_this.getData();
|
|
24876
24953
|
}); })];
|
|
24877
24954
|
case 1:
|
|
24878
|
-
|
|
24955
|
+
_f.sent();
|
|
24879
24956
|
return [2 /*return*/];
|
|
24880
24957
|
}
|
|
24881
24958
|
});
|
|
@@ -24900,7 +24977,7 @@
|
|
|
24900
24977
|
ListComponentBase.prototype.createShareLink = function () {
|
|
24901
24978
|
return __awaiter(this, void 0, void 0, function () {
|
|
24902
24979
|
var rowData;
|
|
24903
|
-
return __generator(this, function (
|
|
24980
|
+
return __generator(this, function (_f) {
|
|
24904
24981
|
if (!this.setting.checkReadyToTrinhKy()) {
|
|
24905
24982
|
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
24983
|
}
|
|
@@ -24912,17 +24989,17 @@
|
|
|
24912
24989
|
};
|
|
24913
24990
|
ListComponentBase.prototype.createShareLinkMultiple = function () {
|
|
24914
24991
|
return __awaiter(this, void 0, void 0, function () {
|
|
24915
|
-
return __generator(this, function (
|
|
24992
|
+
return __generator(this, function (_f) {
|
|
24916
24993
|
this.showShareLinkForm(this.model.selectedItems);
|
|
24917
24994
|
return [2 /*return*/];
|
|
24918
24995
|
});
|
|
24919
24996
|
});
|
|
24920
24997
|
};
|
|
24921
24998
|
ListComponentBase.prototype.disableMultipleCopyLink = function () {
|
|
24922
|
-
var e_14,
|
|
24999
|
+
var e_14, _f;
|
|
24923
25000
|
try {
|
|
24924
|
-
for (var
|
|
24925
|
-
var item =
|
|
25001
|
+
for (var _g = __values(this.model.selectedItems), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
25002
|
+
var item = _h.value;
|
|
24926
25003
|
if (this.disableCopyLink(item)) {
|
|
24927
25004
|
return true;
|
|
24928
25005
|
}
|
|
@@ -24931,7 +25008,7 @@
|
|
|
24931
25008
|
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
24932
25009
|
finally {
|
|
24933
25010
|
try {
|
|
24934
|
-
if (
|
|
25011
|
+
if (_h && !_h.done && (_f = _g.return)) _f.call(_g);
|
|
24935
25012
|
}
|
|
24936
25013
|
finally { if (e_14) throw e_14.error; }
|
|
24937
25014
|
}
|
|
@@ -24951,7 +25028,7 @@
|
|
|
24951
25028
|
};
|
|
24952
25029
|
ListComponentBase.prototype.showSettingsPermission = function () {
|
|
24953
25030
|
return __awaiter(this, void 0, void 0, function () {
|
|
24954
|
-
return __generator(this, function (
|
|
25031
|
+
return __generator(this, function (_f) {
|
|
24955
25032
|
if (this.creatingSearchInfo)
|
|
24956
25033
|
return [2 /*return*/];
|
|
24957
25034
|
this._showSettingsPermission = true;
|
|
@@ -24963,13 +25040,13 @@
|
|
|
24963
25040
|
return __awaiter(this, void 0, void 0, function () {
|
|
24964
25041
|
var compRef;
|
|
24965
25042
|
var _this = this;
|
|
24966
|
-
return __generator(this, function (
|
|
24967
|
-
switch (
|
|
25043
|
+
return __generator(this, function (_f) {
|
|
25044
|
+
switch (_f.label) {
|
|
24968
25045
|
case 0:
|
|
24969
25046
|
this._showSettingsWorkflow = true;
|
|
24970
25047
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowSettingDialogComponent', this.workflowSettingDialogViewContainer)];
|
|
24971
25048
|
case 1:
|
|
24972
|
-
compRef =
|
|
25049
|
+
compRef = _f.sent();
|
|
24973
25050
|
compRef.instance.parentSetting = this.setting;
|
|
24974
25051
|
compRef.instance.parentContext = this.context;
|
|
24975
25052
|
compRef.instance.parentModel = this.model;
|
|
@@ -24985,13 +25062,13 @@
|
|
|
24985
25062
|
return __awaiter(this, void 0, void 0, function () {
|
|
24986
25063
|
var compRef;
|
|
24987
25064
|
var _this = this;
|
|
24988
|
-
return __generator(this, function (
|
|
24989
|
-
switch (
|
|
25065
|
+
return __generator(this, function (_f) {
|
|
25066
|
+
switch (_f.label) {
|
|
24990
25067
|
case 0:
|
|
24991
25068
|
this.workflowSettingModel.showEditForm = true;
|
|
24992
25069
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowSettingNewComponent', this.workflowsettingnewViewContainer)];
|
|
24993
25070
|
case 1:
|
|
24994
|
-
compRef =
|
|
25071
|
+
compRef = _f.sent();
|
|
24995
25072
|
dialog.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24996
25073
|
compRef.instance.parentSetting = this.setting;
|
|
24997
25074
|
compRef.instance.onSaved.subscribe(function (event) { return _this.onSaveWorkflowSettingsNew(null); });
|
|
@@ -25005,13 +25082,13 @@
|
|
|
25005
25082
|
return __awaiter(this, void 0, void 0, function () {
|
|
25006
25083
|
var compRef;
|
|
25007
25084
|
var _this = this;
|
|
25008
|
-
return __generator(this, function (
|
|
25009
|
-
switch (
|
|
25085
|
+
return __generator(this, function (_f) {
|
|
25086
|
+
switch (_f.label) {
|
|
25010
25087
|
case 0:
|
|
25011
25088
|
this.permissionSharingModel.showEditForm = true;
|
|
25012
25089
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'PermissionSharingComponent', this.permissionSharingViewContainer)];
|
|
25013
25090
|
case 1:
|
|
25014
|
-
compRef =
|
|
25091
|
+
compRef = _f.sent();
|
|
25015
25092
|
compRef.instance.item = this.rowDataCurrent;
|
|
25016
25093
|
compRef.instance.baseService = this.setting.baseService;
|
|
25017
25094
|
compRef.instance.onCancel.subscribe(function (event) { return _this.permissionSharingModel.showEditForm = false; });
|
|
@@ -25023,13 +25100,13 @@
|
|
|
25023
25100
|
ListComponentBase.prototype.showAttachedTask = function () {
|
|
25024
25101
|
return __awaiter(this, void 0, void 0, function () {
|
|
25025
25102
|
var compRef;
|
|
25026
|
-
return __generator(this, function (
|
|
25027
|
-
switch (
|
|
25103
|
+
return __generator(this, function (_f) {
|
|
25104
|
+
switch (_f.label) {
|
|
25028
25105
|
case 0:
|
|
25029
25106
|
this.attachedTaskModel.showEditForm = true;
|
|
25030
25107
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('congviec', 'BaseCongViecComponent', this.baseCongViecViewContainer)];
|
|
25031
25108
|
case 1:
|
|
25032
|
-
compRef =
|
|
25109
|
+
compRef = _f.sent();
|
|
25033
25110
|
compRef.instance.serviceCode = this.setting.baseService.serviceCode;
|
|
25034
25111
|
compRef.instance.entity = this.setting.baseService.entityName;
|
|
25035
25112
|
compRef.instance.itemIdAttach = this.rowDataCurrent.id;
|
|
@@ -25042,13 +25119,13 @@
|
|
|
25042
25119
|
return __awaiter(this, void 0, void 0, function () {
|
|
25043
25120
|
var compRef;
|
|
25044
25121
|
var _this = this;
|
|
25045
|
-
return __generator(this, function (
|
|
25046
|
-
switch (
|
|
25122
|
+
return __generator(this, function (_f) {
|
|
25123
|
+
switch (_f.label) {
|
|
25047
25124
|
case 0:
|
|
25048
25125
|
this.permissionListModel.showEditForm = true;
|
|
25049
25126
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowPermissionComponent', this.workflowPermissionViewContainer)];
|
|
25050
25127
|
case 1:
|
|
25051
|
-
compRef =
|
|
25128
|
+
compRef = _f.sent();
|
|
25052
25129
|
// this.dialogWorkflowPermission.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
25053
25130
|
compRef.instance.item = this.rowDataCurrent;
|
|
25054
25131
|
compRef.instance.businessSetting = this.setting;
|
|
@@ -25105,6 +25182,137 @@
|
|
|
25105
25182
|
});
|
|
25106
25183
|
});
|
|
25107
25184
|
};
|
|
25185
|
+
ListComponentBase.prototype.handleShowFormSettingButton = function () {
|
|
25186
|
+
var _a, _b, _c, _d, _e;
|
|
25187
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
25188
|
+
var lstBtnCustom, lstBtnAction, _loop_7, this_5, lstBtnCustom_1, lstBtnCustom_1_1, item, lstMenuButtons, buttonSetting;
|
|
25189
|
+
var e_15, _f;
|
|
25190
|
+
var _this = this;
|
|
25191
|
+
return __generator(this, function (_g) {
|
|
25192
|
+
switch (_g.label) {
|
|
25193
|
+
case 0:
|
|
25194
|
+
// Tổng hợp dữ liệu các nút từ ngTemplate + base + menuButton
|
|
25195
|
+
this.buttonAuthorizeModel.data.dataSource = [];
|
|
25196
|
+
lstBtnCustom = this.lstButtonElement[exports.EnumProperties.RESULTS].concat(this.lstButtonTemplate);
|
|
25197
|
+
lstBtnAction = [];
|
|
25198
|
+
_loop_7 = function (item) {
|
|
25199
|
+
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;
|
|
25200
|
+
if (!buttonText || lstBtnAction.some(function (p) { return p.rawText === buttonText; })) {
|
|
25201
|
+
return "continue";
|
|
25202
|
+
}
|
|
25203
|
+
this_5.addButtonAction(lstBtnAction, this_5.authorizeButtonKey, buttonText);
|
|
25204
|
+
};
|
|
25205
|
+
this_5 = this;
|
|
25206
|
+
try {
|
|
25207
|
+
for (lstBtnCustom_1 = __values(lstBtnCustom), lstBtnCustom_1_1 = lstBtnCustom_1.next(); !lstBtnCustom_1_1.done; lstBtnCustom_1_1 = lstBtnCustom_1.next()) {
|
|
25208
|
+
item = lstBtnCustom_1_1.value;
|
|
25209
|
+
_loop_7(item);
|
|
25210
|
+
}
|
|
25211
|
+
}
|
|
25212
|
+
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
25213
|
+
finally {
|
|
25214
|
+
try {
|
|
25215
|
+
if (lstBtnCustom_1_1 && !lstBtnCustom_1_1.done && (_f = lstBtnCustom_1.return)) _f.call(lstBtnCustom_1);
|
|
25216
|
+
}
|
|
25217
|
+
finally { if (e_15) throw e_15.error; }
|
|
25218
|
+
}
|
|
25219
|
+
return [4 /*yield*/, this.menuButtons({})];
|
|
25220
|
+
case 1:
|
|
25221
|
+
lstMenuButtons = (_d = _g.sent()) !== null && _d !== void 0 ? _d : [];
|
|
25222
|
+
if (lstMenuButtons.length) {
|
|
25223
|
+
lstMenuButtons.forEach(function (item) { return _this.addButtonAction(lstBtnAction, _this.authorizeButtonKey, item.label); });
|
|
25224
|
+
}
|
|
25225
|
+
buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
25226
|
+
((_e = buttonSetting[this.authorizeButtonKey]) === null || _e === void 0 ? void 0 : _e.length) && buttonSetting[this.authorizeButtonKey].forEach(function (item) {
|
|
25227
|
+
var permissionItem = lstBtnAction.find(function (p) { return p.permissionCode == item.code; });
|
|
25228
|
+
if (permissionItem) {
|
|
25229
|
+
permissionItem.isAuthorize = true;
|
|
25230
|
+
permissionItem.id = item.id;
|
|
25231
|
+
}
|
|
25232
|
+
});
|
|
25233
|
+
this.buttonAuthorizeModel.data.dataSource = lstBtnAction;
|
|
25234
|
+
this.buttonAuthorizeModel.showEditForm = true;
|
|
25235
|
+
return [2 /*return*/];
|
|
25236
|
+
}
|
|
25237
|
+
});
|
|
25238
|
+
});
|
|
25239
|
+
};
|
|
25240
|
+
ListComponentBase.prototype.onShowFormSettingButton = function () {
|
|
25241
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
25242
|
+
var _this = this;
|
|
25243
|
+
return __generator(this, function (_f) {
|
|
25244
|
+
this.checkedAll = true;
|
|
25245
|
+
this.handleCheckAll();
|
|
25246
|
+
setTimeout(function () {
|
|
25247
|
+
_this.handleShowFormSettingButton();
|
|
25248
|
+
}, 100);
|
|
25249
|
+
return [2 /*return*/];
|
|
25250
|
+
});
|
|
25251
|
+
});
|
|
25252
|
+
};
|
|
25253
|
+
ListComponentBase.prototype.setBtnReady = function (isReady) {
|
|
25254
|
+
this.isBtnReady = isReady;
|
|
25255
|
+
};
|
|
25256
|
+
ListComponentBase.prototype.addButtonAction = function (lstBtnAction, key, rawText, id) {
|
|
25257
|
+
id !== null && id !== void 0 ? id : (id = this._commonService.guid());
|
|
25258
|
+
var permissionCode = this._commonService.convertStringToUnSign(rawText).replace(/ /g, '_').toUpperCase();
|
|
25259
|
+
lstBtnAction.push(new ButtonAction({
|
|
25260
|
+
id: id,
|
|
25261
|
+
rawText: rawText,
|
|
25262
|
+
permissionCode: "[" + key + "]_[" + permissionCode + "]"
|
|
25263
|
+
}));
|
|
25264
|
+
};
|
|
25265
|
+
ListComponentBase.prototype.setAuthorizeButton = function (lstButtonTemplate) {
|
|
25266
|
+
var _a, _b;
|
|
25267
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
25268
|
+
var filterPermission, lstPermissionCode, buttonSetting, lstMenuButton, lstMenuButtons;
|
|
25269
|
+
var _this = this;
|
|
25270
|
+
return __generator(this, function (_f) {
|
|
25271
|
+
switch (_f.label) {
|
|
25272
|
+
case 0:
|
|
25273
|
+
this.authorizeButtonKey = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');
|
|
25274
|
+
if (i0.isDevMode()) {
|
|
25275
|
+
this.authorizeButtonKey = this.serviceCode.toUpperCase() + "_" + window.location.pathname.substring(1).toUpperCase();
|
|
25276
|
+
}
|
|
25277
|
+
filterPermission = [this.newFilter('code', exports.Operator.contain, "[" + this.authorizeButtonKey + "]")];
|
|
25278
|
+
return [4 /*yield*/, this._basePermissionService.getAllWithIgnore(filterPermission, 'code,id')];
|
|
25279
|
+
case 1:
|
|
25280
|
+
lstPermissionCode = (_a = (_f.sent()).data) !== null && _a !== void 0 ? _a : [];
|
|
25281
|
+
buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
25282
|
+
buttonSetting[this.authorizeButtonKey] = lstPermissionCode;
|
|
25283
|
+
this.lstButtonTemplate = lstButtonTemplate;
|
|
25284
|
+
if (!buttonSetting[this.authorizeButtonKey].length) {
|
|
25285
|
+
this.isBtnReady = true;
|
|
25286
|
+
return [2 /*return*/];
|
|
25287
|
+
}
|
|
25288
|
+
sessionStorage.setItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE, JSON.stringify(buttonSetting));
|
|
25289
|
+
lstMenuButton = [];
|
|
25290
|
+
return [4 /*yield*/, this.menuButtons({})];
|
|
25291
|
+
case 2:
|
|
25292
|
+
lstMenuButtons = (_b = _f.sent()) !== null && _b !== void 0 ? _b : [];
|
|
25293
|
+
if (!lstMenuButtons.length) {
|
|
25294
|
+
this.isBtnReady = true;
|
|
25295
|
+
return [2 /*return*/];
|
|
25296
|
+
}
|
|
25297
|
+
lstMenuButtons.forEach(function (item) { return _this.addButtonAction(lstMenuButton, _this.authorizeButtonKey, item.label); });
|
|
25298
|
+
buttonSetting[this.authorizeButtonKey].forEach(function (item) {
|
|
25299
|
+
var itemBtnMenu = lstMenuButton.find(function (p) { return p.permissionCode == item.code; });
|
|
25300
|
+
if (itemBtnMenu) {
|
|
25301
|
+
_this.lstBtnAuthorizeMenu.push(itemBtnMenu);
|
|
25302
|
+
}
|
|
25303
|
+
});
|
|
25304
|
+
this.isBtnReady = true;
|
|
25305
|
+
this.handleTableRendered();
|
|
25306
|
+
return [2 /*return*/];
|
|
25307
|
+
}
|
|
25308
|
+
});
|
|
25309
|
+
});
|
|
25310
|
+
};
|
|
25311
|
+
ListComponentBase.prototype.handleCloseAuthorizeButtonForm = function () {
|
|
25312
|
+
this.checkedAll = false;
|
|
25313
|
+
this.handleCheckAll();
|
|
25314
|
+
this.buttonAuthorizeModel.showEditForm = false;
|
|
25315
|
+
};
|
|
25108
25316
|
return ListComponentBase;
|
|
25109
25317
|
}(ComponentBase));
|
|
25110
25318
|
ListComponentBase.decorators = [
|
|
@@ -25117,6 +25325,7 @@
|
|
|
25117
25325
|
ListComponentBase.propDecorators = {
|
|
25118
25326
|
treeTable: [{ type: i0.ViewChild, args: ['treetable',] }],
|
|
25119
25327
|
_table: [{ type: i0.ViewChild, args: [table.Table, { static: false },] }],
|
|
25328
|
+
lstButtonElement: [{ type: i0.ViewChildren, args: ['buttonBase',] }],
|
|
25120
25329
|
container: [{ type: i0.ViewChild, args: ['container', { static: true },] }],
|
|
25121
25330
|
iconToggleRowGroup: [{ type: i0.ViewChild, args: ['iconToggleRowGroup', { static: true },] }],
|
|
25122
25331
|
iconToggleRowData: [{ type: i0.ViewChild, args: ['iconToggleRowData', { static: true },] }],
|
|
@@ -25380,7 +25589,7 @@
|
|
|
25380
25589
|
{ type: i0.Component, args: [{
|
|
25381
25590
|
// tslint:disable-next-line: component-selector
|
|
25382
25591
|
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>",
|
|
25592
|
+
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
25593
|
providers: [i3.DecimalPipe, i3.DatePipe],
|
|
25385
25594
|
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
25595
|
},] }
|
|
@@ -25693,6 +25902,7 @@
|
|
|
25693
25902
|
_this.hasCrudList = true;
|
|
25694
25903
|
_this.customGetData = false;
|
|
25695
25904
|
_this.readyToTrinhKy = false;
|
|
25905
|
+
_this.showAllButtons = false;
|
|
25696
25906
|
_this.plusUrl = '';
|
|
25697
25907
|
_this.dataSearchCommon = {};
|
|
25698
25908
|
_this.popupSizeMax = new PopupSize({ maximize: true });
|
|
@@ -25791,7 +26001,7 @@
|
|
|
25791
26001
|
};
|
|
25792
26002
|
ListBase.prototype.mergeInfoToColumnSchema = function () {
|
|
25793
26003
|
var _this = this;
|
|
25794
|
-
var i = 0, constWidth = 83, sumWidth = 0, widthColBefore = 0; // 83 tổng chiều dài checkbox + stt crud-list
|
|
26004
|
+
var i = 0, constWidth = 83, sumWidth = 0, widthColBefore = 0; // 83 tổng chiều dài checkbox + stt crud-list
|
|
25795
26005
|
if (this.setting.hiddenCheckbox)
|
|
25796
26006
|
constWidth -= 35;
|
|
25797
26007
|
if (this.setting.hiddenOrderColumn)
|
|
@@ -26119,6 +26329,7 @@
|
|
|
26119
26329
|
ListBase.prototype.processGetData = function (response) {
|
|
26120
26330
|
return __awaiter(this, void 0, void 0, function () {
|
|
26121
26331
|
var _a, dataSource, rawDataSource, resetSelectedItems;
|
|
26332
|
+
var _this = this;
|
|
26122
26333
|
return __generator(this, function (_b) {
|
|
26123
26334
|
switch (_b.label) {
|
|
26124
26335
|
case 0:
|
|
@@ -26154,11 +26365,26 @@
|
|
|
26154
26365
|
// this._getRefDataDropdown(this.model.dataSource);
|
|
26155
26366
|
// K dùng hàm ở trên vì đối với tree list thì model.dataSource đã bị tái cấu trúc
|
|
26156
26367
|
this._getRefDataDropdown(rawDataSource);
|
|
26368
|
+
setTimeout(function () {
|
|
26369
|
+
_this.setAuthorizeButtons();
|
|
26370
|
+
}, 10);
|
|
26157
26371
|
return [2 /*return*/];
|
|
26158
26372
|
}
|
|
26159
26373
|
});
|
|
26160
26374
|
});
|
|
26161
26375
|
};
|
|
26376
|
+
ListBase.prototype.setAuthorizeButtons = function () {
|
|
26377
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
26378
|
+
return __generator(this, function (_a) {
|
|
26379
|
+
if (this.setting.hiddenAuthorizeButton) {
|
|
26380
|
+
this.crudList.setBtnReady(true);
|
|
26381
|
+
return [2 /*return*/];
|
|
26382
|
+
}
|
|
26383
|
+
this.crudList.setAuthorizeButton(this.lstButtonElement['_results']);
|
|
26384
|
+
return [2 /*return*/];
|
|
26385
|
+
});
|
|
26386
|
+
});
|
|
26387
|
+
};
|
|
26162
26388
|
ListBase.prototype.beforeRenderDataSource = function (datasource) {
|
|
26163
26389
|
return datasource;
|
|
26164
26390
|
};
|
|
@@ -26876,6 +27102,7 @@
|
|
|
26876
27102
|
{ type: Boolean }
|
|
26877
27103
|
]; };
|
|
26878
27104
|
ListBase.propDecorators = {
|
|
27105
|
+
lstButtonElement: [{ type: i0.ViewChildren, args: ['button',] }],
|
|
26879
27106
|
contentCrudList: [{ type: i0.ViewChild, args: [CrudListComponent,] }],
|
|
26880
27107
|
contentTreeTable: [{ type: i0.ViewChild, args: [TreeTableComponent,] }],
|
|
26881
27108
|
parentModel: [{ type: i0.Input }],
|
|
@@ -38351,10 +38578,11 @@
|
|
|
38351
38578
|
]; };
|
|
38352
38579
|
|
|
38353
38580
|
var AuthorizeDirective = /** @class */ (function () {
|
|
38354
|
-
function AuthorizeDirective(_el, _permissionService, _userService, _moduleConfigService) {
|
|
38581
|
+
function AuthorizeDirective(_el, _permissionService, _userService, _commonService, _moduleConfigService) {
|
|
38355
38582
|
this._el = _el;
|
|
38356
38583
|
this._permissionService = _permissionService;
|
|
38357
38584
|
this._userService = _userService;
|
|
38585
|
+
this._commonService = _commonService;
|
|
38358
38586
|
this._moduleConfigService = _moduleConfigService;
|
|
38359
38587
|
this._permissionTypes = exports.PermissionTypes.CONTROL;
|
|
38360
38588
|
this.ignoreAdmin = false;
|
|
@@ -38382,13 +38610,16 @@
|
|
|
38382
38610
|
configurable: true
|
|
38383
38611
|
});
|
|
38384
38612
|
AuthorizeDirective.prototype.ngOnInit = function () {
|
|
38613
|
+
};
|
|
38614
|
+
AuthorizeDirective.prototype.ngAfterViewInit = function () {
|
|
38385
38615
|
var _this = this;
|
|
38386
|
-
|
|
38387
|
-
return;
|
|
38388
|
-
}
|
|
38616
|
+
this.setAuthorizeButton();
|
|
38389
38617
|
if (this._moduleCode) {
|
|
38390
38618
|
this.appCode = this._moduleCode;
|
|
38391
38619
|
}
|
|
38620
|
+
if (!this.enableAuthorize) {
|
|
38621
|
+
return;
|
|
38622
|
+
}
|
|
38392
38623
|
var currentUser = this._userService.getCurrentUser();
|
|
38393
38624
|
if (!currentUser || !(this.appCode)) {
|
|
38394
38625
|
console.log('Không đọc được user hoặc appCode');
|
|
@@ -38420,6 +38651,31 @@
|
|
|
38420
38651
|
}
|
|
38421
38652
|
});
|
|
38422
38653
|
};
|
|
38654
|
+
AuthorizeDirective.prototype.setAuthorizeButton = function () {
|
|
38655
|
+
var _a, _b, _c;
|
|
38656
|
+
var key = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');
|
|
38657
|
+
if (i0.isDevMode()) {
|
|
38658
|
+
key = this.appCode + "_" + window.location.pathname.substring(1).toUpperCase();
|
|
38659
|
+
}
|
|
38660
|
+
// const componentName = this._element.closest(EnumProperties.CRUD_LIST)?.parentNode[EnumProperties.TAG_NAME];
|
|
38661
|
+
// if (componentName && !key.endsWith(componentName)) {
|
|
38662
|
+
// key += `_${componentName}`;
|
|
38663
|
+
// }
|
|
38664
|
+
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);
|
|
38665
|
+
if (!buttonText) {
|
|
38666
|
+
this.enableAuthorize = false;
|
|
38667
|
+
return;
|
|
38668
|
+
}
|
|
38669
|
+
this.buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
38670
|
+
var permissionCode = "[" + key + "]_[" + this._commonService.convertStringToUnSign(buttonText).replace(/ /g, '_').toUpperCase() + "]";
|
|
38671
|
+
var isSetAuthorize = (_c = this.buttonSetting[key]) === null || _c === void 0 ? void 0 : _c.find(function (p) { return p.code == permissionCode; });
|
|
38672
|
+
if (isSetAuthorize) {
|
|
38673
|
+
this.permission = permissionCode;
|
|
38674
|
+
}
|
|
38675
|
+
else {
|
|
38676
|
+
this.enableAuthorize = false;
|
|
38677
|
+
}
|
|
38678
|
+
};
|
|
38423
38679
|
AuthorizeDirective.prototype.ngAfterContentChecked = function () {
|
|
38424
38680
|
if (this._label && !this._bind && this._element.innerHTML !== '' && this.keepHTML) {
|
|
38425
38681
|
this._label.innerHTML = this._element.innerHTML;
|
|
@@ -38438,6 +38694,7 @@
|
|
|
38438
38694
|
{ type: i0.ElementRef },
|
|
38439
38695
|
{ type: PermissionService },
|
|
38440
38696
|
{ type: UserService },
|
|
38697
|
+
{ type: CommonService },
|
|
38441
38698
|
{ type: ModuleConfigService }
|
|
38442
38699
|
]; };
|
|
38443
38700
|
AuthorizeDirective.propDecorators = {
|
|
@@ -49749,6 +50006,174 @@
|
|
|
49749
50006
|
parentSetting: [{ type: i0.Input }]
|
|
49750
50007
|
};
|
|
49751
50008
|
|
|
50009
|
+
var SettingAuthorizeButtonComponent = /** @class */ (function (_super) {
|
|
50010
|
+
__extends(SettingAuthorizeButtonComponent, _super);
|
|
50011
|
+
function SettingAuthorizeButtonComponent(_injector, _basePermissionService, _moduleConfigService) {
|
|
50012
|
+
var _this = _super.call(this, _injector) || this;
|
|
50013
|
+
_this._injector = _injector;
|
|
50014
|
+
_this._basePermissionService = _basePermissionService;
|
|
50015
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
50016
|
+
_this.authorizeButtonKey = '';
|
|
50017
|
+
_this.dataSource = [];
|
|
50018
|
+
_this.appCode = '';
|
|
50019
|
+
return _this;
|
|
50020
|
+
}
|
|
50021
|
+
SettingAuthorizeButtonComponent.prototype.ngOnInit = function () {
|
|
50022
|
+
this.appCode = this._moduleConfigService.getConfig().appCode;
|
|
50023
|
+
this.setting.baseService = this._basePermissionService;
|
|
50024
|
+
this.customGetData = true;
|
|
50025
|
+
this.setting.hiddenAdvanceSearch = true;
|
|
50026
|
+
this.setting.hiddenHeader = true;
|
|
50027
|
+
this.setting.heightType = exports.HeightType.dynamic;
|
|
50028
|
+
this.setting.hiddenOrderColumn = true;
|
|
50029
|
+
this.setting.hiddenFilterRow = true;
|
|
50030
|
+
this.setting.hiddenSettingWorkflow = true;
|
|
50031
|
+
this.setting.hiddenAuthorizeButton = true;
|
|
50032
|
+
this.setting.hiddenSettingPermission = true;
|
|
50033
|
+
this.setting.fixHeightTypeInDialog = false;
|
|
50034
|
+
this.setting.hiddenCheckbox = false;
|
|
50035
|
+
this.setting.showEditLink = false;
|
|
50036
|
+
this.setting.modelSchemas = [
|
|
50037
|
+
new ModelSchema({
|
|
50038
|
+
field: 'permissionCode',
|
|
50039
|
+
name: 'Mã',
|
|
50040
|
+
}),
|
|
50041
|
+
new ModelSchema({
|
|
50042
|
+
field: 'rawText',
|
|
50043
|
+
name: 'Tên',
|
|
50044
|
+
}),
|
|
50045
|
+
new ModelSchema({
|
|
50046
|
+
field: 'isAuthorize',
|
|
50047
|
+
name: 'Đã tạo quyền',
|
|
50048
|
+
}),
|
|
50049
|
+
new ModelSchema({
|
|
50050
|
+
field: 'ma1',
|
|
50051
|
+
name: 'Mã',
|
|
50052
|
+
}),
|
|
50053
|
+
];
|
|
50054
|
+
this.setting.cols = [
|
|
50055
|
+
new ColumnSchemaBase({ field: 'permissionCode', sort: false, showEditLink: false }),
|
|
50056
|
+
new ColumnSchemaBase({ field: 'rawText', width: '230px', sort: false }),
|
|
50057
|
+
new ColumnSchemaBase({ field: 'isAuthorize', dataType: exports.DataType.boolean, width: '100px', sort: false }),
|
|
50058
|
+
];
|
|
50059
|
+
_super.prototype.ngOnInit.call(this);
|
|
50060
|
+
};
|
|
50061
|
+
SettingAuthorizeButtonComponent.prototype.getDataCustom = function (gridInfo) {
|
|
50062
|
+
this.model.dataSource = this.dataSource;
|
|
50063
|
+
this.afterGetData();
|
|
50064
|
+
};
|
|
50065
|
+
SettingAuthorizeButtonComponent.prototype.addBasePermission = function (rowData) {
|
|
50066
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
50067
|
+
var insertRes;
|
|
50068
|
+
return __generator(this, function (_a) {
|
|
50069
|
+
switch (_a.label) {
|
|
50070
|
+
case 0: return [4 /*yield*/, this._basePermissionService.post(rowData)];
|
|
50071
|
+
case 1:
|
|
50072
|
+
insertRes = _a.sent();
|
|
50073
|
+
if (insertRes.success) {
|
|
50074
|
+
this._notifierService.showSuccess('Thêm quyền thành công');
|
|
50075
|
+
this.updateDataSource(insertRes.data);
|
|
50076
|
+
return [2 /*return*/];
|
|
50077
|
+
}
|
|
50078
|
+
this._notifierService.showWarning('Có lỗi trong quá trình xử lý, vui lòng thử lại');
|
|
50079
|
+
return [2 /*return*/];
|
|
50080
|
+
}
|
|
50081
|
+
});
|
|
50082
|
+
});
|
|
50083
|
+
};
|
|
50084
|
+
SettingAuthorizeButtonComponent.prototype.deleteBasePermission = function (rowData) {
|
|
50085
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
50086
|
+
var _this = this;
|
|
50087
|
+
return __generator(this, function (_a) {
|
|
50088
|
+
this._notifierService.showConfirm('Xác nhận xóa quyền').then(function (res) { return __awaiter(_this, void 0, void 0, function () {
|
|
50089
|
+
var deleteRes;
|
|
50090
|
+
return __generator(this, function (_a) {
|
|
50091
|
+
switch (_a.label) {
|
|
50092
|
+
case 0:
|
|
50093
|
+
if (!res)
|
|
50094
|
+
return [2 /*return*/];
|
|
50095
|
+
return [4 /*yield*/, this._basePermissionService.delete(rowData.id)];
|
|
50096
|
+
case 1:
|
|
50097
|
+
deleteRes = _a.sent();
|
|
50098
|
+
if (deleteRes.success) {
|
|
50099
|
+
this._notifierService.showSuccess('Xóa quyền thành công');
|
|
50100
|
+
this.updateDataSource(rowData.id, true);
|
|
50101
|
+
return [2 /*return*/];
|
|
50102
|
+
}
|
|
50103
|
+
this._notifierService.showWarning(deleteRes.message);
|
|
50104
|
+
return [2 /*return*/];
|
|
50105
|
+
}
|
|
50106
|
+
});
|
|
50107
|
+
}); });
|
|
50108
|
+
return [2 /*return*/];
|
|
50109
|
+
});
|
|
50110
|
+
});
|
|
50111
|
+
};
|
|
50112
|
+
SettingAuthorizeButtonComponent.prototype.updateDataSource = function (id, isDeleted) {
|
|
50113
|
+
if (isDeleted === void 0) { isDeleted = false; }
|
|
50114
|
+
var currentRow = this.model.dataSource.find(function (p) { return p.id == id; });
|
|
50115
|
+
if (!currentRow)
|
|
50116
|
+
return;
|
|
50117
|
+
if (isDeleted) {
|
|
50118
|
+
currentRow.id = this._commonService.guid();
|
|
50119
|
+
}
|
|
50120
|
+
currentRow.isAuthorize = !isDeleted;
|
|
50121
|
+
this.afterGetData();
|
|
50122
|
+
};
|
|
50123
|
+
SettingAuthorizeButtonComponent.prototype.afterGetData = function () {
|
|
50124
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
50125
|
+
var _this = this;
|
|
50126
|
+
return __generator(this, function (_a) {
|
|
50127
|
+
this._unmarkLoading();
|
|
50128
|
+
if (!this.model.dataSource.length)
|
|
50129
|
+
return [2 /*return*/];
|
|
50130
|
+
this.model.dataSource.forEach(function (item) {
|
|
50131
|
+
item.name = item.rawText;
|
|
50132
|
+
item.code = item.permissionCode;
|
|
50133
|
+
item.moduleCode = _this.appCode;
|
|
50134
|
+
});
|
|
50135
|
+
return [2 /*return*/];
|
|
50136
|
+
});
|
|
50137
|
+
});
|
|
50138
|
+
};
|
|
50139
|
+
SettingAuthorizeButtonComponent.prototype.ngOnDestroy = function () {
|
|
50140
|
+
var _this = this;
|
|
50141
|
+
var buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
50142
|
+
this.model.dataSource.forEach(function (rowData) {
|
|
50143
|
+
var buttonItem = buttonSetting[_this.authorizeButtonKey].find(function (p) { return p.code == rowData.code; });
|
|
50144
|
+
if (rowData.isAuthorize && !buttonItem) {
|
|
50145
|
+
buttonSetting[_this.authorizeButtonKey].push({
|
|
50146
|
+
id: rowData.id,
|
|
50147
|
+
code: rowData.code,
|
|
50148
|
+
});
|
|
50149
|
+
}
|
|
50150
|
+
else if (!rowData.isAuthorize && buttonItem) {
|
|
50151
|
+
var index = buttonSetting[_this.authorizeButtonKey].indexOf(buttonItem);
|
|
50152
|
+
buttonSetting[_this.authorizeButtonKey].splice(index, 1);
|
|
50153
|
+
}
|
|
50154
|
+
});
|
|
50155
|
+
sessionStorage.setItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE, JSON.stringify(buttonSetting));
|
|
50156
|
+
};
|
|
50157
|
+
return SettingAuthorizeButtonComponent;
|
|
50158
|
+
}(DataListBase));
|
|
50159
|
+
SettingAuthorizeButtonComponent.decorators = [
|
|
50160
|
+
{ type: i0.Component, args: [{
|
|
50161
|
+
selector: 'settings-authorize-button',
|
|
50162
|
+
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>",
|
|
50163
|
+
providers: [ComponentContextService],
|
|
50164
|
+
styles: [""]
|
|
50165
|
+
},] }
|
|
50166
|
+
];
|
|
50167
|
+
SettingAuthorizeButtonComponent.ctorParameters = function () { return [
|
|
50168
|
+
{ type: i0.Injector },
|
|
50169
|
+
{ type: BasePermissionService },
|
|
50170
|
+
{ type: ModuleConfigService }
|
|
50171
|
+
]; };
|
|
50172
|
+
SettingAuthorizeButtonComponent.propDecorators = {
|
|
50173
|
+
authorizeButtonKey: [{ type: i0.Input }],
|
|
50174
|
+
dataSource: [{ type: i0.Input }]
|
|
50175
|
+
};
|
|
50176
|
+
|
|
49752
50177
|
var SettingsComponent = /** @class */ (function (_super) {
|
|
49753
50178
|
__extends(SettingsComponent, _super);
|
|
49754
50179
|
function SettingsComponent(_injector, _domService, _userService) {
|
|
@@ -53815,6 +54240,7 @@
|
|
|
53815
54240
|
TnAccordionTabComponent,
|
|
53816
54241
|
SplashComponentComponent,
|
|
53817
54242
|
SettingsWorkflowComponent,
|
|
54243
|
+
SettingAuthorizeButtonComponent,
|
|
53818
54244
|
SettingsWorkflowNo1Component,
|
|
53819
54245
|
CommonLibComponent
|
|
53820
54246
|
];
|
|
@@ -54022,6 +54448,7 @@
|
|
|
54022
54448
|
exports.BaseModule = BaseModule;
|
|
54023
54449
|
exports.BaseService = BaseService;
|
|
54024
54450
|
exports.BooleanFormatPipe = BooleanFormatPipe;
|
|
54451
|
+
exports.ButtonAction = ButtonAction;
|
|
54025
54452
|
exports.ButtonControlSchema = ButtonControlSchema;
|
|
54026
54453
|
exports.ButtonPermission = ButtonPermission;
|
|
54027
54454
|
exports.ButtonPermissions = ButtonPermissions;
|
|
@@ -54499,7 +54926,9 @@
|
|
|
54499
54926
|
exports["ɵdt"] = CheckReadyComponent;
|
|
54500
54927
|
exports["ɵdu"] = TnAccordionTabComponent;
|
|
54501
54928
|
exports["ɵdv"] = SettingsWorkflowComponent;
|
|
54502
|
-
exports["ɵdw"] =
|
|
54929
|
+
exports["ɵdw"] = SettingAuthorizeButtonComponent;
|
|
54930
|
+
exports["ɵdx"] = BasePermissionService;
|
|
54931
|
+
exports["ɵdy"] = SettingsWorkflowNo1Component;
|
|
54503
54932
|
exports["ɵe"] = ListBase;
|
|
54504
54933
|
exports["ɵf"] = ListComponentBase;
|
|
54505
54934
|
exports["ɵg"] = TreeTableComponent;
|