tnx-shared 5.0.69 → 5.0.70
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 +575 -807
- 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/data-form-base.d.ts +2 -2
- package/classes/base/data-form-base.d.ts.map +1 -1
- package/classes/base/data-list-base.d.ts +1 -3
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/classes/constants.d.ts +0 -4
- package/classes/constants.d.ts.map +1 -1
- package/classes/form-schema.d.ts +4 -38
- package/classes/form-schema.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts +0 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +1 -4
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts +1 -6
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +2 -0
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-explorer/services/download-link.service.d.ts +1 -0
- package/components/file-explorer/services/download-link.service.d.ts.map +1 -1
- package/components/file-explorer/services/file-explorer.service.d.ts +2 -0
- package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
- package/components/file-explorer/services/file-object.service.d.ts +1 -0
- package/components/file-explorer/services/file-object.service.d.ts.map +1 -1
- package/components/file-explorer/signature-detail/signature-detail.component.d.ts +8 -0
- package/components/file-explorer/signature-detail/signature-detail.component.d.ts.map +1 -0
- package/components/file-explorer/signature-detail/signature-detail.component.ngfactory.d.ts.map +1 -0
- package/components/file-explorer/signature-detail/signature-detail.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/components/mask/mask.component.d.ts +0 -2
- package/components/mask/mask.component.d.ts.map +1 -1
- package/configs/component-context.constant.d.ts +0 -1
- package/configs/component-context.constant.d.ts.map +1 -1
- package/esm2015/classes/base/data-form-base.js +5 -5
- package/esm2015/classes/base/data-list-base.js +23 -48
- package/esm2015/classes/constants.js +1 -6
- package/esm2015/classes/form-schema.js +3 -34
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +16 -72
- package/esm2015/components/common-app-component/app.menu.component.js +2 -2
- package/esm2015/components/common-app-component/common-app-component.js +3 -26
- package/esm2015/components/crud/crud-form/crud-form.component.js +2 -9
- package/esm2015/components/crud/crud-list/crud-list.component.js +6 -71
- package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +3 -29
- package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.js +3 -29
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +151 -12
- package/esm2015/components/file-explorer/services/download-link.service.js +4 -1
- package/esm2015/components/file-explorer/services/file-explorer.service.js +22 -8
- package/esm2015/components/file-explorer/services/file-object.service.js +15 -1
- package/esm2015/components/file-explorer/signature-detail/signature-detail.component.js +66 -0
- package/esm2015/components/mask/mask.component.js +4 -8
- package/esm2015/components/workflow/services/entity-workflow-history.service.js +3 -3
- package/esm2015/components/workflow/services/entity-workflow-setting.service.js +4 -4
- package/esm2015/configs/component-context.constant.js +2 -3
- package/esm2015/models/grid-info.js +1 -1
- package/esm2015/pipes/tn-date.pipe.js +2 -12
- package/esm2015/public-api.js +7 -3
- package/esm2015/services/base.service.js +1 -16
- package/esm2015/services/common.service.js +1 -9
- package/esm2015/services/crud.service.js +4 -23
- package/esm2015/services/menu.service.js +3 -6
- package/esm2015/services/notifier.service.js +2 -2
- package/esm2015/services/permission.service.js +2 -9
- package/esm2015/services/template-text-v4.service.js +1 -1
- package/esm2015/services/user-v5.service.js +1 -1
- package/esm2015/services/user.service.js +2 -8
- package/esm2015/tnx-shared.js +22 -24
- package/esm2015/tnx-shared.module.js +4 -2
- package/fesm2015/tnx-shared.js +341 -530
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +0 -1
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +2 -2
- package/pipes/tn-date.pipe.d.ts +0 -2
- package/pipes/tn-date.pipe.d.ts.map +1 -1
- package/public-api.d.ts +6 -2
- package/public-api.d.ts.map +1 -1
- package/services/base.service.d.ts +0 -1
- package/services/base.service.d.ts.map +1 -1
- package/services/common.service.d.ts +0 -4
- package/services/common.service.d.ts.map +1 -1
- package/services/crud.service.d.ts.map +1 -1
- package/services/menu.service.d.ts +1 -1
- package/services/menu.service.d.ts.map +1 -1
- package/services/permission.service.d.ts +0 -1
- package/services/permission.service.d.ts.map +1 -1
- package/services/template-text-v4.service.d.ts.map +1 -1
- package/services/user.service.d.ts.map +1 -1
- package/tnx-shared.d.ts +21 -23
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +2 -2
- package/tnx-shared.module.d.ts.map +1 -1
- package/tnx-shared.module.ngfactory.d.ts.map +1 -1
- package/components/file-explorer/models/file-settings.d.ts +0 -46
- package/components/file-explorer/models/file-settings.d.ts.map +0 -1
- package/esm2015/components/file-explorer/models/file-settings.js +0 -60
- package/esm2015/services/organization-base.service.js +0 -57
- package/services/organization-base.service.d.ts +0 -16
- package/services/organization-base.service.d.ts.map +0 -1
- package/services/organization-base.service.ngfactory.d.ts.map +0 -1
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
|
|
29
29
|
var stringify__default = /*#__PURE__*/_interopDefaultLegacy(stringify);
|
|
30
30
|
var moment___namespace = /*#__PURE__*/_interopNamespace(moment_);
|
|
31
|
+
var moment___default = /*#__PURE__*/_interopDefaultLegacy(moment_);
|
|
32
|
+
var FileSaver__default = /*#__PURE__*/_interopDefaultLegacy(FileSaver);
|
|
33
|
+
var printJS___default = /*#__PURE__*/_interopDefaultLegacy(printJS_);
|
|
31
34
|
var printJS___namespace = /*#__PURE__*/_interopNamespace(printJS_);
|
|
32
35
|
var JWT___namespace = /*#__PURE__*/_interopNamespace(JWT_);
|
|
33
36
|
var jQuery___namespace = /*#__PURE__*/_interopNamespace(jQuery_);
|
|
@@ -395,8 +398,7 @@
|
|
|
395
398
|
MENU_CHANGED: 'MENU_CHANGED',
|
|
396
399
|
ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER: 'ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER',
|
|
397
400
|
SHOW_WAIT_BOX: 'SHOW_WAIT_BOX',
|
|
398
|
-
SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM'
|
|
399
|
-
NEED_CLEAR_PERMISSION_CACHE: 'NEED_CLEAR_PERMISSION_CACHE'
|
|
401
|
+
SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM'
|
|
400
402
|
};
|
|
401
403
|
ComCtxConstants.ROOT_USMART = {
|
|
402
404
|
SHOW_CONFIG_DATA_DEFAULT: 'SHOW_CONFIG_DATA_DEFAULT',
|
|
@@ -908,7 +910,7 @@
|
|
|
908
910
|
NotifierService.prototype.showWarningByReponse = function (res) {
|
|
909
911
|
var message = res.message;
|
|
910
912
|
if (!message)
|
|
911
|
-
message =
|
|
913
|
+
message = res.error;
|
|
912
914
|
this.showWarning(message);
|
|
913
915
|
};
|
|
914
916
|
NotifierService.prototype.showBusinessError = function (message, key, header, life) {
|
|
@@ -2361,14 +2363,6 @@
|
|
|
2361
2363
|
errorDetail: err
|
|
2362
2364
|
};
|
|
2363
2365
|
};
|
|
2364
|
-
CommonService.prototype.tryParseJson = function (data) {
|
|
2365
|
-
try {
|
|
2366
|
-
return { valid: true, value: JSON.parse(data) };
|
|
2367
|
-
}
|
|
2368
|
-
catch (e) {
|
|
2369
|
-
return { valid: false, value: data };
|
|
2370
|
-
}
|
|
2371
|
-
};
|
|
2372
2366
|
return CommonService;
|
|
2373
2367
|
}());
|
|
2374
2368
|
CommonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CommonService_Factory() { return new CommonService(i0.ɵɵinject(ModuleConfigService)); }, token: CommonService, providedIn: "root" });
|
|
@@ -3254,11 +3248,7 @@
|
|
|
3254
3248
|
EnumWorkflowCoreCodeSettingKey["MAC_DINH"] = "workflowCoreTrinhKy";
|
|
3255
3249
|
EnumWorkflowCoreCodeSettingKey["PHE_DUYET_2_BUOC"] = "workflowCoreTrinhKy2Buoc";
|
|
3256
3250
|
EnumWorkflowCoreCodeSettingKey["PHE_DUYET_3_BUOC"] = "workflowCoreTrinhKy3Buoc";
|
|
3257
|
-
})(exports.EnumWorkflowCoreCodeSettingKey || (exports.EnumWorkflowCoreCodeSettingKey = {}));
|
|
3258
|
-
(function (EnumCoreVersion) {
|
|
3259
|
-
EnumCoreVersion["V4"] = "V4";
|
|
3260
|
-
EnumCoreVersion["V5"] = "V5";
|
|
3261
|
-
})(exports.EnumCoreVersion || (exports.EnumCoreVersion = {}));
|
|
3251
|
+
})(exports.EnumWorkflowCoreCodeSettingKey || (exports.EnumWorkflowCoreCodeSettingKey = {}));
|
|
3262
3252
|
|
|
3263
3253
|
var ModelSchema = /** @class */ (function () {
|
|
3264
3254
|
function ModelSchema(init) {
|
|
@@ -3334,7 +3324,6 @@
|
|
|
3334
3324
|
this.function = new CrudListCustomFunction();
|
|
3335
3325
|
this.popupHeader = '';
|
|
3336
3326
|
this.popupSize = new PopupSize();
|
|
3337
|
-
this.showMenuButtons = true;
|
|
3338
3327
|
this.getCustomDataTrinhKy = function (rowData) { return ({}); };
|
|
3339
3328
|
this.getLabelButtonTrinhKy = function (rowData) { return 'Trình ký'; };
|
|
3340
3329
|
this.checkReadyToTrinhKy = function () { return true; };
|
|
@@ -3649,7 +3638,6 @@
|
|
|
3649
3638
|
_this.fieldPlus = ''; // Danh sách những trường bổ sung cần lấy thêm ngoài id, ten; Ví dụ ,ma
|
|
3650
3639
|
_this.fieldValueParent = 'value'; // Trường sử dụng để lấy dữ liệu làm khóa từ bảng cha của item drop down được chọn
|
|
3651
3640
|
_this.fireCallBackInside = true;
|
|
3652
|
-
_this.coreVersion = exports.EnumCoreVersion.V5;
|
|
3653
3641
|
_this.funcCompare = function (item, value) { return item[_this.valueField] == value; };
|
|
3654
3642
|
for (var key in init) {
|
|
3655
3643
|
_this[key] = init[key];
|
|
@@ -3703,7 +3691,6 @@
|
|
|
3703
3691
|
_this.prefix = '';
|
|
3704
3692
|
_this.suffix = '';
|
|
3705
3693
|
_this.decimalPlaces = 2;
|
|
3706
|
-
_this.thousandSeperator = '.';
|
|
3707
3694
|
for (var key in init) {
|
|
3708
3695
|
_this[key] = init[key];
|
|
3709
3696
|
}
|
|
@@ -3883,6 +3870,7 @@
|
|
|
3883
3870
|
_this.mode = exports.FileManagerMode.multiple;
|
|
3884
3871
|
_this.layout = exports.EnumFileLayout.LIST;
|
|
3885
3872
|
_this.readonly = false;
|
|
3873
|
+
_this.uploadOnly = false;
|
|
3886
3874
|
// Trường hợp ở trong form, dùng trường này để lấy
|
|
3887
3875
|
// entityKey từ model.data thay vì truyền vào entityKey
|
|
3888
3876
|
_this.entityKeyField = 'id';
|
|
@@ -4497,7 +4485,6 @@
|
|
|
4497
4485
|
DataType["decimal"] = "decimal";
|
|
4498
4486
|
DataType["boolean"] = "boolean";
|
|
4499
4487
|
DataType["enum"] = "enum";
|
|
4500
|
-
DataType["currency"] = "currency";
|
|
4501
4488
|
})(exports.DataType || (exports.DataType = {}));
|
|
4502
4489
|
(function (ControlType) {
|
|
4503
4490
|
ControlType["dropdown"] = "dropdown";
|
|
@@ -4569,34 +4556,7 @@
|
|
|
4569
4556
|
(function (ExportAllMode) {
|
|
4570
4557
|
ExportAllMode[ExportAllMode["ManualGetData"] = 0] = "ManualGetData";
|
|
4571
4558
|
ExportAllMode[ExportAllMode["AutoGetData"] = 1] = "AutoGetData";
|
|
4572
|
-
})(exports.ExportAllMode || (exports.ExportAllMode = {}));
|
|
4573
|
-
(function (EventType) {
|
|
4574
|
-
EventType["CHANGE"] = "change";
|
|
4575
|
-
EventType["ADJUST_VALUE"] = "adjustValue";
|
|
4576
|
-
EventType["MODEL_CHANGED"] = "modelChanged";
|
|
4577
|
-
EventType["FORM_READY"] = "formReady";
|
|
4578
|
-
EventType["ENTER"] = "enter";
|
|
4579
|
-
EventType["HIDE"] = "hide";
|
|
4580
|
-
EventType["ROW_REORDER"] = "rowReorder";
|
|
4581
|
-
EventType["BLUR"] = "blur";
|
|
4582
|
-
EventType["READY"] = "READY";
|
|
4583
|
-
EventType["DATASOURCE_LOADED"] = "dataSourceLoaded";
|
|
4584
|
-
EventType["CLICK"] = "click";
|
|
4585
|
-
EventType["AUTO_CORRECT"] = "autoCorrect";
|
|
4586
|
-
EventType["VALIDATE"] = "validate";
|
|
4587
|
-
EventType["INIT"] = "init";
|
|
4588
|
-
EventType["ADDING"] = "adding";
|
|
4589
|
-
EventType["ADDED"] = "added";
|
|
4590
|
-
EventType["DELETING"] = "deleting";
|
|
4591
|
-
EventType["DELETED"] = "deleted";
|
|
4592
|
-
EventType["SELECT"] = "select";
|
|
4593
|
-
EventType["TABLE_CHANGED"] = "tableChanged";
|
|
4594
|
-
EventType["SAVE"] = "save";
|
|
4595
|
-
EventType["MESSAGE"] = "message";
|
|
4596
|
-
EventType["ROW_FINISH_INIT"] = "rowFinishInit";
|
|
4597
|
-
EventType["TABLE_FINISH_INIT"] = "tableFinishInit";
|
|
4598
|
-
EventType["UPLOADED"] = "uploaded";
|
|
4599
|
-
})(exports.EventType || (exports.EventType = {}));
|
|
4559
|
+
})(exports.ExportAllMode || (exports.ExportAllMode = {}));
|
|
4600
4560
|
|
|
4601
4561
|
var _a;
|
|
4602
4562
|
(function (WorkflowCoreStatusEnum) {
|
|
@@ -6038,24 +5998,14 @@
|
|
|
6038
5998
|
if (model.hasOwnProperty(sourceField)) {
|
|
6039
5999
|
valueFilter = model[sourceField];
|
|
6040
6000
|
if (canAccessSubField(valueFilter)) {
|
|
6041
|
-
|
|
6042
|
-
valueFilter = valueFilter.map(function (x) { return x[subField]; });
|
|
6043
|
-
}
|
|
6044
|
-
else {
|
|
6045
|
-
valueFilter = valueFilter[subField];
|
|
6046
|
-
}
|
|
6001
|
+
valueFilter = valueFilter[subField];
|
|
6047
6002
|
}
|
|
6048
6003
|
}
|
|
6049
6004
|
else if (rootModel) {
|
|
6050
6005
|
if (rootModel.hasOwnProperty(sourceField)) {
|
|
6051
6006
|
valueFilter = rootModel[sourceField];
|
|
6052
6007
|
if (canAccessSubField(valueFilter)) {
|
|
6053
|
-
|
|
6054
|
-
valueFilter = valueFilter.map(function (x) { return x[subField]; });
|
|
6055
|
-
}
|
|
6056
|
-
else {
|
|
6057
|
-
valueFilter = valueFilter[subField];
|
|
6058
|
-
}
|
|
6008
|
+
valueFilter = valueFilter[subField];
|
|
6059
6009
|
}
|
|
6060
6010
|
}
|
|
6061
6011
|
else {
|
|
@@ -6081,12 +6031,7 @@
|
|
|
6081
6031
|
finally { if (e_1) throw e_1.error; }
|
|
6082
6032
|
}
|
|
6083
6033
|
if (canAccessSubField(temp)) {
|
|
6084
|
-
|
|
6085
|
-
valueFilter = temp.map(function (x) { return x[subField]; });
|
|
6086
|
-
}
|
|
6087
|
-
else {
|
|
6088
|
-
valueFilter = temp[subField];
|
|
6089
|
-
}
|
|
6034
|
+
valueFilter = temp[subField];
|
|
6090
6035
|
}
|
|
6091
6036
|
}
|
|
6092
6037
|
}
|
|
@@ -6099,9 +6044,6 @@
|
|
|
6099
6044
|
valueFilter = tmpFilter.funcGetValue(valueFilter);
|
|
6100
6045
|
}
|
|
6101
6046
|
tmpFilter.value = JSON.stringify(valueFilter);
|
|
6102
|
-
if (tmpFilter.modifyValue) {
|
|
6103
|
-
valueFilter = tmpFilter.modifyValue(valueFilter);
|
|
6104
|
-
}
|
|
6105
6047
|
tmpFilter.filters = [];
|
|
6106
6048
|
if (filter.logic && filter.filters) {
|
|
6107
6049
|
filter.filters.forEach(function (f) { return _this.deQuyReplaceValue(tmpFilter.filters, f, model, rootModel); });
|
|
@@ -6252,7 +6194,6 @@
|
|
|
6252
6194
|
});
|
|
6253
6195
|
};
|
|
6254
6196
|
CrudService.prototype.mergeRefDataToDatasource = function (dataSource, schema, data) {
|
|
6255
|
-
data !== null && data !== void 0 ? data : (data = []);
|
|
6256
6197
|
var field = schema.field;
|
|
6257
6198
|
var funcGetLabel = function (item) { return item[schema.displayField] || item['label']; };
|
|
6258
6199
|
if (schema.funcGetLabel) {
|
|
@@ -6545,24 +6486,6 @@
|
|
|
6545
6486
|
});
|
|
6546
6487
|
return this.postGridInfo(apiUrl, gridInfo);
|
|
6547
6488
|
};
|
|
6548
|
-
BaseService.prototype.getAllByFilter = function (filters, fields, sorts, plusUrl) {
|
|
6549
|
-
if (fields === void 0) { fields = ''; }
|
|
6550
|
-
if (sorts === void 0) { sorts = []; }
|
|
6551
|
-
if (plusUrl === void 0) { plusUrl = ''; }
|
|
6552
|
-
var apiUrl = this.apiGetAll;
|
|
6553
|
-
if (plusUrl != null && plusUrl != '')
|
|
6554
|
-
apiUrl += "/" + plusUrl;
|
|
6555
|
-
var gridInfo = new GridInfo({
|
|
6556
|
-
fields: fields,
|
|
6557
|
-
pageInfo: {
|
|
6558
|
-
page: 1,
|
|
6559
|
-
pageSize: 9999
|
|
6560
|
-
},
|
|
6561
|
-
sorts: sorts,
|
|
6562
|
-
filters: filters ? filters : []
|
|
6563
|
-
});
|
|
6564
|
-
return this.postGridInfo(apiUrl, gridInfo);
|
|
6565
|
-
};
|
|
6566
6489
|
BaseService.prototype.getAllByGridInfo = function (gridInfo, plusUrl) {
|
|
6567
6490
|
if (plusUrl === void 0) { plusUrl = ''; }
|
|
6568
6491
|
var apiUrl = this.apiGetAll;
|
|
@@ -7033,7 +6956,7 @@
|
|
|
7033
6956
|
}());
|
|
7034
6957
|
|
|
7035
6958
|
// fix for build prod
|
|
7036
|
-
var printJS =
|
|
6959
|
+
var printJS = printJS___default['default'];
|
|
7037
6960
|
var FileExplorerService = /** @class */ (function () {
|
|
7038
6961
|
function FileExplorerService(_http, _moduleConfig, _authenService, _commonSerivce, _moduleConfigService, _notifierService) {
|
|
7039
6962
|
this._http = _http;
|
|
@@ -7243,11 +7166,11 @@
|
|
|
7243
7166
|
return this._serviceUri + "/DownloadLink/" + hash;
|
|
7244
7167
|
};
|
|
7245
7168
|
FileExplorerService.prototype.getDownloadForSignUrl = function (hash) {
|
|
7246
|
-
return this._serviceUri + "/
|
|
7169
|
+
return this._serviceUri + "/DownloadLink/downloadforsign/" + hash;
|
|
7247
7170
|
};
|
|
7248
7171
|
FileExplorerService.prototype.generateLinkDownload = function (model) {
|
|
7249
7172
|
var _this = this;
|
|
7250
|
-
var svUrl = this._serviceUri + "/
|
|
7173
|
+
var svUrl = this._serviceUri + "/DownloadLink/GenerateDownloadLink";
|
|
7251
7174
|
if (model.isFileVersion && !model.fileVersionId) {
|
|
7252
7175
|
model.fileVersionId = model.fileId;
|
|
7253
7176
|
}
|
|
@@ -7277,7 +7200,7 @@
|
|
|
7277
7200
|
this._http.get(url, { responseType: 'blob' })
|
|
7278
7201
|
.toPromise()
|
|
7279
7202
|
.then(function (rs) {
|
|
7280
|
-
|
|
7203
|
+
FileSaver__default['default'].saveAs(rs, fileName);
|
|
7281
7204
|
})
|
|
7282
7205
|
.catch(function (err) {
|
|
7283
7206
|
_this._notifierService.showWarning('Lỗi tải file');
|
|
@@ -7439,13 +7362,13 @@
|
|
|
7439
7362
|
return regex.test(ext);
|
|
7440
7363
|
};
|
|
7441
7364
|
FileExplorerService.prototype.saveSignedFile = function (data) {
|
|
7442
|
-
return this._http.post(this._serviceUri + "/
|
|
7365
|
+
return this._http.post(this._serviceUri + "/KySoFile/SaveSignedFile", data).toPromise();
|
|
7443
7366
|
};
|
|
7444
7367
|
FileExplorerService.prototype.getSignatureInfoByFileId = function (fileId) {
|
|
7445
|
-
return this._http.get(this._serviceUri + "/
|
|
7368
|
+
return this._http.get(this._serviceUri + "/KySoFile/GetListSignatureByFileId?fileId=" + fileId).toPromise();
|
|
7446
7369
|
};
|
|
7447
7370
|
FileExplorerService.prototype.getSignatureInfoByFileVersionId = function (fileVersionId) {
|
|
7448
|
-
return this._http.get(this._serviceUri + "/
|
|
7371
|
+
return this._http.get(this._serviceUri + "/KySoFile/GetListSignatureByFileVersionId?fileVersionId=" + fileVersionId).toPromise();
|
|
7449
7372
|
};
|
|
7450
7373
|
FileExplorerService.prototype.getUploadFileVersionApiUrl = function () {
|
|
7451
7374
|
return this._serviceUri + "/FileVersion/SaveVersionOnEdit";
|
|
@@ -7503,6 +7426,20 @@
|
|
|
7503
7426
|
var svUrl = this._serviceUri + "/FileObject/CreateServiceFileAnonymous";
|
|
7504
7427
|
return this._http.post(svUrl, serviceFileObjectDTO).pipe(operators.catchError(function (err) { return _this.handleError(err); })).toPromise();
|
|
7505
7428
|
};
|
|
7429
|
+
FileExplorerService.prototype.needConvertBeforeSign = function (fileName) {
|
|
7430
|
+
if (fileName.lastIndexOf('.') === -1) {
|
|
7431
|
+
return false;
|
|
7432
|
+
}
|
|
7433
|
+
var fileType = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
|
|
7434
|
+
if ((/(doc|docx|dot|dotm|dotx|xls|xlsx|ppt|pptx)$/i).test(fileType)) {
|
|
7435
|
+
return true;
|
|
7436
|
+
}
|
|
7437
|
+
return false;
|
|
7438
|
+
};
|
|
7439
|
+
FileExplorerService.prototype.changeFileExtension = function (fileName, newExtension) {
|
|
7440
|
+
var arr = fileName.split('.');
|
|
7441
|
+
return fileName.replace("." + arr[arr.length - 1], "." + newExtension);
|
|
7442
|
+
};
|
|
7506
7443
|
return FileExplorerService;
|
|
7507
7444
|
}());
|
|
7508
7445
|
FileExplorerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileExplorerService_Factory() { return new FileExplorerService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(AuthenService), i0.ɵɵinject(CommonService), i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(NotifierService)); }, token: FileExplorerService, providedIn: "root" });
|
|
@@ -7950,6 +7887,9 @@
|
|
|
7950
7887
|
});
|
|
7951
7888
|
return promise;
|
|
7952
7889
|
};
|
|
7890
|
+
DownloadLinkService.prototype.getDownloadForSignUrl = function (hash) {
|
|
7891
|
+
return this.serviceUri + "/DownloadForSign/" + hash;
|
|
7892
|
+
};
|
|
7953
7893
|
return DownloadLinkService;
|
|
7954
7894
|
}(BaseService));
|
|
7955
7895
|
DownloadLinkService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DownloadLinkService_Factory() { return new DownloadLinkService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(CrudService), i0.ɵɵinject(NotifierService)); }, token: DownloadLinkService, providedIn: "root" });
|
|
@@ -8941,7 +8881,6 @@
|
|
|
8941
8881
|
}
|
|
8942
8882
|
else {
|
|
8943
8883
|
this._applicationContext.getRootContext().replaySubscribeOnce(ComCtxConstants.ROOT.USER_READY, function (rs) {
|
|
8944
|
-
var firstTimeLogin = rs;
|
|
8945
8884
|
var accessToken = _this._oauthService.getAccessToken();
|
|
8946
8885
|
var decoded = JWT.default(accessToken);
|
|
8947
8886
|
// Chuyển đổi sang dùng instanceId nếu đăng nhập bằng identityv4 nhưng phải sử dụng base userOrgv5
|
|
@@ -8983,12 +8922,7 @@
|
|
|
8983
8922
|
localStorage.setItem(_this.CURRENT_USER_KEY, JSON.stringify(user));
|
|
8984
8923
|
}
|
|
8985
8924
|
_this._applicationContext.getRootContext().data.currentUser = user;
|
|
8986
|
-
|
|
8987
|
-
_this._applicationContext.getRootContext().fireEvent(ComCtxConstants.ROOT.NEED_CLEAR_PERMISSION_CACHE);
|
|
8988
|
-
}
|
|
8989
|
-
else {
|
|
8990
|
-
_this._applicationContext.getRootContext().fireReplayEvent(ComCtxConstants.ROOT.USER_LOADED, true);
|
|
8991
|
-
}
|
|
8925
|
+
_this._applicationContext.getRootContext().fireReplayEvent(ComCtxConstants.ROOT.USER_LOADED, true);
|
|
8992
8926
|
}, function (err) {
|
|
8993
8927
|
});
|
|
8994
8928
|
});
|
|
@@ -9548,12 +9482,9 @@
|
|
|
9548
9482
|
_this.delayCheckPermissions = [];
|
|
9549
9483
|
_this.ignoreAdmin = false;
|
|
9550
9484
|
_this.appCode = null;
|
|
9551
|
-
if (_moduleConfigService.getConfig().environment.authenticationSettings.coreVersion == 'v4') {
|
|
9552
|
-
_this.serviceUri = _moduleConfigService.getConfig().environment.apiDomain.authorizationEndpoint + "/permission";
|
|
9553
|
-
}
|
|
9554
9485
|
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.authorizationEndpoint;
|
|
9555
|
-
_this.appCode = _this._moduleConfigService.getConfig().appCode;
|
|
9556
9486
|
_this.ignoreAdmin = _this._moduleConfigService.getConfig().environment.isIgnoreAdmin;
|
|
9487
|
+
_this.appCode = _this._moduleConfigService.getConfig().appCode;
|
|
9557
9488
|
return _this;
|
|
9558
9489
|
}
|
|
9559
9490
|
/**
|
|
@@ -9775,10 +9706,6 @@
|
|
|
9775
9706
|
}
|
|
9776
9707
|
});
|
|
9777
9708
|
};
|
|
9778
|
-
PermissionService.prototype.clearPermissionCache = function (lstModule) {
|
|
9779
|
-
var url = this.serviceUri + "/ClearPermissionCache";
|
|
9780
|
-
return this.defaultPost(url, lstModule);
|
|
9781
|
-
};
|
|
9782
9709
|
return PermissionService;
|
|
9783
9710
|
}(BaseService));
|
|
9784
9711
|
PermissionService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PermissionService_Factory() { return new PermissionService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(UserService), i0.ɵɵinject(i4.OAuthService), i0.ɵɵinject(ApplicationContextService)); }, token: PermissionService, providedIn: "root" });
|
|
@@ -10153,7 +10080,7 @@
|
|
|
10153
10080
|
if (service == undefined) {
|
|
10154
10081
|
(this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow history');
|
|
10155
10082
|
}
|
|
10156
|
-
this.serviceUri = service.endPoint + "/
|
|
10083
|
+
this.serviceUri = service.endPoint + "/EntityWorkflowHistory";
|
|
10157
10084
|
};
|
|
10158
10085
|
EntityWorkflowHistoryService.prototype.getLastHistory = function (tableName, filters) {
|
|
10159
10086
|
if (filters === void 0) { filters = []; }
|
|
@@ -10161,7 +10088,7 @@
|
|
|
10161
10088
|
if (service == undefined) {
|
|
10162
10089
|
(this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow history');
|
|
10163
10090
|
}
|
|
10164
|
-
var url = service.endPoint + "/
|
|
10091
|
+
var url = service.endPoint + "/EntityWorkflowHistory/GetLastByFilter";
|
|
10165
10092
|
var gridInfo = {
|
|
10166
10093
|
pageInfo: {
|
|
10167
10094
|
page: 1,
|
|
@@ -10318,7 +10245,7 @@
|
|
|
10318
10245
|
(this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow setting');
|
|
10319
10246
|
}
|
|
10320
10247
|
return new Promise(function (resolve, reject) {
|
|
10321
|
-
_this.defaultPost(service.endPoint + "/
|
|
10248
|
+
_this.defaultPost(service.endPoint + "/EntityWorkflowSetting/GetSetting/" + service.entityName, {})
|
|
10322
10249
|
.then(function (res) {
|
|
10323
10250
|
if (res.success) {
|
|
10324
10251
|
var itemSetting = res.data;
|
|
@@ -10403,11 +10330,11 @@
|
|
|
10403
10330
|
};
|
|
10404
10331
|
EntityWorkflowSettingService.prototype.saveSetting = function (settingKey, data) {
|
|
10405
10332
|
var service = this.serviceManagers[settingKey];
|
|
10406
|
-
return this.defaultPost(service.endPoint + "/
|
|
10333
|
+
return this.defaultPost(service.endPoint + "/EntityWorkflowSetting/SaveSetting/" + service.entityName, data);
|
|
10407
10334
|
};
|
|
10408
10335
|
EntityWorkflowSettingService.prototype.removeSetting = function (settingKey) {
|
|
10409
10336
|
var service = this.serviceManagers[settingKey];
|
|
10410
|
-
return this.defaultPost(service.endPoint + "/
|
|
10337
|
+
return this.defaultPost(service.endPoint + "/EntityWorkflowSetting/RemoveSetting/" + service.entityName, {});
|
|
10411
10338
|
};
|
|
10412
10339
|
return EntityWorkflowSettingService;
|
|
10413
10340
|
}(BaseService));
|
|
@@ -11221,37 +11148,25 @@
|
|
|
11221
11148
|
});
|
|
11222
11149
|
});
|
|
11223
11150
|
};
|
|
11224
|
-
DataListBase.prototype.validateEdit = function (rowData) {
|
|
11225
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
11226
|
-
return __generator(this, function (_a) {
|
|
11227
|
-
return [2 /*return*/, true];
|
|
11228
|
-
});
|
|
11229
|
-
});
|
|
11230
|
-
};
|
|
11231
11151
|
DataListBase.prototype._edit = function (rowData, scopeDataEdit) {
|
|
11232
11152
|
if (scopeDataEdit === void 0) { scopeDataEdit = {}; }
|
|
11233
11153
|
return __awaiter(this, void 0, void 0, function () {
|
|
11234
|
-
var
|
|
11154
|
+
var flashShow;
|
|
11235
11155
|
return __generator(this, function (_a) {
|
|
11236
11156
|
switch (_a.label) {
|
|
11237
|
-
case 0:
|
|
11238
|
-
case 1:
|
|
11239
|
-
resultValidate = _a.sent();
|
|
11240
|
-
if (!resultValidate) {
|
|
11241
|
-
return [2 /*return*/];
|
|
11242
|
-
}
|
|
11157
|
+
case 0:
|
|
11243
11158
|
flashShow = rowData[KeyFlashShow];
|
|
11244
11159
|
delete rowData[KeyFlashShow];
|
|
11245
11160
|
this.formModel.formState = exports.FormState.EDIT;
|
|
11246
11161
|
return [4 /*yield*/, this.beforeEdit()];
|
|
11247
|
-
case
|
|
11162
|
+
case 1:
|
|
11248
11163
|
_a.sent();
|
|
11249
11164
|
this.setting.popupHeader = "C\u1EADp nh\u1EADt " + this.setting.objectName;
|
|
11250
11165
|
this.setting.maskClass = flashShow ? 'hide' : null;
|
|
11251
11166
|
this.scopeDataEdit = scopeDataEdit;
|
|
11252
11167
|
this.formModel.data = this.cloneData(rowData);
|
|
11253
11168
|
return [4 /*yield*/, this.modifyEditModel(rowData)];
|
|
11254
|
-
case
|
|
11169
|
+
case 2:
|
|
11255
11170
|
_a.sent();
|
|
11256
11171
|
this.formModel.data[KeyFlashShow] = flashShow;
|
|
11257
11172
|
this.showDetailForm = true;
|
|
@@ -11282,56 +11197,34 @@
|
|
|
11282
11197
|
DataListBase.prototype.getPromiseDeleteItem = function (rowData) {
|
|
11283
11198
|
return this.setting.baseService.delete(rowData.id);
|
|
11284
11199
|
};
|
|
11285
|
-
DataListBase.prototype.validateDelete = function (rowData) {
|
|
11286
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
11287
|
-
return __generator(this, function (_a) {
|
|
11288
|
-
return [2 /*return*/, true];
|
|
11289
|
-
});
|
|
11290
|
-
});
|
|
11291
|
-
};
|
|
11292
11200
|
DataListBase.prototype._delete = function (rowData) {
|
|
11293
|
-
|
|
11294
|
-
|
|
11295
|
-
|
|
11296
|
-
|
|
11297
|
-
|
|
11298
|
-
|
|
11299
|
-
|
|
11300
|
-
|
|
11201
|
+
var _this = this;
|
|
11202
|
+
if (rowData.__disableDelete) {
|
|
11203
|
+
return;
|
|
11204
|
+
}
|
|
11205
|
+
this._notifierService.showDeleteConfirm().then(function (rs) {
|
|
11206
|
+
if (!rs) {
|
|
11207
|
+
return;
|
|
11208
|
+
}
|
|
11209
|
+
if (_this.setting.baseService) {
|
|
11210
|
+
_this.getPromiseDeleteItem(rowData)
|
|
11211
|
+
.then(function (response) {
|
|
11212
|
+
if (response.success) {
|
|
11213
|
+
if (_this.setting.showVersionButton) {
|
|
11214
|
+
_this.context.fireEvent(ComCtxConstants.COMMON.RELOAD_DATA_VERSION, {}, true);
|
|
11301
11215
|
}
|
|
11302
|
-
|
|
11303
|
-
|
|
11304
|
-
resultValidate = _a.sent();
|
|
11305
|
-
if (!resultValidate) {
|
|
11306
|
-
return [2 /*return*/];
|
|
11216
|
+
else {
|
|
11217
|
+
_this._triggerProcessData();
|
|
11307
11218
|
}
|
|
11308
|
-
|
|
11309
|
-
|
|
11310
|
-
|
|
11311
|
-
|
|
11312
|
-
|
|
11313
|
-
|
|
11314
|
-
|
|
11315
|
-
|
|
11316
|
-
|
|
11317
|
-
_this.context.fireEvent(ComCtxConstants.COMMON.RELOAD_DATA_VERSION, {}, true);
|
|
11318
|
-
}
|
|
11319
|
-
else {
|
|
11320
|
-
_this._triggerProcessData();
|
|
11321
|
-
}
|
|
11322
|
-
_this._notifierService.showDeleteDataSuccess();
|
|
11323
|
-
}
|
|
11324
|
-
else {
|
|
11325
|
-
_this._notifierService.showWarningByReponse(response);
|
|
11326
|
-
}
|
|
11327
|
-
}, function (error) {
|
|
11328
|
-
_this._notifierService.showDeleteDataError();
|
|
11329
|
-
});
|
|
11330
|
-
}
|
|
11331
|
-
});
|
|
11332
|
-
return [2 /*return*/];
|
|
11333
|
-
}
|
|
11334
|
-
});
|
|
11219
|
+
_this._notifierService.showDeleteDataSuccess();
|
|
11220
|
+
}
|
|
11221
|
+
else {
|
|
11222
|
+
_this._notifierService.showWarningByReponse(response);
|
|
11223
|
+
}
|
|
11224
|
+
}, function (error) {
|
|
11225
|
+
_this._notifierService.showDeleteDataError();
|
|
11226
|
+
});
|
|
11227
|
+
}
|
|
11335
11228
|
});
|
|
11336
11229
|
};
|
|
11337
11230
|
DataListBase.prototype.getPromiseDeleteItems = function (items) {
|
|
@@ -11672,7 +11565,7 @@
|
|
|
11672
11565
|
arrPromiseDontNeedWait = [];
|
|
11673
11566
|
arrSchemaDontNeedWait = [];
|
|
11674
11567
|
_loop_1 = function (schema) {
|
|
11675
|
-
var field, arrValue_1, promise,
|
|
11568
|
+
var field, arrValue_1, promise, result, funcGetLabel_1;
|
|
11676
11569
|
return __generator(this, function (_a) {
|
|
11677
11570
|
switch (_a.label) {
|
|
11678
11571
|
case 0:
|
|
@@ -11707,11 +11600,7 @@
|
|
|
11707
11600
|
promise = schema.baseService.getDataDropdown(schema.groupCode, arrValue_1, this_1.createDropdownOptions(schema));
|
|
11708
11601
|
}
|
|
11709
11602
|
else {
|
|
11710
|
-
|
|
11711
|
-
if (schema.modifyFilter) {
|
|
11712
|
-
schema.modifyFilter(filters);
|
|
11713
|
-
}
|
|
11714
|
-
promise = schema.baseService.getDataDropdownByFilter(filters, this_1.createDropdownOptions(schema));
|
|
11603
|
+
promise = schema.baseService.getDataDropdownByFilter([this_1.newFilter(schema.valueField, exports.Operator.in, arrValue_1)], this_1.createDropdownOptions(schema));
|
|
11715
11604
|
}
|
|
11716
11605
|
if (!(schema.order != null)) return [3 /*break*/, 2];
|
|
11717
11606
|
return [4 /*yield*/, promise];
|
|
@@ -11789,7 +11678,6 @@
|
|
|
11789
11678
|
});
|
|
11790
11679
|
};
|
|
11791
11680
|
DataListBase.prototype.mergeRefDataToDatasource = function (dataSource, schema, data) {
|
|
11792
|
-
data !== null && data !== void 0 ? data : (data = []);
|
|
11793
11681
|
var field = schema.field;
|
|
11794
11682
|
var funcGetLabel = function (item) { return item[schema.displayField] || item['label']; };
|
|
11795
11683
|
if (schema.funcGetLabel) {
|
|
@@ -14838,10 +14726,6 @@
|
|
|
14838
14726
|
});
|
|
14839
14727
|
this.onModelChanged.emit(event);
|
|
14840
14728
|
}
|
|
14841
|
-
else {
|
|
14842
|
-
this._rootNode = new ControlTreeNode(this._modelData, this.formControls);
|
|
14843
|
-
this._rootNode.setCrudForm(this);
|
|
14844
|
-
}
|
|
14845
14729
|
},
|
|
14846
14730
|
enumerable: false,
|
|
14847
14731
|
configurable: true
|
|
@@ -16101,24 +15985,18 @@
|
|
|
16101
15985
|
return __generator(this, function (_d) {
|
|
16102
15986
|
switch (_d.label) {
|
|
16103
15987
|
case 0:
|
|
16104
|
-
if (!control.multiple) return [3 /*break*/,
|
|
15988
|
+
if (!control.multiple) return [3 /*break*/, 3];
|
|
16105
15989
|
if (!(eventType == 'hide')) return [3 /*break*/, 2];
|
|
16106
15990
|
return [4 /*yield*/, this.handleFieldValueChange(control, event, 'change', parentModel, parentPath, sourceNode, bubble)];
|
|
16107
15991
|
case 1:
|
|
16108
15992
|
_d.sent();
|
|
16109
|
-
|
|
16110
|
-
case 2:
|
|
16111
|
-
|
|
16112
|
-
|
|
16113
|
-
case 3:
|
|
16114
|
-
_d.sent();
|
|
16115
|
-
_d.label = 4;
|
|
16116
|
-
case 4: return [3 /*break*/, 7];
|
|
16117
|
-
case 5: return [4 /*yield*/, this.handleFieldValueChange(control, event, eventType, parentModel, parentPath, sourceNode, bubble)];
|
|
16118
|
-
case 6:
|
|
15993
|
+
_d.label = 2;
|
|
15994
|
+
case 2: return [3 /*break*/, 5];
|
|
15995
|
+
case 3: return [4 /*yield*/, this.handleFieldValueChange(control, event, eventType, parentModel, parentPath, sourceNode, bubble)];
|
|
15996
|
+
case 4:
|
|
16119
15997
|
_d.sent();
|
|
16120
|
-
_d.label =
|
|
16121
|
-
case
|
|
15998
|
+
_d.label = 5;
|
|
15999
|
+
case 5: return [2 /*return*/];
|
|
16122
16000
|
}
|
|
16123
16001
|
});
|
|
16124
16002
|
});
|
|
@@ -17071,7 +16949,7 @@
|
|
|
17071
16949
|
CrudFormComponent.decorators = [
|
|
17072
16950
|
{ type: i0.Component, args: [{
|
|
17073
16951
|
selector: 'crud-form',
|
|
17074
|
-
template: "<div [class]=\"_styleClass\" style=\"padding: 0.5rem 0.5rem 0\">\r\n <form #formElement autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\"\r\n [class]=\"'p-grid form-group crud-form' + (formClass ? ' ' + formClass : '')\"\r\n (keydown.shift.tab)=\"preventBlur($event)\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\">\r\n <ng-container *ngFor=\"let control of setting.schema\">\r\n <ng-container *ngIf=\"!isViewMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isViewMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"labelValueViewMode; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</div>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<ng-template #labelValueViewMode let-data=\"data\" let-control=\"control\" let-path=\"path\" let-parentPath=\"parentPath\"\r\n let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} type-{{control.dataType}} view-mode\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel && control.label\">\r\n <label [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}<span *ngIf=\"control.required\"\r\n class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container *ngIf=\"data[control.field] === null || data[control.field] === undefined\">\r\n <span class=\"no-value\"></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!(data[control.field] === null || data[control.field] === undefined)\">\r\n <ng-container [ngSwitch]=\"control.dataType\">\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"labelValueViewMode; context: {control: subControl, data: data[control.field], showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\"\r\n [rootFolderName]=\"control.rootFolderName || control.label\" [layout]=\"control.layout\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" [readonly]=\"true\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" [readonly]=\"true\"\r\n [accept]=\"control.accept\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\"\r\n [attr.label-index]=\"control.indexLabel\" [pTooltip]=\"control.title\" tooltipPosition=\"top\"\r\n tooltipStyleClass=\"wrap\" [escape]=\"false\" [for]=\"control.for\">{{control.text |\r\n translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'text'\">\r\n {{data[control.field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'money'\">\r\n {{data[control.field] | number}} VN\u0110\r\n </span>\r\n <span *ngSwitchCase=\"'date'\">\r\n {{data[control.field] | date:'dd/MM/yyyy'}}\r\n </span>\r\n <span *ngSwitchCase=\"'datetime'\">\r\n {{_crudService.renderDateTime(data[control.field], control.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'user'\">\r\n {{data[control.field] | userFormat | async}}\r\n </span>\r\n <span *ngSwitchCase=\"'hasDataSource'\">\r\n <span *ngIf=\"!control.freeText\">\r\n {{getItemInArrayByValue(data._source[control.field] || control.dataSource,\r\n data[control.field], control)}}\r\n </span>\r\n <span *ngIf=\"control.freeText\">\r\n {{getItemInArrayByTextValue(data._source[control.field] || control.dataSource,\r\n data[control.field])}}\r\n </span>\r\n </span>\r\n <span *ngSwitchCase=\"'colorPicker'\" class=\"show-color-control\"\r\n [ngStyle]=\"{ backgroundColor: data[control.field]}\">\r\n </span>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.sourceField]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.sourceField]\"></span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'colorControl'\" class=\"show-color-control\"\r\n [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\">\r\n </span>\r\n <span *ngSwitchCase=\"'boolean'\">\r\n <i class=\"{{data[control.field] | booleanFormat}}\"></i>\r\n </span>\r\n <span *ngSwitchCase=\"'html'\">\r\n <div [innerHTML]=\"data[control.field]\" *ngIf=\"data[control.field]==null?'':data[control.field]\">\r\n </div>\r\n </span>\r\n <span *ngSwitchCase=\"'mask'\">\r\n <tn-mask [viewMode]=\"true\" [prefix]=\"control.prefix\" [suffix]=\"control.suffix\"\r\n [disabled]=\"checkDisabled(data, control)\" [decimalPlaces]=\"control.decimalPlaces\"\r\n [maskType]=\"control.maskType\" [thousandSeperator]=\"control.thousandSeperator\" [(ngModel)]=\"data[control.field]\" [min]=\"control.min\"\r\n [max]=\"control.max\">\r\n </tn-mask>\r\n </span>\r\n <span *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\" [viewMode]=\"true\"\r\n [(data)]=\"data[control.field]\">\r\n </address-picker>\r\n </span>\r\n <span *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\" [maskType]=\"control.maskType\"\r\n [(ngModel)]=\"data[control.field]\" [min]=\"control.min\" [max]=\"control.max\">\r\n </tn-number-picker-range>\r\n </span>\r\n <span *ngSwitchCase=\"'string'\">{{data[control.field]}}</span>\r\n <span *ngSwitchCase=\"'button'\">\r\n </span>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table [value]=\"data[control.field]\" [columns]=\"control.headerTemplate\"\r\n [responsive]=\"true\" class=\"new-table scr-table table-control\">\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center; width: 2.5rem\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\"\r\n tooltipPosition=\"top\" [style.width]=\"subControl.width\"\r\n style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr>\r\n <td style=\"text-align: center; padding-left: 0; padding-right: 0;\"\r\n *ngIf=\"control.showNumber\" class=\"stt\">\r\n <span style=\"padding: 12px 5px; display: inline-block;\">{{ri+1}}</span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n class=\"control-inside\" [style]=\"subControl.style\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"labelValueViewMode; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.viewModedataType)\"\r\n [ngTemplateOutletContext]=\"{data: data, control: control, isViewMode: true}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #customControl let-data=\"data\" let-control=\"control\" let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\"\r\n let-rowIndex=\"index\" let-path=\"path\" let-parentPath=\"parentPath\" let-tablePath=\"tablePath\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\" id=\"{{path}}-holder\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} crud-form-control type-{{control.dataType}}\"\r\n [class.error]=\"data._errors[control.field].length > 0\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel\">\r\n <label *ngIf=\"control.label\" [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}\r\n <span *ngIf=\"control.required\" class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container [ngSwitch]=\"control.controlType\">\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <ng-container [ngTemplateOutlet]=\"labelControl\"\r\n [ngTemplateOutletContext]=\"{control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <label *ngIf=\"!control.ishtml\" [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | translate\"></label>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"p-inputgroup\" *ngIf=\"control.suffFix\">\r\n <input (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n pInputText [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n <span class=\"p-inputgroup-addon\">({{control.suffFix}})</span>\r\n </div>\r\n <input *ngIf=\"!control.suffFix\" (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n pInputText [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'template'\">\r\n <ng-container [ngTemplateOutlet]=\"control.template\"\r\n [ngTemplateOutletContext]=\"{$implicit: _rootNode, control: control, data: data, tablePath: tablePath, parentPath: parentPath, rowIndex: rowIndex, funcUpdateModel: updateModelFromExternal}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <tn-mask [prefix]=\"control.prefix\" [decimalPlaces]=\"control.decimalPlaces\" [suffix]=\"control.suffix\"\r\n [placeholder]=\"control.placeholder\" [disabled]=\"checkDisabled(data, control)\"\r\n [maskType]=\"control.maskType\" [min]=\"control.min\" [max]=\"control.max\" [thousandSeperator]=\"control.thousandSeperator\"\r\n [(ngModel)]=\"data[control.field]\" (onFocus)=\"onFocusTextControl($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\"\r\n [disabled]=\"checkDisabled(data, control)\" [maskType]=\"control.maskType\"\r\n [(ngModel)]=\"data[control.field]\" [min]=\"control.min\" [max]=\"control.max\"\r\n (search)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (blur)=\"handleFieldValueChange(control, $event, 'blur', data, parentPath)\">\r\n </tn-number-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <input currencyMask\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n pInputText type=\"tel\" [(ngModel)]=\"data[control.field]\"\r\n [options]=\"{prefix: '', thousands: '.', decimal: ',',precision:control.dataFormat === 'money'?0:0 }\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (focus)=\"onFocusTextControl($event)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phoneOrfax'\">\r\n <input [placeholder]=\"control.dataFormat==='phone'?'(999) 999-9999':'999-999-9999'\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n type=\"tel\" pInputText [(ngModel)]=\"data[control.field]\" (focus)=\"onFocusTextControl($event)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea (focus)=\"onFocusTextControl($event)\" [rows]=\"control.rows ? control.rows : 5\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <tn-tinymce [(ngModel)]=\"data[control.field]\"\r\n [required]=\"control.validators && control.validators.required\" [mode]=\"control.mode\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [height]=\"control.height ? control.height : 250\"\r\n [disabled]=\"control.disabled || (control.disableCheck && control.disableCheck(model))\">\r\n </tn-tinymce>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <datetime-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </datetime-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <app-autocomplete-datasource [control]=\"control\" [(ngModel)]=\"data[control.field]\"\r\n [suggestions]=\"data._source[control.field] || control.dataSource\"\r\n (onValueChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </app-autocomplete-datasource>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetimerange'\">\r\n <tn-datetime-picker-range [(ngModel)]=\"data[control.field]\" [disabled]=\"control.disabled\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-datetime-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <dropdown [control]=\"control\" [dataSource]=\"getControlDataSource(control, data)\"\r\n [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleChangeDropdown(control, $event, 'change', data, parentPath)\"\r\n (onHideSmartEvent)=\"handleChangeDropdown(control, $event, 'hide', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [readonly]=\"control.disabled\"\r\n [rootFolderName]=\"control.rootFolderName || control.label\" [layout]=\"control.layout\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [readonly]=\"control.readonly\" [accept]=\"control.accept\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'user-picker'\">\r\n <user-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\" [multiple]=\"control.multiple\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </user-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-inputSwitch>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div [class]=\"control.class\" role=\"checkbox-alone\">\r\n <p-checkbox [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [label]=\"!control.hiddenLabel ? control.checkboxLabel ? control.checkboxLabel : control.label : null\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" binary=\"true\">\r\n </p-checkbox>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button type=\"button\" pButton [class]=\"control.btClass\" [icon]=\"control.icon\"\r\n [label]=\"control.label | translate\" [ngStyle]=\"control.btStyle\"\r\n (click)=\"handleButtonClick(control, $event, parentPath)\"></button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: subControl, data: data[control.field], parentPath: path, rowIndex: rowIndex, path: path + '.' + subControl.field, showLabel: subControl.showLabel, mdWidth: subControl.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkboxlist'\">\r\n <check-box-list [control]=\"control\" [dataSource]=\"data._source[control.field] || control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </check-box-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'radiobuttonlist'\">\r\n <radio-button-list [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\">\r\n </radio-button-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorPicker'\">\r\n <tn-color-picker [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-color-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.field]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.field]\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorControl'\">\r\n <span class=\"show-color-control\" [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\"\r\n [disabled]=\"checkDisabled(data, control)\" [(data)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </address-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete-picker'\">\r\n <autocomplete-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [parentPath]=\"parentPath\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </autocomplete-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'entity-picker'\">\r\n <entity-picker [control]=\"control\" [children]=\"children\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </entity-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc'\">\r\n <cocautochuc-picker [control]=\"control\" [parentOrgId]=\"control.parentOrgId\"\r\n [disabled]=\"checkDisabled(data, control)\" [parentOrgCode]=\"control.parentOrgCode\"\r\n [filter]=\"control.filter\" [multiple]=\"control.multiple\" [required]=\"control.required\"\r\n [isUsingId]=\"control.isUsingId\" [disabledParentItem]=\"control.disabledParentItem\"\r\n [rootParentId]=\"control.rootParentId\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </cocautochuc-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc-picker'\">\r\n <cocautochuc-picker-list [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </cocautochuc-picker-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'vanban'\">\r\n <vanban-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </vanban-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'congviec'\">\r\n <div>\r\n <congviec-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </congviec-picker>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table [value]=\"data[control.field]\" [columns]=\"control.headerTemplate\" [responsive]=\"true\"\r\n class=\"new-table scr-table table-control\" [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-rowData let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center; width: 2.5rem\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\" tooltipPosition=\"top\"\r\n [style.width]=\"subControl.width\" style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"control.enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\"\r\n [style.width]=\"getTableFunctionColumnWidth(control)\"\r\n class=\"table-function column-function\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td style=\"text-align: center; padding-left: 0; padding-right: 0;\"\r\n *ngIf=\"control.showNumber\" class=\"stt\">\r\n <span style=\"padding: 12px 5px; display: inline-block;\">{{ri+1}}</span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [class.control-inside]=\"true\" [class]=\"subControl.class\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"control.enableReorderRow\" class=\"no-padding center v-center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td style=\"text-align:center\" *ngIf=\"control.showFunction\" class=\"column-function\">\r\n <div class=\"p-toolbar-group-center button-group\">\r\n <button *ngIf=\"control.showSave\" [disabled]=\"rowData._disableSave\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-save\"\r\n [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-pencil\"\r\n [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton class=\"p-button-text p-button-danger\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"deleteRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.rowButtons\" type=\"button\" pButton\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\"\r\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData, control)\"></button>\r\n <!-- <button *ngFor=\"let bt of control.rowButtons\" type=\"button\" pButton\r\n [class]=\"bt.class\" [icon]=\"bt.icon\" [pTooltip]=\"bt.label | translate\"\r\n tooltipPosition=\"top\" style=\"width: 2.143em;\"\r\n (click)=\"messageRow(ri, control, path)\"></button> -->\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"control.showFooter\" class=\"--table-schema-footer\">\r\n <button *ngIf=\"control.showAdd\" type=\"button\" pButton style=\"width:auto\" label=\"Th\u00EAm m\u1EDBi\"\r\n icon=\"pi pi-plus\" class=\"p-button-text\" (click)=\"addNewRow(control, path)\"></button>\r\n <span style=\"font-weight: normal;\">\r\n <p-checkbox label=\"M\u1EDF dialog\" [binary]=\"true\" [(ngModel)]=\"control.showEdit\">\r\n </p-checkbox>\r\n </span>\r\n <button *ngIf=\"control.enableAddMulti\" type=\"button\" pButton\r\n style=\"width:auto; margin-left:10px;\" label=\"Th\u00EAm nhi\u1EC1u\" icon=\"pi pi-clone\"\r\n class=\"p-button-text\" (click)=\"addMultiRow(control, 5, path)\"></button>\r\n <button *ngFor=\"let bt of control.footerButtons\" type=\"button\" pButton [class]=\"bt.class\"\r\n [icon]=\"bt.icon\" [label]=\"bt.label | translate\" style=\"width:auto; margin-left:10px;\"\r\n (click)=\"messageRow( -1, control, path)\"></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.field)\"\r\n [ngTemplateOutletContext]=\"{crudForm: this, data: data, index: rowIndex, parentPath: parentPath, control: control, changeFunc: handleFieldValueChange}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"validation; context: {control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #validation let-control=\"control\" let-data=\"data\">\r\n <ng-container *ngIf=\"data._errors[control.field].length > 0\">\r\n <div class=\"error-container\">\r\n <ng-container *ngFor=\"let error of data._errors[control.field]\">\r\n <div class=\"error-item\" *ngIf=\"error\">\r\n <ng-container [ngTemplateOutlet]=\"errorMessage\" [ngTemplateOutletContext]=\"{content: error}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #errorMessage let-content=\"content\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-ban\"></i>\r\n <span> {{content}}</span>\r\n </div>\r\n</ng-template>\r\n<ng-template #labelControl let-control=\"control\">\r\n <ng-container>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\" [attr.label-index]=\"control.indexLabel\"\r\n [pTooltip]=\"control.title\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\" [escape]=\"false\"\r\n [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<tn-dialog *ngIf=\"tableFormShow\" #dialog [styleClass]=\"'address-form'\" [header]=\"tableFormTitle | translate\"\r\n [popupSize]=\"tableFormPopupSize\" (onHide)=\"tableFormShow = false\">\r\n <table-detail-form #formBase [parentSetting]=\"setting\" [schema]=\"tableFormSchema\" [data]=\"tableFormData\"\r\n (onSaved)=\"handleSavedTableRow($event)\" (onCancel)=\"tableFormShow = false\">\r\n </table-detail-form>\r\n</tn-dialog>\r\n",
|
|
16952
|
+
template: "<div [class]=\"_styleClass\" style=\"padding: 0.5rem 0.5rem 0\">\r\n <form #formElement autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\"\r\n [class]=\"'p-grid form-group crud-form' + (formClass ? ' ' + formClass : '')\"\r\n (keydown.shift.tab)=\"preventBlur($event)\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\">\r\n <ng-container *ngFor=\"let control of setting.schema\">\r\n <ng-container *ngIf=\"!isViewMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isViewMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"labelValueViewMode; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</div>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<ng-template #labelValueViewMode let-data=\"data\" let-control=\"control\" let-path=\"path\" let-parentPath=\"parentPath\"\r\n let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} type-{{control.dataType}} view-mode\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel && control.label\">\r\n <label [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}<span *ngIf=\"control.required\"\r\n class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container *ngIf=\"data[control.field] === null || data[control.field] === undefined\">\r\n <span class=\"no-value\"></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!(data[control.field] === null || data[control.field] === undefined)\">\r\n <ng-container [ngSwitch]=\"control.dataType\">\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"labelValueViewMode; context: {control: subControl, data: data[control.field], showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\"\r\n [rootFolderName]=\"control.rootFolderName || control.label\" [layout]=\"control.layout\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" [readonly]=\"true\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" [readonly]=\"true\"\r\n [accept]=\"control.accept\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\"\r\n [attr.label-index]=\"control.indexLabel\" [pTooltip]=\"control.title\" tooltipPosition=\"top\"\r\n tooltipStyleClass=\"wrap\" [escape]=\"false\" [for]=\"control.for\">{{control.text |\r\n translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'text'\">\r\n {{data[control.field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'money'\">\r\n {{data[control.field] | number}} VN\u0110\r\n </span>\r\n <span *ngSwitchCase=\"'date'\">\r\n {{data[control.field] | date:'dd/MM/yyyy'}}\r\n </span>\r\n <span *ngSwitchCase=\"'datetime'\">\r\n {{_crudService.renderDateTime(data[control.field], control.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'user'\">\r\n {{data[control.field] | userFormat | async}}\r\n </span>\r\n <span *ngSwitchCase=\"'hasDataSource'\">\r\n <span *ngIf=\"!control.freeText\">\r\n {{getItemInArrayByValue(data._source[control.field] || control.dataSource,\r\n data[control.field], control)}}\r\n </span>\r\n <span *ngIf=\"control.freeText\">\r\n {{getItemInArrayByTextValue(data._source[control.field] || control.dataSource,\r\n data[control.field])}}\r\n </span>\r\n </span>\r\n <span *ngSwitchCase=\"'colorPicker'\" class=\"show-color-control\"\r\n [ngStyle]=\"{ backgroundColor: data[control.field]}\">\r\n </span>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.sourceField]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.sourceField]\"></span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'colorControl'\" class=\"show-color-control\"\r\n [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\">\r\n </span>\r\n <span *ngSwitchCase=\"'boolean'\">\r\n <i class=\"{{data[control.field] | booleanFormat}}\"></i>\r\n </span>\r\n <span *ngSwitchCase=\"'html'\">\r\n <div [innerHTML]=\"data[control.field]\" *ngIf=\"data[control.field]==null?'':data[control.field]\">\r\n </div>\r\n </span>\r\n <span *ngSwitchCase=\"'mask'\">\r\n <tn-mask [viewMode]=\"true\" [prefix]=\"control.prefix\" [suffix]=\"control.suffix\"\r\n [disabled]=\"checkDisabled(data, control)\" [decimalPlaces]=\"control.decimalPlaces\"\r\n [maskType]=\"control.maskType\" [(ngModel)]=\"data[control.field]\" [min]=\"control.min\"\r\n [max]=\"control.max\">\r\n </tn-mask>\r\n </span>\r\n <span *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\" [viewMode]=\"true\"\r\n [(data)]=\"data[control.field]\">\r\n </address-picker>\r\n </span>\r\n <span *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\" [maskType]=\"control.maskType\"\r\n [(ngModel)]=\"data[control.field]\" [min]=\"control.min\" [max]=\"control.max\">\r\n </tn-number-picker-range>\r\n </span>\r\n <span *ngSwitchCase=\"'string'\">{{data[control.field]}}</span>\r\n <span *ngSwitchCase=\"'button'\">\r\n </span>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table [value]=\"data[control.field]\" [columns]=\"control.headerTemplate\"\r\n [responsive]=\"true\" class=\"new-table scr-table table-control\">\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center; width: 2.5rem\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\"\r\n tooltipPosition=\"top\" [style.width]=\"subControl.width\"\r\n style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr>\r\n <td style=\"text-align: center; padding-left: 0; padding-right: 0;\"\r\n *ngIf=\"control.showNumber\" class=\"stt\">\r\n <span style=\"padding: 12px 5px; display: inline-block;\">{{ri+1}}</span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n class=\"control-inside\" [style]=\"subControl.style\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"labelValueViewMode; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.viewModedataType)\"\r\n [ngTemplateOutletContext]=\"{data: data, control: control, isViewMode: true}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #customControl let-data=\"data\" let-control=\"control\" let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\"\r\n let-rowIndex=\"index\" let-path=\"path\" let-parentPath=\"parentPath\" let-tablePath=\"tablePath\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\" id=\"{{path}}-holder\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} crud-form-control type-{{control.dataType}}\"\r\n [class.error]=\"data._errors[control.field].length > 0\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel\">\r\n <label *ngIf=\"control.label\" [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}\r\n <span *ngIf=\"control.required\" class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container [ngSwitch]=\"control.controlType\">\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <ng-container [ngTemplateOutlet]=\"labelControl\"\r\n [ngTemplateOutletContext]=\"{control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <label *ngIf=\"!control.ishtml\" [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | translate\"></label>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"p-inputgroup\" *ngIf=\"control.suffFix\">\r\n <input (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n pInputText [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n <span class=\"p-inputgroup-addon\">({{control.suffFix}})</span>\r\n </div>\r\n <input *ngIf=\"!control.suffFix\" (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n pInputText [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'template'\">\r\n <ng-container [ngTemplateOutlet]=\"control.template\"\r\n [ngTemplateOutletContext]=\"{$implicit: _rootNode, control: control, data: data, tablePath: tablePath, parentPath: parentPath, rowIndex: rowIndex, funcUpdateModel: updateModelFromExternal}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <tn-mask [prefix]=\"control.prefix\" [decimalPlaces]=\"control.decimalPlaces\" [suffix]=\"control.suffix\"\r\n [placeholder]=\"control.placeholder\" [disabled]=\"checkDisabled(data, control)\"\r\n [maskType]=\"control.maskType\" [min]=\"control.min\" [max]=\"control.max\"\r\n [(ngModel)]=\"data[control.field]\" (onFocus)=\"onFocusTextControl($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\"\r\n [disabled]=\"checkDisabled(data, control)\" [maskType]=\"control.maskType\"\r\n [(ngModel)]=\"data[control.field]\" [min]=\"control.min\" [max]=\"control.max\"\r\n (search)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (blur)=\"handleFieldValueChange(control, $event, 'blur', data, parentPath)\">\r\n </tn-number-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <input currencyMask\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n pInputText type=\"tel\" [(ngModel)]=\"data[control.field]\"\r\n [options]=\"{prefix: '', thousands: '.', decimal: ',',precision:control.dataFormat === 'money'?0:0 }\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (focus)=\"onFocusTextControl($event)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phoneOrfax'\">\r\n <input [placeholder]=\"control.dataFormat==='phone'?'(999) 999-9999':'999-999-9999'\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n type=\"tel\" pInputText [(ngModel)]=\"data[control.field]\" (focus)=\"onFocusTextControl($event)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea (focus)=\"onFocusTextControl($event)\" [rows]=\"control.rows ? control.rows : 5\"\r\n [attr.disabled]=\"data._status[control.field].disabled === true || (data._status[control.field].disabled === undefined && control.disabled) ? true : null\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <tn-tinymce [(ngModel)]=\"data[control.field]\"\r\n [required]=\"control.validators && control.validators.required\" [mode]=\"control.mode\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [height]=\"control.height ? control.height : 250\"\r\n [disabled]=\"control.disabled || (control.disableCheck && control.disableCheck(model))\">\r\n </tn-tinymce>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <datetime-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </datetime-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <app-autocomplete-datasource [control]=\"control\" [(ngModel)]=\"data[control.field]\"\r\n [suggestions]=\"data._source[control.field] || control.dataSource\"\r\n (onValueChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </app-autocomplete-datasource>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetimerange'\">\r\n <tn-datetime-picker-range [(ngModel)]=\"data[control.field]\" [disabled]=\"control.disabled\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-datetime-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <dropdown [control]=\"control\" [dataSource]=\"getControlDataSource(control, data)\"\r\n [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleChangeDropdown(control, $event, 'change', data, parentPath)\"\r\n (onHideSmartEvent)=\"handleChangeDropdown(control, $event, 'hide', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [readonly]=\"control.disabled\"\r\n [rootFolderName]=\"control.rootFolderName || control.label\" [layout]=\"control.layout\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [readonly]=\"control.readonly\" [accept]=\"control.accept\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'user-picker'\">\r\n <user-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\" [multiple]=\"control.multiple\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </user-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-inputSwitch>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div [class]=\"control.class\" role=\"checkbox-alone\">\r\n <p-checkbox [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [label]=\"!control.hiddenLabel ? control.label : null\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" binary=\"true\">\r\n </p-checkbox>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button type=\"button\" pButton [class]=\"control.btClass\" [icon]=\"control.icon\"\r\n [label]=\"control.label | translate\" [ngStyle]=\"control.btStyle\"\r\n (click)=\"handleButtonClick(control, $event, parentPath)\"></button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: subControl, data: data[control.field], parentPath: path, rowIndex: rowIndex, path: path + '.' + subControl.field, showLabel: subControl.showLabel, mdWidth: subControl.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkboxlist'\">\r\n <check-box-list [control]=\"control\" [dataSource]=\"data._source[control.field] || control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </check-box-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'radiobuttonlist'\">\r\n <radio-button-list [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\">\r\n </radio-button-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorPicker'\">\r\n <tn-color-picker [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-color-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.field]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.field]\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorControl'\">\r\n <span class=\"show-color-control\" [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\"\r\n [disabled]=\"checkDisabled(data, control)\" [(data)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </address-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete-picker'\">\r\n <autocomplete-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </autocomplete-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'entity-picker'\">\r\n <entity-picker [control]=\"control\" [children]=\"children\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </entity-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc'\">\r\n <cocautochuc-picker [control]=\"control\" [parentOrgId]=\"control.parentOrgId\"\r\n [disabled]=\"checkDisabled(data, control)\" [parentOrgCode]=\"control.parentOrgCode\"\r\n [filter]=\"control.filter\" [multiple]=\"control.multiple\" [required]=\"control.required\"\r\n [isUsingId]=\"control.isUsingId\" [disabledParentItem]=\"control.disabledParentItem\"\r\n [rootParentId]=\"control.rootParentId\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </cocautochuc-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc-picker'\">\r\n <cocautochuc-picker-list [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </cocautochuc-picker-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'vanban'\">\r\n <vanban-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </vanban-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'congviec'\">\r\n <div>\r\n <congviec-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </congviec-picker>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table [value]=\"data[control.field]\" [columns]=\"control.headerTemplate\" [responsive]=\"true\"\r\n class=\"new-table scr-table table-control\" [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-rowData let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center; width: 2.5rem\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\" tooltipPosition=\"top\"\r\n [style.width]=\"subControl.width\" style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"control.enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\"\r\n [style.width]=\"getTableFunctionColumnWidth(control)\"\r\n class=\"table-function column-function\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td style=\"text-align: center; padding-left: 0; padding-right: 0;\"\r\n *ngIf=\"control.showNumber\" class=\"stt\">\r\n <span style=\"padding: 12px 5px; display: inline-block;\">{{ri+1}}</span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [class.control-inside]=\"true\" [class]=\"subControl.class\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"control.enableReorderRow\" class=\"no-padding center v-center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td style=\"text-align:center\" *ngIf=\"control.showFunction\" class=\"column-function\">\r\n <div class=\"p-toolbar-group-center button-group\">\r\n <button *ngIf=\"control.showSave\" [disabled]=\"rowData._disableSave\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-save\"\r\n [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-pencil\"\r\n [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton class=\"p-button-text p-button-danger\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"deleteRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.rowButtons\" type=\"button\" pButton\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\"\r\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData, control)\"></button>\r\n <!-- <button *ngFor=\"let bt of control.rowButtons\" type=\"button\" pButton\r\n [class]=\"bt.class\" [icon]=\"bt.icon\" [pTooltip]=\"bt.label | translate\"\r\n tooltipPosition=\"top\" style=\"width: 2.143em;\"\r\n (click)=\"messageRow(ri, control, path)\"></button> -->\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"control.showFooter\" class=\"--table-schema-footer\">\r\n <button *ngIf=\"control.showAdd\" type=\"button\" pButton style=\"width:auto\" label=\"Th\u00EAm m\u1EDBi\"\r\n icon=\"pi pi-plus\" class=\"p-button-text\" (click)=\"addNewRow(control, path)\"></button>\r\n <span style=\"font-weight: normal;\">\r\n <p-checkbox label=\"M\u1EDF dialog\" [binary]=\"true\" [(ngModel)]=\"control.showEdit\">\r\n </p-checkbox>\r\n </span>\r\n <button *ngIf=\"control.enableAddMulti\" type=\"button\" pButton\r\n style=\"width:auto; margin-left:10px;\" label=\"Th\u00EAm nhi\u1EC1u\" icon=\"pi pi-clone\"\r\n class=\"p-button-text\" (click)=\"addMultiRow(control, 5, path)\"></button>\r\n <button *ngFor=\"let bt of control.footerButtons\" type=\"button\" pButton [class]=\"bt.class\"\r\n [icon]=\"bt.icon\" [label]=\"bt.label | translate\" style=\"width:auto; margin-left:10px;\"\r\n (click)=\"messageRow( -1, control, path)\"></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.field)\"\r\n [ngTemplateOutletContext]=\"{crudForm: this, data: data, index: rowIndex, parentPath: parentPath, control: control, changeFunc: handleFieldValueChange}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"validation; context: {control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #validation let-control=\"control\" let-data=\"data\">\r\n <ng-container *ngIf=\"data._errors[control.field].length > 0\">\r\n <div class=\"error-container\">\r\n <ng-container *ngFor=\"let error of data._errors[control.field]\">\r\n <div class=\"error-item\" *ngIf=\"error\">\r\n <ng-container [ngTemplateOutlet]=\"errorMessage\" [ngTemplateOutletContext]=\"{content: error}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #errorMessage let-content=\"content\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-ban\"></i>\r\n <span> {{content}}</span>\r\n </div>\r\n</ng-template>\r\n<ng-template #labelControl let-control=\"control\">\r\n <ng-container>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\" [attr.label-index]=\"control.indexLabel\"\r\n [pTooltip]=\"control.title\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\" [escape]=\"false\"\r\n [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<tn-dialog *ngIf=\"tableFormShow\" #dialog [styleClass]=\"'address-form'\" [header]=\"tableFormTitle | translate\"\r\n [popupSize]=\"tableFormPopupSize\" (onHide)=\"tableFormShow = false\">\r\n <table-detail-form #formBase [parentSetting]=\"setting\" [schema]=\"tableFormSchema\" [data]=\"tableFormData\"\r\n (onSaved)=\"handleSavedTableRow($event)\" (onCancel)=\"tableFormShow = false\">\r\n </table-detail-form>\r\n</tn-dialog>\r\n",
|
|
17075
16953
|
providers: [ComponentContextService],
|
|
17076
16954
|
styles: [".label-only{font-weight:700;margin-bottom:1em}div.label{position:relative}div.label .star-required{color:red;padding-left:.2em;padding-top:.3em;position:absolute}div.type-container.not-show-in-box-holder{padding:0}.--table-schema-footer{align-items:center;background:#f8f9fa;border:1px solid #e9ecef;color:#495057;display:flex;font-weight:600;padding:.5em}::ng-deep .p-datatable .p-datatable-tbody tr td.control-inside,::ng-deep .p-datatable .p-datatable-tbody tr td.control-inside .show-in-box:not(.crud-form-control){padding:0}.show-in-box{border:1px solid #ced4da;border-radius:5px}.not-show-in-box{padding:0}.view-mode div.label{padding-bottom:3px}.view-mode div.label label{font-size:.85em;font-weight:700}.view-mode>span:not(:empty){display:inline-block;padding:5px 0;width:100%}.view-mode.type-table div.label+div{padding:5px 0}td>.view-mode{display:inline-block;padding:.25rem .5rem}td>.view-mode .view-mode{padding:0}.crud-form-control div[role=checkbox-alone]{margin-top:24px}.crud-form-control div[role=checkbox-alone].mg-top-0{margin-top:0}.crud-form-control .label+div[role=checkbox-alone]{margin-top:11px}.crud-form-control.type-table div[role=checkbox-alone]{margin-top:6px;text-align:center}.crud-form-control.type-table div[role=checkbox-alone].mg-top-0{margin-top:0}.crud-form-control.type-table div[role=checkbox-alone].align-left{text-align:left}.crud-form-control.type-title{border-bottom:1px solid #cfcfcf;color:#025ba7;font-size:1.2rem;font-weight:700;padding:10px 0 10px 5px;text-transform:uppercase}.crud-form-control.type-title>.label{margin-bottom:0}.control-description{color:#6c757d;font-size:.8rem;margin-bottom:5px;margin-left:10px}::ng-deep .crud-form-control .tn-check-box-list{margin-top:5px}::ng-deep .crud-form-control>div.label{font-size:.9em;height:1.15em;margin-bottom:5px}::ng-deep .crud-form-control>div.label+*{width:100%}::ng-deep .crud-form-control>.error-container .error-item{animation:shrink .1s;min-height:20px;overflow:visible;padding-top:5px}::ng-deep .crud-form-control>.error-container .error-item .error-content{animation:fadeIn .1s;color:red;display:flex;font-size:.9em;position:relative}::ng-deep .crud-form-control>.error-container .error-item .error-content i{display:flex;font-size:.9em;padding-top:1px}::ng-deep .crud-form-control>.error-container .error-item .error-content span{display:flex;padding-left:5px}::ng-deep .crud-form-control.no-label>div.label{display:none}::ng-deep .crud-form-control.error .p-dropdown,::ng-deep .crud-form-control.error .p-inputtext,::ng-deep .crud-form-control.error .p-multiselect,::ng-deep .crud-form-control.error .tn-dropdown,::ng-deep .crud-form-control.error input,::ng-deep .crud-form-control.error select,::ng-deep .crud-form-control.error textarea{border-color:#ff5722!important}::ng-deep .crud-form-control.error .p-autocomplete-multiple-container:not(.p-disabled).p-focus,::ng-deep .crud-form-control.error .p-inputtext:enabled:focus,::ng-deep .crud-form-control.error .tn-dropdown:not(.p-disabled).p-focus{box-shadow:0 0 0 .2rem #ffc4b3}::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-dropdown,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-inputtext,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-multiselect,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .tn-dropdown,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) input,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) select,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) textarea{border-color:#ced4da!important}::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-autocomplete-multiple-container:not(.p-disabled).p-focus,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-dropdown.tn-dropdown.p-focus,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa}@keyframes fadeIn{0%{opacity:0;top:-25px}to{opacity:1;top:0}}@keyframes shrink{0%{height:0}to{height:20px}}@media screen and (min-width:40.063em){.label-right{padding-left:2em}}:host ::ng-deep .tox-tinymce{border:none;border-top:1px solid #ccc;overflow:unset}:host ::ng-deep .tox-tinymce .tox-editor-container{overflow:unset}:host ::ng-deep .tox-tinymce .tox-toolbar{border:1px solid #ccc;border-bottom:none}:host ::ng-deep .tox-tinymce .tox-edit-area{border:1px solid #ccc}:host ::ng-deep .tox-tinymce .tox-edit-area iframe{box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}:host ::ng-deep .tox-tinymce .tox-menubar{border:1px solid #ccc}:host ::ng-deep .tox .tox-edit-area.tinymce-focus{border:1px solid #66afe9;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 3px 0 #66afe9;transition:box-shadow .3s,border-color .3s;transition-delay:0s,0s;transition-duration:.3s,.3s;transition-property:box-shadow,border-color;transition-timing-function:ease,ease}:host ::ng-deep .rq .tox .tox-edit-area{border-left-color:#ff4c46}.no-value{font-size:.8em}:host ::ng-deep .table-schema-paging{display:block;margin-bottom:40px}"]
|
|
17077
16955
|
},] }
|
|
@@ -18254,7 +18132,7 @@
|
|
|
18254
18132
|
this.onSaved.emit();
|
|
18255
18133
|
return [3 /*break*/, 3];
|
|
18256
18134
|
case 2:
|
|
18257
|
-
this.handleInsertError(
|
|
18135
|
+
this.handleInsertError();
|
|
18258
18136
|
_a.label = 3;
|
|
18259
18137
|
case 3: return [2 /*return*/];
|
|
18260
18138
|
}
|
|
@@ -18274,7 +18152,7 @@
|
|
|
18274
18152
|
DataFormBase.prototype.getPromiseActionInsert = function () {
|
|
18275
18153
|
return this.setting.baseService.post(this.model.data, this.insertPlusUrl);
|
|
18276
18154
|
};
|
|
18277
|
-
DataFormBase.prototype.handleInsertError = function (
|
|
18155
|
+
DataFormBase.prototype.handleInsertError = function () {
|
|
18278
18156
|
};
|
|
18279
18157
|
DataFormBase.prototype.onUpdate = function () {
|
|
18280
18158
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -18295,7 +18173,7 @@
|
|
|
18295
18173
|
this.onSaved.emit();
|
|
18296
18174
|
return [3 /*break*/, 3];
|
|
18297
18175
|
case 2:
|
|
18298
|
-
this.handleUpdateError(
|
|
18176
|
+
this.handleUpdateError();
|
|
18299
18177
|
_a.label = 3;
|
|
18300
18178
|
case 3: return [2 /*return*/];
|
|
18301
18179
|
}
|
|
@@ -18312,7 +18190,7 @@
|
|
|
18312
18190
|
});
|
|
18313
18191
|
});
|
|
18314
18192
|
};
|
|
18315
|
-
DataFormBase.prototype.handleUpdateError = function (
|
|
18193
|
+
DataFormBase.prototype.handleUpdateError = function () {
|
|
18316
18194
|
};
|
|
18317
18195
|
DataFormBase.prototype.getPromiseActionUpdate = function () {
|
|
18318
18196
|
return this.setting.baseService.put(this.model.data.id.toString(), this.model.data, this.updatePlusUrl);
|
|
@@ -18944,49 +18822,27 @@
|
|
|
18944
18822
|
AutoCompletePickerComponent.prototype.buildFilterKeyword = function () {
|
|
18945
18823
|
var _this = this;
|
|
18946
18824
|
if (this.fieldSearchText.length == 1) {
|
|
18947
|
-
|
|
18948
|
-
this.getFilterOnSearch = function (value) { return _this.newFilterV4(_this.control.displayField, exports.Operator.contain, value.toString()); };
|
|
18949
|
-
}
|
|
18950
|
-
else {
|
|
18951
|
-
this.getFilterOnSearch = function (value) { return _this.newFilter(_this.control.displayField, exports.Operator.contain, value); };
|
|
18952
|
-
}
|
|
18825
|
+
this.getFilterOnSearch = function (value) { return _this.newFilter(_this.control.displayField, exports.Operator.contain, value); };
|
|
18953
18826
|
}
|
|
18954
18827
|
else {
|
|
18955
18828
|
this.getFilterOnSearch = function (value) {
|
|
18956
|
-
var e_1, _a
|
|
18829
|
+
var e_1, _a;
|
|
18957
18830
|
var result = new Filter({
|
|
18958
18831
|
logic: 'or',
|
|
18959
18832
|
filters: []
|
|
18960
18833
|
});
|
|
18961
|
-
|
|
18962
|
-
|
|
18963
|
-
|
|
18964
|
-
|
|
18965
|
-
result.filters.push(_this.newFilterV4(fieldSearch, exports.Operator.contain, value.toString()));
|
|
18966
|
-
}
|
|
18967
|
-
}
|
|
18968
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
18969
|
-
finally {
|
|
18970
|
-
try {
|
|
18971
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
18972
|
-
}
|
|
18973
|
-
finally { if (e_1) throw e_1.error; }
|
|
18834
|
+
try {
|
|
18835
|
+
for (var _b = __values(_this.fieldSearchText), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
18836
|
+
var fieldSearch = _c.value;
|
|
18837
|
+
result.filters.push(_this.newFilter(fieldSearch, exports.Operator.contain, value));
|
|
18974
18838
|
}
|
|
18975
18839
|
}
|
|
18976
|
-
|
|
18840
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
18841
|
+
finally {
|
|
18977
18842
|
try {
|
|
18978
|
-
|
|
18979
|
-
var fieldSearch = _f.value;
|
|
18980
|
-
result.filters.push(_this.newFilter(fieldSearch, exports.Operator.contain, value));
|
|
18981
|
-
}
|
|
18982
|
-
}
|
|
18983
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
18984
|
-
finally {
|
|
18985
|
-
try {
|
|
18986
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
18987
|
-
}
|
|
18988
|
-
finally { if (e_2) throw e_2.error; }
|
|
18843
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
18989
18844
|
}
|
|
18845
|
+
finally { if (e_1) throw e_1.error; }
|
|
18990
18846
|
}
|
|
18991
18847
|
return result;
|
|
18992
18848
|
};
|
|
@@ -19062,50 +18918,34 @@
|
|
|
19062
18918
|
return __generator(this, function (_a) {
|
|
19063
18919
|
switch (_a.label) {
|
|
19064
18920
|
case 0:
|
|
19065
|
-
if (!this.control.modifyInitSearchData) return [3 /*break*/, 2];
|
|
19066
|
-
return [4 /*yield*/, this.control.modifyInitSearchData(this)];
|
|
19067
|
-
case 1:
|
|
19068
|
-
_a.sent();
|
|
19069
|
-
_a.label = 2;
|
|
19070
|
-
case 2:
|
|
19071
18921
|
filters = [];
|
|
19072
18922
|
if (this.control.multiple) {
|
|
19073
18923
|
if (this.value && this.value.length > 0) {
|
|
19074
|
-
|
|
19075
|
-
filters.push(this.newFilterV4(this.control.valueField, exports.Operator.notIn, this.value.join(',')));
|
|
19076
|
-
}
|
|
19077
|
-
else {
|
|
19078
|
-
filters.push(this.newFilter(this.control.valueField, exports.Operator.notIn, this.value));
|
|
19079
|
-
}
|
|
18924
|
+
filters.push(this.newFilter(this.control.valueField, exports.Operator.notIn, this.value));
|
|
19080
18925
|
}
|
|
19081
18926
|
}
|
|
19082
18927
|
else {
|
|
19083
18928
|
if (this.value) {
|
|
19084
|
-
|
|
19085
|
-
filters.push(this.newFilterV4(this.control.valueField, exports.Operator.notEqual, this.value.toString()));
|
|
19086
|
-
}
|
|
19087
|
-
else {
|
|
19088
|
-
filters.push(this.newFilter(this.control.valueField, exports.Operator.notEqual, this.value));
|
|
19089
|
-
}
|
|
18929
|
+
filters.push(this.newFilter(this.control.valueField, exports.Operator.notEqual, this.value));
|
|
19090
18930
|
}
|
|
19091
18931
|
}
|
|
19092
18932
|
return [4 /*yield*/, appendDefaultFilter(filters, this.control.defaultFilters)];
|
|
19093
|
-
case
|
|
18933
|
+
case 1:
|
|
19094
18934
|
_a.sent();
|
|
19095
18935
|
if (this.keyword && this.keyword.length > 0) {
|
|
19096
18936
|
filters.push(this.getFilterOnSearch(this.keyword));
|
|
19097
18937
|
}
|
|
19098
|
-
if (!this.control.modifyFilter) return [3 /*break*/,
|
|
18938
|
+
if (!this.control.modifyFilter) return [3 /*break*/, 3];
|
|
19099
18939
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19100
|
-
case
|
|
18940
|
+
case 2:
|
|
19101
18941
|
allow = _a.sent();
|
|
19102
18942
|
if (allow === false) {
|
|
19103
18943
|
this.results = [];
|
|
19104
18944
|
return [2 /*return*/];
|
|
19105
18945
|
}
|
|
19106
|
-
_a.label =
|
|
19107
|
-
case
|
|
19108
|
-
case
|
|
18946
|
+
_a.label = 3;
|
|
18947
|
+
case 3: return [4 /*yield*/, this.control.baseService.getDataDropdownByFilter(filters, this.getDropdownOptions())];
|
|
18948
|
+
case 4:
|
|
19109
18949
|
dataSource = _a.sent();
|
|
19110
18950
|
this.fireEventAfterGetDataDropDown(dataSource);
|
|
19111
18951
|
this.reStructureDataSource(dataSource);
|
|
@@ -19286,17 +19126,9 @@
|
|
|
19286
19126
|
if (!this.control.multiple) return [3 /*break*/, 5];
|
|
19287
19127
|
dataSource = [];
|
|
19288
19128
|
if (!(this.value && this.value.length > 0)) return [3 /*break*/, 4];
|
|
19289
|
-
filters = [
|
|
19290
|
-
|
|
19291
|
-
|
|
19292
|
-
this.newFilterV4(this.control.valueField, exports.Operator.in, this.value.join(','))
|
|
19293
|
-
];
|
|
19294
|
-
}
|
|
19295
|
-
else {
|
|
19296
|
-
filters = [
|
|
19297
|
-
this.newFilter(this.control.valueField, exports.Operator.in, this.value)
|
|
19298
|
-
];
|
|
19299
|
-
}
|
|
19129
|
+
filters = [
|
|
19130
|
+
this.newFilter(this.control.valueField, exports.Operator.in, this.value)
|
|
19131
|
+
];
|
|
19300
19132
|
if (!this.control.modifyFilter) return [3 /*break*/, 2];
|
|
19301
19133
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19302
19134
|
case 1:
|
|
@@ -19320,17 +19152,9 @@
|
|
|
19320
19152
|
case 5:
|
|
19321
19153
|
dataSource = [];
|
|
19322
19154
|
if (!this.value) return [3 /*break*/, 9];
|
|
19323
|
-
filters = [
|
|
19324
|
-
|
|
19325
|
-
|
|
19326
|
-
this.newFilterV4(this.control.valueField, exports.Operator.equal, this.value.toString())
|
|
19327
|
-
];
|
|
19328
|
-
}
|
|
19329
|
-
else {
|
|
19330
|
-
filters = [
|
|
19331
|
-
this.newFilter(this.control.valueField, exports.Operator.equal, this.value)
|
|
19332
|
-
];
|
|
19333
|
-
}
|
|
19155
|
+
filters = [
|
|
19156
|
+
this.newFilter(this.control.valueField, exports.Operator.equal, this.value)
|
|
19157
|
+
];
|
|
19334
19158
|
if (!this.control.modifyFilter) return [3 /*break*/, 7];
|
|
19335
19159
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19336
19160
|
case 6:
|
|
@@ -19375,7 +19199,7 @@
|
|
|
19375
19199
|
}
|
|
19376
19200
|
};
|
|
19377
19201
|
AutoCompletePickerComponent.prototype.reStructureDataSource = function (sources) {
|
|
19378
|
-
var
|
|
19202
|
+
var e_2, _a;
|
|
19379
19203
|
if (sources != null && sources.length > 0) {
|
|
19380
19204
|
var arr = [];
|
|
19381
19205
|
try {
|
|
@@ -19385,12 +19209,12 @@
|
|
|
19385
19209
|
arr.push(item);
|
|
19386
19210
|
}
|
|
19387
19211
|
}
|
|
19388
|
-
catch (
|
|
19212
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
19389
19213
|
finally {
|
|
19390
19214
|
try {
|
|
19391
19215
|
if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);
|
|
19392
19216
|
}
|
|
19393
|
-
finally { if (
|
|
19217
|
+
finally { if (e_2) throw e_2.error; }
|
|
19394
19218
|
}
|
|
19395
19219
|
this.dataSource = arr;
|
|
19396
19220
|
}
|
|
@@ -19420,12 +19244,7 @@
|
|
|
19420
19244
|
if (!this.control.multiple) return [3 /*break*/, 6];
|
|
19421
19245
|
if (!(obj != null && obj.length > 0)) return [3 /*break*/, 4];
|
|
19422
19246
|
filters = [];
|
|
19423
|
-
|
|
19424
|
-
filters.push(this.newFilterV4(this.control.valueField, exports.Operator.in, obj.join(',')));
|
|
19425
|
-
}
|
|
19426
|
-
else {
|
|
19427
|
-
filters.push(this.newFilter(this.control.valueField, exports.Operator.in, obj));
|
|
19428
|
-
}
|
|
19247
|
+
filters.push(this.newFilter(this.control.valueField, exports.Operator.in, obj));
|
|
19429
19248
|
if (!this.control.modifyFilter) return [3 /*break*/, 2];
|
|
19430
19249
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19431
19250
|
case 1:
|
|
@@ -19450,17 +19269,9 @@
|
|
|
19450
19269
|
case 5: return [3 /*break*/, 10];
|
|
19451
19270
|
case 6:
|
|
19452
19271
|
if (!(obj != null)) return [3 /*break*/, 9];
|
|
19453
|
-
filters = [
|
|
19454
|
-
|
|
19455
|
-
|
|
19456
|
-
this.newFilterV4(this.control.valueField, exports.Operator.equal, obj.toString())
|
|
19457
|
-
];
|
|
19458
|
-
}
|
|
19459
|
-
else {
|
|
19460
|
-
filters = [
|
|
19461
|
-
this.newFilter(this.control.valueField, exports.Operator.equal, obj)
|
|
19462
|
-
];
|
|
19463
|
-
}
|
|
19272
|
+
filters = [
|
|
19273
|
+
this.newFilter(this.control.valueField, exports.Operator.equal, obj)
|
|
19274
|
+
];
|
|
19464
19275
|
if (!this.control.modifyFilter) return [3 /*break*/, 8];
|
|
19465
19276
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19466
19277
|
case 7:
|
|
@@ -19536,7 +19347,6 @@
|
|
|
19536
19347
|
AutoCompletePickerComponent.propDecorators = {
|
|
19537
19348
|
control: [{ type: i0.Input }],
|
|
19538
19349
|
disabled: [{ type: i0.Input }],
|
|
19539
|
-
parentPath: [{ type: i0.Input }],
|
|
19540
19350
|
popupSize: [{ type: i0.Input }],
|
|
19541
19351
|
onSelect: [{ type: i0.Output }],
|
|
19542
19352
|
onUnSelect: [{ type: i0.Output }],
|
|
@@ -19655,6 +19465,20 @@
|
|
|
19655
19465
|
FileObjectService.prototype.getScanFileUploadEndpoint = function (correlationId) {
|
|
19656
19466
|
return this.serviceCode + "/CreateScannedFile/" + correlationId;
|
|
19657
19467
|
};
|
|
19468
|
+
FileObjectService.prototype.isTypeFileKySo = function (fileName) {
|
|
19469
|
+
var fileExtension = this.getFileExtension(fileName);
|
|
19470
|
+
if (fileExtension) {
|
|
19471
|
+
fileExtension = fileExtension.toLowerCase();
|
|
19472
|
+
if (fileExtension.indexOf('.') > -1) {
|
|
19473
|
+
var arr = fileExtension.split('.');
|
|
19474
|
+
fileExtension = arr[arr.length - 1];
|
|
19475
|
+
}
|
|
19476
|
+
if ((/(pdf|doc|docx|xls|xlsm|xlsx)$/i).test(fileExtension)) {
|
|
19477
|
+
return true;
|
|
19478
|
+
}
|
|
19479
|
+
}
|
|
19480
|
+
return false;
|
|
19481
|
+
};
|
|
19658
19482
|
return FileObjectService;
|
|
19659
19483
|
}(BaseService));
|
|
19660
19484
|
FileObjectService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileObjectService_Factory() { return new FileObjectService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: FileObjectService, providedIn: "root" });
|
|
@@ -20742,16 +20566,13 @@
|
|
|
20742
20566
|
});
|
|
20743
20567
|
});
|
|
20744
20568
|
};
|
|
20745
|
-
MenuService.prototype.renderMenuByAppCode = function (
|
|
20569
|
+
MenuService.prototype.renderMenuByAppCode = function (appCode) {
|
|
20746
20570
|
return __awaiter(this, void 0, void 0, function () {
|
|
20747
20571
|
var menuUrl;
|
|
20748
20572
|
var _this = this;
|
|
20749
20573
|
return __generator(this, function (_a) {
|
|
20750
20574
|
this._menuItems = [];
|
|
20751
20575
|
menuUrl = "assets/menus/" + appCode.toLocaleLowerCase() + ".json";
|
|
20752
|
-
if (scopeName) {
|
|
20753
|
-
menuUrl = "assets/menus/" + scopeName.toLocaleLowerCase() + "/" + appCode.toLocaleLowerCase() + ".json";
|
|
20754
|
-
}
|
|
20755
20576
|
fetch(menuUrl).then(function (rs) { return __awaiter(_this, void 0, void 0, function () {
|
|
20756
20577
|
var menu, _a, _b;
|
|
20757
20578
|
return __generator(this, function (_c) {
|
|
@@ -20905,7 +20726,7 @@
|
|
|
20905
20726
|
// Nếu là môi trường triển khai thì cộng thêm tiền tố phân hệ vào router link để có thể chuột phải mở tab mới
|
|
20906
20727
|
funcSetNewTabLink = function (link) { return "/" + appCodeLowerCase + link; };
|
|
20907
20728
|
}
|
|
20908
|
-
this._menuService.renderMenuByAppCode(
|
|
20729
|
+
this._menuService.renderMenuByAppCode(appCode);
|
|
20909
20730
|
this.model = this._menuService.getMenuItems();
|
|
20910
20731
|
this._router.events.pipe(operators.filter(function (event) { return event instanceof i3.NavigationEnd; }))
|
|
20911
20732
|
.subscribe(function (event) {
|
|
@@ -23466,7 +23287,7 @@
|
|
|
23466
23287
|
};
|
|
23467
23288
|
|
|
23468
23289
|
var CommonAppComponentComponent = /** @class */ (function () {
|
|
23469
|
-
function CommonAppComponentComponent(_globalService, _commonService, renderer, translate, _oauthService, _authenService, _userService, _router, _title, _signalRService, _storageUpdatedService, _customRouteService, _applicationContext, _componentContextService, _activatedRoute, _deviceDetectorService, _cd, _tnClientService, _coreConfigService, _notifierService, _entityMetadataService, _moduleConfigService, _translateService, _messageService, _confirmService, _menuService, _primengConfig, _storageService
|
|
23290
|
+
function CommonAppComponentComponent(_globalService, _commonService, renderer, translate, _oauthService, _authenService, _userService, _router, _title, _signalRService, _storageUpdatedService, _customRouteService, _applicationContext, _componentContextService, _activatedRoute, _deviceDetectorService, _cd, _tnClientService, _coreConfigService, _notifierService, _entityMetadataService, _moduleConfigService, _translateService, _messageService, _confirmService, _menuService, _primengConfig, _storageService) {
|
|
23470
23291
|
var _this = this;
|
|
23471
23292
|
this._globalService = _globalService;
|
|
23472
23293
|
this._commonService = _commonService;
|
|
@@ -23496,7 +23317,6 @@
|
|
|
23496
23317
|
this._menuService = _menuService;
|
|
23497
23318
|
this._primengConfig = _primengConfig;
|
|
23498
23319
|
this._storageService = _storageService;
|
|
23499
|
-
this._permissionService = _permissionService;
|
|
23500
23320
|
this.showQuickNote = true;
|
|
23501
23321
|
this.allowAnonymous = false;
|
|
23502
23322
|
this._unsubscribeAll = new rxjs.Subject();
|
|
@@ -23650,25 +23470,6 @@
|
|
|
23650
23470
|
root.data.allowAnonymous = this.allowAnonymous;
|
|
23651
23471
|
// get current User
|
|
23652
23472
|
this._userService.populateCurrentUser();
|
|
23653
|
-
this._componentContextService.subscribe(ComCtxConstants.ROOT.NEED_CLEAR_PERMISSION_CACHE, function () { return __awaiter(_this, void 0, void 0, function () {
|
|
23654
|
-
var clear;
|
|
23655
|
-
return __generator(this, function (_a) {
|
|
23656
|
-
switch (_a.label) {
|
|
23657
|
-
case 0:
|
|
23658
|
-
if (!(this.environment.authenticationSettings.coreVersion == 'v4')) return [3 /*break*/, 2];
|
|
23659
|
-
return [4 /*yield*/, this.clearPermissionCacheByModule()];
|
|
23660
|
-
case 1:
|
|
23661
|
-
clear = _a.sent();
|
|
23662
|
-
if (!clear.success) {
|
|
23663
|
-
this._notifierService.showWarning('Có vấn đề trong lúc clear cache quyền');
|
|
23664
|
-
}
|
|
23665
|
-
_a.label = 2;
|
|
23666
|
-
case 2:
|
|
23667
|
-
this._applicationContext.getRootContext().fireReplayEvent(ComCtxConstants.ROOT.USER_LOADED);
|
|
23668
|
-
return [2 /*return*/];
|
|
23669
|
-
}
|
|
23670
|
-
});
|
|
23671
|
-
}); });
|
|
23672
23473
|
this._componentContextService.subscribe(ComCtxConstants.ROOT.KEY_DOWN_ARROWLEFT, function (e) {
|
|
23673
23474
|
if (document.activeElement === _this.cancelButton.nativeElement) {
|
|
23674
23475
|
_this.okButton.nativeElement.focus();
|
|
@@ -24184,17 +23985,6 @@
|
|
|
24184
23985
|
}
|
|
24185
23986
|
}
|
|
24186
23987
|
};
|
|
24187
|
-
CommonAppComponentComponent.prototype.clearPermissionCacheByModule = function () {
|
|
24188
|
-
var appSwitcher = this._moduleConfigService.getConfig().environment.appMetadata.appSwitcher;
|
|
24189
|
-
if (!appSwitcher || !appSwitcher.length) {
|
|
24190
|
-
appSwitcher = [];
|
|
24191
|
-
}
|
|
24192
|
-
var lstModule = appSwitcher.map(function (x) { return x.code; });
|
|
24193
|
-
if (!lstModule) {
|
|
24194
|
-
lstModule = [];
|
|
24195
|
-
}
|
|
24196
|
-
return this._permissionService.clearPermissionCache(lstModule);
|
|
24197
|
-
};
|
|
24198
23988
|
return CommonAppComponentComponent;
|
|
24199
23989
|
}());
|
|
24200
23990
|
CommonAppComponentComponent.decorators = [
|
|
@@ -24233,8 +24023,7 @@
|
|
|
24233
24023
|
{ type: i1.ConfirmationService },
|
|
24234
24024
|
{ type: MenuService },
|
|
24235
24025
|
{ type: i1.PrimeNGConfig },
|
|
24236
|
-
{ type: StorageService }
|
|
24237
|
-
{ type: PermissionService }
|
|
24026
|
+
{ type: StorageService }
|
|
24238
24027
|
]; };
|
|
24239
24028
|
CommonAppComponentComponent.propDecorators = {
|
|
24240
24029
|
okButton: [{ type: i0.ViewChild, args: ['okButton',] }],
|
|
@@ -26391,8 +26180,6 @@
|
|
|
26391
26180
|
});
|
|
26392
26181
|
_this.sourceIcon = {};
|
|
26393
26182
|
_this.stopCalculatingFunctionColumnWidth = false;
|
|
26394
|
-
_this.FileUploadMode = exports.FileUploadMode;
|
|
26395
|
-
_this.eventType = exports.EventType;
|
|
26396
26183
|
_this._unSubscribeAll = new rxjs.Subject();
|
|
26397
26184
|
_this.handleSelectRow = function (evt, data) {
|
|
26398
26185
|
if (_this.setting.hasCustomHandleClickRow) {
|
|
@@ -26575,94 +26362,6 @@
|
|
|
26575
26362
|
_this.setting.pageSetting.page = 1;
|
|
26576
26363
|
_this.getData();
|
|
26577
26364
|
};
|
|
26578
|
-
_this.handleFieldValueChange = function (control, event, rowData, type) { return __awaiter(_this, void 0, void 0, function () {
|
|
26579
|
-
var eventData, _f, _a_1, _b_1, _c_1, _d_1, _e_1;
|
|
26580
|
-
return __generator(this, function (_g) {
|
|
26581
|
-
switch (_g.label) {
|
|
26582
|
-
case 0:
|
|
26583
|
-
eventData = {
|
|
26584
|
-
event: event,
|
|
26585
|
-
rowData: rowData,
|
|
26586
|
-
type: type
|
|
26587
|
-
};
|
|
26588
|
-
_f = type;
|
|
26589
|
-
switch (_f) {
|
|
26590
|
-
case exports.EventType.CHANGE: return [3 /*break*/, 1];
|
|
26591
|
-
case exports.EventType.INIT: return [3 /*break*/, 6];
|
|
26592
|
-
case exports.EventType.DELETED: return [3 /*break*/, 11];
|
|
26593
|
-
case exports.EventType.SELECT: return [3 /*break*/, 16];
|
|
26594
|
-
case exports.EventType.UPLOADED: return [3 /*break*/, 21];
|
|
26595
|
-
}
|
|
26596
|
-
return [3 /*break*/, 26];
|
|
26597
|
-
case 1:
|
|
26598
|
-
if (!control.onChanged) return [3 /*break*/, 5];
|
|
26599
|
-
_g.label = 2;
|
|
26600
|
-
case 2:
|
|
26601
|
-
_g.trys.push([2, 4, , 5]);
|
|
26602
|
-
return [4 /*yield*/, control.onChanged(eventData)];
|
|
26603
|
-
case 3:
|
|
26604
|
-
_g.sent();
|
|
26605
|
-
return [3 /*break*/, 5];
|
|
26606
|
-
case 4:
|
|
26607
|
-
_a_1 = _g.sent();
|
|
26608
|
-
return [3 /*break*/, 5];
|
|
26609
|
-
case 5: return [3 /*break*/, 26];
|
|
26610
|
-
case 6:
|
|
26611
|
-
if (!control.onInit) return [3 /*break*/, 10];
|
|
26612
|
-
_g.label = 7;
|
|
26613
|
-
case 7:
|
|
26614
|
-
_g.trys.push([7, 9, , 10]);
|
|
26615
|
-
return [4 /*yield*/, control.onInit(eventData)];
|
|
26616
|
-
case 8:
|
|
26617
|
-
_g.sent();
|
|
26618
|
-
return [3 /*break*/, 10];
|
|
26619
|
-
case 9:
|
|
26620
|
-
_b_1 = _g.sent();
|
|
26621
|
-
return [3 /*break*/, 10];
|
|
26622
|
-
case 10: return [3 /*break*/, 26];
|
|
26623
|
-
case 11:
|
|
26624
|
-
if (!control.onRemove) return [3 /*break*/, 15];
|
|
26625
|
-
_g.label = 12;
|
|
26626
|
-
case 12:
|
|
26627
|
-
_g.trys.push([12, 14, , 15]);
|
|
26628
|
-
return [4 /*yield*/, control.onRemove(eventData)];
|
|
26629
|
-
case 13:
|
|
26630
|
-
_g.sent();
|
|
26631
|
-
return [3 /*break*/, 15];
|
|
26632
|
-
case 14:
|
|
26633
|
-
_c_1 = _g.sent();
|
|
26634
|
-
return [3 /*break*/, 15];
|
|
26635
|
-
case 15: return [3 /*break*/, 26];
|
|
26636
|
-
case 16:
|
|
26637
|
-
if (!control.onSelected) return [3 /*break*/, 20];
|
|
26638
|
-
_g.label = 17;
|
|
26639
|
-
case 17:
|
|
26640
|
-
_g.trys.push([17, 19, , 20]);
|
|
26641
|
-
return [4 /*yield*/, control.onSelected(eventData)];
|
|
26642
|
-
case 18:
|
|
26643
|
-
_g.sent();
|
|
26644
|
-
return [3 /*break*/, 20];
|
|
26645
|
-
case 19:
|
|
26646
|
-
_d_1 = _g.sent();
|
|
26647
|
-
return [3 /*break*/, 20];
|
|
26648
|
-
case 20: return [3 /*break*/, 26];
|
|
26649
|
-
case 21:
|
|
26650
|
-
if (!control.onUploaded) return [3 /*break*/, 25];
|
|
26651
|
-
_g.label = 22;
|
|
26652
|
-
case 22:
|
|
26653
|
-
_g.trys.push([22, 24, , 25]);
|
|
26654
|
-
return [4 /*yield*/, control.onUploaded(eventData)];
|
|
26655
|
-
case 23:
|
|
26656
|
-
_g.sent();
|
|
26657
|
-
return [3 /*break*/, 25];
|
|
26658
|
-
case 24:
|
|
26659
|
-
_e_1 = _g.sent();
|
|
26660
|
-
return [3 /*break*/, 25];
|
|
26661
|
-
case 25: return [3 /*break*/, 26];
|
|
26662
|
-
case 26: return [2 /*return*/];
|
|
26663
|
-
}
|
|
26664
|
-
});
|
|
26665
|
-
}); };
|
|
26666
26365
|
_this._activatedRoute = _this._injector.get(i3.ActivatedRoute);
|
|
26667
26366
|
_this._router = _this._injector.get(i3.Router);
|
|
26668
26367
|
_this._customRouterService = _this._injector.get(CustomRouterService);
|
|
@@ -26970,7 +26669,7 @@
|
|
|
26970
26669
|
});
|
|
26971
26670
|
};
|
|
26972
26671
|
CrudListComponent.prototype.formatColumns = function (cols) {
|
|
26973
|
-
var e_1,
|
|
26672
|
+
var e_1, _b;
|
|
26974
26673
|
try {
|
|
26975
26674
|
for (var cols_1 = __values(cols), cols_1_1 = cols_1.next(); !cols_1_1.done; cols_1_1 = cols_1.next()) {
|
|
26976
26675
|
var col = cols_1_1.value;
|
|
@@ -26982,7 +26681,7 @@
|
|
|
26982
26681
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
26983
26682
|
finally {
|
|
26984
26683
|
try {
|
|
26985
|
-
if (cols_1_1 && !cols_1_1.done && (
|
|
26684
|
+
if (cols_1_1 && !cols_1_1.done && (_b = cols_1.return)) _b.call(cols_1);
|
|
26986
26685
|
}
|
|
26987
26686
|
finally { if (e_1) throw e_1.error; }
|
|
26988
26687
|
}
|
|
@@ -27181,7 +26880,7 @@
|
|
|
27181
26880
|
CrudListComponent.prototype.validatePermission = function (rowData) {
|
|
27182
26881
|
return __awaiter(this, void 0, void 0, function () {
|
|
27183
26882
|
var itemStatus, hasPermission, userData, userId, userIdUpper, userGroupIds, userOrgIds, managerTypes, userIdLastUpper_1, donViIdLastUpper_1;
|
|
27184
|
-
return __generator(this, function (
|
|
26883
|
+
return __generator(this, function (_b) {
|
|
27185
26884
|
this.currentItem = rowData;
|
|
27186
26885
|
itemStatus = this.setting.workflowSetting.statuses.find(function (p) { return p.trangThaiContainer.ma == rowData.currentStateCode; });
|
|
27187
26886
|
hasPermission = false;
|
|
@@ -27248,12 +26947,12 @@
|
|
|
27248
26947
|
};
|
|
27249
26948
|
CrudListComponent.prototype.showActionWorkflow = function (evt, rowData) {
|
|
27250
26949
|
return __awaiter(this, void 0, void 0, function () {
|
|
27251
|
-
var
|
|
27252
|
-
return __generator(this, function (
|
|
27253
|
-
switch (
|
|
26950
|
+
var _b, buttonContexts, hasPermission;
|
|
26951
|
+
return __generator(this, function (_c) {
|
|
26952
|
+
switch (_c.label) {
|
|
27254
26953
|
case 0: return [4 /*yield*/, this.getActionWorkflow(rowData)];
|
|
27255
26954
|
case 1:
|
|
27256
|
-
|
|
26955
|
+
_b = __read.apply(void 0, [_c.sent(), 2]), buttonContexts = _b[0], hasPermission = _b[1];
|
|
27257
26956
|
this.buttonContexts = buttonContexts;
|
|
27258
26957
|
rowData.__hasPermission = hasPermission;
|
|
27259
26958
|
rowData.__actions = this.buttonContexts;
|
|
@@ -27267,11 +26966,11 @@
|
|
|
27267
26966
|
return __awaiter(this, void 0, void 0, function () {
|
|
27268
26967
|
var hasPermission, buttonContexts, statusAction, actions;
|
|
27269
26968
|
var _this = this;
|
|
27270
|
-
return __generator(this, function (
|
|
27271
|
-
switch (
|
|
26969
|
+
return __generator(this, function (_b) {
|
|
26970
|
+
switch (_b.label) {
|
|
27272
26971
|
case 0: return [4 /*yield*/, this.validatePermission(rowData)];
|
|
27273
26972
|
case 1:
|
|
27274
|
-
hasPermission =
|
|
26973
|
+
hasPermission = _b.sent();
|
|
27275
26974
|
buttonContexts = [];
|
|
27276
26975
|
if (!hasPermission) {
|
|
27277
26976
|
buttonContexts = [];
|
|
@@ -27337,8 +27036,8 @@
|
|
|
27337
27036
|
return __awaiter(this, void 0, void 0, function () {
|
|
27338
27037
|
var dataProcess_1, validateWf;
|
|
27339
27038
|
var _this = this;
|
|
27340
|
-
return __generator(this, function (
|
|
27341
|
-
switch (
|
|
27039
|
+
return __generator(this, function (_b) {
|
|
27040
|
+
switch (_b.label) {
|
|
27342
27041
|
case 0:
|
|
27343
27042
|
if (!(workflowAction.actionOptions && !workflowAction.actionOptions.openDialog)) return [3 /*break*/, 2];
|
|
27344
27043
|
dataProcess_1 = {
|
|
@@ -27348,7 +27047,7 @@
|
|
|
27348
27047
|
};
|
|
27349
27048
|
return [4 /*yield*/, this.setting.baseService.validateProcessWorkflow(this.currentItem.id, workflowAction.ma, dataProcess_1)];
|
|
27350
27049
|
case 1:
|
|
27351
|
-
validateWf =
|
|
27050
|
+
validateWf = _b.sent();
|
|
27352
27051
|
this.handleResponse(validateWf, '', function (f) {
|
|
27353
27052
|
_this.setting.baseService.processWorkflow(_this.currentItem.id, workflowAction.ma, dataProcess_1)
|
|
27354
27053
|
.then(function (res) { return _this.handleResponse(res, workflowAction.ten + " th\u00E0nh c\u00F4ng", function (f) {
|
|
@@ -27372,7 +27071,7 @@
|
|
|
27372
27071
|
this.actionWorkflow = workflowAction;
|
|
27373
27072
|
this.headerWorkflow = workflowAction.ten;
|
|
27374
27073
|
this.showFormWorkflow = true;
|
|
27375
|
-
|
|
27074
|
+
_b.label = 3;
|
|
27376
27075
|
case 3: return [2 /*return*/];
|
|
27377
27076
|
}
|
|
27378
27077
|
});
|
|
@@ -27475,7 +27174,7 @@
|
|
|
27475
27174
|
this.onAdd.emit();
|
|
27476
27175
|
};
|
|
27477
27176
|
CrudListComponent.prototype.xuatCacMucDaChon_backup = function () {
|
|
27478
|
-
var e_2,
|
|
27177
|
+
var e_2, _b;
|
|
27479
27178
|
if (this._groupField) {
|
|
27480
27179
|
this._notifierService.showWarning('Giao diện hiện tại chưa hỗ trợ xuất excel');
|
|
27481
27180
|
return;
|
|
@@ -27517,7 +27216,7 @@
|
|
|
27517
27216
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
27518
27217
|
finally {
|
|
27519
27218
|
try {
|
|
27520
|
-
if (rowData_1_1 && !rowData_1_1.done && (
|
|
27219
|
+
if (rowData_1_1 && !rowData_1_1.done && (_b = rowData_1.return)) _b.call(rowData_1);
|
|
27521
27220
|
}
|
|
27522
27221
|
finally { if (e_2) throw e_2.error; }
|
|
27523
27222
|
}
|
|
@@ -27660,8 +27359,8 @@
|
|
|
27660
27359
|
CrudListComponent.prototype.checkHasPermissionInLastStatus = function (rowData) {
|
|
27661
27360
|
return __awaiter(this, void 0, void 0, function () {
|
|
27662
27361
|
var statusKetThuc;
|
|
27663
|
-
return __generator(this, function (
|
|
27664
|
-
switch (
|
|
27362
|
+
return __generator(this, function (_b) {
|
|
27363
|
+
switch (_b.label) {
|
|
27665
27364
|
case 0:
|
|
27666
27365
|
statusKetThuc = this.setting.workflowSetting.statuses.find(function (q) { return q.type == exports.EnumWFNhomTrangThai.KET_THUC; });
|
|
27667
27366
|
if (statusKetThuc == null) {
|
|
@@ -27674,46 +27373,46 @@
|
|
|
27674
27373
|
return [4 /*yield*/, this.validatePermission(rowData)];
|
|
27675
27374
|
case 1:
|
|
27676
27375
|
// Kiểm tra permission
|
|
27677
|
-
return [2 /*return*/,
|
|
27376
|
+
return [2 /*return*/, _b.sent()];
|
|
27678
27377
|
}
|
|
27679
27378
|
});
|
|
27680
27379
|
});
|
|
27681
27380
|
};
|
|
27682
27381
|
CrudListComponent.prototype.showContextMenu = function (evt, rowData) {
|
|
27683
27382
|
return __awaiter(this, void 0, void 0, function () {
|
|
27684
|
-
var
|
|
27685
|
-
return __generator(this, function (
|
|
27686
|
-
switch (
|
|
27383
|
+
var _b, _c, _d, _e;
|
|
27384
|
+
return __generator(this, function (_f) {
|
|
27385
|
+
switch (_f.label) {
|
|
27687
27386
|
case 0:
|
|
27688
27387
|
this.rowDataCurrent = rowData;
|
|
27689
|
-
|
|
27388
|
+
_b = this;
|
|
27690
27389
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
27691
27390
|
case 1:
|
|
27692
|
-
|
|
27391
|
+
_b.buttonContexts = _f.sent();
|
|
27693
27392
|
if (!(!this.setting.hiddenTrinhKy && !rowData.__hiddenTrinhKy)) return [3 /*break*/, 7];
|
|
27694
|
-
|
|
27695
|
-
if (!
|
|
27393
|
+
_d = this.setting.checkReadyToTrinhKy();
|
|
27394
|
+
if (!_d) return [3 /*break*/, 3];
|
|
27696
27395
|
return [4 /*yield*/, this.setting.checkAllowTrinhKy(rowData)];
|
|
27697
27396
|
case 2:
|
|
27698
|
-
|
|
27699
|
-
|
|
27397
|
+
_d = (_f.sent());
|
|
27398
|
+
_f.label = 3;
|
|
27700
27399
|
case 3:
|
|
27701
|
-
|
|
27702
|
-
if (!
|
|
27703
|
-
|
|
27704
|
-
if (
|
|
27400
|
+
_c = _d;
|
|
27401
|
+
if (!_c) return [3 /*break*/, 6];
|
|
27402
|
+
_e = !this.setting.checkPermisionTrinhKy;
|
|
27403
|
+
if (_e) return [3 /*break*/, 5];
|
|
27705
27404
|
return [4 /*yield*/, this.checkHasPermissionInLastStatus(rowData)];
|
|
27706
27405
|
case 4:
|
|
27707
|
-
|
|
27708
|
-
|
|
27406
|
+
_e = (_f.sent());
|
|
27407
|
+
_f.label = 5;
|
|
27709
27408
|
case 5:
|
|
27710
|
-
|
|
27711
|
-
|
|
27409
|
+
_c = (_e);
|
|
27410
|
+
_f.label = 6;
|
|
27712
27411
|
case 6:
|
|
27713
|
-
if (
|
|
27412
|
+
if (_c) {
|
|
27714
27413
|
this.buttonContexts.unshift({ label: this.setting.getLabelButtonTrinhKy(rowData), icon: 'pi pi-send', command: this.trinhKy.bind(this) });
|
|
27715
27414
|
}
|
|
27716
|
-
|
|
27415
|
+
_f.label = 7;
|
|
27717
27416
|
case 7:
|
|
27718
27417
|
if (this.buttonContexts.length > 0) {
|
|
27719
27418
|
this._showContextMenu(evt);
|
|
@@ -28290,7 +27989,7 @@
|
|
|
28290
27989
|
return col.dataType == exports.DataType.datetime || col.dataType == exports.DataType.date || col.dataType == exports.DataType.boolean || col.dataType == exports.DataType.enum;
|
|
28291
27990
|
};
|
|
28292
27991
|
CrudListComponent.prototype.alignRightColumn = function (col) {
|
|
28293
|
-
return col.dataType == exports.DataType.int || col.dataType == exports.DataType.decimal
|
|
27992
|
+
return col.dataType == exports.DataType.int || col.dataType == exports.DataType.decimal;
|
|
28294
27993
|
};
|
|
28295
27994
|
CrudListComponent.prototype.ngOnDestroy = function () {
|
|
28296
27995
|
if (!this.disableKeypressControl) {
|
|
@@ -28306,10 +28005,10 @@
|
|
|
28306
28005
|
clearTimeout(this.timeout);
|
|
28307
28006
|
};
|
|
28308
28007
|
CrudListComponent.prototype.disableMultipleDelete = function () {
|
|
28309
|
-
var e_3,
|
|
28008
|
+
var e_3, _b;
|
|
28310
28009
|
try {
|
|
28311
|
-
for (var
|
|
28312
|
-
var item =
|
|
28010
|
+
for (var _c = __values(this.model.selectedItems), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
28011
|
+
var item = _d.value;
|
|
28313
28012
|
if (this.disableDelete(item)) {
|
|
28314
28013
|
return true;
|
|
28315
28014
|
}
|
|
@@ -28318,7 +28017,7 @@
|
|
|
28318
28017
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
28319
28018
|
finally {
|
|
28320
28019
|
try {
|
|
28321
|
-
if (
|
|
28020
|
+
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
28322
28021
|
}
|
|
28323
28022
|
finally { if (e_3) throw e_3.error; }
|
|
28324
28023
|
}
|
|
@@ -28388,11 +28087,11 @@
|
|
|
28388
28087
|
};
|
|
28389
28088
|
CrudListComponent.prototype.processBaseData = function () {
|
|
28390
28089
|
return __awaiter(this, void 0, void 0, function () {
|
|
28391
|
-
return __generator(this, function (
|
|
28392
|
-
switch (
|
|
28090
|
+
return __generator(this, function (_b) {
|
|
28091
|
+
switch (_b.label) {
|
|
28393
28092
|
case 0: return [4 /*yield*/, this.preProcessData(this.model.dataSource)];
|
|
28394
28093
|
case 1:
|
|
28395
|
-
|
|
28094
|
+
_b.sent();
|
|
28396
28095
|
return [2 /*return*/];
|
|
28397
28096
|
}
|
|
28398
28097
|
});
|
|
@@ -28401,14 +28100,14 @@
|
|
|
28401
28100
|
CrudListComponent.prototype.preProcessData = function (dataSource) {
|
|
28402
28101
|
return __awaiter(this, void 0, void 0, function () {
|
|
28403
28102
|
var colHasPipe, _loop_3, this_2, colHasPipe_1, colHasPipe_1_1, col;
|
|
28404
|
-
var e_4,
|
|
28405
|
-
return __generator(this, function (
|
|
28103
|
+
var e_4, _b;
|
|
28104
|
+
return __generator(this, function (_c) {
|
|
28406
28105
|
colHasPipe = this.setting.cols.filter(function (x) { return x.pipe; });
|
|
28407
28106
|
_loop_3 = function (col) {
|
|
28408
|
-
var e_5,
|
|
28107
|
+
var e_5, _b;
|
|
28409
28108
|
var _loop_4 = function (item) {
|
|
28410
28109
|
this_2.transform(col.pipe, col.asyncPipe, item[col.field]).then(function (rs) {
|
|
28411
|
-
item["pipe__" + col.field] = rs;
|
|
28110
|
+
item["pipe__" + col.field + " "] = rs;
|
|
28412
28111
|
});
|
|
28413
28112
|
};
|
|
28414
28113
|
try {
|
|
@@ -28420,7 +28119,7 @@
|
|
|
28420
28119
|
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
28421
28120
|
finally {
|
|
28422
28121
|
try {
|
|
28423
|
-
if (dataSource_1_1 && !dataSource_1_1.done && (
|
|
28122
|
+
if (dataSource_1_1 && !dataSource_1_1.done && (_b = dataSource_1.return)) _b.call(dataSource_1);
|
|
28424
28123
|
}
|
|
28425
28124
|
finally { if (e_5) throw e_5.error; }
|
|
28426
28125
|
}
|
|
@@ -28435,7 +28134,7 @@
|
|
|
28435
28134
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
28436
28135
|
finally {
|
|
28437
28136
|
try {
|
|
28438
|
-
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (
|
|
28137
|
+
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (_b = colHasPipe_1.return)) _b.call(colHasPipe_1);
|
|
28439
28138
|
}
|
|
28440
28139
|
finally { if (e_4) throw e_4.error; }
|
|
28441
28140
|
}
|
|
@@ -28446,8 +28145,8 @@
|
|
|
28446
28145
|
CrudListComponent.prototype.transform = function (pipe, asyncPipe, value) {
|
|
28447
28146
|
return __awaiter(this, void 0, void 0, function () {
|
|
28448
28147
|
var val, val;
|
|
28449
|
-
return __generator(this, function (
|
|
28450
|
-
switch (
|
|
28148
|
+
return __generator(this, function (_b) {
|
|
28149
|
+
switch (_b.label) {
|
|
28451
28150
|
case 0:
|
|
28452
28151
|
if (this.cachedTransforms[value]) {
|
|
28453
28152
|
return [2 /*return*/, this.cachedTransforms[value]];
|
|
@@ -28455,7 +28154,7 @@
|
|
|
28455
28154
|
if (!asyncPipe) return [3 /*break*/, 2];
|
|
28456
28155
|
return [4 /*yield*/, pipe.transform(value)];
|
|
28457
28156
|
case 1:
|
|
28458
|
-
val =
|
|
28157
|
+
val = _b.sent();
|
|
28459
28158
|
this.cachedTransforms[value] = val;
|
|
28460
28159
|
return [2 /*return*/, val];
|
|
28461
28160
|
case 2:
|
|
@@ -28549,7 +28248,7 @@
|
|
|
28549
28248
|
return {};
|
|
28550
28249
|
};
|
|
28551
28250
|
CrudListComponent.prototype.getMinimizeData = function (model) {
|
|
28552
|
-
var e_6,
|
|
28251
|
+
var e_6, _b;
|
|
28553
28252
|
if (isLiteralObject(model)) {
|
|
28554
28253
|
if (model._dropdownvalue != null && model._dropdownvalue !== '') {
|
|
28555
28254
|
return model[model._dropdownvalue];
|
|
@@ -28575,7 +28274,7 @@
|
|
|
28575
28274
|
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
28576
28275
|
finally {
|
|
28577
28276
|
try {
|
|
28578
|
-
if (model_1_1 && !model_1_1.done && (
|
|
28277
|
+
if (model_1_1 && !model_1_1.done && (_b = model_1.return)) _b.call(model_1);
|
|
28579
28278
|
}
|
|
28580
28279
|
finally { if (e_6) throw e_6.error; }
|
|
28581
28280
|
}
|
|
@@ -28723,7 +28422,7 @@
|
|
|
28723
28422
|
};
|
|
28724
28423
|
CrudListComponent.prototype.showSettingsPermission = function () {
|
|
28725
28424
|
return __awaiter(this, void 0, void 0, function () {
|
|
28726
|
-
return __generator(this, function (
|
|
28425
|
+
return __generator(this, function (_b) {
|
|
28727
28426
|
if (this.creatingSearchInfo)
|
|
28728
28427
|
return [2 /*return*/];
|
|
28729
28428
|
this._showSettingsPermission = true;
|
|
@@ -28733,10 +28432,10 @@
|
|
|
28733
28432
|
};
|
|
28734
28433
|
CrudListComponent.prototype.createSearchSchema = function () {
|
|
28735
28434
|
return __awaiter(this, void 0, void 0, function () {
|
|
28736
|
-
var searchInfo,
|
|
28737
|
-
var e_7,
|
|
28738
|
-
return __generator(this, function (
|
|
28739
|
-
switch (
|
|
28435
|
+
var searchInfo, _b, _c, col, control, e_7_1, _loop_5, this_3, _d, _e, field;
|
|
28436
|
+
var e_7, _f, _g, e_8, _h;
|
|
28437
|
+
return __generator(this, function (_j) {
|
|
28438
|
+
switch (_j.label) {
|
|
28740
28439
|
case 0:
|
|
28741
28440
|
if (this.setting.cols == null) {
|
|
28742
28441
|
return [2 /*return*/, this._notifierService.showWarning('Bạn chưa cấu hình cột cho danh sách')];
|
|
@@ -28746,14 +28445,14 @@
|
|
|
28746
28445
|
searchInfo.schema = [];
|
|
28747
28446
|
searchInfo.fieldDropdown = {};
|
|
28748
28447
|
searchInfo.fieldSearchText = [];
|
|
28749
|
-
|
|
28448
|
+
_j.label = 1;
|
|
28750
28449
|
case 1:
|
|
28751
|
-
|
|
28752
|
-
|
|
28753
|
-
|
|
28450
|
+
_j.trys.push([1, 6, 7, 8]);
|
|
28451
|
+
_b = __values(this.setting.cols), _c = _b.next();
|
|
28452
|
+
_j.label = 2;
|
|
28754
28453
|
case 2:
|
|
28755
|
-
if (!!
|
|
28756
|
-
col =
|
|
28454
|
+
if (!!_c.done) return [3 /*break*/, 5];
|
|
28455
|
+
col = _c.value;
|
|
28757
28456
|
if (!(col.allowFilter != false && col.rawColumn == null)) return [3 /*break*/, 4];
|
|
28758
28457
|
if (col.fullTextSearch) {
|
|
28759
28458
|
if (searchInfo.fieldSearchText.indexOf(col.field) == -1) {
|
|
@@ -28766,9 +28465,9 @@
|
|
|
28766
28465
|
}
|
|
28767
28466
|
return [4 /*yield*/, this.setting.function.getSearchControl(col.field)];
|
|
28768
28467
|
case 3:
|
|
28769
|
-
control =
|
|
28468
|
+
control = _j.sent();
|
|
28770
28469
|
if (control != null) {
|
|
28771
|
-
(
|
|
28470
|
+
(_g = searchInfo.schema).push.apply(_g, __spread(control));
|
|
28772
28471
|
}
|
|
28773
28472
|
else {
|
|
28774
28473
|
if (col.baseService || (col.dataSource && col.dataSource.length > 0)) {
|
|
@@ -28822,18 +28521,18 @@
|
|
|
28822
28521
|
}
|
|
28823
28522
|
}
|
|
28824
28523
|
}
|
|
28825
|
-
|
|
28524
|
+
_j.label = 4;
|
|
28826
28525
|
case 4:
|
|
28827
|
-
|
|
28526
|
+
_c = _b.next();
|
|
28828
28527
|
return [3 /*break*/, 2];
|
|
28829
28528
|
case 5: return [3 /*break*/, 8];
|
|
28830
28529
|
case 6:
|
|
28831
|
-
e_7_1 =
|
|
28530
|
+
e_7_1 = _j.sent();
|
|
28832
28531
|
e_7 = { error: e_7_1 };
|
|
28833
28532
|
return [3 /*break*/, 8];
|
|
28834
28533
|
case 7:
|
|
28835
28534
|
try {
|
|
28836
|
-
if (
|
|
28535
|
+
if (_c && !_c.done && (_f = _b.return)) _f.call(_b);
|
|
28837
28536
|
}
|
|
28838
28537
|
finally { if (e_7) throw e_7.error; }
|
|
28839
28538
|
return [7 /*endfinally*/];
|
|
@@ -28853,15 +28552,15 @@
|
|
|
28853
28552
|
};
|
|
28854
28553
|
this_3 = this;
|
|
28855
28554
|
try {
|
|
28856
|
-
for (
|
|
28857
|
-
field =
|
|
28555
|
+
for (_d = __values(searchInfo.fieldSearchText), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
28556
|
+
field = _e.value;
|
|
28858
28557
|
_loop_5(field);
|
|
28859
28558
|
}
|
|
28860
28559
|
}
|
|
28861
28560
|
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
28862
28561
|
finally {
|
|
28863
28562
|
try {
|
|
28864
|
-
if (
|
|
28563
|
+
if (_e && !_e.done && (_h = _d.return)) _h.call(_d);
|
|
28865
28564
|
}
|
|
28866
28565
|
finally { if (e_8) throw e_8.error; }
|
|
28867
28566
|
}
|
|
@@ -28927,19 +28626,15 @@
|
|
|
28927
28626
|
}
|
|
28928
28627
|
}, 20);
|
|
28929
28628
|
};
|
|
28930
|
-
CrudListComponent.prototype.getTooltip = function (tooltip, field) {
|
|
28931
|
-
var result = tooltip && tooltip[field] ? tooltip[field] : null;
|
|
28932
|
-
return result;
|
|
28933
|
-
};
|
|
28934
28629
|
return CrudListComponent;
|
|
28935
28630
|
}(ComponentBase));
|
|
28936
28631
|
CrudListComponent.decorators = [
|
|
28937
28632
|
{ type: i0.Component, args: [{
|
|
28938
28633
|
// tslint:disable-next-line: component-selector
|
|
28939
28634
|
selector: 'crud-list',
|
|
28940
|
-
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\r\n [ngStyle]=\"_style\">\r\n <div class=\"ui-helper-clearfix crud-list-header-area\">\r\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\r\n <div class=\"p-col-12 main-container-search\">\r\n <div class=\"p-grid main-container-search-inner\">\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\r\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\r\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\r\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\r\n </h1>\r\n\r\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\">\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\r\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onOldest)=\"onOldest($event)\"\r\n (onNext)=\"onNext($event)\" (onPrev)=\"onPrev($event)\" (onLatest)=\"onLatest($event)\"\r\n (onChangeLimitPage)=\"savePageSize()\">\r\n </paging-next-back-only>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"fit-content crud-list-body-area\">\r\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\r\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\r\n <div *ngIf=\"!setting.hiddenToolbar\" class=\"p-grid crudListToolbar\">\r\n <ng-container>\r\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\r\n <ng-container\r\n [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('toolbar')\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar\">\r\n <button *ngIf=\"!hiddenAdd\" type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\"\r\n class=\"p-button-text\" (click)=\"add()\"></button>\r\n <button *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\r\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\r\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon()\"></button>\r\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\r\n type=\"button\" pButton pRipple\r\n label=\"{{ 'X\u00F3a' | translate }} ({{model.selectedItems.length}})\" icon=\"pi pi-trash\"\r\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!setting.hiddenAdvanceSearch\" class=\"p-col-12 advance-search-container\"\r\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\r\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\r\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\r\n (onInit)=\"handleInitAdvanceSearch($event)\">\r\n </advance-search>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\r\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\r\n </div>\r\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\r\n <div class=\"container-table-inner\">\r\n <ng-container *ngIf=\"!_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"hasTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"table-border-line --top\"></div>\r\n <div class=\"table-border-line --right\"></div>\r\n <div class=\"table-border-line --bottom\"></div>\r\n <div class=\"table-border-line --left\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\r\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\r\n (onCancel)=\"_showSettings = false\">\r\n</settings>\r\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\r\n (onCancel)=\"_showSettingsRowColor = false\">\r\n</settings-row>\r\n<workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\r\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\"></workflow-setting-dialog>\r\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\r\n (onCancel)=\"_showSettingsPermission = false\">\r\n</entity-permission>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<tn-dialog *ngIf=\"showFormWorkflow\" #dialog [header]=\"headerWorkflow | translate\" [popupSize]=\"popupSizeWorkflow\"\r\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"showFormWorkflow = false\">\r\n <div style=\"height: 100%\">\r\n <simple-workflow-form #formBase [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [action]=\"actionWorkflow\" (onInvalidWorkflow)=\"handleInvalidWF($event)\" (onSaved)=\"handleProcessedWorflow()\"\r\n (onCancel)=\"showFormWorkflow = false\">\r\n </simple-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"processWorkflowModel.showEditForm\" #dialog [header]=\"processWorkflowModel.header | translate\"\r\n [popupSize]=\"processWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"processWorkflowModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <process-workflow-form #formBase [bussinessSetting]=\"setting\" [item]=\"currentItem\"\r\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\r\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\r\n </process-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"workflowHistoryModel.showEditForm\" #dialog [header]=\"workflowHistoryModel.header | translate\"\r\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <workflow-history-new #formBase [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\r\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\r\n </workflow-history-new>\r\n </div>\r\n</tn-dialog>\r\n<workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\r\n</workflow-history-dialog>\r\n<ng-template #tableGetGroupFieldFalse>\r\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\r\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\r\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" (onRowReorder)=\"handleRowOrdered($event)\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"rowExpansion; context: {rowData: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n</ng-template>\r\n<ng-template #tableGetGroupFieldTrue>\r\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\r\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\r\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\r\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\r\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\r\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\r\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\r\n (onChange)=\"handleCheckRowGroup(rowData)\">\r\n </p-checkbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!rowGroup\">\r\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\r\n <div class=\"container-row-group\">\r\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <i style=\"margin-right:5px\"\r\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n <span class=\"content-row-group\">\r\n <ng-container *ngIf=\"!contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n </span>\r\n </a>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\r\n </ng-container>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n <after-view-checked></after-view-checked>\r\n</ng-template>\r\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"title-row\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <th [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\" style=\"z-index: 3 !important;\">\r\n <button *ngIf=\"!hasTemplate('headerCheckbox')\" type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\r\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\" tooltipPosition=\"top\"\r\n [disabled]=\"model.loading\" (click)=\"reload()\"></button>\r\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\r\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" class=\"stt nopad center\"\r\n [class.sticky]=\"setting.stickyColumn\" [class.hidden-checkbox]=\"setting.hiddenCheckbox\" style=\"z-index: 3 !important;\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\r\n [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\r\n [class.first-th]=\"i==0\" [escape]=\"false\" tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\">\r\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\r\n <ng-container *ngIf=\"col.sort || col.sortClient\">\r\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\r\n </tr>\r\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\r\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" style=\"z-index: 3 !important;\"\r\n [class.sticky]=\"setting.stickyColumn\" [class.tricheckbox-custom-false]=\"checkedAll === false\"\r\n [style.width]=\"widthCheckbox\">\r\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\r\n </p-triStateCheckbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" style=\"z-index: 3 !important;\"\r\n [class.sticky]=\"setting.stickyColumn\" [class.hidden-checkbox]=\"setting.hiddenCheckbox\">\r\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\r\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\r\n <ng-container *ngIf=\"col.allowFilter\">\r\n <ng-container *ngIf=\"col.templateFilter\">\r\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\r\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\r\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <ng-container *ngSwitchCase=\"'int'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileUpload'\">\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"filterText\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\r\n style=\"z-index: 3 !important;\" [class.sticky]=\"setting.stickyColumn\">\r\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\r\n (click)=\"showSettings()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsPermission()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsWorkflow()\"></button>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n<ng-template #colFunctionHeader>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <th class=\"column-function\" style=\"z-index: 3 !important;\" [class.sticky]=\"setting.stickyColumn\"\r\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\">\r\n <div class=\"cell-header-function\">\r\n <span>{{'GRID.FUNCTION'| translate}}</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTh let-col>\r\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\r\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\r\n {{col.label}}\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n</ng-template>\r\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\r\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\r\n <tr class=\"table-row\" [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\"\r\n [ngClass]=\"mergeClassObj(rowData, { 'ui-state-highlight': rowData._checked })\" [pTooltip]=\"rowData.tooltip\"\r\n tooltipPosition=\"top\" [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\"\r\n (click)=\"eventSelectRow($event, rowData)\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <td [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\r\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\r\n </p-checkbox>\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"!setting.hiddenOrderColumn && (!rowData.hidden || !rowData.hidden[fieldOrder])\"\r\n [style.width]=\"widthOrderColumn\" class=\"stt\" style=\"text-align: center;\"\r\n [class.sticky]=\"setting.stickyColumn\" [class.hidden-checkbox]=\"setting.hiddenCheckbox\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\r\n <span class=\"row-card\" [ngStyle]=\"getBookmarkColor(rowData, columns)\"></span>\r\n {{rowData[fieldOrder]}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td *ngIf=\"rowExpansion\" class=\"no-padding center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container\r\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\r\n </ng-container>\r\n <td *ngIf=\"enableReorderRow\" class=\"no-padding center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\">\r\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\r\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\r\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"fas fa-history\"\r\n class=\"p-button-rounded p-button-success link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\"\r\n tooltipPosition=\"top\" (click)=\"showListVersion(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple [disabled]=\"disableEdit(rowData)\"\r\n pTooltip=\"{{'FORM.EDIT' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\r\n (click)=\"edit(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableDelete(rowData)\" pTooltip=\"{{'FORM.DELETE' | translate}}\"\r\n tooltipPosition=\"top\" class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\r\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\r\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\r\n [ngTemplateOutlet]=\"getTemplate('buttonAfter')\"></ng-container>\r\n <button *ngIf=\"setting.showMenuButtons && menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\"\r\n tooltipPosition=\"top\" (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n</ng-template>\r\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\r\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\r\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\r\n <span *ngIf=\"col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n {{rowData['pipe__' + col.field]}}\r\n </span>\r\n <span *ngIf=\"!col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\r\n class=\"link-or-action\">\r\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </a>\r\n </span>\r\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n</ng-template>\r\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\r\n let-expanded=\"expanded\">\r\n <ng-container *ngIf=\"col.template\">\r\n <ng-container [ngTemplateOutlet]=\"col.template\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.template\">\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\r\n <div pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\r\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\r\n <i pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" style=\"text-align: center;\"\r\n [ngClass]=\"rowData[field]\"></i>\r\n </span>\r\n <span *ngSwitchCase=\"'date'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy'}}\" tooltipPosition=\"top\">\r\n {{_crudService.renderDate(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'datetime'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"top\">\r\n {{_crudService.renderDateTime(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'user'\" class=\"user\">\r\n {{rowData[field] | userFormat | async}}\r\n </span>\r\n <div *ngSwitchCase=\"'users'\" [innerHTML]=\"rowData[field] | usersFormat | async\">\r\n </div>\r\n <span *ngSwitchCase=\"'int'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'decimal'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'intWithoutMask'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n {{rowData[field] | currency:\"VND\"}}\r\n </span>\r\n <span *ngSwitchCase=\"'boolean'\">\r\n <ng-container *ngIf=\"!col.useTriStateCheckbox\">\r\n <p-checkbox class=\"boolean-data-type\" binary=\"true\" [pTooltip]=\"getTooltip(rowData._tooltip, field)\"\r\n tooltipPosition=\"top\" [disabled]=\"col.disableCheckBox\" [(ngModel)]=\"rowData[field]\">\r\n </p-checkbox>\r\n </ng-container>\r\n <ng-container *ngIf=\"col.useTriStateCheckbox\">\r\n <p-triStateCheckbox class=\"boolean-data-type\" binary=\"true\"\r\n [pTooltip]=\"getTooltip(rowData._tooltip, field)\" tooltipPosition=\"top\"\r\n [disabled]=\"col.disableCheckBox\" [(ngModel)]=\"rowData[field]\">\r\n </p-triStateCheckbox>\r\n </ng-container>\r\n </span>\r\n <span *ngSwitchCase=\"'html'\">\r\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'metadataStatus'\">\r\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\r\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\r\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\r\n duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'fileUpload'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"fileUploadColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"fileManagerColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'string'\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"null\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentCellString let-rowData let-field=\"field\">\r\n <span>\r\n <!-- __sv: Short Value -->\r\n <ng-container *ngIf=\"rowData[field + '__sv']\">\r\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\r\n {{rowData[field + '__sv']}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\r\n tooltipPosition=\"top\">[...]</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\r\n {{rowData[field]}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\r\n {{rowData[field]}}\r\n </ng-container>\r\n </span>\r\n</ng-template>\r\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\r\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n </a>\r\n</ng-template>\r\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\r\n (click)=\"handleToggleRow(rowData, $event)\"></button>\r\n</ng-template>\r\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\r\n </ng-container>\r\n <span> ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\r\n</ng-template>\r\n<ng-template #entityWorkflowStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <span class=\"content\">{{rowData.statusString ? rowData.statusString : rowData.strcurrentStateCode}}</span>\r\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\r\n (click)=\"showActionWorkflow($event, rowData)\"></button>\r\n </div>\r\n</ng-template>\r\n<ng-template #workflowCoreStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <a class=\"content\" (click)=\"goToTask($event)\" href=\"javascript:;\">{{rowData.strworkflowCoreStatus}}</a>\r\n </div>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <!-- <span class=\"fix-sticky bottom\"></span> -->\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #sortIcon let-field=\"field\">\r\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\r\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>\r\n</ng-template>\r\n<ng-template #filterDropdown let-col=\"col\">\r\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\r\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\r\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\r\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\r\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterText let-col=\"col\">\r\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\r\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\r\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\r\n </div>\r\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\r\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterNumber let-col=\"col\">\r\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\r\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\r\n </tn-number-picker-range>\r\n </div>\r\n <span\r\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] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\r\n tabindex=\"-1\">\r\n <i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterDate let-col=\"col\">\r\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\r\n (onChanged)=\"onChangeDateTime($event, col.field)\">\r\n </tn-datetime-picker-range>\r\n </div>\r\n <span\r\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] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\r\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\r\n class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterBoolean let-col=\"col\">\r\n <div class=\"filter-boolean-box\">\r\n <p-selectButton\r\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\r\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\r\n <ng-template let-item>\r\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\r\n </ng-template>\r\n </p-selectButton>\r\n </div>\r\n</ng-template>\r\n<ng-template #fileUploadColumn let-field=\"field\" let-rowData let-fileSetting=\"fileSetting\">\r\n <file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingFileInstanceId\"\r\n [sharedFolderType]=\"fileSetting.control.sharedFolderType\" [readonly]=\"fileSetting.control.readonly\"\r\n [accept]=\"fileSetting.control.accept\" [(ngModel)]=\"rowData[field]\"\r\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\r\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\r\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\r\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\r\n </file-upload>\r\n\r\n <service-file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingServiceFile\"\r\n [serviceCode]=\"fileSetting.control.serviceCode\" [parentContext]=\"context\" [entity]=\"fileSetting.control.entity\"\r\n [entityKey]=\"rowData[fileSetting.control.entityKeyField]\" [control]=\"fileSetting.control\"\r\n [(ngModel)]=\"rowData.field\"\r\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\r\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\r\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\r\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\">\r\n </service-file-upload>\r\n</ng-template>\r\n<ng-template #fileManagerColumn let-rowData let-fileSetting=\"fileSetting\" let-field=\"field\">\r\n <file-manager [control]=\"fileSetting.control\" [serviceCode]=\"fileSetting.control.serviceCode\"\r\n [entity]=\"fileSetting.control.entity\" [entityKey]=\"rowData[fileSetting.control.entityKeyField]\"\r\n [readonly]=\"fileSetting.control.readonly\" [layout]=\"fileSetting.control.layout\"\r\n [fileDataService]=\"fileSetting.control.fileDataService\" [maxFileSize]=\"fileSetting.control.maxFileSize\"\r\n [(value)]=\"rowData[field]\"\r\n (onChanged)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.CHANGE)\"\r\n (onInit)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.INIT)\"\r\n (onSelect)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.SELECT)\"\r\n (onRemove)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.DELETED)\"\r\n (uploaded)=\"handleFieldValueChange(fileSetting, $event, rowData, eventType.UPLOADED)\">\r\n </file-manager>\r\n</ng-template>",
|
|
28635
|
+
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\r\n [ngStyle]=\"_style\">\r\n <div class=\"ui-helper-clearfix crud-list-header-area\">\r\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\r\n <div class=\"p-col-12 main-container-search\">\r\n <div class=\"p-grid main-container-search-inner\">\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\r\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\r\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\r\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\r\n </h1>\r\n\r\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\">\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\r\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onOldest)=\"onOldest($event)\"\r\n (onNext)=\"onNext($event)\" (onPrev)=\"onPrev($event)\" (onLatest)=\"onLatest($event)\"\r\n (onChangeLimitPage)=\"savePageSize()\">\r\n </paging-next-back-only>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"fit-content crud-list-body-area\">\r\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\r\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\r\n <div *ngIf=\"!setting.hiddenToolbar\" class=\"p-grid crudListToolbar\">\r\n <ng-container>\r\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\r\n <ng-container\r\n [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('toolbar')\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar\">\r\n <button *ngIf=\"!hiddenAdd\" type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\"\r\n class=\"p-button-text\" (click)=\"add()\"></button>\r\n <button *ngIf=\"model.selectedItems.length > 0\" type=\"button\" pButton pRipple\r\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\r\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon()\"></button>\r\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\r\n type=\"button\" pButton pRipple\r\n label=\"{{ 'X\u00F3a' | translate }} ({{model.selectedItems.length}})\" icon=\"pi pi-trash\"\r\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!setting.hiddenAdvanceSearch\" class=\"p-col-12 advance-search-container\"\r\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\r\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\r\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\r\n (onInit)=\"handleInitAdvanceSearch($event)\">\r\n </advance-search>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\r\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\r\n </div>\r\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\r\n <div class=\"container-table-inner\">\r\n <ng-container *ngIf=\"!_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"hasTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"table-border-line --top\"></div>\r\n <div class=\"table-border-line --right\"></div>\r\n <div class=\"table-border-line --bottom\"></div>\r\n <div class=\"table-border-line --left\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\r\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\r\n (onCancel)=\"_showSettings = false\">\r\n</settings>\r\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\r\n (onCancel)=\"_showSettingsRowColor = false\">\r\n</settings-row>\r\n<workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\r\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\"></workflow-setting-dialog>\r\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\r\n (onCancel)=\"_showSettingsPermission = false\">\r\n</entity-permission>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<tn-dialog *ngIf=\"showFormWorkflow\" #dialog [header]=\"headerWorkflow | translate\" [popupSize]=\"popupSizeWorkflow\"\r\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"showFormWorkflow = false\">\r\n <div style=\"height: 100%\">\r\n <simple-workflow-form #formBase [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [action]=\"actionWorkflow\" (onInvalidWorkflow)=\"handleInvalidWF($event)\" (onSaved)=\"handleProcessedWorflow()\"\r\n (onCancel)=\"showFormWorkflow = false\">\r\n </simple-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"processWorkflowModel.showEditForm\" #dialog [header]=\"processWorkflowModel.header | translate\"\r\n [popupSize]=\"processWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"processWorkflowModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <process-workflow-form #formBase [bussinessSetting]=\"setting\" [item]=\"currentItem\"\r\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\r\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\r\n </process-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"workflowHistoryModel.showEditForm\" #dialog [header]=\"workflowHistoryModel.header | translate\"\r\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <workflow-history-new #formBase [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\r\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\r\n </workflow-history-new>\r\n </div>\r\n</tn-dialog>\r\n<workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\r\n</workflow-history-dialog>\r\n<ng-template #tableGetGroupFieldFalse>\r\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\r\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\r\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" (onRowReorder)=\"handleRowOrdered($event)\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"rowExpansion; context: {rowData: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n</ng-template>\r\n<ng-template #tableGetGroupFieldTrue>\r\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\r\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\r\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\r\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\r\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\r\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\r\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\r\n (onChange)=\"handleCheckRowGroup(rowData)\">\r\n </p-checkbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!rowGroup\">\r\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\r\n <div class=\"container-row-group\">\r\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <i style=\"margin-right:5px\"\r\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n <span class=\"content-row-group\">\r\n <ng-container *ngIf=\"!contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n </span>\r\n </a>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\r\n </ng-container>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n <after-view-checked></after-view-checked>\r\n</ng-template>\r\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"title-row\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <th [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <button *ngIf=\"!hasTemplate('headerCheckbox')\" type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\r\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\" tooltipPosition=\"top\"\r\n [disabled]=\"model.loading\" (click)=\"reload()\"></button>\r\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\r\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" class=\"stt nopad center\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\r\n [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\r\n [class.first-th]=\"i==0\" [escape]=\"false\" tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\">\r\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\r\n <ng-container *ngIf=\"col.sort || col.sortClient\">\r\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\r\n </tr>\r\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\r\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\r\n [class.tricheckbox-custom-false]=\"checkedAll === false\" [style.width]=\"widthCheckbox\">\r\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\r\n </p-triStateCheckbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" [class.sticky]=\"setting.stickyColumn\">\r\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\r\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\r\n <ng-container *ngIf=\"col.allowFilter\">\r\n <ng-container *ngIf=\"col.templateFilter\">\r\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\r\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\r\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <ng-container *ngSwitchCase=\"'int'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"filterText\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\r\n (click)=\"showSettings()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsPermission()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsWorkflow()\"></button>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n<ng-template #colFunctionHeader>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <th class=\"column-function\" [class.sticky]=\"setting.stickyColumn\"\r\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\">\r\n <div class=\"cell-header-function\">\r\n <span>{{'GRID.FUNCTION'| translate}}</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTh let-col>\r\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\r\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\r\n {{col.label}}\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n</ng-template>\r\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\r\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\r\n <tr [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\"\r\n [ngClass]=\"mergeClassObj(rowData, { 'ui-state-highlight': rowData._checked })\" [pTooltip]=\"rowData.tooltip\"\r\n tooltipPosition=\"top\" [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\"\r\n (click)=\"eventSelectRow($event, rowData)\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <td [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\r\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\r\n </p-checkbox>\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"!setting.hiddenOrderColumn && (!rowData.hidden || !rowData.hidden[fieldOrder])\"\r\n [style.width]=\"widthOrderColumn\" class=\"stt\" style=\"text-align: center;\"\r\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\r\n <span class=\"row-card\" [ngStyle]=\"getBookmarkColor(rowData, columns)\"></span>\r\n {{rowData[fieldOrder]}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td *ngIf=\"rowExpansion\" class=\"no-padding center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container\r\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\r\n </ng-container>\r\n <td *ngIf=\"enableReorderRow\" class=\"no-padding center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\">\r\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\r\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\r\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"fas fa-history\"\r\n class=\"p-button-rounded p-button-success link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\"\r\n tooltipPosition=\"top\" (click)=\"showListVersion(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple [disabled]=\"disableEdit(rowData)\"\r\n pTooltip=\"{{'FORM.EDIT' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\r\n (click)=\"edit(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableDelete(rowData)\" pTooltip=\"{{'FORM.DELETE' | translate}}\"\r\n tooltipPosition=\"top\" class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\r\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\r\n <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\"\r\n tooltipPosition=\"top\" (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n</ng-template>\r\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\r\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\r\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\r\n <span *ngIf=\"col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n {{rowData['pipe__' + col.field]}}\r\n </span>\r\n <span *ngIf=\"!col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\r\n class=\"link-or-action\">\r\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </a>\r\n </span>\r\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n</ng-template>\r\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\r\n let-expanded=\"expanded\">\r\n <ng-container *ngIf=\"col.template\">\r\n <ng-container [ngTemplateOutlet]=\"col.template\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.template\">\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\r\n <div pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\r\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\r\n <i pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" style=\"text-align: center;\"\r\n [ngClass]=\"rowData[field]\"></i>\r\n </span>\r\n <span *ngSwitchCase=\"'date'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy'}}\" tooltipPosition=\"top\">\r\n {{_crudService.renderDate(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'datetime'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"top\">\r\n {{_crudService.renderDateTime(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'user'\" class=\"user\">\r\n {{rowData[field] | userFormat | async}}\r\n </span>\r\n <div *ngSwitchCase=\"'users'\" [innerHTML]=\"rowData[field] | usersFormat | async\">\r\n </div>\r\n <span *ngSwitchCase=\"'int'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'decimal'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'boolean'\">\r\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\r\n [disabled]=\"col.disableCheckBox\">\r\n </p-checkbox>\r\n </span>\r\n <span *ngSwitchCase=\"'html'\">\r\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'metadataStatus'\">\r\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\r\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\r\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\r\n duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'string'\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"null\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentCellString let-rowData let-field=\"field\">\r\n <span>\r\n <!-- __sv: Short Value -->\r\n <ng-container *ngIf=\"rowData[field + '__sv']\">\r\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\r\n {{rowData[field + '__sv']}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\r\n tooltipPosition=\"top\">[...]</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\r\n {{rowData[field]}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\r\n {{rowData[field]}}\r\n </ng-container>\r\n </span>\r\n</ng-template>\r\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\r\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n </a>\r\n</ng-template>\r\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\r\n (click)=\"handleToggleRow(rowData, $event)\"></button>\r\n</ng-template>\r\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\r\n </ng-container>\r\n <span> ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\r\n</ng-template>\r\n<ng-template #entityWorkflowStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <span class=\"content\">{{rowData.statusString ? rowData.statusString : rowData.strcurrentStateCode}}</span>\r\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\r\n (click)=\"showActionWorkflow($event, rowData)\"></button>\r\n </div>\r\n</ng-template>\r\n<ng-template #workflowCoreStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <a class=\"content\" (click)=\"goToTask($event)\" href=\"javascript:;\">{{rowData.strworkflowCoreStatus}}</a>\r\n </div>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <!-- <span class=\"fix-sticky bottom\"></span> -->\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #sortIcon let-field=\"field\">\r\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\r\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>\r\n</ng-template>\r\n<ng-template #filterDropdown let-col=\"col\">\r\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\r\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\r\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\r\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\r\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterText let-col=\"col\">\r\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\r\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\r\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\r\n </div>\r\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\r\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterNumber let-col=\"col\">\r\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\r\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\r\n </tn-number-picker-range>\r\n </div>\r\n <span\r\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] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\r\n tabindex=\"-1\">\r\n <i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterDate let-col=\"col\">\r\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\r\n (onChanged)=\"onChangeDateTime($event, col.field)\">\r\n </tn-datetime-picker-range>\r\n </div>\r\n <span\r\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] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\r\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\r\n class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterBoolean let-col=\"col\">\r\n <div class=\"filter-boolean-box\">\r\n <p-selectButton\r\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\r\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\r\n <ng-template let-item>\r\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\r\n </ng-template>\r\n </p-selectButton>\r\n </div>\r\n</ng-template>",
|
|
28941
28636
|
providers: [i2$1.DecimalPipe, i2$1.DatePipe],
|
|
28942
|
-
styles: [".container-table{display:flex;flex-direction:column;overflow:hidden}.container-table .container-table-inner{display:flex;height:auto;max-height:100%;min-height:60px;position:relative}.container-table-inner>tn-custom-scrollbar{width:100%}.cell-checkbox{text-align:center}.pick-color-row{border:1px solid #d1d1d1;border-radius:2px;bottom:0;cursor:pointer;display:flex;flex-wrap:wrap;height:1.4em;left:0;margin:auto;position:absolute;right:0;top:0;width:1.4em}.pick-color-row>div{background:#84d140;border:1px solid #fff;flex:0 0 50%}.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{align-items:center;display:flex}.cell-header-function>span{flex:1 1;text-align:center}.cell-header-function button{height:24px;margin:0;padding:0;width:24px}.group-icon{color:#256aa2;font-weight:400}.group-icon i{font-size:.8em;margin-right:5px}.center{text-align:center!important}.row-card{height:100%;left:0;position:absolute;top:0;width:5px}.column-function{
|
|
28637
|
+
styles: [".container-table{display:flex;flex-direction:column;overflow:hidden}.container-table .container-table-inner{display:flex;height:auto;max-height:100%;min-height:60px;position:relative}.container-table-inner>tn-custom-scrollbar{width:100%}.cell-checkbox{text-align:center}.pick-color-row{border:1px solid #d1d1d1;border-radius:2px;bottom:0;cursor:pointer;display:flex;flex-wrap:wrap;height:1.4em;left:0;margin:auto;position:absolute;right:0;top:0;width:1.4em}.pick-color-row>div{background:#84d140;border:1px solid #fff;flex:0 0 50%}.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{align-items:center;display:flex}.cell-header-function>span{flex:1 1;text-align:center}.cell-header-function button{height:24px;margin:0;padding:0;width:24px}.group-icon{color:#256aa2;font-weight:400}.group-icon i{font-size:.8em;margin-right:5px}.center{text-align:center!important}.row-card{height:100%;left:0;position:absolute;top:0;width:5px}.column-function{min-width:80px;padding:0}.custom-search-area{background-color:#f2f2f2;margin:-.5em -1em .5em;padding-left:.5em;padding-right:.5em}.main-container-search-inner{margin-bottom:-.5em}.filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.container-text-workflow{align-items:center;display:flex;justify-content:center}.container-text-workflow .link-or-action{color:#2196f3;cursor:pointer}.container-text-workflow .content{flex:1 1}.btnReload{height:2rem!important;left:50%;position:absolute;top:50%;transform:translate(-50%,calc(-50% - 1px));width:2rem}.toggle-showfull{color:#00f;cursor:pointer;font-size:.8rem;font-weight:700;white-space:nowrap}::ng-deep crud-list .advance-search-container{display:flex;justify-content:flex-end}::ng-deep crud-list advance-search{display:block;flex:1;max-width:400px}::ng-deep crud-list .main-container-search-inner .container-control>div{overflow:hidden}::ng-deep crud-list .ps__rail-x,::ng-deep crud-list .ps__rail-y{z-index:5}::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{min-width:200px;position:fixed;z-index:10}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th .container-icon-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}::ng-deep crud-list .check-all-custom{height:0;position:absolute;width: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{background-color:#fff;border-radius:3px;display:flex;min-width:0}::ng-deep crud-list .cell-header-filter .filter-box>div{border:1px solid #ced4da;border-radius:3px 0 0 3px;border-right:none;flex:1;outline:none;overflow:hidden}::ng-deep crud-list .cell-header-filter .filter-box>span{align-items:center;background:#f5f6f8;border:1px solid #ced4da;color:#6c757d;cursor:pointer;display:inline-flex;flex-basis:32px;height:32px;justify-content:center;min-width:unset;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{border:none;box-shadow:none!important;padding-left:5px;padding-right:5px}::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{border-color:#2196f3;box-shadow:0 0 0 .2rem #a6d5fa;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{box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763);min-width:250px;position:absolute;top:calc(50% - 16px);z-index:2}::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{border-color:#2196f3;box-shadow:0 0 0 .2rem #a6d5fa;flex:1;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{background-color:#eee;position:absolute;z-index:5}::ng-deep crud-list .table-border-line.--left,::ng-deep crud-list .table-border-line.--right{bottom:0;top:0;width:1px}::ng-deep crud-list .table-border-line.--bottom,::ng-deep crud-list .table-border-line.--top{height:1px;left:0;right:0}::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>p-contextmenu{display:none}@media (max-width:640px){::ng-deep crud-list .--table-responsive .p-datatable-wrapper{padding:1px}}"]
|
|
28943
28638
|
},] }
|
|
28944
28639
|
];
|
|
28945
28640
|
CrudListComponent.ctorParameters = function () { return [
|
|
@@ -30856,67 +30551,31 @@
|
|
|
30856
30551
|
};
|
|
30857
30552
|
EntityPickerDataComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
30858
30553
|
return __awaiter(this, void 0, void 0, function () {
|
|
30859
|
-
var
|
|
30860
|
-
|
|
30861
|
-
|
|
30862
|
-
switch (_d.label) {
|
|
30554
|
+
var allow;
|
|
30555
|
+
return __generator(this, function (_a) {
|
|
30556
|
+
switch (_a.label) {
|
|
30863
30557
|
case 0:
|
|
30864
30558
|
gridInfo.fields = this.advanceData.fields;
|
|
30865
|
-
if (this.control.coreVersion == exports.EnumCoreVersion.V4) {
|
|
30866
|
-
if (gridInfo.filters.length > 0) {
|
|
30867
|
-
try {
|
|
30868
|
-
for (_a = __values(gridInfo.filters), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
30869
|
-
filter = _b.value;
|
|
30870
|
-
value = this._commonService.tryParseJson(filter.value);
|
|
30871
|
-
if (value.valid) {
|
|
30872
|
-
if (filter.operator == exports.Operator.in) {
|
|
30873
|
-
filter.value = JSON.parse(filter.value).join(',');
|
|
30874
|
-
}
|
|
30875
|
-
else {
|
|
30876
|
-
filter.value = JSON.parse(filter.value).toString();
|
|
30877
|
-
}
|
|
30878
|
-
}
|
|
30879
|
-
}
|
|
30880
|
-
}
|
|
30881
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
30882
|
-
finally {
|
|
30883
|
-
try {
|
|
30884
|
-
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
30885
|
-
}
|
|
30886
|
-
finally { if (e_1) throw e_1.error; }
|
|
30887
|
-
}
|
|
30888
|
-
}
|
|
30889
|
-
}
|
|
30890
30559
|
if (this.control.multiple) {
|
|
30891
30560
|
if (this._value && this._value.length > 0) {
|
|
30892
|
-
|
|
30893
|
-
gridInfo.filters.push(this.newFilterV4(this.control.valueField, exports.Operator.notIn, this._value.join(',')));
|
|
30894
|
-
}
|
|
30895
|
-
else {
|
|
30896
|
-
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.notIn, this._value));
|
|
30897
|
-
}
|
|
30561
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.notIn, this._value));
|
|
30898
30562
|
}
|
|
30899
30563
|
}
|
|
30900
30564
|
else {
|
|
30901
30565
|
if (this._value) {
|
|
30902
|
-
|
|
30903
|
-
gridInfo.filters.push(this.newFilterV4(this.control.valueField, exports.Operator.notEqual, this._value.toString()));
|
|
30904
|
-
}
|
|
30905
|
-
else {
|
|
30906
|
-
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.notEqual, this._value));
|
|
30907
|
-
}
|
|
30566
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.notEqual, this._value));
|
|
30908
30567
|
}
|
|
30909
30568
|
}
|
|
30910
30569
|
return [4 /*yield*/, appendDefaultFilter(gridInfo.filters, this.control.defaultFilters)];
|
|
30911
30570
|
case 1:
|
|
30912
|
-
|
|
30571
|
+
_a.sent();
|
|
30913
30572
|
if (!this.control.modifyFilter) return [3 /*break*/, 3];
|
|
30914
30573
|
return [4 /*yield*/, this.control.modifyFilter(gridInfo.filters, this)];
|
|
30915
30574
|
case 2:
|
|
30916
|
-
allow =
|
|
30575
|
+
allow = _a.sent();
|
|
30917
30576
|
if (allow === false)
|
|
30918
30577
|
return [2 /*return*/, false];
|
|
30919
|
-
|
|
30578
|
+
_a.label = 3;
|
|
30920
30579
|
case 3:
|
|
30921
30580
|
if (this.setting.columnSetting.sortField) {
|
|
30922
30581
|
gridInfo.sorts.push({
|
|
@@ -31081,45 +30740,13 @@
|
|
|
31081
30740
|
};
|
|
31082
30741
|
EntityPickerSelectedComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
31083
30742
|
return __awaiter(this, void 0, void 0, function () {
|
|
31084
|
-
|
|
31085
|
-
|
|
31086
|
-
return __generator(this, function (_d) {
|
|
31087
|
-
switch (_d.label) {
|
|
30743
|
+
return __generator(this, function (_a) {
|
|
30744
|
+
switch (_a.label) {
|
|
31088
30745
|
case 0:
|
|
31089
30746
|
gridInfo.fields = this.advanceData.fields;
|
|
31090
|
-
if (this.control.coreVersion == exports.EnumCoreVersion.V4) {
|
|
31091
|
-
if (gridInfo.filters.length > 0) {
|
|
31092
|
-
try {
|
|
31093
|
-
for (_a = __values(gridInfo.filters), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
31094
|
-
filter = _b.value;
|
|
31095
|
-
value = this._commonService.tryParseJson(filter.value);
|
|
31096
|
-
if (value.valid) {
|
|
31097
|
-
if (filter.operator == exports.Operator.in) {
|
|
31098
|
-
filter.value = JSON.parse(filter.value).join(',');
|
|
31099
|
-
}
|
|
31100
|
-
else {
|
|
31101
|
-
filter.value = JSON.parse(filter.value).toString();
|
|
31102
|
-
}
|
|
31103
|
-
}
|
|
31104
|
-
}
|
|
31105
|
-
}
|
|
31106
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
31107
|
-
finally {
|
|
31108
|
-
try {
|
|
31109
|
-
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
31110
|
-
}
|
|
31111
|
-
finally { if (e_1) throw e_1.error; }
|
|
31112
|
-
}
|
|
31113
|
-
}
|
|
31114
|
-
}
|
|
31115
30747
|
if (this.control.multiple) {
|
|
31116
30748
|
if (this._value != null && this._value.length > 0) {
|
|
31117
|
-
|
|
31118
|
-
gridInfo.filters.push(this.newFilterV4(this.control.valueField, exports.Operator.in, this._value.join(',')));
|
|
31119
|
-
}
|
|
31120
|
-
else {
|
|
31121
|
-
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.in, this._value));
|
|
31122
|
-
}
|
|
30749
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.in, this._value));
|
|
31123
30750
|
}
|
|
31124
30751
|
else {
|
|
31125
30752
|
return [2 /*return*/, false];
|
|
@@ -31127,12 +30754,7 @@
|
|
|
31127
30754
|
}
|
|
31128
30755
|
else {
|
|
31129
30756
|
if (this._value != null) {
|
|
31130
|
-
|
|
31131
|
-
gridInfo.filters.push(this.newFilterV4(this.control.valueField, exports.Operator.in, this._value.toString()));
|
|
31132
|
-
}
|
|
31133
|
-
else {
|
|
31134
|
-
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.in, this._value));
|
|
31135
|
-
}
|
|
30757
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.in, this._value));
|
|
31136
30758
|
}
|
|
31137
30759
|
else {
|
|
31138
30760
|
return [2 /*return*/, false];
|
|
@@ -31140,7 +30762,7 @@
|
|
|
31140
30762
|
}
|
|
31141
30763
|
return [4 /*yield*/, appendDefaultFilter(gridInfo.filters, this.control.defaultFilters)];
|
|
31142
30764
|
case 1:
|
|
31143
|
-
|
|
30765
|
+
_a.sent();
|
|
31144
30766
|
return [2 /*return*/];
|
|
31145
30767
|
}
|
|
31146
30768
|
});
|
|
@@ -31965,11 +31587,10 @@
|
|
|
31965
31587
|
}
|
|
31966
31588
|
return FileExplorerItem;
|
|
31967
31589
|
}());
|
|
31968
|
-
var FileExplorerItemType;
|
|
31969
31590
|
(function (FileExplorerItemType) {
|
|
31970
31591
|
FileExplorerItemType[FileExplorerItemType["File"] = 0] = "File";
|
|
31971
31592
|
FileExplorerItemType[FileExplorerItemType["Folder"] = 1] = "Folder";
|
|
31972
|
-
})(FileExplorerItemType || (FileExplorerItemType = {}));
|
|
31593
|
+
})(exports.FileExplorerItemType || (exports.FileExplorerItemType = {}));
|
|
31973
31594
|
|
|
31974
31595
|
// fix for build prod
|
|
31975
31596
|
var printJS$2 = printJS___namespace;
|
|
@@ -32925,7 +32546,24 @@
|
|
|
32925
32546
|
if (dataSource === void 0) { dataSource = []; }
|
|
32926
32547
|
this._dataSource = dataSource;
|
|
32927
32548
|
this._oldValue = this._value;
|
|
32928
|
-
|
|
32549
|
+
var value = [];
|
|
32550
|
+
dataSource.forEach(function (item) {
|
|
32551
|
+
value.push(item.id);
|
|
32552
|
+
if (item.name) {
|
|
32553
|
+
item.nameWithoutExtension = item.name;
|
|
32554
|
+
var index = item.name.lastIndexOf('.');
|
|
32555
|
+
if (index > -1) {
|
|
32556
|
+
item.nameWithoutExtension = item.name.substring(0, index);
|
|
32557
|
+
}
|
|
32558
|
+
if (item.extension) {
|
|
32559
|
+
item.extension = item.extension.toLowerCase();
|
|
32560
|
+
}
|
|
32561
|
+
item.tailFile = item.name.substring(index);
|
|
32562
|
+
item.tailFileUpper = item.tailFile.toUpperCase();
|
|
32563
|
+
item.isFile = item.fileExplorerItemType == exports.FileExplorerItemType.File;
|
|
32564
|
+
}
|
|
32565
|
+
});
|
|
32566
|
+
this._value = value;
|
|
32929
32567
|
if (this._oldValue != null) {
|
|
32930
32568
|
if (JSON.stringify(this._oldValue) != JSON.stringify(this._value)) {
|
|
32931
32569
|
this.fireEventChange();
|
|
@@ -33045,6 +32683,10 @@
|
|
|
33045
32683
|
show: false,
|
|
33046
32684
|
formData: {}
|
|
33047
32685
|
};
|
|
32686
|
+
this.forms[this.formIds.signatureDetail] = {
|
|
32687
|
+
header: 'Thông tin chữ ký số',
|
|
32688
|
+
show: false,
|
|
32689
|
+
};
|
|
33048
32690
|
this.forms[this.formIds.fileVersionList] = {
|
|
33049
32691
|
header: 'Danh sách phiên bản',
|
|
33050
32692
|
show: false,
|
|
@@ -33135,7 +32777,7 @@
|
|
|
33135
32777
|
};
|
|
33136
32778
|
FileManagerComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
33137
32779
|
return __awaiter(this, void 0, void 0, function () {
|
|
33138
|
-
return __generator(this, function (
|
|
32780
|
+
return __generator(this, function (_b) {
|
|
33139
32781
|
gridInfo.filters.push(this.newFilter('parentFolderId', exports.Operator.equal, this.data.currentFolderId));
|
|
33140
32782
|
return [2 /*return*/];
|
|
33141
32783
|
});
|
|
@@ -33144,7 +32786,7 @@
|
|
|
33144
32786
|
FileManagerComponent.prototype.afterGetData = function () {
|
|
33145
32787
|
return __awaiter(this, void 0, void 0, function () {
|
|
33146
32788
|
var _loop_1, this_1, ind;
|
|
33147
|
-
return __generator(this, function (
|
|
32789
|
+
return __generator(this, function (_b) {
|
|
33148
32790
|
_loop_1 = function (ind) {
|
|
33149
32791
|
var item = this_1.model.dataSource[ind];
|
|
33150
32792
|
if (this_1._fileExplorerService.supportDigitalSignature(item.name)) {
|
|
@@ -33155,7 +32797,7 @@
|
|
|
33155
32797
|
}
|
|
33156
32798
|
});
|
|
33157
32799
|
}
|
|
33158
|
-
if (item.fileExplorerItemType === FileExplorerItemType.Folder) {
|
|
32800
|
+
if (item.fileExplorerItemType === exports.FileExplorerItemType.Folder) {
|
|
33159
32801
|
item.class = '';
|
|
33160
32802
|
}
|
|
33161
32803
|
if (item.extension) {
|
|
@@ -33317,7 +32959,7 @@
|
|
|
33317
32959
|
FileManagerComponent.prototype.openObject = function (explorerItem) {
|
|
33318
32960
|
return __awaiter(this, void 0, void 0, function () {
|
|
33319
32961
|
var canViewOnline;
|
|
33320
|
-
return __generator(this, function (
|
|
32962
|
+
return __generator(this, function (_b) {
|
|
33321
32963
|
if (explorerItem.isFile) {
|
|
33322
32964
|
canViewOnline = this._fileObjectService.isSupportedViewOnline(explorerItem.name);
|
|
33323
32965
|
if (canViewOnline) {
|
|
@@ -33358,7 +33000,7 @@
|
|
|
33358
33000
|
FileManagerComponent.prototype.download = function (explorerItem) {
|
|
33359
33001
|
return __awaiter(this, void 0, void 0, function () {
|
|
33360
33002
|
var model;
|
|
33361
|
-
return __generator(this, function (
|
|
33003
|
+
return __generator(this, function (_b) {
|
|
33362
33004
|
model = this._downloadLinkService.getGenerateDownloadLinkModel(explorerItem);
|
|
33363
33005
|
this._downloadLinkService.download(model);
|
|
33364
33006
|
return [2 /*return*/];
|
|
@@ -33370,7 +33012,7 @@
|
|
|
33370
33012
|
return __awaiter(this, void 0, void 0, function () {
|
|
33371
33013
|
var selectedItems, hasItems, arrModel;
|
|
33372
33014
|
var _this = this;
|
|
33373
|
-
return __generator(this, function (
|
|
33015
|
+
return __generator(this, function (_b) {
|
|
33374
33016
|
selectedItems = this.model.selectedItems;
|
|
33375
33017
|
hasItems = selectedItems && selectedItems.length;
|
|
33376
33018
|
if (hasItems) {
|
|
@@ -33520,13 +33162,13 @@
|
|
|
33520
33162
|
return __awaiter(this, void 0, void 0, function () {
|
|
33521
33163
|
var rs, breadcrumbs;
|
|
33522
33164
|
var _this = this;
|
|
33523
|
-
return __generator(this, function (
|
|
33524
|
-
switch (
|
|
33165
|
+
return __generator(this, function (_b) {
|
|
33166
|
+
switch (_b.label) {
|
|
33525
33167
|
case 0:
|
|
33526
33168
|
if (!this.data.currentFolderId) return [3 /*break*/, 2];
|
|
33527
33169
|
return [4 /*yield*/, this._folderService.getFullFolderPath(this.data.currentFolderId)];
|
|
33528
33170
|
case 1:
|
|
33529
|
-
rs =
|
|
33171
|
+
rs = _b.sent();
|
|
33530
33172
|
if (rs.success) {
|
|
33531
33173
|
breadcrumbs = rs.data.map(function (f) {
|
|
33532
33174
|
var item = {
|
|
@@ -33548,7 +33190,7 @@
|
|
|
33548
33190
|
return [3 /*break*/, 3];
|
|
33549
33191
|
case 2:
|
|
33550
33192
|
this.data.breadcrumbs = [];
|
|
33551
|
-
|
|
33193
|
+
_b.label = 3;
|
|
33552
33194
|
case 3: return [2 /*return*/];
|
|
33553
33195
|
}
|
|
33554
33196
|
});
|
|
@@ -33558,36 +33200,75 @@
|
|
|
33558
33200
|
// TODO: Lưu ý xử lý trường double click vào nút
|
|
33559
33201
|
FileManagerComponent.prototype.signFile = function (file) {
|
|
33560
33202
|
var _this = this;
|
|
33561
|
-
this._notifierService.showConfirm('Bạn có chắc chắn muốn ký số văn bản này?').then(function (rs) {
|
|
33562
|
-
|
|
33563
|
-
|
|
33564
|
-
|
|
33565
|
-
|
|
33566
|
-
|
|
33567
|
-
|
|
33568
|
-
|
|
33569
|
-
|
|
33570
|
-
|
|
33571
|
-
|
|
33572
|
-
|
|
33573
|
-
|
|
33574
|
-
|
|
33575
|
-
|
|
33576
|
-
|
|
33577
|
-
|
|
33578
|
-
|
|
33579
|
-
})
|
|
33580
|
-
|
|
33581
|
-
|
|
33203
|
+
this._notifierService.showConfirm('Bạn có chắc chắn muốn ký số văn bản này?').then(function (rs) { return __awaiter(_this, void 0, void 0, function () {
|
|
33204
|
+
var sourceFileId, sourceFile_1, rsConvert, e_1;
|
|
33205
|
+
var _this = this;
|
|
33206
|
+
return __generator(this, function (_b) {
|
|
33207
|
+
switch (_b.label) {
|
|
33208
|
+
case 0:
|
|
33209
|
+
if (!rs) return [3 /*break*/, 5];
|
|
33210
|
+
sourceFileId = file.id;
|
|
33211
|
+
sourceFile_1 = file;
|
|
33212
|
+
if (!this._fileExplorerService.needConvertBeforeSign(file.name)) return [3 /*break*/, 4];
|
|
33213
|
+
_b.label = 1;
|
|
33214
|
+
case 1:
|
|
33215
|
+
_b.trys.push([1, 3, , 4]);
|
|
33216
|
+
return [4 /*yield*/, this._fileExplorerService.convertDocumentToPdfAndSave({
|
|
33217
|
+
id: sourceFileId,
|
|
33218
|
+
name: this._fileExplorerService.changeFileExtension(file.name, 'pdf'),
|
|
33219
|
+
folderId: file.parentFolderId,
|
|
33220
|
+
ownerType: this._userService.getCurrentUser().userId.toString(),
|
|
33221
|
+
})];
|
|
33222
|
+
case 2:
|
|
33223
|
+
rsConvert = _b.sent();
|
|
33224
|
+
if (!rsConvert || !rsConvert.success) {
|
|
33225
|
+
this._notifierService.showWarning("C\u00F3 l\u1ED7i x\u1EA3y ra khi chuy\u1EC3n \u0111\u1ED5i t\u00E0i li\u1EC7u " + file.name + " th\u00E0nh pdf \u0111\u1EC3 k\u00FD. Vui l\u00F2ng th\u1EED l\u1EA1i sau");
|
|
33226
|
+
return [2 /*return*/];
|
|
33582
33227
|
}
|
|
33583
|
-
|
|
33584
|
-
|
|
33585
|
-
|
|
33586
|
-
|
|
33228
|
+
else {
|
|
33229
|
+
this._notifierService.showSuccess("Chuy\u1EC3n \u0111\u1ED5i t\u00E0i li\u1EC7u " + file.name + " th\u00E0nh pdf th\u00E0nh c\u00F4ng");
|
|
33230
|
+
sourceFileId = rsConvert.data;
|
|
33231
|
+
sourceFile_1 = { id: sourceFileId };
|
|
33232
|
+
this._triggerProcessData();
|
|
33233
|
+
}
|
|
33234
|
+
return [3 /*break*/, 4];
|
|
33235
|
+
case 3:
|
|
33236
|
+
e_1 = _b.sent();
|
|
33237
|
+
this._notifierService.showWarning("C\u00F3 l\u1ED7i x\u1EA3y ra khi chuy\u1EC3n \u0111\u1ED5i t\u00E0i li\u1EC7u " + file.name + " th\u00E0nh pdf \u0111\u1EC3 k\u00FD. Vui l\u00F2ng th\u1EED l\u1EA1i sau");
|
|
33238
|
+
return [2 /*return*/];
|
|
33239
|
+
case 4:
|
|
33240
|
+
this._fileExplorerService.generateLinkDownload({
|
|
33241
|
+
fileId: sourceFileId,
|
|
33242
|
+
}).then(function (rs) {
|
|
33243
|
+
var url = _this._downloadLinkService.getDownloadForSignUrl(rs.data);
|
|
33244
|
+
var prms = {};
|
|
33245
|
+
prms['FileUploadHandler'] = _this._moduleConfig.environment.apiDomain.fileEndpoint + "/" + _this._moduleConfig.environment.apiVersion + "/KySoFile/SavePhysicalSignedFile";
|
|
33246
|
+
prms['SessionId'] = '';
|
|
33247
|
+
prms['FileName'] = url;
|
|
33248
|
+
// tslint:disable-next-line: variable-name
|
|
33249
|
+
var json_prms = JSON.stringify(prms);
|
|
33250
|
+
vgca_sign_approved(json_prms, function (result) {
|
|
33251
|
+
var resultObj = JSON.parse(result);
|
|
33252
|
+
if (resultObj.FileServer != '') {
|
|
33253
|
+
_this._fileExplorerService.saveSignedFile({
|
|
33254
|
+
sourceFile: sourceFile_1,
|
|
33255
|
+
tempFileId: resultObj.FileServer,
|
|
33256
|
+
}).then(function (rss) {
|
|
33257
|
+
_this._triggerProcessData();
|
|
33258
|
+
_this._notifierService.showSuccess('Ký số thành công');
|
|
33259
|
+
});
|
|
33260
|
+
}
|
|
33261
|
+
});
|
|
33262
|
+
});
|
|
33263
|
+
_b.label = 5;
|
|
33264
|
+
case 5: return [2 /*return*/];
|
|
33265
|
+
}
|
|
33266
|
+
});
|
|
33267
|
+
}); });
|
|
33587
33268
|
};
|
|
33588
33269
|
FileManagerComponent.prototype.shareFolder = function (file) {
|
|
33589
33270
|
return __awaiter(this, void 0, void 0, function () {
|
|
33590
|
-
return __generator(this, function (
|
|
33271
|
+
return __generator(this, function (_b) {
|
|
33591
33272
|
this.forms.shareFolder.data = file;
|
|
33592
33273
|
this.forms.shareFolder.show = true;
|
|
33593
33274
|
return [2 /*return*/];
|
|
@@ -33596,7 +33277,7 @@
|
|
|
33596
33277
|
};
|
|
33597
33278
|
FileManagerComponent.prototype.shareFile = function (file) {
|
|
33598
33279
|
return __awaiter(this, void 0, void 0, function () {
|
|
33599
|
-
return __generator(this, function (
|
|
33280
|
+
return __generator(this, function (_b) {
|
|
33600
33281
|
this.forms.shareFile.data = file;
|
|
33601
33282
|
this.forms.shareFile.show = true;
|
|
33602
33283
|
return [2 /*return*/];
|
|
@@ -33610,19 +33291,154 @@
|
|
|
33610
33291
|
};
|
|
33611
33292
|
FileManagerComponent.prototype.viewListSign = function (e, signatures) {
|
|
33612
33293
|
e.stopPropagation();
|
|
33613
|
-
this.
|
|
33294
|
+
this.model.advanceData = signatures;
|
|
33614
33295
|
this.forms.signatureDetail.show = true;
|
|
33615
33296
|
};
|
|
33616
33297
|
FileManagerComponent.prototype.onRowSelect = function (evt) {
|
|
33617
33298
|
this.onSelected.emit(this.model.selectedItems);
|
|
33618
33299
|
};
|
|
33300
|
+
FileManagerComponent.prototype.signMultiple = function () {
|
|
33301
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
33302
|
+
var selectedItems, hasItems;
|
|
33303
|
+
return __generator(this, function (_b) {
|
|
33304
|
+
selectedItems = this.model.selectedItems;
|
|
33305
|
+
hasItems = selectedItems && selectedItems.length;
|
|
33306
|
+
if (hasItems) {
|
|
33307
|
+
if (selectedItems.length == 1) {
|
|
33308
|
+
this.signFile(selectedItems[0]);
|
|
33309
|
+
}
|
|
33310
|
+
else {
|
|
33311
|
+
this.signFileMultiple(selectedItems);
|
|
33312
|
+
}
|
|
33313
|
+
}
|
|
33314
|
+
return [2 /*return*/];
|
|
33315
|
+
});
|
|
33316
|
+
});
|
|
33317
|
+
};
|
|
33318
|
+
FileManagerComponent.prototype.signFileMultiple = function (lstFile) {
|
|
33319
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
33320
|
+
var prms, rs, lstFile_1, lstFile_1_1, file, sourceFileId, sourceFile, rsConvert, result, url, e_2, result, url, e_3_1, json_prms;
|
|
33321
|
+
var e_3, _b;
|
|
33322
|
+
var _this = this;
|
|
33323
|
+
return __generator(this, function (_c) {
|
|
33324
|
+
switch (_c.label) {
|
|
33325
|
+
case 0:
|
|
33326
|
+
prms = {};
|
|
33327
|
+
prms['Files'] = [];
|
|
33328
|
+
prms['FileUploadHandler'] = this._moduleConfig.environment.apiDomain.fileEndpoint + "/" + this._moduleConfig.environment.apiVersion + "/KySoFile/SavePhysicalSignedFile";
|
|
33329
|
+
prms['SessionId'] = '';
|
|
33330
|
+
return [4 /*yield*/, this._notifierService.showConfirm('Bạn có chắc chắn muốn ký số các văn bản này?')];
|
|
33331
|
+
case 1:
|
|
33332
|
+
rs = _c.sent();
|
|
33333
|
+
if (!rs) return [3 /*break*/, 18];
|
|
33334
|
+
_c.label = 2;
|
|
33335
|
+
case 2:
|
|
33336
|
+
_c.trys.push([2, 15, 16, 17]);
|
|
33337
|
+
lstFile_1 = __values(lstFile), lstFile_1_1 = lstFile_1.next();
|
|
33338
|
+
_c.label = 3;
|
|
33339
|
+
case 3:
|
|
33340
|
+
if (!!lstFile_1_1.done) return [3 /*break*/, 14];
|
|
33341
|
+
file = lstFile_1_1.value;
|
|
33342
|
+
if (!this._fileObjectService.isTypeFileKySo(file.name))
|
|
33343
|
+
return [3 /*break*/, 13];
|
|
33344
|
+
sourceFileId = file.id;
|
|
33345
|
+
sourceFile = file;
|
|
33346
|
+
if (!this._fileExplorerService.needConvertBeforeSign(file.name)) return [3 /*break*/, 11];
|
|
33347
|
+
_c.label = 4;
|
|
33348
|
+
case 4:
|
|
33349
|
+
_c.trys.push([4, 9, , 10]);
|
|
33350
|
+
return [4 /*yield*/, this._fileExplorerService.convertDocumentToPdfAndSave({
|
|
33351
|
+
id: sourceFileId,
|
|
33352
|
+
name: this._fileExplorerService.changeFileExtension(file.name, 'pdf'),
|
|
33353
|
+
folderId: file.parentFolderId,
|
|
33354
|
+
ownerType: this._userService.getCurrentUser().userId.toString(),
|
|
33355
|
+
})];
|
|
33356
|
+
case 5:
|
|
33357
|
+
rsConvert = _c.sent();
|
|
33358
|
+
if (!(!rsConvert || !rsConvert.success)) return [3 /*break*/, 6];
|
|
33359
|
+
this._notifierService.showWarning("C\u00F3 l\u1ED7i x\u1EA3y ra khi chuy\u1EC3n \u0111\u1ED5i t\u00E0i li\u1EC7u " + file.name + " th\u00E0nh pdf \u0111\u1EC3 k\u00FD. Vui l\u00F2ng th\u1EED l\u1EA1i sau");
|
|
33360
|
+
return [3 /*break*/, 13];
|
|
33361
|
+
case 6: return [4 /*yield*/, this._fileExplorerService.generateLinkDownload({ fileId: rsConvert.data })];
|
|
33362
|
+
case 7:
|
|
33363
|
+
result = _c.sent();
|
|
33364
|
+
if (result.success) {
|
|
33365
|
+
url = this._downloadLinkService.getDownloadForSignUrl(result.data);
|
|
33366
|
+
prms['Files'].push({
|
|
33367
|
+
"FileID": rsConvert.data,
|
|
33368
|
+
"FileName": this._fileExplorerService.changeFileExtension(file.name, 'pdf'),
|
|
33369
|
+
"URL": url,
|
|
33370
|
+
});
|
|
33371
|
+
}
|
|
33372
|
+
_c.label = 8;
|
|
33373
|
+
case 8: return [3 /*break*/, 10];
|
|
33374
|
+
case 9:
|
|
33375
|
+
e_2 = _c.sent();
|
|
33376
|
+
this._notifierService.showWarning("C\u00F3 l\u1ED7i x\u1EA3y ra khi chuy\u1EC3n \u0111\u1ED5i t\u00E0i li\u1EC7u " + file.name + " th\u00E0nh pdf \u0111\u1EC3 k\u00FD. Vui l\u00F2ng th\u1EED l\u1EA1i sau");
|
|
33377
|
+
return [3 /*break*/, 13];
|
|
33378
|
+
case 10: return [3 /*break*/, 13];
|
|
33379
|
+
case 11: return [4 /*yield*/, this._fileExplorerService.generateLinkDownload({ fileId: sourceFileId })];
|
|
33380
|
+
case 12:
|
|
33381
|
+
result = _c.sent();
|
|
33382
|
+
if (result.success) {
|
|
33383
|
+
url = this._downloadLinkService.getDownloadForSignUrl(result.data);
|
|
33384
|
+
prms['Files'].push({
|
|
33385
|
+
"FileID": sourceFileId,
|
|
33386
|
+
"FileName": file.name,
|
|
33387
|
+
"URL": url,
|
|
33388
|
+
});
|
|
33389
|
+
}
|
|
33390
|
+
_c.label = 13;
|
|
33391
|
+
case 13:
|
|
33392
|
+
lstFile_1_1 = lstFile_1.next();
|
|
33393
|
+
return [3 /*break*/, 3];
|
|
33394
|
+
case 14: return [3 /*break*/, 17];
|
|
33395
|
+
case 15:
|
|
33396
|
+
e_3_1 = _c.sent();
|
|
33397
|
+
e_3 = { error: e_3_1 };
|
|
33398
|
+
return [3 /*break*/, 17];
|
|
33399
|
+
case 16:
|
|
33400
|
+
try {
|
|
33401
|
+
if (lstFile_1_1 && !lstFile_1_1.done && (_b = lstFile_1.return)) _b.call(lstFile_1);
|
|
33402
|
+
}
|
|
33403
|
+
finally { if (e_3) throw e_3.error; }
|
|
33404
|
+
return [7 /*endfinally*/];
|
|
33405
|
+
case 17:
|
|
33406
|
+
json_prms = JSON.stringify(prms);
|
|
33407
|
+
vgca_sign_files(json_prms, function (result) {
|
|
33408
|
+
var _a;
|
|
33409
|
+
var resultObj = JSON.parse(result);
|
|
33410
|
+
if ((_a = resultObj.Files) === null || _a === void 0 ? void 0 : _a.length) {
|
|
33411
|
+
resultObj.Files.forEach(function (item) { return __awaiter(_this, void 0, void 0, function () {
|
|
33412
|
+
var _this = this;
|
|
33413
|
+
return __generator(this, function (_b) {
|
|
33414
|
+
this._fileExplorerService.saveSignedFile({
|
|
33415
|
+
sourceFile: { id: item.FileID },
|
|
33416
|
+
tempFileId: item.FileSignedURL,
|
|
33417
|
+
}).then(function (rss) {
|
|
33418
|
+
_this._triggerProcessData();
|
|
33419
|
+
_this._notifierService.showSuccess('Ký số thành công');
|
|
33420
|
+
});
|
|
33421
|
+
return [2 /*return*/];
|
|
33422
|
+
});
|
|
33423
|
+
}); });
|
|
33424
|
+
}
|
|
33425
|
+
;
|
|
33426
|
+
});
|
|
33427
|
+
_c.label = 18;
|
|
33428
|
+
case 18:
|
|
33429
|
+
;
|
|
33430
|
+
return [2 /*return*/];
|
|
33431
|
+
}
|
|
33432
|
+
});
|
|
33433
|
+
});
|
|
33434
|
+
};
|
|
33619
33435
|
return FileManagerComponent;
|
|
33620
33436
|
}(DataListBase));
|
|
33621
33437
|
FileManagerComponent.decorators = [
|
|
33622
33438
|
{ type: i0.Component, args: [{
|
|
33623
33439
|
// tslint:disable-next-line: component-selector
|
|
33624
33440
|
selector: 'file-manager',
|
|
33625
|
-
template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\" [class.readonly]=\"readonly\">\r\n <div class=\"p-grid fm-toolbar\">\r\n <div class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n <div *ngIf=\"!readonly && rootFolderId\" class=\"fm-toolbar-buttons\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c\" tooltipPosition=\"top\"\r\n icon=\"pi pi-folder\" class=\"p-button-text p-button-rounded\" iconPos=\"left\" (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i l\u00EAn\" tooltipPosition=\"top\" type=\"button\"\r\n class=\"p-button-rounded p-button-text p-button-primary\" (click)=\"selectFile()\"></button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-rounded p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\" iconPos=\"left\"\r\n (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <ng-container *ngIf=\"canSetMove()\">\r\n <button class=\"p-button-rounded p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"\u0110\u1EB7t \u1EDF \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\" iconPos=\"left\"\r\n (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button icon=\"pi pi-undo\" pButton class=\"p-button-rounded p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF qua\" tooltipPosition=\"top\" (click)=\"cancelMove()\">\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"hasSelect()\">\r\n <button class=\"p-button-rounded p-button-text p-button-secondary\" pButton type=\"button\"\r\n pTooltip=\"N\u00E9n & t\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\" iconPos=\"left\"\r\n (click)=\"downloadMultiple()\">\r\n </button>\r\n\r\n <button pButton type=\"button\" pTooltip=\"{{ 'X\u00F3a' | translate }}\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\" iconPos=\"left\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fm-grid\">\r\n <crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"_dataSource\"\r\n [disableKeypressControl]=\"true\" [showScrollBar]=\"false\" class=\"--auto-height-content --no-wrapper-padding\"\r\n (onReload)=\"_triggerProcessData($event)\" (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\"\r\n (click)=\"openObject(rowData)\">\r\n </span>\r\n\r\n <span class=\"{{rowData.class}} file-ex-name\" (click)=\"openObject(rowData)\">\r\n {{rowData.name}}\r\n <div *ngIf=\"rowData.signatures\" class=\"pull-right signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #fileSize let-rowData='rowData'>\r\n <div *ngIf=\"rowData.isFile\">{{rowData.fileSize | fileSize}}</div>\r\n </ng-template>\r\n\r\n <ng-template #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <div class=\"function-list\">\r\n <button class=\"p-button-rounded p-button-text\" pButton type=\"button\" tooltipPosition=\"top\"\r\n pTooltip=\"{{getButtonTooltip(rowData)}}\" icon=\"{{getButtonIcon(rowData)}}\"\r\n (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-danger p-button-rounded p-button-text\" pButton type=\"button\"\r\n pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div class=\"nfl-toolbar\">\r\n <button *ngIf=\"!readonly\" type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"fas fa-cloud-upload-alt\" label=\"T\u1EA3i l\u00EAn\" (click)=\"selectFile()\"></button>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon\">\r\n </span>\r\n <a class=\"{{rowData.class}} file-ex-name\" (click)=\"openObject(rowData)\">\r\n <span>{{rowData.name}}</span>\r\n <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </a>\r\n </div>\r\n\r\n <div class=\"nfl-version\">\r\n v{{rowData.currentFileVersion}}\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text\" pButton type=\"button\" tooltipPosition=\"top\"\r\n pTooltip=\"{{getButtonTooltip(rowData)}}\" icon=\"{{getButtonIcon(rowData)}}\"\r\n (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text\" pButton type=\"button\" pTooltip=\"X\u00F3a\"\r\n tooltipPosition=\"top\" icon=\"pi pi-trash\" (click)=\"deleteFile(rowData)\"></button>\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<p-fileUpload #fileControl [name]=\"fileInForm\" mode=\"basic\" [ngStyle]=\"{'display': 'none'}\" [chooseLabel]=\"chooseLabel\"\r\n [multiple]=\"control.multiple\" [url]=\"apiUploadUrl\" [maxFileSize]=\"maxFileSize\" auto=\"true\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onProgress)=\"onUploadProgress($event)\"\r\n (onBeforeUpload)=\"onBeforeUpload($event)\" (onSelect)=\"handleSelectFile($event)\" (onUpload)=\"onUploaded($event)\">\r\n</p-fileUpload>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"data.itemsMenuFile\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- T\u1EA1o m\u1EDBi/ \u0111\u1ED5i t\u00EAn th\u01B0 m\u1EE5c -->\r\n<tn-dialog *ngIf=\"forms.createFolder.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.createFolder.header | translate\" [popupSize]=\"forms[formIds.createFolder].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.createFolder)\">\r\n <folder-form #formBase [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms[formIds.createFolder].formData\" (onSaved)=\"onSavedForm(formIds.createFolder)\"\r\n (onCancel)=\"onCancelForm(formIds.createFolder)\">\r\n </folder-form>\r\n</tn-dialog>\r\n\r\n<!-- \u0110\u1ED5i t\u00EAn file -->\r\n<tn-dialog *ngIf=\"forms.renameFile.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.renameFile.header | translate\" [popupSize]=\"forms[formIds.renameFile].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.renameFile)\">\r\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"forms[formIds.renameFile].formData\"\r\n (onSaved)=\"onSavedForm(formIds.renameFile)\" (onCancel)=\"onCancelForm(formIds.renameFile)\">\r\n </file-form>\r\n</tn-dialog>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms.fileViewer.formData\" [readonly]=\"readonly\" (onClose)=\"closeFileViewer()\">\r\n</file-viewer>\r\n\r\n<!-- Xem phi\u00EAn b\u1EA3n -->\r\n<tn-dialog *ngIf=\"forms.fileVersionList.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.fileVersionList.header | translate\" [popupSize]=\"forms[formIds.fileVersionList].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.fileVersionList)\">\r\n <file-version-list *ngIf=\"forms.fileVersionList.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [fileId]=\"forms[formIds.fileVersionList].fileId\" [readonly]=\"readonly\">\r\n </file-version-list>\r\n</tn-dialog>\r\n\r\n<!--<share-file *ngIf=\"forms.shareFile.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFile.formData\">\r\n</share-file>\r\n\r\n<share-folder *ngIf=\"forms.shareFolder.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFolder.formData\">\r\n</share-folder>\r\n\r\n<signature-detail *ngIf=\"forms.signatureDetail.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.signatureDetail.formData\">\r\n</signature-detail> -->",
|
|
33441
|
+
template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\" [class.readonly]=\"readonly\">\r\n <div class=\"p-grid fm-toolbar\">\r\n <div class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n <div *ngIf=\"!readonly && rootFolderId\" class=\"fm-toolbar-buttons\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c\" tooltipPosition=\"top\"\r\n icon=\"pi pi-folder\" class=\"p-button-text p-button-rounded\" iconPos=\"left\" (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i l\u00EAn\" tooltipPosition=\"top\" type=\"button\"\r\n class=\"p-button-rounded p-button-text p-button-primary\" (click)=\"selectFile()\"></button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-rounded p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\" iconPos=\"left\"\r\n (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <ng-container *ngIf=\"canSetMove()\">\r\n <button class=\"p-button-rounded p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"\u0110\u1EB7t \u1EDF \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\" iconPos=\"left\"\r\n (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button icon=\"pi pi-undo\" pButton class=\"p-button-rounded p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF qua\" tooltipPosition=\"top\" (click)=\"cancelMove()\">\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"hasSelect()\">\r\n <button class=\"p-button-rounded p-button-text p-button-secondary\" pButton type=\"button\"\r\n pTooltip=\"N\u00E9n & t\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\" iconPos=\"left\"\r\n (click)=\"downloadMultiple()\">\r\n </button>\r\n <button *ngIf=\"!control.uploadOnly\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"K\u00FD s\u1ED1 nhi\u1EC1u\" tooltipPosition=\"top\" icon=\"fas fa-signature\" iconPos=\"left\"\r\n label=\"K\u00FD s\u1ED1 nhi\u1EC1u\" (click)=\"signMultiple()\">\r\n </button>\r\n <button pButton type=\"button\" pTooltip=\"{{ 'X\u00F3a' | translate }}\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\" iconPos=\"left\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fm-grid\">\r\n <crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"_dataSource\"\r\n [disableKeypressControl]=\"true\" [showScrollBar]=\"false\" class=\"--auto-height-content --no-wrapper-padding\"\r\n (onReload)=\"_triggerProcessData($event)\" (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\"\r\n (click)=\"openObject(rowData)\">\r\n </span>\r\n\r\n <span class=\"{{rowData.class}} file-ex-name\" (click)=\"openObject(rowData)\">\r\n {{rowData.name}}\r\n <div *ngIf=\"rowData.signatures\" class=\"pull-right signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #fileSize let-rowData='rowData'>\r\n <div *ngIf=\"rowData.isFile\">{{rowData.fileSize | fileSize}}</div>\r\n </ng-template>\r\n\r\n <ng-template #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <div class=\"function-list\">\r\n\r\n\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text\" pButton type=\"button\" tooltipPosition=\"top\"\r\n pTooltip=\"{{getButtonTooltip(rowData)}}\" icon=\"{{getButtonIcon(rowData)}}\"\r\n (click)=\"onButtonClick(rowData)\"></button>\r\n <button class=\"p-button-danger p-button-rounded p-button-text\" pButton type=\"button\"\r\n pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n </ng-container>\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div class=\"nfl-toolbar\">\r\n <button *ngIf=\"!readonly\" type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"fas fa-cloud-upload-alt\" label=\"T\u1EA3i l\u00EAn\" (click)=\"selectFile()\"></button>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon\">\r\n </span>\r\n <a class=\"{{rowData.class}} file-ex-name\" (click)=\"openObject(rowData)\">\r\n <span>{{rowData.name}}</span>\r\n <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </a>\r\n </div>\r\n\r\n <div class=\"nfl-version\">\r\n v{{rowData.currentFileVersion}}\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text\" pButton type=\"button\" tooltipPosition=\"top\"\r\n pTooltip=\"{{getButtonTooltip(rowData)}}\" icon=\"{{getButtonIcon(rowData)}}\"\r\n (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text\" pButton type=\"button\" pTooltip=\"X\u00F3a\"\r\n tooltipPosition=\"top\" icon=\"pi pi-trash\" (click)=\"deleteFile(rowData)\"></button>\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<p-fileUpload #fileControl [name]=\"fileInForm\" mode=\"basic\" [ngStyle]=\"{'display': 'none'}\" [chooseLabel]=\"chooseLabel\"\r\n [multiple]=\"control?control.multiple:false\" [url]=\"apiUploadUrl\" [maxFileSize]=\"maxFileSize\" auto=\"true\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onProgress)=\"onUploadProgress($event)\"\r\n (onBeforeUpload)=\"onBeforeUpload($event)\" (onSelect)=\"handleSelectFile($event)\" (onUpload)=\"onUploaded($event)\">\r\n</p-fileUpload>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"data.itemsMenuFile\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- T\u1EA1o m\u1EDBi/ \u0111\u1ED5i t\u00EAn th\u01B0 m\u1EE5c -->\r\n<tn-dialog *ngIf=\"forms.createFolder.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.createFolder.header | translate\" [popupSize]=\"forms[formIds.createFolder].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.createFolder)\">\r\n <folder-form #formBase [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms[formIds.createFolder].formData\" (onSaved)=\"onSavedForm(formIds.createFolder)\"\r\n (onCancel)=\"onCancelForm(formIds.createFolder)\">\r\n </folder-form>\r\n</tn-dialog>\r\n\r\n<!-- \u0110\u1ED5i t\u00EAn file -->\r\n<tn-dialog *ngIf=\"forms.renameFile.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.renameFile.header | translate\" [popupSize]=\"forms[formIds.renameFile].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.renameFile)\">\r\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"forms[formIds.renameFile].formData\"\r\n (onSaved)=\"onSavedForm(formIds.renameFile)\" (onCancel)=\"onCancelForm(formIds.renameFile)\">\r\n </file-form>\r\n</tn-dialog>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms.fileViewer.formData\" [readonly]=\"readonly\" (onClose)=\"closeFileViewer()\">\r\n</file-viewer>\r\n\r\n<!-- Xem phi\u00EAn b\u1EA3n -->\r\n<tn-dialog *ngIf=\"forms.fileVersionList.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.fileVersionList.header | translate\" [popupSize]=\"forms[formIds.fileVersionList].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.fileVersionList)\">\r\n <file-version-list *ngIf=\"forms.fileVersionList.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [fileId]=\"forms[formIds.fileVersionList].fileId\" [readonly]=\"readonly\">\r\n </file-version-list>\r\n</tn-dialog>\r\n\r\n<!--<share-file *ngIf=\"forms.shareFile.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFile.formData\">\r\n</share-file>\r\n\r\n<share-folder *ngIf=\"forms.shareFolder.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFolder.formData\">\r\n</share-folder>-->\r\n\r\n<!-- Xem ch\u1EEF k\u00FD s\u1ED1 -->\r\n<tn-dialog *ngIf=\"forms.signatureDetail.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.signatureDetail.header | translate\" [popupSize]=\"forms[formIds.signatureDetail].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.signatureDetail)\">\r\n <signature-detail [parentModel]=\"model\" [parentContext]=\"context\">\r\n </signature-detail>\r\n</tn-dialog>",
|
|
33626
33442
|
providers: [
|
|
33627
33443
|
{
|
|
33628
33444
|
provide: forms.NG_VALUE_ACCESSOR,
|
|
@@ -34891,11 +34707,9 @@
|
|
|
34891
34707
|
this.decimalPlaces = 2;
|
|
34892
34708
|
this.viewMode = false;
|
|
34893
34709
|
this.inputStyleClass = '';
|
|
34894
|
-
this.thousandSeperator = '.';
|
|
34895
34710
|
this.onFocus = new i0.EventEmitter();
|
|
34896
34711
|
this.onBlur = new i0.EventEmitter();
|
|
34897
34712
|
this.onChanged = new i0.EventEmitter();
|
|
34898
|
-
this.locale = 'vi-VN';
|
|
34899
34713
|
}
|
|
34900
34714
|
Object.defineProperty(MaskComponent.prototype, "placeholder", {
|
|
34901
34715
|
set: function (value) {
|
|
@@ -34907,11 +34721,10 @@
|
|
|
34907
34721
|
configurable: true
|
|
34908
34722
|
});
|
|
34909
34723
|
MaskComponent.prototype.ngOnInit = function () {
|
|
34910
|
-
this.locale = this.thousandSeperator == '.' ? 'vi-VN' : 'en-US';
|
|
34911
34724
|
};
|
|
34912
34725
|
MaskComponent.prototype.writeValue = function (obj) {
|
|
34913
34726
|
if (obj) {
|
|
34914
|
-
this.model = this._numberPipe.transform(obj, '',
|
|
34727
|
+
this.model = this._numberPipe.transform(obj, '', 'vi-VN');
|
|
34915
34728
|
this.value = Number(this.model);
|
|
34916
34729
|
}
|
|
34917
34730
|
else if (obj === 0) {
|
|
@@ -34929,7 +34742,7 @@
|
|
|
34929
34742
|
return 'separator.0';
|
|
34930
34743
|
};
|
|
34931
34744
|
MaskComponent.prototype.getThousandSeperator = function () {
|
|
34932
|
-
return
|
|
34745
|
+
return '.';
|
|
34933
34746
|
};
|
|
34934
34747
|
MaskComponent.prototype.handleFocus = function () {
|
|
34935
34748
|
this.onFocus.emit(this.value);
|
|
@@ -34961,7 +34774,7 @@
|
|
|
34961
34774
|
}
|
|
34962
34775
|
};
|
|
34963
34776
|
MaskComponent.prototype.numberToStringVN = function (number) {
|
|
34964
|
-
return this._numberPipe.transform(number, '',
|
|
34777
|
+
return this._numberPipe.transform(number, '', 'vi-VN');
|
|
34965
34778
|
};
|
|
34966
34779
|
MaskComponent.prototype.registerOnChange = function (fn) {
|
|
34967
34780
|
this.onChange = fn;
|
|
@@ -35006,7 +34819,6 @@
|
|
|
35006
34819
|
decimalPlaces: [{ type: i0.Input }],
|
|
35007
34820
|
viewMode: [{ type: i0.Input }],
|
|
35008
34821
|
inputStyleClass: [{ type: i0.Input }],
|
|
35009
|
-
thousandSeperator: [{ type: i0.Input }],
|
|
35010
34822
|
onFocus: [{ type: i0.Output }],
|
|
35011
34823
|
onBlur: [{ type: i0.Output }],
|
|
35012
34824
|
onChanged: [{ type: i0.Output }]
|
|
@@ -45514,10 +45326,8 @@
|
|
|
45514
45326
|
},] }
|
|
45515
45327
|
];
|
|
45516
45328
|
|
|
45517
|
-
var moment$1 = moment___namespace;
|
|
45518
45329
|
var TnDatePipe = /** @class */ (function () {
|
|
45519
|
-
function TnDatePipe(
|
|
45520
|
-
this.format = format;
|
|
45330
|
+
function TnDatePipe() {
|
|
45521
45331
|
}
|
|
45522
45332
|
TnDatePipe.prototype.addZero = function (value) {
|
|
45523
45333
|
if (value < 10)
|
|
@@ -45527,8 +45337,6 @@
|
|
|
45527
45337
|
TnDatePipe.prototype.transform = function (value, args) {
|
|
45528
45338
|
if (value == null)
|
|
45529
45339
|
return '';
|
|
45530
|
-
if (this.format)
|
|
45531
|
-
return moment$1(value).format(this.format);
|
|
45532
45340
|
var date = new Date(value);
|
|
45533
45341
|
return this.addZero(date.getHours()) + ":" + this.addZero(date.getMinutes()) + ":" + this.addZero(date.getSeconds()) + ", Ng\u00E0y " + this.addZero(date.getDate()) + "/" + this.addZero(date.getMonth() + 1) + "/" + date.getFullYear();
|
|
45534
45342
|
};
|
|
@@ -45538,10 +45346,7 @@
|
|
|
45538
45346
|
{ type: i0.Pipe, args: [{
|
|
45539
45347
|
name: 'tnDate'
|
|
45540
45348
|
},] }
|
|
45541
|
-
];
|
|
45542
|
-
TnDatePipe.ctorParameters = function () { return [
|
|
45543
|
-
{ type: undefined, decorators: [{ type: i0.Inject, args: [i0.LOCALE_ID,] }] }
|
|
45544
|
-
]; };
|
|
45349
|
+
];
|
|
45545
45350
|
|
|
45546
45351
|
var UserFormatPipe = /** @class */ (function () {
|
|
45547
45352
|
function UserFormatPipe(_userService) {
|
|
@@ -45706,6 +45511,70 @@
|
|
|
45706
45511
|
{ type: UserService }
|
|
45707
45512
|
]; };
|
|
45708
45513
|
|
|
45514
|
+
// fix for build prod
|
|
45515
|
+
var moment$1 = moment___default['default'];
|
|
45516
|
+
var SignatureDetailComponent = /** @class */ (function (_super) {
|
|
45517
|
+
__extends(SignatureDetailComponent, _super);
|
|
45518
|
+
function SignatureDetailComponent(injector) {
|
|
45519
|
+
return _super.call(this, injector) || this;
|
|
45520
|
+
}
|
|
45521
|
+
SignatureDetailComponent.prototype.ngOnInit = function () {
|
|
45522
|
+
this.model.data = this.parentModel.advanceData;
|
|
45523
|
+
this.buildTree();
|
|
45524
|
+
};
|
|
45525
|
+
SignatureDetailComponent.prototype.buildTree = function () {
|
|
45526
|
+
var nodes = [];
|
|
45527
|
+
for (var ind in this.model.data) {
|
|
45528
|
+
var item = this.model.data[ind];
|
|
45529
|
+
var childNodes = { expanded: true, children: [] };
|
|
45530
|
+
childNodes.label = "" + item.reason;
|
|
45531
|
+
childNodes.expandedIcon = 'fas fa-signature';
|
|
45532
|
+
childNodes.collapsedIcon = 'fas fa-signature';
|
|
45533
|
+
childNodes.leaf = false;
|
|
45534
|
+
if (item.reason) {
|
|
45535
|
+
childNodes.children.push({
|
|
45536
|
+
label: 'Người ký: ' + item.certificate.subject.nameOfSigner,
|
|
45537
|
+
expandedIcon: 'fas fa-user-tag',
|
|
45538
|
+
collapsedIcon: 'fas fa-user-tag',
|
|
45539
|
+
leaf: true
|
|
45540
|
+
});
|
|
45541
|
+
}
|
|
45542
|
+
childNodes.children.push({
|
|
45543
|
+
label: 'Đơn vị: ' + item.certificate.subject.organizationUnit + ' - ' + item.certificate.subject.organization,
|
|
45544
|
+
expandedIcon: 'fas fa-building',
|
|
45545
|
+
collapsedIcon: 'fas fa-building',
|
|
45546
|
+
leaf: true
|
|
45547
|
+
});
|
|
45548
|
+
childNodes.children.push({
|
|
45549
|
+
label: 'Chứng thư cấp bởi: ' + item.certificate.issuerDN.nameOfIssuer,
|
|
45550
|
+
expandedIcon: 'fas fa-certificate',
|
|
45551
|
+
collapsedIcon: 'fas fa-certificate',
|
|
45552
|
+
leaf: true
|
|
45553
|
+
});
|
|
45554
|
+
childNodes.children.push({
|
|
45555
|
+
label: 'Thời gian ký: ' + moment$1(item.signDate).format('D/MM/Y hh:mm:ss Z'),
|
|
45556
|
+
expandedIcon: 'fas fa-clock',
|
|
45557
|
+
collapsedIcon: 'fas fa-clock',
|
|
45558
|
+
leaf: true
|
|
45559
|
+
});
|
|
45560
|
+
nodes.push(childNodes);
|
|
45561
|
+
}
|
|
45562
|
+
this.model.dataSource = nodes;
|
|
45563
|
+
};
|
|
45564
|
+
return SignatureDetailComponent;
|
|
45565
|
+
}(ComponentBase));
|
|
45566
|
+
SignatureDetailComponent.decorators = [
|
|
45567
|
+
{ type: i0.Component, args: [{
|
|
45568
|
+
selector: 'signature-detail',
|
|
45569
|
+
template: "<div class=\"tree-signature\">\r\n <p-tree [value]=\"model.dataSource\" [filter]=\"true\" [emptyMessage]=\"'Kh\u00F4ng c\u00F3 ch\u1EEF k\u00FD'\" styleClass=\"signature-tree\">\r\n </p-tree>\r\n</div>",
|
|
45570
|
+
providers: [ComponentContextService],
|
|
45571
|
+
styles: [":host::ng-deep .signature-tree{border:none;width:100%}:host::ng-deep .signature-tree .ui-treenode-icon{color:#888;padding-right:10px}:host::ng-deep .signature-tree span.fas.fa-signature+span{font-weight:700}:host::ng-deep .signature-tree span.ui-treenode-icon.fas.fa-signature{color:#212529!important;padding-left:5px}:host::ng-deep .signature-tree span.ui-tree-toggler{color:#212529!important}"]
|
|
45572
|
+
},] }
|
|
45573
|
+
];
|
|
45574
|
+
SignatureDetailComponent.ctorParameters = function () { return [
|
|
45575
|
+
{ type: i0.Injector }
|
|
45576
|
+
]; };
|
|
45577
|
+
|
|
45709
45578
|
function coreDeclaration() {
|
|
45710
45579
|
return [
|
|
45711
45580
|
AddressComponent,
|
|
@@ -45835,7 +45704,8 @@
|
|
|
45835
45704
|
FilePickerDialogComponent,
|
|
45836
45705
|
AddNewsComponent,
|
|
45837
45706
|
CommonDashboardComponent,
|
|
45838
|
-
NotFoundComponent
|
|
45707
|
+
NotFoundComponent,
|
|
45708
|
+
SignatureDetailComponent
|
|
45839
45709
|
];
|
|
45840
45710
|
}
|
|
45841
45711
|
function coreModuleImport() {
|
|
@@ -47388,67 +47258,6 @@
|
|
|
47388
47258
|
{ type: ModuleConfigService }
|
|
47389
47259
|
]; };
|
|
47390
47260
|
|
|
47391
|
-
var OrganizationBaseService = /** @class */ (function (_super) {
|
|
47392
|
-
__extends(OrganizationBaseService, _super);
|
|
47393
|
-
function OrganizationBaseService(http, injector, _moduleConfigService) {
|
|
47394
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.organizationEndpoint + "/organization") || this;
|
|
47395
|
-
_this.ORGANIZATION_INFO_KEY = 'organization_info';
|
|
47396
|
-
_this.RETRY_COUNT = 0;
|
|
47397
|
-
_this.REPLAY_COUNT = 10;
|
|
47398
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.organizationEndpoint;
|
|
47399
|
-
_this._moduleConfig = _moduleConfigService.getConfig();
|
|
47400
|
-
_this.organizationEndpoint = _this._moduleConfig.environment.apiDomain.organizationEndpoint + "/organization/";
|
|
47401
|
-
return _this;
|
|
47402
|
-
}
|
|
47403
|
-
OrganizationBaseService.prototype.getOrganizationInfo = function (organizationId) {
|
|
47404
|
-
var _this = this;
|
|
47405
|
-
var storageItem = localStorage.getItem(this.ORGANIZATION_INFO_KEY + "_" + organizationId);
|
|
47406
|
-
var organization = JSON.parse(storageItem);
|
|
47407
|
-
if (organization) {
|
|
47408
|
-
return new Promise(function (resolve, reject) { return resolve(organization); });
|
|
47409
|
-
}
|
|
47410
|
-
else {
|
|
47411
|
-
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
47412
|
-
var svUrl, result;
|
|
47413
|
-
var _this = this;
|
|
47414
|
-
return __generator(this, function (_a) {
|
|
47415
|
-
switch (_a.label) {
|
|
47416
|
-
case 0:
|
|
47417
|
-
if (!(organizationId == null)) return [3 /*break*/, 1];
|
|
47418
|
-
reject({});
|
|
47419
|
-
return [3 /*break*/, 3];
|
|
47420
|
-
case 1:
|
|
47421
|
-
if (!(organizationId > 0)) return [3 /*break*/, 3];
|
|
47422
|
-
svUrl = this.serviceUri + "/GetOrganizationInfo?id=" + organizationId;
|
|
47423
|
-
return [4 /*yield*/, this._http.get(svUrl).pipe(operators.shareReplay(this.REPLAY_COUNT), operators.retry(this.RETRY_COUNT), operators.map(function (repsonse) {
|
|
47424
|
-
// save response to local storage here
|
|
47425
|
-
localStorage.setItem(_this.ORGANIZATION_INFO_KEY + "_" + repsonse.data.id, JSON.stringify(repsonse.data));
|
|
47426
|
-
return repsonse.data;
|
|
47427
|
-
}, operators.catchError(function (err) { return _this.handleError(err, _this._injector); }))).toPromise()];
|
|
47428
|
-
case 2:
|
|
47429
|
-
result = _a.sent();
|
|
47430
|
-
resolve(result);
|
|
47431
|
-
_a.label = 3;
|
|
47432
|
-
case 3: return [2 /*return*/];
|
|
47433
|
-
}
|
|
47434
|
-
});
|
|
47435
|
-
}); });
|
|
47436
|
-
}
|
|
47437
|
-
};
|
|
47438
|
-
return OrganizationBaseService;
|
|
47439
|
-
}(BaseService));
|
|
47440
|
-
OrganizationBaseService.ɵprov = i0.ɵɵdefineInjectable({ factory: function OrganizationBaseService_Factory() { return new OrganizationBaseService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: OrganizationBaseService, providedIn: "root" });
|
|
47441
|
-
OrganizationBaseService.decorators = [
|
|
47442
|
-
{ type: i0.Injectable, args: [{
|
|
47443
|
-
providedIn: 'root'
|
|
47444
|
-
},] }
|
|
47445
|
-
];
|
|
47446
|
-
OrganizationBaseService.ctorParameters = function () { return [
|
|
47447
|
-
{ type: i1$1.HttpClient },
|
|
47448
|
-
{ type: i0.Injector },
|
|
47449
|
-
{ type: ModuleConfigService }
|
|
47450
|
-
]; };
|
|
47451
|
-
|
|
47452
47261
|
var ErrorType = /** @class */ (function () {
|
|
47453
47262
|
function ErrorType() {
|
|
47454
47263
|
}
|
|
@@ -47577,64 +47386,22 @@
|
|
|
47577
47386
|
return TemplateTextMany;
|
|
47578
47387
|
}());
|
|
47579
47388
|
|
|
47580
|
-
var
|
|
47581
|
-
function
|
|
47582
|
-
this.
|
|
47583
|
-
this.
|
|
47584
|
-
this.
|
|
47585
|
-
this.
|
|
47586
|
-
this.
|
|
47587
|
-
this.
|
|
47588
|
-
|
|
47589
|
-
|
|
47590
|
-
|
|
47591
|
-
|
|
47592
|
-
|
|
47593
|
-
|
|
47594
|
-
this[key] = init[key];
|
|
47595
|
-
}
|
|
47596
|
-
this.control = new FileUploadControlSchema({
|
|
47597
|
-
serviceCode: this.serviceCode,
|
|
47598
|
-
entity: this.entity,
|
|
47599
|
-
entityKeyField: this.entityKeyField,
|
|
47600
|
-
readonly: this.readonly,
|
|
47601
|
-
accept: this.accept,
|
|
47602
|
-
mode: this.mode,
|
|
47603
|
-
layout: this.layout,
|
|
47604
|
-
sharedFolderType: this.sharedFolderType,
|
|
47605
|
-
fileDataService: this.fileDataService,
|
|
47606
|
-
multiple: this.multiple,
|
|
47607
|
-
disabled: this.disabled
|
|
47608
|
-
});
|
|
47609
|
-
}
|
|
47610
|
-
return FileUploadSetting;
|
|
47611
|
-
}());
|
|
47612
|
-
var FileManagerSetting = /** @class */ (function () {
|
|
47613
|
-
function FileManagerSetting(init) {
|
|
47614
|
-
this.mode = exports.FileManagerMode.multiple;
|
|
47615
|
-
this.layout = exports.EnumFileLayout.SIMPLE;
|
|
47616
|
-
this.readonly = true;
|
|
47617
|
-
this.inTaiLieu = false;
|
|
47618
|
-
this.inTaiLieuChung = false;
|
|
47619
|
-
this.copyToFolderId = '';
|
|
47620
|
-
this.entityKeyField = 'id';
|
|
47621
|
-
this.control = new FileManagerControlSchema();
|
|
47622
|
-
for (var key in init) {
|
|
47623
|
-
this[key] = init[key];
|
|
47624
|
-
}
|
|
47625
|
-
this.control = new FileManagerControlSchema({
|
|
47626
|
-
serviceCode: this.serviceCode,
|
|
47627
|
-
entity: this.entity,
|
|
47628
|
-
entityKeyField: this.entityKeyField,
|
|
47629
|
-
readonly: this.readonly,
|
|
47630
|
-
accept: this.accept,
|
|
47631
|
-
mode: this.mode,
|
|
47632
|
-
layout: this.layout,
|
|
47633
|
-
fileDataService: this.fileDataService,
|
|
47634
|
-
rootFolderName: this.rootFolderName
|
|
47635
|
-
});
|
|
47389
|
+
var ServiceRequestModel = /** @class */ (function () {
|
|
47390
|
+
function ServiceRequestModel() {
|
|
47391
|
+
this.service = '';
|
|
47392
|
+
this.entityInstanceId = '';
|
|
47393
|
+
this.parent = null;
|
|
47394
|
+
this.serviceCode = '';
|
|
47395
|
+
this.entity = '';
|
|
47396
|
+
this.entityKey = '';
|
|
47397
|
+
}
|
|
47398
|
+
return ServiceRequestModel;
|
|
47399
|
+
}());
|
|
47400
|
+
|
|
47401
|
+
var FileVersionDTO = /** @class */ (function () {
|
|
47402
|
+
function FileVersionDTO() {
|
|
47636
47403
|
}
|
|
47637
|
-
return
|
|
47404
|
+
return FileVersionDTO;
|
|
47638
47405
|
}());
|
|
47639
47406
|
|
|
47640
47407
|
(function (PermissionBase) {
|
|
@@ -47992,16 +47759,18 @@
|
|
|
47992
47759
|
exports.FILE_TYPES = FILE_TYPES;
|
|
47993
47760
|
exports.FieldDefineIsWorkflowControl = FieldDefineIsWorkflowControl;
|
|
47994
47761
|
exports.FileDataService = FileDataService;
|
|
47762
|
+
exports.FileExplorerItem = FileExplorerItem;
|
|
47763
|
+
exports.FileExplorerNewService = FileExplorerNewService;
|
|
47995
47764
|
exports.FileExplorerService = FileExplorerService;
|
|
47996
47765
|
exports.FileManagerComponent = FileManagerComponent;
|
|
47997
47766
|
exports.FileManagerControlSchema = FileManagerControlSchema;
|
|
47998
|
-
exports.FileManagerSetting = FileManagerSetting;
|
|
47999
47767
|
exports.FileObjectService = FileObjectService;
|
|
48000
47768
|
exports.FilePickerDialogComponent = FilePickerDialogComponent;
|
|
48001
47769
|
exports.FileUploadComponent = FileUploadComponent;
|
|
48002
47770
|
exports.FileUploadControlSchema = FileUploadControlSchema;
|
|
48003
|
-
exports.FileUploadSetting = FileUploadSetting;
|
|
48004
47771
|
exports.FileV4Service = FileV4Service;
|
|
47772
|
+
exports.FileVersionDTO = FileVersionDTO;
|
|
47773
|
+
exports.FileVersionService = FileVersionService;
|
|
48005
47774
|
exports.Filter = Filter;
|
|
48006
47775
|
exports.FolderService = FolderService;
|
|
48007
47776
|
exports.FormControlBase = FormControlBase;
|
|
@@ -48042,6 +47811,7 @@
|
|
|
48042
47811
|
exports.ModuleConfigService = ModuleConfigService;
|
|
48043
47812
|
exports.MultiTranslateHttpLoader = MultiTranslateHttpLoader;
|
|
48044
47813
|
exports.MultipleReferenceDataFormatPipe = MultipleReferenceDataFormatPipe;
|
|
47814
|
+
exports.MyDriveService = MyDriveService;
|
|
48045
47815
|
exports.NodeService = NodeService;
|
|
48046
47816
|
exports.NotFoundComponent = NotFoundComponent;
|
|
48047
47817
|
exports.NotificationService = NotificationService;
|
|
@@ -48049,7 +47819,6 @@
|
|
|
48049
47819
|
exports.NumberCompareValidator = NumberCompareValidator;
|
|
48050
47820
|
exports.NumberOnlyValidator = NumberOnlyValidator;
|
|
48051
47821
|
exports.NumberRangeControlSchema = NumberRangeControlSchema;
|
|
48052
|
-
exports.OrganizationBaseService = OrganizationBaseService;
|
|
48053
47822
|
exports.OrganizationFormatPipe = OrganizationFormatPipe;
|
|
48054
47823
|
exports.OrganizationNameFormatPipe = OrganizationNameFormatPipe;
|
|
48055
47824
|
exports.OrganizationPickerControlSchema = OrganizationPickerControlSchema;
|
|
@@ -48091,6 +47860,7 @@
|
|
|
48091
47860
|
exports.SchemaBase = SchemaBase;
|
|
48092
47861
|
exports.SecurePipe = SecurePipe;
|
|
48093
47862
|
exports.ServiceFileUploadComponent = ServiceFileUploadComponent;
|
|
47863
|
+
exports.ServiceRequestModel = ServiceRequestModel;
|
|
48094
47864
|
exports.SessionTypes = SessionTypes;
|
|
48095
47865
|
exports.SignalRService = SignalRService;
|
|
48096
47866
|
exports.SimpleDicItem = SimpleDicItem;
|
|
@@ -48293,29 +48063,27 @@
|
|
|
48293
48063
|
exports.ɵd = ExceptionHandlerService;
|
|
48294
48064
|
exports.ɵda = TnAppNotificationListComponent;
|
|
48295
48065
|
exports.ɵdb = TnAppNotificationComponent;
|
|
48296
|
-
exports.ɵdc =
|
|
48297
|
-
exports.ɵdd =
|
|
48298
|
-
exports.ɵde =
|
|
48299
|
-
exports.ɵdf =
|
|
48300
|
-
exports.ɵdg =
|
|
48301
|
-
exports.ɵdh =
|
|
48302
|
-
exports.ɵdi =
|
|
48303
|
-
exports.ɵdj =
|
|
48304
|
-
exports.ɵdk =
|
|
48305
|
-
exports.ɵdl =
|
|
48306
|
-
exports.ɵdm =
|
|
48307
|
-
exports.ɵdn =
|
|
48308
|
-
exports.ɵdo =
|
|
48309
|
-
exports.ɵdp =
|
|
48310
|
-
exports.ɵdq =
|
|
48311
|
-
exports.ɵdr =
|
|
48312
|
-
exports.ɵds =
|
|
48313
|
-
exports.ɵdt =
|
|
48314
|
-
exports.ɵdu =
|
|
48315
|
-
exports.ɵdv =
|
|
48316
|
-
exports.ɵdw =
|
|
48317
|
-
exports.ɵdx = LogInterceptor;
|
|
48318
|
-
exports.ɵdy = PermissionUtilsInterceptor;
|
|
48066
|
+
exports.ɵdc = FolderFormComponent;
|
|
48067
|
+
exports.ɵdd = FileFormComponent;
|
|
48068
|
+
exports.ɵde = FileViewerComponent;
|
|
48069
|
+
exports.ɵdf = FileVersionListComponent;
|
|
48070
|
+
exports.ɵdg = WorkflowHistoryComponent;
|
|
48071
|
+
exports.ɵdh = EntityWorkflowHistoryService;
|
|
48072
|
+
exports.ɵdi = WorkflowHistoryDialogComponent;
|
|
48073
|
+
exports.ɵdj = WorkflowHistoryNewComponent;
|
|
48074
|
+
exports.ɵdk = WorkflowSettingComponent;
|
|
48075
|
+
exports.ɵdl = EntityWorkflowSettingService;
|
|
48076
|
+
exports.ɵdm = WorkflowSettingDialogComponent;
|
|
48077
|
+
exports.ɵdn = QrCodeGeneratorComponent;
|
|
48078
|
+
exports.ɵdo = AccessDeniedV1Component;
|
|
48079
|
+
exports.ɵdp = AddNewsComponent;
|
|
48080
|
+
exports.ɵdq = ArticleService;
|
|
48081
|
+
exports.ɵdr = NewsCategoryService;
|
|
48082
|
+
exports.ɵds = SignatureDetailComponent;
|
|
48083
|
+
exports.ɵdt = CheckReadyComponent;
|
|
48084
|
+
exports.ɵdu = SendAccessTokenInterceptor;
|
|
48085
|
+
exports.ɵdv = LogInterceptor;
|
|
48086
|
+
exports.ɵdw = PermissionUtilsInterceptor;
|
|
48319
48087
|
exports.ɵe = CanBo_HoSoService;
|
|
48320
48088
|
exports.ɵf = AfterViewCheckedComponent;
|
|
48321
48089
|
exports.ɵg = AdvanceSearchComponent;
|