tnx-shared 5.0.76 → 5.0.77
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 +1032 -892
- 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 +25 -38
- package/classes/form-schema.d.ts.map +1 -1
- package/classes/public-function.d.ts +1 -1
- package/components/address/address.component.d.ts.map +1 -1
- package/components/address-new/address-new.component.d.ts +37 -0
- package/components/address-new/address-new.component.d.ts.map +1 -0
- package/components/address-new/address-new.component.ngfactory.d.ts.map +1 -0
- package/components/address-new/address-new.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/components/address-new/models/don-vi-hanh-chinh.d.ts +6 -0
- package/components/address-new/models/don-vi-hanh-chinh.d.ts.map +1 -0
- package/components/address-new/services/address.service.d.ts +8 -0
- package/components/address-new/services/address.service.d.ts.map +1 -0
- package/components/address-new/services/address.service.ngfactory.d.ts.map +1 -0
- 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 +2 -2
- 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 +3 -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 +2 -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/file-upload/file-upload.component.d.ts +3 -0
- package/components/file-upload/file-upload.component.d.ts.map +1 -1
- package/components/mask/mask.component.d.ts +0 -2
- package/components/mask/mask.component.d.ts.map +1 -1
- package/components/service-file-upload/service-file-upload.component.d.ts +3 -0
- package/components/service-file-upload/service-file-upload.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 +29 -34
- package/esm2015/components/address/address.component.js +10 -4
- package/esm2015/components/address-new/address-new.component.js +224 -0
- package/esm2015/components/address-new/models/don-vi-hanh-chinh.js +8 -0
- package/esm2015/components/address-new/services/address.service.js +25 -0
- 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 +11 -10
- 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 +155 -14
- package/esm2015/components/file-explorer/services/download-link.service.js +4 -1
- package/esm2015/components/file-explorer/services/file-explorer.service.js +21 -7
- package/esm2015/components/file-explorer/services/file-object.service.js +18 -1
- package/esm2015/components/file-explorer/signature-detail/signature-detail.component.js +66 -0
- package/esm2015/components/file-upload/file-upload.component.js +34 -2
- package/esm2015/components/mask/mask.component.js +4 -8
- package/esm2015/components/service-file-upload/service-file-upload.component.js +32 -2
- 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 +94 -94
- package/esm2015/tnx-shared.module.js +6 -2
- package/fesm2015/tnx-shared.js +693 -536
- 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 +93 -93
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +3 -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,7 @@
|
|
|
28
28
|
|
|
29
29
|
var stringify__default = /*#__PURE__*/_interopDefaultLegacy(stringify);
|
|
30
30
|
var moment___namespace = /*#__PURE__*/_interopNamespace(moment_);
|
|
31
|
+
var FileSaver__default = /*#__PURE__*/_interopDefaultLegacy(FileSaver);
|
|
31
32
|
var printJS___namespace = /*#__PURE__*/_interopNamespace(printJS_);
|
|
32
33
|
var JWT___namespace = /*#__PURE__*/_interopNamespace(JWT_);
|
|
33
34
|
var jQuery___namespace = /*#__PURE__*/_interopNamespace(jQuery_);
|
|
@@ -395,8 +396,7 @@
|
|
|
395
396
|
MENU_CHANGED: 'MENU_CHANGED',
|
|
396
397
|
ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER: 'ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER',
|
|
397
398
|
SHOW_WAIT_BOX: 'SHOW_WAIT_BOX',
|
|
398
|
-
SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM'
|
|
399
|
-
NEED_CLEAR_PERMISSION_CACHE: 'NEED_CLEAR_PERMISSION_CACHE'
|
|
399
|
+
SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM'
|
|
400
400
|
};
|
|
401
401
|
ComCtxConstants.ROOT_USMART = {
|
|
402
402
|
SHOW_CONFIG_DATA_DEFAULT: 'SHOW_CONFIG_DATA_DEFAULT',
|
|
@@ -908,7 +908,7 @@
|
|
|
908
908
|
NotifierService.prototype.showWarningByReponse = function (res) {
|
|
909
909
|
var message = res.message;
|
|
910
910
|
if (!message)
|
|
911
|
-
message =
|
|
911
|
+
message = res.error;
|
|
912
912
|
this.showWarning(message);
|
|
913
913
|
};
|
|
914
914
|
NotifierService.prototype.showBusinessError = function (message, key, header, life) {
|
|
@@ -2361,14 +2361,6 @@
|
|
|
2361
2361
|
errorDetail: err
|
|
2362
2362
|
};
|
|
2363
2363
|
};
|
|
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
2364
|
return CommonService;
|
|
2373
2365
|
}());
|
|
2374
2366
|
CommonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CommonService_Factory() { return new CommonService(i0.ɵɵinject(ModuleConfigService)); }, token: CommonService, providedIn: "root" });
|
|
@@ -3254,11 +3246,7 @@
|
|
|
3254
3246
|
EnumWorkflowCoreCodeSettingKey["MAC_DINH"] = "workflowCoreTrinhKy";
|
|
3255
3247
|
EnumWorkflowCoreCodeSettingKey["PHE_DUYET_2_BUOC"] = "workflowCoreTrinhKy2Buoc";
|
|
3256
3248
|
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 = {}));
|
|
3249
|
+
})(exports.EnumWorkflowCoreCodeSettingKey || (exports.EnumWorkflowCoreCodeSettingKey = {}));
|
|
3262
3250
|
|
|
3263
3251
|
var ModelSchema = /** @class */ (function () {
|
|
3264
3252
|
function ModelSchema(init) {
|
|
@@ -3334,7 +3322,6 @@
|
|
|
3334
3322
|
this.function = new CrudListCustomFunction();
|
|
3335
3323
|
this.popupHeader = '';
|
|
3336
3324
|
this.popupSize = new PopupSize();
|
|
3337
|
-
this.showMenuButtons = true;
|
|
3338
3325
|
this.getCustomDataTrinhKy = function (rowData) { return ({}); };
|
|
3339
3326
|
this.getLabelButtonTrinhKy = function (rowData) { return 'Trình ký'; };
|
|
3340
3327
|
this.checkReadyToTrinhKy = function () { return true; };
|
|
@@ -3649,7 +3636,6 @@
|
|
|
3649
3636
|
_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
3637
|
_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
3638
|
_this.fireCallBackInside = true;
|
|
3652
|
-
_this.coreVersion = exports.EnumCoreVersion.V5;
|
|
3653
3639
|
_this.funcCompare = function (item, value) { return item[_this.valueField] == value; };
|
|
3654
3640
|
for (var key in init) {
|
|
3655
3641
|
_this[key] = init[key];
|
|
@@ -3703,7 +3689,6 @@
|
|
|
3703
3689
|
_this.prefix = '';
|
|
3704
3690
|
_this.suffix = '';
|
|
3705
3691
|
_this.decimalPlaces = 2;
|
|
3706
|
-
_this.thousandSeperator = '.';
|
|
3707
3692
|
for (var key in init) {
|
|
3708
3693
|
_this[key] = init[key];
|
|
3709
3694
|
}
|
|
@@ -3883,6 +3868,8 @@
|
|
|
3883
3868
|
_this.mode = exports.FileManagerMode.multiple;
|
|
3884
3869
|
_this.layout = exports.EnumFileLayout.LIST;
|
|
3885
3870
|
_this.readonly = false;
|
|
3871
|
+
_this.signonly = false;
|
|
3872
|
+
_this.uploadOnly = false;
|
|
3886
3873
|
// Trường hợp ở trong form, dùng trường này để lấy
|
|
3887
3874
|
// entityKey từ model.data thay vì truyền vào entityKey
|
|
3888
3875
|
_this.entityKeyField = 'id';
|
|
@@ -4154,6 +4141,34 @@
|
|
|
4154
4141
|
}
|
|
4155
4142
|
return AddressControlSchema;
|
|
4156
4143
|
}(FormControlBase));
|
|
4144
|
+
var AddressNewControlSchema = /** @class */ (function (_super) {
|
|
4145
|
+
__extends(AddressNewControlSchema, _super);
|
|
4146
|
+
function AddressNewControlSchema(init) {
|
|
4147
|
+
var _this = _super.call(this) || this;
|
|
4148
|
+
_this.hideNo = false;
|
|
4149
|
+
_this.hideStreet = false;
|
|
4150
|
+
_this.hideWard = false;
|
|
4151
|
+
_this.hideDistrict = false;
|
|
4152
|
+
_this.requiredNo = true;
|
|
4153
|
+
_this.requiredStreet = true;
|
|
4154
|
+
_this.requiredWard = true;
|
|
4155
|
+
_this.requiredDistrict = true;
|
|
4156
|
+
_this.requiredProvince = true;
|
|
4157
|
+
_this.wardToProvince = true;
|
|
4158
|
+
_this.noWidth = 1;
|
|
4159
|
+
_this.streetWidth = 3;
|
|
4160
|
+
_this.wardWidth = 3;
|
|
4161
|
+
_this.districtWidth = 2;
|
|
4162
|
+
_this.provinceWidth = 3;
|
|
4163
|
+
_this.showInBox = false;
|
|
4164
|
+
_this.hideHolder = true;
|
|
4165
|
+
for (var key in init) {
|
|
4166
|
+
_this[key] = init[key];
|
|
4167
|
+
}
|
|
4168
|
+
return _this;
|
|
4169
|
+
}
|
|
4170
|
+
return AddressNewControlSchema;
|
|
4171
|
+
}(FormControlBase));
|
|
4157
4172
|
var VanBanPickerControlSchema = /** @class */ (function (_super) {
|
|
4158
4173
|
__extends(VanBanPickerControlSchema, _super);
|
|
4159
4174
|
function VanBanPickerControlSchema(init) {
|
|
@@ -4497,7 +4512,6 @@
|
|
|
4497
4512
|
DataType["decimal"] = "decimal";
|
|
4498
4513
|
DataType["boolean"] = "boolean";
|
|
4499
4514
|
DataType["enum"] = "enum";
|
|
4500
|
-
DataType["currency"] = "currency";
|
|
4501
4515
|
})(exports.DataType || (exports.DataType = {}));
|
|
4502
4516
|
(function (ControlType) {
|
|
4503
4517
|
ControlType["dropdown"] = "dropdown";
|
|
@@ -4569,34 +4583,7 @@
|
|
|
4569
4583
|
(function (ExportAllMode) {
|
|
4570
4584
|
ExportAllMode[ExportAllMode["ManualGetData"] = 0] = "ManualGetData";
|
|
4571
4585
|
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 = {}));
|
|
4586
|
+
})(exports.ExportAllMode || (exports.ExportAllMode = {}));
|
|
4600
4587
|
|
|
4601
4588
|
var _a;
|
|
4602
4589
|
(function (WorkflowCoreStatusEnum) {
|
|
@@ -6038,24 +6025,14 @@
|
|
|
6038
6025
|
if (model.hasOwnProperty(sourceField)) {
|
|
6039
6026
|
valueFilter = model[sourceField];
|
|
6040
6027
|
if (canAccessSubField(valueFilter)) {
|
|
6041
|
-
|
|
6042
|
-
valueFilter = valueFilter.map(function (x) { return x[subField]; });
|
|
6043
|
-
}
|
|
6044
|
-
else {
|
|
6045
|
-
valueFilter = valueFilter[subField];
|
|
6046
|
-
}
|
|
6028
|
+
valueFilter = valueFilter[subField];
|
|
6047
6029
|
}
|
|
6048
6030
|
}
|
|
6049
6031
|
else if (rootModel) {
|
|
6050
6032
|
if (rootModel.hasOwnProperty(sourceField)) {
|
|
6051
6033
|
valueFilter = rootModel[sourceField];
|
|
6052
6034
|
if (canAccessSubField(valueFilter)) {
|
|
6053
|
-
|
|
6054
|
-
valueFilter = valueFilter.map(function (x) { return x[subField]; });
|
|
6055
|
-
}
|
|
6056
|
-
else {
|
|
6057
|
-
valueFilter = valueFilter[subField];
|
|
6058
|
-
}
|
|
6035
|
+
valueFilter = valueFilter[subField];
|
|
6059
6036
|
}
|
|
6060
6037
|
}
|
|
6061
6038
|
else {
|
|
@@ -6081,12 +6058,7 @@
|
|
|
6081
6058
|
finally { if (e_1) throw e_1.error; }
|
|
6082
6059
|
}
|
|
6083
6060
|
if (canAccessSubField(temp)) {
|
|
6084
|
-
|
|
6085
|
-
valueFilter = temp.map(function (x) { return x[subField]; });
|
|
6086
|
-
}
|
|
6087
|
-
else {
|
|
6088
|
-
valueFilter = temp[subField];
|
|
6089
|
-
}
|
|
6061
|
+
valueFilter = temp[subField];
|
|
6090
6062
|
}
|
|
6091
6063
|
}
|
|
6092
6064
|
}
|
|
@@ -6099,9 +6071,6 @@
|
|
|
6099
6071
|
valueFilter = tmpFilter.funcGetValue(valueFilter);
|
|
6100
6072
|
}
|
|
6101
6073
|
tmpFilter.value = JSON.stringify(valueFilter);
|
|
6102
|
-
if (tmpFilter.modifyValue) {
|
|
6103
|
-
valueFilter = tmpFilter.modifyValue(valueFilter);
|
|
6104
|
-
}
|
|
6105
6074
|
tmpFilter.filters = [];
|
|
6106
6075
|
if (filter.logic && filter.filters) {
|
|
6107
6076
|
filter.filters.forEach(function (f) { return _this.deQuyReplaceValue(tmpFilter.filters, f, model, rootModel); });
|
|
@@ -6252,7 +6221,6 @@
|
|
|
6252
6221
|
});
|
|
6253
6222
|
};
|
|
6254
6223
|
CrudService.prototype.mergeRefDataToDatasource = function (dataSource, schema, data) {
|
|
6255
|
-
data !== null && data !== void 0 ? data : (data = []);
|
|
6256
6224
|
var field = schema.field;
|
|
6257
6225
|
var funcGetLabel = function (item) { return item[schema.displayField] || item['label']; };
|
|
6258
6226
|
if (schema.funcGetLabel) {
|
|
@@ -6545,24 +6513,6 @@
|
|
|
6545
6513
|
});
|
|
6546
6514
|
return this.postGridInfo(apiUrl, gridInfo);
|
|
6547
6515
|
};
|
|
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
6516
|
BaseService.prototype.getAllByGridInfo = function (gridInfo, plusUrl) {
|
|
6567
6517
|
if (plusUrl === void 0) { plusUrl = ''; }
|
|
6568
6518
|
var apiUrl = this.apiGetAll;
|
|
@@ -7243,11 +7193,11 @@
|
|
|
7243
7193
|
return this._serviceUri + "/DownloadLink/" + hash;
|
|
7244
7194
|
};
|
|
7245
7195
|
FileExplorerService.prototype.getDownloadForSignUrl = function (hash) {
|
|
7246
|
-
return this._serviceUri + "/
|
|
7196
|
+
return this._serviceUri + "/DownloadLink/downloadforsign/" + hash;
|
|
7247
7197
|
};
|
|
7248
7198
|
FileExplorerService.prototype.generateLinkDownload = function (model) {
|
|
7249
7199
|
var _this = this;
|
|
7250
|
-
var svUrl = this._serviceUri + "/
|
|
7200
|
+
var svUrl = this._serviceUri + "/DownloadLink/GenerateDownloadLink";
|
|
7251
7201
|
if (model.isFileVersion && !model.fileVersionId) {
|
|
7252
7202
|
model.fileVersionId = model.fileId;
|
|
7253
7203
|
}
|
|
@@ -7277,7 +7227,7 @@
|
|
|
7277
7227
|
this._http.get(url, { responseType: 'blob' })
|
|
7278
7228
|
.toPromise()
|
|
7279
7229
|
.then(function (rs) {
|
|
7280
|
-
|
|
7230
|
+
FileSaver__default['default'].saveAs(rs, fileName);
|
|
7281
7231
|
})
|
|
7282
7232
|
.catch(function (err) {
|
|
7283
7233
|
_this._notifierService.showWarning('Lỗi tải file');
|
|
@@ -7439,13 +7389,13 @@
|
|
|
7439
7389
|
return regex.test(ext);
|
|
7440
7390
|
};
|
|
7441
7391
|
FileExplorerService.prototype.saveSignedFile = function (data) {
|
|
7442
|
-
return this._http.post(this._serviceUri + "/
|
|
7392
|
+
return this._http.post(this._serviceUri + "/KySoFile/SaveSignedFile", data).toPromise();
|
|
7443
7393
|
};
|
|
7444
7394
|
FileExplorerService.prototype.getSignatureInfoByFileId = function (fileId) {
|
|
7445
|
-
return this._http.get(this._serviceUri + "/
|
|
7395
|
+
return this._http.get(this._serviceUri + "/KySoFile/GetListSignatureByFileId?fileId=" + fileId).toPromise();
|
|
7446
7396
|
};
|
|
7447
7397
|
FileExplorerService.prototype.getSignatureInfoByFileVersionId = function (fileVersionId) {
|
|
7448
|
-
return this._http.get(this._serviceUri + "/
|
|
7398
|
+
return this._http.get(this._serviceUri + "/KySoFile/GetListSignatureByFileVersionId?fileVersionId=" + fileVersionId).toPromise();
|
|
7449
7399
|
};
|
|
7450
7400
|
FileExplorerService.prototype.getUploadFileVersionApiUrl = function () {
|
|
7451
7401
|
return this._serviceUri + "/FileVersion/SaveVersionOnEdit";
|
|
@@ -7503,6 +7453,20 @@
|
|
|
7503
7453
|
var svUrl = this._serviceUri + "/FileObject/CreateServiceFileAnonymous";
|
|
7504
7454
|
return this._http.post(svUrl, serviceFileObjectDTO).pipe(operators.catchError(function (err) { return _this.handleError(err); })).toPromise();
|
|
7505
7455
|
};
|
|
7456
|
+
FileExplorerService.prototype.needConvertBeforeSign = function (fileName) {
|
|
7457
|
+
if (fileName.lastIndexOf('.') === -1) {
|
|
7458
|
+
return false;
|
|
7459
|
+
}
|
|
7460
|
+
var fileType = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
|
|
7461
|
+
if ((/(doc|docx|dot|dotm|dotx|xls|xlsx|ppt|pptx)$/i).test(fileType)) {
|
|
7462
|
+
return true;
|
|
7463
|
+
}
|
|
7464
|
+
return false;
|
|
7465
|
+
};
|
|
7466
|
+
FileExplorerService.prototype.changeFileExtension = function (fileName, newExtension) {
|
|
7467
|
+
var arr = fileName.split('.');
|
|
7468
|
+
return fileName.replace("." + arr[arr.length - 1], "." + newExtension);
|
|
7469
|
+
};
|
|
7506
7470
|
return FileExplorerService;
|
|
7507
7471
|
}());
|
|
7508
7472
|
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 +7914,9 @@
|
|
|
7950
7914
|
});
|
|
7951
7915
|
return promise;
|
|
7952
7916
|
};
|
|
7917
|
+
DownloadLinkService.prototype.getDownloadForSignUrl = function (hash) {
|
|
7918
|
+
return this.serviceUri + "/DownloadForSign/" + hash;
|
|
7919
|
+
};
|
|
7953
7920
|
return DownloadLinkService;
|
|
7954
7921
|
}(BaseService));
|
|
7955
7922
|
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 +8908,6 @@
|
|
|
8941
8908
|
}
|
|
8942
8909
|
else {
|
|
8943
8910
|
this._applicationContext.getRootContext().replaySubscribeOnce(ComCtxConstants.ROOT.USER_READY, function (rs) {
|
|
8944
|
-
var firstTimeLogin = rs;
|
|
8945
8911
|
var accessToken = _this._oauthService.getAccessToken();
|
|
8946
8912
|
var decoded = JWT.default(accessToken);
|
|
8947
8913
|
// 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 +8949,7 @@
|
|
|
8983
8949
|
localStorage.setItem(_this.CURRENT_USER_KEY, JSON.stringify(user));
|
|
8984
8950
|
}
|
|
8985
8951
|
_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
|
-
}
|
|
8952
|
+
_this._applicationContext.getRootContext().fireReplayEvent(ComCtxConstants.ROOT.USER_LOADED, true);
|
|
8992
8953
|
}, function (err) {
|
|
8993
8954
|
});
|
|
8994
8955
|
});
|
|
@@ -9548,12 +9509,9 @@
|
|
|
9548
9509
|
_this.delayCheckPermissions = [];
|
|
9549
9510
|
_this.ignoreAdmin = false;
|
|
9550
9511
|
_this.appCode = null;
|
|
9551
|
-
if (_moduleConfigService.getConfig().environment.authenticationSettings.coreVersion == 'v4') {
|
|
9552
|
-
_this.serviceUri = _moduleConfigService.getConfig().environment.apiDomain.authorizationEndpoint + "/permission";
|
|
9553
|
-
}
|
|
9554
9512
|
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.authorizationEndpoint;
|
|
9555
|
-
_this.appCode = _this._moduleConfigService.getConfig().appCode;
|
|
9556
9513
|
_this.ignoreAdmin = _this._moduleConfigService.getConfig().environment.isIgnoreAdmin;
|
|
9514
|
+
_this.appCode = _this._moduleConfigService.getConfig().appCode;
|
|
9557
9515
|
return _this;
|
|
9558
9516
|
}
|
|
9559
9517
|
/**
|
|
@@ -9775,10 +9733,6 @@
|
|
|
9775
9733
|
}
|
|
9776
9734
|
});
|
|
9777
9735
|
};
|
|
9778
|
-
PermissionService.prototype.clearPermissionCache = function (lstModule) {
|
|
9779
|
-
var url = this.serviceUri + "/ClearPermissionCache";
|
|
9780
|
-
return this.defaultPost(url, lstModule);
|
|
9781
|
-
};
|
|
9782
9736
|
return PermissionService;
|
|
9783
9737
|
}(BaseService));
|
|
9784
9738
|
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 +10107,7 @@
|
|
|
10153
10107
|
if (service == undefined) {
|
|
10154
10108
|
(this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow history');
|
|
10155
10109
|
}
|
|
10156
|
-
this.serviceUri = service.endPoint + "/
|
|
10110
|
+
this.serviceUri = service.endPoint + "/EntityWorkflowHistory";
|
|
10157
10111
|
};
|
|
10158
10112
|
EntityWorkflowHistoryService.prototype.getLastHistory = function (tableName, filters) {
|
|
10159
10113
|
if (filters === void 0) { filters = []; }
|
|
@@ -10161,7 +10115,7 @@
|
|
|
10161
10115
|
if (service == undefined) {
|
|
10162
10116
|
(this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow history');
|
|
10163
10117
|
}
|
|
10164
|
-
var url = service.endPoint + "/
|
|
10118
|
+
var url = service.endPoint + "/EntityWorkflowHistory/GetLastByFilter";
|
|
10165
10119
|
var gridInfo = {
|
|
10166
10120
|
pageInfo: {
|
|
10167
10121
|
page: 1,
|
|
@@ -10318,7 +10272,7 @@
|
|
|
10318
10272
|
(this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity workflow setting');
|
|
10319
10273
|
}
|
|
10320
10274
|
return new Promise(function (resolve, reject) {
|
|
10321
|
-
_this.defaultPost(service.endPoint + "/
|
|
10275
|
+
_this.defaultPost(service.endPoint + "/EntityWorkflowSetting/GetSetting/" + service.entityName, {})
|
|
10322
10276
|
.then(function (res) {
|
|
10323
10277
|
if (res.success) {
|
|
10324
10278
|
var itemSetting = res.data;
|
|
@@ -10403,11 +10357,11 @@
|
|
|
10403
10357
|
};
|
|
10404
10358
|
EntityWorkflowSettingService.prototype.saveSetting = function (settingKey, data) {
|
|
10405
10359
|
var service = this.serviceManagers[settingKey];
|
|
10406
|
-
return this.defaultPost(service.endPoint + "/
|
|
10360
|
+
return this.defaultPost(service.endPoint + "/EntityWorkflowSetting/SaveSetting/" + service.entityName, data);
|
|
10407
10361
|
};
|
|
10408
10362
|
EntityWorkflowSettingService.prototype.removeSetting = function (settingKey) {
|
|
10409
10363
|
var service = this.serviceManagers[settingKey];
|
|
10410
|
-
return this.defaultPost(service.endPoint + "/
|
|
10364
|
+
return this.defaultPost(service.endPoint + "/EntityWorkflowSetting/RemoveSetting/" + service.entityName, {});
|
|
10411
10365
|
};
|
|
10412
10366
|
return EntityWorkflowSettingService;
|
|
10413
10367
|
}(BaseService));
|
|
@@ -11221,37 +11175,25 @@
|
|
|
11221
11175
|
});
|
|
11222
11176
|
});
|
|
11223
11177
|
};
|
|
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
11178
|
DataListBase.prototype._edit = function (rowData, scopeDataEdit) {
|
|
11232
11179
|
if (scopeDataEdit === void 0) { scopeDataEdit = {}; }
|
|
11233
11180
|
return __awaiter(this, void 0, void 0, function () {
|
|
11234
|
-
var
|
|
11181
|
+
var flashShow;
|
|
11235
11182
|
return __generator(this, function (_a) {
|
|
11236
11183
|
switch (_a.label) {
|
|
11237
|
-
case 0:
|
|
11238
|
-
case 1:
|
|
11239
|
-
resultValidate = _a.sent();
|
|
11240
|
-
if (!resultValidate) {
|
|
11241
|
-
return [2 /*return*/];
|
|
11242
|
-
}
|
|
11184
|
+
case 0:
|
|
11243
11185
|
flashShow = rowData[KeyFlashShow];
|
|
11244
11186
|
delete rowData[KeyFlashShow];
|
|
11245
11187
|
this.formModel.formState = exports.FormState.EDIT;
|
|
11246
11188
|
return [4 /*yield*/, this.beforeEdit()];
|
|
11247
|
-
case
|
|
11189
|
+
case 1:
|
|
11248
11190
|
_a.sent();
|
|
11249
11191
|
this.setting.popupHeader = "C\u1EADp nh\u1EADt " + this.setting.objectName;
|
|
11250
11192
|
this.setting.maskClass = flashShow ? 'hide' : null;
|
|
11251
11193
|
this.scopeDataEdit = scopeDataEdit;
|
|
11252
11194
|
this.formModel.data = this.cloneData(rowData);
|
|
11253
11195
|
return [4 /*yield*/, this.modifyEditModel(rowData)];
|
|
11254
|
-
case
|
|
11196
|
+
case 2:
|
|
11255
11197
|
_a.sent();
|
|
11256
11198
|
this.formModel.data[KeyFlashShow] = flashShow;
|
|
11257
11199
|
this.showDetailForm = true;
|
|
@@ -11282,56 +11224,34 @@
|
|
|
11282
11224
|
DataListBase.prototype.getPromiseDeleteItem = function (rowData) {
|
|
11283
11225
|
return this.setting.baseService.delete(rowData.id);
|
|
11284
11226
|
};
|
|
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
11227
|
DataListBase.prototype._delete = function (rowData) {
|
|
11293
|
-
|
|
11294
|
-
|
|
11295
|
-
|
|
11296
|
-
|
|
11297
|
-
|
|
11298
|
-
|
|
11299
|
-
|
|
11300
|
-
|
|
11228
|
+
var _this = this;
|
|
11229
|
+
if (rowData.__disableDelete) {
|
|
11230
|
+
return;
|
|
11231
|
+
}
|
|
11232
|
+
this._notifierService.showDeleteConfirm().then(function (rs) {
|
|
11233
|
+
if (!rs) {
|
|
11234
|
+
return;
|
|
11235
|
+
}
|
|
11236
|
+
if (_this.setting.baseService) {
|
|
11237
|
+
_this.getPromiseDeleteItem(rowData)
|
|
11238
|
+
.then(function (response) {
|
|
11239
|
+
if (response.success) {
|
|
11240
|
+
if (_this.setting.showVersionButton) {
|
|
11241
|
+
_this.context.fireEvent(ComCtxConstants.COMMON.RELOAD_DATA_VERSION, {}, true);
|
|
11301
11242
|
}
|
|
11302
|
-
|
|
11303
|
-
|
|
11304
|
-
resultValidate = _a.sent();
|
|
11305
|
-
if (!resultValidate) {
|
|
11306
|
-
return [2 /*return*/];
|
|
11243
|
+
else {
|
|
11244
|
+
_this._triggerProcessData();
|
|
11307
11245
|
}
|
|
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
|
-
});
|
|
11246
|
+
_this._notifierService.showDeleteDataSuccess();
|
|
11247
|
+
}
|
|
11248
|
+
else {
|
|
11249
|
+
_this._notifierService.showWarningByReponse(response);
|
|
11250
|
+
}
|
|
11251
|
+
}, function (error) {
|
|
11252
|
+
_this._notifierService.showDeleteDataError();
|
|
11253
|
+
});
|
|
11254
|
+
}
|
|
11335
11255
|
});
|
|
11336
11256
|
};
|
|
11337
11257
|
DataListBase.prototype.getPromiseDeleteItems = function (items) {
|
|
@@ -11672,7 +11592,7 @@
|
|
|
11672
11592
|
arrPromiseDontNeedWait = [];
|
|
11673
11593
|
arrSchemaDontNeedWait = [];
|
|
11674
11594
|
_loop_1 = function (schema) {
|
|
11675
|
-
var field, arrValue_1, promise,
|
|
11595
|
+
var field, arrValue_1, promise, result, funcGetLabel_1;
|
|
11676
11596
|
return __generator(this, function (_a) {
|
|
11677
11597
|
switch (_a.label) {
|
|
11678
11598
|
case 0:
|
|
@@ -11707,11 +11627,7 @@
|
|
|
11707
11627
|
promise = schema.baseService.getDataDropdown(schema.groupCode, arrValue_1, this_1.createDropdownOptions(schema));
|
|
11708
11628
|
}
|
|
11709
11629
|
else {
|
|
11710
|
-
|
|
11711
|
-
if (schema.modifyFilter) {
|
|
11712
|
-
schema.modifyFilter(filters);
|
|
11713
|
-
}
|
|
11714
|
-
promise = schema.baseService.getDataDropdownByFilter(filters, this_1.createDropdownOptions(schema));
|
|
11630
|
+
promise = schema.baseService.getDataDropdownByFilter([this_1.newFilter(schema.valueField, exports.Operator.in, arrValue_1)], this_1.createDropdownOptions(schema));
|
|
11715
11631
|
}
|
|
11716
11632
|
if (!(schema.order != null)) return [3 /*break*/, 2];
|
|
11717
11633
|
return [4 /*yield*/, promise];
|
|
@@ -11789,7 +11705,6 @@
|
|
|
11789
11705
|
});
|
|
11790
11706
|
};
|
|
11791
11707
|
DataListBase.prototype.mergeRefDataToDatasource = function (dataSource, schema, data) {
|
|
11792
|
-
data !== null && data !== void 0 ? data : (data = []);
|
|
11793
11708
|
var field = schema.field;
|
|
11794
11709
|
var funcGetLabel = function (item) { return item[schema.displayField] || item['label']; };
|
|
11795
11710
|
if (schema.funcGetLabel) {
|
|
@@ -14838,10 +14753,6 @@
|
|
|
14838
14753
|
});
|
|
14839
14754
|
this.onModelChanged.emit(event);
|
|
14840
14755
|
}
|
|
14841
|
-
else {
|
|
14842
|
-
this._rootNode = new ControlTreeNode(this._modelData, this.formControls);
|
|
14843
|
-
this._rootNode.setCrudForm(this);
|
|
14844
|
-
}
|
|
14845
14756
|
},
|
|
14846
14757
|
enumerable: false,
|
|
14847
14758
|
configurable: true
|
|
@@ -15267,6 +15178,9 @@
|
|
|
15267
15178
|
else if (schema instanceof AddressControlSchema) {
|
|
15268
15179
|
this.controlNeedCheckReady.push(schema);
|
|
15269
15180
|
}
|
|
15181
|
+
else if (schema instanceof AddressNewControlSchema) {
|
|
15182
|
+
this.controlNeedCheckReady.push(schema);
|
|
15183
|
+
}
|
|
15270
15184
|
else if (schema instanceof RadioButtonListControlSchema) {
|
|
15271
15185
|
schema.fireCallBackInside = false;
|
|
15272
15186
|
}
|
|
@@ -15888,6 +15802,8 @@
|
|
|
15888
15802
|
return 'datetimerange';
|
|
15889
15803
|
if (control instanceof AddressControlSchema)
|
|
15890
15804
|
return 'address';
|
|
15805
|
+
if (control instanceof AddressNewControlSchema)
|
|
15806
|
+
return 'address-new';
|
|
15891
15807
|
if (control instanceof DropdownControlSchema)
|
|
15892
15808
|
return 'dropdown';
|
|
15893
15809
|
if (control instanceof EditorControlSchema)
|
|
@@ -15990,6 +15906,8 @@
|
|
|
15990
15906
|
return 'fileManager';
|
|
15991
15907
|
if (control instanceof AddressControlSchema)
|
|
15992
15908
|
return 'address';
|
|
15909
|
+
if (control instanceof AddressNewControlSchema)
|
|
15910
|
+
return 'address-new';
|
|
15993
15911
|
if (control instanceof TextControlSchema
|
|
15994
15912
|
&& (control.dataFormat === 'money'
|
|
15995
15913
|
|| control.dataFormat === 'moneyint')) {
|
|
@@ -16101,24 +16019,18 @@
|
|
|
16101
16019
|
return __generator(this, function (_d) {
|
|
16102
16020
|
switch (_d.label) {
|
|
16103
16021
|
case 0:
|
|
16104
|
-
if (!control.multiple) return [3 /*break*/,
|
|
16022
|
+
if (!control.multiple) return [3 /*break*/, 3];
|
|
16105
16023
|
if (!(eventType == 'hide')) return [3 /*break*/, 2];
|
|
16106
16024
|
return [4 /*yield*/, this.handleFieldValueChange(control, event, 'change', parentModel, parentPath, sourceNode, bubble)];
|
|
16107
16025
|
case 1:
|
|
16108
16026
|
_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:
|
|
16027
|
+
_d.label = 2;
|
|
16028
|
+
case 2: return [3 /*break*/, 5];
|
|
16029
|
+
case 3: return [4 /*yield*/, this.handleFieldValueChange(control, event, eventType, parentModel, parentPath, sourceNode, bubble)];
|
|
16030
|
+
case 4:
|
|
16119
16031
|
_d.sent();
|
|
16120
|
-
_d.label =
|
|
16121
|
-
case
|
|
16032
|
+
_d.label = 5;
|
|
16033
|
+
case 5: return [2 /*return*/];
|
|
16122
16034
|
}
|
|
16123
16035
|
});
|
|
16124
16036
|
});
|
|
@@ -16355,6 +16267,7 @@
|
|
|
16355
16267
|
if (control instanceof DropdownControlSchema
|
|
16356
16268
|
|| control instanceof RadioButtonListControlSchema
|
|
16357
16269
|
|| control instanceof AddressControlSchema
|
|
16270
|
+
|| control instanceof AddressNewControlSchema
|
|
16358
16271
|
|| control instanceof FileManagerControlSchema) {
|
|
16359
16272
|
if (!force && !parentNode.model._status[control.field].ready) {
|
|
16360
16273
|
return [2 /*return*/, true];
|
|
@@ -17071,7 +16984,7 @@
|
|
|
17071
16984
|
CrudFormComponent.decorators = [
|
|
17072
16985
|
{ type: i0.Component, args: [{
|
|
17073
16986
|
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",
|
|
16987
|
+
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=\"'address-new'\">\r\n <address-new-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\" [viewMode]=\"true\"\r\n [(data)]=\"data[control.field]\">\r\n </address-new-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]\" [signonly]=\"control.signonly\"\r\n [readonly]=\"control.disabled\" [rootFolderName]=\"control.rootFolderName || control.label\"\r\n [layout]=\"control.layout\" [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=\"'address-new'\">\r\n <address-new-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-new-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>",
|
|
17075
16988
|
providers: [ComponentContextService],
|
|
17076
16989
|
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
16990
|
},] }
|
|
@@ -18254,7 +18167,7 @@
|
|
|
18254
18167
|
this.onSaved.emit();
|
|
18255
18168
|
return [3 /*break*/, 3];
|
|
18256
18169
|
case 2:
|
|
18257
|
-
this.handleInsertError(
|
|
18170
|
+
this.handleInsertError();
|
|
18258
18171
|
_a.label = 3;
|
|
18259
18172
|
case 3: return [2 /*return*/];
|
|
18260
18173
|
}
|
|
@@ -18274,7 +18187,7 @@
|
|
|
18274
18187
|
DataFormBase.prototype.getPromiseActionInsert = function () {
|
|
18275
18188
|
return this.setting.baseService.post(this.model.data, this.insertPlusUrl);
|
|
18276
18189
|
};
|
|
18277
|
-
DataFormBase.prototype.handleInsertError = function (
|
|
18190
|
+
DataFormBase.prototype.handleInsertError = function () {
|
|
18278
18191
|
};
|
|
18279
18192
|
DataFormBase.prototype.onUpdate = function () {
|
|
18280
18193
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -18295,7 +18208,7 @@
|
|
|
18295
18208
|
this.onSaved.emit();
|
|
18296
18209
|
return [3 /*break*/, 3];
|
|
18297
18210
|
case 2:
|
|
18298
|
-
this.handleUpdateError(
|
|
18211
|
+
this.handleUpdateError();
|
|
18299
18212
|
_a.label = 3;
|
|
18300
18213
|
case 3: return [2 /*return*/];
|
|
18301
18214
|
}
|
|
@@ -18312,7 +18225,7 @@
|
|
|
18312
18225
|
});
|
|
18313
18226
|
});
|
|
18314
18227
|
};
|
|
18315
|
-
DataFormBase.prototype.handleUpdateError = function (
|
|
18228
|
+
DataFormBase.prototype.handleUpdateError = function () {
|
|
18316
18229
|
};
|
|
18317
18230
|
DataFormBase.prototype.getPromiseActionUpdate = function () {
|
|
18318
18231
|
return this.setting.baseService.put(this.model.data.id.toString(), this.model.data, this.updatePlusUrl);
|
|
@@ -18511,7 +18424,9 @@
|
|
|
18511
18424
|
label: 'Tỉnh/Thành phố',
|
|
18512
18425
|
required: this.control.required && this.control.requiredProvince,
|
|
18513
18426
|
baseService: this._addressService,
|
|
18514
|
-
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: exports.ENUM_DON_VI_HANH_CHINH.THANH_PHO.toString() }
|
|
18427
|
+
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: exports.ENUM_DON_VI_HANH_CHINH.THANH_PHO.toString() },
|
|
18428
|
+
{ field: 'version', operator: exports.Operator.equal, value: "-1" }
|
|
18429
|
+
],
|
|
18515
18430
|
valueField: 'id',
|
|
18516
18431
|
displayField: 'name',
|
|
18517
18432
|
fieldPlus: 'idRoot',
|
|
@@ -18527,7 +18442,9 @@
|
|
|
18527
18442
|
label: 'Quận/Huyện',
|
|
18528
18443
|
required: this.control.required && this.control.requiredDistrict,
|
|
18529
18444
|
baseService: this._addressService,
|
|
18530
|
-
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: exports.ENUM_DON_VI_HANH_CHINH.QUAN_HUYEN.toString() }
|
|
18445
|
+
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: exports.ENUM_DON_VI_HANH_CHINH.QUAN_HUYEN.toString() },
|
|
18446
|
+
{ field: 'version', operator: exports.Operator.equal, value: "-1" }
|
|
18447
|
+
],
|
|
18531
18448
|
bindingFilters: [{ field: 'parentId', operator: exports.Operator.equal, sourceField: 'idProvince', subField: 'idRoot' }],
|
|
18532
18449
|
valueField: 'id',
|
|
18533
18450
|
displayField: 'name',
|
|
@@ -18542,7 +18459,9 @@
|
|
|
18542
18459
|
label: 'Phường/Xã',
|
|
18543
18460
|
required: this.control.required && this.control.requiredWard,
|
|
18544
18461
|
baseService: this._addressService,
|
|
18545
|
-
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: exports.ENUM_DON_VI_HANH_CHINH.PHUONG_XA.toString() }
|
|
18462
|
+
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: exports.ENUM_DON_VI_HANH_CHINH.PHUONG_XA.toString() },
|
|
18463
|
+
{ field: 'version', operator: exports.Operator.equal, value: "-1" }
|
|
18464
|
+
],
|
|
18546
18465
|
bindingFilters: [{ field: 'parentId', operator: exports.Operator.equal, sourceField: 'idDistrict', subField: 'idRoot' }],
|
|
18547
18466
|
valueField: 'id',
|
|
18548
18467
|
displayField: 'name',
|
|
@@ -18679,6 +18598,266 @@
|
|
|
18679
18598
|
onReady: [{ type: i0.Output }]
|
|
18680
18599
|
};
|
|
18681
18600
|
|
|
18601
|
+
var ENUM_DON_VI_HANH_CHINH;
|
|
18602
|
+
(function (ENUM_DON_VI_HANH_CHINH) {
|
|
18603
|
+
ENUM_DON_VI_HANH_CHINH[ENUM_DON_VI_HANH_CHINH["THANH_PHO"] = 1] = "THANH_PHO";
|
|
18604
|
+
// QUAN_HUYEN = 2,
|
|
18605
|
+
ENUM_DON_VI_HANH_CHINH[ENUM_DON_VI_HANH_CHINH["PHUONG_XA"] = 2] = "PHUONG_XA";
|
|
18606
|
+
ENUM_DON_VI_HANH_CHINH[ENUM_DON_VI_HANH_CHINH["DUONG"] = 3] = "DUONG";
|
|
18607
|
+
})(ENUM_DON_VI_HANH_CHINH || (ENUM_DON_VI_HANH_CHINH = {}));
|
|
18608
|
+
|
|
18609
|
+
var AddressService$1 = /** @class */ (function (_super) {
|
|
18610
|
+
__extends(AddressService, _super);
|
|
18611
|
+
function AddressService(http, injector, _moduleConfigService) {
|
|
18612
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.commonMasterDataEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/Address") || this;
|
|
18613
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.commonMasterDataEndpoint;
|
|
18614
|
+
return _this;
|
|
18615
|
+
}
|
|
18616
|
+
return AddressService;
|
|
18617
|
+
}(BaseService));
|
|
18618
|
+
AddressService$1.ɵprov = i0.ɵɵdefineInjectable({ factory: function AddressService_Factory() { return new AddressService$1(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: AddressService$1, providedIn: "root" });
|
|
18619
|
+
AddressService$1.decorators = [
|
|
18620
|
+
{ type: i0.Injectable, args: [{
|
|
18621
|
+
providedIn: 'root'
|
|
18622
|
+
},] }
|
|
18623
|
+
];
|
|
18624
|
+
AddressService$1.ctorParameters = function () { return [
|
|
18625
|
+
{ type: i1$1.HttpClient },
|
|
18626
|
+
{ type: i0.Injector },
|
|
18627
|
+
{ type: ModuleConfigService }
|
|
18628
|
+
]; };
|
|
18629
|
+
|
|
18630
|
+
var AddressNewComponent = /** @class */ (function (_super) {
|
|
18631
|
+
__extends(AddressNewComponent, _super);
|
|
18632
|
+
function AddressNewComponent(_injector, _addressService, _moduleConfigService, _deviceDetectorService) {
|
|
18633
|
+
var _this = _super.call(this, _injector) || this;
|
|
18634
|
+
_this._injector = _injector;
|
|
18635
|
+
_this._addressService = _addressService;
|
|
18636
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
18637
|
+
_this._deviceDetectorService = _deviceDetectorService;
|
|
18638
|
+
_this.viewMode = false;
|
|
18639
|
+
_this._showSubLabel = true;
|
|
18640
|
+
_this.readyToReload = false;
|
|
18641
|
+
_this._readyStatus = {};
|
|
18642
|
+
_this.onSelect = new i0.EventEmitter();
|
|
18643
|
+
_this.dataChange = new i0.EventEmitter();
|
|
18644
|
+
_this.onReady = new i0.EventEmitter();
|
|
18645
|
+
_this.doNotCheckBaseService = true;
|
|
18646
|
+
return _this;
|
|
18647
|
+
}
|
|
18648
|
+
Object.defineProperty(AddressNewComponent.prototype, "disabled", {
|
|
18649
|
+
set: function (value) {
|
|
18650
|
+
this._disabled = value;
|
|
18651
|
+
this.setDisabledControl();
|
|
18652
|
+
},
|
|
18653
|
+
enumerable: false,
|
|
18654
|
+
configurable: true
|
|
18655
|
+
});
|
|
18656
|
+
Object.defineProperty(AddressNewComponent.prototype, "data", {
|
|
18657
|
+
set: function (value) {
|
|
18658
|
+
if (this._modelData != value && isLiteralObject(value))
|
|
18659
|
+
this._modelData = mergeJSON(this._modelData, value);
|
|
18660
|
+
else if (value == null)
|
|
18661
|
+
this._modelData = {};
|
|
18662
|
+
},
|
|
18663
|
+
enumerable: false,
|
|
18664
|
+
configurable: true
|
|
18665
|
+
});
|
|
18666
|
+
;
|
|
18667
|
+
Object.defineProperty(AddressNewComponent.prototype, "showSubLabel", {
|
|
18668
|
+
set: function (value) {
|
|
18669
|
+
this._showSubLabel = value;
|
|
18670
|
+
this.setShowLabel();
|
|
18671
|
+
},
|
|
18672
|
+
enumerable: false,
|
|
18673
|
+
configurable: true
|
|
18674
|
+
});
|
|
18675
|
+
AddressNewComponent.prototype.ngOnInit = function () {
|
|
18676
|
+
var _this = this;
|
|
18677
|
+
this.control._component = this;
|
|
18678
|
+
_super.prototype.ngOnInit.call(this);
|
|
18679
|
+
// Nếu đã ẩn quận huyện thì phải ẩn luôn cả phường xã
|
|
18680
|
+
// Vì nếu không load dữ liệu sẽ không chuẩn
|
|
18681
|
+
// if (this.control.hideDistrict) {
|
|
18682
|
+
// this.control.hideWard = true;
|
|
18683
|
+
// }
|
|
18684
|
+
this.setting.schema = [
|
|
18685
|
+
new DropdownControlSchema({
|
|
18686
|
+
field: 'idProvince',
|
|
18687
|
+
label: 'Tỉnh/Thành phố',
|
|
18688
|
+
required: this.control.required && this.control.requiredProvince,
|
|
18689
|
+
baseService: this._addressService,
|
|
18690
|
+
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: ENUM_DON_VI_HANH_CHINH.THANH_PHO.toString() },
|
|
18691
|
+
{ field: 'version', operator: exports.Operator.equal, value: "1" }],
|
|
18692
|
+
valueField: 'id',
|
|
18693
|
+
displayField: 'name',
|
|
18694
|
+
fieldPlus: 'idRoot',
|
|
18695
|
+
sortField: 'sort',
|
|
18696
|
+
mdWidth: this.control.provinceWidth,
|
|
18697
|
+
disabled: this._disabled,
|
|
18698
|
+
callbackDataFinish: function (evt) {
|
|
18699
|
+
_this.readyToReload = true;
|
|
18700
|
+
}
|
|
18701
|
+
}),
|
|
18702
|
+
// new DropdownControlSchema({
|
|
18703
|
+
// field: 'idDistrict',
|
|
18704
|
+
// label: 'Quận/Huyện',
|
|
18705
|
+
// required: this.control.required && this.control.requiredDistrict,
|
|
18706
|
+
// baseService: this._addressService,
|
|
18707
|
+
// defaultFilters: [{ field: 'level', operator: Operator.equal, value: ENUM_DON_VI_HANH_CHINH.QUAN_HUYEN.toString() }],
|
|
18708
|
+
// bindingFilters: [{ field: 'parentId', operator: Operator.equal, sourceField: 'idProvince', subField: 'idRoot' }],
|
|
18709
|
+
// valueField: 'id',
|
|
18710
|
+
// displayField: 'name',
|
|
18711
|
+
// fieldPlus: 'idRoot',
|
|
18712
|
+
// sortField: 'sort',
|
|
18713
|
+
// mdWidth: this.control.districtWidth,
|
|
18714
|
+
// disabled: this._disabled,
|
|
18715
|
+
// hidden: this.control.hideDistrict
|
|
18716
|
+
// }),
|
|
18717
|
+
new DropdownControlSchema({
|
|
18718
|
+
field: 'idWard',
|
|
18719
|
+
label: 'Phường/Xã',
|
|
18720
|
+
required: this.control.required && this.control.requiredWard,
|
|
18721
|
+
baseService: this._addressService,
|
|
18722
|
+
defaultFilters: [{ field: 'level', operator: exports.Operator.equal, value: ENUM_DON_VI_HANH_CHINH.PHUONG_XA.toString() },
|
|
18723
|
+
{ field: 'version', operator: exports.Operator.equal, value: "1" }
|
|
18724
|
+
],
|
|
18725
|
+
bindingFilters: [{ field: 'parentId', operator: exports.Operator.equal, sourceField: 'idProvince', subField: 'idRoot' }],
|
|
18726
|
+
valueField: 'id',
|
|
18727
|
+
displayField: 'name',
|
|
18728
|
+
fieldPlus: 'idRoot',
|
|
18729
|
+
sortField: 'sort',
|
|
18730
|
+
mdWidth: this.control.wardWidth,
|
|
18731
|
+
disabled: this._disabled,
|
|
18732
|
+
hidden: this.control.hideWard
|
|
18733
|
+
}),
|
|
18734
|
+
new TextControlSchema({
|
|
18735
|
+
field: 'street',
|
|
18736
|
+
label: 'Đường',
|
|
18737
|
+
required: this.control.required && this.control.requiredStreet,
|
|
18738
|
+
mdWidth: this.control.streetWidth,
|
|
18739
|
+
disabled: this._disabled,
|
|
18740
|
+
hidden: this.control.hideStreet
|
|
18741
|
+
}),
|
|
18742
|
+
new TextControlSchema({
|
|
18743
|
+
field: 'no',
|
|
18744
|
+
label: 'Số nhà',
|
|
18745
|
+
required: this.control.required && this.control.requiredNo,
|
|
18746
|
+
mdWidth: this.control.noWidth,
|
|
18747
|
+
disabled: this._disabled,
|
|
18748
|
+
hidden: this.control.hideNo
|
|
18749
|
+
})
|
|
18750
|
+
];
|
|
18751
|
+
if (this.viewMode) {
|
|
18752
|
+
this.getModelText();
|
|
18753
|
+
}
|
|
18754
|
+
};
|
|
18755
|
+
AddressNewComponent.prototype.setDisabledControl = function () {
|
|
18756
|
+
var disabled = this._disabled ? true : null;
|
|
18757
|
+
this.setting.schema.forEach(function (ctrl) { return ctrl.disabled = disabled; });
|
|
18758
|
+
};
|
|
18759
|
+
AddressNewComponent.prototype.handleValueChange = function (evt) {
|
|
18760
|
+
this.dataChange.emit(this._modelData);
|
|
18761
|
+
this.onSelect.emit(this._modelData);
|
|
18762
|
+
};
|
|
18763
|
+
AddressNewComponent.prototype.handleReady = function (field) {
|
|
18764
|
+
this._readyStatus[field] = true;
|
|
18765
|
+
if (this._readyStatus['idProvince']
|
|
18766
|
+
&& (this.control.hideDistrict || this._readyStatus['idDistrict'])
|
|
18767
|
+
&& (this.control.hideWard || this._readyStatus['idWard'])) {
|
|
18768
|
+
this.onReady.emit(this.control.field);
|
|
18769
|
+
}
|
|
18770
|
+
};
|
|
18771
|
+
AddressNewComponent.prototype.setShowLabel = function () {
|
|
18772
|
+
};
|
|
18773
|
+
AddressNewComponent.prototype.getModelText = function () {
|
|
18774
|
+
var _this = this;
|
|
18775
|
+
var values = [];
|
|
18776
|
+
if (this._modelData.idProvince)
|
|
18777
|
+
values.push(this._modelData.idProvince);
|
|
18778
|
+
if (!this.control.hideDistrict && this._modelData.idDistrict)
|
|
18779
|
+
values.push(this._modelData.idDistrict);
|
|
18780
|
+
if (!this.control.hideWard && this._modelData.idWard)
|
|
18781
|
+
values.push(this._modelData.idWard);
|
|
18782
|
+
if (values.length > 0) {
|
|
18783
|
+
var result_1 = {
|
|
18784
|
+
province: '',
|
|
18785
|
+
district: '',
|
|
18786
|
+
ward: '',
|
|
18787
|
+
street: this._modelData.street,
|
|
18788
|
+
no: this._modelData.no
|
|
18789
|
+
};
|
|
18790
|
+
this._addressService.getAll([
|
|
18791
|
+
this.newFilter('id', exports.Operator.in, values)
|
|
18792
|
+
], 'id,name').then(function (res) { return _this.handleResponse(res, '', function (data) {
|
|
18793
|
+
if (_this._modelData.idProvince) {
|
|
18794
|
+
var province = data.data.find(function (p) { return p.id == _this._modelData.idProvince; });
|
|
18795
|
+
if (province)
|
|
18796
|
+
result_1.province = province.name;
|
|
18797
|
+
}
|
|
18798
|
+
if (!_this.control.hideDistrict && _this._modelData.idDistrict) {
|
|
18799
|
+
var district = data.data.find(function (p) { return p.id == _this._modelData.idDistrict; });
|
|
18800
|
+
if (district)
|
|
18801
|
+
result_1.district = district.name;
|
|
18802
|
+
}
|
|
18803
|
+
if (!_this.control.hideWard && _this._modelData.idWard) {
|
|
18804
|
+
var ward = data.data.find(function (p) { return p.id == _this._modelData.idWard; });
|
|
18805
|
+
if (ward)
|
|
18806
|
+
result_1.ward = ward.name;
|
|
18807
|
+
}
|
|
18808
|
+
_this.setModelText(result_1);
|
|
18809
|
+
}); });
|
|
18810
|
+
}
|
|
18811
|
+
};
|
|
18812
|
+
AddressNewComponent.prototype.setModelText = function (objAddress) {
|
|
18813
|
+
var str = "";
|
|
18814
|
+
if (objAddress.no) {
|
|
18815
|
+
str += ", S\u1ED1 " + objAddress.no;
|
|
18816
|
+
}
|
|
18817
|
+
if (objAddress.street) {
|
|
18818
|
+
str += ", \u0110\u01B0\u1EDDng " + objAddress.street;
|
|
18819
|
+
}
|
|
18820
|
+
if (!this.control.hideDistrict && objAddress.ward) {
|
|
18821
|
+
str += ", " + objAddress.ward;
|
|
18822
|
+
}
|
|
18823
|
+
if (!this.control.hideDistrict && objAddress.district) {
|
|
18824
|
+
str += ", " + objAddress.district;
|
|
18825
|
+
}
|
|
18826
|
+
if (objAddress.province) {
|
|
18827
|
+
str += ", " + objAddress.province;
|
|
18828
|
+
}
|
|
18829
|
+
if (str !== '') {
|
|
18830
|
+
str = str.substring(2).trim();
|
|
18831
|
+
}
|
|
18832
|
+
this.modelString = str;
|
|
18833
|
+
};
|
|
18834
|
+
return AddressNewComponent;
|
|
18835
|
+
}(DataFormBase));
|
|
18836
|
+
AddressNewComponent.decorators = [
|
|
18837
|
+
{ type: i0.Component, args: [{
|
|
18838
|
+
selector: 'address-new-picker',
|
|
18839
|
+
template: "<ng-container *ngIf=\"!viewMode\">\r\n <div\r\n [ngStyle]=\"control.showInBox?{border: '1px solid #ced4da', 'borderRadius': '5px' }: { margin: '-0.5rem -1rem -1rem -1rem' }\">\r\n <crud-form #crudForm [(data)]=\"_modelData\" [setting]=\"setting\" [context]=\"context\" [autoFocus]=\"false\"\r\n (onFormReady)=\"_handleFormReady($event)\" (onChange)=\"handleValueChange($event)\"\r\n (onControlReady)=\"handleReady($event)\">\r\n </crud-form>\r\n </div>\r\n</ng-container>\r\n<ng-container *ngIf=\"viewMode\">\r\n {{modelString}}\r\n</ng-container>",
|
|
18840
|
+
styles: [".control-padding-fix{padding-left:0}@media (max-width:640px){::ng-deep address-new-picker>div{min-width:100%}}"]
|
|
18841
|
+
},] }
|
|
18842
|
+
];
|
|
18843
|
+
AddressNewComponent.ctorParameters = function () { return [
|
|
18844
|
+
{ type: i0.Injector },
|
|
18845
|
+
{ type: AddressService$1 },
|
|
18846
|
+
{ type: ModuleConfigService },
|
|
18847
|
+
{ type: ngxDeviceDetector.DeviceDetectorService }
|
|
18848
|
+
]; };
|
|
18849
|
+
AddressNewComponent.propDecorators = {
|
|
18850
|
+
crudForm: [{ type: i0.ViewChild, args: [CrudFormComponent, { static: false },] }],
|
|
18851
|
+
control: [{ type: i0.Input }],
|
|
18852
|
+
disabled: [{ type: i0.Input }],
|
|
18853
|
+
viewMode: [{ type: i0.Input }],
|
|
18854
|
+
data: [{ type: i0.Input }],
|
|
18855
|
+
showSubLabel: [{ type: i0.Input }],
|
|
18856
|
+
onSelect: [{ type: i0.Output }],
|
|
18857
|
+
dataChange: [{ type: i0.Output }],
|
|
18858
|
+
onReady: [{ type: i0.Output }]
|
|
18859
|
+
};
|
|
18860
|
+
|
|
18682
18861
|
var AfterViewCheckedComponent = /** @class */ (function (_super) {
|
|
18683
18862
|
__extends(AfterViewCheckedComponent, _super);
|
|
18684
18863
|
function AfterViewCheckedComponent(injector) {
|
|
@@ -18944,49 +19123,27 @@
|
|
|
18944
19123
|
AutoCompletePickerComponent.prototype.buildFilterKeyword = function () {
|
|
18945
19124
|
var _this = this;
|
|
18946
19125
|
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
|
-
}
|
|
19126
|
+
this.getFilterOnSearch = function (value) { return _this.newFilter(_this.control.displayField, exports.Operator.contain, value); };
|
|
18953
19127
|
}
|
|
18954
19128
|
else {
|
|
18955
19129
|
this.getFilterOnSearch = function (value) {
|
|
18956
|
-
var e_1, _a
|
|
19130
|
+
var e_1, _a;
|
|
18957
19131
|
var result = new Filter({
|
|
18958
19132
|
logic: 'or',
|
|
18959
19133
|
filters: []
|
|
18960
19134
|
});
|
|
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; }
|
|
19135
|
+
try {
|
|
19136
|
+
for (var _b = __values(_this.fieldSearchText), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
19137
|
+
var fieldSearch = _c.value;
|
|
19138
|
+
result.filters.push(_this.newFilter(fieldSearch, exports.Operator.contain, value));
|
|
18974
19139
|
}
|
|
18975
19140
|
}
|
|
18976
|
-
|
|
19141
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
19142
|
+
finally {
|
|
18977
19143
|
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; }
|
|
19144
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
18989
19145
|
}
|
|
19146
|
+
finally { if (e_1) throw e_1.error; }
|
|
18990
19147
|
}
|
|
18991
19148
|
return result;
|
|
18992
19149
|
};
|
|
@@ -19062,50 +19219,34 @@
|
|
|
19062
19219
|
return __generator(this, function (_a) {
|
|
19063
19220
|
switch (_a.label) {
|
|
19064
19221
|
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
19222
|
filters = [];
|
|
19072
19223
|
if (this.control.multiple) {
|
|
19073
19224
|
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
|
-
}
|
|
19225
|
+
filters.push(this.newFilter(this.control.valueField, exports.Operator.notIn, this.value));
|
|
19080
19226
|
}
|
|
19081
19227
|
}
|
|
19082
19228
|
else {
|
|
19083
19229
|
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
|
-
}
|
|
19230
|
+
filters.push(this.newFilter(this.control.valueField, exports.Operator.notEqual, this.value));
|
|
19090
19231
|
}
|
|
19091
19232
|
}
|
|
19092
19233
|
return [4 /*yield*/, appendDefaultFilter(filters, this.control.defaultFilters)];
|
|
19093
|
-
case
|
|
19234
|
+
case 1:
|
|
19094
19235
|
_a.sent();
|
|
19095
19236
|
if (this.keyword && this.keyword.length > 0) {
|
|
19096
19237
|
filters.push(this.getFilterOnSearch(this.keyword));
|
|
19097
19238
|
}
|
|
19098
|
-
if (!this.control.modifyFilter) return [3 /*break*/,
|
|
19239
|
+
if (!this.control.modifyFilter) return [3 /*break*/, 3];
|
|
19099
19240
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19100
|
-
case
|
|
19241
|
+
case 2:
|
|
19101
19242
|
allow = _a.sent();
|
|
19102
19243
|
if (allow === false) {
|
|
19103
19244
|
this.results = [];
|
|
19104
19245
|
return [2 /*return*/];
|
|
19105
19246
|
}
|
|
19106
|
-
_a.label =
|
|
19107
|
-
case
|
|
19108
|
-
case
|
|
19247
|
+
_a.label = 3;
|
|
19248
|
+
case 3: return [4 /*yield*/, this.control.baseService.getDataDropdownByFilter(filters, this.getDropdownOptions())];
|
|
19249
|
+
case 4:
|
|
19109
19250
|
dataSource = _a.sent();
|
|
19110
19251
|
this.fireEventAfterGetDataDropDown(dataSource);
|
|
19111
19252
|
this.reStructureDataSource(dataSource);
|
|
@@ -19286,17 +19427,9 @@
|
|
|
19286
19427
|
if (!this.control.multiple) return [3 /*break*/, 5];
|
|
19287
19428
|
dataSource = [];
|
|
19288
19429
|
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
|
-
}
|
|
19430
|
+
filters = [
|
|
19431
|
+
this.newFilter(this.control.valueField, exports.Operator.in, this.value)
|
|
19432
|
+
];
|
|
19300
19433
|
if (!this.control.modifyFilter) return [3 /*break*/, 2];
|
|
19301
19434
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19302
19435
|
case 1:
|
|
@@ -19320,17 +19453,9 @@
|
|
|
19320
19453
|
case 5:
|
|
19321
19454
|
dataSource = [];
|
|
19322
19455
|
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
|
-
}
|
|
19456
|
+
filters = [
|
|
19457
|
+
this.newFilter(this.control.valueField, exports.Operator.equal, this.value)
|
|
19458
|
+
];
|
|
19334
19459
|
if (!this.control.modifyFilter) return [3 /*break*/, 7];
|
|
19335
19460
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19336
19461
|
case 6:
|
|
@@ -19375,7 +19500,7 @@
|
|
|
19375
19500
|
}
|
|
19376
19501
|
};
|
|
19377
19502
|
AutoCompletePickerComponent.prototype.reStructureDataSource = function (sources) {
|
|
19378
|
-
var
|
|
19503
|
+
var e_2, _a;
|
|
19379
19504
|
if (sources != null && sources.length > 0) {
|
|
19380
19505
|
var arr = [];
|
|
19381
19506
|
try {
|
|
@@ -19385,12 +19510,12 @@
|
|
|
19385
19510
|
arr.push(item);
|
|
19386
19511
|
}
|
|
19387
19512
|
}
|
|
19388
|
-
catch (
|
|
19513
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
19389
19514
|
finally {
|
|
19390
19515
|
try {
|
|
19391
19516
|
if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);
|
|
19392
19517
|
}
|
|
19393
|
-
finally { if (
|
|
19518
|
+
finally { if (e_2) throw e_2.error; }
|
|
19394
19519
|
}
|
|
19395
19520
|
this.dataSource = arr;
|
|
19396
19521
|
}
|
|
@@ -19420,12 +19545,7 @@
|
|
|
19420
19545
|
if (!this.control.multiple) return [3 /*break*/, 6];
|
|
19421
19546
|
if (!(obj != null && obj.length > 0)) return [3 /*break*/, 4];
|
|
19422
19547
|
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
|
-
}
|
|
19548
|
+
filters.push(this.newFilter(this.control.valueField, exports.Operator.in, obj));
|
|
19429
19549
|
if (!this.control.modifyFilter) return [3 /*break*/, 2];
|
|
19430
19550
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19431
19551
|
case 1:
|
|
@@ -19450,17 +19570,9 @@
|
|
|
19450
19570
|
case 5: return [3 /*break*/, 10];
|
|
19451
19571
|
case 6:
|
|
19452
19572
|
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
|
-
}
|
|
19573
|
+
filters = [
|
|
19574
|
+
this.newFilter(this.control.valueField, exports.Operator.equal, obj)
|
|
19575
|
+
];
|
|
19464
19576
|
if (!this.control.modifyFilter) return [3 /*break*/, 8];
|
|
19465
19577
|
return [4 /*yield*/, this.control.modifyFilter(filters)];
|
|
19466
19578
|
case 7:
|
|
@@ -19536,7 +19648,6 @@
|
|
|
19536
19648
|
AutoCompletePickerComponent.propDecorators = {
|
|
19537
19649
|
control: [{ type: i0.Input }],
|
|
19538
19650
|
disabled: [{ type: i0.Input }],
|
|
19539
|
-
parentPath: [{ type: i0.Input }],
|
|
19540
19651
|
popupSize: [{ type: i0.Input }],
|
|
19541
19652
|
onSelect: [{ type: i0.Output }],
|
|
19542
19653
|
onUnSelect: [{ type: i0.Output }],
|
|
@@ -19655,6 +19766,23 @@
|
|
|
19655
19766
|
FileObjectService.prototype.getScanFileUploadEndpoint = function (correlationId) {
|
|
19656
19767
|
return this.serviceCode + "/CreateScannedFile/" + correlationId;
|
|
19657
19768
|
};
|
|
19769
|
+
FileObjectService.prototype.isTypeFileKySo = function (fileName) {
|
|
19770
|
+
var fileExtension = this.getFileExtension(fileName);
|
|
19771
|
+
if (fileExtension) {
|
|
19772
|
+
fileExtension = fileExtension.toLowerCase();
|
|
19773
|
+
if (fileExtension.indexOf('.') > -1) {
|
|
19774
|
+
var arr = fileExtension.split('.');
|
|
19775
|
+
fileExtension = arr[arr.length - 1];
|
|
19776
|
+
}
|
|
19777
|
+
if ((/(pdf|doc|docx|xls|xlsm|xlsx)$/i).test(fileExtension)) {
|
|
19778
|
+
return true;
|
|
19779
|
+
}
|
|
19780
|
+
}
|
|
19781
|
+
return false;
|
|
19782
|
+
};
|
|
19783
|
+
FileObjectService.prototype.getPublicDownloadLinkByFileId = function (fileId) {
|
|
19784
|
+
return this.serviceUri + "/public/" + fileId + "/download";
|
|
19785
|
+
};
|
|
19658
19786
|
return FileObjectService;
|
|
19659
19787
|
}(BaseService));
|
|
19660
19788
|
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 +20870,13 @@
|
|
|
20742
20870
|
});
|
|
20743
20871
|
});
|
|
20744
20872
|
};
|
|
20745
|
-
MenuService.prototype.renderMenuByAppCode = function (
|
|
20873
|
+
MenuService.prototype.renderMenuByAppCode = function (appCode) {
|
|
20746
20874
|
return __awaiter(this, void 0, void 0, function () {
|
|
20747
20875
|
var menuUrl;
|
|
20748
20876
|
var _this = this;
|
|
20749
20877
|
return __generator(this, function (_a) {
|
|
20750
20878
|
this._menuItems = [];
|
|
20751
20879
|
menuUrl = "assets/menus/" + appCode.toLocaleLowerCase() + ".json";
|
|
20752
|
-
if (scopeName) {
|
|
20753
|
-
menuUrl = "assets/menus/" + scopeName.toLocaleLowerCase() + "/" + appCode.toLocaleLowerCase() + ".json";
|
|
20754
|
-
}
|
|
20755
20880
|
fetch(menuUrl).then(function (rs) { return __awaiter(_this, void 0, void 0, function () {
|
|
20756
20881
|
var menu, _a, _b;
|
|
20757
20882
|
return __generator(this, function (_c) {
|
|
@@ -20905,7 +21030,7 @@
|
|
|
20905
21030
|
// 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
21031
|
funcSetNewTabLink = function (link) { return "/" + appCodeLowerCase + link; };
|
|
20907
21032
|
}
|
|
20908
|
-
this._menuService.renderMenuByAppCode(
|
|
21033
|
+
this._menuService.renderMenuByAppCode(appCode);
|
|
20909
21034
|
this.model = this._menuService.getMenuItems();
|
|
20910
21035
|
this._router.events.pipe(operators.filter(function (event) { return event instanceof i3.NavigationEnd; }))
|
|
20911
21036
|
.subscribe(function (event) {
|
|
@@ -23466,7 +23591,7 @@
|
|
|
23466
23591
|
};
|
|
23467
23592
|
|
|
23468
23593
|
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
|
|
23594
|
+
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
23595
|
var _this = this;
|
|
23471
23596
|
this._globalService = _globalService;
|
|
23472
23597
|
this._commonService = _commonService;
|
|
@@ -23496,7 +23621,6 @@
|
|
|
23496
23621
|
this._menuService = _menuService;
|
|
23497
23622
|
this._primengConfig = _primengConfig;
|
|
23498
23623
|
this._storageService = _storageService;
|
|
23499
|
-
this._permissionService = _permissionService;
|
|
23500
23624
|
this.showQuickNote = true;
|
|
23501
23625
|
this.allowAnonymous = false;
|
|
23502
23626
|
this._unsubscribeAll = new rxjs.Subject();
|
|
@@ -23650,25 +23774,6 @@
|
|
|
23650
23774
|
root.data.allowAnonymous = this.allowAnonymous;
|
|
23651
23775
|
// get current User
|
|
23652
23776
|
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
23777
|
this._componentContextService.subscribe(ComCtxConstants.ROOT.KEY_DOWN_ARROWLEFT, function (e) {
|
|
23673
23778
|
if (document.activeElement === _this.cancelButton.nativeElement) {
|
|
23674
23779
|
_this.okButton.nativeElement.focus();
|
|
@@ -24184,17 +24289,6 @@
|
|
|
24184
24289
|
}
|
|
24185
24290
|
}
|
|
24186
24291
|
};
|
|
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
24292
|
return CommonAppComponentComponent;
|
|
24199
24293
|
}());
|
|
24200
24294
|
CommonAppComponentComponent.decorators = [
|
|
@@ -24233,8 +24327,7 @@
|
|
|
24233
24327
|
{ type: i1.ConfirmationService },
|
|
24234
24328
|
{ type: MenuService },
|
|
24235
24329
|
{ type: i1.PrimeNGConfig },
|
|
24236
|
-
{ type: StorageService }
|
|
24237
|
-
{ type: PermissionService }
|
|
24330
|
+
{ type: StorageService }
|
|
24238
24331
|
]; };
|
|
24239
24332
|
CommonAppComponentComponent.propDecorators = {
|
|
24240
24333
|
okButton: [{ type: i0.ViewChild, args: ['okButton',] }],
|
|
@@ -26391,8 +26484,6 @@
|
|
|
26391
26484
|
});
|
|
26392
26485
|
_this.sourceIcon = {};
|
|
26393
26486
|
_this.stopCalculatingFunctionColumnWidth = false;
|
|
26394
|
-
_this.FileUploadMode = exports.FileUploadMode;
|
|
26395
|
-
_this.eventType = exports.EventType;
|
|
26396
26487
|
_this._unSubscribeAll = new rxjs.Subject();
|
|
26397
26488
|
_this.handleSelectRow = function (evt, data) {
|
|
26398
26489
|
if (_this.setting.hasCustomHandleClickRow) {
|
|
@@ -26575,94 +26666,6 @@
|
|
|
26575
26666
|
_this.setting.pageSetting.page = 1;
|
|
26576
26667
|
_this.getData();
|
|
26577
26668
|
};
|
|
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
26669
|
_this._activatedRoute = _this._injector.get(i3.ActivatedRoute);
|
|
26667
26670
|
_this._router = _this._injector.get(i3.Router);
|
|
26668
26671
|
_this._customRouterService = _this._injector.get(CustomRouterService);
|
|
@@ -26970,7 +26973,7 @@
|
|
|
26970
26973
|
});
|
|
26971
26974
|
};
|
|
26972
26975
|
CrudListComponent.prototype.formatColumns = function (cols) {
|
|
26973
|
-
var e_1,
|
|
26976
|
+
var e_1, _b;
|
|
26974
26977
|
try {
|
|
26975
26978
|
for (var cols_1 = __values(cols), cols_1_1 = cols_1.next(); !cols_1_1.done; cols_1_1 = cols_1.next()) {
|
|
26976
26979
|
var col = cols_1_1.value;
|
|
@@ -26982,7 +26985,7 @@
|
|
|
26982
26985
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
26983
26986
|
finally {
|
|
26984
26987
|
try {
|
|
26985
|
-
if (cols_1_1 && !cols_1_1.done && (
|
|
26988
|
+
if (cols_1_1 && !cols_1_1.done && (_b = cols_1.return)) _b.call(cols_1);
|
|
26986
26989
|
}
|
|
26987
26990
|
finally { if (e_1) throw e_1.error; }
|
|
26988
26991
|
}
|
|
@@ -27181,7 +27184,7 @@
|
|
|
27181
27184
|
CrudListComponent.prototype.validatePermission = function (rowData) {
|
|
27182
27185
|
return __awaiter(this, void 0, void 0, function () {
|
|
27183
27186
|
var itemStatus, hasPermission, userData, userId, userIdUpper, userGroupIds, userOrgIds, managerTypes, userIdLastUpper_1, donViIdLastUpper_1;
|
|
27184
|
-
return __generator(this, function (
|
|
27187
|
+
return __generator(this, function (_b) {
|
|
27185
27188
|
this.currentItem = rowData;
|
|
27186
27189
|
itemStatus = this.setting.workflowSetting.statuses.find(function (p) { return p.trangThaiContainer.ma == rowData.currentStateCode; });
|
|
27187
27190
|
hasPermission = false;
|
|
@@ -27248,12 +27251,12 @@
|
|
|
27248
27251
|
};
|
|
27249
27252
|
CrudListComponent.prototype.showActionWorkflow = function (evt, rowData) {
|
|
27250
27253
|
return __awaiter(this, void 0, void 0, function () {
|
|
27251
|
-
var
|
|
27252
|
-
return __generator(this, function (
|
|
27253
|
-
switch (
|
|
27254
|
+
var _b, buttonContexts, hasPermission;
|
|
27255
|
+
return __generator(this, function (_c) {
|
|
27256
|
+
switch (_c.label) {
|
|
27254
27257
|
case 0: return [4 /*yield*/, this.getActionWorkflow(rowData)];
|
|
27255
27258
|
case 1:
|
|
27256
|
-
|
|
27259
|
+
_b = __read.apply(void 0, [_c.sent(), 2]), buttonContexts = _b[0], hasPermission = _b[1];
|
|
27257
27260
|
this.buttonContexts = buttonContexts;
|
|
27258
27261
|
rowData.__hasPermission = hasPermission;
|
|
27259
27262
|
rowData.__actions = this.buttonContexts;
|
|
@@ -27267,11 +27270,11 @@
|
|
|
27267
27270
|
return __awaiter(this, void 0, void 0, function () {
|
|
27268
27271
|
var hasPermission, buttonContexts, statusAction, actions;
|
|
27269
27272
|
var _this = this;
|
|
27270
|
-
return __generator(this, function (
|
|
27271
|
-
switch (
|
|
27273
|
+
return __generator(this, function (_b) {
|
|
27274
|
+
switch (_b.label) {
|
|
27272
27275
|
case 0: return [4 /*yield*/, this.validatePermission(rowData)];
|
|
27273
27276
|
case 1:
|
|
27274
|
-
hasPermission =
|
|
27277
|
+
hasPermission = _b.sent();
|
|
27275
27278
|
buttonContexts = [];
|
|
27276
27279
|
if (!hasPermission) {
|
|
27277
27280
|
buttonContexts = [];
|
|
@@ -27337,8 +27340,8 @@
|
|
|
27337
27340
|
return __awaiter(this, void 0, void 0, function () {
|
|
27338
27341
|
var dataProcess_1, validateWf;
|
|
27339
27342
|
var _this = this;
|
|
27340
|
-
return __generator(this, function (
|
|
27341
|
-
switch (
|
|
27343
|
+
return __generator(this, function (_b) {
|
|
27344
|
+
switch (_b.label) {
|
|
27342
27345
|
case 0:
|
|
27343
27346
|
if (!(workflowAction.actionOptions && !workflowAction.actionOptions.openDialog)) return [3 /*break*/, 2];
|
|
27344
27347
|
dataProcess_1 = {
|
|
@@ -27348,7 +27351,7 @@
|
|
|
27348
27351
|
};
|
|
27349
27352
|
return [4 /*yield*/, this.setting.baseService.validateProcessWorkflow(this.currentItem.id, workflowAction.ma, dataProcess_1)];
|
|
27350
27353
|
case 1:
|
|
27351
|
-
validateWf =
|
|
27354
|
+
validateWf = _b.sent();
|
|
27352
27355
|
this.handleResponse(validateWf, '', function (f) {
|
|
27353
27356
|
_this.setting.baseService.processWorkflow(_this.currentItem.id, workflowAction.ma, dataProcess_1)
|
|
27354
27357
|
.then(function (res) { return _this.handleResponse(res, workflowAction.ten + " th\u00E0nh c\u00F4ng", function (f) {
|
|
@@ -27372,7 +27375,7 @@
|
|
|
27372
27375
|
this.actionWorkflow = workflowAction;
|
|
27373
27376
|
this.headerWorkflow = workflowAction.ten;
|
|
27374
27377
|
this.showFormWorkflow = true;
|
|
27375
|
-
|
|
27378
|
+
_b.label = 3;
|
|
27376
27379
|
case 3: return [2 /*return*/];
|
|
27377
27380
|
}
|
|
27378
27381
|
});
|
|
@@ -27475,7 +27478,7 @@
|
|
|
27475
27478
|
this.onAdd.emit();
|
|
27476
27479
|
};
|
|
27477
27480
|
CrudListComponent.prototype.xuatCacMucDaChon_backup = function () {
|
|
27478
|
-
var e_2,
|
|
27481
|
+
var e_2, _b;
|
|
27479
27482
|
if (this._groupField) {
|
|
27480
27483
|
this._notifierService.showWarning('Giao diện hiện tại chưa hỗ trợ xuất excel');
|
|
27481
27484
|
return;
|
|
@@ -27517,7 +27520,7 @@
|
|
|
27517
27520
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
27518
27521
|
finally {
|
|
27519
27522
|
try {
|
|
27520
|
-
if (rowData_1_1 && !rowData_1_1.done && (
|
|
27523
|
+
if (rowData_1_1 && !rowData_1_1.done && (_b = rowData_1.return)) _b.call(rowData_1);
|
|
27521
27524
|
}
|
|
27522
27525
|
finally { if (e_2) throw e_2.error; }
|
|
27523
27526
|
}
|
|
@@ -27660,8 +27663,8 @@
|
|
|
27660
27663
|
CrudListComponent.prototype.checkHasPermissionInLastStatus = function (rowData) {
|
|
27661
27664
|
return __awaiter(this, void 0, void 0, function () {
|
|
27662
27665
|
var statusKetThuc;
|
|
27663
|
-
return __generator(this, function (
|
|
27664
|
-
switch (
|
|
27666
|
+
return __generator(this, function (_b) {
|
|
27667
|
+
switch (_b.label) {
|
|
27665
27668
|
case 0:
|
|
27666
27669
|
statusKetThuc = this.setting.workflowSetting.statuses.find(function (q) { return q.type == exports.EnumWFNhomTrangThai.KET_THUC; });
|
|
27667
27670
|
if (statusKetThuc == null) {
|
|
@@ -27674,46 +27677,46 @@
|
|
|
27674
27677
|
return [4 /*yield*/, this.validatePermission(rowData)];
|
|
27675
27678
|
case 1:
|
|
27676
27679
|
// Kiểm tra permission
|
|
27677
|
-
return [2 /*return*/,
|
|
27680
|
+
return [2 /*return*/, _b.sent()];
|
|
27678
27681
|
}
|
|
27679
27682
|
});
|
|
27680
27683
|
});
|
|
27681
27684
|
};
|
|
27682
27685
|
CrudListComponent.prototype.showContextMenu = function (evt, rowData) {
|
|
27683
27686
|
return __awaiter(this, void 0, void 0, function () {
|
|
27684
|
-
var
|
|
27685
|
-
return __generator(this, function (
|
|
27686
|
-
switch (
|
|
27687
|
+
var _b, _c, _d, _e;
|
|
27688
|
+
return __generator(this, function (_f) {
|
|
27689
|
+
switch (_f.label) {
|
|
27687
27690
|
case 0:
|
|
27688
27691
|
this.rowDataCurrent = rowData;
|
|
27689
|
-
|
|
27692
|
+
_b = this;
|
|
27690
27693
|
return [4 /*yield*/, this.menuButtons(rowData)];
|
|
27691
27694
|
case 1:
|
|
27692
|
-
|
|
27695
|
+
_b.buttonContexts = _f.sent();
|
|
27693
27696
|
if (!(!this.setting.hiddenTrinhKy && !rowData.__hiddenTrinhKy)) return [3 /*break*/, 7];
|
|
27694
|
-
|
|
27695
|
-
if (!
|
|
27697
|
+
_d = this.setting.checkReadyToTrinhKy();
|
|
27698
|
+
if (!_d) return [3 /*break*/, 3];
|
|
27696
27699
|
return [4 /*yield*/, this.setting.checkAllowTrinhKy(rowData)];
|
|
27697
27700
|
case 2:
|
|
27698
|
-
|
|
27699
|
-
|
|
27701
|
+
_d = (_f.sent());
|
|
27702
|
+
_f.label = 3;
|
|
27700
27703
|
case 3:
|
|
27701
|
-
|
|
27702
|
-
if (!
|
|
27703
|
-
|
|
27704
|
-
if (
|
|
27704
|
+
_c = _d;
|
|
27705
|
+
if (!_c) return [3 /*break*/, 6];
|
|
27706
|
+
_e = !this.setting.checkPermisionTrinhKy;
|
|
27707
|
+
if (_e) return [3 /*break*/, 5];
|
|
27705
27708
|
return [4 /*yield*/, this.checkHasPermissionInLastStatus(rowData)];
|
|
27706
27709
|
case 4:
|
|
27707
|
-
|
|
27708
|
-
|
|
27710
|
+
_e = (_f.sent());
|
|
27711
|
+
_f.label = 5;
|
|
27709
27712
|
case 5:
|
|
27710
|
-
|
|
27711
|
-
|
|
27713
|
+
_c = (_e);
|
|
27714
|
+
_f.label = 6;
|
|
27712
27715
|
case 6:
|
|
27713
|
-
if (
|
|
27716
|
+
if (_c) {
|
|
27714
27717
|
this.buttonContexts.unshift({ label: this.setting.getLabelButtonTrinhKy(rowData), icon: 'pi pi-send', command: this.trinhKy.bind(this) });
|
|
27715
27718
|
}
|
|
27716
|
-
|
|
27719
|
+
_f.label = 7;
|
|
27717
27720
|
case 7:
|
|
27718
27721
|
if (this.buttonContexts.length > 0) {
|
|
27719
27722
|
this._showContextMenu(evt);
|
|
@@ -28290,7 +28293,7 @@
|
|
|
28290
28293
|
return col.dataType == exports.DataType.datetime || col.dataType == exports.DataType.date || col.dataType == exports.DataType.boolean || col.dataType == exports.DataType.enum;
|
|
28291
28294
|
};
|
|
28292
28295
|
CrudListComponent.prototype.alignRightColumn = function (col) {
|
|
28293
|
-
return col.dataType == exports.DataType.int || col.dataType == exports.DataType.decimal
|
|
28296
|
+
return col.dataType == exports.DataType.int || col.dataType == exports.DataType.decimal;
|
|
28294
28297
|
};
|
|
28295
28298
|
CrudListComponent.prototype.ngOnDestroy = function () {
|
|
28296
28299
|
if (!this.disableKeypressControl) {
|
|
@@ -28306,10 +28309,10 @@
|
|
|
28306
28309
|
clearTimeout(this.timeout);
|
|
28307
28310
|
};
|
|
28308
28311
|
CrudListComponent.prototype.disableMultipleDelete = function () {
|
|
28309
|
-
var e_3,
|
|
28312
|
+
var e_3, _b;
|
|
28310
28313
|
try {
|
|
28311
|
-
for (var
|
|
28312
|
-
var item =
|
|
28314
|
+
for (var _c = __values(this.model.selectedItems), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
28315
|
+
var item = _d.value;
|
|
28313
28316
|
if (this.disableDelete(item)) {
|
|
28314
28317
|
return true;
|
|
28315
28318
|
}
|
|
@@ -28318,7 +28321,7 @@
|
|
|
28318
28321
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
28319
28322
|
finally {
|
|
28320
28323
|
try {
|
|
28321
|
-
if (
|
|
28324
|
+
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
28322
28325
|
}
|
|
28323
28326
|
finally { if (e_3) throw e_3.error; }
|
|
28324
28327
|
}
|
|
@@ -28388,11 +28391,11 @@
|
|
|
28388
28391
|
};
|
|
28389
28392
|
CrudListComponent.prototype.processBaseData = function () {
|
|
28390
28393
|
return __awaiter(this, void 0, void 0, function () {
|
|
28391
|
-
return __generator(this, function (
|
|
28392
|
-
switch (
|
|
28394
|
+
return __generator(this, function (_b) {
|
|
28395
|
+
switch (_b.label) {
|
|
28393
28396
|
case 0: return [4 /*yield*/, this.preProcessData(this.model.dataSource)];
|
|
28394
28397
|
case 1:
|
|
28395
|
-
|
|
28398
|
+
_b.sent();
|
|
28396
28399
|
return [2 /*return*/];
|
|
28397
28400
|
}
|
|
28398
28401
|
});
|
|
@@ -28401,14 +28404,14 @@
|
|
|
28401
28404
|
CrudListComponent.prototype.preProcessData = function (dataSource) {
|
|
28402
28405
|
return __awaiter(this, void 0, void 0, function () {
|
|
28403
28406
|
var colHasPipe, _loop_3, this_2, colHasPipe_1, colHasPipe_1_1, col;
|
|
28404
|
-
var e_4,
|
|
28405
|
-
return __generator(this, function (
|
|
28407
|
+
var e_4, _b;
|
|
28408
|
+
return __generator(this, function (_c) {
|
|
28406
28409
|
colHasPipe = this.setting.cols.filter(function (x) { return x.pipe; });
|
|
28407
28410
|
_loop_3 = function (col) {
|
|
28408
|
-
var e_5,
|
|
28411
|
+
var e_5, _b;
|
|
28409
28412
|
var _loop_4 = function (item) {
|
|
28410
28413
|
this_2.transform(col.pipe, col.asyncPipe, item[col.field]).then(function (rs) {
|
|
28411
|
-
item["pipe__" + col.field] = rs;
|
|
28414
|
+
item["pipe__" + col.field + " "] = rs;
|
|
28412
28415
|
});
|
|
28413
28416
|
};
|
|
28414
28417
|
try {
|
|
@@ -28420,7 +28423,7 @@
|
|
|
28420
28423
|
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
28421
28424
|
finally {
|
|
28422
28425
|
try {
|
|
28423
|
-
if (dataSource_1_1 && !dataSource_1_1.done && (
|
|
28426
|
+
if (dataSource_1_1 && !dataSource_1_1.done && (_b = dataSource_1.return)) _b.call(dataSource_1);
|
|
28424
28427
|
}
|
|
28425
28428
|
finally { if (e_5) throw e_5.error; }
|
|
28426
28429
|
}
|
|
@@ -28435,7 +28438,7 @@
|
|
|
28435
28438
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
28436
28439
|
finally {
|
|
28437
28440
|
try {
|
|
28438
|
-
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (
|
|
28441
|
+
if (colHasPipe_1_1 && !colHasPipe_1_1.done && (_b = colHasPipe_1.return)) _b.call(colHasPipe_1);
|
|
28439
28442
|
}
|
|
28440
28443
|
finally { if (e_4) throw e_4.error; }
|
|
28441
28444
|
}
|
|
@@ -28446,8 +28449,8 @@
|
|
|
28446
28449
|
CrudListComponent.prototype.transform = function (pipe, asyncPipe, value) {
|
|
28447
28450
|
return __awaiter(this, void 0, void 0, function () {
|
|
28448
28451
|
var val, val;
|
|
28449
|
-
return __generator(this, function (
|
|
28450
|
-
switch (
|
|
28452
|
+
return __generator(this, function (_b) {
|
|
28453
|
+
switch (_b.label) {
|
|
28451
28454
|
case 0:
|
|
28452
28455
|
if (this.cachedTransforms[value]) {
|
|
28453
28456
|
return [2 /*return*/, this.cachedTransforms[value]];
|
|
@@ -28455,7 +28458,7 @@
|
|
|
28455
28458
|
if (!asyncPipe) return [3 /*break*/, 2];
|
|
28456
28459
|
return [4 /*yield*/, pipe.transform(value)];
|
|
28457
28460
|
case 1:
|
|
28458
|
-
val =
|
|
28461
|
+
val = _b.sent();
|
|
28459
28462
|
this.cachedTransforms[value] = val;
|
|
28460
28463
|
return [2 /*return*/, val];
|
|
28461
28464
|
case 2:
|
|
@@ -28549,7 +28552,7 @@
|
|
|
28549
28552
|
return {};
|
|
28550
28553
|
};
|
|
28551
28554
|
CrudListComponent.prototype.getMinimizeData = function (model) {
|
|
28552
|
-
var e_6,
|
|
28555
|
+
var e_6, _b;
|
|
28553
28556
|
if (isLiteralObject(model)) {
|
|
28554
28557
|
if (model._dropdownvalue != null && model._dropdownvalue !== '') {
|
|
28555
28558
|
return model[model._dropdownvalue];
|
|
@@ -28575,7 +28578,7 @@
|
|
|
28575
28578
|
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
28576
28579
|
finally {
|
|
28577
28580
|
try {
|
|
28578
|
-
if (model_1_1 && !model_1_1.done && (
|
|
28581
|
+
if (model_1_1 && !model_1_1.done && (_b = model_1.return)) _b.call(model_1);
|
|
28579
28582
|
}
|
|
28580
28583
|
finally { if (e_6) throw e_6.error; }
|
|
28581
28584
|
}
|
|
@@ -28723,7 +28726,7 @@
|
|
|
28723
28726
|
};
|
|
28724
28727
|
CrudListComponent.prototype.showSettingsPermission = function () {
|
|
28725
28728
|
return __awaiter(this, void 0, void 0, function () {
|
|
28726
|
-
return __generator(this, function (
|
|
28729
|
+
return __generator(this, function (_b) {
|
|
28727
28730
|
if (this.creatingSearchInfo)
|
|
28728
28731
|
return [2 /*return*/];
|
|
28729
28732
|
this._showSettingsPermission = true;
|
|
@@ -28733,10 +28736,10 @@
|
|
|
28733
28736
|
};
|
|
28734
28737
|
CrudListComponent.prototype.createSearchSchema = function () {
|
|
28735
28738
|
return __awaiter(this, void 0, void 0, function () {
|
|
28736
|
-
var searchInfo,
|
|
28737
|
-
var e_7,
|
|
28738
|
-
return __generator(this, function (
|
|
28739
|
-
switch (
|
|
28739
|
+
var searchInfo, _b, _c, col, control, e_7_1, _loop_5, this_3, _d, _e, field;
|
|
28740
|
+
var e_7, _f, _g, e_8, _h;
|
|
28741
|
+
return __generator(this, function (_j) {
|
|
28742
|
+
switch (_j.label) {
|
|
28740
28743
|
case 0:
|
|
28741
28744
|
if (this.setting.cols == null) {
|
|
28742
28745
|
return [2 /*return*/, this._notifierService.showWarning('Bạn chưa cấu hình cột cho danh sách')];
|
|
@@ -28746,14 +28749,14 @@
|
|
|
28746
28749
|
searchInfo.schema = [];
|
|
28747
28750
|
searchInfo.fieldDropdown = {};
|
|
28748
28751
|
searchInfo.fieldSearchText = [];
|
|
28749
|
-
|
|
28752
|
+
_j.label = 1;
|
|
28750
28753
|
case 1:
|
|
28751
|
-
|
|
28752
|
-
|
|
28753
|
-
|
|
28754
|
+
_j.trys.push([1, 6, 7, 8]);
|
|
28755
|
+
_b = __values(this.setting.cols), _c = _b.next();
|
|
28756
|
+
_j.label = 2;
|
|
28754
28757
|
case 2:
|
|
28755
|
-
if (!!
|
|
28756
|
-
col =
|
|
28758
|
+
if (!!_c.done) return [3 /*break*/, 5];
|
|
28759
|
+
col = _c.value;
|
|
28757
28760
|
if (!(col.allowFilter != false && col.rawColumn == null)) return [3 /*break*/, 4];
|
|
28758
28761
|
if (col.fullTextSearch) {
|
|
28759
28762
|
if (searchInfo.fieldSearchText.indexOf(col.field) == -1) {
|
|
@@ -28766,9 +28769,9 @@
|
|
|
28766
28769
|
}
|
|
28767
28770
|
return [4 /*yield*/, this.setting.function.getSearchControl(col.field)];
|
|
28768
28771
|
case 3:
|
|
28769
|
-
control =
|
|
28772
|
+
control = _j.sent();
|
|
28770
28773
|
if (control != null) {
|
|
28771
|
-
(
|
|
28774
|
+
(_g = searchInfo.schema).push.apply(_g, __spread(control));
|
|
28772
28775
|
}
|
|
28773
28776
|
else {
|
|
28774
28777
|
if (col.baseService || (col.dataSource && col.dataSource.length > 0)) {
|
|
@@ -28822,18 +28825,18 @@
|
|
|
28822
28825
|
}
|
|
28823
28826
|
}
|
|
28824
28827
|
}
|
|
28825
|
-
|
|
28828
|
+
_j.label = 4;
|
|
28826
28829
|
case 4:
|
|
28827
|
-
|
|
28830
|
+
_c = _b.next();
|
|
28828
28831
|
return [3 /*break*/, 2];
|
|
28829
28832
|
case 5: return [3 /*break*/, 8];
|
|
28830
28833
|
case 6:
|
|
28831
|
-
e_7_1 =
|
|
28834
|
+
e_7_1 = _j.sent();
|
|
28832
28835
|
e_7 = { error: e_7_1 };
|
|
28833
28836
|
return [3 /*break*/, 8];
|
|
28834
28837
|
case 7:
|
|
28835
28838
|
try {
|
|
28836
|
-
if (
|
|
28839
|
+
if (_c && !_c.done && (_f = _b.return)) _f.call(_b);
|
|
28837
28840
|
}
|
|
28838
28841
|
finally { if (e_7) throw e_7.error; }
|
|
28839
28842
|
return [7 /*endfinally*/];
|
|
@@ -28853,15 +28856,15 @@
|
|
|
28853
28856
|
};
|
|
28854
28857
|
this_3 = this;
|
|
28855
28858
|
try {
|
|
28856
|
-
for (
|
|
28857
|
-
field =
|
|
28859
|
+
for (_d = __values(searchInfo.fieldSearchText), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
28860
|
+
field = _e.value;
|
|
28858
28861
|
_loop_5(field);
|
|
28859
28862
|
}
|
|
28860
28863
|
}
|
|
28861
28864
|
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
28862
28865
|
finally {
|
|
28863
28866
|
try {
|
|
28864
|
-
if (
|
|
28867
|
+
if (_e && !_e.done && (_h = _d.return)) _h.call(_d);
|
|
28865
28868
|
}
|
|
28866
28869
|
finally { if (e_8) throw e_8.error; }
|
|
28867
28870
|
}
|
|
@@ -28927,19 +28930,15 @@
|
|
|
28927
28930
|
}
|
|
28928
28931
|
}, 20);
|
|
28929
28932
|
};
|
|
28930
|
-
CrudListComponent.prototype.getTooltip = function (tooltip, field) {
|
|
28931
|
-
var result = tooltip && tooltip[field] ? tooltip[field] : null;
|
|
28932
|
-
return result;
|
|
28933
|
-
};
|
|
28934
28933
|
return CrudListComponent;
|
|
28935
28934
|
}(ComponentBase));
|
|
28936
28935
|
CrudListComponent.decorators = [
|
|
28937
28936
|
{ type: i0.Component, args: [{
|
|
28938
28937
|
// tslint:disable-next-line: component-selector
|
|
28939
28938
|
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>",
|
|
28939
|
+
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
28940
|
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{
|
|
28941
|
+
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
28942
|
},] }
|
|
28944
28943
|
];
|
|
28945
28944
|
CrudListComponent.ctorParameters = function () { return [
|
|
@@ -30856,67 +30855,31 @@
|
|
|
30856
30855
|
};
|
|
30857
30856
|
EntityPickerDataComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
30858
30857
|
return __awaiter(this, void 0, void 0, function () {
|
|
30859
|
-
var
|
|
30860
|
-
|
|
30861
|
-
|
|
30862
|
-
switch (_d.label) {
|
|
30858
|
+
var allow;
|
|
30859
|
+
return __generator(this, function (_a) {
|
|
30860
|
+
switch (_a.label) {
|
|
30863
30861
|
case 0:
|
|
30864
30862
|
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
30863
|
if (this.control.multiple) {
|
|
30891
30864
|
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
|
-
}
|
|
30865
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.notIn, this._value));
|
|
30898
30866
|
}
|
|
30899
30867
|
}
|
|
30900
30868
|
else {
|
|
30901
30869
|
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
|
-
}
|
|
30870
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.notEqual, this._value));
|
|
30908
30871
|
}
|
|
30909
30872
|
}
|
|
30910
30873
|
return [4 /*yield*/, appendDefaultFilter(gridInfo.filters, this.control.defaultFilters)];
|
|
30911
30874
|
case 1:
|
|
30912
|
-
|
|
30875
|
+
_a.sent();
|
|
30913
30876
|
if (!this.control.modifyFilter) return [3 /*break*/, 3];
|
|
30914
30877
|
return [4 /*yield*/, this.control.modifyFilter(gridInfo.filters, this)];
|
|
30915
30878
|
case 2:
|
|
30916
|
-
allow =
|
|
30879
|
+
allow = _a.sent();
|
|
30917
30880
|
if (allow === false)
|
|
30918
30881
|
return [2 /*return*/, false];
|
|
30919
|
-
|
|
30882
|
+
_a.label = 3;
|
|
30920
30883
|
case 3:
|
|
30921
30884
|
if (this.setting.columnSetting.sortField) {
|
|
30922
30885
|
gridInfo.sorts.push({
|
|
@@ -31081,45 +31044,13 @@
|
|
|
31081
31044
|
};
|
|
31082
31045
|
EntityPickerSelectedComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
31083
31046
|
return __awaiter(this, void 0, void 0, function () {
|
|
31084
|
-
|
|
31085
|
-
|
|
31086
|
-
return __generator(this, function (_d) {
|
|
31087
|
-
switch (_d.label) {
|
|
31047
|
+
return __generator(this, function (_a) {
|
|
31048
|
+
switch (_a.label) {
|
|
31088
31049
|
case 0:
|
|
31089
31050
|
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
31051
|
if (this.control.multiple) {
|
|
31116
31052
|
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
|
-
}
|
|
31053
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.in, this._value));
|
|
31123
31054
|
}
|
|
31124
31055
|
else {
|
|
31125
31056
|
return [2 /*return*/, false];
|
|
@@ -31127,12 +31058,7 @@
|
|
|
31127
31058
|
}
|
|
31128
31059
|
else {
|
|
31129
31060
|
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
|
-
}
|
|
31061
|
+
gridInfo.filters.push(this.newFilter(this.control.valueField, exports.Operator.in, this._value));
|
|
31136
31062
|
}
|
|
31137
31063
|
else {
|
|
31138
31064
|
return [2 /*return*/, false];
|
|
@@ -31140,7 +31066,7 @@
|
|
|
31140
31066
|
}
|
|
31141
31067
|
return [4 /*yield*/, appendDefaultFilter(gridInfo.filters, this.control.defaultFilters)];
|
|
31142
31068
|
case 1:
|
|
31143
|
-
|
|
31069
|
+
_a.sent();
|
|
31144
31070
|
return [2 /*return*/];
|
|
31145
31071
|
}
|
|
31146
31072
|
});
|
|
@@ -31965,11 +31891,10 @@
|
|
|
31965
31891
|
}
|
|
31966
31892
|
return FileExplorerItem;
|
|
31967
31893
|
}());
|
|
31968
|
-
var FileExplorerItemType;
|
|
31969
31894
|
(function (FileExplorerItemType) {
|
|
31970
31895
|
FileExplorerItemType[FileExplorerItemType["File"] = 0] = "File";
|
|
31971
31896
|
FileExplorerItemType[FileExplorerItemType["Folder"] = 1] = "Folder";
|
|
31972
|
-
})(FileExplorerItemType || (FileExplorerItemType = {}));
|
|
31897
|
+
})(exports.FileExplorerItemType || (exports.FileExplorerItemType = {}));
|
|
31973
31898
|
|
|
31974
31899
|
// fix for build prod
|
|
31975
31900
|
var printJS$2 = printJS___namespace;
|
|
@@ -32794,6 +32719,7 @@
|
|
|
32794
32719
|
_this.invalidFileLimitMessageDetail = 'tối đa {0} file.';
|
|
32795
32720
|
_this._hasLoadedSource = false;
|
|
32796
32721
|
_this.readonly = false;
|
|
32722
|
+
_this.signonly = false;
|
|
32797
32723
|
_this.onReady = new i0.EventEmitter();
|
|
32798
32724
|
_this.entityKeyChange = new i0.EventEmitter();
|
|
32799
32725
|
_this.closePopup = new i0.EventEmitter();
|
|
@@ -32925,7 +32851,24 @@
|
|
|
32925
32851
|
if (dataSource === void 0) { dataSource = []; }
|
|
32926
32852
|
this._dataSource = dataSource;
|
|
32927
32853
|
this._oldValue = this._value;
|
|
32928
|
-
|
|
32854
|
+
var value = [];
|
|
32855
|
+
dataSource.forEach(function (item) {
|
|
32856
|
+
value.push(item.id);
|
|
32857
|
+
if (item.name) {
|
|
32858
|
+
item.nameWithoutExtension = item.name;
|
|
32859
|
+
var index = item.name.lastIndexOf('.');
|
|
32860
|
+
if (index > -1) {
|
|
32861
|
+
item.nameWithoutExtension = item.name.substring(0, index);
|
|
32862
|
+
}
|
|
32863
|
+
if (item.extension) {
|
|
32864
|
+
item.extension = item.extension.toLowerCase();
|
|
32865
|
+
}
|
|
32866
|
+
item.tailFile = item.name.substring(index);
|
|
32867
|
+
item.tailFileUpper = item.tailFile.toUpperCase();
|
|
32868
|
+
item.isFile = item.fileExplorerItemType == exports.FileExplorerItemType.File;
|
|
32869
|
+
}
|
|
32870
|
+
});
|
|
32871
|
+
this._value = value;
|
|
32929
32872
|
if (this._oldValue != null) {
|
|
32930
32873
|
if (JSON.stringify(this._oldValue) != JSON.stringify(this._value)) {
|
|
32931
32874
|
this.fireEventChange();
|
|
@@ -33045,6 +32988,10 @@
|
|
|
33045
32988
|
show: false,
|
|
33046
32989
|
formData: {}
|
|
33047
32990
|
};
|
|
32991
|
+
this.forms[this.formIds.signatureDetail] = {
|
|
32992
|
+
header: 'Thông tin chữ ký số',
|
|
32993
|
+
show: false,
|
|
32994
|
+
};
|
|
33048
32995
|
this.forms[this.formIds.fileVersionList] = {
|
|
33049
32996
|
header: 'Danh sách phiên bản',
|
|
33050
32997
|
show: false,
|
|
@@ -33096,14 +33043,14 @@
|
|
|
33096
33043
|
command: function () {
|
|
33097
33044
|
_this.deleteFile(item);
|
|
33098
33045
|
},
|
|
33099
|
-
visible: !this.readonly
|
|
33046
|
+
visible: !this.signonly && !this.readonly
|
|
33100
33047
|
},
|
|
33101
33048
|
{
|
|
33102
33049
|
label: 'Đổi tên', icon: 'fas fa-eraser',
|
|
33103
33050
|
command: function () {
|
|
33104
33051
|
_this.renameFile(item);
|
|
33105
33052
|
},
|
|
33106
|
-
visible: !this.readonly
|
|
33053
|
+
visible: !this.signonly && !this.readonly
|
|
33107
33054
|
}
|
|
33108
33055
|
];
|
|
33109
33056
|
}
|
|
@@ -33135,7 +33082,7 @@
|
|
|
33135
33082
|
};
|
|
33136
33083
|
FileManagerComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
33137
33084
|
return __awaiter(this, void 0, void 0, function () {
|
|
33138
|
-
return __generator(this, function (
|
|
33085
|
+
return __generator(this, function (_b) {
|
|
33139
33086
|
gridInfo.filters.push(this.newFilter('parentFolderId', exports.Operator.equal, this.data.currentFolderId));
|
|
33140
33087
|
return [2 /*return*/];
|
|
33141
33088
|
});
|
|
@@ -33144,7 +33091,7 @@
|
|
|
33144
33091
|
FileManagerComponent.prototype.afterGetData = function () {
|
|
33145
33092
|
return __awaiter(this, void 0, void 0, function () {
|
|
33146
33093
|
var _loop_1, this_1, ind;
|
|
33147
|
-
return __generator(this, function (
|
|
33094
|
+
return __generator(this, function (_b) {
|
|
33148
33095
|
_loop_1 = function (ind) {
|
|
33149
33096
|
var item = this_1.model.dataSource[ind];
|
|
33150
33097
|
if (this_1._fileExplorerService.supportDigitalSignature(item.name)) {
|
|
@@ -33155,7 +33102,7 @@
|
|
|
33155
33102
|
}
|
|
33156
33103
|
});
|
|
33157
33104
|
}
|
|
33158
|
-
if (item.fileExplorerItemType === FileExplorerItemType.Folder) {
|
|
33105
|
+
if (item.fileExplorerItemType === exports.FileExplorerItemType.Folder) {
|
|
33159
33106
|
item.class = '';
|
|
33160
33107
|
}
|
|
33161
33108
|
if (item.extension) {
|
|
@@ -33317,7 +33264,7 @@
|
|
|
33317
33264
|
FileManagerComponent.prototype.openObject = function (explorerItem) {
|
|
33318
33265
|
return __awaiter(this, void 0, void 0, function () {
|
|
33319
33266
|
var canViewOnline;
|
|
33320
|
-
return __generator(this, function (
|
|
33267
|
+
return __generator(this, function (_b) {
|
|
33321
33268
|
if (explorerItem.isFile) {
|
|
33322
33269
|
canViewOnline = this._fileObjectService.isSupportedViewOnline(explorerItem.name);
|
|
33323
33270
|
if (canViewOnline) {
|
|
@@ -33358,7 +33305,7 @@
|
|
|
33358
33305
|
FileManagerComponent.prototype.download = function (explorerItem) {
|
|
33359
33306
|
return __awaiter(this, void 0, void 0, function () {
|
|
33360
33307
|
var model;
|
|
33361
|
-
return __generator(this, function (
|
|
33308
|
+
return __generator(this, function (_b) {
|
|
33362
33309
|
model = this._downloadLinkService.getGenerateDownloadLinkModel(explorerItem);
|
|
33363
33310
|
this._downloadLinkService.download(model);
|
|
33364
33311
|
return [2 /*return*/];
|
|
@@ -33370,7 +33317,7 @@
|
|
|
33370
33317
|
return __awaiter(this, void 0, void 0, function () {
|
|
33371
33318
|
var selectedItems, hasItems, arrModel;
|
|
33372
33319
|
var _this = this;
|
|
33373
|
-
return __generator(this, function (
|
|
33320
|
+
return __generator(this, function (_b) {
|
|
33374
33321
|
selectedItems = this.model.selectedItems;
|
|
33375
33322
|
hasItems = selectedItems && selectedItems.length;
|
|
33376
33323
|
if (hasItems) {
|
|
@@ -33520,13 +33467,13 @@
|
|
|
33520
33467
|
return __awaiter(this, void 0, void 0, function () {
|
|
33521
33468
|
var rs, breadcrumbs;
|
|
33522
33469
|
var _this = this;
|
|
33523
|
-
return __generator(this, function (
|
|
33524
|
-
switch (
|
|
33470
|
+
return __generator(this, function (_b) {
|
|
33471
|
+
switch (_b.label) {
|
|
33525
33472
|
case 0:
|
|
33526
33473
|
if (!this.data.currentFolderId) return [3 /*break*/, 2];
|
|
33527
33474
|
return [4 /*yield*/, this._folderService.getFullFolderPath(this.data.currentFolderId)];
|
|
33528
33475
|
case 1:
|
|
33529
|
-
rs =
|
|
33476
|
+
rs = _b.sent();
|
|
33530
33477
|
if (rs.success) {
|
|
33531
33478
|
breadcrumbs = rs.data.map(function (f) {
|
|
33532
33479
|
var item = {
|
|
@@ -33548,7 +33495,7 @@
|
|
|
33548
33495
|
return [3 /*break*/, 3];
|
|
33549
33496
|
case 2:
|
|
33550
33497
|
this.data.breadcrumbs = [];
|
|
33551
|
-
|
|
33498
|
+
_b.label = 3;
|
|
33552
33499
|
case 3: return [2 /*return*/];
|
|
33553
33500
|
}
|
|
33554
33501
|
});
|
|
@@ -33558,36 +33505,75 @@
|
|
|
33558
33505
|
// TODO: Lưu ý xử lý trường double click vào nút
|
|
33559
33506
|
FileManagerComponent.prototype.signFile = function (file) {
|
|
33560
33507
|
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
|
-
|
|
33508
|
+
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 () {
|
|
33509
|
+
var sourceFileId, sourceFile_1, rsConvert, e_1;
|
|
33510
|
+
var _this = this;
|
|
33511
|
+
return __generator(this, function (_b) {
|
|
33512
|
+
switch (_b.label) {
|
|
33513
|
+
case 0:
|
|
33514
|
+
if (!rs) return [3 /*break*/, 5];
|
|
33515
|
+
sourceFileId = file.id;
|
|
33516
|
+
sourceFile_1 = file;
|
|
33517
|
+
if (!this._fileExplorerService.needConvertBeforeSign(file.name)) return [3 /*break*/, 4];
|
|
33518
|
+
_b.label = 1;
|
|
33519
|
+
case 1:
|
|
33520
|
+
_b.trys.push([1, 3, , 4]);
|
|
33521
|
+
return [4 /*yield*/, this._fileExplorerService.convertDocumentToPdfAndSave({
|
|
33522
|
+
id: sourceFileId,
|
|
33523
|
+
name: this._fileExplorerService.changeFileExtension(file.name, 'pdf'),
|
|
33524
|
+
folderId: file.parentFolderId,
|
|
33525
|
+
ownerType: this._userService.getCurrentUser().userId.toString(),
|
|
33526
|
+
})];
|
|
33527
|
+
case 2:
|
|
33528
|
+
rsConvert = _b.sent();
|
|
33529
|
+
if (!rsConvert || !rsConvert.success) {
|
|
33530
|
+
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");
|
|
33531
|
+
return [2 /*return*/];
|
|
33582
33532
|
}
|
|
33583
|
-
|
|
33584
|
-
|
|
33585
|
-
|
|
33586
|
-
|
|
33533
|
+
else {
|
|
33534
|
+
this._notifierService.showSuccess("Chuy\u1EC3n \u0111\u1ED5i t\u00E0i li\u1EC7u " + file.name + " th\u00E0nh pdf th\u00E0nh c\u00F4ng");
|
|
33535
|
+
sourceFileId = rsConvert.data;
|
|
33536
|
+
sourceFile_1 = { id: sourceFileId };
|
|
33537
|
+
this._triggerProcessData();
|
|
33538
|
+
}
|
|
33539
|
+
return [3 /*break*/, 4];
|
|
33540
|
+
case 3:
|
|
33541
|
+
e_1 = _b.sent();
|
|
33542
|
+
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");
|
|
33543
|
+
return [2 /*return*/];
|
|
33544
|
+
case 4:
|
|
33545
|
+
this._fileExplorerService.generateLinkDownload({
|
|
33546
|
+
fileId: sourceFileId,
|
|
33547
|
+
}).then(function (rs) {
|
|
33548
|
+
var url = _this._downloadLinkService.getDownloadForSignUrl(rs.data);
|
|
33549
|
+
var prms = {};
|
|
33550
|
+
prms['FileUploadHandler'] = _this._moduleConfig.environment.apiDomain.fileEndpoint + "/" + _this._moduleConfig.environment.apiVersion + "/KySoFile/SavePhysicalSignedFile";
|
|
33551
|
+
prms['SessionId'] = '';
|
|
33552
|
+
prms['FileName'] = url;
|
|
33553
|
+
// tslint:disable-next-line: variable-name
|
|
33554
|
+
var json_prms = JSON.stringify(prms);
|
|
33555
|
+
vgca_sign_approved(json_prms, function (result) {
|
|
33556
|
+
var resultObj = JSON.parse(result);
|
|
33557
|
+
if (resultObj.FileServer != '') {
|
|
33558
|
+
_this._fileExplorerService.saveSignedFile({
|
|
33559
|
+
sourceFile: sourceFile_1,
|
|
33560
|
+
tempFileId: resultObj.FileServer,
|
|
33561
|
+
}).then(function (rss) {
|
|
33562
|
+
_this._triggerProcessData();
|
|
33563
|
+
_this._notifierService.showSuccess('Ký số thành công');
|
|
33564
|
+
});
|
|
33565
|
+
}
|
|
33566
|
+
});
|
|
33567
|
+
});
|
|
33568
|
+
_b.label = 5;
|
|
33569
|
+
case 5: return [2 /*return*/];
|
|
33570
|
+
}
|
|
33571
|
+
});
|
|
33572
|
+
}); });
|
|
33587
33573
|
};
|
|
33588
33574
|
FileManagerComponent.prototype.shareFolder = function (file) {
|
|
33589
33575
|
return __awaiter(this, void 0, void 0, function () {
|
|
33590
|
-
return __generator(this, function (
|
|
33576
|
+
return __generator(this, function (_b) {
|
|
33591
33577
|
this.forms.shareFolder.data = file;
|
|
33592
33578
|
this.forms.shareFolder.show = true;
|
|
33593
33579
|
return [2 /*return*/];
|
|
@@ -33596,7 +33582,7 @@
|
|
|
33596
33582
|
};
|
|
33597
33583
|
FileManagerComponent.prototype.shareFile = function (file) {
|
|
33598
33584
|
return __awaiter(this, void 0, void 0, function () {
|
|
33599
|
-
return __generator(this, function (
|
|
33585
|
+
return __generator(this, function (_b) {
|
|
33600
33586
|
this.forms.shareFile.data = file;
|
|
33601
33587
|
this.forms.shareFile.show = true;
|
|
33602
33588
|
return [2 /*return*/];
|
|
@@ -33610,19 +33596,154 @@
|
|
|
33610
33596
|
};
|
|
33611
33597
|
FileManagerComponent.prototype.viewListSign = function (e, signatures) {
|
|
33612
33598
|
e.stopPropagation();
|
|
33613
|
-
this.
|
|
33599
|
+
this.model.advanceData = signatures;
|
|
33614
33600
|
this.forms.signatureDetail.show = true;
|
|
33615
33601
|
};
|
|
33616
33602
|
FileManagerComponent.prototype.onRowSelect = function (evt) {
|
|
33617
33603
|
this.onSelected.emit(this.model.selectedItems);
|
|
33618
33604
|
};
|
|
33605
|
+
FileManagerComponent.prototype.signMultiple = function () {
|
|
33606
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
33607
|
+
var selectedItems, hasItems;
|
|
33608
|
+
return __generator(this, function (_b) {
|
|
33609
|
+
selectedItems = this.model.selectedItems;
|
|
33610
|
+
hasItems = selectedItems && selectedItems.length;
|
|
33611
|
+
if (hasItems) {
|
|
33612
|
+
if (selectedItems.length == 1) {
|
|
33613
|
+
this.signFile(selectedItems[0]);
|
|
33614
|
+
}
|
|
33615
|
+
else {
|
|
33616
|
+
this.signFileMultiple(selectedItems);
|
|
33617
|
+
}
|
|
33618
|
+
}
|
|
33619
|
+
return [2 /*return*/];
|
|
33620
|
+
});
|
|
33621
|
+
});
|
|
33622
|
+
};
|
|
33623
|
+
FileManagerComponent.prototype.signFileMultiple = function (lstFile) {
|
|
33624
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
33625
|
+
var prms, rs, lstFile_1, lstFile_1_1, file, sourceFileId, sourceFile, rsConvert, result, url, e_2, result, url, e_3_1, json_prms;
|
|
33626
|
+
var e_3, _b;
|
|
33627
|
+
var _this = this;
|
|
33628
|
+
return __generator(this, function (_c) {
|
|
33629
|
+
switch (_c.label) {
|
|
33630
|
+
case 0:
|
|
33631
|
+
prms = {};
|
|
33632
|
+
prms['Files'] = [];
|
|
33633
|
+
prms['FileUploadHandler'] = this._moduleConfig.environment.apiDomain.fileEndpoint + "/" + this._moduleConfig.environment.apiVersion + "/KySoFile/SavePhysicalSignedFile";
|
|
33634
|
+
prms['SessionId'] = '';
|
|
33635
|
+
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?')];
|
|
33636
|
+
case 1:
|
|
33637
|
+
rs = _c.sent();
|
|
33638
|
+
if (!rs) return [3 /*break*/, 18];
|
|
33639
|
+
_c.label = 2;
|
|
33640
|
+
case 2:
|
|
33641
|
+
_c.trys.push([2, 15, 16, 17]);
|
|
33642
|
+
lstFile_1 = __values(lstFile), lstFile_1_1 = lstFile_1.next();
|
|
33643
|
+
_c.label = 3;
|
|
33644
|
+
case 3:
|
|
33645
|
+
if (!!lstFile_1_1.done) return [3 /*break*/, 14];
|
|
33646
|
+
file = lstFile_1_1.value;
|
|
33647
|
+
if (!this._fileObjectService.isTypeFileKySo(file.name))
|
|
33648
|
+
return [3 /*break*/, 13];
|
|
33649
|
+
sourceFileId = file.id;
|
|
33650
|
+
sourceFile = file;
|
|
33651
|
+
if (!this._fileExplorerService.needConvertBeforeSign(file.name)) return [3 /*break*/, 11];
|
|
33652
|
+
_c.label = 4;
|
|
33653
|
+
case 4:
|
|
33654
|
+
_c.trys.push([4, 9, , 10]);
|
|
33655
|
+
return [4 /*yield*/, this._fileExplorerService.convertDocumentToPdfAndSave({
|
|
33656
|
+
id: sourceFileId,
|
|
33657
|
+
name: this._fileExplorerService.changeFileExtension(file.name, 'pdf'),
|
|
33658
|
+
folderId: file.parentFolderId,
|
|
33659
|
+
ownerType: this._userService.getCurrentUser().userId.toString(),
|
|
33660
|
+
})];
|
|
33661
|
+
case 5:
|
|
33662
|
+
rsConvert = _c.sent();
|
|
33663
|
+
if (!(!rsConvert || !rsConvert.success)) return [3 /*break*/, 6];
|
|
33664
|
+
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");
|
|
33665
|
+
return [3 /*break*/, 13];
|
|
33666
|
+
case 6: return [4 /*yield*/, this._fileExplorerService.generateLinkDownload({ fileId: rsConvert.data })];
|
|
33667
|
+
case 7:
|
|
33668
|
+
result = _c.sent();
|
|
33669
|
+
if (result.success) {
|
|
33670
|
+
url = this._downloadLinkService.getDownloadForSignUrl(result.data);
|
|
33671
|
+
prms['Files'].push({
|
|
33672
|
+
"FileID": rsConvert.data,
|
|
33673
|
+
"FileName": this._fileExplorerService.changeFileExtension(file.name, 'pdf'),
|
|
33674
|
+
"URL": url,
|
|
33675
|
+
});
|
|
33676
|
+
}
|
|
33677
|
+
_c.label = 8;
|
|
33678
|
+
case 8: return [3 /*break*/, 10];
|
|
33679
|
+
case 9:
|
|
33680
|
+
e_2 = _c.sent();
|
|
33681
|
+
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");
|
|
33682
|
+
return [3 /*break*/, 13];
|
|
33683
|
+
case 10: return [3 /*break*/, 13];
|
|
33684
|
+
case 11: return [4 /*yield*/, this._fileExplorerService.generateLinkDownload({ fileId: sourceFileId })];
|
|
33685
|
+
case 12:
|
|
33686
|
+
result = _c.sent();
|
|
33687
|
+
if (result.success) {
|
|
33688
|
+
url = this._downloadLinkService.getDownloadForSignUrl(result.data);
|
|
33689
|
+
prms['Files'].push({
|
|
33690
|
+
"FileID": sourceFileId,
|
|
33691
|
+
"FileName": file.name,
|
|
33692
|
+
"URL": url,
|
|
33693
|
+
});
|
|
33694
|
+
}
|
|
33695
|
+
_c.label = 13;
|
|
33696
|
+
case 13:
|
|
33697
|
+
lstFile_1_1 = lstFile_1.next();
|
|
33698
|
+
return [3 /*break*/, 3];
|
|
33699
|
+
case 14: return [3 /*break*/, 17];
|
|
33700
|
+
case 15:
|
|
33701
|
+
e_3_1 = _c.sent();
|
|
33702
|
+
e_3 = { error: e_3_1 };
|
|
33703
|
+
return [3 /*break*/, 17];
|
|
33704
|
+
case 16:
|
|
33705
|
+
try {
|
|
33706
|
+
if (lstFile_1_1 && !lstFile_1_1.done && (_b = lstFile_1.return)) _b.call(lstFile_1);
|
|
33707
|
+
}
|
|
33708
|
+
finally { if (e_3) throw e_3.error; }
|
|
33709
|
+
return [7 /*endfinally*/];
|
|
33710
|
+
case 17:
|
|
33711
|
+
json_prms = JSON.stringify(prms);
|
|
33712
|
+
vgca_sign_files(json_prms, function (result) {
|
|
33713
|
+
var _a;
|
|
33714
|
+
var resultObj = JSON.parse(result);
|
|
33715
|
+
if ((_a = resultObj.Files) === null || _a === void 0 ? void 0 : _a.length) {
|
|
33716
|
+
resultObj.Files.forEach(function (item) { return __awaiter(_this, void 0, void 0, function () {
|
|
33717
|
+
var _this = this;
|
|
33718
|
+
return __generator(this, function (_b) {
|
|
33719
|
+
this._fileExplorerService.saveSignedFile({
|
|
33720
|
+
sourceFile: { id: item.FileID },
|
|
33721
|
+
tempFileId: item.FileSignedURL,
|
|
33722
|
+
}).then(function (rss) {
|
|
33723
|
+
_this._triggerProcessData();
|
|
33724
|
+
_this._notifierService.showSuccess('Ký số thành công');
|
|
33725
|
+
});
|
|
33726
|
+
return [2 /*return*/];
|
|
33727
|
+
});
|
|
33728
|
+
}); });
|
|
33729
|
+
}
|
|
33730
|
+
;
|
|
33731
|
+
});
|
|
33732
|
+
_c.label = 18;
|
|
33733
|
+
case 18:
|
|
33734
|
+
;
|
|
33735
|
+
return [2 /*return*/];
|
|
33736
|
+
}
|
|
33737
|
+
});
|
|
33738
|
+
});
|
|
33739
|
+
};
|
|
33619
33740
|
return FileManagerComponent;
|
|
33620
33741
|
}(DataListBase));
|
|
33621
33742
|
FileManagerComponent.decorators = [
|
|
33622
33743
|
{ type: i0.Component, args: [{
|
|
33623
33744
|
// tslint:disable-next-line: component-selector
|
|
33624
33745
|
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> -->",
|
|
33746
|
+
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=\"!signonly&&!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 <ng-container *ngIf=\"!this.signonly&&!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
33747
|
providers: [
|
|
33627
33748
|
{
|
|
33628
33749
|
provide: forms.NG_VALUE_ACCESSOR,
|
|
@@ -33672,6 +33793,7 @@
|
|
|
33672
33793
|
entity: [{ type: i0.Input }],
|
|
33673
33794
|
entityKey: [{ type: i0.Input }],
|
|
33674
33795
|
readonly: [{ type: i0.Input }],
|
|
33796
|
+
signonly: [{ type: i0.Input }],
|
|
33675
33797
|
value: [{ type: i0.Input }],
|
|
33676
33798
|
onReady: [{ type: i0.Output }],
|
|
33677
33799
|
entityKeyChange: [{ type: i0.Output }],
|
|
@@ -34600,6 +34722,12 @@
|
|
|
34600
34722
|
_this.hasFile = false;
|
|
34601
34723
|
_this.showNoti = false;
|
|
34602
34724
|
_this.notification = null;
|
|
34725
|
+
_this.supportedExtensions = [
|
|
34726
|
+
'pdf',
|
|
34727
|
+
'jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp',
|
|
34728
|
+
'mp4', 'webm', 'ogg',
|
|
34729
|
+
'mp3', 'wav', 'aac' // Âm thanh
|
|
34730
|
+
];
|
|
34603
34731
|
return _this;
|
|
34604
34732
|
}
|
|
34605
34733
|
FileUploadComponent.prototype.writeValue = function (obj) {
|
|
@@ -34620,15 +34748,15 @@
|
|
|
34620
34748
|
FileUploadComponent.prototype.getFile = function () {
|
|
34621
34749
|
return __awaiter(this, void 0, void 0, function () {
|
|
34622
34750
|
var fileObject;
|
|
34623
|
-
return __generator(this, function (
|
|
34624
|
-
switch (
|
|
34751
|
+
return __generator(this, function (_b) {
|
|
34752
|
+
switch (_b.label) {
|
|
34625
34753
|
case 0:
|
|
34626
34754
|
if (!this.fileId) return [3 /*break*/, 2];
|
|
34627
34755
|
this.loading = true;
|
|
34628
34756
|
this.notification = 'Đang đính kèm...';
|
|
34629
34757
|
return [4 /*yield*/, this._fileObjectService.getDetail(this.fileId)];
|
|
34630
34758
|
case 1:
|
|
34631
|
-
fileObject = (
|
|
34759
|
+
fileObject = (_b.sent()).data;
|
|
34632
34760
|
if (fileObject) {
|
|
34633
34761
|
this.selectedFileName = fileObject.name;
|
|
34634
34762
|
this.hasFile = true;
|
|
@@ -34639,7 +34767,7 @@
|
|
|
34639
34767
|
else {
|
|
34640
34768
|
this.hasFile = false;
|
|
34641
34769
|
}
|
|
34642
|
-
|
|
34770
|
+
_b.label = 2;
|
|
34643
34771
|
case 2: return [2 /*return*/];
|
|
34644
34772
|
}
|
|
34645
34773
|
});
|
|
@@ -34733,12 +34861,38 @@
|
|
|
34733
34861
|
this._downloadLinkService.download(model);
|
|
34734
34862
|
}
|
|
34735
34863
|
};
|
|
34864
|
+
FileUploadComponent.prototype.isViewableFile = function (url) {
|
|
34865
|
+
var _a;
|
|
34866
|
+
if (!url) {
|
|
34867
|
+
return false;
|
|
34868
|
+
}
|
|
34869
|
+
try {
|
|
34870
|
+
// Lấy phần mở rộng của file từ URL
|
|
34871
|
+
var extension = (_a = url.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
34872
|
+
return extension ? this.supportedExtensions.includes(extension) : false;
|
|
34873
|
+
}
|
|
34874
|
+
catch (error) {
|
|
34875
|
+
console.error('Lỗi khi kiểm tra đuôi file:', error);
|
|
34876
|
+
return false;
|
|
34877
|
+
}
|
|
34878
|
+
};
|
|
34879
|
+
FileUploadComponent.prototype.onDownloadOrViewFile = function () {
|
|
34880
|
+
if (this.isViewableFile(this.selectedFileName)) {
|
|
34881
|
+
if (this.fileId) {
|
|
34882
|
+
var url = this._fileObjectService.getPublicDownloadLinkByFileId(this.fileId);
|
|
34883
|
+
window.open(url, '_blank');
|
|
34884
|
+
}
|
|
34885
|
+
}
|
|
34886
|
+
else {
|
|
34887
|
+
this.onDownloadFile();
|
|
34888
|
+
}
|
|
34889
|
+
};
|
|
34736
34890
|
return FileUploadComponent;
|
|
34737
34891
|
}(ComponentBase));
|
|
34738
34892
|
FileUploadComponent.decorators = [
|
|
34739
34893
|
{ type: i0.Component, args: [{
|
|
34740
34894
|
selector: 'file-upload',
|
|
34741
|
-
template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"
|
|
34895
|
+
template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\" style=\"font-size: 2rem\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"onDownloadOrViewFile()\">\r\n <span *ngIf=\"!showNoti\">{{selectedFileName}}</span>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" 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)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" [auto]=\"false\" class=\"file-upload\" mode=\"basic\"\r\n [chooseLabel]=\"chooseLabel\" name=\"file[]\" [maxFileSize]=\"maxFileSize\" accept=\"{{accept}}\"\r\n pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" multiple=\"single\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onSelect)=\"onSelectFile($event)\"\r\n (onError)=\"handleError($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>",
|
|
34742
34896
|
providers: [
|
|
34743
34897
|
{
|
|
34744
34898
|
provide: forms.NG_VALUE_ACCESSOR,
|
|
@@ -34891,11 +35045,9 @@
|
|
|
34891
35045
|
this.decimalPlaces = 2;
|
|
34892
35046
|
this.viewMode = false;
|
|
34893
35047
|
this.inputStyleClass = '';
|
|
34894
|
-
this.thousandSeperator = '.';
|
|
34895
35048
|
this.onFocus = new i0.EventEmitter();
|
|
34896
35049
|
this.onBlur = new i0.EventEmitter();
|
|
34897
35050
|
this.onChanged = new i0.EventEmitter();
|
|
34898
|
-
this.locale = 'vi-VN';
|
|
34899
35051
|
}
|
|
34900
35052
|
Object.defineProperty(MaskComponent.prototype, "placeholder", {
|
|
34901
35053
|
set: function (value) {
|
|
@@ -34907,11 +35059,10 @@
|
|
|
34907
35059
|
configurable: true
|
|
34908
35060
|
});
|
|
34909
35061
|
MaskComponent.prototype.ngOnInit = function () {
|
|
34910
|
-
this.locale = this.thousandSeperator == '.' ? 'vi-VN' : 'en-US';
|
|
34911
35062
|
};
|
|
34912
35063
|
MaskComponent.prototype.writeValue = function (obj) {
|
|
34913
35064
|
if (obj) {
|
|
34914
|
-
this.model = this._numberPipe.transform(obj, '',
|
|
35065
|
+
this.model = this._numberPipe.transform(obj, '', 'vi-VN');
|
|
34915
35066
|
this.value = Number(this.model);
|
|
34916
35067
|
}
|
|
34917
35068
|
else if (obj === 0) {
|
|
@@ -34929,7 +35080,7 @@
|
|
|
34929
35080
|
return 'separator.0';
|
|
34930
35081
|
};
|
|
34931
35082
|
MaskComponent.prototype.getThousandSeperator = function () {
|
|
34932
|
-
return
|
|
35083
|
+
return '.';
|
|
34933
35084
|
};
|
|
34934
35085
|
MaskComponent.prototype.handleFocus = function () {
|
|
34935
35086
|
this.onFocus.emit(this.value);
|
|
@@ -34961,7 +35112,7 @@
|
|
|
34961
35112
|
}
|
|
34962
35113
|
};
|
|
34963
35114
|
MaskComponent.prototype.numberToStringVN = function (number) {
|
|
34964
|
-
return this._numberPipe.transform(number, '',
|
|
35115
|
+
return this._numberPipe.transform(number, '', 'vi-VN');
|
|
34965
35116
|
};
|
|
34966
35117
|
MaskComponent.prototype.registerOnChange = function (fn) {
|
|
34967
35118
|
this.onChange = fn;
|
|
@@ -35006,7 +35157,6 @@
|
|
|
35006
35157
|
decimalPlaces: [{ type: i0.Input }],
|
|
35007
35158
|
viewMode: [{ type: i0.Input }],
|
|
35008
35159
|
inputStyleClass: [{ type: i0.Input }],
|
|
35009
|
-
thousandSeperator: [{ type: i0.Input }],
|
|
35010
35160
|
onFocus: [{ type: i0.Output }],
|
|
35011
35161
|
onBlur: [{ type: i0.Output }],
|
|
35012
35162
|
onChanged: [{ type: i0.Output }]
|
|
@@ -35913,6 +36063,12 @@
|
|
|
35913
36063
|
_this.onRemove = new i0.EventEmitter();
|
|
35914
36064
|
_this.onChanged = new i0.EventEmitter();
|
|
35915
36065
|
_this.dataModel = {};
|
|
36066
|
+
_this.supportedExtensions = [
|
|
36067
|
+
'pdf',
|
|
36068
|
+
'jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp',
|
|
36069
|
+
'mp4', 'webm', 'ogg',
|
|
36070
|
+
'mp3', 'wav', 'aac' // Âm thanh
|
|
36071
|
+
];
|
|
35916
36072
|
if (_this._userService.isValidAccessToken()) {
|
|
35917
36073
|
_this.userId = _this._userService.getUserIdCombine();
|
|
35918
36074
|
}
|
|
@@ -35946,8 +36102,8 @@
|
|
|
35946
36102
|
ServiceFileUploadComponent.prototype.getServiceFile = function () {
|
|
35947
36103
|
return __awaiter(this, void 0, void 0, function () {
|
|
35948
36104
|
var serviceRequestModel, fileObject;
|
|
35949
|
-
return __generator(this, function (
|
|
35950
|
-
switch (
|
|
36105
|
+
return __generator(this, function (_b) {
|
|
36106
|
+
switch (_b.label) {
|
|
35951
36107
|
case 0:
|
|
35952
36108
|
if (!this.hasKeys()) return [3 /*break*/, 2];
|
|
35953
36109
|
serviceRequestModel = {
|
|
@@ -35959,7 +36115,7 @@
|
|
|
35959
36115
|
this.setNoti('Đang lấy đính kèm...');
|
|
35960
36116
|
return [4 /*yield*/, this._fileObjectService.getSingleServiceFile(serviceRequestModel)];
|
|
35961
36117
|
case 1:
|
|
35962
|
-
fileObject = (
|
|
36118
|
+
fileObject = (_b.sent()).data;
|
|
35963
36119
|
this.loading = false;
|
|
35964
36120
|
this.setNoti(null);
|
|
35965
36121
|
if (fileObject) {
|
|
@@ -35979,7 +36135,7 @@
|
|
|
35979
36135
|
this.selectedFileName = null;
|
|
35980
36136
|
this.onChangeBase(null);
|
|
35981
36137
|
this.onChanged.emit();
|
|
35982
|
-
|
|
36138
|
+
_b.label = 3;
|
|
35983
36139
|
case 3:
|
|
35984
36140
|
this.setMenu();
|
|
35985
36141
|
return [2 /*return*/];
|
|
@@ -36226,12 +36382,36 @@
|
|
|
36226
36382
|
ServiceFileUploadComponent.prototype.setDisabledState = function (isDisabled) {
|
|
36227
36383
|
this.isDisabled = isDisabled;
|
|
36228
36384
|
};
|
|
36385
|
+
ServiceFileUploadComponent.prototype.isViewableFile = function (url) {
|
|
36386
|
+
var _a;
|
|
36387
|
+
if (!url) {
|
|
36388
|
+
return false;
|
|
36389
|
+
}
|
|
36390
|
+
try {
|
|
36391
|
+
// Lấy phần mở rộng của file từ URL
|
|
36392
|
+
var extension = (_a = url.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
36393
|
+
return extension ? this.supportedExtensions.includes(extension) : false;
|
|
36394
|
+
}
|
|
36395
|
+
catch (error) {
|
|
36396
|
+
console.error('Lỗi khi kiểm tra đuôi file:', error);
|
|
36397
|
+
return false;
|
|
36398
|
+
}
|
|
36399
|
+
};
|
|
36400
|
+
ServiceFileUploadComponent.prototype.onDownloadOrViewFile = function () {
|
|
36401
|
+
if (this.isViewableFile(this.selectedFileName)) {
|
|
36402
|
+
var url = this._fileObjectService.getPublicDownloadLinkByFileId(this.fileId);
|
|
36403
|
+
window.open(url, '_blank');
|
|
36404
|
+
}
|
|
36405
|
+
else {
|
|
36406
|
+
this.onDownloadFile();
|
|
36407
|
+
}
|
|
36408
|
+
};
|
|
36229
36409
|
return ServiceFileUploadComponent;
|
|
36230
36410
|
}(ComponentBase));
|
|
36231
36411
|
ServiceFileUploadComponent.decorators = [
|
|
36232
36412
|
{ type: i0.Component, args: [{
|
|
36233
36413
|
selector: 'service-file-upload',
|
|
36234
|
-
template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"
|
|
36414
|
+
template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"onDownloadOrViewFile()\">\r\n <div>\r\n <ng-container *ngIf=\"!showNoti\">\r\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\r\n <span *ngIf=\"extension\">.{{extension}} </span>\r\n </ng-container>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" 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)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" class=\"file-upload\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file[]\"\r\n [maxFileSize]=\"control.maxFileSize\" pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" multiple=\"single\"\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\" [accept]=\"accept\"\r\n (onSelect)=\"onSelectFile($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>",
|
|
36235
36415
|
providers: [
|
|
36236
36416
|
{
|
|
36237
36417
|
provide: forms.NG_VALUE_ACCESSOR,
|
|
@@ -45514,10 +45694,8 @@
|
|
|
45514
45694
|
},] }
|
|
45515
45695
|
];
|
|
45516
45696
|
|
|
45517
|
-
var moment$1 = moment___namespace;
|
|
45518
45697
|
var TnDatePipe = /** @class */ (function () {
|
|
45519
|
-
function TnDatePipe(
|
|
45520
|
-
this.format = format;
|
|
45698
|
+
function TnDatePipe() {
|
|
45521
45699
|
}
|
|
45522
45700
|
TnDatePipe.prototype.addZero = function (value) {
|
|
45523
45701
|
if (value < 10)
|
|
@@ -45527,8 +45705,6 @@
|
|
|
45527
45705
|
TnDatePipe.prototype.transform = function (value, args) {
|
|
45528
45706
|
if (value == null)
|
|
45529
45707
|
return '';
|
|
45530
|
-
if (this.format)
|
|
45531
|
-
return moment$1(value).format(this.format);
|
|
45532
45708
|
var date = new Date(value);
|
|
45533
45709
|
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
45710
|
};
|
|
@@ -45538,10 +45714,7 @@
|
|
|
45538
45714
|
{ type: i0.Pipe, args: [{
|
|
45539
45715
|
name: 'tnDate'
|
|
45540
45716
|
},] }
|
|
45541
|
-
];
|
|
45542
|
-
TnDatePipe.ctorParameters = function () { return [
|
|
45543
|
-
{ type: undefined, decorators: [{ type: i0.Inject, args: [i0.LOCALE_ID,] }] }
|
|
45544
|
-
]; };
|
|
45717
|
+
];
|
|
45545
45718
|
|
|
45546
45719
|
var UserFormatPipe = /** @class */ (function () {
|
|
45547
45720
|
function UserFormatPipe(_userService) {
|
|
@@ -45706,9 +45879,74 @@
|
|
|
45706
45879
|
{ type: UserService }
|
|
45707
45880
|
]; };
|
|
45708
45881
|
|
|
45882
|
+
// fix for build prod
|
|
45883
|
+
var moment$1 = moment___namespace;
|
|
45884
|
+
var SignatureDetailComponent = /** @class */ (function (_super) {
|
|
45885
|
+
__extends(SignatureDetailComponent, _super);
|
|
45886
|
+
function SignatureDetailComponent(injector) {
|
|
45887
|
+
return _super.call(this, injector) || this;
|
|
45888
|
+
}
|
|
45889
|
+
SignatureDetailComponent.prototype.ngOnInit = function () {
|
|
45890
|
+
this.model.data = this.parentModel.advanceData;
|
|
45891
|
+
this.buildTree();
|
|
45892
|
+
};
|
|
45893
|
+
SignatureDetailComponent.prototype.buildTree = function () {
|
|
45894
|
+
var nodes = [];
|
|
45895
|
+
for (var ind in this.model.data) {
|
|
45896
|
+
var item = this.model.data[ind];
|
|
45897
|
+
var childNodes = { expanded: true, children: [] };
|
|
45898
|
+
childNodes.label = "" + item.reason;
|
|
45899
|
+
childNodes.expandedIcon = 'fas fa-signature';
|
|
45900
|
+
childNodes.collapsedIcon = 'fas fa-signature';
|
|
45901
|
+
childNodes.leaf = false;
|
|
45902
|
+
if (item.reason) {
|
|
45903
|
+
childNodes.children.push({
|
|
45904
|
+
label: 'Người ký: ' + item.certificate.subject.nameOfSigner,
|
|
45905
|
+
expandedIcon: 'fas fa-user-tag',
|
|
45906
|
+
collapsedIcon: 'fas fa-user-tag',
|
|
45907
|
+
leaf: true
|
|
45908
|
+
});
|
|
45909
|
+
}
|
|
45910
|
+
childNodes.children.push({
|
|
45911
|
+
label: 'Đơn vị: ' + item.certificate.subject.organizationUnit + ' - ' + item.certificate.subject.organization,
|
|
45912
|
+
expandedIcon: 'fas fa-building',
|
|
45913
|
+
collapsedIcon: 'fas fa-building',
|
|
45914
|
+
leaf: true
|
|
45915
|
+
});
|
|
45916
|
+
childNodes.children.push({
|
|
45917
|
+
label: 'Chứng thư cấp bởi: ' + item.certificate.issuerDN.nameOfIssuer,
|
|
45918
|
+
expandedIcon: 'fas fa-certificate',
|
|
45919
|
+
collapsedIcon: 'fas fa-certificate',
|
|
45920
|
+
leaf: true
|
|
45921
|
+
});
|
|
45922
|
+
childNodes.children.push({
|
|
45923
|
+
label: 'Thời gian ký: ' + moment$1(item.signDate).format('D/MM/Y hh:mm:ss Z'),
|
|
45924
|
+
expandedIcon: 'fas fa-clock',
|
|
45925
|
+
collapsedIcon: 'fas fa-clock',
|
|
45926
|
+
leaf: true
|
|
45927
|
+
});
|
|
45928
|
+
nodes.push(childNodes);
|
|
45929
|
+
}
|
|
45930
|
+
this.model.dataSource = nodes;
|
|
45931
|
+
};
|
|
45932
|
+
return SignatureDetailComponent;
|
|
45933
|
+
}(ComponentBase));
|
|
45934
|
+
SignatureDetailComponent.decorators = [
|
|
45935
|
+
{ type: i0.Component, args: [{
|
|
45936
|
+
selector: 'signature-detail',
|
|
45937
|
+
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>",
|
|
45938
|
+
providers: [ComponentContextService],
|
|
45939
|
+
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}"]
|
|
45940
|
+
},] }
|
|
45941
|
+
];
|
|
45942
|
+
SignatureDetailComponent.ctorParameters = function () { return [
|
|
45943
|
+
{ type: i0.Injector }
|
|
45944
|
+
]; };
|
|
45945
|
+
|
|
45709
45946
|
function coreDeclaration() {
|
|
45710
45947
|
return [
|
|
45711
45948
|
AddressComponent,
|
|
45949
|
+
AddressNewComponent,
|
|
45712
45950
|
AfterViewCheckedComponent,
|
|
45713
45951
|
AdvanceSearchComponent,
|
|
45714
45952
|
AppRootMenuComponent,
|
|
@@ -45835,7 +46073,8 @@
|
|
|
45835
46073
|
FilePickerDialogComponent,
|
|
45836
46074
|
AddNewsComponent,
|
|
45837
46075
|
CommonDashboardComponent,
|
|
45838
|
-
NotFoundComponent
|
|
46076
|
+
NotFoundComponent,
|
|
46077
|
+
SignatureDetailComponent
|
|
45839
46078
|
];
|
|
45840
46079
|
}
|
|
45841
46080
|
function coreModuleImport() {
|
|
@@ -47388,67 +47627,6 @@
|
|
|
47388
47627
|
{ type: ModuleConfigService }
|
|
47389
47628
|
]; };
|
|
47390
47629
|
|
|
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
47630
|
var ErrorType = /** @class */ (function () {
|
|
47453
47631
|
function ErrorType() {
|
|
47454
47632
|
}
|
|
@@ -47577,64 +47755,22 @@
|
|
|
47577
47755
|
return TemplateTextMany;
|
|
47578
47756
|
}());
|
|
47579
47757
|
|
|
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
|
-
});
|
|
47758
|
+
var ServiceRequestModel = /** @class */ (function () {
|
|
47759
|
+
function ServiceRequestModel() {
|
|
47760
|
+
this.service = '';
|
|
47761
|
+
this.entityInstanceId = '';
|
|
47762
|
+
this.parent = null;
|
|
47763
|
+
this.serviceCode = '';
|
|
47764
|
+
this.entity = '';
|
|
47765
|
+
this.entityKey = '';
|
|
47766
|
+
}
|
|
47767
|
+
return ServiceRequestModel;
|
|
47768
|
+
}());
|
|
47769
|
+
|
|
47770
|
+
var FileVersionDTO = /** @class */ (function () {
|
|
47771
|
+
function FileVersionDTO() {
|
|
47636
47772
|
}
|
|
47637
|
-
return
|
|
47773
|
+
return FileVersionDTO;
|
|
47638
47774
|
}());
|
|
47639
47775
|
|
|
47640
47776
|
(function (PermissionBase) {
|
|
@@ -47876,6 +48012,7 @@
|
|
|
47876
48012
|
exports.AccessDeniedComponent = AccessDeniedComponent;
|
|
47877
48013
|
exports.Action = Action;
|
|
47878
48014
|
exports.AddressControlSchema = AddressControlSchema;
|
|
48015
|
+
exports.AddressNewControlSchema = AddressNewControlSchema;
|
|
47879
48016
|
exports.AddressService = AddressService;
|
|
47880
48017
|
exports.AdvanceSearchData = AdvanceSearchData;
|
|
47881
48018
|
exports.AdvanceSearchSetting = AdvanceSearchSetting;
|
|
@@ -47992,16 +48129,18 @@
|
|
|
47992
48129
|
exports.FILE_TYPES = FILE_TYPES;
|
|
47993
48130
|
exports.FieldDefineIsWorkflowControl = FieldDefineIsWorkflowControl;
|
|
47994
48131
|
exports.FileDataService = FileDataService;
|
|
48132
|
+
exports.FileExplorerItem = FileExplorerItem;
|
|
48133
|
+
exports.FileExplorerNewService = FileExplorerNewService;
|
|
47995
48134
|
exports.FileExplorerService = FileExplorerService;
|
|
47996
48135
|
exports.FileManagerComponent = FileManagerComponent;
|
|
47997
48136
|
exports.FileManagerControlSchema = FileManagerControlSchema;
|
|
47998
|
-
exports.FileManagerSetting = FileManagerSetting;
|
|
47999
48137
|
exports.FileObjectService = FileObjectService;
|
|
48000
48138
|
exports.FilePickerDialogComponent = FilePickerDialogComponent;
|
|
48001
48139
|
exports.FileUploadComponent = FileUploadComponent;
|
|
48002
48140
|
exports.FileUploadControlSchema = FileUploadControlSchema;
|
|
48003
|
-
exports.FileUploadSetting = FileUploadSetting;
|
|
48004
48141
|
exports.FileV4Service = FileV4Service;
|
|
48142
|
+
exports.FileVersionDTO = FileVersionDTO;
|
|
48143
|
+
exports.FileVersionService = FileVersionService;
|
|
48005
48144
|
exports.Filter = Filter;
|
|
48006
48145
|
exports.FolderService = FolderService;
|
|
48007
48146
|
exports.FormControlBase = FormControlBase;
|
|
@@ -48042,6 +48181,7 @@
|
|
|
48042
48181
|
exports.ModuleConfigService = ModuleConfigService;
|
|
48043
48182
|
exports.MultiTranslateHttpLoader = MultiTranslateHttpLoader;
|
|
48044
48183
|
exports.MultipleReferenceDataFormatPipe = MultipleReferenceDataFormatPipe;
|
|
48184
|
+
exports.MyDriveService = MyDriveService;
|
|
48045
48185
|
exports.NodeService = NodeService;
|
|
48046
48186
|
exports.NotFoundComponent = NotFoundComponent;
|
|
48047
48187
|
exports.NotificationService = NotificationService;
|
|
@@ -48049,7 +48189,6 @@
|
|
|
48049
48189
|
exports.NumberCompareValidator = NumberCompareValidator;
|
|
48050
48190
|
exports.NumberOnlyValidator = NumberOnlyValidator;
|
|
48051
48191
|
exports.NumberRangeControlSchema = NumberRangeControlSchema;
|
|
48052
|
-
exports.OrganizationBaseService = OrganizationBaseService;
|
|
48053
48192
|
exports.OrganizationFormatPipe = OrganizationFormatPipe;
|
|
48054
48193
|
exports.OrganizationNameFormatPipe = OrganizationNameFormatPipe;
|
|
48055
48194
|
exports.OrganizationPickerControlSchema = OrganizationPickerControlSchema;
|
|
@@ -48091,6 +48230,7 @@
|
|
|
48091
48230
|
exports.SchemaBase = SchemaBase;
|
|
48092
48231
|
exports.SecurePipe = SecurePipe;
|
|
48093
48232
|
exports.ServiceFileUploadComponent = ServiceFileUploadComponent;
|
|
48233
|
+
exports.ServiceRequestModel = ServiceRequestModel;
|
|
48094
48234
|
exports.SessionTypes = SessionTypes;
|
|
48095
48235
|
exports.SignalRService = SignalRService;
|
|
48096
48236
|
exports.SimpleDicItem = SimpleDicItem;
|
|
@@ -48237,107 +48377,107 @@
|
|
|
48237
48377
|
exports.ɵ9 = ɵ9;
|
|
48238
48378
|
exports.ɵa = AddressComponent;
|
|
48239
48379
|
exports.ɵb = DropdownService;
|
|
48240
|
-
exports.ɵba =
|
|
48241
|
-
exports.ɵbb =
|
|
48242
|
-
exports.ɵbc =
|
|
48243
|
-
exports.ɵbd =
|
|
48244
|
-
exports.ɵbe =
|
|
48245
|
-
exports.ɵbf =
|
|
48246
|
-
exports.ɵbg =
|
|
48247
|
-
exports.ɵbh =
|
|
48248
|
-
exports.ɵbi =
|
|
48249
|
-
exports.ɵbj =
|
|
48250
|
-
exports.ɵbk =
|
|
48251
|
-
exports.ɵbl =
|
|
48252
|
-
exports.ɵbm =
|
|
48253
|
-
exports.ɵbn =
|
|
48254
|
-
exports.ɵbo =
|
|
48255
|
-
exports.ɵbp =
|
|
48256
|
-
exports.ɵbq =
|
|
48257
|
-
exports.ɵbr =
|
|
48258
|
-
exports.ɵbs =
|
|
48259
|
-
exports.ɵbt =
|
|
48260
|
-
exports.ɵbu =
|
|
48261
|
-
exports.ɵbv =
|
|
48262
|
-
exports.ɵbw =
|
|
48263
|
-
exports.ɵbx =
|
|
48264
|
-
exports.ɵby =
|
|
48265
|
-
exports.ɵbz =
|
|
48380
|
+
exports.ɵba = EntityPickerComponent;
|
|
48381
|
+
exports.ɵbb = EntityPickerDialogComponent;
|
|
48382
|
+
exports.ɵbc = EntityPermissionComponent;
|
|
48383
|
+
exports.ɵbd = DM_ChucVuService;
|
|
48384
|
+
exports.ɵbe = RoleService;
|
|
48385
|
+
exports.ɵbf = EntityPermissionService;
|
|
48386
|
+
exports.ɵbg = EquationEditorComponent;
|
|
48387
|
+
exports.ɵbh = MaskComponent;
|
|
48388
|
+
exports.ɵbi = NumberPickerRangeComponent;
|
|
48389
|
+
exports.ɵbj = PagingNextBackOnlyComponent;
|
|
48390
|
+
exports.ɵbk = RadioButtonListComponent;
|
|
48391
|
+
exports.ɵbl = VanBanPickerComponent;
|
|
48392
|
+
exports.ɵbm = VanBanDenService;
|
|
48393
|
+
exports.ɵbn = VanBanDiService;
|
|
48394
|
+
exports.ɵbo = VanBanPickerDialogComponent;
|
|
48395
|
+
exports.ɵbp = VanbanDiPickerComponent;
|
|
48396
|
+
exports.ɵbq = VanbanDenPickerComponent;
|
|
48397
|
+
exports.ɵbr = CongViecPickerComponent;
|
|
48398
|
+
exports.ɵbs = CongViecService;
|
|
48399
|
+
exports.ɵbt = TaskWorkflowHistoriesService;
|
|
48400
|
+
exports.ɵbu = SettingsComponent;
|
|
48401
|
+
exports.ɵbv = SettingsRowComponent;
|
|
48402
|
+
exports.ɵbw = SettingsWorkflowComponent;
|
|
48403
|
+
exports.ɵbx = SettingsWorkflowNo1Component;
|
|
48404
|
+
exports.ɵby = SimpleWorkflowFormComponent;
|
|
48405
|
+
exports.ɵbz = ProcessWorkflowFormComponent;
|
|
48266
48406
|
exports.ɵc = EntityPickerService;
|
|
48267
|
-
exports.ɵca =
|
|
48268
|
-
exports.ɵcb =
|
|
48269
|
-
exports.ɵcc =
|
|
48270
|
-
exports.ɵcd =
|
|
48271
|
-
exports.ɵce =
|
|
48272
|
-
exports.ɵcf =
|
|
48273
|
-
exports.ɵcg =
|
|
48274
|
-
exports.ɵch =
|
|
48275
|
-
exports.ɵci =
|
|
48276
|
-
exports.ɵcj =
|
|
48277
|
-
exports.ɵck =
|
|
48278
|
-
exports.ɵcl =
|
|
48279
|
-
exports.ɵcm =
|
|
48280
|
-
exports.ɵcn =
|
|
48281
|
-
exports.ɵco =
|
|
48282
|
-
exports.ɵcp =
|
|
48283
|
-
exports.ɵcq =
|
|
48284
|
-
exports.ɵcr =
|
|
48285
|
-
exports.ɵcs =
|
|
48286
|
-
exports.ɵct =
|
|
48287
|
-
exports.ɵcu =
|
|
48288
|
-
exports.ɵcv =
|
|
48289
|
-
exports.ɵcw =
|
|
48290
|
-
exports.ɵcx =
|
|
48291
|
-
exports.ɵcy =
|
|
48292
|
-
exports.ɵcz =
|
|
48407
|
+
exports.ɵca = WorkflowHistoryService;
|
|
48408
|
+
exports.ɵcb = ProcessWorkflowTargetComponent;
|
|
48409
|
+
exports.ɵcc = SplashComponentV1Component;
|
|
48410
|
+
exports.ɵcd = SplashComponentV2Component;
|
|
48411
|
+
exports.ɵce = StateMachinesConnectionReceiverComponent;
|
|
48412
|
+
exports.ɵcf = StateMachinesConnectionReceiverUserComponent;
|
|
48413
|
+
exports.ɵcg = StateMachinesConnectionReceiverDepartmentComponent;
|
|
48414
|
+
exports.ɵch = StateMachinesConnectionReceiverGroupComponent;
|
|
48415
|
+
exports.ɵci = StateMachinesConnectionReceiverRoleComponent;
|
|
48416
|
+
exports.ɵcj = StateMachinesConnectionSenderComponent;
|
|
48417
|
+
exports.ɵck = StartWorkflowComponent;
|
|
48418
|
+
exports.ɵcl = WorkflowSettingsService;
|
|
48419
|
+
exports.ɵcm = WorkflowSettingNewComponent;
|
|
48420
|
+
exports.ɵcn = DmLoaiCongViecService;
|
|
48421
|
+
exports.ɵco = TnDialogComponent;
|
|
48422
|
+
exports.ɵcp = TnColorPickerComponent;
|
|
48423
|
+
exports.ɵcq = TnTinymceComponent;
|
|
48424
|
+
exports.ɵcr = TnTabViewComponent;
|
|
48425
|
+
exports.ɵcs = TableDetailFormComponent;
|
|
48426
|
+
exports.ɵct = FileIconPipe;
|
|
48427
|
+
exports.ɵcu = FileSizePipe;
|
|
48428
|
+
exports.ɵcv = QuickAddFormComponent;
|
|
48429
|
+
exports.ɵcw = PreventShiftTabDirective;
|
|
48430
|
+
exports.ɵcx = UserPickerComponent;
|
|
48431
|
+
exports.ɵcy = UserPickerBoxComponent;
|
|
48432
|
+
exports.ɵcz = TnAppHelpComponent;
|
|
48293
48433
|
exports.ɵd = ExceptionHandlerService;
|
|
48294
|
-
exports.ɵda =
|
|
48295
|
-
exports.ɵdb =
|
|
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 =
|
|
48434
|
+
exports.ɵda = PathNameService;
|
|
48435
|
+
exports.ɵdb = HelperCurrentPageComponent;
|
|
48436
|
+
exports.ɵdc = TnAppNotificationListComponent;
|
|
48437
|
+
exports.ɵdd = TnAppNotificationComponent;
|
|
48438
|
+
exports.ɵde = FolderFormComponent;
|
|
48439
|
+
exports.ɵdf = FileFormComponent;
|
|
48440
|
+
exports.ɵdg = FileViewerComponent;
|
|
48441
|
+
exports.ɵdh = FileVersionListComponent;
|
|
48442
|
+
exports.ɵdi = WorkflowHistoryComponent;
|
|
48443
|
+
exports.ɵdj = EntityWorkflowHistoryService;
|
|
48444
|
+
exports.ɵdk = WorkflowHistoryDialogComponent;
|
|
48445
|
+
exports.ɵdl = WorkflowHistoryNewComponent;
|
|
48446
|
+
exports.ɵdm = WorkflowSettingComponent;
|
|
48447
|
+
exports.ɵdn = EntityWorkflowSettingService;
|
|
48448
|
+
exports.ɵdo = WorkflowSettingDialogComponent;
|
|
48449
|
+
exports.ɵdp = QrCodeGeneratorComponent;
|
|
48450
|
+
exports.ɵdq = AccessDeniedV1Component;
|
|
48451
|
+
exports.ɵdr = AddNewsComponent;
|
|
48452
|
+
exports.ɵds = ArticleService;
|
|
48453
|
+
exports.ɵdt = NewsCategoryService;
|
|
48454
|
+
exports.ɵdu = SignatureDetailComponent;
|
|
48315
48455
|
exports.ɵdv = CheckReadyComponent;
|
|
48316
48456
|
exports.ɵdw = SendAccessTokenInterceptor;
|
|
48317
48457
|
exports.ɵdx = LogInterceptor;
|
|
48318
48458
|
exports.ɵdy = PermissionUtilsInterceptor;
|
|
48319
48459
|
exports.ɵe = CanBo_HoSoService;
|
|
48320
|
-
exports.ɵf =
|
|
48321
|
-
exports.ɵg =
|
|
48322
|
-
exports.ɵh =
|
|
48323
|
-
exports.ɵi =
|
|
48324
|
-
exports.ɵj =
|
|
48325
|
-
exports.ɵk =
|
|
48326
|
-
exports.ɵl =
|
|
48327
|
-
exports.ɵm =
|
|
48328
|
-
exports.ɵn =
|
|
48329
|
-
exports.ɵo =
|
|
48330
|
-
exports.ɵp =
|
|
48331
|
-
exports.ɵq =
|
|
48332
|
-
exports.ɵr =
|
|
48333
|
-
exports.ɵs =
|
|
48334
|
-
exports.ɵt =
|
|
48335
|
-
exports.ɵu =
|
|
48336
|
-
exports.ɵv =
|
|
48337
|
-
exports.ɵw =
|
|
48338
|
-
exports.ɵx =
|
|
48339
|
-
exports.ɵy =
|
|
48340
|
-
exports.ɵz =
|
|
48460
|
+
exports.ɵf = AddressNewComponent;
|
|
48461
|
+
exports.ɵg = AddressService$1;
|
|
48462
|
+
exports.ɵh = AfterViewCheckedComponent;
|
|
48463
|
+
exports.ɵi = AdvanceSearchComponent;
|
|
48464
|
+
exports.ɵj = AppRootMenuComponent;
|
|
48465
|
+
exports.ɵk = AppTopBarComponent;
|
|
48466
|
+
exports.ɵl = AppTopBarV1Component;
|
|
48467
|
+
exports.ɵm = AppTopBarV2Component;
|
|
48468
|
+
exports.ɵn = AppProfileComponent;
|
|
48469
|
+
exports.ɵo = AppSubMenuComponent;
|
|
48470
|
+
exports.ɵp = AppMenuComponent;
|
|
48471
|
+
exports.ɵq = AutoCompletePickerComponent;
|
|
48472
|
+
exports.ɵr = CheckBoxListComponent;
|
|
48473
|
+
exports.ɵs = ReportQueueComponent;
|
|
48474
|
+
exports.ɵt = CoCauToChucPickerListComponent;
|
|
48475
|
+
exports.ɵu = DatetimePickerComponent;
|
|
48476
|
+
exports.ɵv = DatetimePickerRangeComponent;
|
|
48477
|
+
exports.ɵw = DynamicNodeComponent;
|
|
48478
|
+
exports.ɵx = EntityPickerBoxComponent;
|
|
48479
|
+
exports.ɵy = EntityPickerDataComponent;
|
|
48480
|
+
exports.ɵz = EntityPickerSelectedComponent;
|
|
48341
48481
|
|
|
48342
48482
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
48343
48483
|
|