tnx-shared 5.1.78 → 5.1.82

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.
Files changed (121) hide show
  1. package/bundles/tnx-shared.umd.js +994 -321
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-form-base.d.ts +1 -0
  6. package/classes/base/data-form-base.d.ts.map +1 -1
  7. package/classes/base/data-list-base.d.ts +2 -1
  8. package/classes/base/data-list-base.d.ts.map +1 -1
  9. package/classes/form-schema.d.ts +3 -0
  10. package/classes/form-schema.d.ts.map +1 -1
  11. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  12. package/components/crud/crud-list/crud-list.component.d.ts +1 -0
  13. package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
  14. package/components/entity-permission/services.cs/entity-permission.service.d.ts +1 -0
  15. package/components/entity-permission/services.cs/entity-permission.service.d.ts.map +1 -1
  16. package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -0
  17. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  18. package/components/file-explorer/services/file-data.service.d.ts +1 -0
  19. package/components/file-explorer/services/file-data.service.d.ts.map +1 -1
  20. package/components/query-builders/query-builder/query-builder.component.d.ts.map +1 -1
  21. package/components/query-builders/query-builder-group/query-builder-group.component.d.ts +1 -0
  22. package/components/query-builders/query-builder-group/query-builder-group.component.d.ts.map +1 -1
  23. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts +3 -0
  24. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts.map +1 -1
  25. package/components/statemachines/models/constants.d.ts +5 -1
  26. package/components/statemachines/models/constants.d.ts.map +1 -1
  27. package/components/statemachines/models/enums.d.ts +4 -0
  28. package/components/statemachines/models/enums.d.ts.map +1 -1
  29. package/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.d.ts.map +1 -1
  30. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts +3 -0
  31. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts.map +1 -1
  32. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts +28 -0
  33. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts.map +1 -0
  34. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.ngfactory.d.ts.map +1 -0
  35. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.scss.shim.ngstyle.d.ts.map +1 -0
  36. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts +3 -1
  37. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts.map +1 -1
  38. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts +3 -1
  39. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts.map +1 -1
  40. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts +6 -4
  41. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts.map +1 -1
  42. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts +3 -3
  43. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts.map +1 -1
  44. package/components/user-picker/user-picker.component.d.ts +8 -2
  45. package/components/user-picker/user-picker.component.d.ts.map +1 -1
  46. package/components/workflow/models/models.d.ts +8 -8
  47. package/components/workflow/models/models.d.ts.map +1 -1
  48. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts +1 -1
  49. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts.map +1 -1
  50. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts +3 -6
  51. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts.map +1 -1
  52. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +3 -3
  53. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
  54. package/components/workflow/workflow-setting-new/workflow-setting-new.component.d.ts +1 -0
  55. package/components/workflow/workflow-setting-new/workflow-setting-new.component.d.ts.map +1 -1
  56. package/configs/component-context.constant.d.ts +1 -0
  57. package/configs/component-context.constant.d.ts.map +1 -1
  58. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts +8 -3
  59. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts.map +1 -1
  60. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +2 -0
  61. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  62. package/congviec/congviec/congviec.component.d.ts.map +1 -1
  63. package/congviec/congviec/services/congviec-dinhkem.service.d.ts +8 -0
  64. package/congviec/congviec/services/congviec-dinhkem.service.d.ts.map +1 -1
  65. package/congviec/congviec/services/congviec.service.d.ts.map +1 -1
  66. package/esm2015/classes/base/data-form-base.js +6 -3
  67. package/esm2015/classes/base/data-list-base.js +13 -3
  68. package/esm2015/classes/form-schema.js +1 -1
  69. package/esm2015/components/crud/crud-form/crud-form.component.js +2 -1
  70. package/esm2015/components/crud/crud-list/crud-list.component.js +6 -2
  71. package/esm2015/components/entity-permission/services.cs/entity-permission.service.js +8 -5
  72. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +17 -10
  73. package/esm2015/components/file-explorer/services/file-data.service.js +15 -15
  74. package/esm2015/components/query-builders/query-builder/query-builder.component.js +24 -7
  75. package/esm2015/components/query-builders/query-builder-group/query-builder-group.component.js +6 -2
  76. package/esm2015/components/query-builders/query-builder-rule/query-builder-rule.component.js +39 -3
  77. package/esm2015/components/share-link-by-permission/share-link-by-permission.component.js +2 -2
  78. package/esm2015/components/statemachines/models/constants.js +9 -4
  79. package/esm2015/components/statemachines/models/enums.js +6 -1
  80. package/esm2015/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.js +9 -5
  81. package/esm2015/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.js +19 -6
  82. package/esm2015/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.js +179 -0
  83. package/esm2015/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.js +32 -1
  84. package/esm2015/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.js +32 -1
  85. package/esm2015/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.js +39 -8
  86. package/esm2015/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.js +19 -7
  87. package/esm2015/components/statemachines/statemachines-designer/statemachines-designer.component.js +1 -1
  88. package/esm2015/components/statemachines/utils/utils.js +6 -6
  89. package/esm2015/components/tn-app-help/tn-app-help.component.js +1 -1
  90. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +2 -2
  91. package/esm2015/components/user-picker/user-picker.component.js +47 -6
  92. package/esm2015/components/workflow/models/models.js +1 -7
  93. package/esm2015/components/workflow/process-workflow-form/process-workflow-form.component.js +39 -42
  94. package/esm2015/components/workflow/process-workflow-target/process-workflow-target.component.js +7 -40
  95. package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +10 -12
  96. package/esm2015/components/workflow/workflow-setting-new/workflow-setting-new.component.js +67 -10
  97. package/esm2015/configs/component-context.constant.js +3 -2
  98. package/esm2015/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.js +50 -14
  99. package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +24 -12
  100. package/esm2015/congviec/congviec/congviec.component.js +7 -6
  101. package/esm2015/congviec/congviec/services/congviec-dinhkem.service.js +57 -1
  102. package/esm2015/congviec/congviec/services/congviec.service.js +3 -3
  103. package/esm2015/services/base.service.js +4 -1
  104. package/esm2015/services/dm-chucvu.service.js +28 -0
  105. package/esm2015/services/role.service.js +1 -1
  106. package/esm2015/tnx-shared.js +69 -67
  107. package/esm2015/tnx-shared.module.js +3 -1
  108. package/fesm2015/tnx-shared.js +776 -220
  109. package/fesm2015/tnx-shared.js.map +1 -1
  110. package/package.json +2 -2
  111. package/services/base.service.d.ts +1 -0
  112. package/services/base.service.d.ts.map +1 -1
  113. package/services/dm-chucvu.service.d.ts +12 -0
  114. package/services/dm-chucvu.service.d.ts.map +1 -0
  115. package/services/dm-chucvu.service.ngfactory.d.ts.map +1 -0
  116. package/tnx-shared.d.ts +68 -66
  117. package/tnx-shared.d.ts.map +1 -1
  118. package/tnx-shared.metadata.json +1 -1
  119. package/tnx-shared.module.d.ts +2 -1
  120. package/tnx-shared.module.d.ts.map +1 -1
  121. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
@@ -395,7 +395,8 @@
395
395
  MENU_CHANGED: 'MENU_CHANGED',
396
396
  ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER: 'ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER',
397
397
  SHOW_WAIT_BOX: 'SHOW_WAIT_BOX',
398
- SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM'
398
+ SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM',
399
+ GAN_ENTITY_SANG_CONG_VIEC: 'GAN_ENTITY_SANG_CONG_VIEC'
399
400
  };
400
401
  ComCtxConstants.ROOT_USMART = {
401
402
  SHOW_CONFIG_DATA_DEFAULT: 'SHOW_CONFIG_DATA_DEFAULT',
@@ -6952,6 +6953,9 @@
6952
6953
  BaseService.prototype.processWorkflow = function (id, actionCode, data) {
6953
6954
  return this.defaultPost(this.serviceUri + "/ProcessWorkflow/" + id + "/" + actionCode, data);
6954
6955
  };
6956
+ BaseService.prototype.getUserInProcessForm = function (workflowCode, stateCode, actionCode, itemId) {
6957
+ return this.defaultPost(this.serviceUri + "/GetUserInProcessFormBase/" + workflowCode + "/" + stateCode + "/" + actionCode + "/" + itemId, {});
6958
+ };
6955
6959
  BaseService.prototype.handleError = function (error, injector) {
6956
6960
  var commonService = injector.get(CommonService);
6957
6961
  return commonService.handleError(error, injector);
@@ -10304,10 +10308,10 @@
10304
10308
  var CongViecService = /** @class */ (function (_super) {
10305
10309
  __extends(CongViecService, _super);
10306
10310
  function CongViecService(http, injector, _moduleConfigService) {
10307
- var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CongViec") || this;
10311
+ var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CongViec_Chinh") || this;
10308
10312
  _this._moduleConfigService = _moduleConfigService;
10309
10313
  _this.serviceCode = 'congviec';
10310
- _this.entityName = 'CongViec';
10314
+ _this.entityName = 'CongViec_Chinh';
10311
10315
  _this.objectName = 'công việc';
10312
10316
  _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
10313
10317
  return _this;
@@ -14107,6 +14111,7 @@
14107
14111
  }
14108
14112
  if (schema instanceof TitleSchema
14109
14113
  || schema instanceof LabelSchema) {
14114
+ schema.showLabel = false;
14110
14115
  if (!schema.field) {
14111
14116
  schema.field = this._commonService.guid();
14112
14117
  }
@@ -16770,7 +16775,8 @@
16770
16775
  defaultValue: defaultValue,
16771
16776
  valueField: 'code',
16772
16777
  displayField: 'title',
16773
- mdWidth: 12,
16778
+ mdWidth: this.mdWidthWorkflow || 12,
16779
+ enableCaching: false,
16774
16780
  hiddenCheck: function (rootModel) { return !rootModel || rootModel.createTaskInstead; }
16775
16781
  }));
16776
16782
  if (this.parentSetting.workflowSettingNew
@@ -17260,10 +17266,13 @@
17260
17266
  if (resultValidateFormTask) {
17261
17267
  this.model.data.itemCongViec = taskForm.model.data;
17262
17268
  }
17263
- // reset field _WorkflowCode để backend biết được chạy quy trình theo kiểu nào
17264
- this.model.data._WorkflowCode = null;
17265
17269
  _a.label = 2;
17266
- case 2: return [4 /*yield*/, this.createConfirmIfRequire()];
17270
+ case 2:
17271
+ if (this.model.data.createTaskInstead) {
17272
+ // reset field _WorkflowCode để backend không chạy quy trình bản ghi
17273
+ this.model.data._WorkflowCode = null;
17274
+ }
17275
+ return [4 /*yield*/, this.createConfirmIfRequire()];
17267
17276
  case 3:
17268
17277
  confirmed = _a.sent();
17269
17278
  if (!confirmed)
@@ -18725,6 +18734,7 @@
18725
18734
  _this.onProcessedWorkflow = new i0.EventEmitter();
18726
18735
  _this.onRollbackedWorkflow = new i0.EventEmitter();
18727
18736
  _this.onChangedStatusWorkflow = new i0.EventEmitter();
18737
+ _this.onShowFormStartWorkflow = new i0.EventEmitter();
18728
18738
  _this.tableReady = new rxjs.Subject();
18729
18739
  _this.tableReadySource$ = _this.tableReady.asObservable();
18730
18740
  _this.checkedAll = null;
@@ -19686,6 +19696,7 @@
19686
19696
  formState: exports.FormState.ADD,
19687
19697
  data: {
19688
19698
  checkUniqueTaskForEntity: true,
19699
+ autoNextStep: workflowSetting.autoNextStep,
19689
19700
  idLoaiCongViec: workflowSetting.idLoaiCongViecDefault,
19690
19701
  serviceCode: this.setting.baseService.serviceCode,
19691
19702
  entity: this.setting.baseService.entityName,
@@ -19694,6 +19705,7 @@
19694
19705
  }
19695
19706
  };
19696
19707
  this.congViecModel.showEditForm = true;
19708
+ this.onShowFormStartWorkflow.emit(rowData);
19697
19709
  return [3 /*break*/, 4];
19698
19710
  case 3:
19699
19711
  if (workflowSetting.workflows.length == 1) {
@@ -21743,18 +21755,22 @@
21743
21755
  onStartedWorkflow: [{ type: i0.Output }],
21744
21756
  onProcessedWorkflow: [{ type: i0.Output }],
21745
21757
  onRollbackedWorkflow: [{ type: i0.Output }],
21746
- onChangedStatusWorkflow: [{ type: i0.Output }]
21758
+ onChangedStatusWorkflow: [{ type: i0.Output }],
21759
+ onShowFormStartWorkflow: [{ type: i0.Output }]
21747
21760
  };
21748
21761
 
21749
21762
  var EntityPermissionService = /** @class */ (function (_super) {
21750
21763
  __extends(EntityPermissionService, _super);
21751
21764
  function EntityPermissionService(http, injector, _moduleConfigService) {
21752
- var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint + "/EntityPermission") || this;
21765
+ var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/EntityPermission") || this;
21753
21766
  _this.serviceManagers = {};
21754
21767
  _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint;
21755
21768
  _this._moduleConfig = _moduleConfigService.getConfig();
21756
21769
  return _this;
21757
21770
  }
21771
+ EntityPermissionService.prototype.getEndpointByService = function (service) {
21772
+ return service.endPoint + "/" + this._moduleConfig.environment.apiVersion;
21773
+ };
21758
21774
  EntityPermissionService.prototype.registerService = function (entityName, service) {
21759
21775
  this.serviceManagers[entityName] = service;
21760
21776
  };
@@ -21763,15 +21779,15 @@
21763
21779
  if (service == undefined) {
21764
21780
  (this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity permission service');
21765
21781
  }
21766
- return this.defaultPost(service.endPoint + "/EntityPermission/GetPermission/" + service.entityName, {});
21782
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/GetPermission/" + service.entityName, {});
21767
21783
  };
21768
21784
  EntityPermissionService.prototype.savePermission = function (tableName, data) {
21769
21785
  var service = this.serviceManagers[tableName];
21770
- return this.defaultPost(service.endPoint + "/EntityPermission/SavePermission/" + service.entityName, data);
21786
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/SavePermission/" + service.entityName, data);
21771
21787
  };
21772
21788
  EntityPermissionService.prototype.removePermission = function (tableName) {
21773
21789
  var service = this.serviceManagers[tableName];
21774
- return this.defaultPost(service.endPoint + "/EntityPermission/RemovePermission/" + service.entityName, {});
21790
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/RemovePermission/" + service.entityName, {});
21775
21791
  };
21776
21792
  return EntityPermissionService;
21777
21793
  }(BaseService));
@@ -22446,7 +22462,8 @@
22446
22462
  });
22447
22463
  });
22448
22464
  };
22449
- DataListBase.prototype._copyLink = function (rowData) {
22465
+ DataListBase.prototype._copyLink = function (rowData, showNoti) {
22466
+ if (showNoti === void 0) { showNoti = true; }
22450
22467
  return __awaiter(this, void 0, void 0, function () {
22451
22468
  var path;
22452
22469
  return __generator(this, function (_a) {
@@ -22455,12 +22472,26 @@
22455
22472
  case 1:
22456
22473
  path = _a.sent();
22457
22474
  this._commonService.copyByStorage(path);
22458
- this._notifierService.showSuccess('Đã sao chép liên kết');
22475
+ if (showNoti) {
22476
+ this._notifierService.showSuccess('Đã sao chép liên kết');
22477
+ }
22459
22478
  return [2 /*return*/];
22460
22479
  }
22461
22480
  });
22462
22481
  });
22463
22482
  };
22483
+ DataListBase.prototype._onShowFormStartWorkflow = function (rowData) {
22484
+ return __awaiter(this, void 0, void 0, function () {
22485
+ var _this = this;
22486
+ return __generator(this, function (_a) {
22487
+ // Fire event gắn link công việc
22488
+ this._copyLink(rowData, false).then(function (x) {
22489
+ _this.rootContext.fireReplayEvent(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
22490
+ });
22491
+ return [2 /*return*/];
22492
+ });
22493
+ });
22494
+ };
22464
22495
  DataListBase.prototype.getCopyPath = function (rowData) {
22465
22496
  return __awaiter(this, void 0, void 0, function () {
22466
22497
  var locationStrategy, state, baseHref, path, displayField, linkColumn;
@@ -33107,10 +33138,14 @@
33107
33138
  && (this.value == null || this.value == '')) {
33108
33139
  return null;
33109
33140
  }
33141
+ var value = this.value;
33142
+ if (this.funcGetValue) {
33143
+ value = this.funcGetValue(this);
33144
+ }
33110
33145
  return new Filter({
33111
33146
  field: this.field,
33112
33147
  operator: this.compareType,
33113
- value: JSON.stringify(this.value)
33148
+ value: JSON.stringify(value)
33114
33149
  });
33115
33150
  };
33116
33151
  QueryRule.prototype.isGroup = function () {
@@ -33365,14 +33400,26 @@
33365
33400
  itemSourceField.controlType = 'datetime';
33366
33401
  }
33367
33402
  else if (schema instanceof NumberRangeControlSchema) {
33368
- itemSourceField.operators = operatorDateAndNumber;
33403
+ var operators = itemSourceField.control['operators'];
33404
+ if (!operators || !operators.length) {
33405
+ itemSourceField.operators = operatorDateAndNumber;
33406
+ }
33407
+ else {
33408
+ itemSourceField.operators = operators;
33409
+ }
33369
33410
  itemSourceField.controlType = 'number';
33370
33411
  }
33371
33412
  else if (schema instanceof DropdownControlSchema || schema instanceof CheckBoxListControlSchema) {
33372
- itemSourceField.operators = [
33373
- { id: exports.Operator.in, ten: 'Nằm trong' },
33374
- { id: exports.Operator.notIn, ten: 'Không nằm trong' }
33375
- ];
33413
+ var operators = itemSourceField.control['operators'];
33414
+ if (!operators || !operators.length) {
33415
+ itemSourceField.operators = [
33416
+ { id: exports.Operator.in, ten: 'Nằm trong' },
33417
+ { id: exports.Operator.notIn, ten: 'Không nằm trong' }
33418
+ ];
33419
+ }
33420
+ else {
33421
+ itemSourceField.operators = __spread(operators);
33422
+ }
33376
33423
  if (schema.hasOperatorCanBo) {
33377
33424
  itemSourceField.operators.push({
33378
33425
  id: exports.Operator.isCurrentCanBo, ten: 'Là cán bộ hiện tại', _disabled: true
@@ -33402,6 +33449,11 @@
33402
33449
  ];
33403
33450
  itemSourceField.controlType = 'autocomplete-picker';
33404
33451
  }
33452
+ else if (schema instanceof CustomControlSchema) {
33453
+ var operators = itemSourceField.control['operators'];
33454
+ itemSourceField.operators = operators ? operators : [];
33455
+ itemSourceField.controlType = 'custom';
33456
+ }
33405
33457
  else { // Là textbox
33406
33458
  itemSourceField.operators = [
33407
33459
  { id: exports.Operator.equal, ten: 'Bằng' },
@@ -34895,6 +34947,10 @@
34895
34947
  this.data.breadcrumbs = [];
34896
34948
  this._dataSource = [];
34897
34949
  };
34950
+ FileManagerComponent.prototype.setRootFolderId = function (rootFolderId) {
34951
+ this.rootFolderId = rootFolderId;
34952
+ this.data.currentFolderId = this.rootFolderId;
34953
+ };
34898
34954
  FileManagerComponent.prototype.setDatasource = function (dataSource) {
34899
34955
  if (dataSource === void 0) { dataSource = []; }
34900
34956
  this._dataSource = dataSource;
@@ -35071,7 +35127,7 @@
35071
35127
  command: function (event) {
35072
35128
  _this.openObject(item);
35073
35129
  },
35074
- visible: this._deviceDetectorService.isDesktop()
35130
+ visible: (this._deviceDetectorService.isDesktop() && !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly))
35075
35131
  },
35076
35132
  {
35077
35133
  label: 'Ký số cá nhân (SIM)',
@@ -35079,33 +35135,35 @@
35079
35135
  command: function () {
35080
35136
  _this.signKySimFile(item);
35081
35137
  },
35082
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35138
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35083
35139
  },
35084
35140
  {
35085
35141
  label: 'Ký số cá nhân (USB)', icon: 'fas fa-signature',
35086
35142
  command: function () {
35087
35143
  _this.signFile(item);
35088
35144
  },
35089
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35145
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35090
35146
  },
35091
35147
  {
35092
35148
  label: 'Ký số đơn vị (USB)', icon: 'fas fa-signature',
35093
35149
  command: function () {
35094
35150
  _this.signFileDonVi(item);
35095
35151
  },
35096
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35152
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35097
35153
  },
35098
35154
  {
35099
35155
  label: 'Tải về', icon: 'fas fa-download',
35100
35156
  command: function () {
35101
35157
  _this.download(item);
35102
- }
35158
+ },
35159
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35103
35160
  },
35104
35161
  {
35105
35162
  label: 'Sao chép đường dẫn', icon: 'fas fa-link',
35106
35163
  command: function () {
35107
35164
  _this.copyDownloadLink(item);
35108
- }
35165
+ },
35166
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35109
35167
  },
35110
35168
  {
35111
35169
  label: 'Đổi tên', icon: 'fas fa-eraser',
@@ -35118,7 +35176,8 @@
35118
35176
  label: 'Xem các phiên bản khác', icon: 'fas fa-history',
35119
35177
  command: function () {
35120
35178
  _this.openFileVersions(item);
35121
- }
35179
+ },
35180
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35122
35181
  },
35123
35182
  {
35124
35183
  label: 'Xóa tệp tin', icon: 'far fa-trash-alt',
@@ -35855,7 +35914,7 @@
35855
35914
  { type: i0.Component, args: [{
35856
35915
  // tslint:disable-next-line: component-selector
35857
35916
  selector: 'file-manager',
35858
- template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\">\r\n <div class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton pRipple type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\"\r\n tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\" label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\"\r\n (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i t\u1EC7p tin t\u1EEB m\u00E1y t\u00EDnh c\u1EE7a b\u1EA1n\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i l\u00EAn\"\r\n (click)=\"selectFile()\"></button>\r\n\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\"\r\n iconPos=\"left\" label=\"Di chuy\u1EC3n\" (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn t\u1EDBi \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\"\r\n iconPos=\"left\" label=\"\u0110\u1EB7t t\u1EA1i \u0111\u00E2y\" (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" icon=\"pi pi-undo\" pButton class=\"p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" label=\"B\u1ECF qua\"\r\n (click)=\"cancelMove()\">\r\n </button>\r\n\r\n <button *ngIf=\"hasSelect()\" pButton type=\"button\"\r\n pTooltip=\"{{ 'X\u00F3a th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn' | translate }}\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n iconPos=\"left\" class=\"p-button-text p-button-danger\" label=\"X\u00F3a\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly && hasSelect()\" class=\"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\" label=\"T\u1EA3i v\u1EC1\"\r\n (click)=\"downloadMultiple()\">\r\n </button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\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 [widthFunctionColumn]=\"'8.2rem'\" (onReload)=\"_triggerProcessData($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span (click)=\"openObject(rowData)\" class=\"pull-left file-ex-icon\"\r\n [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <span (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n {{rowData.name}}\r\n </span>\r\n <span *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 </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=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" pButton type=\"button\"\r\n tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\" (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\" pButton\r\n type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n\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 <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"pi pi-cloud-download\"\r\n (click)=\"download(rowData)\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(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 *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\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 : !rowData.isFile\">\r\n </span>\r\n <!-- <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>{{rowData.nameWithoutExtension}}</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 <a (click)=\"openObject(rowData)\" class=\"file-ex-extension\">{{rowData.extension}}</a> -->\r\n\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\r\n <span>{{rowData.nameWithoutExtension}}</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 </span>\r\n <span class=\"file-ex-extension\">{{rowData.extension}}</span>\r\n </a>\r\n </div>\r\n\r\n <div *ngIf=\"rowData.isFile\" 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 link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></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\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\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<ng-template #breadCrumb>\r\n <div *ngIf=\"data.breadcrumbs.length > 0\" class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n</ng-template>\r\n\r\n<p-fileUpload #fileControl [ngStyle]=\"{'display': 'none'}\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file\"\r\n [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\" [readonly]=\"readonly\"\r\n [model]=\"forms.fileViewer.formData\" (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<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB t\u1EC7p tin kh\u00E1c...\"\r\n (keyup.enter)=\"addAttachLink()\" pInputText [(ngModel)]=\"typedLink\" class=\"p-col-12\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" (click)=\"addAttachLink()\" [disabled]=\"typedLink != ''? null : true\" pButton\r\n class=\"p-button-primary p-col-12\" label=\"Ok\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n<!--\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\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>\r\n<!--K\u00FD s\u1ED1 sim-->\r\n<tn-dialog *ngIf=\"forms.kySoSim.show\" #dialog [styleClass]=\"'address-form'\" [header]=\"forms.kySoSim.header | translate\"\r\n [popupSize]=\"forms.kySoSim.popupSize\" [showFooter]=\"true\" (onHide)=\"onCancelForm(formIds.kySoSim)\">\r\n <app-file-ky-so-sim #fileKySoSim [parentModel]=\"model\" [parentContext]=\"context\">\r\n </app-file-ky-so-sim>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"fas fa-images\" [disabled]=\"model.submitting\" class=\"p-button-text\"\r\n [label]=\"'Ch\u1ECDn ch\u1EEF k\u00FD' | translate\" (click)=\"chonChuKy()\"></button>\r\n <button type=\"button\" pButton icon=\"fas fa-signature\" class=\"p-button-text ui-button-success\"\r\n [disabled]=\"model.submitting\" [label]=\"'Th\u1EF1c hi\u1EC7n k\u00FD' | translate\" (click)=\"kySo()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"forms.kySoSim.show=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
35917
+ template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\">\r\n <div class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton pRipple type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\"\r\n tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\" label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\"\r\n (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i t\u1EC7p tin t\u1EEB m\u00E1y t\u00EDnh c\u1EE7a b\u1EA1n\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i l\u00EAn\"\r\n (click)=\"selectFile()\"></button>\r\n\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\"\r\n iconPos=\"left\" label=\"Di chuy\u1EC3n\" (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn t\u1EDBi \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\"\r\n iconPos=\"left\" label=\"\u0110\u1EB7t t\u1EA1i \u0111\u00E2y\" (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" icon=\"pi pi-undo\" pButton class=\"p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" label=\"B\u1ECF qua\"\r\n (click)=\"cancelMove()\">\r\n </button>\r\n\r\n <button *ngIf=\"hasSelect()\" pButton type=\"button\"\r\n pTooltip=\"{{ 'X\u00F3a th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn' | translate }}\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n iconPos=\"left\" class=\"p-button-text p-button-danger\" label=\"X\u00F3a\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly && hasSelect()\" class=\"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\" label=\"T\u1EA3i v\u1EC1\"\r\n (click)=\"downloadMultiple()\">\r\n </button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\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 [widthFunctionColumn]=\"'8.2rem'\" (onReload)=\"_triggerProcessData($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span (click)=\"openObject(rowData)\" class=\"pull-left file-ex-icon\"\r\n [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <span (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n {{rowData.name}}\r\n </span>\r\n <span *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 </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=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" pButton type=\"button\"\r\n tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\" (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\" pButton\r\n type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n\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 <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"pi pi-cloud-download\"\r\n (click)=\"download(rowData)\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(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 *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\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 : !rowData.isFile\">\r\n </span>\r\n <!-- <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>{{rowData.nameWithoutExtension}}</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 <a (click)=\"openObject(rowData)\" class=\"file-ex-extension\">{{rowData.extension}}</a> -->\r\n\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\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 </span>\r\n <!-- <span class=\"file-ex-extension\">{{rowData.extension}}</span> -->\r\n </a>\r\n </div>\r\n\r\n <div *ngIf=\"rowData.isFile\" 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 link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></button>\r\n </ng-container>\r\n\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\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 </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<ng-template #breadCrumb>\r\n <div *ngIf=\"data.breadcrumbs.length > 0\" class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n</ng-template>\r\n\r\n<p-fileUpload #fileControl [ngStyle]=\"{'display': 'none'}\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file\"\r\n [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\" [readonly]=\"readonly\"\r\n [model]=\"forms.fileViewer.formData\" (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<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB t\u1EC7p tin kh\u00E1c...\"\r\n (keyup.enter)=\"addAttachLink()\" pInputText [(ngModel)]=\"typedLink\" class=\"p-col-12\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" (click)=\"addAttachLink()\" [disabled]=\"typedLink != ''? null : true\" pButton\r\n class=\"p-button-primary p-col-12\" label=\"Ok\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n<!--\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\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>\r\n<!--K\u00FD s\u1ED1 sim-->\r\n<tn-dialog *ngIf=\"forms.kySoSim.show\" #dialog [styleClass]=\"'address-form'\" [header]=\"forms.kySoSim.header | translate\"\r\n [popupSize]=\"forms.kySoSim.popupSize\" [showFooter]=\"true\" (onHide)=\"onCancelForm(formIds.kySoSim)\">\r\n <app-file-ky-so-sim #fileKySoSim [parentModel]=\"model\" [parentContext]=\"context\">\r\n </app-file-ky-so-sim>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"fas fa-images\" [disabled]=\"model.submitting\" class=\"p-button-text\"\r\n [label]=\"'Ch\u1ECDn ch\u1EEF k\u00FD' | translate\" (click)=\"chonChuKy()\"></button>\r\n <button type=\"button\" pButton icon=\"fas fa-signature\" class=\"p-button-text ui-button-success\"\r\n [disabled]=\"model.submitting\" [label]=\"'Th\u1EF1c hi\u1EC7n k\u00FD' | translate\" (click)=\"kySo()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"forms.kySoSim.show=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
35859
35918
  providers: [
35860
35919
  {
35861
35920
  provide: forms.NG_VALUE_ACCESSOR,
@@ -35864,7 +35923,7 @@
35864
35923
  },
35865
35924
  ComponentContextService
35866
35925
  ],
35867
- styles: [".file-header-tab a{color:#000!important}.file-ex-name:hover{cursor:pointer}.file-ex-name .signature{margin-left:3px}.file-ex-row:hover{background:#e8e8e8}.function-list{text-align:center}.function-list a{margin:5px}.function-list a:hover{color:#6aa3d4}.file-btn{color:#337ab7;cursor:pointer;display:inline-block;font-size:1.1em;line-height:45px;margin-left:10px;padding:5px;vertical-align:middle}.file-btn:hover{color:#3ea8ff}.file-btn i{font-size:1.2em;margin-right:10px}.file-action{text-align:right}.file-row-action i{margin-right:5px}.file-row-action{line-height:34px}.function-list .topbar-items{margin-top:0}.function-list .topbar-items>li .topbar-icon{color:#909090}.function-list .topbar-items>li .topbar-icon:hover{color:#444}.function-list .topbar-items>li>ul{border-top:0;right:15px;top:30px}.function-list .topbar-items>li>ul:before{display:none}.function-list .topbar-items>li.active-top-menu>ul{z-index:1}.function-list .layout-menu li a{border:none;margin:0;text-align:left}.function-list .layout-menu li a i:first-child{color:#666f77;font-size:1.2em}.group-link-share{height:34px}.txt-link-share{max-width:335px!important}.btn-copy-link-share{font-size:small!important}.tbl-checkbox-header{width:3em}.tbl-checkbox{text-align:center;width:3em}.my-drive-checkbox{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);height:20px;text-align:center;transition:border-color .3s,background-color .3s,box-shadow .3s;width:20px}.get-link-share{cursor:pointer;float:right}.file-toolbar{text-align:right}.function-topbar button:last-child{margin-right:0!important}::ng-deep body>.fm-contextMenu-panel{min-width:210px}.folderUnClickable{pointer-events:none}::ng-deep file-manager .file-menu.ui-menu ul li a{text-align:left!important}::ng-deep file-manager .item-inline-name .ui-tooltip-text{white-space:normal;word-break:break-word}::ng-deep file-manager .full-layout .fm-grid a{display:flex;padding-top:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon{margin-right:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon:hover{cursor:pointer}::ng-deep file-manager .fm-toolbar{align-items:center;display:flex;padding-bottom:.5em;padding-left:0;padding-top:.5em}::ng-deep file-manager .fm-toolbar .fm-toolbar-buttons{align-items:center;display:flex;padding-left:3px}::ng-deep file-manager .fm-toolbar .fm-toolbar-path{flex:1 1;margin-left:2em;position:relative}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb .p-breadcrumb{background:transparent}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb>div{border:none;padding:0}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a{cursor:pointer}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a .p-menuitem-text{color:#2196f3}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:last-child .p-menuitem-text{color:rgba(255,102,0,.685)}::ng-deep file-manager .fm-toolbar .fm-toolbar-path:after{background:#b8b8b8;content:\"\";height:100%;left:-1.4em;position:absolute;top:0;width:2px}::ng-deep file-manager .not-full-layout{border-radius:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item{display:flex}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-function,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{align-items:center;display:flex;justify-content:center}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no{flex:0 0 30px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name{flex:1 1;justify-content:left;margin-right:1em}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name>span:not(.file-ex-extension){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{flex:0 0 auto;font-size:.85rem;font-weight:700;margin-right:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:left;padding:1em}::ng-deep td file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:center;padding:8px}"]
35926
+ styles: [".file-header-tab a{color:#000!important}.file-ex-name:hover{cursor:pointer}.file-ex-name .signature{margin-left:3px}.file-ex-row:hover{background:#e8e8e8}.function-list{text-align:center}.function-list a{margin:5px}.function-list a:hover{color:#6aa3d4}.file-btn{color:#337ab7;cursor:pointer;display:inline-block;font-size:1.1em;line-height:45px;margin-left:10px;padding:5px;vertical-align:middle}.file-btn:hover{color:#3ea8ff}.file-btn i{font-size:1.2em;margin-right:10px}.file-action{text-align:right}.file-row-action i{margin-right:5px}.file-row-action{line-height:34px}.function-list .topbar-items{margin-top:0}.function-list .topbar-items>li .topbar-icon{color:#909090}.function-list .topbar-items>li .topbar-icon:hover{color:#444}.function-list .topbar-items>li>ul{border-top:0;right:15px;top:30px}.function-list .topbar-items>li>ul:before{display:none}.function-list .topbar-items>li.active-top-menu>ul{z-index:1}.function-list .layout-menu li a{border:none;margin:0;text-align:left}.function-list .layout-menu li a i:first-child{color:#666f77;font-size:1.2em}.group-link-share{height:34px}.txt-link-share{max-width:335px!important}.btn-copy-link-share{font-size:small!important}.tbl-checkbox-header{width:3em}.tbl-checkbox{text-align:center;width:3em}.my-drive-checkbox{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);height:20px;text-align:center;transition:border-color .3s,background-color .3s,box-shadow .3s;width:20px}.get-link-share{cursor:pointer;float:right}.file-toolbar{text-align:right}.function-topbar button:last-child{margin-right:0!important}::ng-deep body>.fm-contextMenu-panel{min-width:210px}.folderUnClickable{pointer-events:none}::ng-deep file-manager .file-menu.ui-menu ul li a{text-align:left!important}::ng-deep file-manager .item-inline-name .ui-tooltip-text{white-space:normal;word-break:break-word}::ng-deep file-manager .full-layout .fm-grid a{display:flex;padding-top:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon{margin-right:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon:hover{cursor:pointer}::ng-deep file-manager .fm-toolbar{align-items:center;display:flex;padding-bottom:.5em;padding-left:0;padding-top:.5em}::ng-deep file-manager .fm-toolbar .fm-toolbar-buttons{align-items:center;display:flex;padding-left:3px}::ng-deep file-manager .fm-toolbar .fm-toolbar-path{flex:1 1;margin-left:2em;position:relative}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb .p-breadcrumb{background:transparent}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb>div{border:none;padding:0}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a{cursor:pointer}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a .p-menuitem-text{color:#2196f3}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:last-child .p-menuitem-text{color:rgba(255,102,0,.685)}::ng-deep file-manager .fm-toolbar .fm-toolbar-path:after{background:#b8b8b8;content:\"\";height:100%;left:-1.4em;position:absolute;top:0;width:2px}::ng-deep file-manager .not-full-layout{border-radius:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item{display:flex}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-function,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{align-items:center;display:flex;justify-content:center}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no{flex:0 0 30px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name{display:flex;flex:1 1;justify-content:left;margin-right:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name>span:not(.file-ex-extension){display:flex;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{flex:0 0 auto;font-size:.85rem;font-weight:700;margin-right:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:left;padding:1em}::ng-deep td file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:center;padding:8px}"]
35868
35927
  },] }
35869
35928
  ];
35870
35929
  FileManagerComponent.ctorParameters = function () { return [
@@ -37690,6 +37749,8 @@
37690
37749
  this.onRemove = new i0.EventEmitter();
37691
37750
  this.disabled = null;
37692
37751
  this.custom = false;
37752
+ this.customTypeFieldName = 'fieldValue';
37753
+ this.customTypeSeparator = '____';
37693
37754
  }
37694
37755
  Object.defineProperty(QueryBuilderRuleComponent.prototype, "controlValue", {
37695
37756
  // control value cố định, dùng trong trường hợp custom form
@@ -37714,6 +37775,22 @@
37714
37775
  }
37715
37776
  this.handleChangeOperator();
37716
37777
  }
37778
+ if (this.controlType == 'custom') {
37779
+ this.setFuncGetValue();
37780
+ if (this.query.value) {
37781
+ try {
37782
+ this.query[this.customTypeFieldName] = this.query.value['field'];
37783
+ this.query.value = this.query.value['value'];
37784
+ }
37785
+ catch (ex) {
37786
+ }
37787
+ // const arrInfo = this.query.value.split(this.customTypeSeparator);
37788
+ // if (arrInfo.length > 1) {
37789
+ // this.query[this.customTypeFieldName] = arrInfo[0];
37790
+ // this.query.value = arrInfo[1];
37791
+ // }
37792
+ }
37793
+ }
37717
37794
  if (this.itemField != null && this.itemField.controlType == 'datetime' && this.query.value) {
37718
37795
  if (!isValidDate(new Date(this.query.value))) {
37719
37796
  this.custom = true;
@@ -37723,6 +37800,18 @@
37723
37800
  }
37724
37801
  }
37725
37802
  };
37803
+ QueryBuilderRuleComponent.prototype.setFuncGetValue = function () {
37804
+ var _this = this;
37805
+ if (this.controlType == 'custom') {
37806
+ this.query.funcGetValue = function (item) { return ({
37807
+ field: item[_this.customTypeFieldName],
37808
+ value: item.value
37809
+ }); };
37810
+ }
37811
+ else {
37812
+ this.query.funcGetValue = null;
37813
+ }
37814
+ };
37726
37815
  QueryBuilderRuleComponent.prototype.removeGroup = function () {
37727
37816
  this.onRemove.emit(this.query);
37728
37817
  };
@@ -37738,7 +37827,13 @@
37738
37827
  this.resetControl(this.itemField);
37739
37828
  var itemOperator = this.operators.find(function (q) { return q.id == _this.query.compareType; });
37740
37829
  if (!itemOperator) {
37741
- this.query.compareType = null;
37830
+ if (this.operators.length == 1) {
37831
+ this.query.compareType = this.operators[0].id;
37832
+ this.handleChangeOperator();
37833
+ }
37834
+ else {
37835
+ this.query.compareType = null;
37836
+ }
37742
37837
  }
37743
37838
  else if (itemOperator.controlType) {
37744
37839
  this.resetControl(itemOperator);
@@ -37760,6 +37855,7 @@
37760
37855
  if (this.control) {
37761
37856
  this.control.disabled = this.disabled;
37762
37857
  }
37858
+ this.setFuncGetValue();
37763
37859
  }
37764
37860
  };
37765
37861
  QueryBuilderRuleComponent.prototype.handleChangeOperator = function () {
@@ -37799,7 +37895,7 @@
37799
37895
  QueryBuilderRuleComponent.decorators = [
37800
37896
  { type: i0.Component, args: [{
37801
37897
  selector: 'query-builder-rule',
37802
- template: "<div class=\"tn__group-or-rule-container rule-container\">\r\n <div class=\"tn__group-or-rule rule\">\r\n <div class=\"tn__rule-body\">\r\n <ng-container *ngIf=\"templateFieldPicker\">\r\n <div class=\"tn__rule-field\">\r\n <ng-container\r\n *ngTemplateOutlet=\"templateFieldPicker; context: {$implicit: query, handleChangedField: setDatasourceOperators}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!templateFieldPicker\">\r\n <ng-container *ngTemplateOutlet=\"fieldPicker; context: {$implicit: query}\"></ng-container>\r\n </ng-container>\r\n <div class=\"tn__rule-operator\">\r\n <p-dropdown appendTo=\"body\" [options]=\"operators\" optionLabel=\"ten\" optionValue=\"id\"\r\n placeholder=\"Ch\u1ECDn to\u00E1n t\u1EED\" [(ngModel)]=\"query.compareType\" (onChange)=\"handleChangeOperator()\">\r\n </p-dropdown>\r\n </div>\r\n <div class=\"tn__rule-value\">\r\n <ng-container *ngIf=\"control\">\r\n <ng-container [ngSwitch]=\"controlType\">\r\n <input *ngSwitchCase=\"'textbox'\" [disabled]=\"disabled\" type=\"text\" pInputText\r\n placeholder=\"Gi\u00E1 tr\u1ECB\" [(ngModel)]=\"query.value\" />\r\n <!-- <p-multiSelect *ngSwitchCase=\"'dropdown'\" [placeholder]=\"control.placeholder\"\r\n [appendTo]=\"'body'\" [options]=\"control.dataSource\" [disabled]=\"disabled\" optionLabel=\"ten\"\r\n optionValue=\"id\" [(ngModel)]=\"query.value\">\r\n </p-multiSelect> -->\r\n <dropdown *ngSwitchCase=\"'dropdown'\" [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [itemSelectedStyleClass]=\"'min'\" [(value)]=\"query.value\">\r\n </dropdown>\r\n <div *ngSwitchCase=\"'datetime'\" class=\"datetime-value-container\">\r\n <p-checkbox [binary]=\"true\" [label]=\"'T\u00F9y bi\u1EBFn'\" [(ngModel)]=\"custom\"></p-checkbox>\r\n <datetime-picker *ngIf=\"!custom\" [disabled]=\"disabled\" [(ngModel)]=\"query.value\">\r\n </datetime-picker>\r\n <input *ngIf=\"custom\" pInputText placeholder=\"VD: [now] + 1d - 2h + 3m - 4s\"\r\n [(ngModel)]=\"query.value\" />\r\n </div>\r\n\r\n <tn-mask *ngSwitchCase=\"'number'\" [disabled]=\"disabled\" [maskType]=\"control.maskType\"\r\n [placeholder]=\"control.placeholder\" [(ngModel)]=\"query.value\">\r\n </tn-mask>\r\n <user-picker *ngSwitchCase=\"'user'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\" [multiple]=\"control.multiple\">\r\n </user-picker>\r\n <cocautochuc-picker-list *ngSwitchCase=\"'cocautochuc'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </cocautochuc-picker-list>\r\n <autocomplete-picker *ngSwitchCase=\"'role'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <autocomplete-picker *ngSwitchCase=\"'groupuser'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <autocomplete-picker *ngSwitchCase=\"'chucVu'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <autocomplete-picker *ngSwitchCase=\"'autocomplete-picker'\" [control]=\"control\"\r\n [disabled]=\"disabled\" [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <app-autocomplete-datasource *ngSwitchCase=\"'autocomplete'\" [control]=\"control\"\r\n [disabled]=\"disabled\" [(ngModel)]=\"query.value\" [suggestions]=\"control.dataSource\">\r\n </app-autocomplete-datasource>\r\n <ng-container *ngSwitchDefault>\r\n <input type=\"text\" pInputText placeholder=\"Gi\u00E1 tr\u1ECB\" [disabled]=\"true\" />\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!control\">\r\n <input type=\"text\" pInputText placeholder=\"Gi\u00E1 tr\u1ECB\" [disabled]=\"true\" />\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"tn__rule-action\">\r\n <button type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-text p-button-rounded p-button-danger\"\r\n pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" (click)=\"removeGroup()\"></button>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #fieldPicker let-query>\r\n <p-dropdown [appendTo]=\"'body'\" [options]=\"dataSourceFields\" [class]=\"'tn__rule-field'\" optionLabel=\"ten\"\r\n optionValue=\"id\" placeholder=\"Ch\u1ECDn tr\u01B0\u1EDDng d\u1EEF li\u1EC7u\" [(ngModel)]=\"query.field\"\r\n (onChange)=\"handleChangeField($event)\">\r\n </p-dropdown>\r\n</ng-template>",
37898
+ template: "<div class=\"tn__group-or-rule-container rule-container\">\r\n <div class=\"tn__group-or-rule rule\">\r\n <div class=\"tn__rule-body\">\r\n <ng-container *ngIf=\"templateFieldPicker\">\r\n <div class=\"tn__rule-field\">\r\n <ng-container\r\n *ngTemplateOutlet=\"templateFieldPicker; context: {$implicit: query, handleChangedField: setDatasourceOperators}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!templateFieldPicker\">\r\n <ng-container *ngTemplateOutlet=\"fieldPicker; context: {$implicit: query}\"></ng-container>\r\n </ng-container>\r\n <div class=\"tn__rule-operator\">\r\n <p-dropdown appendTo=\"body\" [options]=\"operators\" optionLabel=\"ten\" optionValue=\"id\"\r\n placeholder=\"Ch\u1ECDn to\u00E1n t\u1EED\" [(ngModel)]=\"query.compareType\" (onChange)=\"handleChangeOperator()\">\r\n </p-dropdown>\r\n </div>\r\n <div class=\"tn__rule-value\">\r\n <ng-container *ngIf=\"control\">\r\n <ng-container [ngSwitch]=\"controlType\">\r\n <ng-container *ngSwitchCase=\"'textbox'\">\r\n <ng-template *ngTemplateOutlet=\"textBoxValue; context: {$implicit: query}\"></ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'custom'\">\r\n <ng-template *ngTemplateOutlet=\"textBoxValue; context: {$implicit: query}\"></ng-template>\r\n </ng-container>\r\n <!-- <p-multiSelect *ngSwitchCase=\"'dropdown'\" [placeholder]=\"control.placeholder\"\r\n [appendTo]=\"'body'\" [options]=\"control.dataSource\" [disabled]=\"disabled\" optionLabel=\"ten\"\r\n optionValue=\"id\" [(ngModel)]=\"query.value\">\r\n </p-multiSelect> -->\r\n <dropdown *ngSwitchCase=\"'dropdown'\" [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [itemSelectedStyleClass]=\"'min'\" [(value)]=\"query.value\">\r\n </dropdown>\r\n <div *ngSwitchCase=\"'datetime'\" class=\"datetime-value-container\">\r\n <p-checkbox [binary]=\"true\" [label]=\"'T\u00F9y bi\u1EBFn'\" [(ngModel)]=\"custom\"></p-checkbox>\r\n <datetime-picker *ngIf=\"!custom\" [disabled]=\"disabled\" [(ngModel)]=\"query.value\">\r\n </datetime-picker>\r\n <input *ngIf=\"custom\" pInputText placeholder=\"VD: [now] + 1d - 2h + 3m - 4s\"\r\n [(ngModel)]=\"query.value\" />\r\n </div>\r\n\r\n <tn-mask *ngSwitchCase=\"'number'\" [disabled]=\"disabled\" [maskType]=\"control.maskType\"\r\n [placeholder]=\"control.placeholder\" [(ngModel)]=\"query.value\">\r\n </tn-mask>\r\n <user-picker *ngSwitchCase=\"'user'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\" [multiple]=\"control.multiple\">\r\n </user-picker>\r\n <cocautochuc-picker-list *ngSwitchCase=\"'cocautochuc'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </cocautochuc-picker-list>\r\n <autocomplete-picker *ngSwitchCase=\"'role'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <autocomplete-picker *ngSwitchCase=\"'groupuser'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <autocomplete-picker *ngSwitchCase=\"'chucVu'\" [control]=\"control\" [disabled]=\"disabled\"\r\n [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <autocomplete-picker *ngSwitchCase=\"'autocomplete-picker'\" [control]=\"control\"\r\n [disabled]=\"disabled\" [(ngModel)]=\"query.value\">\r\n </autocomplete-picker>\r\n <app-autocomplete-datasource *ngSwitchCase=\"'autocomplete'\" [control]=\"control\"\r\n [disabled]=\"disabled\" [(ngModel)]=\"query.value\" [suggestions]=\"control.dataSource\">\r\n </app-autocomplete-datasource>\r\n <ng-container *ngSwitchDefault>\r\n <input type=\"text\" pInputText placeholder=\"Gi\u00E1 tr\u1ECB\" [disabled]=\"true\" />\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!control\">\r\n <input type=\"text\" pInputText placeholder=\"Gi\u00E1 tr\u1ECB\" [disabled]=\"true\" />\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"tn__rule-action\">\r\n <button type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-text p-button-rounded p-button-danger\"\r\n pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" (click)=\"removeGroup()\"></button>\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #fieldPicker let-query>\r\n <ng-container *ngIf=\"controlType == 'custom'\">\r\n <input [disabled]=\"disabled\" type=\"text\" [class]=\"'tn__rule-field'\" pInputText placeholder=\"Tr\u01B0\u1EDDng d\u1EEF li\u1EC7u\"\r\n [(ngModel)]=\"query.fieldValue\" />\r\n </ng-container>\r\n <ng-container *ngIf=\"controlType != 'custom'\">\r\n <p-dropdown [appendTo]=\"'body'\" [options]=\"dataSourceFields\" [class]=\"'tn__rule-field'\" optionLabel=\"ten\"\r\n optionValue=\"id\" placeholder=\"Ch\u1ECDn tr\u01B0\u1EDDng d\u1EEF li\u1EC7u\" [(ngModel)]=\"query.field\"\r\n (onChange)=\"handleChangeField($event)\">\r\n </p-dropdown>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #textBoxValue let-query>\r\n <input [disabled]=\"disabled\" type=\"text\" pInputText placeholder=\"Gi\u00E1 tr\u1ECB\" [(ngModel)]=\"query.value\" />\r\n</ng-template>",
37803
37899
  styles: ["::ng-deep query-builder-rule .tn__rule-body{display:flex;width:calc(100% - 34px)}::ng-deep query-builder-rule .tn__rule-body>*{margin-right:5px}::ng-deep query-builder-rule .tn__rule-body>:last-child{margin-right:0}::ng-deep query-builder-rule .tn__rule-field{height:26px}::ng-deep query-builder-rule .tn__rule-value{min-height:26px}::ng-deep query-builder-rule .tn__rule-field,::ng-deep query-builder-rule .tn__rule-value{flex:0 0 calc(50% - 80px);width:calc(50% - 80px)}::ng-deep query-builder-rule .tn__rule-field .p-autocomplete,::ng-deep query-builder-rule .tn__rule-field .p-calendar,::ng-deep query-builder-rule .tn__rule-field.p-dropdown,::ng-deep query-builder-rule .tn__rule-field .p-dropdown,::ng-deep query-builder-rule .tn__rule-field .p-inputtext,::ng-deep query-builder-rule .tn__rule-field .p-multiselect,::ng-deep query-builder-rule .tn__rule-field tn-mask .p-inputgroup,::ng-deep query-builder-rule .tn__rule-value .p-autocomplete,::ng-deep query-builder-rule .tn__rule-value .p-calendar,::ng-deep query-builder-rule .tn__rule-value.p-dropdown,::ng-deep query-builder-rule .tn__rule-value .p-dropdown,::ng-deep query-builder-rule .tn__rule-value .p-inputtext,::ng-deep query-builder-rule .tn__rule-value .p-multiselect,::ng-deep query-builder-rule .tn__rule-value tn-mask .p-inputgroup{height:100%;width:100%}::ng-deep query-builder-rule .tn__rule-field .custom-autocomplete-button,::ng-deep query-builder-rule .tn__rule-field .p-inputtext,::ng-deep query-builder-rule .tn__rule-value .custom-autocomplete-button,::ng-deep query-builder-rule .tn__rule-value .p-inputtext{min-height:26px;padding:2px 12px}::ng-deep query-builder-rule .tn__rule-field .tn-dropdown,::ng-deep query-builder-rule .tn__rule-field .tn-dropdown.p-multiselect.p-component,::ng-deep query-builder-rule .tn__rule-value .tn-dropdown,::ng-deep query-builder-rule .tn__rule-value .tn-dropdown.p-multiselect.p-component{min-height:26px}::ng-deep query-builder-rule .tn__rule-field .tn-autocomplete .p-autocomplete-dropdown,::ng-deep query-builder-rule .tn__rule-value .tn-autocomplete .p-autocomplete-dropdown{height:26px;width:26px}::ng-deep query-builder-rule .tn__rule-field .p-calendar .p-button.p-button-icon-only,::ng-deep query-builder-rule .tn__rule-value .p-calendar .p-button.p-button-icon-only{padding:2px 12px}::ng-deep query-builder-rule .tn__rule-field .p-autocomplete.p-autocomplete-multiple .p-autocomplete-multiple-container .p-autocomplete-input-token,::ng-deep query-builder-rule .tn__rule-field .p-autocomplete.p-autocomplete-multiple .p-autocomplete-multiple-container .p-autocomplete-token,::ng-deep query-builder-rule .tn__rule-value .p-autocomplete.p-autocomplete-multiple .p-autocomplete-multiple-container .p-autocomplete-input-token,::ng-deep query-builder-rule .tn__rule-value .p-autocomplete.p-autocomplete-multiple .p-autocomplete-multiple-container .p-autocomplete-token{font-size:.9rem;margin:1px 2px;padding:0 .5rem}::ng-deep query-builder-rule .tn__rule-operator{flex:0 0 145px;height:26px;width:145px}::ng-deep query-builder-rule .tn__rule-operator .p-dropdown{height:100%;width:100%}::ng-deep query-builder-rule .tn__rule-operator .p-dropdown .p-inputtext{padding:2px 12px}::ng-deep query-builder-rule .tn__rule-action{flex:0 0 auto;white-space:nowrap}::ng-deep query-builder-rule .tn__rule-action button{height:26px!important;margin-left:2px!important;margin-right:6px!important;width:26px!important}::ng-deep query-builder-rule .datetime-value-container{align-items:center;display:flex}::ng-deep query-builder-rule .datetime-value-container p-checkbox{flex:0 0 auto;margin-right:5px}@media (max-width:640px){::ng-deep query-builder-rule .tn__rule-body{flex-direction:column;padding-right:5px}::ng-deep query-builder-rule .tn__rule-body>*{margin-bottom:5px;margin-right:0}::ng-deep query-builder-rule .tn__rule-field,::ng-deep query-builder-rule .tn__rule-operator,::ng-deep query-builder-rule .tn__rule-value{flex:1 1 auto;width:100%}}"]
37804
37900
  },] }
37805
37901
  ];
@@ -39354,7 +39450,11 @@
39354
39450
  (function (EnumPermissionType) {
39355
39451
  EnumPermissionType[EnumPermissionType["MAIN"] = 0] = "MAIN";
39356
39452
  EnumPermissionType[EnumPermissionType["SHARE"] = 1] = "SHARE"; // Bản ghi tạo ra để chia sẻ
39357
- })(exports.EnumPermissionType || (exports.EnumPermissionType = {}));
39453
+ })(exports.EnumPermissionType || (exports.EnumPermissionType = {}));
39454
+ (function (EnumWorkflowCheckboxOption) {
39455
+ EnumWorkflowCheckboxOption[EnumWorkflowCheckboxOption["TAO_CONG_VIEC"] = 1] = "TAO_CONG_VIEC";
39456
+ EnumWorkflowCheckboxOption[EnumWorkflowCheckboxOption["AUTO_NEXT_STEP"] = 2] = "AUTO_NEXT_STEP";
39457
+ })(exports.EnumWorkflowCheckboxOption || (exports.EnumWorkflowCheckboxOption = {}));
39358
39458
 
39359
39459
  var StateMachineTopic = {
39360
39460
  CONNECTION_CHANGE: 'CONNECTION_CHANGE'
@@ -39370,7 +39470,7 @@
39370
39470
  { id: ɵ3, ten: 'Người dùng' },
39371
39471
  { id: ɵ4, ten: 'Đơn vị' },
39372
39472
  { id: ɵ5, ten: 'Nhóm người dùng' },
39373
- { id: ɵ6, ten: 'Vai trò' }
39473
+ { id: ɵ6, ten: 'Chức vụ' }
39374
39474
  ];
39375
39475
  var ɵ7 = exports.EnumUserRule.CAP_TREN, ɵ8 = exports.EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH, ɵ9 = exports.EnumUserRule.NGUOI_NHAN, ɵ10 = exports.EnumUserRule.NGUOI_THEO_DOI;
39376
39476
  var DataSourceUserRule = [
@@ -39391,6 +39491,11 @@
39391
39491
  // { id: EnumUserRule.CAP_TREN_DA_GUI, ten: 'Cấp trên đã trình' },
39392
39492
  // { id: EnumUserRule.NGUOI_CUOI_CUNG, ten: 'Người cuối cùng' },
39393
39493
  { id: ɵ12, ten: 'Người tham gia quy trình' }
39494
+ ];
39495
+ var ɵ13 = exports.EnumWorkflowCheckboxOption.TAO_CONG_VIEC, ɵ14 = exports.EnumWorkflowCheckboxOption.AUTO_NEXT_STEP;
39496
+ var DataSourceWorkflowCheckboxOption = [
39497
+ { id: ɵ13, ten: 'Tạo công việc' },
39498
+ { id: ɵ14, ten: 'Tự động chuyển bước đầu tiên' }
39394
39499
  ];
39395
39500
 
39396
39501
  var StateMetadataComponent = /** @class */ (function (_super) {
@@ -39720,11 +39825,11 @@
39720
39825
  return new AutoCompletePickerControlSchema({
39721
39826
  field: field,
39722
39827
  label: label,
39723
- title: 'Chọn vai trò',
39724
- placeholder: 'Chọn vai trò',
39828
+ title: 'Chọn chức vụ',
39829
+ placeholder: 'Chọn chức vụ',
39725
39830
  mdWidth: 12,
39726
39831
  baseService: _roleService,
39727
- displayField: 'name',
39832
+ displayField: 'ten',
39728
39833
  fieldPlus: 'code',
39729
39834
  fieldSearchText: ['code'],
39730
39835
  multiple: true,
@@ -39737,8 +39842,8 @@
39737
39842
  fullTextSearch: true
39738
39843
  }),
39739
39844
  new EntityPickerColumn({
39740
- label: 'Tên vai trò',
39741
- code: 'name',
39845
+ label: 'Tên chức vụ',
39846
+ code: 'ten',
39742
39847
  dataType: 'string',
39743
39848
  operator: exports.Operator.contain,
39744
39849
  notInFields: true
@@ -39831,17 +39936,21 @@
39831
39936
  required: true,
39832
39937
  })
39833
39938
  ];
39939
+ if (this.data && this.data.editing) {
39940
+ this.isFormAdd = false;
39941
+ }
39942
+ else {
39943
+ this.isFormAdd = true;
39944
+ }
39834
39945
  };
39835
39946
  StateMachinesConnectionMetadataComponent.prototype.onFormInitialized = function (evt) {
39836
39947
  return __awaiter(this, void 0, void 0, function () {
39837
39948
  return __generator(this, function (_a) {
39838
- if (this.data) {
39839
- this.isFormAdd = false;
39949
+ if (!this.isFormAdd) {
39840
39950
  setMetadataConnection(evt.model, this.data);
39841
39951
  this.source = this.data.source;
39842
39952
  }
39843
39953
  else {
39844
- this.isFormAdd = true;
39845
39954
  evt.model.id = this._commonService.guid();
39846
39955
  evt.model.data = {};
39847
39956
  }
@@ -39922,7 +40031,7 @@
39922
40031
  StateMachinesConnectionMetadataComponent.decorators = [
39923
40032
  { type: i0.Component, args: [{
39924
40033
  selector: 'statemachines-connection-metadata',
39925
- template: "<div class=\"flex flex-column\" style=\"height: 100%\">\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <div class=\"fit\" style=\"overflow: hidden;\">\r\n <tn-tabview [data]=\"mainTabData\" [allowViewAll]=\"true\">\r\n <ng-template #sender>\r\n <statemachines-connection-sender #senderForm [data]=\"data\" [machines]=\"machinesData.machines\"\r\n [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-sender>\r\n </ng-template>\r\n <ng-template #receiver>\r\n <statemachines-connection-receiver #receiverForm [designerContext]=\"designerContext\" [data]=\"data\"\r\n [workflowData]=\"machinesData\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver>\r\n </ng-template>\r\n </tn-tabview>\r\n </div>\r\n</div>\r\n<ng-template #buttonTemplate>\r\n <ng-container *ngIf=\"!viewOnly\">\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\"\r\n [label]=\"'X\u00F3a' | translate\" (click)=\"remove($event)\"></button>\r\n </ng-container>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n\r\n<ng-template #templateDropdownIconSelected let-item let-selectedValue=\"selectedValue\">\r\n <span [class]=\"item.label\"></span>\r\n</ng-template>\r\n<ng-template #templateDropdownIcon let-item>\r\n <div class=\"__workflow-setting-icon-item\">\r\n <span [class]=\"item.label\"></span>\r\n </div>\r\n</ng-template>",
40034
+ template: "<div class=\"flex flex-column\" style=\"height: 100%\">\r\n <crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n </crud-form>\r\n <div class=\"fit\" style=\"overflow: hidden;\">\r\n <tn-tabview [data]=\"mainTabData\" [allowViewAll]=\"true\">\r\n <ng-template #sender>\r\n <statemachines-connection-sender #senderForm [data]=\"data\" [machines]=\"machinesData.machines\"\r\n [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-sender>\r\n </ng-template>\r\n <ng-template #receiver>\r\n <statemachines-connection-receiver #receiverForm [designerContext]=\"designerContext\" [data]=\"data\"\r\n [isFormAdd]=\"isFormAdd\" [workflowData]=\"machinesData\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver>\r\n </ng-template>\r\n </tn-tabview>\r\n </div>\r\n</div>\r\n<ng-template #buttonTemplate>\r\n <ng-container *ngIf=\"!viewOnly\">\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\"\r\n class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-text p-button-danger\"\r\n [label]=\"'X\u00F3a' | translate\" (click)=\"remove($event)\"></button>\r\n </ng-container>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n\r\n<ng-template #templateDropdownIconSelected let-item let-selectedValue=\"selectedValue\">\r\n <span [class]=\"item.label\"></span>\r\n</ng-template>\r\n<ng-template #templateDropdownIcon let-item>\r\n <div class=\"__workflow-setting-icon-item\">\r\n <span [class]=\"item.label\"></span>\r\n </div>\r\n</ng-template>",
39926
40035
  providers: [ComponentContextService],
39927
40036
  styles: [""]
39928
40037
  },] }
@@ -39956,9 +40065,35 @@
39956
40065
  _super.prototype.ngOnInit.call(this);
39957
40066
  this.doNotCheckBaseService = true;
39958
40067
  this.setting.schema = [
40068
+ this.createCheckboxRule('departmentRules'),
39959
40069
  this.createOrgPickerControlReceiver('departmentIds', 'Đơn vị nhận'),
40070
+ this.createCheckboxRule('departmentViewRules'),
39960
40071
  this.createOrgPickerControlReceiver('departmentViewIds', 'Đơn vị theo dõi'),
39961
40072
  ];
40073
+ if (this.isFormAdd) {
40074
+ if (!this.data.data) {
40075
+ this.data.data = {};
40076
+ }
40077
+ if (this.data.data.departmentRules == null) {
40078
+ this.data.data.departmentRules = [exports.EnumUserRule.NGUOI_NHAN];
40079
+ }
40080
+ if (this.data.data.departmentViewRules == null) {
40081
+ this.data.data.departmentViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
40082
+ }
40083
+ }
40084
+ };
40085
+ StateMachinesConnectionReceiverDepartmentComponent.prototype.createCheckboxRule = function (field) {
40086
+ return new CheckBoxListControlSchema({
40087
+ field: field,
40088
+ label: 'Cán bộ đặc biệt',
40089
+ class: 'rules',
40090
+ dataSource: [
40091
+ { id: exports.EnumUserRule.NGUOI_NHAN, ten: 'Đơn vị nhận bước trước' },
40092
+ { id: exports.EnumUserRule.NGUOI_THEO_DOI, ten: 'Đơn vị theo dõi bước trước' }
40093
+ ],
40094
+ showLabel: false,
40095
+ mdWidth: 12
40096
+ });
39962
40097
  };
39963
40098
  StateMachinesConnectionReceiverDepartmentComponent.prototype.createOrgPickerControlReceiver = function (field, label) {
39964
40099
  var control = createOrgPickerControl(field, label);
@@ -39994,7 +40129,9 @@
39994
40129
  });
39995
40130
  };
39996
40131
  StateMachinesConnectionReceiverDepartmentComponent.prototype.assignFieldPlus = function (dest, source) {
40132
+ dest.departmentRules = source.departmentRules;
39997
40133
  dest.departmentIds = source.departmentIds;
40134
+ dest.departmentViewRules = source.departmentViewRules;
39998
40135
  dest.departmentViewIds = source.departmentViewIds;
39999
40136
  };
40000
40137
  return StateMachinesConnectionReceiverDepartmentComponent;
@@ -40012,6 +40149,7 @@
40012
40149
  ]; };
40013
40150
  StateMachinesConnectionReceiverDepartmentComponent.propDecorators = {
40014
40151
  data: [{ type: i0.Input }],
40152
+ isFormAdd: [{ type: i0.Input }],
40015
40153
  viewOnly: [{ type: i0.Input }]
40016
40154
  };
40017
40155
 
@@ -40029,9 +40167,35 @@
40029
40167
  _super.prototype.ngOnInit.call(this);
40030
40168
  this.doNotCheckBaseService = true;
40031
40169
  this.setting.schema = [
40170
+ this.createCheckboxRule('groupRules'),
40032
40171
  this.createUserGroupPickerControlReceiver('groupIds', 'Nhóm người dùng nhận'),
40172
+ this.createCheckboxRule('groupViewRules'),
40033
40173
  this.createUserGroupPickerControlReceiver('groupViewIds', 'Nhóm người dùng theo dõi'),
40034
40174
  ];
40175
+ if (this.isFormAdd) {
40176
+ if (!this.data.data) {
40177
+ this.data.data = {};
40178
+ }
40179
+ if (this.data.data.groupRules == null) {
40180
+ this.data.data.groupRules = [exports.EnumUserRule.NGUOI_NHAN];
40181
+ }
40182
+ if (this.data.data.groupViewRules == null) {
40183
+ this.data.data.groupViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
40184
+ }
40185
+ }
40186
+ };
40187
+ StateMachinesConnectionReceiverGroupComponent.prototype.createCheckboxRule = function (field) {
40188
+ return new CheckBoxListControlSchema({
40189
+ field: field,
40190
+ label: 'Cán bộ đặc biệt',
40191
+ class: 'rules',
40192
+ dataSource: [
40193
+ { id: exports.EnumUserRule.NGUOI_NHAN, ten: 'Nhóm người dùng nhận bước trước' },
40194
+ { id: exports.EnumUserRule.NGUOI_THEO_DOI, ten: 'Nhóm người dùng theo dõi bước trước' }
40195
+ ],
40196
+ showLabel: false,
40197
+ mdWidth: 12
40198
+ });
40035
40199
  };
40036
40200
  StateMachinesConnectionReceiverGroupComponent.prototype.createUserGroupPickerControlReceiver = function (field, label) {
40037
40201
  var control = createUserGroupPickerControl(this._userGroupService, field, label);
@@ -40067,7 +40231,9 @@
40067
40231
  });
40068
40232
  };
40069
40233
  StateMachinesConnectionReceiverGroupComponent.prototype.assignFieldPlus = function (dest, source) {
40234
+ dest.groupRules = source.groupRules;
40070
40235
  dest.groupIds = source.groupIds;
40236
+ dest.groupViewRules = source.groupViewRules;
40071
40237
  dest.groupViewIds = source.groupViewIds;
40072
40238
  };
40073
40239
  return StateMachinesConnectionReceiverGroupComponent;
@@ -40086,14 +40252,39 @@
40086
40252
  ]; };
40087
40253
  StateMachinesConnectionReceiverGroupComponent.propDecorators = {
40088
40254
  data: [{ type: i0.Input }],
40255
+ isFormAdd: [{ type: i0.Input }],
40089
40256
  viewOnly: [{ type: i0.Input }]
40090
40257
  };
40091
40258
 
40259
+ var DmChucVuService = /** @class */ (function (_super) {
40260
+ __extends(DmChucVuService, _super);
40261
+ function DmChucVuService(http, injector, _moduleConfigService) {
40262
+ var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.canboEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/DM_ChucVu") || this;
40263
+ _this.serviceCode = 'canbo';
40264
+ _this.entityName = 'DM_ChucVu';
40265
+ _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.canboEndpoint;
40266
+ _this._moduleConfig = _moduleConfigService.getConfig();
40267
+ return _this;
40268
+ }
40269
+ return DmChucVuService;
40270
+ }(BaseService));
40271
+ DmChucVuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DmChucVuService_Factory() { return new DmChucVuService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: DmChucVuService, providedIn: "root" });
40272
+ DmChucVuService.decorators = [
40273
+ { type: i0.Injectable, args: [{
40274
+ providedIn: 'root'
40275
+ },] }
40276
+ ];
40277
+ DmChucVuService.ctorParameters = function () { return [
40278
+ { type: i1$1.HttpClient },
40279
+ { type: i0.Injector },
40280
+ { type: ModuleConfigService }
40281
+ ]; };
40282
+
40092
40283
  var StateMachinesConnectionReceiverRoleComponent = /** @class */ (function (_super) {
40093
40284
  __extends(StateMachinesConnectionReceiverRoleComponent, _super);
40094
- function StateMachinesConnectionReceiverRoleComponent(injector, _roleService) {
40285
+ function StateMachinesConnectionReceiverRoleComponent(injector, _dmChucVuService) {
40095
40286
  var _this = _super.call(this, injector) || this;
40096
- _this._roleService = _roleService;
40287
+ _this._dmChucVuService = _dmChucVuService;
40097
40288
  _this.dataSourceAction = [];
40098
40289
  _this.autoGetDetail = false;
40099
40290
  _this.autoSave = false;
@@ -40103,12 +40294,38 @@
40103
40294
  _super.prototype.ngOnInit.call(this);
40104
40295
  this.doNotCheckBaseService = true;
40105
40296
  this.setting.schema = [
40106
- this.createRolePickerControlReceiver('roleIds', 'Vai trò nhận'),
40107
- this.createRolePickerControlReceiver('roleViewIds', 'Vai trò theo dõi'),
40297
+ this.createCheckboxRule('roleRules'),
40298
+ this.createRolePickerControlReceiver('roleIds', 'Chức vụ nhận'),
40299
+ this.createCheckboxRule('roleViewRules'),
40300
+ this.createRolePickerControlReceiver('roleViewIds', 'Chức vụ theo dõi'),
40108
40301
  ];
40302
+ if (this.isFormAdd) {
40303
+ if (!this.data.data) {
40304
+ this.data.data = {};
40305
+ }
40306
+ if (this.data.data.roleRules == null) {
40307
+ this.data.data.roleRules = [exports.EnumUserRule.NGUOI_NHAN];
40308
+ }
40309
+ if (this.data.data.roleViewRules == null) {
40310
+ this.data.data.roleViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
40311
+ }
40312
+ }
40313
+ };
40314
+ StateMachinesConnectionReceiverRoleComponent.prototype.createCheckboxRule = function (field) {
40315
+ return new CheckBoxListControlSchema({
40316
+ field: field,
40317
+ label: 'Cán bộ đặc biệt',
40318
+ class: 'rules',
40319
+ dataSource: [
40320
+ { id: exports.EnumUserRule.NGUOI_NHAN, ten: 'Chức vụ nhận bước trước' },
40321
+ { id: exports.EnumUserRule.NGUOI_THEO_DOI, ten: 'Chức vụ theo dõi bước trước' }
40322
+ ],
40323
+ showLabel: false,
40324
+ mdWidth: 12
40325
+ });
40109
40326
  };
40110
40327
  StateMachinesConnectionReceiverRoleComponent.prototype.createRolePickerControlReceiver = function (field, label) {
40111
- var control = createRolePickerControl(this._roleService, field, label);
40328
+ var control = createRolePickerControl(this._dmChucVuService, field, label);
40112
40329
  return control;
40113
40330
  };
40114
40331
  StateMachinesConnectionReceiverRoleComponent.prototype.onFormInitialized = function (evt) {
@@ -40141,7 +40358,9 @@
40141
40358
  });
40142
40359
  };
40143
40360
  StateMachinesConnectionReceiverRoleComponent.prototype.assignFieldPlus = function (dest, source) {
40361
+ dest.roleRules = source.roleRules;
40144
40362
  dest.roleIds = source.roleIds;
40363
+ dest.roleViewRules = source.roleViewRules;
40145
40364
  dest.roleViewIds = source.roleViewIds;
40146
40365
  };
40147
40366
  return StateMachinesConnectionReceiverRoleComponent;
@@ -40156,10 +40375,11 @@
40156
40375
  ];
40157
40376
  StateMachinesConnectionReceiverRoleComponent.ctorParameters = function () { return [
40158
40377
  { type: i0.Injector },
40159
- { type: RoleService }
40378
+ { type: DmChucVuService }
40160
40379
  ]; };
40161
40380
  StateMachinesConnectionReceiverRoleComponent.propDecorators = {
40162
40381
  data: [{ type: i0.Input }],
40382
+ isFormAdd: [{ type: i0.Input }],
40163
40383
  viewOnly: [{ type: i0.Input }]
40164
40384
  };
40165
40385
 
@@ -40345,13 +40565,194 @@
40345
40565
  viewOnly: [{ type: i0.Input }]
40346
40566
  };
40347
40567
 
40568
+ var StateMachinesConnectionReceiverConditionComponent = /** @class */ (function (_super) {
40569
+ __extends(StateMachinesConnectionReceiverConditionComponent, _super);
40570
+ function StateMachinesConnectionReceiverConditionComponent(injector, _dmChucVuService, _userGroupService) {
40571
+ var _this = _super.call(this, injector) || this;
40572
+ _this._dmChucVuService = _dmChucVuService;
40573
+ _this._userGroupService = _userGroupService;
40574
+ _this.receiverDynamicRules = [];
40575
+ _this.receiverDynamicViewRules = [];
40576
+ _this.dataSourceAction = [];
40577
+ _this.autoGetDetail = false;
40578
+ _this.autoSave = false;
40579
+ return _this;
40580
+ }
40581
+ StateMachinesConnectionReceiverConditionComponent.prototype.ngOnInit = function () {
40582
+ _super.prototype.ngOnInit.call(this);
40583
+ this.doNotCheckBaseService = true;
40584
+ this.renderDataSourceAction();
40585
+ this.setting.schema = [
40586
+ new CustomControlSchema({
40587
+ field: 'receiverRules',
40588
+ label: 'Người nhận xử lý',
40589
+ mdWidth: 12
40590
+ }),
40591
+ new CustomControlSchema({
40592
+ field: 'receiverViewRules',
40593
+ label: 'Người nhận chỉ xem',
40594
+ mdWidth: 12
40595
+ })
40596
+ ];
40597
+ this.dynamicSchema = [
40598
+ new DropdownControlSchema({
40599
+ field: 'ruleType',
40600
+ label: 'Người dùng',
40601
+ dataSource: DataSourceUserRule,
40602
+ operators: [
40603
+ { id: exports.Operator.in, ten: 'Là' }
40604
+ ]
40605
+ }),
40606
+ new DropdownControlSchema({
40607
+ field: 'userMade',
40608
+ label: 'Người dùng thao tác',
40609
+ valueField: 'code',
40610
+ dataSource: this.dataSourceAction,
40611
+ operators: [
40612
+ { id: exports.Operator.in, ten: 'Thao tác' }
40613
+ ]
40614
+ }),
40615
+ new UserPickerControlSchema({
40616
+ field: 'userIds',
40617
+ label: 'Người dùng đích danh',
40618
+ placeholder: 'Chọn người dùng',
40619
+ mdWidth: 12
40620
+ }),
40621
+ createOrgPickerControl('donViId', 'Đơn vị'),
40622
+ new DropdownControlSchema({
40623
+ field: 'donViCap',
40624
+ label: 'Đơn vị cấp',
40625
+ multiple: true,
40626
+ dataSource: [
40627
+ { id: 1, ten: '1' },
40628
+ { id: 2, ten: '2' },
40629
+ { id: 3, ten: '3' }
40630
+ ]
40631
+ }),
40632
+ createRolePickerControl(this._dmChucVuService, 'roleId', 'Chức vụ'),
40633
+ createUserGroupPickerControl(this._userGroupService, 'groupId', 'Nhóm người dùng'),
40634
+ new NumberRangeControlSchema({
40635
+ field: 'lanThu',
40636
+ label: 'Lần thứ'
40637
+ }),
40638
+ new CustomControlSchema({
40639
+ field: 'customField',
40640
+ label: 'Trường dữ liệu',
40641
+ operators: [
40642
+ { id: exports.Operator.equal, ten: 'Bằng' },
40643
+ { id: exports.Operator.notEqual, ten: 'Không bằng' },
40644
+ { id: exports.Operator.greater, ten: 'Lớn hơn' },
40645
+ { id: exports.Operator.greaterThanEqual, ten: 'Lớn hơn hoặc bằng' },
40646
+ { id: exports.Operator.lower, ten: 'Nhỏ hơn' },
40647
+ { id: exports.Operator.lowerThanEqual, ten: 'Nhỏ hơn hoặc bằng' }
40648
+ ]
40649
+ })
40650
+ ];
40651
+ if (this.data && this.data.data) {
40652
+ this.receiverDynamicRules = this.data.data.receiverRules;
40653
+ this.receiverDynamicViewRules = this.data.data.receiverViewRules;
40654
+ }
40655
+ if (this.isFormAdd) {
40656
+ this.receiverDynamicViewRules = [
40657
+ this.newFilter('ruleType', exports.Operator.in, [
40658
+ exports.EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH,
40659
+ exports.EnumUserRule.NGUOI_NHAN,
40660
+ exports.EnumUserRule.NGUOI_THEO_DOI
40661
+ ])
40662
+ ];
40663
+ }
40664
+ };
40665
+ StateMachinesConnectionReceiverConditionComponent.prototype.renderDataSourceAction = function () {
40666
+ var _this = this;
40667
+ var dataSourceAction = [];
40668
+ if (this.workflowData) {
40669
+ this.workflowData.connections.sort(multipleSort('soThuTu')).forEach(function (action) {
40670
+ var source = _this.workflowData.machines.find(function (q) { return q.id == action.source; });
40671
+ if (source) {
40672
+ var itemAdd_1 = {
40673
+ code: source.code + "___" + action.code,
40674
+ name: action.name,
40675
+ nameLower: action.name.toLowerCase(),
40676
+ ten: action.name,
40677
+ sourceName: source.name
40678
+ };
40679
+ var itemExist = dataSourceAction.find(function (q) { return q.nameLower == itemAdd_1.nameLower; });
40680
+ if (itemExist) {
40681
+ itemExist.ten = itemExist.name + " (" + itemExist.sourceName + ")";
40682
+ itemAdd_1.ten = itemAdd_1.name + " (" + itemAdd_1.sourceName + ")";
40683
+ }
40684
+ dataSourceAction.push(itemAdd_1);
40685
+ }
40686
+ });
40687
+ }
40688
+ this.dataSourceAction = dataSourceAction;
40689
+ };
40690
+ StateMachinesConnectionReceiverConditionComponent.prototype.onFormInitialized = function (evt) {
40691
+ var _a;
40692
+ return __awaiter(this, void 0, void 0, function () {
40693
+ return __generator(this, function (_b) {
40694
+ if (this.data) {
40695
+ this.assignFieldPlus(evt.model, (_a = this.data.data) !== null && _a !== void 0 ? _a : {});
40696
+ }
40697
+ else {
40698
+ evt.model.data = {};
40699
+ }
40700
+ return [2 /*return*/];
40701
+ });
40702
+ });
40703
+ };
40704
+ StateMachinesConnectionReceiverConditionComponent.prototype.assignFieldPlus = function (dest, source) {
40705
+ dest.receiverRules = source.receiverRules;
40706
+ dest.receiverViewRules = source.receiverViewRules;
40707
+ };
40708
+ StateMachinesConnectionReceiverConditionComponent.prototype.getModelData = function () {
40709
+ return __awaiter(this, void 0, void 0, function () {
40710
+ var dataPlus;
40711
+ return __generator(this, function (_b) {
40712
+ dataPlus = {};
40713
+ this.model.data.receiverRules = this.queryBuilder.getQuery();
40714
+ this.model.data.receiverViewRules = this.queryBuilderView.getQuery();
40715
+ this.assignFieldPlus(dataPlus, this.model.data);
40716
+ return [2 /*return*/, dataPlus];
40717
+ });
40718
+ });
40719
+ };
40720
+ return StateMachinesConnectionReceiverConditionComponent;
40721
+ }(DataFormBase));
40722
+ StateMachinesConnectionReceiverConditionComponent.decorators = [
40723
+ { type: i0.Component, args: [{
40724
+ selector: 'statemachines-connection-receiver-condition',
40725
+ template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #receiverRules>\r\n <query-builder #queryBuilder [searchSchema]=\"dynamicSchema\" [filters]=\"receiverDynamicRules\"\r\n [hiddenButtons]=\"true\" [useScrollBar]=\"false\"></query-builder>\r\n </ng-template>\r\n <ng-template #receiverViewRules>\r\n <query-builder #queryBuilderView [searchSchema]=\"dynamicSchema\" [filters]=\"receiverDynamicViewRules\"\r\n [hiddenButtons]=\"true\" [useScrollBar]=\"false\"></query-builder>\r\n </ng-template>\r\n</crud-form>",
40726
+ providers: [ComponentContextService],
40727
+ styles: ["::ng-deep statemachines-connection-receiver-condition query-builder-rule .tn__rule-field{flex:0 0 180px;width:180px}::ng-deep statemachines-connection-receiver-condition query-builder-rule .tn__rule-value{flex:0 0 calc(100% - 340px);width:calc(100% - 340px)}"]
40728
+ },] }
40729
+ ];
40730
+ StateMachinesConnectionReceiverConditionComponent.ctorParameters = function () { return [
40731
+ { type: i0.Injector },
40732
+ { type: DmChucVuService },
40733
+ { type: UserGroupRealService }
40734
+ ]; };
40735
+ StateMachinesConnectionReceiverConditionComponent.propDecorators = {
40736
+ queryBuilder: [{ type: i0.ViewChild, args: ['queryBuilder', { static: false },] }],
40737
+ queryBuilderView: [{ type: i0.ViewChild, args: ['queryBuilderView', { static: false },] }],
40738
+ workflowData: [{ type: i0.Input }],
40739
+ data: [{ type: i0.Input }],
40740
+ isFormAdd: [{ type: i0.Input }],
40741
+ viewOnly: [{ type: i0.Input }]
40742
+ };
40743
+
40348
40744
  var StateMachinesConnectionReceiverComponent = /** @class */ (function (_super) {
40349
40745
  __extends(StateMachinesConnectionReceiverComponent, _super);
40350
40746
  function StateMachinesConnectionReceiverComponent(injector) {
40351
40747
  var _this = _super.call(this, injector) || this;
40352
40748
  _this.tabDataReceiver = [
40749
+ // {
40750
+ // code: 'user',
40751
+ // icon: 'fa fa-user',
40752
+ // label: ''
40753
+ // },
40353
40754
  {
40354
- code: 'user',
40755
+ code: 'condition',
40355
40756
  icon: 'fa fa-user',
40356
40757
  label: ''
40357
40758
  },
@@ -40377,18 +40778,18 @@
40377
40778
  };
40378
40779
  StateMachinesConnectionReceiverComponent.prototype.getModelData = function () {
40379
40780
  return __awaiter(this, void 0, void 0, function () {
40380
- var dataPlus, modelUser, modelDepartment, modelGroup, roleGroup;
40781
+ var dataPlus, modelCondition, modelDepartment, modelGroup, roleGroup;
40381
40782
  return __generator(this, function (_a) {
40382
40783
  switch (_a.label) {
40383
40784
  case 0:
40384
40785
  dataPlus = {};
40385
- return [4 /*yield*/, this.userForm.getModelData()];
40786
+ return [4 /*yield*/, this.conditionForm.getModelData()];
40386
40787
  case 1:
40387
- modelUser = _a.sent();
40388
- if (modelUser == null) {
40788
+ modelCondition = _a.sent();
40789
+ if (modelCondition == null) {
40389
40790
  return [2 /*return*/, null];
40390
40791
  }
40391
- this.userForm.assignFieldPlus(dataPlus, modelUser);
40792
+ this.conditionForm.assignFieldPlus(dataPlus, modelCondition);
40392
40793
  return [4 /*yield*/, this.departmentForm.getModelData()];
40393
40794
  case 2:
40394
40795
  modelDepartment = _a.sent();
@@ -40420,7 +40821,7 @@
40420
40821
  StateMachinesConnectionReceiverComponent.decorators = [
40421
40822
  { type: i0.Component, args: [{
40422
40823
  selector: 'statemachines-connection-receiver',
40423
- template: "<div style=\"height: 100%\">\r\n <tn-tabview [data]=\"tabDataReceiver\" [allowViewAll]=\"true\" [vertical]=\"true\">\r\n <ng-template #user>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-user #user [designerContext]=\"designerContext\" [data]=\"data\"\r\n [workflowData]=\"workflowData\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-user>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n <ng-template #department>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-department #user [data]=\"data\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-department>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n <ng-template #group>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-group #user [data]=\"data\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-group>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n <ng-template #role>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-role #user [data]=\"data\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-role>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n </tn-tabview>\r\n</div>",
40824
+ template: "<div style=\"height: 100%\">\r\n <tn-tabview [data]=\"tabDataReceiver\" [allowViewAll]=\"true\" [vertical]=\"true\">\r\n <!-- <ng-template #user>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-user #user [designerContext]=\"designerContext\" [data]=\"data\"\r\n [workflowData]=\"workflowData\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-user>\r\n </tn-custom-scrollbar>\r\n </ng-template> -->\r\n <ng-template #condition>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-condition #condition [workflowData]=\"workflowData\" [data]=\"data\"\r\n [isFormAdd]=\"isFormAdd\" [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-condition>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n <ng-template #department>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-department #user [data]=\"data\" [isFormAdd]=\"isFormAdd\"\r\n [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-department>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n <ng-template #group>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-group #user [data]=\"data\" [isFormAdd]=\"isFormAdd\"\r\n [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-group>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n <ng-template #role>\r\n <tn-custom-scrollbar>\r\n <statemachines-connection-receiver-role #user [data]=\"data\" [isFormAdd]=\"isFormAdd\"\r\n [viewOnly]=\"viewOnly\">\r\n </statemachines-connection-receiver-role>\r\n </tn-custom-scrollbar>\r\n </ng-template>\r\n </tn-tabview>\r\n</div>",
40424
40825
  providers: [ComponentContextService],
40425
40826
  styles: ["::ng-deep statemachines-connection-metadata .userRules .tn-check-box-list,::ng-deep statemachines-connection-metadata .userViewRules .tn-check-box-list{margin-bottom:.5em!important;margin-top:-.5em}::ng-deep statemachines-connection-metadata .userIds .label,::ng-deep statemachines-connection-metadata .userViewIds .label{font-weight:700}"]
40426
40827
  },] }
@@ -40430,22 +40831,24 @@
40430
40831
  ]; };
40431
40832
  StateMachinesConnectionReceiverComponent.propDecorators = {
40432
40833
  userForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverUserComponent, { static: false },] }],
40834
+ conditionForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverConditionComponent, { static: false },] }],
40433
40835
  departmentForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverDepartmentComponent, { static: false },] }],
40434
40836
  groupForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverGroupComponent, { static: false },] }],
40435
40837
  roleForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverRoleComponent, { static: false },] }],
40436
40838
  designerContext: [{ type: i0.Input }],
40437
40839
  data: [{ type: i0.Input }],
40840
+ isFormAdd: [{ type: i0.Input }],
40438
40841
  workflowData: [{ type: i0.Input }],
40439
40842
  viewOnly: [{ type: i0.Input }]
40440
40843
  };
40441
40844
 
40442
40845
  var StateMachinesConnectionSenderComponent = /** @class */ (function (_super) {
40443
40846
  __extends(StateMachinesConnectionSenderComponent, _super);
40444
- function StateMachinesConnectionSenderComponent(injector, notifierService, _userGroupService, _roleService) {
40847
+ function StateMachinesConnectionSenderComponent(injector, notifierService, _userGroupService, _dmChucVuService) {
40445
40848
  var _this = _super.call(this, injector) || this;
40446
40849
  _this.notifierService = notifierService;
40447
40850
  _this._userGroupService = _userGroupService;
40448
- _this._roleService = _roleService;
40851
+ _this._dmChucVuService = _dmChucVuService;
40449
40852
  _this.dynamicRules = [];
40450
40853
  _this.autoGetDetail = false;
40451
40854
  _this.autoSave = false;
@@ -40475,7 +40878,7 @@
40475
40878
  { id: 3, ten: '3' }
40476
40879
  ]
40477
40880
  }),
40478
- createRolePickerControl(this._roleService, 'roleId', 'Vai trò'),
40881
+ createRolePickerControl(this._dmChucVuService, 'roleId', 'Chức vụ'),
40479
40882
  userGroupPickerControl,
40480
40883
  new DropdownControlSchema({
40481
40884
  field: 'lastStateCode',
@@ -40485,6 +40888,18 @@
40485
40888
  displayField: 'name',
40486
40889
  showLabel: false,
40487
40890
  mdWidth: 12
40891
+ }),
40892
+ new CustomControlSchema({
40893
+ field: 'customField',
40894
+ label: 'Trường dữ liệu',
40895
+ operators: [
40896
+ { id: exports.Operator.equal, ten: 'Bằng' },
40897
+ { id: exports.Operator.notEqual, ten: 'Không bằng' },
40898
+ { id: exports.Operator.greater, ten: 'Lớn hơn' },
40899
+ { id: exports.Operator.greaterThanEqual, ten: 'Lớn hơn hoặc bằng' },
40900
+ { id: exports.Operator.lower, ten: 'Nhỏ hơn' },
40901
+ { id: exports.Operator.lowerThanEqual, ten: 'Nhỏ hơn hoặc bằng' }
40902
+ ]
40488
40903
  })
40489
40904
  ];
40490
40905
  if (this.data && this.data.data) {
@@ -40539,7 +40954,7 @@
40539
40954
  { type: i0.Injector },
40540
40955
  { type: NotifierService },
40541
40956
  { type: UserGroupRealService },
40542
- { type: RoleService }
40957
+ { type: DmChucVuService }
40543
40958
  ]; };
40544
40959
  StateMachinesConnectionSenderComponent.propDecorators = {
40545
40960
  queryBuilder: [{ type: i0.ViewChild, args: ['queryBuilder', { static: false },] }],
@@ -40974,7 +41389,7 @@
40974
41389
  selector: 'statemachines-designer',
40975
41390
  template: "<div class=\"state-control\" [ngStyle]=\"holderStyle\" [class.highlight]=\"highlighting\">\r\n <tn-custom-scrollbar *ngIf=\"useScrollBar\" #scrollbar [ngStyle]=\"{ height: '100%', display: 'block'}\"\r\n [config]=\"{suppressScrollX : true}\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </tn-custom-scrollbar>\r\n <ng-container *ngIf=\"!useScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </ng-container>\r\n <div class=\"container-note\">\r\n <span *ngIf=\"!viewOnly\"><i class=\"fas fa-info-circle\"></i> Click \u0111\u00FAp v\u00E0o v\u00F9ng tr\u1ED1ng \u0111\u1EC3 th\u00EAm m\u1EDBi tr\u1EA1ng th\u00E1i\r\n </span>\r\n\r\n <button (click)=\"copyWfToClipboard()\" pButton type=\"button\" pTooltip=\"Sao ch\u00E9p\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-info p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i class=\"fas fa-copy\"></i>\r\n </button>\r\n\r\n <button *ngIf=\"!viewOnly\" (click)=\"pasteWfToClipboard()\" pButton type=\"button\" label=\"Success\" pTooltip=\"D\u00E1n\"\r\n tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-success p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i class=\"fas fa-paste\"></i>\r\n </button>\r\n\r\n <button (click)=\"fullScreen(!fullScreenMode)\" pButton type=\"button\" label=\"Success\" pTooltip=\"M\u1EDF r\u1ED9ng\"\r\n tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-secondary p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i *ngIf=\"!fullScreenMode\" class=\"fas fa-expand-arrows-alt\"></i>\r\n <i *ngIf=\"fullScreenMode\" class=\"fas fa-compress-arrows-alt\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #content>\r\n <div *ngIf=\"jsPlumbReady\" #container [id]=\"containerId\" class=\"container\" [ngClass]=\"viewOnly?'':'editable'\"\r\n [ngStyle]=\"{ height: viewHeight + 'px' }\" (dblclick)=\"createNewNode($event, container)\">\r\n <ng-container *ngIf=\"data.machines.length > 0\">\r\n <state *ngFor=\"let machine of data.machines\" [id]=\"containerId + '_' + machine.id\" [machine]=\"machine\"\r\n [viewOnly]=\"viewOnly\" class=\"state-node\"\r\n [ngStyle]=\"{'left': machine.location[0] + 'px', 'top': machine.location[1] + 'px'}\"\r\n [jsPlumbInstance]=\"jsPlumbInstance\" [containerId]=\"containerId\" (onEdit)=\"editNode($event)\"\r\n (onDelete)=\"deleteNode($event)\" (onReady)=\"checkStatesReadyThenRenderConnections($event)\">\r\n </state>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\"></p-contextMenu>\r\n\r\n<tn-dialog *ngIf=\"stateMetadataModel.showEditForm\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"'Th\u00F4ng tin tr\u1EA1ng th\u00E1i' | translate\" [popupSize]=\"stateMetadataModel.popupSize\"\r\n (onHide)=\"hideStateMetadataForm()\">\r\n <state-metadata #formBase [data]=\"currentState\" [location]=\"locationWhenAdd\" [machinesData]=\"data\"\r\n (onSaved)=\"handleSavedStateMetadata($event)\" (onCancel)=\"hideStateMetadataForm()\"\r\n (onRemove)=\"handleRemoveFromDialog()\">\r\n </state-metadata>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"stateMachineConnectionModel.showEditForm\" #dialog [styleClass]=\"'address-form'\"\r\n [useDefaultScrollBar]=\"true\" [header]=\"'Th\u00F4ng tin \u0111\u01B0\u1EDDng n\u1ED1i' | translate\"\r\n [popupSize]=\"stateMachineConnectionModel.popupSize\" (onHide)=\"hideConnectionForm()\">\r\n <statemachines-connection-metadata #formBase [data]=\"currentConnectionObject.connectionMetadata\"\r\n [designerContext]=\"context\" [machinesData]=\"data\" [viewOnly]=\"viewOnly\"\r\n (onSaved)=\"handleSavedConnection($event)\" (onCancel)=\"hideConnectionForm()\"\r\n (onRemove)=\"handleRemoveConnectionFromDialog()\">\r\n </statemachines-connection-metadata>\r\n</tn-dialog>",
40976
41391
  providers: [ComponentContextService],
40977
- styles: [".state-control{border:1px solid #ced4da;border-radius:3px;overflow:hidden;position:relative}.state-control .container{height:1500px;position:relative}.state-control .container .state-node{display:block;height:100px;max-height:100px;position:absolute;width:150px}.state-control .container-note{display:inline-block;font-weight:100;margin:0;padding:10px 14px;position:absolute;text-align:right;top:0;width:100%}.state-control .container-note span{background:#ffeb3b;line-height:30px;margin-right:10px;padding:5px}.state-control .container-note button{margin-right:5px}:host ::ng-deep .jtk-hover{z-index:1}:host ::ng-deep .conn-label{background:rgba(97,183,207,.30196078431372547);border:1px dashed #c5c5c5;padding:5px;z-index:2}:host ::ng-deep .conn-label:hover{background:#fff}:host ::ng-deep .conn-label.jtk-hover{background:#44a7c3;border:none;color:#fff;z-index:3}:host ::ng-deep .editable .conn-label,:host ::ng-deep .editable .jtk-connector,:host ::ng-deep .editable .jtk-endpoint,:host ::ng-deep .editable path{cursor:pointer}::ng-deep .state-control.highlight .conn-label,::ng-deep .state-control.highlight .jtk-connector,::ng-deep .state-control.highlight state{opacity:.3}::ng-deep .state-control.highlight .conn-label.--current,::ng-deep .state-control.highlight .jtk-connector.--current,::ng-deep .state-control.highlight state.--current{opacity:unset}"]
41392
+ styles: [".state-control{border:1px solid #ced4da;border-radius:3px;overflow:hidden;position:relative}.state-control .container{height:1500px;position:relative}.state-control .container .state-node{display:block;height:100px;max-height:100px;position:absolute;width:150px}.state-control .container-note{display:inline-block;font-weight:100;margin:0;padding:10px 14px;position:absolute;text-align:right;top:0;width:100%}.state-control .container-note span{background:#ffeb3b;line-height:30px;margin-right:10px;padding:5px}.state-control .container-note button{margin-right:5px}:host ::ng-deep .jtk-hover{z-index:1}:host ::ng-deep .conn-label{background:rgba(97,183,207,.30196078431372547);border:1px dashed #c5c5c5;padding:5px;z-index:2}:host ::ng-deep .conn-label:hover{background:#fff}:host ::ng-deep .conn-label.jtk-hover{background:#44a7c3;border:none;color:#fff;z-index:3}:host ::ng-deep .editable .conn-label,:host ::ng-deep .editable .jtk-connector,:host ::ng-deep .editable .jtk-endpoint,:host ::ng-deep .editable path{cursor:pointer}::ng-deep .state-control.highlight .conn-label,::ng-deep .state-control.highlight .jtk-connector,::ng-deep .state-control.highlight state{opacity:.3}::ng-deep .state-control.highlight .conn-label.--current,::ng-deep .state-control.highlight .jtk-connector.--current,::ng-deep .state-control.highlight state.--current{opacity:unset}::ng-deep .state-control.highlight .conn-label.--current{background:#44a7c3;border:none;color:#fff}"]
40978
41393
  },] }
40979
41394
  ];
40980
41395
  StateMachinesDesignerComponent.ctorParameters = function () { return [
@@ -41401,7 +41816,7 @@
41401
41816
  TnAppHelpComponent.decorators = [
41402
41817
  { type: i0.Component, args: [{
41403
41818
  selector: 'li[tn-app-help]',
41404
- template: "<a href=\"javascript:;\" tabindex=\"9\" (click)=\"showHelper()\" style=\"height: 30px;\" pTooltip=\"Tr\u1EE3 gi\u00FAp\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"topbar-icon-left\">\r\n <!-- <svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\r\n class=\"topbar-icon animated swing svgmodule\">\r\n <path fill=\"currentColor\"\r\n d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"\r\n class=\"\"></path>\r\n </svg> -->\r\n <i class=\"topbar-icon animated swing pi pi-question-circle\"></i>\r\n </span>\r\n <span class=\"topbar-item-name\">{{ \"Tr\u1EE3 gi\u00FAp\" | translate }}</span>\r\n</a>\r\n\r\n<p-sidebar [styleClass]=\"'HelperSlideBar tn-l-sidebar-wrapper'\" [(visible)]=\"display\" position=\"right\"\r\n [appendTo]=\"'body'\" [style]=\"{ width: '30em', border: 0, 'max-width': '100vw' }\">\r\n <div style=\"background-color: #fff; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.35);\">\r\n <h1 style=\"font-size: 16px; color: #212529;\">Trung t\u00E2m tr\u1EE3 gi\u00FAp</h1>\r\n </div>\r\n\r\n <div class=\"tn-l-help-wrapper\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'max-height':'calc(100vh - 50px)'}\">\r\n <div class=\"HelpCenter\">\r\n <div class=\"p-grid\" style=\"margin-top:10px; margin-bottom: 50px;\">\r\n <div class=\"p-col-8\">\r\n <p style=\"font-weight:bold;font-size: 16px;margin-bottom: 8px; margin-top:20px\">\r\n {{environment.helpConfig?.expertName}}\r\n </p>\r\n <p style=\"margin: 0px;\">\r\n <a [href]=\"hrefTelephone\"><i class=\"fas fa-phone\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{phoneNumber}}</a>\r\n </p>\r\n <p style=\"margin-top: 8px;\">\r\n <a [href]=\"hrefMail\"><i class=\"fas fa-envelope\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{mail}}</a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4\">\r\n <img src=\"/assets/images/tri-nam-group-logo.png\"\r\n style=\"width: 100%; float: right; margin-top: 25px; opacity: 0.7;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-video\" style=\"margin-top: 0px\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Xem h\u01B0\u1EDBng d\u1EABn</span>\r\n </div>\r\n <div class=\"p-col-12 help-content\">\r\n <h2 *ngIf=\"showHelperCurrentPageState\" style=\"margin-top: 0px\">\r\n <a href=\"javascript:;\" (click)=\"showHelperCurrentPage(null)\"\r\n style=\"display:inline-block; position: relative; border-top: 1px solid #52abf5;\">\r\n <img src=\"/assets/images/bgvideo.png\" alt=\"screen shot\"\r\n style=\"width:100%; filter: brightness(0.88);\" />\r\n <i class=\"fab fa-youtube fa-2x\"></i>\r\n </a>\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-download\" style=\"margin-top: 0px; margin-bottom: 40px;\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Ph\u1EA7n m\u1EC1m ti\u1EC7n \u00EDch</span>\r\n </div>\r\n <div class=\"tn-l-pmti\" style=\"border: 1px solid #ccc; width: 100%\">\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"{{environment.signalr.linkDownloadClientApp}}\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-appTN64x64.png\" />\r\n <br />TN Client\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://ultraviewer.net/vi/UltraViewer_setup_6.2_vi.exe\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/ultraviewer.ico\" />\r\n <br />Ultraviewer\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://www.teamviewer.com/vi/tai-xuong-tu-dong-teamviewer/\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-teamviewer.png\" />\r\n <br />Teamviewer\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </tn-custom-scrollbar>\r\n </div>\r\n</p-sidebar>",
41819
+ template: "<a href=\"javascript:;\" tabindex=\"9\" (click)=\"showHelper()\" style=\"height: 30px;\" pTooltip=\"Tr\u1EE3 gi\u00FAp\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"topbar-icon-left\">\r\n <!-- <svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\r\n class=\"topbar-icon animated swing svgmodule\">\r\n <path fill=\"currentColor\"\r\n d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"\r\n class=\"\"></path>\r\n </svg> -->\r\n <i class=\"topbar-icon animated swing pi pi-question-circle\"></i>\r\n </span>\r\n <span class=\"topbar-item-name\">{{ \"Tr\u1EE3 gi\u00FAp\" | translate }}</span>\r\n</a>\r\n\r\n<p-sidebar [styleClass]=\"'HelperSlideBar tn-l-sidebar-wrapper'\" [(visible)]=\"display\" position=\"right\"\r\n [appendTo]=\"'body'\" [style]=\"{ width: '30em', border: 0, 'max-width': '100vw' }\">\r\n <div style=\"background-color: #fff; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.35);\">\r\n <h1 style=\"font-size: 16px; color: #212529;\">Trung t\u00E2m tr\u1EE3 gi\u00FAp</h1>\r\n </div>\r\n\r\n <div class=\"tn-l-help-wrapper\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'max-height':'calc(100vh - 50px)'}\">\r\n <div class=\"HelpCenter\">\r\n <div class=\"p-grid\" style=\"margin-top:10px; margin-bottom: 25px;\">\r\n <div class=\"p-col-8\">\r\n <p style=\"font-weight:bold;font-size: 16px;margin-bottom: 8px; margin-top:20px\">\r\n {{environment.helpConfig?.expertName}}\r\n </p>\r\n <p style=\"margin: 0px;\">\r\n <a [href]=\"hrefTelephone\"><i class=\"fas fa-phone\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{phoneNumber}}</a>\r\n </p>\r\n <p style=\"margin-top: 8px;\">\r\n <a [href]=\"hrefMail\"><i class=\"fas fa-envelope\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{mail}}</a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4\">\r\n <img src=\"/assets/images/tri-nam-group-logo.png\"\r\n style=\"width: 100%; float: right; margin-top: 15px; opacity: 0.7;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-video\" style=\"margin-top: 0px\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Xem h\u01B0\u1EDBng d\u1EABn</span>\r\n </div>\r\n <div class=\"p-col-12 help-content\">\r\n <h2 *ngIf=\"showHelperCurrentPageState\" style=\"margin-top: 0px\">\r\n <a href=\"javascript:;\" (click)=\"showHelperCurrentPage(null)\"\r\n style=\"display:inline-block; position: relative; border-top: 1px solid #52abf5;\">\r\n <img src=\"/assets/images/bgvideo.png\" alt=\"screen shot\"\r\n style=\"width:100%; filter: brightness(0.88);\" />\r\n <i class=\"fab fa-youtube fa-2x\"></i>\r\n </a>\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-download\" style=\"margin-top: 0px; margin-bottom: 40px;\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Ph\u1EA7n m\u1EC1m ti\u1EC7n \u00EDch</span>\r\n </div>\r\n <div class=\"tn-l-pmti\" style=\"border: 1px solid #ccc; width: 100%\">\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"{{environment.signalr.linkDownloadClientApp}}\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-appTN64x64.png\" />\r\n <br />TN Client\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://ultraviewer.net/vi/UltraViewer_setup_6.2_vi.exe\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/ultraviewer.ico\" />\r\n <br />Ultraviewer\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://www.teamviewer.com/vi/tai-xuong-tu-dong-teamviewer/\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-teamviewer.png\" />\r\n <br />Teamviewer\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </tn-custom-scrollbar>\r\n </div>\r\n</p-sidebar>",
41405
41820
  providers: [ComponentContextService],
41406
41821
  styles: [".HelpCenter{color:#555;padding:0 20px}::ng-deep .tn-l-sidebar-wrapper{padding:0}.tn-l-pmti{display:flex}.HelpCenter p:first-child img{margin-bottom:10px}::ng-deep .HelperSlideBar .p-sidebar-content>button{color:#212529;cursor:pointer;font-size:20px;margin-right:14px;margin-top:10px}::ng-deep .ui-sidebar{padding:0}::ng-deep .HelperSlideBar h1{height:50px;line-height:50px;margin:0;padding-left:20px;text-transform:uppercase}.HelpCenter-video{position:relative}.HelpCenter-video i{color:#454545;cursor:pointer;left:50%;opacity:.5;position:absolute;top:calc(50% - 10px);transform:translateX(-50%) translateY(-50%);transition:.5s}.HelpCenter-video video{opacity:1}.HelpCenter-video:hover video{cursor:pointer;opacity:.5}.HelpCenter-video:hover i{opacity:1}.HelpCenter-download img{height:45px;width:45px}.HelpCenter .help-title{background-color:rgba(49,146,225,.8784313725490196);color:#fff}.HelpCenter .help-title .tit-name{font-size:14px;font-weight:700}.HelpCenter .help-content{padding:0}.HelpCenter .HelpCenter-comment .help-content{padding:0;text-align:center}.HelpCenter-comment,.HelpCenter-download,.HelpCenter-video{margin-bottom:15px}.tn-l-help-wrapper{display:flex;max-height:calc(100vh - 60px);overflow:auto}"]
41407
41822
  },] }
@@ -42216,7 +42631,7 @@
42216
42631
  };
42217
42632
  TnAppNotificationComponent.prototype.handleClicked = function () {
42218
42633
  var domain = this.environment.clientDomain.thongbaoDomain;
42219
- this._router.navigate([domain + "/thongbao-chuadoc"]);
42634
+ window.open(domain + "/thongbao-chuadoc");
42220
42635
  };
42221
42636
  return TnAppNotificationComponent;
42222
42637
  }(ComponentBase));
@@ -43502,10 +43917,11 @@
43502
43917
 
43503
43918
  var UserPickerComponent = /** @class */ (function (_super) {
43504
43919
  __extends(UserPickerComponent, _super);
43505
- function UserPickerComponent(_injector, _userV5Service, _translateService) {
43920
+ function UserPickerComponent(_injector, _userV5Service, _translateService, _dm_ChucVuService) {
43506
43921
  var _this = _super.call(this, _injector) || this;
43507
43922
  _this._userV5Service = _userV5Service;
43508
43923
  _this._translateService = _translateService;
43924
+ _this._dm_ChucVuService = _dm_ChucVuService;
43509
43925
  _this.popupSize = new PopupSize({
43510
43926
  width: 1100,
43511
43927
  height: 900,
@@ -43529,6 +43945,8 @@
43529
43945
  _this.dirty = false;
43530
43946
  _this.tooltip = '';
43531
43947
  _this.hasValue = false;
43948
+ _this.searchSchema = {};
43949
+ _this.searchData = {};
43532
43950
  return _this;
43533
43951
  }
43534
43952
  UserPickerComponent.prototype.ngOnInit = function () {
@@ -43560,6 +43978,21 @@
43560
43978
  code: 'email',
43561
43979
  dataType: 'string',
43562
43980
  fullTextSearch: true
43981
+ }),
43982
+ new EntityPickerColumn({
43983
+ label: 'Chức vụ',
43984
+ code: 'lstTenChucVu',
43985
+ templateFilter: this.filterChucVuRef,
43986
+ }),
43987
+ new EntityPickerColumn({
43988
+ label: 'Giảng viên',
43989
+ code: 'isGiangVien',
43990
+ dataType: 'boolean'
43991
+ }),
43992
+ new EntityPickerColumn({
43993
+ label: 'Chuyên viên',
43994
+ code: 'isChuyenVien',
43995
+ dataType: 'boolean'
43563
43996
  })
43564
43997
  ], mdWidth: 12 }));
43565
43998
  this.fieldSearchText = __spread(this.controlPicker.fieldSearchText);
@@ -43580,8 +44013,24 @@
43580
44013
  this.funcReturnValue = function (value) { return value; };
43581
44014
  this.buildFilterKeyword();
43582
44015
  this.buildSettingEntityPicker();
44016
+ this.createSchemaSearch();
43583
44017
  this.onReady.emit();
43584
44018
  };
44019
+ UserPickerComponent.prototype.createSchemaSearch = function () {
44020
+ return __awaiter(this, void 0, void 0, function () {
44021
+ return __generator(this, function (_a) {
44022
+ this.searchSchema.idChucVus = new DropdownControlSchema({
44023
+ field: 'idChucVus',
44024
+ multiple: true,
44025
+ placeholder: 'Chọn chức vụ',
44026
+ baseService: this._dm_ChucVuService,
44027
+ sortField: 'soThuTu',
44028
+ loadOnInit: true
44029
+ });
44030
+ return [2 /*return*/];
44031
+ });
44032
+ });
44033
+ };
43585
44034
  UserPickerComponent.prototype.buildFilterKeyword = function () {
43586
44035
  var _this = this;
43587
44036
  if (this.fieldSearchText.length == 1) {
@@ -43682,7 +44131,8 @@
43682
44131
  };
43683
44132
  UserPickerComponent.prototype.getData = function (keyWord) {
43684
44133
  return __awaiter(this, void 0, void 0, function () {
43685
- var filters, dataSource;
44134
+ var filters, filterOrs_1, dataSource;
44135
+ var _this = this;
43686
44136
  return __generator(this, function (_a) {
43687
44137
  switch (_a.label) {
43688
44138
  case 0:
@@ -43697,6 +44147,13 @@
43697
44147
  filters.push(this.newFilter(this.controlPicker.valueField, exports.Operator.notEqual, this.value));
43698
44148
  }
43699
44149
  }
44150
+ if (this.searchData.idChucVus && this.searchData.idChucVus.length > 0) {
44151
+ filterOrs_1 = [];
44152
+ this.searchData.idChucVus.forEach(function (idChucVu) {
44153
+ filterOrs_1.push(_this.newFilter('IdsChucVu', exports.Operator.contain, idChucVu));
44154
+ });
44155
+ filters.push(this.newFilterContainer.apply(this, __spread(['or'], filterOrs_1)));
44156
+ }
43700
44157
  return [4 /*yield*/, appendDefaultFilter(filters, this.control.defaultFilters)];
43701
44158
  case 1:
43702
44159
  _a.sent();
@@ -44007,7 +44464,7 @@
44007
44464
  UserPickerComponent.decorators = [
44008
44465
  { type: i0.Component, args: [{
44009
44466
  selector: 'user-picker',
44010
- template: "<div class=\"p-inputgroup user-picker\" [class.multiple]=\"multiple\" [class.hasValue]=\"hasValue\">\r\n <div style=\"width: calc(100% - 28px)\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\">\r\n <p-autoComplete emptyMessage=\"Kh\u00F4ng c\u00F3 k\u1EBFt qu\u1EA3 n\u00E0o\" [ngClass]=\"'custom-autocomplete'\" [disabled]=\"disabled\"\r\n [placeholder]=\"control.placeholder\" [appendTo]=\"control.appendTo\" [suggestions]=\"results\" field=\"label\"\r\n [styleClass]=\"control.validators && control.required ? 'rq' : ''\" [multiple]=\"control.multiple\"\r\n [minLength]=\"2\" [(ngModel)]=\"selectedValueObject\" (onFocus)=\"handleFocus($event)\"\r\n (onBlur)=\"handleBlur($event)\" (completeMethod)=\"search($event)\" (onKeyUp)=\"handleKeyUp($event)\"\r\n (onSelect)=\"handleSelect($event)\" (onUnselect)=\"handleUnSelect($event)\">\r\n </p-autoComplete>\r\n </div>\r\n <span *ngIf=\"!control.multiple && !disabled && hasValue\" class=\"icon-clear\" (click)=\"clearValue()\"><i\r\n class=\"fas fa-times\"></i></span>\r\n <button class=\"custom-autocomplete-button\" [disabled]=\"disabled\" tabindex=\"-1\" (click)=\"showPickForm()\" pButton\r\n [pTooltip]=\"control.title\" icon=\"fas fa-external-link-alt\" type=\"button\"></button>\r\n</div>\r\n<tn-dialog #dialog *ngIf=\"showFormPicker\" styleClass=\"user-picker-box-dialog no-padding\" [useDefaultScrollBar]=\"true\"\r\n [header]=\"control.title | translate\" [popupSize]=\"popupSize\" (onHide)=\"handleHide($event)\">\r\n <user-picker-box #userPickerBox [controlSetting]=\"control\" [control]=\"controlPicker\" [parentSetting]=\"settingPicker\"\r\n [advanceData]=\"advanceDataPicker\" [selectedValue]=\"selectedValue\" (onChanged)=\"handleChangeEntity($event)\"\r\n (onSelect)=\"handleSelectEntity($event)\" (onUnSelect)=\"handleUnSelectEntity($event)\"\r\n (onDone)=\"handleHide($event)\" (onRowSelect)=\"handleRowSelect($event)\">\r\n </user-picker-box>\r\n <ng-template #footer>\r\n <button type=\" button\" pButton class=\"p-button-text\" (click)=\"onClickSubmitButton($event, userPickerBox)\"\r\n [label]=\"'Ho\u00E0n th\u00E0nh'\" icon=\"pi pi-check\"></button>\r\n </ng-template>\r\n</tn-dialog>",
44467
+ template: "<div class=\"p-inputgroup user-picker\" [class.multiple]=\"multiple\" [class.hasValue]=\"hasValue\">\r\n <div style=\"width: calc(100% - 28px)\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\">\r\n <p-autoComplete emptyMessage=\"Kh\u00F4ng c\u00F3 k\u1EBFt qu\u1EA3 n\u00E0o\" [ngClass]=\"'custom-autocomplete'\" [disabled]=\"disabled\"\r\n [placeholder]=\"control.placeholder\" [appendTo]=\"control.appendTo\" [suggestions]=\"results\" field=\"label\"\r\n [styleClass]=\"control.validators && control.required ? 'rq' : ''\" [multiple]=\"control.multiple\"\r\n [minLength]=\"2\" [(ngModel)]=\"selectedValueObject\" (onFocus)=\"handleFocus($event)\"\r\n (onBlur)=\"handleBlur($event)\" (completeMethod)=\"search($event)\" (onKeyUp)=\"handleKeyUp($event)\"\r\n (onSelect)=\"handleSelect($event)\" (onUnselect)=\"handleUnSelect($event)\">\r\n </p-autoComplete>\r\n </div>\r\n <span *ngIf=\"!control.multiple && !disabled && hasValue\" class=\"icon-clear\" (click)=\"clearValue()\"><i\r\n class=\"fas fa-times\"></i></span>\r\n <button class=\"custom-autocomplete-button\" [disabled]=\"disabled\" tabindex=\"-1\" (click)=\"showPickForm()\" pButton\r\n [pTooltip]=\"control.title\" icon=\"fas fa-external-link-alt\" type=\"button\"></button>\r\n</div>\r\n<tn-dialog #dialog *ngIf=\"showFormPicker\" styleClass=\"user-picker-box-dialog no-padding\" [useDefaultScrollBar]=\"true\"\r\n [header]=\"control.title | translate\" [popupSize]=\"popupSize\" (onHide)=\"handleHide($event)\">\r\n <user-picker-box #userPickerBox [controlSetting]=\"control\" [control]=\"controlPicker\" [parentSetting]=\"settingPicker\"\r\n [advanceData]=\"advanceDataPicker\" [selectedValue]=\"selectedValue\" (onChanged)=\"handleChangeEntity($event)\"\r\n (onSelect)=\"handleSelectEntity($event)\" (onUnSelect)=\"handleUnSelectEntity($event)\"\r\n (onDone)=\"handleHide($event)\" (onRowSelect)=\"handleRowSelect($event)\">\r\n </user-picker-box>\r\n <ng-template #footer>\r\n <button type=\" button\" pButton class=\"p-button-text\" (click)=\"onClickSubmitButton($event, userPickerBox)\"\r\n [label]=\"'Ho\u00E0n th\u00E0nh'\" icon=\"pi pi-check\"></button>\r\n </ng-template>\r\n</tn-dialog>\r\n\r\n<ng-template #filterChucVuRef let-col=\"col\" let-filterData=\"filterData\" let-onSearch=\"onSearch\"\r\n let-onShowFilterDropdownPanel=\"onShowFilterDropdownPanel\" let-onHideFilterDropdownPanel=\"onHideFilterDropdownPanel\">\r\n <dropdown [control]=\"searchSchema.idChucVus\" [(value)]=\"searchData.idChucVus\" (onHideSmartEvent)=\"onSearch()\"\r\n (onShow)=\"onShowFilterDropdownPanel($event)\" (onHideSmartEvent)=\"onHideFilterDropdownPanel($event)\">\r\n </dropdown>\r\n</ng-template>",
44011
44468
  providers: [
44012
44469
  {
44013
44470
  provide: forms.NG_VALUE_ACCESSOR,
@@ -44022,9 +44479,11 @@
44022
44479
  UserPickerComponent.ctorParameters = function () { return [
44023
44480
  { type: i0.Injector },
44024
44481
  { type: UserV5Service },
44025
- { type: i2.TranslateService }
44482
+ { type: i2.TranslateService },
44483
+ { type: DmChucVuService }
44026
44484
  ]; };
44027
44485
  UserPickerComponent.propDecorators = {
44486
+ filterChucVuRef: [{ type: i0.ViewChild, args: ['filterChucVuRef', { static: true },] }],
44028
44487
  control: [{ type: i0.Input }],
44029
44488
  popupSize: [{ type: i0.Input }],
44030
44489
  multiple: [{ type: i0.Input }],
@@ -45045,10 +45504,6 @@
45045
45504
  }());
45046
45505
  var WorkflowTargetDefaultValue = /** @class */ (function () {
45047
45506
  function WorkflowTargetDefaultValue() {
45048
- this.dicDefaultValue = {};
45049
- this.dicDefaultValueByWorkflow = {};
45050
- this.dicByTargetCanEdit = {};
45051
- this.dicByTargetOnlyView = {};
45052
45507
  }
45053
45508
  return WorkflowTargetDefaultValue;
45054
45509
  }());
@@ -45110,22 +45565,21 @@
45110
45565
  return __awaiter(this, void 0, void 0, function () {
45111
45566
  var nextMachine;
45112
45567
  var _this = this;
45113
- return __generator(this, function (_a) {
45114
- switch (_a.label) {
45568
+ return __generator(this, function (_g) {
45569
+ switch (_g.label) {
45115
45570
  case 0:
45116
45571
  nextMachine = this.workflow.data.machines.find(function (q) { return q.id == _this.action.target; });
45117
45572
  this.isActionKetThuc = nextMachine.type == exports.EnumStateType.STOP;
45118
45573
  if (this.isActionKetThuc) {
45119
45574
  this.mainTabData[1].active = true;
45120
45575
  }
45121
- if (!this.checkNeedGetUser()) return [3 /*break*/, 2];
45122
45576
  return [4 /*yield*/, this.getUserForProcessWorkflow()];
45123
45577
  case 1:
45124
- if (!(_a.sent())) {
45578
+ // if (this.checkNeedGetUser()) {
45579
+ if (!(_g.sent())) {
45125
45580
  return [2 /*return*/];
45126
45581
  }
45127
- _a.label = 2;
45128
- case 2:
45582
+ // }
45129
45583
  this.setDataAndTriggerReady();
45130
45584
  return [2 /*return*/];
45131
45585
  }
@@ -45133,7 +45587,7 @@
45133
45587
  });
45134
45588
  };
45135
45589
  ProcessWorkflowFormComponent.prototype.checkNeedGetUser = function () {
45136
- var e_1, _a;
45590
+ var e_1, _g;
45137
45591
  this.ruleUsers = [];
45138
45592
  if (!this.action.data.infoReceiver || !this.action.data.infoReceiver.length)
45139
45593
  return false;
@@ -45141,8 +45595,8 @@
45141
45595
  this.action.data.infoReceiver[0].lanThu = 1;
45142
45596
  }
45143
45597
  try {
45144
- for (var _b = __values(this.action.data.infoReceiver), _c = _b.next(); !_c.done; _c = _b.next()) {
45145
- var infoReceiver = _c.value;
45598
+ for (var _h = __values(this.action.data.infoReceiver), _j = _h.next(); !_j.done; _j = _h.next()) {
45599
+ var infoReceiver = _j.value;
45146
45600
  if (this.checkNeedGetUserByUserData(infoReceiver.user)) {
45147
45601
  return true;
45148
45602
  }
@@ -45154,7 +45608,7 @@
45154
45608
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
45155
45609
  finally {
45156
45610
  try {
45157
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
45611
+ if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
45158
45612
  }
45159
45613
  finally { if (e_1) throw e_1.error; }
45160
45614
  }
@@ -45164,35 +45618,26 @@
45164
45618
  return __awaiter(this, void 0, void 0, function () {
45165
45619
  var sourceMachine, resultGetUserInProcessForm, dataUserInProcessForm;
45166
45620
  var _this = this;
45167
- return __generator(this, function (_a) {
45168
- switch (_a.label) {
45621
+ return __generator(this, function (_g) {
45622
+ switch (_g.label) {
45169
45623
  case 0:
45170
45624
  sourceMachine = this.workflow.data.machines.find(function (q) { return q.id == _this.action.source; });
45171
- return [4 /*yield*/, this._stateMachinesService.getUserInProcessForm(this.workflow.code, sourceMachine.code, this.action.code, this.item.id)];
45625
+ return [4 /*yield*/, this.businessSetting.baseService.getUserInProcessForm(this.workflow.code, sourceMachine.code, this.action.code, this.item.id)];
45172
45626
  case 1:
45173
- resultGetUserInProcessForm = _a.sent();
45627
+ resultGetUserInProcessForm = _g.sent();
45174
45628
  if (!resultGetUserInProcessForm.success) {
45175
45629
  this.handleResponse(resultGetUserInProcessForm);
45176
45630
  return [2 /*return*/, false];
45177
45631
  }
45178
45632
  dataUserInProcessForm = resultGetUserInProcessForm.data;
45179
- if (dataUserInProcessForm.dicByRuleType) {
45180
- Object.keys(dataUserInProcessForm.dicByRuleType).forEach(function (key) {
45181
- _this.initValueForTargetForm.dicDefaultValue[key] = dataUserInProcessForm.dicByRuleType[key];
45182
- });
45183
- }
45184
- if (dataUserInProcessForm.dicByAction) {
45185
- Object.keys(dataUserInProcessForm.dicByAction).forEach(function (key) {
45186
- _this.initValueForTargetForm.dicDefaultValueByWorkflow[key.toUpperCase()] = dataUserInProcessForm.dicByAction[key];
45187
- });
45188
- }
45189
- if (dataUserInProcessForm.dicByTargetCanEdit) {
45190
- this.initValueForTargetForm.dicByTargetCanEdit = dataUserInProcessForm.dicByTargetCanEdit;
45191
- }
45192
- if (dataUserInProcessForm.dicByTargetOnlyView) {
45193
- this.initValueForTargetForm.dicByTargetOnlyView = dataUserInProcessForm.dicByTargetOnlyView;
45194
- }
45195
- this.infoReceiver = dataUserInProcessForm.infoReceiver;
45633
+ this.initValueForTargetForm.lstUserId = dataUserInProcessForm.lstUserId;
45634
+ this.initValueForTargetForm.lstUserViewId = dataUserInProcessForm.lstUserViewId;
45635
+ this.initValueForTargetForm.lstDonViId = dataUserInProcessForm.lstDonViId;
45636
+ this.initValueForTargetForm.lstDonViViewId = dataUserInProcessForm.lstDonViViewId;
45637
+ this.initValueForTargetForm.lstGroupId = dataUserInProcessForm.lstGroupId;
45638
+ this.initValueForTargetForm.lstGroupViewId = dataUserInProcessForm.lstGroupViewId;
45639
+ this.initValueForTargetForm.lstRoleId = dataUserInProcessForm.lstRoleId;
45640
+ this.initValueForTargetForm.lstRoleViewId = dataUserInProcessForm.lstRoleViewId;
45196
45641
  return [2 /*return*/, true];
45197
45642
  }
45198
45643
  });
@@ -45207,39 +45652,45 @@
45207
45652
  return false;
45208
45653
  };
45209
45654
  ProcessWorkflowFormComponent.prototype.setDataAndTriggerReady = function () {
45655
+ var _a, _b, _c, _d, _e, _f;
45210
45656
  this.dataAllowEdit = {
45211
45657
  rules: [],
45212
45658
  userIds: [],
45213
45659
  ruleInWorkflows: [],
45214
- departmentIds: this.action.data.departmentIds,
45215
- groupIds: this.action.data.groupIds,
45216
- roleIds: this.action.data.roleIds
45660
+ departmentIds: (_a = this.action.data.departmentIds) !== null && _a !== void 0 ? _a : [],
45661
+ groupIds: (_b = this.action.data.groupIds) !== null && _b !== void 0 ? _b : [],
45662
+ roleIds: (_c = this.action.data.roleIds) !== null && _c !== void 0 ? _c : []
45217
45663
  };
45218
45664
  this.dataOnlyView = {
45219
45665
  rules: [],
45220
45666
  userIds: [],
45221
45667
  ruleInWorkflows: [],
45222
- departmentIds: this.action.data.departmentViewIds,
45223
- groupIds: this.action.data.groupViewIds,
45224
- roleIds: this.action.data.roleViewIds
45668
+ departmentIds: (_d = this.action.data.departmentViewIds) !== null && _d !== void 0 ? _d : [],
45669
+ groupIds: (_e = this.action.data.groupViewIds) !== null && _e !== void 0 ? _e : [],
45670
+ roleIds: (_f = this.action.data.roleViewIds) !== null && _f !== void 0 ? _f : []
45225
45671
  };
45226
- if (this.infoReceiver) {
45227
- if (this.infoReceiver.user) {
45228
- this.dataAllowEdit.userIds = this.infoReceiver.user.ids;
45229
- this.dataAllowEdit.rules = this.infoReceiver.user.rules;
45230
- this.dataAllowEdit.ruleInWorkflows = this.infoReceiver.user.ruleInWorkflows;
45231
- }
45232
- if (this.infoReceiver.userView) {
45233
- this.dataOnlyView.userIds = this.infoReceiver.userView.ids;
45234
- this.dataOnlyView.rules = this.infoReceiver.userView.rules;
45235
- this.dataOnlyView.ruleInWorkflows = this.infoReceiver.userView.ruleInWorkflows;
45236
- }
45237
- }
45672
+ this.addDistinct(this.dataAllowEdit.userIds, this.initValueForTargetForm.lstUserId);
45673
+ this.addDistinct(this.dataAllowEdit.departmentIds, this.initValueForTargetForm.lstDonViId);
45674
+ this.addDistinct(this.dataAllowEdit.groupIds, this.initValueForTargetForm.lstGroupId);
45675
+ this.addDistinct(this.dataAllowEdit.roleIds, this.initValueForTargetForm.lstRoleId);
45676
+ this.addDistinct(this.dataOnlyView.userIds, this.initValueForTargetForm.lstUserViewId);
45677
+ this.addDistinct(this.dataOnlyView.departmentIds, this.initValueForTargetForm.lstDonViViewId);
45678
+ this.addDistinct(this.dataOnlyView.groupIds, this.initValueForTargetForm.lstGroupViewId);
45679
+ this.addDistinct(this.dataOnlyView.roleIds, this.initValueForTargetForm.lstRoleViewId);
45238
45680
  this.formReady = true;
45239
45681
  };
45682
+ ProcessWorkflowFormComponent.prototype.addDistinct = function (dest, source) {
45683
+ if (!source || !source.length)
45684
+ return;
45685
+ source.forEach(function (item) {
45686
+ if (dest.indexOf(item) == -1) {
45687
+ dest.push(item);
45688
+ }
45689
+ });
45690
+ };
45240
45691
  ProcessWorkflowFormComponent.prototype.onFormInitialized = function (evt) {
45241
45692
  return __awaiter(this, void 0, void 0, function () {
45242
- return __generator(this, function (_a) {
45693
+ return __generator(this, function (_g) {
45243
45694
  evt.model.id = this._commonService.guid();
45244
45695
  return [2 /*return*/];
45245
45696
  });
@@ -45247,7 +45698,7 @@
45247
45698
  };
45248
45699
  ProcessWorkflowFormComponent.prototype.validateForm = function () {
45249
45700
  return __awaiter(this, void 0, void 0, function () {
45250
- return __generator(this, function (_a) {
45701
+ return __generator(this, function (_g) {
45251
45702
  this.model.data.userIds = this.formTargetAllowEdit.model.data.userIds;
45252
45703
  this.model.data.departmentIds = this.formTargetAllowEdit.model.data.departmentIds;
45253
45704
  this.model.data.groupIds = this.formTargetAllowEdit.model.data.groupIds;
@@ -45261,7 +45712,7 @@
45261
45712
  && this.isEmptyArray(this.model.data.departmentIds)
45262
45713
  && this.isEmptyArray(this.model.data.groupIds)
45263
45714
  && this.isEmptyArray(this.model.data.roleIds)) {
45264
- this._notifierService.showWarning('Phải chọn ít nhất 1 nhóm đối tượng nhận (Cán bộ | Đơn vị | Nhóm người dùng | Vai trò)');
45715
+ this._notifierService.showWarning('Phải chọn ít nhất 1 nhóm đối tượng nhận (Cán bộ | Đơn vị | Nhóm người dùng | Chức vụ)');
45265
45716
  return [2 /*return*/, false];
45266
45717
  }
45267
45718
  }
@@ -45341,13 +45792,13 @@
45341
45792
 
45342
45793
  var ProcessWorkflowTargetComponent = /** @class */ (function (_super) {
45343
45794
  __extends(ProcessWorkflowTargetComponent, _super);
45344
- function ProcessWorkflowTargetComponent(_injector, _stateMachinesService, _coCauToChucService, _userGroupService, _roleService) {
45795
+ function ProcessWorkflowTargetComponent(_injector, _stateMachinesService, _coCauToChucService, _userGroupService, _dmChucVuService) {
45345
45796
  var _this = _super.call(this, _injector) || this;
45346
45797
  _this._injector = _injector;
45347
45798
  _this._stateMachinesService = _stateMachinesService;
45348
45799
  _this._coCauToChucService = _coCauToChucService;
45349
45800
  _this._userGroupService = _userGroupService;
45350
- _this._roleService = _roleService;
45801
+ _this._dmChucVuService = _dmChucVuService;
45351
45802
  return _this;
45352
45803
  }
45353
45804
  ProcessWorkflowTargetComponent.prototype.ngOnInit = function () {
@@ -45373,41 +45824,8 @@
45373
45824
  // this.createUserPickerControl('idCapTrenGanNhats', 'Cán bộ cấp trên gần nhất'),
45374
45825
  this._createCoCauToChucControl('departmentIds', 'Đơn vị'),
45375
45826
  this._createUserGroupPickerControl('groupIds', 'Nhóm người dùng'),
45376
- this._createRolePickerControl('roleIds', 'Vai trò')
45827
+ this._createRolePickerControl('roleIds', 'Chức vụ')
45377
45828
  ];
45378
- // Ghép thêm các user theo rule vào userIds
45379
- this.addUserIdFromDicByRule(this.initValue.dicDefaultValue, this.data.rules);
45380
- // Ghép thêm các user theo rule in workflow vào userIds
45381
- this.addUserIdFromDicByRule(this.initValue.dicDefaultValueByWorkflow, this.data.ruleInWorkflows);
45382
- // Ghép thêm các value từ dicByTargetType vào các control
45383
- if (this.data.rules.some(function (q) { return q == exports.EnumUserRule.NGUOI_NHAN; })) {
45384
- this.addValueFromDicByTarget(this.initValue.dicByTargetCanEdit);
45385
- }
45386
- // Ghép thêm các value từ dicByTargetType vào các control
45387
- if (this.data.rules.some(function (q) { return q == exports.EnumUserRule.NGUOI_THEO_DOI; })) {
45388
- this.addValueFromDicByTarget(this.initValue.dicByTargetOnlyView);
45389
- }
45390
- };
45391
- ProcessWorkflowTargetComponent.prototype.addUserIdFromDicByRule = function (dicSource, rules) {
45392
- var _this = this;
45393
- Object.keys(dicSource)
45394
- .filter(function (x) { return rules.some(function (q) { return q == x; }); })
45395
- .forEach(function (rule) {
45396
- _this.addDistinctToList(_this.data.userIds, dicSource[rule]);
45397
- });
45398
- };
45399
- ProcessWorkflowTargetComponent.prototype.addValueFromDicByTarget = function (dicByTargetType) {
45400
- this.addDistinctToList(this.data.userIds, dicByTargetType[exports.EnumTargetType.USER]);
45401
- this.addDistinctToList(this.data.departmentIds, dicByTargetType[exports.EnumTargetType.DEPARTMENT]);
45402
- this.addDistinctToList(this.data.groupIds, dicByTargetType[exports.EnumTargetType.GROUP]);
45403
- this.addDistinctToList(this.data.roleIds, dicByTargetType[exports.EnumTargetType.ROLE]);
45404
- };
45405
- ProcessWorkflowTargetComponent.prototype.addDistinctToList = function (lstDest, lstSource) {
45406
- lstSource.forEach(function (item) {
45407
- if (!lstDest.some(function (q) { return q == item; })) {
45408
- lstDest.push(item);
45409
- }
45410
- });
45411
45829
  };
45412
45830
  ProcessWorkflowTargetComponent.prototype._createUserPickerControl = function (field, label, multiple) {
45413
45831
  if (multiple === void 0) { multiple = true; }
@@ -45423,7 +45841,7 @@
45423
45841
  return createUserGroupPickerControl(this._userGroupService, field, label);
45424
45842
  };
45425
45843
  ProcessWorkflowTargetComponent.prototype._createRolePickerControl = function (field, label) {
45426
- return createRolePickerControl(this._roleService, field, label);
45844
+ return createRolePickerControl(this._dmChucVuService, field, label);
45427
45845
  };
45428
45846
  ProcessWorkflowTargetComponent.prototype.onFormInitialized = function (evt) {
45429
45847
  return __awaiter(this, void 0, void 0, function () {
@@ -45450,7 +45868,7 @@
45450
45868
  { type: StateMachinesService },
45451
45869
  { type: CoCauToChucService },
45452
45870
  { type: UserGroupRealService },
45453
- { type: RoleService }
45871
+ { type: DmChucVuService }
45454
45872
  ]; };
45455
45873
  ProcessWorkflowTargetComponent.propDecorators = {
45456
45874
  data: [{ type: i0.Input }],
@@ -45814,29 +46232,30 @@
45814
46232
  _this._fileControls.forEach(function (control) {
45815
46233
  key = control.serviceCode + "/" + control.entity + "/" + control._entityKey;
45816
46234
  if (dataFile[key]) {
45817
- control.setDatasource(dataFile[key]);
46235
+ control.setRootFolderId(dataFile[key].folderId);
46236
+ control.setDatasource(dataFile[key].lstFile);
45818
46237
  }
45819
46238
  });
45820
46239
  }); });
45821
46240
  };
45822
46241
  FileDataService.prototype.processDatasourceFile = function (fileData) {
46242
+ var _this = this;
45823
46243
  if (fileData === void 0) { fileData = []; }
45824
- var dic = {};
45825
- var key = '';
45826
- fileData.forEach(function (file) {
45827
- key = file.serviceCode + "/" + file.entity + "/" + file.entityKey;
45828
- // Nếu hết file của 1 control
45829
- if (!dic[key]) {
45830
- dic[key] = [];
45831
- }
45832
- dic[key].push(file);
45833
- });
45834
- Object.keys(dic).forEach(function (key) {
45835
- dic[key].sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
46244
+ var result = {};
46245
+ Object.keys(fileData).forEach(function (key) {
46246
+ fileData[key].lstFile.sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
45836
46247
  { name: 'name', primer: function (a) { return a.toLowerCase(); } } // Order theo tên (nhưng phải toLower vì T < b < t)
45837
46248
  ));
46249
+ var data = fileData[key];
46250
+ result[_this.generateKey(data.serviceCode, data.entity, data.entityKey)] = {
46251
+ folderId: key,
46252
+ lstFile: fileData[key].lstFile
46253
+ };
45838
46254
  });
45839
- return dic;
46255
+ return result;
46256
+ };
46257
+ FileDataService.prototype.generateKey = function (serviceCode, entity, entityKey) {
46258
+ return serviceCode + "/" + entity + "/" + entityKey;
45840
46259
  };
45841
46260
  return FileDataService;
45842
46261
  }());
@@ -45852,13 +46271,13 @@
45852
46271
 
45853
46272
  var WorkflowHistoryNewComponent = /** @class */ (function (_super) {
45854
46273
  __extends(WorkflowHistoryNewComponent, _super);
45855
- function WorkflowHistoryNewComponent(_injector, _workflowHistoryService, _coCauToChucService, _userGroupService, _roleService, _fileDataService) {
46274
+ function WorkflowHistoryNewComponent(_injector, _workflowHistoryService, _coCauToChucService, _userGroupService, _dmChucVuService, _fileDataService) {
45856
46275
  var _this = _super.call(this, _injector) || this;
45857
46276
  _this._injector = _injector;
45858
46277
  _this._workflowHistoryService = _workflowHistoryService;
45859
46278
  _this._coCauToChucService = _coCauToChucService;
45860
46279
  _this._userGroupService = _userGroupService;
45861
- _this._roleService = _roleService;
46280
+ _this._dmChucVuService = _dmChucVuService;
45862
46281
  // Là form lịch sử của task nhưng mở từ giao diện của đối tượng mà task gắn vào
45863
46282
  // Ở form này thì chỉ xem lịch sử chứ k dc làm gì hết
45864
46283
  _this.isRelativeForm = false;
@@ -45921,8 +46340,8 @@
45921
46340
  new ModelSchema({ field: 'donViViewIds', name: 'Đơn vị theo dõi', fullName: 'Đơn vị theo dõi', description: '' }),
45922
46341
  new ModelSchema({ field: 'groupIds', name: 'Nhóm người dùng nhận', fullName: 'Nhóm người dùng nhận', description: '' }),
45923
46342
  new ModelSchema({ field: 'groupViewIds', name: 'Nhóm người dùng theo dõi', fullName: 'Nhóm người dùng theo dõi', description: '' }),
45924
- new ModelSchema({ field: 'roleIds', name: 'Vai trò nhận', fullName: 'Vai trò nhận', description: '' }),
45925
- new ModelSchema({ field: 'roleViewIds', name: 'Vai trò theo dõi', fullName: 'Vai trò theo dõi', description: '' }),
46343
+ new ModelSchema({ field: 'roleIds', name: 'Chức vụ nhận', fullName: 'Chức vụ nhận', description: '' }),
46344
+ new ModelSchema({ field: 'roleViewIds', name: 'Chức vụ theo dõi', fullName: 'Chức vụ theo dõi', description: '' }),
45926
46345
  new ModelSchema({ field: 'note', name: 'Ý kiến', fullName: 'Ý kiến', description: '' })
45927
46346
  ];
45928
46347
  this.setting.cols = [
@@ -45994,8 +46413,7 @@
45994
46413
  new ColumnSchemaBase({
45995
46414
  field: 'roleIds',
45996
46415
  width: '15%',
45997
- baseService: this._roleService,
45998
- displayField: 'name',
46416
+ baseService: this._dmChucVuService,
45999
46417
  multiple: true,
46000
46418
  visible: false,
46001
46419
  forceGetData: true
@@ -46003,8 +46421,7 @@
46003
46421
  new ColumnSchemaBase({
46004
46422
  field: 'roleViewIds',
46005
46423
  width: '15%',
46006
- baseService: this._roleService,
46007
- displayField: 'name',
46424
+ baseService: this._dmChucVuService,
46008
46425
  multiple: true,
46009
46426
  visible: false,
46010
46427
  forceGetData: true
@@ -46221,7 +46638,7 @@
46221
46638
  WorkflowHistoryNewComponent.decorators = [
46222
46639
  { type: i0.Component, args: [{
46223
46640
  selector: 'workflow-history-new',
46224
- template: "<div style=\"height: 100%\">\r\n <as-split direction=\"vertical\">\r\n <as-split-area [size]=\"40\">\r\n <div class=\"state-designer-container\">\r\n <div>\r\n S\u01A1 \u0111\u1ED3 quy tr\u00ECnh\r\n </div>\r\n <div>\r\n <tn-custom-scrollbar>\r\n <statemachines-designer [data]=\"machinesData\" [currentConnection]=\"currentConnection\"\r\n [viewOnly]=\"true\" [useScrollBar]=\"false\">\r\n </statemachines-designer>\r\n <after-view-checked (loaded)=\"setMachinesAndConnection()\"></after-view-checked>\r\n </tn-custom-scrollbar>\r\n </div>\r\n </div>\r\n </as-split-area>\r\n <as-split-area [size]=\"60\">\r\n <div style=\"height: 100%\">\r\n <crud-list *ngIf=\"model.ready\" #crudList [model]=\"model\" [setting]=\"setting\"\r\n [dataSource]=\"model.dataSource\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_handleReloaded($event)\"\r\n (onRowSelect)=\"handleRowSelect($event)\">\r\n <ng-template #note let-rowData=\"rowData\">\r\n <div *ngIf=\"rowData.note==null?'':rowData.note\" [innerHTML]=\"rowData.note | safeHtml\"></div>\r\n </ng-template>\r\n <ng-template #receiver let-rowData=\"rowData\">\r\n <div *ngIf=\"!rowData.notInMainThread\" class=\"container-receiver\">\r\n <div *ngIf=\"rowData.struserIds\"><b>C\u00E1n b\u1ED9: </b>{{rowData.struserIds}}</div>\r\n <div *ngIf=\"rowData.strdonViIds\"><b>\u0110\u01A1n v\u1ECB: </b>{{rowData.strdonViIds}}</div>\r\n <div *ngIf=\"rowData.strgroupIds\"><b>Nh\u00F3m: </b>{{rowData.strgroupIds}}</div>\r\n <div *ngIf=\"rowData.strroleIds\"><b>Vai tr\u00F2: </b>{{rowData.strroleIds}}</div>\r\n </div>\r\n <div *ngIf=\"rowData.notInMainThread\">\r\n <div *ngFor=\"let changedField of rowData.jsonModelChange\">\r\n {{changedField.field}},\r\n {{changedField.valueOld}} => {{changedField.valueNew}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #receiverView let-rowData=\"rowData\">\r\n <div class=\"container-receiver\">\r\n <div *ngIf=\"rowData.struserViewIds\"><b>C\u00E1n b\u1ED9: </b>{{rowData.struserViewIds}}</div>\r\n <div *ngIf=\"rowData.strdonViViewIds\"><b>\u0110\u01A1n v\u1ECB: </b>{{rowData.strdonViViewIds}}</div>\r\n <div *ngIf=\"rowData.strgroupViewIds\"><b>Nh\u00F3m: </b>{{rowData.strgroupViewIds}}</div>\r\n <div *ngIf=\"rowData.strroleViewIds\"><b>Vai tr\u00F2: </b>{{rowData.strroleViewIds}}</div>\r\n </div>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [serviceCode]=\"_workflowHistoryService.serviceCode\"\r\n [entity]=\"_workflowHistoryService.entityName\" [entityKey]=\"rowData.id\"\r\n [fileDataService]=\"fileDataService\" [layout]=\"layoutFile.SIMPLE\" [readonly]=\"true\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"rowData.status == enumWorkflowHistoryStatus.IN_MAIN_THREAD\" pButton\r\n icon=\"pi pi-replay\" class=\"p-button-text p-button-rounded link-or-action\"\r\n pTooltip=\"Thu h\u1ED3i v\u1EC1 b\u01B0\u1EDBc n\u00E0y\" tooltipPosition=\"top\"\r\n (click)=\"rollbackByHistory(rowData)\"></button>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n </as-split-area>\r\n </as-split>\r\n</div>",
46641
+ template: "<div style=\"height: 100%\">\r\n <as-split direction=\"vertical\">\r\n <as-split-area [size]=\"40\">\r\n <div class=\"state-designer-container\">\r\n <div>\r\n S\u01A1 \u0111\u1ED3 quy tr\u00ECnh\r\n </div>\r\n <div>\r\n <tn-custom-scrollbar>\r\n <statemachines-designer [data]=\"machinesData\" [currentConnection]=\"currentConnection\"\r\n [viewOnly]=\"true\" [useScrollBar]=\"false\">\r\n </statemachines-designer>\r\n <after-view-checked (loaded)=\"setMachinesAndConnection()\"></after-view-checked>\r\n </tn-custom-scrollbar>\r\n </div>\r\n </div>\r\n </as-split-area>\r\n <as-split-area [size]=\"60\">\r\n <div style=\"height: 100%\">\r\n <crud-list *ngIf=\"model.ready\" #crudList [model]=\"model\" [setting]=\"setting\"\r\n [dataSource]=\"model.dataSource\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_handleReloaded($event)\"\r\n (onRowSelect)=\"handleRowSelect($event)\">\r\n <ng-template #note let-rowData=\"rowData\">\r\n <div *ngIf=\"rowData.note==null?'':rowData.note\" [innerHTML]=\"rowData.note | safeHtml\"></div>\r\n </ng-template>\r\n <ng-template #receiver let-rowData=\"rowData\">\r\n <div *ngIf=\"!rowData.notInMainThread\" class=\"container-receiver\">\r\n <div *ngIf=\"rowData.struserIds\"><b>C\u00E1n b\u1ED9: </b>{{rowData.struserIds}}</div>\r\n <div *ngIf=\"rowData.strdonViIds\"><b>\u0110\u01A1n v\u1ECB: </b>{{rowData.strdonViIds}}</div>\r\n <div *ngIf=\"rowData.strgroupIds\"><b>Nh\u00F3m: </b>{{rowData.strgroupIds}}</div>\r\n <div *ngIf=\"rowData.strroleIds\"><b>Ch\u1EE9c v\u1EE5: </b>{{rowData.strroleIds}}</div>\r\n </div>\r\n <div *ngIf=\"rowData.notInMainThread\">\r\n <div *ngFor=\"let changedField of rowData.jsonModelChange\">\r\n {{changedField.field}},\r\n {{changedField.valueOld}} => {{changedField.valueNew}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #receiverView let-rowData=\"rowData\">\r\n <div class=\"container-receiver\">\r\n <div *ngIf=\"rowData.struserViewIds\"><b>C\u00E1n b\u1ED9: </b>{{rowData.struserViewIds}}</div>\r\n <div *ngIf=\"rowData.strdonViViewIds\"><b>\u0110\u01A1n v\u1ECB: </b>{{rowData.strdonViViewIds}}</div>\r\n <div *ngIf=\"rowData.strgroupViewIds\"><b>Nh\u00F3m: </b>{{rowData.strgroupViewIds}}</div>\r\n <div *ngIf=\"rowData.strroleViewIds\"><b>Ch\u1EE9c v\u1EE5: </b>{{rowData.strroleViewIds}}</div>\r\n </div>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [serviceCode]=\"_workflowHistoryService.serviceCode\"\r\n [entity]=\"_workflowHistoryService.entityName\" [entityKey]=\"rowData.id\"\r\n [fileDataService]=\"fileDataService\" [layout]=\"layoutFile.SIMPLE\" [readonly]=\"true\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"rowData.status == enumWorkflowHistoryStatus.IN_MAIN_THREAD\" pButton\r\n icon=\"pi pi-replay\" class=\"p-button-text p-button-rounded link-or-action\"\r\n pTooltip=\"Thu h\u1ED3i v\u1EC1 b\u01B0\u1EDBc n\u00E0y\" tooltipPosition=\"top\"\r\n (click)=\"rollbackByHistory(rowData)\"></button>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n </as-split-area>\r\n </as-split>\r\n</div>",
46225
46642
  providers: [ComponentContextService],
46226
46643
  styles: [".state-designer-container{display:flex;flex-direction:column;height:100%}.state-designer-container>div:first-child{font-size:.9em;font-weight:700;padding:.5em 0}.state-designer-container>div:last-child{flex:1 1;overflow:auto}.container-receiver div{margin-bottom:10px}.container-receiver div:last-child{margin-bottom:0}::ng-deep workflow-history-new tr.recalled{opacity:.5}"]
46227
46644
  },] }
@@ -46231,7 +46648,7 @@
46231
46648
  { type: WorkflowHistoryService },
46232
46649
  { type: CoCauToChucService },
46233
46650
  { type: UserGroupRealService },
46234
- { type: RoleService },
46651
+ { type: DmChucVuService },
46235
46652
  { type: FileDataService }
46236
46653
  ]; };
46237
46654
  WorkflowHistoryNewComponent.propDecorators = {
@@ -46643,14 +47060,40 @@
46643
47060
  var _this = this;
46644
47061
  this.setting.baseService = this._workflowSettingsService;
46645
47062
  this.setting.schema = [
46646
- new CheckboxControlSchema({
46647
- field: 'createTaskInstead',
46648
- label: 'Tạo công việc',
47063
+ new CheckBoxListControlSchema({
47064
+ field: 'options',
46649
47065
  showLabel: false,
46650
- mdWidth: 2
47066
+ dataSource: DataSourceWorkflowCheckboxOption,
47067
+ mdWidth: 4,
47068
+ onChanged: function (evt) {
47069
+ if (evt.rootModel.options.indexOf(exports.EnumWorkflowCheckboxOption.TAO_CONG_VIEC) > -1) {
47070
+ evt.rootModel.createTaskInstead = true;
47071
+ }
47072
+ else {
47073
+ evt.rootModel.createTaskInstead = false;
47074
+ }
47075
+ if (evt.rootModel.options.indexOf(exports.EnumWorkflowCheckboxOption.AUTO_NEXT_STEP) > -1) {
47076
+ evt.rootModel.autoNextStep = true;
47077
+ }
47078
+ else {
47079
+ evt.rootModel.autoNextStep = false;
47080
+ }
47081
+ }
46651
47082
  }),
47083
+ // new CheckboxControlSchema({
47084
+ // field: 'createTaskInstead',
47085
+ // label: 'Tạo công việc',
47086
+ // showLabel: false,
47087
+ // mdWidth: 2
47088
+ // }),
47089
+ // new CheckboxControlSchema({
47090
+ // field: 'autoNextStep',
47091
+ // label: 'Tự động chuyển bước đầu tiên',
47092
+ // showLabel: false,
47093
+ // mdWidth: 2
47094
+ // }),
46652
47095
  new LabelSchema({
46653
- mdWidth: 10,
47096
+ mdWidth: 8,
46654
47097
  hiddenCheck: function (rootModel) { return _this.checkIfCreateTaskInstead(rootModel, true); }
46655
47098
  }),
46656
47099
  new CustomControlSchema({
@@ -46662,8 +47105,9 @@
46662
47105
  new CheckboxControlSchema({
46663
47106
  field: 'taskInsideBusinessForm',
46664
47107
  label: 'Hiển thị giao diện tạo công việc trên giao diện thêm mới',
47108
+ class: 'taskInsideBusinessForm',
46665
47109
  showLabel: false,
46666
- mdWidth: 10,
47110
+ mdWidth: 8,
46667
47111
  hiddenCheck: function (rootModel) { return _this.checkIfCreateTaskInstead(rootModel, false); }
46668
47112
  }),
46669
47113
  new TextControlSchema({
@@ -46692,16 +47136,25 @@
46692
47136
  };
46693
47137
  WorkflowSettingNewComponent.prototype.getSetting = function () {
46694
47138
  return __awaiter(this, void 0, void 0, function () {
46695
- var _a;
46696
- return __generator(this, function (_b) {
46697
- switch (_b.label) {
46698
- case 0:
46699
- _a = this.model;
46700
- return [4 /*yield*/, this._workflowSettingsService.getDetailByFilter([
46701
- this.newFilter('tableName', exports.Operator.equal, this.parentSetting.baseService.entityName)
46702
- ])];
47139
+ var data;
47140
+ return __generator(this, function (_a) {
47141
+ switch (_a.label) {
47142
+ case 0: return [4 /*yield*/, this._workflowSettingsService.getDetailByFilter([
47143
+ this.newFilter('tableName', exports.Operator.equal, this.parentSetting.baseService.entityName)
47144
+ ])];
46703
47145
  case 1:
46704
- _a.data = (_b.sent()).data;
47146
+ data = (_a.sent()).data;
47147
+ if (data) {
47148
+ if (!data.options)
47149
+ data.options = [];
47150
+ if (data.createTaskInstead) {
47151
+ data.options.push(exports.EnumWorkflowCheckboxOption.TAO_CONG_VIEC);
47152
+ }
47153
+ if (data.autoNextStep) {
47154
+ data.options.push(exports.EnumWorkflowCheckboxOption.AUTO_NEXT_STEP);
47155
+ }
47156
+ }
47157
+ this.model.data = data;
46705
47158
  this.afterGetSetting();
46706
47159
  return [2 /*return*/];
46707
47160
  }
@@ -46764,6 +47217,20 @@
46764
47217
  });
46765
47218
  });
46766
47219
  };
47220
+ WorkflowSettingNewComponent.prototype.setValueOption = function (data) {
47221
+ if (data.options.indexOf(exports.EnumWorkflowCheckboxOption.TAO_CONG_VIEC) > -1) {
47222
+ data.createTaskInstead = true;
47223
+ }
47224
+ else {
47225
+ data.createTaskInstead = false;
47226
+ }
47227
+ if (data.options.indexOf(exports.EnumWorkflowCheckboxOption.AUTO_NEXT_STEP) > -1) {
47228
+ data.autoNextStep = true;
47229
+ }
47230
+ else {
47231
+ data.autoNextStep = false;
47232
+ }
47233
+ };
46767
47234
  WorkflowSettingNewComponent.prototype.onBeforeSave = function () {
46768
47235
  if (this.workflowPickerComp) {
46769
47236
  Object.assign(this.model.data, this.workflowPickerComp.model.data);
@@ -46774,6 +47241,9 @@
46774
47241
  else {
46775
47242
  this.model.data.workflowCodes = null;
46776
47243
  }
47244
+ if (this.model.data.options) {
47245
+ this.setValueOption(this.model.data);
47246
+ }
46777
47247
  this.model.data.tableName = this.parentSetting.baseService.entityName;
46778
47248
  };
46779
47249
  WorkflowSettingNewComponent.prototype.handleManualSave = function () {
@@ -46787,7 +47257,7 @@
46787
47257
  selector: 'workflow-setting-new',
46788
47258
  template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #workflowPicker>\r\n <workflow-picker [data]=\"model.data\"></workflow-picker>\r\n </ng-template>\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <div class=\"footer-workflow-setting\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n <button *ngIf=\"model.data.id\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-danger p-button-text\"\r\n [label]=\"'H\u1EE7y quy tr\u00ECnh' | translate\" (click)=\"handleCancelWorkflow($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n </div>\r\n</ng-template>",
46789
47259
  providers: [ComponentContextService],
46790
- styles: [".title-workflow{font-size:.9em;font-weight:700;padding:1em 0 .5em}.title-workflow .pi-star{color:orange}.container-button-workflow{background:#fff;border-top:1px solid #ddd;bottom:0;padding:.5em;position:-webkit-sticky;position:sticky;text-align:right;z-index:10}"]
47260
+ styles: [".title-workflow{font-size:.9em;font-weight:700;padding:1em 0 .5em}.title-workflow .pi-star{color:orange}.container-button-workflow{background:#fff;border-top:1px solid #ddd;bottom:0;padding:.5em;position:-webkit-sticky;position:sticky;text-align:right;z-index:10}::ng-deep workflow-setting-new .crud-form-control div[role=checkbox-alone].taskInsideBusinessForm{margin-top:12px!important}"]
46791
47261
  },] }
46792
47262
  ];
46793
47263
  WorkflowSettingNewComponent.ctorParameters = function () { return [
@@ -47037,6 +47507,11 @@
47037
47507
  };
47038
47508
  CongviecDinhkemService.prototype.getDetailItem = function (serviceCode, entity, entityKey, fieldDisplay) {
47039
47509
  var serviceCodeEndpoint = this.env.apiDomain[serviceCode + "Endpoint"];
47510
+ if (!serviceCodeEndpoint) {
47511
+ var notifierService = this._injector.get(NotifierService);
47512
+ notifierService.showWarning("Kh\u00F4ng l\u1EA5y \u0111\u01B0\u1EE3c th\u00F4ng tin endpoint c\u1EE7a d\u1ECBch v\u1EE5 " + serviceCode);
47513
+ return new Promise(function (res, rej) { return res({ success: true, data: [] }); });
47514
+ }
47040
47515
  var uri = serviceCodeEndpoint + "/" + this._moduleConfigService.getConfig().environment.apiVersion + "/" + entity + "/GetData";
47041
47516
  var gridInfo = new GridInfo({
47042
47517
  fields: fieldDisplay,
@@ -47046,6 +47521,150 @@
47046
47521
  });
47047
47522
  return this._http.post(uri, gridInfo).toPromise();
47048
47523
  };
47524
+ CongviecDinhkemService.prototype.getDetailItems = function (dicGrouped) {
47525
+ return __awaiter(this, void 0, void 0, function () {
47526
+ var result, serviceCodes, _loop_1, this_1, serviceCodes_1, serviceCodes_1_1, serviceCode, state_1, e_1_1;
47527
+ var e_1, _a;
47528
+ return __generator(this, function (_b) {
47529
+ switch (_b.label) {
47530
+ case 0:
47531
+ result = {};
47532
+ serviceCodes = Object.keys(dicGrouped);
47533
+ _loop_1 = function (serviceCode) {
47534
+ var entitys, _loop_2, entitys_1, entitys_1_1, entity, serviceCodeEndpoint, _loop_3, entitys_2, entitys_2_1, entity, e_2_1;
47535
+ var e_3, _a, e_2, _b;
47536
+ return __generator(this, function (_c) {
47537
+ switch (_c.label) {
47538
+ case 0:
47539
+ result[serviceCode] = {};
47540
+ entitys = Object.keys(dicGrouped[serviceCode]);
47541
+ _loop_2 = function (entity) {
47542
+ result[serviceCode][entity] = {};
47543
+ dicGrouped[serviceCode][entity].lstId.forEach(function (entityKey) {
47544
+ result[serviceCode][entity][entityKey] = 'Không tìm thấy bản ghi';
47545
+ });
47546
+ };
47547
+ try {
47548
+ for (entitys_1 = (e_3 = void 0, __values(entitys)), entitys_1_1 = entitys_1.next(); !entitys_1_1.done; entitys_1_1 = entitys_1.next()) {
47549
+ entity = entitys_1_1.value;
47550
+ _loop_2(entity);
47551
+ }
47552
+ }
47553
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
47554
+ finally {
47555
+ try {
47556
+ if (entitys_1_1 && !entitys_1_1.done && (_a = entitys_1.return)) _a.call(entitys_1);
47557
+ }
47558
+ finally { if (e_3) throw e_3.error; }
47559
+ }
47560
+ serviceCodeEndpoint = this_1.env.apiDomain[serviceCode + "Endpoint"];
47561
+ if (!serviceCodeEndpoint) {
47562
+ return [2 /*return*/, { value: void 0 }];
47563
+ }
47564
+ _loop_3 = function (entity) {
47565
+ var dataByEntity, uri, filters, gridInfo, data, err_1;
47566
+ return __generator(this, function (_a) {
47567
+ switch (_a.label) {
47568
+ case 0:
47569
+ dataByEntity = dicGrouped[serviceCode][entity];
47570
+ uri = serviceCodeEndpoint + "/" + this_1._moduleConfigService.getConfig().environment.apiVersion + "/" + entity + "/GetAllByFilter";
47571
+ filters = [];
47572
+ if (dataByEntity.lstId.length == 1) {
47573
+ filters.push(this_1.newFilter('id', exports.Operator.equal, dataByEntity.lstId[0]));
47574
+ }
47575
+ else {
47576
+ filters.push(this_1.newFilter('id', exports.Operator.in, dataByEntity.lstId));
47577
+ }
47578
+ gridInfo = new GridInfo({
47579
+ fields: "id," + dataByEntity.fieldHienThi,
47580
+ pageInfo: { page: 1, pageSize: dataByEntity.lstId.length },
47581
+ filters: filters,
47582
+ sorts: []
47583
+ });
47584
+ _a.label = 1;
47585
+ case 1:
47586
+ _a.trys.push([1, 3, , 4]);
47587
+ return [4 /*yield*/, (this_1._http.post(uri, gridInfo).toPromise())];
47588
+ case 2:
47589
+ data = _a.sent();
47590
+ if (data.success && data.data && data.data.length) {
47591
+ data.data.forEach(function (itemDetail) {
47592
+ result[serviceCode][entity][itemDetail.id] = itemDetail[dataByEntity.fieldHienThi];
47593
+ });
47594
+ }
47595
+ return [3 /*break*/, 4];
47596
+ case 3:
47597
+ err_1 = _a.sent();
47598
+ console.log(err_1);
47599
+ return [3 /*break*/, 4];
47600
+ case 4: return [2 /*return*/];
47601
+ }
47602
+ });
47603
+ };
47604
+ _c.label = 1;
47605
+ case 1:
47606
+ _c.trys.push([1, 6, 7, 8]);
47607
+ entitys_2 = (e_2 = void 0, __values(entitys)), entitys_2_1 = entitys_2.next();
47608
+ _c.label = 2;
47609
+ case 2:
47610
+ if (!!entitys_2_1.done) return [3 /*break*/, 5];
47611
+ entity = entitys_2_1.value;
47612
+ return [5 /*yield**/, _loop_3(entity)];
47613
+ case 3:
47614
+ _c.sent();
47615
+ _c.label = 4;
47616
+ case 4:
47617
+ entitys_2_1 = entitys_2.next();
47618
+ return [3 /*break*/, 2];
47619
+ case 5: return [3 /*break*/, 8];
47620
+ case 6:
47621
+ e_2_1 = _c.sent();
47622
+ e_2 = { error: e_2_1 };
47623
+ return [3 /*break*/, 8];
47624
+ case 7:
47625
+ try {
47626
+ if (entitys_2_1 && !entitys_2_1.done && (_b = entitys_2.return)) _b.call(entitys_2);
47627
+ }
47628
+ finally { if (e_2) throw e_2.error; }
47629
+ return [7 /*endfinally*/];
47630
+ case 8: return [2 /*return*/];
47631
+ }
47632
+ });
47633
+ };
47634
+ this_1 = this;
47635
+ _b.label = 1;
47636
+ case 1:
47637
+ _b.trys.push([1, 6, 7, 8]);
47638
+ serviceCodes_1 = __values(serviceCodes), serviceCodes_1_1 = serviceCodes_1.next();
47639
+ _b.label = 2;
47640
+ case 2:
47641
+ if (!!serviceCodes_1_1.done) return [3 /*break*/, 5];
47642
+ serviceCode = serviceCodes_1_1.value;
47643
+ return [5 /*yield**/, _loop_1(serviceCode)];
47644
+ case 3:
47645
+ state_1 = _b.sent();
47646
+ if (typeof state_1 === "object")
47647
+ return [2 /*return*/, state_1.value];
47648
+ _b.label = 4;
47649
+ case 4:
47650
+ serviceCodes_1_1 = serviceCodes_1.next();
47651
+ return [3 /*break*/, 2];
47652
+ case 5: return [3 /*break*/, 8];
47653
+ case 6:
47654
+ e_1_1 = _b.sent();
47655
+ e_1 = { error: e_1_1 };
47656
+ return [3 /*break*/, 8];
47657
+ case 7:
47658
+ try {
47659
+ if (serviceCodes_1_1 && !serviceCodes_1_1.done && (_a = serviceCodes_1.return)) _a.call(serviceCodes_1);
47660
+ }
47661
+ finally { if (e_1) throw e_1.error; }
47662
+ return [7 /*endfinally*/];
47663
+ case 8: return [2 /*return*/, result];
47664
+ }
47665
+ });
47666
+ });
47667
+ };
47049
47668
  return CongviecDinhkemService;
47050
47669
  }(BaseService));
47051
47670
  CongviecDinhkemService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CongviecDinhkemService_Factory() { return new CongviecDinhkemService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: CongviecDinhkemService, providedIn: "root" });
@@ -47067,7 +47686,7 @@
47067
47686
  _this._virtualBaseService = _virtualBaseService;
47068
47687
  _this._congViecDinhKemService = _congViecDinhKemService;
47069
47688
  _this.fileDataService = fileDataService;
47070
- _this.formState = exports.FormState.VIEW;
47689
+ _this._formState = exports.FormState.VIEW;
47071
47690
  _this.layoutFile = exports.EnumFileLayout;
47072
47691
  _this.enumFormState = exports.FormState;
47073
47692
  _this.formModel = {};
@@ -47075,7 +47694,22 @@
47075
47694
  _this.typedLink = '';
47076
47695
  return _this;
47077
47696
  }
47697
+ Object.defineProperty(BaseCongviecDinhkemComponent.prototype, "formState", {
47698
+ get: function () {
47699
+ return this._formState;
47700
+ },
47701
+ set: function (value) {
47702
+ this._formState = value;
47703
+ if (this.setting) {
47704
+ this.settingIfIsFormView();
47705
+ }
47706
+ },
47707
+ enumerable: false,
47708
+ configurable: true
47709
+ });
47710
+ ;
47078
47711
  BaseCongviecDinhkemComponent.prototype.ngOnInit = function () {
47712
+ var _this = this;
47079
47713
  this.setting.objectName = 'mục đính kèm';
47080
47714
  this.setting.baseService = this._congViecDinhKemService;
47081
47715
  this.setting.hiddenSetting = true;
@@ -47085,11 +47719,10 @@
47085
47719
  this.setting.hiddenPageSetting = true;
47086
47720
  this.setting.hiddenAdvanceSearch = true;
47087
47721
  this.setting.hiddenFilterRow = true;
47088
- // this.setting.hiddenCheckbox = this.formState == FormState.VIEW;
47089
- // this.setting.hiddenFunctionColumn = this.formState == FormState.VIEW;
47090
47722
  this.setting.fixHeightTypeInDialog = false;
47091
47723
  this.setting.heightType = exports.HeightType.dynamic;
47092
47724
  this.setting.showExportSelectedItems = false;
47725
+ this.settingIfIsFormView();
47093
47726
  this.setting.modelSchemas = [
47094
47727
  new ModelSchema({ field: 'tenHienThiDoiTuong', name: 'Đối tượng', fullName: 'Đối tượng', description: 'Đối tượng' }),
47095
47728
  new ModelSchema({ field: 'tieuDe', name: 'Tiêu đề', fullName: 'Tiêu đề', description: 'Tiêu đề' }),
@@ -47107,6 +47740,17 @@
47107
47740
  dataType: 'fileDinhKem'
47108
47741
  })
47109
47742
  ];
47743
+ this.rootContext.replaySubscribe(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC, function (rowData) {
47744
+ _this.themDinhKem(false);
47745
+ });
47746
+ };
47747
+ BaseCongviecDinhkemComponent.prototype.ngOnDestroy = function () {
47748
+ this.rootContext.unSubscribleReplay(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
47749
+ _super.prototype.ngOnDestroy.call(this);
47750
+ };
47751
+ BaseCongviecDinhkemComponent.prototype.settingIfIsFormView = function () {
47752
+ this.setting.hiddenCheckbox = this.formState == exports.FormState.VIEW;
47753
+ this.setting.hiddenFunctionColumn = this.setting.hiddenCheckbox;
47110
47754
  };
47111
47755
  BaseCongviecDinhkemComponent.prototype.modifyGridInfo = function (gridInfo) {
47112
47756
  return __awaiter(this, void 0, void 0, function () {
@@ -47118,50 +47762,57 @@
47118
47762
  };
47119
47763
  BaseCongviecDinhkemComponent.prototype.afterGetData = function () {
47120
47764
  return __awaiter(this, void 0, void 0, function () {
47121
- var _a, _b, item, detail, e_1_1;
47765
+ var dicGrouped, dataDisplayName, _a, _b, item;
47122
47766
  var e_1, _c;
47123
47767
  return __generator(this, function (_d) {
47124
47768
  switch (_d.label) {
47125
47769
  case 0:
47126
- _d.trys.push([0, 5, 6, 7]);
47127
- _a = __values(this.model.dataSource), _b = _a.next();
47128
- _d.label = 1;
47770
+ dicGrouped = {};
47771
+ this.model.dataSource.forEach(function (item) {
47772
+ if (!dicGrouped[item.serviceCode]) {
47773
+ dicGrouped[item.serviceCode] = {};
47774
+ }
47775
+ if (!dicGrouped[item.serviceCode][item.entity]) {
47776
+ dicGrouped[item.serviceCode][item.entity] = {
47777
+ fieldHienThi: item.fieldHienThi,
47778
+ lstId: []
47779
+ };
47780
+ }
47781
+ dicGrouped[item.serviceCode][item.entity].lstId.push(item.entityKey);
47782
+ });
47783
+ return [4 /*yield*/, this._congViecDinhKemService.getDetailItems(dicGrouped)];
47129
47784
  case 1:
47130
- if (!!_b.done) return [3 /*break*/, 4];
47131
- item = _b.value;
47132
- return [4 /*yield*/, this._congViecDinhKemService.getDetailItem(item.serviceCode, item.entity, item.entityKey, item.fieldHienThi)];
47133
- case 2:
47134
- detail = (_d.sent()).data;
47135
- if (detail.length > 0) {
47136
- item.tieuDe = detail[0][item.fieldHienThi];
47137
- }
47138
- else {
47139
- item.tieuDe = 'Không tìm thấy bản ghi';
47140
- }
47141
- if (item.tenHienThiDoiTuong != null) {
47142
- item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.trim();
47143
- item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.substring(0, 1).toUpperCase() + item.tenHienThiDoiTuong.substring(1);
47144
- }
47145
- _d.label = 3;
47146
- case 3:
47147
- _b = _a.next();
47148
- return [3 /*break*/, 1];
47149
- case 4: return [3 /*break*/, 7];
47150
- case 5:
47151
- e_1_1 = _d.sent();
47152
- e_1 = { error: e_1_1 };
47153
- return [3 /*break*/, 7];
47154
- case 6:
47785
+ dataDisplayName = _d.sent();
47155
47786
  try {
47156
- if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
47787
+ for (_a = __values(this.model.dataSource), _b = _a.next(); !_b.done; _b = _a.next()) {
47788
+ item = _b.value;
47789
+ item.tieuDe = dataDisplayName[item.serviceCode][item.entity][item.entityKey];
47790
+ if (item.tenHienThiDoiTuong != null) {
47791
+ item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.trim();
47792
+ item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.substring(0, 1).toUpperCase() + item.tenHienThiDoiTuong.substring(1);
47793
+ }
47794
+ }
47157
47795
  }
47158
- finally { if (e_1) throw e_1.error; }
47159
- return [7 /*endfinally*/];
47160
- case 7: return [2 /*return*/];
47796
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
47797
+ finally {
47798
+ try {
47799
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
47800
+ }
47801
+ finally { if (e_1) throw e_1.error; }
47802
+ }
47803
+ return [2 /*return*/];
47161
47804
  }
47162
47805
  });
47163
47806
  });
47164
47807
  };
47808
+ BaseCongviecDinhkemComponent.prototype.afterReloaded = function () {
47809
+ return __awaiter(this, void 0, void 0, function () {
47810
+ return __generator(this, function (_a) {
47811
+ this.fileDataService.getData();
47812
+ return [2 /*return*/];
47813
+ });
47814
+ });
47815
+ };
47165
47816
  BaseCongviecDinhkemComponent.prototype.viewLinkItem = function (evt) {
47166
47817
  this.viewRawLink(evt);
47167
47818
  };
@@ -47199,7 +47850,8 @@
47199
47850
  });
47200
47851
  }); });
47201
47852
  };
47202
- BaseCongviecDinhkemComponent.prototype.themDinhKem = function () {
47853
+ BaseCongviecDinhkemComponent.prototype.themDinhKem = function (showNoti) {
47854
+ if (showNoti === void 0) { showNoti = true; }
47203
47855
  return __awaiter(this, void 0, void 0, function () {
47204
47856
  var content, obj;
47205
47857
  var _this = this;
@@ -47210,7 +47862,9 @@
47210
47862
  if (obj.length > 0) {
47211
47863
  this._congViecDinhKemService.themDinhKemNghiepVu(this.taskId, obj).then(function (rs) {
47212
47864
  if (rs.success) {
47213
- _this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
47865
+ if (showNoti) {
47866
+ _this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
47867
+ }
47214
47868
  _this.reload();
47215
47869
  _this._commonService.clearClipboardStorage();
47216
47870
  }
@@ -47331,7 +47985,7 @@
47331
47985
  BaseCongviecDinhkemComponent.decorators = [
47332
47986
  { type: i0.Component, args: [{
47333
47987
  selector: 'base-congviec-dinhkem',
47334
- template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" [hiddenCopyLink]=\"true\" (onReload)=\"_triggerProcessData($event)\"\r\n (onView)=\"viewLinkItem($event)\" (onDelete)=\"deleteLinkItem($event)\"\r\n (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n {{rowData.tenHienThiDoiTuong}}: [{{rowData.tieuDe}}]\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\" [entity]=\"rowData.entity\"\r\n [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\" [fileDataService]=\"fileDataService\">\r\n </file-manager>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n",
47988
+ template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" [hiddenCopyLink]=\"true\" (onReload)=\"_triggerProcessData($event)\"\r\n (onView)=\"viewLinkItem($event)\" (onDelete)=\"deleteLinkItem($event)\"\r\n (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\" (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\" [entity]=\"rowData.entity\"\r\n [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>",
47335
47989
  providers: [ComponentContextService],
47336
47990
  styles: [""]
47337
47991
  },] }
@@ -47445,6 +48099,7 @@
47445
48099
  },
47446
48100
  ];
47447
48101
  _this.buttons = [];
48102
+ _this.mdWidthWorkflow = 6;
47448
48103
  _this.handleChangeLoaiCongViecWhenAdd = function (evt) { return __awaiter(_this, void 0, void 0, function () {
47449
48104
  return __generator(this, function (_a) {
47450
48105
  switch (_a.label) {
@@ -47497,15 +48152,6 @@
47497
48152
  label: 'Mô tả nội dung',
47498
48153
  mdWidth: 12
47499
48154
  }),
47500
- new DropdownControlSchema({
47501
- field: 'idLoaiCongViec',
47502
- label: 'Phân loại',
47503
- baseService: this._dmLoaiCongViecService,
47504
- isTree: true,
47505
- fieldTree: 'idParent',
47506
- valueParentRoot: null,
47507
- onChanged: onChangeLoaiCongViec
47508
- }),
47509
48155
  new DropdownControlSchema({
47510
48156
  field: 'idPriority',
47511
48157
  label: 'Độ ưu tiên',
@@ -47531,11 +48177,31 @@
47531
48177
  }),
47532
48178
  new PercentControlSchema({
47533
48179
  field: 'phanTram',
47534
- mdWidth: 12,
48180
+ mdWidth: 6,
47535
48181
  label: 'Tiến độ'
47536
48182
  }),
48183
+ new DropdownControlSchema({
48184
+ field: 'idLoaiCongViec',
48185
+ label: 'Phân loại công việc',
48186
+ baseService: this._dmLoaiCongViecService,
48187
+ isTree: true,
48188
+ fieldTree: 'idParent',
48189
+ valueParentRoot: null,
48190
+ sorts: [{ field: 'maPhanCap', dir: 1 }],
48191
+ onChanged: onChangeLoaiCongViec
48192
+ })
47537
48193
  ];
47538
48194
  this.addSchemaBase();
48195
+ if (this._isFormAddNew()) {
48196
+ this.setting.schema.push(new CheckboxControlSchema({
48197
+ field: 'autoNextStep',
48198
+ label: 'Tự động chuyển bước đầu tiên',
48199
+ class: 'mg-top-0',
48200
+ showLabel: false,
48201
+ mdWidth: 6,
48202
+ hiddenCheck: function (rootModel) { return !rootModel._WorkflowCode; }
48203
+ }));
48204
+ }
47539
48205
  };
47540
48206
  BaseCongViecFormComponent.prototype.onFormInitialized = function (evt) {
47541
48207
  return __awaiter(this, void 0, void 0, function () {
@@ -47792,7 +48458,8 @@
47792
48458
  this.setting.cols = [
47793
48459
  new ColumnSchemaBase({
47794
48460
  field: 'ten',
47795
- dataType: 'congViecInfo'
48461
+ dataType: 'congViecInfo',
48462
+ width: '18rem'
47796
48463
  }),
47797
48464
  new ColumnSchemaBase({
47798
48465
  field: 'ngayBatDau',
@@ -47804,7 +48471,7 @@
47804
48471
  }),
47805
48472
  new ColumnSchemaBase({
47806
48473
  field: 'idLoaiCongViec',
47807
- width: '10%',
48474
+ width: '100px',
47808
48475
  baseService: this._dmLoaiCongViecService,
47809
48476
  isTree: true,
47810
48477
  fieldTree: 'idParent',
@@ -47812,14 +48479,14 @@
47812
48479
  }),
47813
48480
  new ColumnSchemaBase({
47814
48481
  field: 'idLinhVuc',
47815
- width: '10%',
48482
+ width: '100px',
47816
48483
  baseService: this._dmLinhVucCongViecService
47817
48484
  }),
47818
48485
  new ColumnSchemaBase({
47819
48486
  field: 'idPriority',
47820
48487
  dataType: 'idPriority',
47821
48488
  dataTypeRefField: 'idPriority',
47822
- width: '10%',
48489
+ width: '80px',
47823
48490
  baseService: this._dmPriorityService,
47824
48491
  fieldPlus: 'background,color',
47825
48492
  funcSetValueRow: function (rowItem, data) {
@@ -48095,7 +48762,7 @@
48095
48762
  BaseCongViecComponent.decorators = [
48096
48763
  { type: i0.Component, args: [{
48097
48764
  selector: 'base-congviec',
48098
- template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n (onCopyLink)=\"_copyLink($event)\" (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\"\r\n (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n</crud-list>\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [loaiDanhSach]=\"loaiDanhSach\" [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
48765
+ template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n [showScrollHorizontal]=\"true\" (onCopyLink)=\"_copyLink($event)\" (onCopyLinkMultiple)=\"_copyLinkMultiple()\"\r\n (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\"\r\n (onDelete)=\"_delete($event)\" (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n</crud-list>\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [loaiDanhSach]=\"loaiDanhSach\" [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
48099
48766
  providers: [ComponentContextService],
48100
48767
  styles: [".container-task-info .percent-done{background-color:#f0f0f0;border-radius:2px;height:5px;margin-top:5px;overflow:hidden;position:relative}.container-task-info .percent-done .detail{background:#3eb839;border-radius:2px;font-size:13px;height:5px;left:0;position:absolute;text-align:center;top:0}.priority{text-align:center}.priority>span{border-radius:3px;font-size:.8em;padding:3px 7px}"]
48101
48768
  },] }
@@ -50755,7 +51422,7 @@
50755
51422
  ShareLinkByPermissionComponent.prototype.copyLinkToClipboard = function () {
50756
51423
  if (this.links) {
50757
51424
  this.copyToClipboard(this.links);
50758
- this._notifierService.showWarning('Copy link vào clipboard thành công');
51425
+ this._notifierService.showSuccess('Copy link vào clipboard thành công');
50759
51426
  }
50760
51427
  };
50761
51428
  return ShareLinkByPermissionComponent;
@@ -50849,6 +51516,7 @@
50849
51516
  StateMachinesConnectionReceiverDepartmentComponent,
50850
51517
  StateMachinesConnectionReceiverGroupComponent,
50851
51518
  StateMachinesConnectionReceiverRoleComponent,
51519
+ StateMachinesConnectionReceiverConditionComponent,
50852
51520
  StateMachinesConnectionSenderComponent,
50853
51521
  StateMachinesDesignerComponent,
50854
51522
  StartWorkflowComponent,
@@ -52924,6 +53592,7 @@
52924
53592
  exports.DataSourceTargetType = DataSourceTargetType;
52925
53593
  exports.DataSourceUserRule = DataSourceUserRule;
52926
53594
  exports.DataSourceUserSender = DataSourceUserSender;
53595
+ exports.DataSourceWorkflowCheckboxOption = DataSourceWorkflowCheckboxOption;
52927
53596
  exports.DataSourceWorkflowCoreStatus = DataSourceWorkflowCoreStatus;
52928
53597
  exports.DateCompareValidator = DateCompareValidator;
52929
53598
  exports.DateTimeControlSchema = DateTimeControlSchema;
@@ -53208,6 +53877,8 @@
53208
53877
  exports.ɵ10 = ɵ10;
53209
53878
  exports.ɵ11 = ɵ11;
53210
53879
  exports.ɵ12 = ɵ12;
53880
+ exports.ɵ13 = ɵ13;
53881
+ exports.ɵ14 = ɵ14;
53211
53882
  exports.ɵ2 = ɵ2;
53212
53883
  exports.ɵ3 = ɵ3;
53213
53884
  exports.ɵ4 = ɵ4;
@@ -53251,74 +53922,76 @@
53251
53922
  exports.ɵcd = SimpleWorkflowFormComponent;
53252
53923
  exports.ɵce = ProcessWorkflowFormComponent;
53253
53924
  exports.ɵcf = ProcessWorkflowTargetComponent;
53254
- exports.ɵcg = ChoYKienFormComponent;
53255
- exports.ɵch = SplashComponentV1Component;
53256
- exports.ɵci = StateMachinesConnectionReceiverComponent;
53257
- exports.ɵcj = StateMachinesConnectionReceiverUserComponent;
53258
- exports.ɵck = StateMachinesConnectionReceiverDepartmentComponent;
53259
- exports.ɵcl = StateMachinesConnectionReceiverGroupComponent;
53260
- exports.ɵcm = StateMachinesConnectionReceiverRoleComponent;
53261
- exports.ɵcn = StateMachinesConnectionSenderComponent;
53262
- exports.ɵco = StartWorkflowComponent;
53263
- exports.ɵcp = WorkflowSettingsService;
53264
- exports.ɵcq = ShareLinkByPermissionComponent;
53265
- exports.ɵcr = WorkflowSettingNewComponent;
53266
- exports.ɵcs = PermissionSharingComponent;
53267
- exports.ɵct = WorkflowPermissionService;
53268
- exports.ɵcu = TnDialogComponent;
53269
- exports.ɵcv = TnColorPickerComponent;
53270
- exports.ɵcw = TnTinymceComponent;
53271
- exports.ɵcx = TnTabViewComponent;
53272
- exports.ɵcy = TableDetailFormComponent;
53273
- exports.ɵcz = FileIconPipe;
53925
+ exports.ɵcg = DmChucVuService;
53926
+ exports.ɵch = ChoYKienFormComponent;
53927
+ exports.ɵci = SplashComponentV1Component;
53928
+ exports.ɵcj = StateMachinesConnectionReceiverComponent;
53929
+ exports.ɵck = StateMachinesConnectionReceiverUserComponent;
53930
+ exports.ɵcl = StateMachinesConnectionReceiverConditionComponent;
53931
+ exports.ɵcm = StateMachinesConnectionReceiverDepartmentComponent;
53932
+ exports.ɵcn = StateMachinesConnectionReceiverGroupComponent;
53933
+ exports.ɵco = StateMachinesConnectionReceiverRoleComponent;
53934
+ exports.ɵcp = StateMachinesConnectionSenderComponent;
53935
+ exports.ɵcq = StartWorkflowComponent;
53936
+ exports.ɵcr = WorkflowSettingsService;
53937
+ exports.ɵcs = ShareLinkByPermissionComponent;
53938
+ exports.ɵct = WorkflowSettingNewComponent;
53939
+ exports.ɵcu = PermissionSharingComponent;
53940
+ exports.ɵcv = WorkflowPermissionService;
53941
+ exports.ɵcw = TnDialogComponent;
53942
+ exports.ɵcx = TnColorPickerComponent;
53943
+ exports.ɵcy = TnTinymceComponent;
53944
+ exports.ɵcz = TnTabViewComponent;
53274
53945
  exports.ɵd = ExceptionHandlerService;
53275
- exports.ɵda = FileSizePipe;
53276
- exports.ɵdb = QuickAddFormComponent;
53277
- exports.ɵdc = PreventShiftTabDirective;
53278
- exports.ɵdd = TnTemplateDirective;
53279
- exports.ɵde = UserPickerComponent;
53280
- exports.ɵdf = UserPickerBoxComponent;
53281
- exports.ɵdg = CoCauToChucTestService;
53282
- exports.ɵdh = TnAppHelpComponent;
53283
- exports.ɵdi = PathNameService;
53284
- exports.ɵdj = HelperCurrentPageComponent;
53285
- exports.ɵdk = TnAppNotificationListComponent;
53286
- exports.ɵdl = TnAppNotificationComponent;
53287
- exports.ɵdm = MyDriveService;
53288
- exports.ɵdn = FileVersionService;
53289
- exports.ɵdo = FileExplorerNewService;
53290
- exports.ɵdp = FolderFormComponent;
53291
- exports.ɵdq = FileFormComponent;
53292
- exports.ɵdr = FileViewerComponent;
53293
- exports.ɵds = FileVersionListComponent;
53294
- exports.ɵdt = WorkflowHistoryComponent;
53295
- exports.ɵdu = EntityWorkflowHistoryService;
53296
- exports.ɵdv = WorkflowHistoryDialogComponent;
53297
- exports.ɵdw = WorkflowHistoryNewComponent;
53298
- exports.ɵdx = WorkflowSettingComponent;
53299
- exports.ɵdy = EntityWorkflowSettingService;
53300
- exports.ɵdz = WorkflowSettingDialogComponent;
53946
+ exports.ɵda = TableDetailFormComponent;
53947
+ exports.ɵdb = FileIconPipe;
53948
+ exports.ɵdc = FileSizePipe;
53949
+ exports.ɵdd = QuickAddFormComponent;
53950
+ exports.ɵde = PreventShiftTabDirective;
53951
+ exports.ɵdf = TnTemplateDirective;
53952
+ exports.ɵdg = UserPickerComponent;
53953
+ exports.ɵdh = UserPickerBoxComponent;
53954
+ exports.ɵdi = CoCauToChucTestService;
53955
+ exports.ɵdj = TnAppHelpComponent;
53956
+ exports.ɵdk = PathNameService;
53957
+ exports.ɵdl = HelperCurrentPageComponent;
53958
+ exports.ɵdm = TnAppNotificationListComponent;
53959
+ exports.ɵdn = TnAppNotificationComponent;
53960
+ exports.ɵdo = MyDriveService;
53961
+ exports.ɵdp = FileVersionService;
53962
+ exports.ɵdq = FileExplorerNewService;
53963
+ exports.ɵdr = FolderFormComponent;
53964
+ exports.ɵds = FileFormComponent;
53965
+ exports.ɵdt = FileViewerComponent;
53966
+ exports.ɵdu = FileVersionListComponent;
53967
+ exports.ɵdv = WorkflowHistoryComponent;
53968
+ exports.ɵdw = EntityWorkflowHistoryService;
53969
+ exports.ɵdx = WorkflowHistoryDialogComponent;
53970
+ exports.ɵdy = WorkflowHistoryNewComponent;
53971
+ exports.ɵdz = WorkflowSettingComponent;
53301
53972
  exports.ɵe = CanBo_HoSoService;
53302
- exports.ɵea = QrCodeGeneratorComponent;
53303
- exports.ɵeb = AccessDeniedV1Component;
53304
- exports.ɵec = AddNewsComponent;
53305
- exports.ɵed = ArticleService;
53306
- exports.ɵee = NewsCategoryService;
53307
- exports.ɵef = NotFoundComponent;
53308
- exports.ɵeg = UniversalLinkProcessorComponent;
53309
- exports.ɵeh = SignatureDetailComponent;
53310
- exports.ɵei = ChatService;
53311
- exports.ɵej = ContentsService;
53312
- exports.ɵek = StatusExtendsService;
53313
- exports.ɵel = MessageBoardService;
53314
- exports.ɵem = KySoSimDanhSachChuKyComponent;
53315
- exports.ɵen = KySoSimChuKyUserService;
53316
- exports.ɵeo = FileKySoSimComponent;
53317
- exports.ɵep = KySoSimSignPDFService;
53318
- exports.ɵeq = CheckReadyComponent;
53319
- exports.ɵer = SendAccessTokenInterceptor;
53320
- exports.ɵes = LogInterceptor;
53321
- exports.ɵet = PermissionUtilsInterceptor;
53973
+ exports.ɵea = EntityWorkflowSettingService;
53974
+ exports.ɵeb = WorkflowSettingDialogComponent;
53975
+ exports.ɵec = QrCodeGeneratorComponent;
53976
+ exports.ɵed = AccessDeniedV1Component;
53977
+ exports.ɵee = AddNewsComponent;
53978
+ exports.ɵef = ArticleService;
53979
+ exports.ɵeg = NewsCategoryService;
53980
+ exports.ɵeh = NotFoundComponent;
53981
+ exports.ɵei = UniversalLinkProcessorComponent;
53982
+ exports.ɵej = SignatureDetailComponent;
53983
+ exports.ɵek = ChatService;
53984
+ exports.ɵel = ContentsService;
53985
+ exports.ɵem = StatusExtendsService;
53986
+ exports.ɵen = MessageBoardService;
53987
+ exports.ɵeo = KySoSimDanhSachChuKyComponent;
53988
+ exports.ɵep = KySoSimChuKyUserService;
53989
+ exports.ɵeq = FileKySoSimComponent;
53990
+ exports.ɵer = KySoSimSignPDFService;
53991
+ exports.ɵes = CheckReadyComponent;
53992
+ exports.ɵet = SendAccessTokenInterceptor;
53993
+ exports.ɵeu = LogInterceptor;
53994
+ exports.ɵev = PermissionUtilsInterceptor;
53322
53995
  exports.ɵf = AfterViewCheckedComponent;
53323
53996
  exports.ɵg = AdvanceSearchComponent;
53324
53997
  exports.ɵh = AppRootMenuComponent;