tnx-shared 5.3.167 → 5.3.168
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 +203 -203
- 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/list-component-base.d.ts.map +1 -1
- package/directives/authorize.directive.d.ts.map +1 -1
- package/esm2015/classes/base/list-component-base.js +6 -6
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/directives/authorize.directive.js +4 -4
- package/fesm2015/tnx-shared.js +9 -9
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -21729,7 +21729,7 @@
|
|
|
21729
21729
|
});
|
|
21730
21730
|
_this.buttonAuthorizeModel = new DialogModel({
|
|
21731
21731
|
header: 'Phân quyền nút chức năng',
|
|
21732
|
-
popupSize: new PopupSize({
|
|
21732
|
+
popupSize: new PopupSize({ maximize: true }),
|
|
21733
21733
|
data: { dataSouce: [] }
|
|
21734
21734
|
});
|
|
21735
21735
|
_this.shareLinkModel = new DialogModel({
|
|
@@ -22062,7 +22062,7 @@
|
|
|
22062
22062
|
configurable: true
|
|
22063
22063
|
});
|
|
22064
22064
|
ListComponentBase.prototype.ngOnInit = function () {
|
|
22065
|
-
var e_1,
|
|
22065
|
+
var e_1, _g;
|
|
22066
22066
|
var _this = this;
|
|
22067
22067
|
this.subscribe(ComCtxConstants.COMMON.ENTITY_METADATA_RELOADED, function (service) {
|
|
22068
22068
|
_this.entityMetadataService = service;
|
|
@@ -22085,7 +22085,7 @@
|
|
|
22085
22085
|
}
|
|
22086
22086
|
if (!this.setting.hiddenTrinhKy || !this.setting.disableShare) {
|
|
22087
22087
|
if (!this.menuButtons) {
|
|
22088
|
-
this.menuButtons = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (
|
|
22088
|
+
this.menuButtons = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_g) {
|
|
22089
22089
|
return [2 /*return*/, []];
|
|
22090
22090
|
}); }); };
|
|
22091
22091
|
}
|
|
@@ -22116,8 +22116,8 @@
|
|
|
22116
22116
|
}
|
|
22117
22117
|
if (this.currentUser == null) {
|
|
22118
22118
|
try {
|
|
22119
|
-
for (var
|
|
22120
|
-
var buttonPermissionCode =
|
|
22119
|
+
for (var _h = __values(this.lstButtonPermission), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
22120
|
+
var buttonPermissionCode = _j.value;
|
|
22121
22121
|
var buttonPermission = (this.setting.baseService.serviceCode + "/" + this.setting.baseService.entityName + "/" + buttonPermissionCode).toUpperCase();
|
|
22122
22122
|
this.buttonPermissionMap.set(buttonPermission, false);
|
|
22123
22123
|
}
|
|
@@ -22125,7 +22125,7 @@
|
|
|
22125
22125
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
22126
22126
|
finally {
|
|
22127
22127
|
try {
|
|
22128
|
-
if (
|
|
22128
|
+
if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
|
|
22129
22129
|
}
|
|
22130
22130
|
finally { if (e_1) throw e_1.error; }
|
|
22131
22131
|
}
|
|
@@ -22136,13 +22136,13 @@
|
|
|
22136
22136
|
&& (this._moduleConfigService.getConfig().environment.ignoreAdmin === true
|
|
22137
22137
|
|| this.currentUser.isadmin.toLowerCase() !== 'true')) {
|
|
22138
22138
|
this._permissionService.getServicePermission(this.setting.baseService.serviceCode).then(function (result) {
|
|
22139
|
-
var e_2,
|
|
22139
|
+
var e_2, _g;
|
|
22140
22140
|
var _a;
|
|
22141
22141
|
var lstBasePermission = result;
|
|
22142
22142
|
_this.lstButtonPermission = (_a = _this._moduleConfigService.getConfig().environment.buttonPermissions) !== null && _a !== void 0 ? _a : [];
|
|
22143
22143
|
try {
|
|
22144
|
-
for (var
|
|
22145
|
-
var buttonPermissionCode =
|
|
22144
|
+
for (var _h = __values(_this.lstButtonPermission), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
22145
|
+
var buttonPermissionCode = _j.value;
|
|
22146
22146
|
var buttonPermission = (_this.setting.baseService.serviceCode + "/" + _this.setting.baseService.entityName + "/" + buttonPermissionCode).toUpperCase();
|
|
22147
22147
|
_this.buttonPermissionMap.set(buttonPermission, lstBasePermission.includes(buttonPermission));
|
|
22148
22148
|
}
|
|
@@ -22150,7 +22150,7 @@
|
|
|
22150
22150
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
22151
22151
|
finally {
|
|
22152
22152
|
try {
|
|
22153
|
-
if (
|
|
22153
|
+
if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
|
|
22154
22154
|
}
|
|
22155
22155
|
finally { if (e_2) throw e_2.error; }
|
|
22156
22156
|
}
|
|
@@ -22218,7 +22218,7 @@
|
|
|
22218
22218
|
this.buildFilterColumn(this.setting.cols);
|
|
22219
22219
|
};
|
|
22220
22220
|
ListComponentBase.prototype.extendColumns = function (cols, appendCol) {
|
|
22221
|
-
var e_3,
|
|
22221
|
+
var e_3, _g;
|
|
22222
22222
|
var _this = this;
|
|
22223
22223
|
if (appendCol === void 0) { appendCol = true; }
|
|
22224
22224
|
this.setting.fieldNeedGetRef = [];
|
|
@@ -22364,7 +22364,7 @@
|
|
|
22364
22364
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
22365
22365
|
finally {
|
|
22366
22366
|
try {
|
|
22367
|
-
if (cols_1_1 && !cols_1_1.done && (
|
|
22367
|
+
if (cols_1_1 && !cols_1_1.done && (_g = cols_1.return)) _g.call(cols_1);
|
|
22368
22368
|
}
|
|
22369
22369
|
finally { if (e_3) throw e_3.error; }
|
|
22370
22370
|
}
|
|
@@ -22387,7 +22387,7 @@
|
|
|
22387
22387
|
});
|
|
22388
22388
|
};
|
|
22389
22389
|
ListComponentBase.prototype.formatColumns = function (cols) {
|
|
22390
|
-
var e_4,
|
|
22390
|
+
var e_4, _g;
|
|
22391
22391
|
try {
|
|
22392
22392
|
for (var cols_2 = __values(cols), cols_2_1 = cols_2.next(); !cols_2_1.done; cols_2_1 = cols_2.next()) {
|
|
22393
22393
|
var col = cols_2_1.value;
|
|
@@ -22403,13 +22403,13 @@
|
|
|
22403
22403
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
22404
22404
|
finally {
|
|
22405
22405
|
try {
|
|
22406
|
-
if (cols_2_1 && !cols_2_1.done && (
|
|
22406
|
+
if (cols_2_1 && !cols_2_1.done && (_g = cols_2.return)) _g.call(cols_2);
|
|
22407
22407
|
}
|
|
22408
22408
|
finally { if (e_4) throw e_4.error; }
|
|
22409
22409
|
}
|
|
22410
22410
|
};
|
|
22411
22411
|
ListComponentBase.prototype.getColumnSetting = function (colGroup) {
|
|
22412
|
-
var e_5,
|
|
22412
|
+
var e_5, _g;
|
|
22413
22413
|
this.setting.groupColumn = colGroup;
|
|
22414
22414
|
var dataSetting = localStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.COLUMN_SETTING);
|
|
22415
22415
|
if (dataSetting) {
|
|
@@ -22441,7 +22441,7 @@
|
|
|
22441
22441
|
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
22442
22442
|
finally {
|
|
22443
22443
|
try {
|
|
22444
|
-
if (settings_1_1 && !settings_1_1.done && (
|
|
22444
|
+
if (settings_1_1 && !settings_1_1.done && (_g = settings_1.return)) _g.call(settings_1);
|
|
22445
22445
|
}
|
|
22446
22446
|
finally { if (e_5) throw e_5.error; }
|
|
22447
22447
|
}
|
|
@@ -22696,7 +22696,7 @@
|
|
|
22696
22696
|
};
|
|
22697
22697
|
ListComponentBase.prototype.handleSearch = function (data) {
|
|
22698
22698
|
return __awaiter(this, void 0, void 0, function () {
|
|
22699
|
-
return __generator(this, function (
|
|
22699
|
+
return __generator(this, function (_g) {
|
|
22700
22700
|
this.filter_commonSearch = data.filters;
|
|
22701
22701
|
this.dataSearchCommon = data.dataForm;
|
|
22702
22702
|
this.setting.pageSetting.page = 1;
|
|
@@ -22735,17 +22735,17 @@
|
|
|
22735
22735
|
if (isTree === void 0) { isTree = false; }
|
|
22736
22736
|
return __awaiter(this, void 0, void 0, function () {
|
|
22737
22737
|
var rs;
|
|
22738
|
-
return __generator(this, function (
|
|
22739
|
-
switch (
|
|
22738
|
+
return __generator(this, function (_g) {
|
|
22739
|
+
switch (_g.label) {
|
|
22740
22740
|
case 0:
|
|
22741
22741
|
if (!this.setting.showConfirmExport) return [3 /*break*/, 2];
|
|
22742
22742
|
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')];
|
|
22743
22743
|
case 1:
|
|
22744
|
-
rs =
|
|
22744
|
+
rs = _g.sent();
|
|
22745
22745
|
if (!rs) {
|
|
22746
22746
|
return [2 /*return*/];
|
|
22747
22747
|
}
|
|
22748
|
-
|
|
22748
|
+
_g.label = 2;
|
|
22749
22749
|
case 2:
|
|
22750
22750
|
switch (this.setting.exportItemsMode) {
|
|
22751
22751
|
case exports.ExportItemsMode.FromHtml:
|
|
@@ -22766,17 +22766,17 @@
|
|
|
22766
22766
|
if (isTree === void 0) { isTree = false; }
|
|
22767
22767
|
return __awaiter(this, void 0, void 0, function () {
|
|
22768
22768
|
var rs, header, element, tableEle, headEle, bodyEle, arrHeadEle, arrRowData, strHeadEle, strBodyEle, css, table;
|
|
22769
|
-
return __generator(this, function (
|
|
22770
|
-
switch (
|
|
22769
|
+
return __generator(this, function (_g) {
|
|
22770
|
+
switch (_g.label) {
|
|
22771
22771
|
case 0:
|
|
22772
22772
|
if (!this.setting.showConfirmExport) return [3 /*break*/, 2];
|
|
22773
22773
|
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')];
|
|
22774
22774
|
case 1:
|
|
22775
|
-
rs =
|
|
22775
|
+
rs = _g.sent();
|
|
22776
22776
|
if (!rs) {
|
|
22777
22777
|
return [2 /*return*/];
|
|
22778
22778
|
}
|
|
22779
|
-
|
|
22779
|
+
_g.label = 2;
|
|
22780
22780
|
case 2:
|
|
22781
22781
|
header = 'Danh sách ' + this.setting.objectName;
|
|
22782
22782
|
element = isTree ? this.treeTable.el.nativeElement : this.table.el.nativeElement;
|
|
@@ -22960,25 +22960,25 @@
|
|
|
22960
22960
|
};
|
|
22961
22961
|
ListComponentBase.prototype.showContextMenu = function (evt, rowData) {
|
|
22962
22962
|
return __awaiter(this, void 0, void 0, function () {
|
|
22963
|
-
var
|
|
22964
|
-
var
|
|
22965
|
-
return __generator(this, function (
|
|
22966
|
-
switch (
|
|
22963
|
+
var _g, _h, shareButtons, showWorkflowAttach;
|
|
22964
|
+
var _j;
|
|
22965
|
+
return __generator(this, function (_k) {
|
|
22966
|
+
switch (_k.label) {
|
|
22967
22967
|
case 0:
|
|
22968
22968
|
this.rowDataCurrent = rowData;
|
|
22969
|
-
|
|
22970
|
-
|
|
22969
|
+
_g = this;
|
|
22970
|
+
_h = this.getMenuButtonAuthorized;
|
|
22971
22971
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
22972
|
-
case 1: return [4 /*yield*/,
|
|
22972
|
+
case 1: return [4 /*yield*/, _h.apply(this, [_k.sent()])];
|
|
22973
22973
|
case 2:
|
|
22974
|
-
|
|
22974
|
+
_g.buttonContexts = _k.sent();
|
|
22975
22975
|
if (!this.setting.disableShare) {
|
|
22976
22976
|
shareButtons = [
|
|
22977
22977
|
{ label: 'Chia sẻ', icon: 'pi pi-link', command: this.createShareLink.bind(this) },
|
|
22978
22978
|
{ label: 'Danh sách chia sẻ', icon: 'pi pi-list', command: this.showLinkSharing.bind(this) },
|
|
22979
22979
|
// { label: 'Danh sách nhìn thấy', icon: 'pi pi-list', command: this.showListPermissionByItem.bind(this) }
|
|
22980
22980
|
];
|
|
22981
|
-
(
|
|
22981
|
+
(_j = this.buttonContexts).push.apply(_j, __spreadArray([], __read(shareButtons)));
|
|
22982
22982
|
}
|
|
22983
22983
|
showWorkflowAttach = localStorage.getItem('__showWorkflowAttach');
|
|
22984
22984
|
if (showWorkflowAttach == 'true') {
|
|
@@ -23000,9 +23000,9 @@
|
|
|
23000
23000
|
ListComponentBase.prototype.getMenuButtonAuthorized = function (menuButtons) {
|
|
23001
23001
|
return __awaiter(this, void 0, void 0, function () {
|
|
23002
23002
|
var authorizedButtons, serviceCodeByBase, promises, _loop_3, this_2, menuButtons_1, menuButtons_1_1, item;
|
|
23003
|
-
var e_6,
|
|
23004
|
-
return __generator(this, function (
|
|
23005
|
-
switch (
|
|
23003
|
+
var e_6, _g;
|
|
23004
|
+
return __generator(this, function (_h) {
|
|
23005
|
+
switch (_h.label) {
|
|
23006
23006
|
case 0:
|
|
23007
23007
|
authorizedButtons = [];
|
|
23008
23008
|
serviceCodeByBase = this.setting.baseService != null ? this.setting.baseService.serviceCode.toUpperCase() : '';
|
|
@@ -23032,13 +23032,13 @@
|
|
|
23032
23032
|
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
23033
23033
|
finally {
|
|
23034
23034
|
try {
|
|
23035
|
-
if (menuButtons_1_1 && !menuButtons_1_1.done && (
|
|
23035
|
+
if (menuButtons_1_1 && !menuButtons_1_1.done && (_g = menuButtons_1.return)) _g.call(menuButtons_1);
|
|
23036
23036
|
}
|
|
23037
23037
|
finally { if (e_6) throw e_6.error; }
|
|
23038
23038
|
}
|
|
23039
23039
|
return [4 /*yield*/, Promise.all(promises)];
|
|
23040
23040
|
case 1:
|
|
23041
|
-
|
|
23041
|
+
_h.sent();
|
|
23042
23042
|
return [2 /*return*/, authorizedButtons];
|
|
23043
23043
|
}
|
|
23044
23044
|
});
|
|
@@ -23653,10 +23653,10 @@
|
|
|
23653
23653
|
clearTimeout(this.timeout);
|
|
23654
23654
|
};
|
|
23655
23655
|
ListComponentBase.prototype.disableMultipleDelete = function () {
|
|
23656
|
-
var e_7,
|
|
23656
|
+
var e_7, _g;
|
|
23657
23657
|
try {
|
|
23658
|
-
for (var
|
|
23659
|
-
var item =
|
|
23658
|
+
for (var _h = __values(this.model.selectedItems), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
23659
|
+
var item = _j.value;
|
|
23660
23660
|
if (this.disableDelete(item)) {
|
|
23661
23661
|
return true;
|
|
23662
23662
|
}
|
|
@@ -23665,7 +23665,7 @@
|
|
|
23665
23665
|
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
23666
23666
|
finally {
|
|
23667
23667
|
try {
|
|
23668
|
-
if (
|
|
23668
|
+
if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
|
|
23669
23669
|
}
|
|
23670
23670
|
finally { if (e_7) throw e_7.error; }
|
|
23671
23671
|
}
|
|
@@ -23736,11 +23736,11 @@
|
|
|
23736
23736
|
};
|
|
23737
23737
|
ListComponentBase.prototype.processBaseData = function () {
|
|
23738
23738
|
return __awaiter(this, void 0, void 0, function () {
|
|
23739
|
-
return __generator(this, function (
|
|
23740
|
-
switch (
|
|
23739
|
+
return __generator(this, function (_g) {
|
|
23740
|
+
switch (_g.label) {
|
|
23741
23741
|
case 0: return [4 /*yield*/, this.preProcessData(this._rawDataSource)];
|
|
23742
23742
|
case 1:
|
|
23743
|
-
|
|
23743
|
+
_g.sent();
|
|
23744
23744
|
return [2 /*return*/];
|
|
23745
23745
|
}
|
|
23746
23746
|
});
|
|
@@ -23749,11 +23749,11 @@
|
|
|
23749
23749
|
ListComponentBase.prototype.preProcessData = function (dataSource) {
|
|
23750
23750
|
return __awaiter(this, void 0, void 0, function () {
|
|
23751
23751
|
var colHasPipe, _loop_4, this_3, colHasPipe_1, colHasPipe_1_1, col;
|
|
23752
|
-
var e_8,
|
|
23753
|
-
return __generator(this, function (
|
|
23752
|
+
var e_8, _g;
|
|
23753
|
+
return __generator(this, function (_h) {
|
|
23754
23754
|
colHasPipe = this.setting.cols.filter(function (x) { return x.pipe; });
|
|
23755
23755
|
_loop_4 = function (col) {
|
|
23756
|
-
var e_9,
|
|
23756
|
+
var e_9, _j;
|
|
23757
23757
|
var _loop_5 = function (item) {
|
|
23758
23758
|
this_3.transform(col.pipe, col.asyncPipe, item[col.field]).then(function (rs) {
|
|
23759
23759
|
item["pipe__" + col.field + " "] = rs;
|
|
@@ -23768,7 +23768,7 @@
|
|
|
23768
23768
|
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
23769
23769
|
finally {
|
|
23770
23770
|
try {
|
|
23771
|
-
if (dataSource_1_1 && !dataSource_1_1.done && (
|
|
23771
|
+
if (dataSource_1_1 && !dataSource_1_1.done && (_j = dataSource_1.return)) _j.call(dataSource_1);
|
|
23772
23772
|
}
|
|
23773
23773
|
finally { if (e_9) throw e_9.error; }
|
|
23774
23774
|
}
|
|
@@ -23783,7 +23783,7 @@
|
|
|
23783
23783
|
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
23784
23784
|
finally {
|
|
23785
23785
|
try {
|
|
23786
|
-
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (
|
|
23786
|
+
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (_g = colHasPipe_1.return)) _g.call(colHasPipe_1);
|
|
23787
23787
|
}
|
|
23788
23788
|
finally { if (e_8) throw e_8.error; }
|
|
23789
23789
|
}
|
|
@@ -23794,8 +23794,8 @@
|
|
|
23794
23794
|
ListComponentBase.prototype.transform = function (pipe, asyncPipe, value) {
|
|
23795
23795
|
return __awaiter(this, void 0, void 0, function () {
|
|
23796
23796
|
var val, val;
|
|
23797
|
-
return __generator(this, function (
|
|
23798
|
-
switch (
|
|
23797
|
+
return __generator(this, function (_g) {
|
|
23798
|
+
switch (_g.label) {
|
|
23799
23799
|
case 0:
|
|
23800
23800
|
if (this.cachedTransforms[value]) {
|
|
23801
23801
|
return [2 /*return*/, this.cachedTransforms[value]];
|
|
@@ -23803,7 +23803,7 @@
|
|
|
23803
23803
|
if (!asyncPipe) return [3 /*break*/, 2];
|
|
23804
23804
|
return [4 /*yield*/, pipe.transform(value)];
|
|
23805
23805
|
case 1:
|
|
23806
|
-
val =
|
|
23806
|
+
val = _g.sent();
|
|
23807
23807
|
this.cachedTransforms[value] = val;
|
|
23808
23808
|
return [2 /*return*/, val];
|
|
23809
23809
|
case 2:
|
|
@@ -23959,7 +23959,7 @@
|
|
|
23959
23959
|
}
|
|
23960
23960
|
};
|
|
23961
23961
|
ListComponentBase.prototype.getMinimizeData = function (model) {
|
|
23962
|
-
var e_10,
|
|
23962
|
+
var e_10, _g;
|
|
23963
23963
|
if (isLiteralObject(model)) {
|
|
23964
23964
|
if (model._dropdownvalue != null && model._dropdownvalue !== '') {
|
|
23965
23965
|
return model[model._dropdownvalue];
|
|
@@ -23985,7 +23985,7 @@
|
|
|
23985
23985
|
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
23986
23986
|
finally {
|
|
23987
23987
|
try {
|
|
23988
|
-
if (model_1_1 && !model_1_1.done && (
|
|
23988
|
+
if (model_1_1 && !model_1_1.done && (_g = model_1.return)) _g.call(model_1);
|
|
23989
23989
|
}
|
|
23990
23990
|
finally { if (e_10) throw e_10.error; }
|
|
23991
23991
|
}
|
|
@@ -24120,8 +24120,8 @@
|
|
|
24120
24120
|
};
|
|
24121
24121
|
ListComponentBase.prototype.handleTableRendered = function () {
|
|
24122
24122
|
return __awaiter(this, void 0, void 0, function () {
|
|
24123
|
-
return __generator(this, function (
|
|
24124
|
-
switch (
|
|
24123
|
+
return __generator(this, function (_g) {
|
|
24124
|
+
switch (_g.label) {
|
|
24125
24125
|
case 0:
|
|
24126
24126
|
if (this.table) {
|
|
24127
24127
|
this._processAfterRendered(this.table.el.nativeElement);
|
|
@@ -24131,7 +24131,7 @@
|
|
|
24131
24131
|
}
|
|
24132
24132
|
return [4 /*yield*/, this.modifyButtonFunctionInRow()];
|
|
24133
24133
|
case 1:
|
|
24134
|
-
|
|
24134
|
+
_g.sent();
|
|
24135
24135
|
this.onReloaded.emit(true);
|
|
24136
24136
|
return [2 /*return*/];
|
|
24137
24137
|
}
|
|
@@ -24164,42 +24164,42 @@
|
|
|
24164
24164
|
ListComponentBase.prototype.modifyButtonFunctionInRow = function () {
|
|
24165
24165
|
var _a;
|
|
24166
24166
|
return __awaiter(this, void 0, void 0, function () {
|
|
24167
|
-
var
|
|
24168
|
-
var e_11,
|
|
24169
|
-
return __generator(this, function (
|
|
24170
|
-
switch (
|
|
24167
|
+
var _g, _h, rowData, total, _j, ex_1, e_11_1;
|
|
24168
|
+
var e_11, _k;
|
|
24169
|
+
return __generator(this, function (_l) {
|
|
24170
|
+
switch (_l.label) {
|
|
24171
24171
|
case 0:
|
|
24172
|
-
|
|
24173
|
-
|
|
24174
|
-
|
|
24172
|
+
_l.trys.push([0, 8, 9, 10]);
|
|
24173
|
+
_g = __values(this.model.dataSource), _h = _g.next();
|
|
24174
|
+
_l.label = 1;
|
|
24175
24175
|
case 1:
|
|
24176
|
-
if (!!
|
|
24177
|
-
rowData =
|
|
24178
|
-
|
|
24176
|
+
if (!!_h.done) return [3 /*break*/, 7];
|
|
24177
|
+
rowData = _h.value;
|
|
24178
|
+
_l.label = 2;
|
|
24179
24179
|
case 2:
|
|
24180
|
-
|
|
24181
|
-
|
|
24180
|
+
_l.trys.push([2, 5, , 6]);
|
|
24181
|
+
_j = this.getMenuButtonAuthorized;
|
|
24182
24182
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
24183
|
-
case 3: return [4 /*yield*/,
|
|
24183
|
+
case 3: return [4 /*yield*/, _j.apply(this, [(_a = _l.sent()) !== null && _a !== void 0 ? _a : []])];
|
|
24184
24184
|
case 4:
|
|
24185
|
-
total = (
|
|
24185
|
+
total = (_l.sent());
|
|
24186
24186
|
rowData.disableFunctionRow = total.length < 1 && this.setting.disableShare;
|
|
24187
24187
|
return [3 /*break*/, 6];
|
|
24188
24188
|
case 5:
|
|
24189
|
-
ex_1 =
|
|
24189
|
+
ex_1 = _l.sent();
|
|
24190
24190
|
this.hiddenBtnFunction = true;
|
|
24191
24191
|
return [2 /*return*/];
|
|
24192
24192
|
case 6:
|
|
24193
|
-
|
|
24193
|
+
_h = _g.next();
|
|
24194
24194
|
return [3 /*break*/, 1];
|
|
24195
24195
|
case 7: return [3 /*break*/, 10];
|
|
24196
24196
|
case 8:
|
|
24197
|
-
e_11_1 =
|
|
24197
|
+
e_11_1 = _l.sent();
|
|
24198
24198
|
e_11 = { error: e_11_1 };
|
|
24199
24199
|
return [3 /*break*/, 10];
|
|
24200
24200
|
case 9:
|
|
24201
24201
|
try {
|
|
24202
|
-
if (
|
|
24202
|
+
if (_h && !_h.done && (_k = _g.return)) _k.call(_g);
|
|
24203
24203
|
}
|
|
24204
24204
|
finally { if (e_11) throw e_11.error; }
|
|
24205
24205
|
return [7 /*endfinally*/];
|
|
@@ -24229,10 +24229,10 @@
|
|
|
24229
24229
|
};
|
|
24230
24230
|
ListComponentBase.prototype.createSearchSchema = function () {
|
|
24231
24231
|
return __awaiter(this, void 0, void 0, function () {
|
|
24232
|
-
var searchInfo,
|
|
24233
|
-
var e_12,
|
|
24234
|
-
return __generator(this, function (
|
|
24235
|
-
switch (
|
|
24232
|
+
var searchInfo, _g, _h, col, control, e_12_1, _loop_6, this_4, _j, _k, field;
|
|
24233
|
+
var e_12, _l, _m, e_13, _o;
|
|
24234
|
+
return __generator(this, function (_p) {
|
|
24235
|
+
switch (_p.label) {
|
|
24236
24236
|
case 0:
|
|
24237
24237
|
if (this.setting.cols == null) {
|
|
24238
24238
|
return [2 /*return*/, this._notifierService.showWarning('Bạn chưa cấu hình cột cho danh sách')];
|
|
@@ -24242,14 +24242,14 @@
|
|
|
24242
24242
|
searchInfo.schema = [];
|
|
24243
24243
|
searchInfo.fieldDropdown = {};
|
|
24244
24244
|
searchInfo.fieldSearchText = [];
|
|
24245
|
-
|
|
24245
|
+
_p.label = 1;
|
|
24246
24246
|
case 1:
|
|
24247
|
-
|
|
24248
|
-
|
|
24249
|
-
|
|
24247
|
+
_p.trys.push([1, 6, 7, 8]);
|
|
24248
|
+
_g = __values(this.setting.cols), _h = _g.next();
|
|
24249
|
+
_p.label = 2;
|
|
24250
24250
|
case 2:
|
|
24251
|
-
if (!!
|
|
24252
|
-
col =
|
|
24251
|
+
if (!!_h.done) return [3 /*break*/, 5];
|
|
24252
|
+
col = _h.value;
|
|
24253
24253
|
if (!(col.allowFilter != false && col.rawColumn == null)) return [3 /*break*/, 4];
|
|
24254
24254
|
if (col.fullTextSearch) {
|
|
24255
24255
|
if (searchInfo.fieldSearchText.indexOf(col.field) == -1) {
|
|
@@ -24262,9 +24262,9 @@
|
|
|
24262
24262
|
}
|
|
24263
24263
|
return [4 /*yield*/, this.setting.function.getSearchControl(col.field)];
|
|
24264
24264
|
case 3:
|
|
24265
|
-
control =
|
|
24265
|
+
control = _p.sent();
|
|
24266
24266
|
if (control != null) {
|
|
24267
|
-
(
|
|
24267
|
+
(_m = searchInfo.schema).push.apply(_m, __spreadArray([], __read(control)));
|
|
24268
24268
|
}
|
|
24269
24269
|
else {
|
|
24270
24270
|
if (col.baseService || (col.dataSource && col.dataSource.length > 0)) {
|
|
@@ -24318,18 +24318,18 @@
|
|
|
24318
24318
|
}
|
|
24319
24319
|
}
|
|
24320
24320
|
}
|
|
24321
|
-
|
|
24321
|
+
_p.label = 4;
|
|
24322
24322
|
case 4:
|
|
24323
|
-
|
|
24323
|
+
_h = _g.next();
|
|
24324
24324
|
return [3 /*break*/, 2];
|
|
24325
24325
|
case 5: return [3 /*break*/, 8];
|
|
24326
24326
|
case 6:
|
|
24327
|
-
e_12_1 =
|
|
24327
|
+
e_12_1 = _p.sent();
|
|
24328
24328
|
e_12 = { error: e_12_1 };
|
|
24329
24329
|
return [3 /*break*/, 8];
|
|
24330
24330
|
case 7:
|
|
24331
24331
|
try {
|
|
24332
|
-
if (
|
|
24332
|
+
if (_h && !_h.done && (_l = _g.return)) _l.call(_g);
|
|
24333
24333
|
}
|
|
24334
24334
|
finally { if (e_12) throw e_12.error; }
|
|
24335
24335
|
return [7 /*endfinally*/];
|
|
@@ -24349,15 +24349,15 @@
|
|
|
24349
24349
|
};
|
|
24350
24350
|
this_4 = this;
|
|
24351
24351
|
try {
|
|
24352
|
-
for (
|
|
24353
|
-
field =
|
|
24352
|
+
for (_j = __values(searchInfo.fieldSearchText), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
24353
|
+
field = _k.value;
|
|
24354
24354
|
_loop_6(field);
|
|
24355
24355
|
}
|
|
24356
24356
|
}
|
|
24357
24357
|
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
24358
24358
|
finally {
|
|
24359
24359
|
try {
|
|
24360
|
-
if (
|
|
24360
|
+
if (_k && !_k.done && (_o = _j.return)) _o.call(_j);
|
|
24361
24361
|
}
|
|
24362
24362
|
finally { if (e_13) throw e_13.error; }
|
|
24363
24363
|
}
|
|
@@ -24395,8 +24395,8 @@
|
|
|
24395
24395
|
ListComponentBase.prototype.getItemWorkflowSetting = function (setting, rowData) {
|
|
24396
24396
|
return __awaiter(this, void 0, void 0, function () {
|
|
24397
24397
|
var workflowSetting;
|
|
24398
|
-
return __generator(this, function (
|
|
24399
|
-
switch (
|
|
24398
|
+
return __generator(this, function (_g) {
|
|
24399
|
+
switch (_g.label) {
|
|
24400
24400
|
case 0:
|
|
24401
24401
|
workflowSetting = setting.workflowSettingNew;
|
|
24402
24402
|
if (!(setting.isWorkflowTree
|
|
@@ -24404,8 +24404,8 @@
|
|
|
24404
24404
|
&& setting.workflowConfigAdvance.getWorkflowSetting)) return [3 /*break*/, 2];
|
|
24405
24405
|
return [4 /*yield*/, setting.workflowConfigAdvance.getWorkflowSetting(rowData)];
|
|
24406
24406
|
case 1:
|
|
24407
|
-
workflowSetting =
|
|
24408
|
-
|
|
24407
|
+
workflowSetting = _g.sent();
|
|
24408
|
+
_g.label = 2;
|
|
24409
24409
|
case 2:
|
|
24410
24410
|
if (!workflowSetting || workflowSetting.workflows.length == 0) {
|
|
24411
24411
|
return [2 /*return*/, this._notifierService.showWarning('Đối tượng chưa được cấu hình quy trình nghiệp vụ')];
|
|
@@ -24419,13 +24419,13 @@
|
|
|
24419
24419
|
return __awaiter(this, void 0, void 0, function () {
|
|
24420
24420
|
var workflowSetting, resultCheckExist, modelTask, contentLink, modelEntity, taskWorkflowSetting, compRef;
|
|
24421
24421
|
var _this = this;
|
|
24422
|
-
return __generator(this, function (
|
|
24423
|
-
switch (
|
|
24422
|
+
return __generator(this, function (_g) {
|
|
24423
|
+
switch (_g.label) {
|
|
24424
24424
|
case 0:
|
|
24425
24425
|
rowData.__startingWorkflow = true;
|
|
24426
24426
|
return [4 /*yield*/, this.getItemWorkflowSetting(this.setting, rowData)];
|
|
24427
24427
|
case 1:
|
|
24428
|
-
workflowSetting =
|
|
24428
|
+
workflowSetting = _g.sent();
|
|
24429
24429
|
if (!workflowSetting) {
|
|
24430
24430
|
rowData.__startingWorkflow = false;
|
|
24431
24431
|
return [2 /*return*/];
|
|
@@ -24437,7 +24437,7 @@
|
|
|
24437
24437
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24438
24438
|
])];
|
|
24439
24439
|
case 2:
|
|
24440
|
-
resultCheckExist = (
|
|
24440
|
+
resultCheckExist = (_g.sent());
|
|
24441
24441
|
if (!resultCheckExist.success) {
|
|
24442
24442
|
rowData.__startingWorkflow = false;
|
|
24443
24443
|
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')];
|
|
@@ -24449,8 +24449,8 @@
|
|
|
24449
24449
|
if (!this.setting.modifyRowDataForTask) return [3 /*break*/, 4];
|
|
24450
24450
|
return [4 /*yield*/, this.setting.modifyRowDataForTask(rowData)];
|
|
24451
24451
|
case 3:
|
|
24452
|
-
|
|
24453
|
-
|
|
24452
|
+
_g.sent();
|
|
24453
|
+
_g.label = 4;
|
|
24454
24454
|
case 4:
|
|
24455
24455
|
modelTask = {
|
|
24456
24456
|
id: this._commonService.guid(),
|
|
@@ -24465,7 +24465,7 @@
|
|
|
24465
24465
|
};
|
|
24466
24466
|
return [4 /*yield*/, this.getCopyPath(this.setting, rowData)];
|
|
24467
24467
|
case 5:
|
|
24468
|
-
contentLink =
|
|
24468
|
+
contentLink = _g.sent();
|
|
24469
24469
|
if (contentLink) {
|
|
24470
24470
|
modelEntity = this.parseAttachLink(contentLink);
|
|
24471
24471
|
modelTask.dinhKemNghiepVuDtos = modelEntity;
|
|
@@ -24473,27 +24473,27 @@
|
|
|
24473
24473
|
if (!this.setting.modifyItemTask) return [3 /*break*/, 7];
|
|
24474
24474
|
return [4 /*yield*/, this.setting.modifyItemTask(modelTask, rowData)];
|
|
24475
24475
|
case 6:
|
|
24476
|
-
|
|
24477
|
-
|
|
24476
|
+
_g.sent();
|
|
24477
|
+
_g.label = 7;
|
|
24478
24478
|
case 7:
|
|
24479
24479
|
if (!(workflowSetting.autoStartTask
|
|
24480
24480
|
&& workflowSetting.idLoaiCongViecDefault)) return [3 /*break*/, 9];
|
|
24481
24481
|
return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(workflowSetting.idLoaiCongViecDefault)];
|
|
24482
24482
|
case 8:
|
|
24483
|
-
taskWorkflowSetting =
|
|
24483
|
+
taskWorkflowSetting = _g.sent();
|
|
24484
24484
|
if (taskWorkflowSetting != null && taskWorkflowSetting.workflowCode) {
|
|
24485
24485
|
modelTask[FieldWorkflowCodeInCrudForm] = taskWorkflowSetting.workflowCode;
|
|
24486
24486
|
this.insertTaskAndReload(modelTask, rowData, taskWorkflowSetting);
|
|
24487
24487
|
rowData.__startingWorkflow = false;
|
|
24488
24488
|
return [2 /*return*/];
|
|
24489
24489
|
}
|
|
24490
|
-
|
|
24490
|
+
_g.label = 9;
|
|
24491
24491
|
case 9: return [3 /*break*/, 14];
|
|
24492
24492
|
case 10:
|
|
24493
24493
|
if (!(workflowSetting.workflows.length == 1)) return [3 /*break*/, 12];
|
|
24494
24494
|
return [4 /*yield*/, this.startWorkflow(rowData, workflowSetting.workflows[0])];
|
|
24495
24495
|
case 11:
|
|
24496
|
-
|
|
24496
|
+
_g.sent();
|
|
24497
24497
|
rowData.__startingWorkflow = false;
|
|
24498
24498
|
return [2 /*return*/];
|
|
24499
24499
|
case 12:
|
|
@@ -24502,13 +24502,13 @@
|
|
|
24502
24502
|
rowData.__startingWorkflow = false;
|
|
24503
24503
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'StartWorkflowComponent', this.startWorkflowViewContainer)];
|
|
24504
24504
|
case 13:
|
|
24505
|
-
compRef =
|
|
24505
|
+
compRef = _g.sent();
|
|
24506
24506
|
dialog.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24507
24507
|
compRef.workflows = workflowSetting.workflows;
|
|
24508
24508
|
compRef.defaultWorkflow = workflowSetting.workflowCode;
|
|
24509
24509
|
compRef.instance.onSaved.subscribe(function (event) { return _this.handleStartWorkflowFromDialog(event); });
|
|
24510
24510
|
compRef.instance.onCancel.subscribe(function (event) { return _this.startWorkflowModel.showEditForm = false; });
|
|
24511
|
-
|
|
24511
|
+
_g.label = 14;
|
|
24512
24512
|
case 14: return [2 /*return*/];
|
|
24513
24513
|
}
|
|
24514
24514
|
});
|
|
@@ -24554,25 +24554,25 @@
|
|
|
24554
24554
|
};
|
|
24555
24555
|
ListComponentBase.prototype.insertTaskAndReload = function (modelTask, rowData, workflowSetting) {
|
|
24556
24556
|
return __awaiter(this, void 0, void 0, function () {
|
|
24557
|
-
var
|
|
24557
|
+
var _g;
|
|
24558
24558
|
var _this = this;
|
|
24559
|
-
return __generator(this, function (
|
|
24560
|
-
switch (
|
|
24559
|
+
return __generator(this, function (_h) {
|
|
24560
|
+
switch (_h.label) {
|
|
24561
24561
|
case 0:
|
|
24562
24562
|
if (!this.setting.getDataForNextFirstStepTask) return [3 /*break*/, 2];
|
|
24563
|
-
|
|
24563
|
+
_g = modelTask;
|
|
24564
24564
|
return [4 /*yield*/, this.setting.getDataForNextFirstStepTask(rowData)];
|
|
24565
24565
|
case 1:
|
|
24566
|
-
|
|
24566
|
+
_g.itemWorkflowHistory = _h.sent();
|
|
24567
24567
|
modelTask.itemWorkflowHistory = this.tongHopWorkflowHistoryForNextFirstStep(modelTask.itemWorkflowHistory, modelTask, workflowSetting, modelTask[FieldWorkflowCodeInCrudForm]);
|
|
24568
|
-
|
|
24568
|
+
_h.label = 2;
|
|
24569
24569
|
case 2: return [4 /*yield*/, this._congViecService.post(modelTask)
|
|
24570
24570
|
.then(function (res) { return _this.handleResponse(res, '', function (f) {
|
|
24571
24571
|
_this.onStartedWorkflow.emit(rowData.id);
|
|
24572
24572
|
_this.getData();
|
|
24573
24573
|
}); })];
|
|
24574
24574
|
case 3:
|
|
24575
|
-
|
|
24575
|
+
_h.sent();
|
|
24576
24576
|
return [2 /*return*/];
|
|
24577
24577
|
}
|
|
24578
24578
|
});
|
|
@@ -24592,9 +24592,9 @@
|
|
|
24592
24592
|
if (dialogDetailTask === void 0) { dialogDetailTask = null; }
|
|
24593
24593
|
if (dialogChoYKienForm === void 0) { dialogChoYKienForm = null; }
|
|
24594
24594
|
return __awaiter(this, void 0, void 0, function () {
|
|
24595
|
-
var
|
|
24596
|
-
return __generator(this, function (
|
|
24597
|
-
switch (
|
|
24595
|
+
var _g;
|
|
24596
|
+
return __generator(this, function (_h) {
|
|
24597
|
+
switch (_h.label) {
|
|
24598
24598
|
case 0:
|
|
24599
24599
|
if (this.showingActionWorkflow)
|
|
24600
24600
|
return [2 /*return*/];
|
|
@@ -24603,10 +24603,10 @@
|
|
|
24603
24603
|
this.dialogProcessWorkflowForm = dialogProcessWorkflowForm;
|
|
24604
24604
|
this.dialogDetailTask = dialogDetailTask;
|
|
24605
24605
|
this.dialogChoYKienForm = dialogChoYKienForm;
|
|
24606
|
-
|
|
24606
|
+
_g = this;
|
|
24607
24607
|
return [4 /*yield*/, this.getButtonContext(rowData)];
|
|
24608
24608
|
case 1:
|
|
24609
|
-
|
|
24609
|
+
_g.buttonContexts = _h.sent();
|
|
24610
24610
|
if (this.buttonContexts.length === 0) {
|
|
24611
24611
|
return [2 /*return*/];
|
|
24612
24612
|
}
|
|
@@ -24620,20 +24620,20 @@
|
|
|
24620
24620
|
return __awaiter(this, void 0, void 0, function () {
|
|
24621
24621
|
var resultGetActionWorkflow, buttonContexts;
|
|
24622
24622
|
var _this = this;
|
|
24623
|
-
return __generator(this, function (
|
|
24624
|
-
switch (
|
|
24623
|
+
return __generator(this, function (_g) {
|
|
24624
|
+
switch (_g.label) {
|
|
24625
24625
|
case 0:
|
|
24626
24626
|
this.showingActionWorkflow = true;
|
|
24627
24627
|
resultGetActionWorkflow = null;
|
|
24628
24628
|
if (!(!this.setting.isWorkflowTree && this.setting.workflowSettingNew.createTaskInstead)) return [3 /*break*/, 2];
|
|
24629
24629
|
return [4 /*yield*/, this.getActionWorkflowByTask(rowData, rowData.dialogHistory)];
|
|
24630
24630
|
case 1:
|
|
24631
|
-
resultGetActionWorkflow =
|
|
24631
|
+
resultGetActionWorkflow = _g.sent();
|
|
24632
24632
|
return [3 /*break*/, 4];
|
|
24633
24633
|
case 2: return [4 /*yield*/, this.getActionWorkflow(rowData)];
|
|
24634
24634
|
case 3:
|
|
24635
|
-
resultGetActionWorkflow =
|
|
24636
|
-
|
|
24635
|
+
resultGetActionWorkflow = _g.sent();
|
|
24636
|
+
_g.label = 4;
|
|
24637
24637
|
case 4:
|
|
24638
24638
|
this.showingActionWorkflow = false;
|
|
24639
24639
|
if (!Array.isArray(resultGetActionWorkflow)) {
|
|
@@ -24657,11 +24657,11 @@
|
|
|
24657
24657
|
ListComponentBase.prototype.getActionWorkflow = function (rowData) {
|
|
24658
24658
|
return __awaiter(this, void 0, void 0, function () {
|
|
24659
24659
|
var workflowSetting;
|
|
24660
|
-
return __generator(this, function (
|
|
24661
|
-
switch (
|
|
24660
|
+
return __generator(this, function (_g) {
|
|
24661
|
+
switch (_g.label) {
|
|
24662
24662
|
case 0: return [4 /*yield*/, this.getItemWorkflowSetting(this.setting, rowData)];
|
|
24663
24663
|
case 1:
|
|
24664
|
-
workflowSetting =
|
|
24664
|
+
workflowSetting = _g.sent();
|
|
24665
24665
|
if (!workflowSetting)
|
|
24666
24666
|
return [2 /*return*/];
|
|
24667
24667
|
return [2 /*return*/, this._getActionWorkflowBase(this.setting, rowData, workflowSetting)];
|
|
@@ -24671,21 +24671,21 @@
|
|
|
24671
24671
|
};
|
|
24672
24672
|
ListComponentBase.prototype.getActionWorkflowByTask = function (rowData, dialog) {
|
|
24673
24673
|
return __awaiter(this, void 0, void 0, function () {
|
|
24674
|
-
var
|
|
24675
|
-
return __generator(this, function (
|
|
24676
|
-
switch (
|
|
24674
|
+
var _g, workflowPermissionDetailService, userService, result, workflowSetting, crudListSetting;
|
|
24675
|
+
return __generator(this, function (_h) {
|
|
24676
|
+
switch (_h.label) {
|
|
24677
24677
|
case 0:
|
|
24678
24678
|
if (!!rowData.__isGotCongViec) return [3 /*break*/, 2];
|
|
24679
|
-
|
|
24679
|
+
_g = rowData;
|
|
24680
24680
|
return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
24681
24681
|
this.newFilter('serviceCode', exports.Operator.equal, this.setting.baseService.serviceCode),
|
|
24682
24682
|
this.newFilter('entity', exports.Operator.equal, this.setting.baseService.entityName),
|
|
24683
24683
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24684
24684
|
])];
|
|
24685
24685
|
case 1:
|
|
24686
|
-
|
|
24686
|
+
_g.__itemCongViec = (_h.sent()).data;
|
|
24687
24687
|
rowData.__isGotCongViec = true;
|
|
24688
|
-
|
|
24688
|
+
_h.label = 2;
|
|
24689
24689
|
case 2:
|
|
24690
24690
|
rowData = rowData.__itemCongViec;
|
|
24691
24691
|
if (!rowData) {
|
|
@@ -24698,12 +24698,12 @@
|
|
|
24698
24698
|
return [4 /*yield*/, workflowPermissionDetailService.changeEndpoint(this._congViecService)
|
|
24699
24699
|
.appendInfoForWorkflow(userService.getUserIdCombine(), [rowData], 'id', this.setting.ignoreWorkflow)];
|
|
24700
24700
|
case 3:
|
|
24701
|
-
result =
|
|
24701
|
+
result = _h.sent();
|
|
24702
24702
|
if (result !== true)
|
|
24703
24703
|
return [2 /*return*/];
|
|
24704
24704
|
return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(rowData.idLoaiCongViec)];
|
|
24705
24705
|
case 4:
|
|
24706
|
-
workflowSetting =
|
|
24706
|
+
workflowSetting = _h.sent();
|
|
24707
24707
|
if (workflowSetting == null)
|
|
24708
24708
|
return [2 /*return*/];
|
|
24709
24709
|
crudListSetting = new CrudListSetting();
|
|
@@ -24717,8 +24717,8 @@
|
|
|
24717
24717
|
return __awaiter(this, void 0, void 0, function () {
|
|
24718
24718
|
var buttonContexts, itemWorkflowSetting_1, actions_1, actionAllows, workflowHistoryService, userService, userId, userIdStringUpper, itemWorkflowHistoryLast;
|
|
24719
24719
|
var _this = this;
|
|
24720
|
-
return __generator(this, function (
|
|
24721
|
-
switch (
|
|
24720
|
+
return __generator(this, function (_g) {
|
|
24721
|
+
switch (_g.label) {
|
|
24722
24722
|
case 0:
|
|
24723
24723
|
this.currentItem = rowData;
|
|
24724
24724
|
this.buttonContexts = [];
|
|
@@ -24733,7 +24733,7 @@
|
|
|
24733
24733
|
actions_1 = itemWorkflowSetting_1.data.actions[rowData.__trangThai];
|
|
24734
24734
|
return [4 /*yield*/, crudListSetting.baseService.getActionAllow(rowData.id)];
|
|
24735
24735
|
case 2:
|
|
24736
|
-
actionAllows = (
|
|
24736
|
+
actionAllows = (_g.sent()).data;
|
|
24737
24737
|
if (actionAllows) {
|
|
24738
24738
|
actionAllows.forEach(function (actionCode) {
|
|
24739
24739
|
var action = actions_1.find(function (q) { return q.code == actionCode; });
|
|
@@ -24762,7 +24762,7 @@
|
|
|
24762
24762
|
}
|
|
24763
24763
|
return [4 /*yield*/, workflowHistoryService.changeEndpoint(crudListSetting.baseService).getLastByItemId(rowData.id)];
|
|
24764
24764
|
case 3:
|
|
24765
|
-
itemWorkflowHistoryLast = (
|
|
24765
|
+
itemWorkflowHistoryLast = (_g.sent()).data;
|
|
24766
24766
|
if (itemWorkflowHistoryLast
|
|
24767
24767
|
&& itemWorkflowHistoryLast.actionCode != MaActionBatDauQuyTrinh
|
|
24768
24768
|
&& itemWorkflowHistoryLast.userIdCreated.toUpperCase() == userIdStringUpper
|
|
@@ -24782,7 +24782,7 @@
|
|
|
24782
24782
|
label: exports.ButtonTextActionCongViec.XEM_LICH_SU,
|
|
24783
24783
|
command: function () { return _this.viewHistoryWorkflow(crudListSetting, rowData); }
|
|
24784
24784
|
});
|
|
24785
|
-
|
|
24785
|
+
_g.label = 4;
|
|
24786
24786
|
case 4: return [2 /*return*/, buttonContexts];
|
|
24787
24787
|
}
|
|
24788
24788
|
});
|
|
@@ -24792,13 +24792,13 @@
|
|
|
24792
24792
|
return __awaiter(this, void 0, void 0, function () {
|
|
24793
24793
|
var itemTask, taskFormModel, compRef;
|
|
24794
24794
|
var _this = this;
|
|
24795
|
-
return __generator(this, function (
|
|
24796
|
-
switch (
|
|
24795
|
+
return __generator(this, function (_g) {
|
|
24796
|
+
switch (_g.label) {
|
|
24797
24797
|
case 0: return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
24798
24798
|
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
24799
24799
|
])];
|
|
24800
24800
|
case 1:
|
|
24801
|
-
itemTask = (
|
|
24801
|
+
itemTask = (_g.sent()).data;
|
|
24802
24802
|
if (itemTask == null) {
|
|
24803
24803
|
return [2 /*return*/, this._notifierService.showWarning('Không tìm thấy công việc gắn với bản ghi')];
|
|
24804
24804
|
}
|
|
@@ -24809,7 +24809,7 @@
|
|
|
24809
24809
|
this.detailTaskModel.showEditForm = true;
|
|
24810
24810
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('congviec', 'BaseCongViecFormComponent', this.detailTaskViewContainer)];
|
|
24811
24811
|
case 2:
|
|
24812
|
-
compRef =
|
|
24812
|
+
compRef = _g.sent();
|
|
24813
24813
|
if (this.dialogDetailTask) {
|
|
24814
24814
|
this.dialogDetailTask.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24815
24815
|
}
|
|
@@ -24846,11 +24846,11 @@
|
|
|
24846
24846
|
return __awaiter(this, void 0, void 0, function () {
|
|
24847
24847
|
var workflowSetting, compRef;
|
|
24848
24848
|
var _this = this;
|
|
24849
|
-
return __generator(this, function (
|
|
24850
|
-
switch (
|
|
24849
|
+
return __generator(this, function (_g) {
|
|
24850
|
+
switch (_g.label) {
|
|
24851
24851
|
case 0: return [4 /*yield*/, this.getItemWorkflowSetting(crudListSetting, rowData)];
|
|
24852
24852
|
case 1:
|
|
24853
|
-
workflowSetting =
|
|
24853
|
+
workflowSetting = _g.sent();
|
|
24854
24854
|
if (!workflowSetting)
|
|
24855
24855
|
return [2 /*return*/];
|
|
24856
24856
|
this.currentItem = rowData;
|
|
@@ -24860,7 +24860,7 @@
|
|
|
24860
24860
|
this.workflowHistoryModel.showEditForm = true;
|
|
24861
24861
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowHistoryNewComponent', this.workflowHistoryNewViewContainer)];
|
|
24862
24862
|
case 2:
|
|
24863
|
-
compRef =
|
|
24863
|
+
compRef = _g.sent();
|
|
24864
24864
|
compRef.instance.businessSetting = crudListSetting;
|
|
24865
24865
|
compRef.instance.tableName = this.workflowHistoryModel.data.tableName;
|
|
24866
24866
|
compRef.instance.item = rowData;
|
|
@@ -24878,8 +24878,8 @@
|
|
|
24878
24878
|
return __awaiter(this, void 0, void 0, function () {
|
|
24879
24879
|
var domainNewTab, compRef;
|
|
24880
24880
|
var _this = this;
|
|
24881
|
-
return __generator(this, function (
|
|
24882
|
-
switch (
|
|
24881
|
+
return __generator(this, function (_g) {
|
|
24882
|
+
switch (_g.label) {
|
|
24883
24883
|
case 0:
|
|
24884
24884
|
if (workflowAction.openNewTab) {
|
|
24885
24885
|
domainNewTab = workflowAction.domainNewTab;
|
|
@@ -24901,7 +24901,7 @@
|
|
|
24901
24901
|
this.processWorkflowModel.header = workflowAction.name;
|
|
24902
24902
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'ProcessWorkflowFormComponent', this.processWorkflowFormViewContainer)];
|
|
24903
24903
|
case 1:
|
|
24904
|
-
compRef =
|
|
24904
|
+
compRef = _g.sent();
|
|
24905
24905
|
if (this.dialogProcessWorkflowForm) {
|
|
24906
24906
|
this.dialogProcessWorkflowForm.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24907
24907
|
}
|
|
@@ -24920,15 +24920,15 @@
|
|
|
24920
24920
|
return __awaiter(this, void 0, void 0, function () {
|
|
24921
24921
|
var compRef;
|
|
24922
24922
|
var _this = this;
|
|
24923
|
-
return __generator(this, function (
|
|
24924
|
-
switch (
|
|
24923
|
+
return __generator(this, function (_g) {
|
|
24924
|
+
switch (_g.label) {
|
|
24925
24925
|
case 0:
|
|
24926
24926
|
this.choYKienModel.data.rowData = rowData;
|
|
24927
24927
|
this.choYKienModel.data.setting = crudListSetting;
|
|
24928
24928
|
this.choYKienModel.showEditForm = true;
|
|
24929
24929
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'ChoYKienFormComponent', this.choYKienFormViewContainer)];
|
|
24930
24930
|
case 1:
|
|
24931
|
-
compRef =
|
|
24931
|
+
compRef = _g.sent();
|
|
24932
24932
|
if (this.dialogChoYKienForm) {
|
|
24933
24933
|
this.dialogChoYKienForm.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
24934
24934
|
}
|
|
@@ -24944,8 +24944,8 @@
|
|
|
24944
24944
|
ListComponentBase.prototype.startWorkflow = function (rowData, workflow) {
|
|
24945
24945
|
return __awaiter(this, void 0, void 0, function () {
|
|
24946
24946
|
var _this = this;
|
|
24947
|
-
return __generator(this, function (
|
|
24948
|
-
switch (
|
|
24947
|
+
return __generator(this, function (_g) {
|
|
24948
|
+
switch (_g.label) {
|
|
24949
24949
|
case 0: return [4 /*yield*/, this.setting.baseService.startWorkflow(rowData.id, workflow.code)
|
|
24950
24950
|
.then(function (res) { return _this.handleResponse(res, 'Chạy quy trình thành công', function (f) {
|
|
24951
24951
|
_this.onStartedWorkflow.emit(rowData.id);
|
|
@@ -24953,7 +24953,7 @@
|
|
|
24953
24953
|
_this.getData();
|
|
24954
24954
|
}); })];
|
|
24955
24955
|
case 1:
|
|
24956
|
-
|
|
24956
|
+
_g.sent();
|
|
24957
24957
|
return [2 /*return*/];
|
|
24958
24958
|
}
|
|
24959
24959
|
});
|
|
@@ -24978,7 +24978,7 @@
|
|
|
24978
24978
|
ListComponentBase.prototype.createShareLink = function () {
|
|
24979
24979
|
return __awaiter(this, void 0, void 0, function () {
|
|
24980
24980
|
var rowData;
|
|
24981
|
-
return __generator(this, function (
|
|
24981
|
+
return __generator(this, function (_g) {
|
|
24982
24982
|
if (!this.setting.checkReadyToTrinhKy()) {
|
|
24983
24983
|
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')];
|
|
24984
24984
|
}
|
|
@@ -24990,17 +24990,17 @@
|
|
|
24990
24990
|
};
|
|
24991
24991
|
ListComponentBase.prototype.createShareLinkMultiple = function () {
|
|
24992
24992
|
return __awaiter(this, void 0, void 0, function () {
|
|
24993
|
-
return __generator(this, function (
|
|
24993
|
+
return __generator(this, function (_g) {
|
|
24994
24994
|
this.showShareLinkForm(this.model.selectedItems);
|
|
24995
24995
|
return [2 /*return*/];
|
|
24996
24996
|
});
|
|
24997
24997
|
});
|
|
24998
24998
|
};
|
|
24999
24999
|
ListComponentBase.prototype.disableMultipleCopyLink = function () {
|
|
25000
|
-
var e_14,
|
|
25000
|
+
var e_14, _g;
|
|
25001
25001
|
try {
|
|
25002
|
-
for (var
|
|
25003
|
-
var item =
|
|
25002
|
+
for (var _h = __values(this.model.selectedItems), _j = _h.next(); !_j.done; _j = _h.next()) {
|
|
25003
|
+
var item = _j.value;
|
|
25004
25004
|
if (this.disableCopyLink(item)) {
|
|
25005
25005
|
return true;
|
|
25006
25006
|
}
|
|
@@ -25009,7 +25009,7 @@
|
|
|
25009
25009
|
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
25010
25010
|
finally {
|
|
25011
25011
|
try {
|
|
25012
|
-
if (
|
|
25012
|
+
if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
|
|
25013
25013
|
}
|
|
25014
25014
|
finally { if (e_14) throw e_14.error; }
|
|
25015
25015
|
}
|
|
@@ -25029,7 +25029,7 @@
|
|
|
25029
25029
|
};
|
|
25030
25030
|
ListComponentBase.prototype.showSettingsPermission = function () {
|
|
25031
25031
|
return __awaiter(this, void 0, void 0, function () {
|
|
25032
|
-
return __generator(this, function (
|
|
25032
|
+
return __generator(this, function (_g) {
|
|
25033
25033
|
if (this.creatingSearchInfo)
|
|
25034
25034
|
return [2 /*return*/];
|
|
25035
25035
|
this._showSettingsPermission = true;
|
|
@@ -25041,13 +25041,13 @@
|
|
|
25041
25041
|
return __awaiter(this, void 0, void 0, function () {
|
|
25042
25042
|
var compRef;
|
|
25043
25043
|
var _this = this;
|
|
25044
|
-
return __generator(this, function (
|
|
25045
|
-
switch (
|
|
25044
|
+
return __generator(this, function (_g) {
|
|
25045
|
+
switch (_g.label) {
|
|
25046
25046
|
case 0:
|
|
25047
25047
|
this._showSettingsWorkflow = true;
|
|
25048
25048
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowSettingDialogComponent', this.workflowSettingDialogViewContainer)];
|
|
25049
25049
|
case 1:
|
|
25050
|
-
compRef =
|
|
25050
|
+
compRef = _g.sent();
|
|
25051
25051
|
compRef.instance.parentSetting = this.setting;
|
|
25052
25052
|
compRef.instance.parentContext = this.context;
|
|
25053
25053
|
compRef.instance.parentModel = this.model;
|
|
@@ -25063,13 +25063,13 @@
|
|
|
25063
25063
|
return __awaiter(this, void 0, void 0, function () {
|
|
25064
25064
|
var compRef;
|
|
25065
25065
|
var _this = this;
|
|
25066
|
-
return __generator(this, function (
|
|
25067
|
-
switch (
|
|
25066
|
+
return __generator(this, function (_g) {
|
|
25067
|
+
switch (_g.label) {
|
|
25068
25068
|
case 0:
|
|
25069
25069
|
this.workflowSettingModel.showEditForm = true;
|
|
25070
25070
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowSettingNewComponent', this.workflowsettingnewViewContainer)];
|
|
25071
25071
|
case 1:
|
|
25072
|
-
compRef =
|
|
25072
|
+
compRef = _g.sent();
|
|
25073
25073
|
dialog.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
25074
25074
|
compRef.instance.parentSetting = this.setting;
|
|
25075
25075
|
compRef.instance.onSaved.subscribe(function (event) { return _this.onSaveWorkflowSettingsNew(null); });
|
|
@@ -25083,13 +25083,13 @@
|
|
|
25083
25083
|
return __awaiter(this, void 0, void 0, function () {
|
|
25084
25084
|
var compRef;
|
|
25085
25085
|
var _this = this;
|
|
25086
|
-
return __generator(this, function (
|
|
25087
|
-
switch (
|
|
25086
|
+
return __generator(this, function (_g) {
|
|
25087
|
+
switch (_g.label) {
|
|
25088
25088
|
case 0:
|
|
25089
25089
|
this.permissionSharingModel.showEditForm = true;
|
|
25090
25090
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'PermissionSharingComponent', this.permissionSharingViewContainer)];
|
|
25091
25091
|
case 1:
|
|
25092
|
-
compRef =
|
|
25092
|
+
compRef = _g.sent();
|
|
25093
25093
|
compRef.instance.item = this.rowDataCurrent;
|
|
25094
25094
|
compRef.instance.baseService = this.setting.baseService;
|
|
25095
25095
|
compRef.instance.onCancel.subscribe(function (event) { return _this.permissionSharingModel.showEditForm = false; });
|
|
@@ -25101,13 +25101,13 @@
|
|
|
25101
25101
|
ListComponentBase.prototype.showAttachedTask = function () {
|
|
25102
25102
|
return __awaiter(this, void 0, void 0, function () {
|
|
25103
25103
|
var compRef;
|
|
25104
|
-
return __generator(this, function (
|
|
25105
|
-
switch (
|
|
25104
|
+
return __generator(this, function (_g) {
|
|
25105
|
+
switch (_g.label) {
|
|
25106
25106
|
case 0:
|
|
25107
25107
|
this.attachedTaskModel.showEditForm = true;
|
|
25108
25108
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('congviec', 'BaseCongViecComponent', this.baseCongViecViewContainer)];
|
|
25109
25109
|
case 1:
|
|
25110
|
-
compRef =
|
|
25110
|
+
compRef = _g.sent();
|
|
25111
25111
|
compRef.instance.serviceCode = this.setting.baseService.serviceCode;
|
|
25112
25112
|
compRef.instance.entity = this.setting.baseService.entityName;
|
|
25113
25113
|
compRef.instance.itemIdAttach = this.rowDataCurrent.id;
|
|
@@ -25120,13 +25120,13 @@
|
|
|
25120
25120
|
return __awaiter(this, void 0, void 0, function () {
|
|
25121
25121
|
var compRef;
|
|
25122
25122
|
var _this = this;
|
|
25123
|
-
return __generator(this, function (
|
|
25124
|
-
switch (
|
|
25123
|
+
return __generator(this, function (_g) {
|
|
25124
|
+
switch (_g.label) {
|
|
25125
25125
|
case 0:
|
|
25126
25126
|
this.permissionListModel.showEditForm = true;
|
|
25127
25127
|
return [4 /*yield*/, this._federationService.loadRemoteNewComponent('commonapp', 'WorkflowPermissionComponent', this.workflowPermissionViewContainer)];
|
|
25128
25128
|
case 1:
|
|
25129
|
-
compRef =
|
|
25129
|
+
compRef = _g.sent();
|
|
25130
25130
|
// this.dialogWorkflowPermission.buttonTemplateInput = compRef.instance.buttonTemplate;
|
|
25131
25131
|
compRef.instance.item = this.rowDataCurrent;
|
|
25132
25132
|
compRef.instance.businessSetting = this.setting;
|
|
@@ -25187,13 +25187,13 @@
|
|
|
25187
25187
|
this.lstButtonTemplate = lstButtonTemplate;
|
|
25188
25188
|
};
|
|
25189
25189
|
ListComponentBase.prototype.handleShowFormSettingButton = function () {
|
|
25190
|
-
var _a, _b, _c, _d, _e;
|
|
25190
|
+
var _a, _b, _c, _d, _e, _f;
|
|
25191
25191
|
return __awaiter(this, void 0, void 0, function () {
|
|
25192
25192
|
var lstBtnCustom, lstBtnAction, _loop_7, this_5, lstBtnCustom_1, lstBtnCustom_1_1, item, lstMenuButtons, buttonSetting;
|
|
25193
|
-
var e_15,
|
|
25193
|
+
var e_15, _g;
|
|
25194
25194
|
var _this = this;
|
|
25195
|
-
return __generator(this, function (
|
|
25196
|
-
switch (
|
|
25195
|
+
return __generator(this, function (_h) {
|
|
25196
|
+
switch (_h.label) {
|
|
25197
25197
|
case 0:
|
|
25198
25198
|
// Tổng hợp dữ liệu các nút từ ngTemplate + base + menuButton
|
|
25199
25199
|
this.onReloaded.emit(exports.EnumProperties.RETRIEVE_BUTTON_TEMPLATE);
|
|
@@ -25201,7 +25201,7 @@
|
|
|
25201
25201
|
lstBtnCustom = this.lstButtonElement[exports.EnumProperties.RESULTS].concat(this.lstButtonTemplate);
|
|
25202
25202
|
lstBtnAction = [];
|
|
25203
25203
|
_loop_7 = function (item) {
|
|
25204
|
-
var buttonText = (_c = (_b = (_a = item.nativeElement.getAttribute(exports.EnumProperties.LABEL)) !== null && _a !== void 0 ? _a : item.nativeElement.getAttribute(exports.EnumProperties.
|
|
25204
|
+
var buttonText = (_d = (_c = (_b = (_a = item.nativeElement.getAttribute(exports.EnumProperties.LABEL)) !== null && _a !== void 0 ? _a : item.nativeElement.getAttribute(exports.EnumProperties.TOOLTIP)) !== null && _b !== void 0 ? _b : item.nativeElement.getAttribute(exports.EnumProperties.NG_REFLECT_TEXT)) !== null && _c !== void 0 ? _c : item.nativeElement.getAttribute(exports.EnumProperties.NG_REFLECT_LABEL)) !== null && _d !== void 0 ? _d : item.nativeElement.innerText;
|
|
25205
25205
|
if (!buttonText || lstBtnAction.some(function (p) { return p.rawText === buttonText; })) {
|
|
25206
25206
|
return "continue";
|
|
25207
25207
|
}
|
|
@@ -25217,18 +25217,18 @@
|
|
|
25217
25217
|
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
25218
25218
|
finally {
|
|
25219
25219
|
try {
|
|
25220
|
-
if (lstBtnCustom_1_1 && !lstBtnCustom_1_1.done && (
|
|
25220
|
+
if (lstBtnCustom_1_1 && !lstBtnCustom_1_1.done && (_g = lstBtnCustom_1.return)) _g.call(lstBtnCustom_1);
|
|
25221
25221
|
}
|
|
25222
25222
|
finally { if (e_15) throw e_15.error; }
|
|
25223
25223
|
}
|
|
25224
25224
|
return [4 /*yield*/, this.menuButtons({})];
|
|
25225
25225
|
case 1:
|
|
25226
|
-
lstMenuButtons = (
|
|
25226
|
+
lstMenuButtons = (_e = _h.sent()) !== null && _e !== void 0 ? _e : [];
|
|
25227
25227
|
if (lstMenuButtons.length) {
|
|
25228
25228
|
lstMenuButtons.forEach(function (item) { return _this.addButtonAction(lstBtnAction, _this.authorizeButtonKey, item.label); });
|
|
25229
25229
|
}
|
|
25230
25230
|
buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
25231
|
-
((
|
|
25231
|
+
((_f = buttonSetting[this.authorizeButtonKey]) === null || _f === void 0 ? void 0 : _f.length) && buttonSetting[this.authorizeButtonKey].forEach(function (item) {
|
|
25232
25232
|
var permissionItem = lstBtnAction.find(function (p) { return p.permissionCode == item.code; });
|
|
25233
25233
|
if (permissionItem) {
|
|
25234
25234
|
permissionItem.isAuthorize = true;
|
|
@@ -25245,7 +25245,7 @@
|
|
|
25245
25245
|
ListComponentBase.prototype.onShowFormSettingButton = function () {
|
|
25246
25246
|
return __awaiter(this, void 0, void 0, function () {
|
|
25247
25247
|
var _this = this;
|
|
25248
|
-
return __generator(this, function (
|
|
25248
|
+
return __generator(this, function (_g) {
|
|
25249
25249
|
this.checkedAll = true;
|
|
25250
25250
|
this.handleCheckAll();
|
|
25251
25251
|
setTimeout(function () {
|
|
@@ -25272,8 +25272,8 @@
|
|
|
25272
25272
|
return __awaiter(this, void 0, void 0, function () {
|
|
25273
25273
|
var filterPermission, lstPermissionCode, buttonSetting, lstMenuButton, lstMenuButtons;
|
|
25274
25274
|
var _this = this;
|
|
25275
|
-
return __generator(this, function (
|
|
25276
|
-
switch (
|
|
25275
|
+
return __generator(this, function (_g) {
|
|
25276
|
+
switch (_g.label) {
|
|
25277
25277
|
case 0:
|
|
25278
25278
|
this.authorizeButtonKey = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');
|
|
25279
25279
|
if (i0.isDevMode()) {
|
|
@@ -25282,7 +25282,7 @@
|
|
|
25282
25282
|
filterPermission = [this.newFilter('code', exports.Operator.contain, "[" + this.authorizeButtonKey + "]")];
|
|
25283
25283
|
return [4 /*yield*/, this._basePermissionService.getAllWithIgnore(filterPermission, 'code,id')];
|
|
25284
25284
|
case 1:
|
|
25285
|
-
lstPermissionCode = (_a = (
|
|
25285
|
+
lstPermissionCode = (_a = (_g.sent()).data) !== null && _a !== void 0 ? _a : [];
|
|
25286
25286
|
buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
25287
25287
|
buttonSetting[this.authorizeButtonKey] = lstPermissionCode;
|
|
25288
25288
|
this.lstButtonTemplate = lstButtonTemplate;
|
|
@@ -25294,7 +25294,7 @@
|
|
|
25294
25294
|
lstMenuButton = [];
|
|
25295
25295
|
return [4 /*yield*/, this.menuButtons({})];
|
|
25296
25296
|
case 2:
|
|
25297
|
-
lstMenuButtons = (_b =
|
|
25297
|
+
lstMenuButtons = (_b = _g.sent()) !== null && _b !== void 0 ? _b : [];
|
|
25298
25298
|
if (!lstMenuButtons.length) {
|
|
25299
25299
|
this.isBtnReady = true;
|
|
25300
25300
|
return [2 /*return*/];
|
|
@@ -25594,7 +25594,7 @@
|
|
|
25594
25594
|
{ type: i0.Component, args: [{
|
|
25595
25595
|
// tslint:disable-next-line: component-selector
|
|
25596
25596
|
selector: 'crud-list',
|
|
25597
|
-
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\n </ng-container>\n <ng-container *ngIf=\"isSuperUser\" [ngTemplateOutlet]=\"buttonAuthorize\">\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 pRipple\n label=\"Ph\u00E2n quy\u1EC1n n\u00FAt\" icon=\"fas fa-tools\" class=\"p-button-text\" (click)=\"onShowFormSettingButton()\"></button>\n</ng-template>\n\n<ng-template #buttonExportWord>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"fas fa-file-word\" class=\"p-button-text p-button-success\"\n (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>",
|
|
25597
|
+
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\n </ng-container>\n <ng-container *ngIf=\"isSuperUser\" [ngTemplateOutlet]=\"buttonAuthorize\">\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 pRipple\n label=\"Ph\u00E2n quy\u1EC1n n\u00FAt\" icon=\"fas fa-tools\" class=\"p-button-text\" (click)=\"onShowFormSettingButton()\"></button>\n</ng-template>\n\n<ng-template #buttonExportWord>\n <button #buttonBase appAuthorize *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn\" icon=\"fas fa-file-word\" class=\"p-button-text p-button-success\"\n (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]=\"'S\u1EEDa'\" 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]=\"'X\u00F3a'\" 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>",
|
|
25598
25598
|
providers: [i3.DecimalPipe, i3.DatePipe],
|
|
25599
25599
|
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}}"]
|
|
25600
25600
|
},] }
|
|
@@ -38664,7 +38664,7 @@
|
|
|
38664
38664
|
});
|
|
38665
38665
|
};
|
|
38666
38666
|
AuthorizeDirective.prototype.setAuthorizeButton = function () {
|
|
38667
|
-
var _a, _b, _c;
|
|
38667
|
+
var _a, _b, _c, _d;
|
|
38668
38668
|
var key = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');
|
|
38669
38669
|
if (i0.isDevMode()) {
|
|
38670
38670
|
key = this.appCode + "_" + window.location.pathname.substring(1).toUpperCase();
|
|
@@ -38673,14 +38673,14 @@
|
|
|
38673
38673
|
// if (componentName && !key.endsWith(componentName)) {
|
|
38674
38674
|
// key += `_${componentName}`;
|
|
38675
38675
|
// }
|
|
38676
|
-
var buttonText = (_b = (_a = this._element.getAttribute(exports.EnumProperties.LABEL)) !== null && _a !== void 0 ? _a : this._element.getAttribute(exports.EnumProperties.
|
|
38676
|
+
var buttonText = (_c = (_b = (_a = this._element.getAttribute(exports.EnumProperties.LABEL)) !== null && _a !== void 0 ? _a : this._element.getAttribute(exports.EnumProperties.TOOLTIP)) !== null && _b !== void 0 ? _b : this._element.getAttribute(exports.EnumProperties.NG_REFLECT_TEXT)) !== null && _c !== void 0 ? _c : this._element.getAttribute(exports.EnumProperties.NG_REFLECT_LABEL);
|
|
38677
38677
|
if (!buttonText) {
|
|
38678
38678
|
this.enableAuthorize = false;
|
|
38679
38679
|
return;
|
|
38680
38680
|
}
|
|
38681
38681
|
this.buttonSetting = JSON.parse(sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE) || '{}');
|
|
38682
38682
|
var permissionCode = "[" + key + "]_[" + this._commonService.convertStringToUnSign(buttonText).replace(/ /g, '_').toUpperCase() + "]";
|
|
38683
|
-
var isSetAuthorize = (
|
|
38683
|
+
var isSetAuthorize = (_d = this.buttonSetting[key]) === null || _d === void 0 ? void 0 : _d.find(function (p) { return p.code == permissionCode; });
|
|
38684
38684
|
if (isSetAuthorize) {
|
|
38685
38685
|
this.permission = permissionCode;
|
|
38686
38686
|
}
|