tnx-shared 5.1.77 → 5.1.81

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 (116) hide show
  1. package/bundles/tnx-shared.umd.js +939 -310
  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/share-link-by-permission/models/share-link-by-permission.d.ts +3 -0
  26. package/components/share-link-by-permission/models/share-link-by-permission.d.ts.map +1 -1
  27. package/components/share-link-by-permission/share-link-by-permission.component.d.ts.map +1 -1
  28. package/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.d.ts.map +1 -1
  29. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts +3 -0
  30. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts.map +1 -1
  31. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts +28 -0
  32. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts.map +1 -0
  33. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.ngfactory.d.ts.map +1 -0
  34. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.scss.shim.ngstyle.d.ts.map +1 -0
  35. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts +3 -1
  36. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts.map +1 -1
  37. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts +3 -1
  38. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts.map +1 -1
  39. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts +6 -4
  40. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts.map +1 -1
  41. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts +3 -3
  42. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts.map +1 -1
  43. package/components/user-picker/user-picker.component.d.ts +8 -2
  44. package/components/user-picker/user-picker.component.d.ts.map +1 -1
  45. package/components/workflow/models/models.d.ts +8 -8
  46. package/components/workflow/models/models.d.ts.map +1 -1
  47. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts +1 -1
  48. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts.map +1 -1
  49. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts +3 -6
  50. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts.map +1 -1
  51. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +3 -3
  52. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
  53. package/configs/component-context.constant.d.ts +1 -0
  54. package/configs/component-context.constant.d.ts.map +1 -1
  55. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts +8 -3
  56. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts.map +1 -1
  57. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +2 -0
  58. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  59. package/congviec/congviec/congviec.component.d.ts.map +1 -1
  60. package/congviec/congviec/services/congviec-dinhkem.service.d.ts +8 -0
  61. package/congviec/congviec/services/congviec-dinhkem.service.d.ts.map +1 -1
  62. package/congviec/congviec/services/congviec.service.d.ts.map +1 -1
  63. package/esm2015/classes/base/data-form-base.js +6 -3
  64. package/esm2015/classes/base/data-list-base.js +13 -3
  65. package/esm2015/classes/form-schema.js +1 -1
  66. package/esm2015/components/crud/crud-form/crud-form.component.js +2 -1
  67. package/esm2015/components/crud/crud-list/crud-list.component.js +14 -8
  68. package/esm2015/components/entity-permission/services.cs/entity-permission.service.js +8 -5
  69. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +17 -10
  70. package/esm2015/components/file-explorer/services/file-data.service.js +15 -15
  71. package/esm2015/components/query-builders/query-builder/query-builder.component.js +24 -7
  72. package/esm2015/components/query-builders/query-builder-group/query-builder-group.component.js +6 -2
  73. package/esm2015/components/query-builders/query-builder-rule/query-builder-rule.component.js +39 -3
  74. package/esm2015/components/share-link-by-permission/models/share-link-by-permission.js +1 -1
  75. package/esm2015/components/share-link-by-permission/share-link-by-permission.component.js +32 -2
  76. package/esm2015/components/statemachines/models/constants.js +2 -2
  77. package/esm2015/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.js +9 -5
  78. package/esm2015/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.js +19 -6
  79. package/esm2015/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.js +179 -0
  80. package/esm2015/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.js +32 -1
  81. package/esm2015/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.js +32 -1
  82. package/esm2015/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.js +39 -8
  83. package/esm2015/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.js +19 -7
  84. package/esm2015/components/statemachines/utils/utils.js +6 -6
  85. package/esm2015/components/tn-app-help/tn-app-help.component.js +1 -1
  86. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +2 -2
  87. package/esm2015/components/user-picker/user-picker.component.js +47 -6
  88. package/esm2015/components/workflow/models/models.js +1 -7
  89. package/esm2015/components/workflow/process-workflow-form/process-workflow-form.component.js +39 -42
  90. package/esm2015/components/workflow/process-workflow-target/process-workflow-target.component.js +7 -40
  91. package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +10 -12
  92. package/esm2015/configs/component-context.constant.js +3 -2
  93. package/esm2015/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.js +50 -14
  94. package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +13 -11
  95. package/esm2015/congviec/congviec/congviec.component.js +7 -6
  96. package/esm2015/congviec/congviec/services/congviec-dinhkem.service.js +57 -1
  97. package/esm2015/congviec/congviec/services/congviec.service.js +3 -3
  98. package/esm2015/services/base.service.js +4 -1
  99. package/esm2015/services/dm-chucvu.service.js +28 -0
  100. package/esm2015/services/role.service.js +1 -1
  101. package/esm2015/tnx-shared.js +69 -67
  102. package/esm2015/tnx-shared.module.js +3 -1
  103. package/fesm2015/tnx-shared.js +729 -216
  104. package/fesm2015/tnx-shared.js.map +1 -1
  105. package/package.json +2 -2
  106. package/services/base.service.d.ts +1 -0
  107. package/services/base.service.d.ts.map +1 -1
  108. package/services/dm-chucvu.service.d.ts +12 -0
  109. package/services/dm-chucvu.service.d.ts.map +1 -0
  110. package/services/dm-chucvu.service.ngfactory.d.ts.map +1 -0
  111. package/tnx-shared.d.ts +68 -66
  112. package/tnx-shared.d.ts.map +1 -1
  113. package/tnx-shared.metadata.json +1 -1
  114. package/tnx-shared.module.d.ts +2 -1
  115. package/tnx-shared.module.d.ts.map +1 -1
  116. 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;
@@ -19694,6 +19704,7 @@
19694
19704
  }
19695
19705
  };
19696
19706
  this.congViecModel.showEditForm = true;
19707
+ this.onShowFormStartWorkflow.emit(rowData);
19697
19708
  return [3 /*break*/, 4];
19698
19709
  case 3:
19699
19710
  if (workflowSetting.workflows.length == 1) {
@@ -19738,16 +19749,16 @@
19738
19749
  case 2:
19739
19750
  this.buttonContexts = [
19740
19751
  {
19741
- label: "Xem l\u1ECBch s\u1EED",
19742
- icon: 'pi pi-calendar',
19743
- command: function () { return _this.viewTaskHistory(rowData); }
19752
+ label: "Xem chi ti\u1EBFt c\u00F4ng vi\u1EC7c",
19753
+ icon: 'pi pi-list',
19754
+ command: function () { return _this.viewTaskDetail(rowData); }
19744
19755
  }
19745
19756
  ];
19746
19757
  if (rowData.__workflowCode != DummyWorkflowCode) {
19747
19758
  this.buttonContexts.unshift({
19748
- label: "Xem chi ti\u1EBFt c\u00F4ng vi\u1EC7c",
19749
- icon: 'pi pi-list',
19750
- command: function () { return _this.viewTaskDetail(rowData); }
19759
+ label: "Xem l\u1ECBch s\u1EED",
19760
+ icon: 'pi pi-calendar',
19761
+ command: function () { return _this.viewTaskHistory(rowData); }
19751
19762
  });
19752
19763
  }
19753
19764
  this._showContextMenu(evt);
@@ -20320,6 +20331,9 @@
20320
20331
  return __awaiter(this, void 0, void 0, function () {
20321
20332
  var rowData;
20322
20333
  return __generator(this, function (_b) {
20334
+ if (!this.setting.checkReadyToTrinhKy()) {
20335
+ return [2 /*return*/, this._notifierService.showWarning('Đang tải dữ liệu danh sách, chờ một lúc rồi thử lại')];
20336
+ }
20323
20337
  rowData = this.rowDataCurrent;
20324
20338
  this.showShareLinkForm([rowData]);
20325
20339
  return [2 /*return*/];
@@ -21740,18 +21754,22 @@
21740
21754
  onStartedWorkflow: [{ type: i0.Output }],
21741
21755
  onProcessedWorkflow: [{ type: i0.Output }],
21742
21756
  onRollbackedWorkflow: [{ type: i0.Output }],
21743
- onChangedStatusWorkflow: [{ type: i0.Output }]
21757
+ onChangedStatusWorkflow: [{ type: i0.Output }],
21758
+ onShowFormStartWorkflow: [{ type: i0.Output }]
21744
21759
  };
21745
21760
 
21746
21761
  var EntityPermissionService = /** @class */ (function (_super) {
21747
21762
  __extends(EntityPermissionService, _super);
21748
21763
  function EntityPermissionService(http, injector, _moduleConfigService) {
21749
- var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint + "/EntityPermission") || this;
21764
+ var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/EntityPermission") || this;
21750
21765
  _this.serviceManagers = {};
21751
21766
  _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint;
21752
21767
  _this._moduleConfig = _moduleConfigService.getConfig();
21753
21768
  return _this;
21754
21769
  }
21770
+ EntityPermissionService.prototype.getEndpointByService = function (service) {
21771
+ return service.endPoint + "/" + this._moduleConfig.environment.apiVersion;
21772
+ };
21755
21773
  EntityPermissionService.prototype.registerService = function (entityName, service) {
21756
21774
  this.serviceManagers[entityName] = service;
21757
21775
  };
@@ -21760,15 +21778,15 @@
21760
21778
  if (service == undefined) {
21761
21779
  (this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity permission service');
21762
21780
  }
21763
- return this.defaultPost(service.endPoint + "/EntityPermission/GetPermission/" + service.entityName, {});
21781
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/GetPermission/" + service.entityName, {});
21764
21782
  };
21765
21783
  EntityPermissionService.prototype.savePermission = function (tableName, data) {
21766
21784
  var service = this.serviceManagers[tableName];
21767
- return this.defaultPost(service.endPoint + "/EntityPermission/SavePermission/" + service.entityName, data);
21785
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/SavePermission/" + service.entityName, data);
21768
21786
  };
21769
21787
  EntityPermissionService.prototype.removePermission = function (tableName) {
21770
21788
  var service = this.serviceManagers[tableName];
21771
- return this.defaultPost(service.endPoint + "/EntityPermission/RemovePermission/" + service.entityName, {});
21789
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/RemovePermission/" + service.entityName, {});
21772
21790
  };
21773
21791
  return EntityPermissionService;
21774
21792
  }(BaseService));
@@ -22443,7 +22461,8 @@
22443
22461
  });
22444
22462
  });
22445
22463
  };
22446
- DataListBase.prototype._copyLink = function (rowData) {
22464
+ DataListBase.prototype._copyLink = function (rowData, showNoti) {
22465
+ if (showNoti === void 0) { showNoti = true; }
22447
22466
  return __awaiter(this, void 0, void 0, function () {
22448
22467
  var path;
22449
22468
  return __generator(this, function (_a) {
@@ -22452,12 +22471,26 @@
22452
22471
  case 1:
22453
22472
  path = _a.sent();
22454
22473
  this._commonService.copyByStorage(path);
22455
- this._notifierService.showSuccess('Đã sao chép liên kết');
22474
+ if (showNoti) {
22475
+ this._notifierService.showSuccess('Đã sao chép liên kết');
22476
+ }
22456
22477
  return [2 /*return*/];
22457
22478
  }
22458
22479
  });
22459
22480
  });
22460
22481
  };
22482
+ DataListBase.prototype._onShowFormStartWorkflow = function (rowData) {
22483
+ return __awaiter(this, void 0, void 0, function () {
22484
+ var _this = this;
22485
+ return __generator(this, function (_a) {
22486
+ // Fire event gắn link công việc
22487
+ this._copyLink(rowData, false).then(function (x) {
22488
+ _this.rootContext.fireReplayEvent(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
22489
+ });
22490
+ return [2 /*return*/];
22491
+ });
22492
+ });
22493
+ };
22461
22494
  DataListBase.prototype.getCopyPath = function (rowData) {
22462
22495
  return __awaiter(this, void 0, void 0, function () {
22463
22496
  var locationStrategy, state, baseHref, path, displayField, linkColumn;
@@ -33104,10 +33137,14 @@
33104
33137
  && (this.value == null || this.value == '')) {
33105
33138
  return null;
33106
33139
  }
33140
+ var value = this.value;
33141
+ if (this.funcGetValue) {
33142
+ value = this.funcGetValue(this);
33143
+ }
33107
33144
  return new Filter({
33108
33145
  field: this.field,
33109
33146
  operator: this.compareType,
33110
- value: JSON.stringify(this.value)
33147
+ value: JSON.stringify(value)
33111
33148
  });
33112
33149
  };
33113
33150
  QueryRule.prototype.isGroup = function () {
@@ -33362,14 +33399,26 @@
33362
33399
  itemSourceField.controlType = 'datetime';
33363
33400
  }
33364
33401
  else if (schema instanceof NumberRangeControlSchema) {
33365
- itemSourceField.operators = operatorDateAndNumber;
33402
+ var operators = itemSourceField.control['operators'];
33403
+ if (!operators || !operators.length) {
33404
+ itemSourceField.operators = operatorDateAndNumber;
33405
+ }
33406
+ else {
33407
+ itemSourceField.operators = operators;
33408
+ }
33366
33409
  itemSourceField.controlType = 'number';
33367
33410
  }
33368
33411
  else if (schema instanceof DropdownControlSchema || schema instanceof CheckBoxListControlSchema) {
33369
- itemSourceField.operators = [
33370
- { id: exports.Operator.in, ten: 'Nằm trong' },
33371
- { id: exports.Operator.notIn, ten: 'Không nằm trong' }
33372
- ];
33412
+ var operators = itemSourceField.control['operators'];
33413
+ if (!operators || !operators.length) {
33414
+ itemSourceField.operators = [
33415
+ { id: exports.Operator.in, ten: 'Nằm trong' },
33416
+ { id: exports.Operator.notIn, ten: 'Không nằm trong' }
33417
+ ];
33418
+ }
33419
+ else {
33420
+ itemSourceField.operators = __spread(operators);
33421
+ }
33373
33422
  if (schema.hasOperatorCanBo) {
33374
33423
  itemSourceField.operators.push({
33375
33424
  id: exports.Operator.isCurrentCanBo, ten: 'Là cán bộ hiện tại', _disabled: true
@@ -33399,6 +33448,11 @@
33399
33448
  ];
33400
33449
  itemSourceField.controlType = 'autocomplete-picker';
33401
33450
  }
33451
+ else if (schema instanceof CustomControlSchema) {
33452
+ var operators = itemSourceField.control['operators'];
33453
+ itemSourceField.operators = operators ? operators : [];
33454
+ itemSourceField.controlType = 'custom';
33455
+ }
33402
33456
  else { // Là textbox
33403
33457
  itemSourceField.operators = [
33404
33458
  { id: exports.Operator.equal, ten: 'Bằng' },
@@ -34892,6 +34946,10 @@
34892
34946
  this.data.breadcrumbs = [];
34893
34947
  this._dataSource = [];
34894
34948
  };
34949
+ FileManagerComponent.prototype.setRootFolderId = function (rootFolderId) {
34950
+ this.rootFolderId = rootFolderId;
34951
+ this.data.currentFolderId = this.rootFolderId;
34952
+ };
34895
34953
  FileManagerComponent.prototype.setDatasource = function (dataSource) {
34896
34954
  if (dataSource === void 0) { dataSource = []; }
34897
34955
  this._dataSource = dataSource;
@@ -35068,7 +35126,7 @@
35068
35126
  command: function (event) {
35069
35127
  _this.openObject(item);
35070
35128
  },
35071
- visible: this._deviceDetectorService.isDesktop()
35129
+ visible: (this._deviceDetectorService.isDesktop() && !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly))
35072
35130
  },
35073
35131
  {
35074
35132
  label: 'Ký số cá nhân (SIM)',
@@ -35076,33 +35134,35 @@
35076
35134
  command: function () {
35077
35135
  _this.signKySimFile(item);
35078
35136
  },
35079
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35137
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35080
35138
  },
35081
35139
  {
35082
35140
  label: 'Ký số cá nhân (USB)', icon: 'fas fa-signature',
35083
35141
  command: function () {
35084
35142
  _this.signFile(item);
35085
35143
  },
35086
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35144
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35087
35145
  },
35088
35146
  {
35089
35147
  label: 'Ký số đơn vị (USB)', icon: 'fas fa-signature',
35090
35148
  command: function () {
35091
35149
  _this.signFileDonVi(item);
35092
35150
  },
35093
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35151
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35094
35152
  },
35095
35153
  {
35096
35154
  label: 'Tải về', icon: 'fas fa-download',
35097
35155
  command: function () {
35098
35156
  _this.download(item);
35099
- }
35157
+ },
35158
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35100
35159
  },
35101
35160
  {
35102
35161
  label: 'Sao chép đường dẫn', icon: 'fas fa-link',
35103
35162
  command: function () {
35104
35163
  _this.copyDownloadLink(item);
35105
- }
35164
+ },
35165
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35106
35166
  },
35107
35167
  {
35108
35168
  label: 'Đổi tên', icon: 'fas fa-eraser',
@@ -35115,7 +35175,8 @@
35115
35175
  label: 'Xem các phiên bản khác', icon: 'fas fa-history',
35116
35176
  command: function () {
35117
35177
  _this.openFileVersions(item);
35118
- }
35178
+ },
35179
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35119
35180
  },
35120
35181
  {
35121
35182
  label: 'Xóa tệp tin', icon: 'far fa-trash-alt',
@@ -35852,7 +35913,7 @@
35852
35913
  { type: i0.Component, args: [{
35853
35914
  // tslint:disable-next-line: component-selector
35854
35915
  selector: 'file-manager',
35855
- 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>",
35916
+ 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>",
35856
35917
  providers: [
35857
35918
  {
35858
35919
  provide: forms.NG_VALUE_ACCESSOR,
@@ -35861,7 +35922,7 @@
35861
35922
  },
35862
35923
  ComponentContextService
35863
35924
  ],
35864
- 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}"]
35925
+ 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}"]
35865
35926
  },] }
35866
35927
  ];
35867
35928
  FileManagerComponent.ctorParameters = function () { return [
@@ -37687,6 +37748,8 @@
37687
37748
  this.onRemove = new i0.EventEmitter();
37688
37749
  this.disabled = null;
37689
37750
  this.custom = false;
37751
+ this.customTypeFieldName = 'fieldValue';
37752
+ this.customTypeSeparator = '____';
37690
37753
  }
37691
37754
  Object.defineProperty(QueryBuilderRuleComponent.prototype, "controlValue", {
37692
37755
  // control value cố định, dùng trong trường hợp custom form
@@ -37711,6 +37774,22 @@
37711
37774
  }
37712
37775
  this.handleChangeOperator();
37713
37776
  }
37777
+ if (this.controlType == 'custom') {
37778
+ this.setFuncGetValue();
37779
+ if (this.query.value) {
37780
+ try {
37781
+ this.query[this.customTypeFieldName] = this.query.value['field'];
37782
+ this.query.value = this.query.value['value'];
37783
+ }
37784
+ catch (ex) {
37785
+ }
37786
+ // const arrInfo = this.query.value.split(this.customTypeSeparator);
37787
+ // if (arrInfo.length > 1) {
37788
+ // this.query[this.customTypeFieldName] = arrInfo[0];
37789
+ // this.query.value = arrInfo[1];
37790
+ // }
37791
+ }
37792
+ }
37714
37793
  if (this.itemField != null && this.itemField.controlType == 'datetime' && this.query.value) {
37715
37794
  if (!isValidDate(new Date(this.query.value))) {
37716
37795
  this.custom = true;
@@ -37720,6 +37799,18 @@
37720
37799
  }
37721
37800
  }
37722
37801
  };
37802
+ QueryBuilderRuleComponent.prototype.setFuncGetValue = function () {
37803
+ var _this = this;
37804
+ if (this.controlType == 'custom') {
37805
+ this.query.funcGetValue = function (item) { return ({
37806
+ field: item[_this.customTypeFieldName],
37807
+ value: item.value
37808
+ }); };
37809
+ }
37810
+ else {
37811
+ this.query.funcGetValue = null;
37812
+ }
37813
+ };
37723
37814
  QueryBuilderRuleComponent.prototype.removeGroup = function () {
37724
37815
  this.onRemove.emit(this.query);
37725
37816
  };
@@ -37735,7 +37826,13 @@
37735
37826
  this.resetControl(this.itemField);
37736
37827
  var itemOperator = this.operators.find(function (q) { return q.id == _this.query.compareType; });
37737
37828
  if (!itemOperator) {
37738
- this.query.compareType = null;
37829
+ if (this.operators.length == 1) {
37830
+ this.query.compareType = this.operators[0].id;
37831
+ this.handleChangeOperator();
37832
+ }
37833
+ else {
37834
+ this.query.compareType = null;
37835
+ }
37739
37836
  }
37740
37837
  else if (itemOperator.controlType) {
37741
37838
  this.resetControl(itemOperator);
@@ -37757,6 +37854,7 @@
37757
37854
  if (this.control) {
37758
37855
  this.control.disabled = this.disabled;
37759
37856
  }
37857
+ this.setFuncGetValue();
37760
37858
  }
37761
37859
  };
37762
37860
  QueryBuilderRuleComponent.prototype.handleChangeOperator = function () {
@@ -37796,7 +37894,7 @@
37796
37894
  QueryBuilderRuleComponent.decorators = [
37797
37895
  { type: i0.Component, args: [{
37798
37896
  selector: 'query-builder-rule',
37799
- 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>",
37897
+ 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>",
37800
37898
  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%}}"]
37801
37899
  },] }
37802
37900
  ];
@@ -39367,7 +39465,7 @@
39367
39465
  { id: ɵ3, ten: 'Người dùng' },
39368
39466
  { id: ɵ4, ten: 'Đơn vị' },
39369
39467
  { id: ɵ5, ten: 'Nhóm người dùng' },
39370
- { id: ɵ6, ten: 'Vai trò' }
39468
+ { id: ɵ6, ten: 'Chức vụ' }
39371
39469
  ];
39372
39470
  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;
39373
39471
  var DataSourceUserRule = [
@@ -39717,11 +39815,11 @@
39717
39815
  return new AutoCompletePickerControlSchema({
39718
39816
  field: field,
39719
39817
  label: label,
39720
- title: 'Chọn vai trò',
39721
- placeholder: 'Chọn vai trò',
39818
+ title: 'Chọn chức vụ',
39819
+ placeholder: 'Chọn chức vụ',
39722
39820
  mdWidth: 12,
39723
39821
  baseService: _roleService,
39724
- displayField: 'name',
39822
+ displayField: 'ten',
39725
39823
  fieldPlus: 'code',
39726
39824
  fieldSearchText: ['code'],
39727
39825
  multiple: true,
@@ -39734,8 +39832,8 @@
39734
39832
  fullTextSearch: true
39735
39833
  }),
39736
39834
  new EntityPickerColumn({
39737
- label: 'Tên vai trò',
39738
- code: 'name',
39835
+ label: 'Tên chức vụ',
39836
+ code: 'ten',
39739
39837
  dataType: 'string',
39740
39838
  operator: exports.Operator.contain,
39741
39839
  notInFields: true
@@ -39828,17 +39926,21 @@
39828
39926
  required: true,
39829
39927
  })
39830
39928
  ];
39929
+ if (this.data && this.data.editing) {
39930
+ this.isFormAdd = false;
39931
+ }
39932
+ else {
39933
+ this.isFormAdd = true;
39934
+ }
39831
39935
  };
39832
39936
  StateMachinesConnectionMetadataComponent.prototype.onFormInitialized = function (evt) {
39833
39937
  return __awaiter(this, void 0, void 0, function () {
39834
39938
  return __generator(this, function (_a) {
39835
- if (this.data) {
39836
- this.isFormAdd = false;
39939
+ if (!this.isFormAdd) {
39837
39940
  setMetadataConnection(evt.model, this.data);
39838
39941
  this.source = this.data.source;
39839
39942
  }
39840
39943
  else {
39841
- this.isFormAdd = true;
39842
39944
  evt.model.id = this._commonService.guid();
39843
39945
  evt.model.data = {};
39844
39946
  }
@@ -39919,7 +40021,7 @@
39919
40021
  StateMachinesConnectionMetadataComponent.decorators = [
39920
40022
  { type: i0.Component, args: [{
39921
40023
  selector: 'statemachines-connection-metadata',
39922
- 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>",
40024
+ 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>",
39923
40025
  providers: [ComponentContextService],
39924
40026
  styles: [""]
39925
40027
  },] }
@@ -39953,9 +40055,35 @@
39953
40055
  _super.prototype.ngOnInit.call(this);
39954
40056
  this.doNotCheckBaseService = true;
39955
40057
  this.setting.schema = [
40058
+ this.createCheckboxRule('departmentRules'),
39956
40059
  this.createOrgPickerControlReceiver('departmentIds', 'Đơn vị nhận'),
40060
+ this.createCheckboxRule('departmentViewRules'),
39957
40061
  this.createOrgPickerControlReceiver('departmentViewIds', 'Đơn vị theo dõi'),
39958
40062
  ];
40063
+ if (this.isFormAdd) {
40064
+ if (!this.data.data) {
40065
+ this.data.data = {};
40066
+ }
40067
+ if (this.data.data.departmentRules == null) {
40068
+ this.data.data.departmentRules = [exports.EnumUserRule.NGUOI_NHAN];
40069
+ }
40070
+ if (this.data.data.departmentViewRules == null) {
40071
+ this.data.data.departmentViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
40072
+ }
40073
+ }
40074
+ };
40075
+ StateMachinesConnectionReceiverDepartmentComponent.prototype.createCheckboxRule = function (field) {
40076
+ return new CheckBoxListControlSchema({
40077
+ field: field,
40078
+ label: 'Cán bộ đặc biệt',
40079
+ class: 'rules',
40080
+ dataSource: [
40081
+ { id: exports.EnumUserRule.NGUOI_NHAN, ten: 'Đơn vị nhận bước trước' },
40082
+ { id: exports.EnumUserRule.NGUOI_THEO_DOI, ten: 'Đơn vị theo dõi bước trước' }
40083
+ ],
40084
+ showLabel: false,
40085
+ mdWidth: 12
40086
+ });
39959
40087
  };
39960
40088
  StateMachinesConnectionReceiverDepartmentComponent.prototype.createOrgPickerControlReceiver = function (field, label) {
39961
40089
  var control = createOrgPickerControl(field, label);
@@ -39991,7 +40119,9 @@
39991
40119
  });
39992
40120
  };
39993
40121
  StateMachinesConnectionReceiverDepartmentComponent.prototype.assignFieldPlus = function (dest, source) {
40122
+ dest.departmentRules = source.departmentRules;
39994
40123
  dest.departmentIds = source.departmentIds;
40124
+ dest.departmentViewRules = source.departmentViewRules;
39995
40125
  dest.departmentViewIds = source.departmentViewIds;
39996
40126
  };
39997
40127
  return StateMachinesConnectionReceiverDepartmentComponent;
@@ -40009,6 +40139,7 @@
40009
40139
  ]; };
40010
40140
  StateMachinesConnectionReceiverDepartmentComponent.propDecorators = {
40011
40141
  data: [{ type: i0.Input }],
40142
+ isFormAdd: [{ type: i0.Input }],
40012
40143
  viewOnly: [{ type: i0.Input }]
40013
40144
  };
40014
40145
 
@@ -40026,9 +40157,35 @@
40026
40157
  _super.prototype.ngOnInit.call(this);
40027
40158
  this.doNotCheckBaseService = true;
40028
40159
  this.setting.schema = [
40160
+ this.createCheckboxRule('groupRules'),
40029
40161
  this.createUserGroupPickerControlReceiver('groupIds', 'Nhóm người dùng nhận'),
40162
+ this.createCheckboxRule('groupViewRules'),
40030
40163
  this.createUserGroupPickerControlReceiver('groupViewIds', 'Nhóm người dùng theo dõi'),
40031
40164
  ];
40165
+ if (this.isFormAdd) {
40166
+ if (!this.data.data) {
40167
+ this.data.data = {};
40168
+ }
40169
+ if (this.data.data.groupRules == null) {
40170
+ this.data.data.groupRules = [exports.EnumUserRule.NGUOI_NHAN];
40171
+ }
40172
+ if (this.data.data.groupViewRules == null) {
40173
+ this.data.data.groupViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
40174
+ }
40175
+ }
40176
+ };
40177
+ StateMachinesConnectionReceiverGroupComponent.prototype.createCheckboxRule = function (field) {
40178
+ return new CheckBoxListControlSchema({
40179
+ field: field,
40180
+ label: 'Cán bộ đặc biệt',
40181
+ class: 'rules',
40182
+ dataSource: [
40183
+ { id: exports.EnumUserRule.NGUOI_NHAN, ten: 'Nhóm người dùng nhận bước trước' },
40184
+ { id: exports.EnumUserRule.NGUOI_THEO_DOI, ten: 'Nhóm người dùng theo dõi bước trước' }
40185
+ ],
40186
+ showLabel: false,
40187
+ mdWidth: 12
40188
+ });
40032
40189
  };
40033
40190
  StateMachinesConnectionReceiverGroupComponent.prototype.createUserGroupPickerControlReceiver = function (field, label) {
40034
40191
  var control = createUserGroupPickerControl(this._userGroupService, field, label);
@@ -40064,7 +40221,9 @@
40064
40221
  });
40065
40222
  };
40066
40223
  StateMachinesConnectionReceiverGroupComponent.prototype.assignFieldPlus = function (dest, source) {
40224
+ dest.groupRules = source.groupRules;
40067
40225
  dest.groupIds = source.groupIds;
40226
+ dest.groupViewRules = source.groupViewRules;
40068
40227
  dest.groupViewIds = source.groupViewIds;
40069
40228
  };
40070
40229
  return StateMachinesConnectionReceiverGroupComponent;
@@ -40083,14 +40242,39 @@
40083
40242
  ]; };
40084
40243
  StateMachinesConnectionReceiverGroupComponent.propDecorators = {
40085
40244
  data: [{ type: i0.Input }],
40245
+ isFormAdd: [{ type: i0.Input }],
40086
40246
  viewOnly: [{ type: i0.Input }]
40087
40247
  };
40088
40248
 
40249
+ var DmChucVuService = /** @class */ (function (_super) {
40250
+ __extends(DmChucVuService, _super);
40251
+ function DmChucVuService(http, injector, _moduleConfigService) {
40252
+ var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.canboEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/DM_ChucVu") || this;
40253
+ _this.serviceCode = 'canbo';
40254
+ _this.entityName = 'DM_ChucVu';
40255
+ _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.canboEndpoint;
40256
+ _this._moduleConfig = _moduleConfigService.getConfig();
40257
+ return _this;
40258
+ }
40259
+ return DmChucVuService;
40260
+ }(BaseService));
40261
+ 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" });
40262
+ DmChucVuService.decorators = [
40263
+ { type: i0.Injectable, args: [{
40264
+ providedIn: 'root'
40265
+ },] }
40266
+ ];
40267
+ DmChucVuService.ctorParameters = function () { return [
40268
+ { type: i1$1.HttpClient },
40269
+ { type: i0.Injector },
40270
+ { type: ModuleConfigService }
40271
+ ]; };
40272
+
40089
40273
  var StateMachinesConnectionReceiverRoleComponent = /** @class */ (function (_super) {
40090
40274
  __extends(StateMachinesConnectionReceiverRoleComponent, _super);
40091
- function StateMachinesConnectionReceiverRoleComponent(injector, _roleService) {
40275
+ function StateMachinesConnectionReceiverRoleComponent(injector, _dmChucVuService) {
40092
40276
  var _this = _super.call(this, injector) || this;
40093
- _this._roleService = _roleService;
40277
+ _this._dmChucVuService = _dmChucVuService;
40094
40278
  _this.dataSourceAction = [];
40095
40279
  _this.autoGetDetail = false;
40096
40280
  _this.autoSave = false;
@@ -40100,12 +40284,38 @@
40100
40284
  _super.prototype.ngOnInit.call(this);
40101
40285
  this.doNotCheckBaseService = true;
40102
40286
  this.setting.schema = [
40103
- this.createRolePickerControlReceiver('roleIds', 'Vai trò nhận'),
40104
- this.createRolePickerControlReceiver('roleViewIds', 'Vai trò theo dõi'),
40287
+ this.createCheckboxRule('roleRules'),
40288
+ this.createRolePickerControlReceiver('roleIds', 'Chức vụ nhận'),
40289
+ this.createCheckboxRule('roleViewRules'),
40290
+ this.createRolePickerControlReceiver('roleViewIds', 'Chức vụ theo dõi'),
40105
40291
  ];
40292
+ if (this.isFormAdd) {
40293
+ if (!this.data.data) {
40294
+ this.data.data = {};
40295
+ }
40296
+ if (this.data.data.roleRules == null) {
40297
+ this.data.data.roleRules = [exports.EnumUserRule.NGUOI_NHAN];
40298
+ }
40299
+ if (this.data.data.roleViewRules == null) {
40300
+ this.data.data.roleViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
40301
+ }
40302
+ }
40303
+ };
40304
+ StateMachinesConnectionReceiverRoleComponent.prototype.createCheckboxRule = function (field) {
40305
+ return new CheckBoxListControlSchema({
40306
+ field: field,
40307
+ label: 'Cán bộ đặc biệt',
40308
+ class: 'rules',
40309
+ dataSource: [
40310
+ { id: exports.EnumUserRule.NGUOI_NHAN, ten: 'Chức vụ nhận bước trước' },
40311
+ { id: exports.EnumUserRule.NGUOI_THEO_DOI, ten: 'Chức vụ theo dõi bước trước' }
40312
+ ],
40313
+ showLabel: false,
40314
+ mdWidth: 12
40315
+ });
40106
40316
  };
40107
40317
  StateMachinesConnectionReceiverRoleComponent.prototype.createRolePickerControlReceiver = function (field, label) {
40108
- var control = createRolePickerControl(this._roleService, field, label);
40318
+ var control = createRolePickerControl(this._dmChucVuService, field, label);
40109
40319
  return control;
40110
40320
  };
40111
40321
  StateMachinesConnectionReceiverRoleComponent.prototype.onFormInitialized = function (evt) {
@@ -40138,7 +40348,9 @@
40138
40348
  });
40139
40349
  };
40140
40350
  StateMachinesConnectionReceiverRoleComponent.prototype.assignFieldPlus = function (dest, source) {
40351
+ dest.roleRules = source.roleRules;
40141
40352
  dest.roleIds = source.roleIds;
40353
+ dest.roleViewRules = source.roleViewRules;
40142
40354
  dest.roleViewIds = source.roleViewIds;
40143
40355
  };
40144
40356
  return StateMachinesConnectionReceiverRoleComponent;
@@ -40153,10 +40365,11 @@
40153
40365
  ];
40154
40366
  StateMachinesConnectionReceiverRoleComponent.ctorParameters = function () { return [
40155
40367
  { type: i0.Injector },
40156
- { type: RoleService }
40368
+ { type: DmChucVuService }
40157
40369
  ]; };
40158
40370
  StateMachinesConnectionReceiverRoleComponent.propDecorators = {
40159
40371
  data: [{ type: i0.Input }],
40372
+ isFormAdd: [{ type: i0.Input }],
40160
40373
  viewOnly: [{ type: i0.Input }]
40161
40374
  };
40162
40375
 
@@ -40342,13 +40555,194 @@
40342
40555
  viewOnly: [{ type: i0.Input }]
40343
40556
  };
40344
40557
 
40558
+ var StateMachinesConnectionReceiverConditionComponent = /** @class */ (function (_super) {
40559
+ __extends(StateMachinesConnectionReceiverConditionComponent, _super);
40560
+ function StateMachinesConnectionReceiverConditionComponent(injector, _dmChucVuService, _userGroupService) {
40561
+ var _this = _super.call(this, injector) || this;
40562
+ _this._dmChucVuService = _dmChucVuService;
40563
+ _this._userGroupService = _userGroupService;
40564
+ _this.receiverDynamicRules = [];
40565
+ _this.receiverDynamicViewRules = [];
40566
+ _this.dataSourceAction = [];
40567
+ _this.autoGetDetail = false;
40568
+ _this.autoSave = false;
40569
+ return _this;
40570
+ }
40571
+ StateMachinesConnectionReceiverConditionComponent.prototype.ngOnInit = function () {
40572
+ _super.prototype.ngOnInit.call(this);
40573
+ this.doNotCheckBaseService = true;
40574
+ this.renderDataSourceAction();
40575
+ this.setting.schema = [
40576
+ new CustomControlSchema({
40577
+ field: 'receiverRules',
40578
+ label: 'Người nhận xử lý',
40579
+ mdWidth: 12
40580
+ }),
40581
+ new CustomControlSchema({
40582
+ field: 'receiverViewRules',
40583
+ label: 'Người nhận chỉ xem',
40584
+ mdWidth: 12
40585
+ })
40586
+ ];
40587
+ this.dynamicSchema = [
40588
+ new DropdownControlSchema({
40589
+ field: 'ruleType',
40590
+ label: 'Người dùng',
40591
+ dataSource: DataSourceUserRule,
40592
+ operators: [
40593
+ { id: exports.Operator.in, ten: 'Là' }
40594
+ ]
40595
+ }),
40596
+ new DropdownControlSchema({
40597
+ field: 'userMade',
40598
+ label: 'Người dùng thao tác',
40599
+ valueField: 'code',
40600
+ dataSource: this.dataSourceAction,
40601
+ operators: [
40602
+ { id: exports.Operator.in, ten: 'Thao tác' }
40603
+ ]
40604
+ }),
40605
+ new UserPickerControlSchema({
40606
+ field: 'userIds',
40607
+ label: 'Người dùng đích danh',
40608
+ placeholder: 'Chọn người dùng',
40609
+ mdWidth: 12
40610
+ }),
40611
+ createOrgPickerControl('donViId', 'Đơn vị'),
40612
+ new DropdownControlSchema({
40613
+ field: 'donViCap',
40614
+ label: 'Đơn vị cấp',
40615
+ multiple: true,
40616
+ dataSource: [
40617
+ { id: 1, ten: '1' },
40618
+ { id: 2, ten: '2' },
40619
+ { id: 3, ten: '3' }
40620
+ ]
40621
+ }),
40622
+ createRolePickerControl(this._dmChucVuService, 'roleId', 'Chức vụ'),
40623
+ createUserGroupPickerControl(this._userGroupService, 'groupId', 'Nhóm người dùng'),
40624
+ new NumberRangeControlSchema({
40625
+ field: 'lanThu',
40626
+ label: 'Lần thứ'
40627
+ }),
40628
+ new CustomControlSchema({
40629
+ field: 'customField',
40630
+ label: 'Trường dữ liệu',
40631
+ operators: [
40632
+ { id: exports.Operator.equal, ten: 'Bằng' },
40633
+ { id: exports.Operator.notEqual, ten: 'Không bằng' },
40634
+ { id: exports.Operator.greater, ten: 'Lớn hơn' },
40635
+ { id: exports.Operator.greaterThanEqual, ten: 'Lớn hơn hoặc bằng' },
40636
+ { id: exports.Operator.lower, ten: 'Nhỏ hơn' },
40637
+ { id: exports.Operator.lowerThanEqual, ten: 'Nhỏ hơn hoặc bằng' }
40638
+ ]
40639
+ })
40640
+ ];
40641
+ if (this.data && this.data.data) {
40642
+ this.receiverDynamicRules = this.data.data.receiverRules;
40643
+ this.receiverDynamicViewRules = this.data.data.receiverViewRules;
40644
+ }
40645
+ if (this.isFormAdd) {
40646
+ this.receiverDynamicViewRules = [
40647
+ this.newFilter('ruleType', exports.Operator.in, [
40648
+ exports.EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH,
40649
+ exports.EnumUserRule.NGUOI_NHAN,
40650
+ exports.EnumUserRule.NGUOI_THEO_DOI
40651
+ ])
40652
+ ];
40653
+ }
40654
+ };
40655
+ StateMachinesConnectionReceiverConditionComponent.prototype.renderDataSourceAction = function () {
40656
+ var _this = this;
40657
+ var dataSourceAction = [];
40658
+ if (this.workflowData) {
40659
+ this.workflowData.connections.sort(multipleSort('soThuTu')).forEach(function (action) {
40660
+ var source = _this.workflowData.machines.find(function (q) { return q.id == action.source; });
40661
+ if (source) {
40662
+ var itemAdd_1 = {
40663
+ code: source.code + "___" + action.code,
40664
+ name: action.name,
40665
+ nameLower: action.name.toLowerCase(),
40666
+ ten: action.name,
40667
+ sourceName: source.name
40668
+ };
40669
+ var itemExist = dataSourceAction.find(function (q) { return q.nameLower == itemAdd_1.nameLower; });
40670
+ if (itemExist) {
40671
+ itemExist.ten = itemExist.name + " (" + itemExist.sourceName + ")";
40672
+ itemAdd_1.ten = itemAdd_1.name + " (" + itemAdd_1.sourceName + ")";
40673
+ }
40674
+ dataSourceAction.push(itemAdd_1);
40675
+ }
40676
+ });
40677
+ }
40678
+ this.dataSourceAction = dataSourceAction;
40679
+ };
40680
+ StateMachinesConnectionReceiverConditionComponent.prototype.onFormInitialized = function (evt) {
40681
+ var _a;
40682
+ return __awaiter(this, void 0, void 0, function () {
40683
+ return __generator(this, function (_b) {
40684
+ if (this.data) {
40685
+ this.assignFieldPlus(evt.model, (_a = this.data.data) !== null && _a !== void 0 ? _a : {});
40686
+ }
40687
+ else {
40688
+ evt.model.data = {};
40689
+ }
40690
+ return [2 /*return*/];
40691
+ });
40692
+ });
40693
+ };
40694
+ StateMachinesConnectionReceiverConditionComponent.prototype.assignFieldPlus = function (dest, source) {
40695
+ dest.receiverRules = source.receiverRules;
40696
+ dest.receiverViewRules = source.receiverViewRules;
40697
+ };
40698
+ StateMachinesConnectionReceiverConditionComponent.prototype.getModelData = function () {
40699
+ return __awaiter(this, void 0, void 0, function () {
40700
+ var dataPlus;
40701
+ return __generator(this, function (_b) {
40702
+ dataPlus = {};
40703
+ this.model.data.receiverRules = this.queryBuilder.getQuery();
40704
+ this.model.data.receiverViewRules = this.queryBuilderView.getQuery();
40705
+ this.assignFieldPlus(dataPlus, this.model.data);
40706
+ return [2 /*return*/, dataPlus];
40707
+ });
40708
+ });
40709
+ };
40710
+ return StateMachinesConnectionReceiverConditionComponent;
40711
+ }(DataFormBase));
40712
+ StateMachinesConnectionReceiverConditionComponent.decorators = [
40713
+ { type: i0.Component, args: [{
40714
+ selector: 'statemachines-connection-receiver-condition',
40715
+ 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>",
40716
+ providers: [ComponentContextService],
40717
+ 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)}"]
40718
+ },] }
40719
+ ];
40720
+ StateMachinesConnectionReceiverConditionComponent.ctorParameters = function () { return [
40721
+ { type: i0.Injector },
40722
+ { type: DmChucVuService },
40723
+ { type: UserGroupRealService }
40724
+ ]; };
40725
+ StateMachinesConnectionReceiverConditionComponent.propDecorators = {
40726
+ queryBuilder: [{ type: i0.ViewChild, args: ['queryBuilder', { static: false },] }],
40727
+ queryBuilderView: [{ type: i0.ViewChild, args: ['queryBuilderView', { static: false },] }],
40728
+ workflowData: [{ type: i0.Input }],
40729
+ data: [{ type: i0.Input }],
40730
+ isFormAdd: [{ type: i0.Input }],
40731
+ viewOnly: [{ type: i0.Input }]
40732
+ };
40733
+
40345
40734
  var StateMachinesConnectionReceiverComponent = /** @class */ (function (_super) {
40346
40735
  __extends(StateMachinesConnectionReceiverComponent, _super);
40347
40736
  function StateMachinesConnectionReceiverComponent(injector) {
40348
40737
  var _this = _super.call(this, injector) || this;
40349
40738
  _this.tabDataReceiver = [
40739
+ // {
40740
+ // code: 'user',
40741
+ // icon: 'fa fa-user',
40742
+ // label: ''
40743
+ // },
40350
40744
  {
40351
- code: 'user',
40745
+ code: 'condition',
40352
40746
  icon: 'fa fa-user',
40353
40747
  label: ''
40354
40748
  },
@@ -40374,18 +40768,18 @@
40374
40768
  };
40375
40769
  StateMachinesConnectionReceiverComponent.prototype.getModelData = function () {
40376
40770
  return __awaiter(this, void 0, void 0, function () {
40377
- var dataPlus, modelUser, modelDepartment, modelGroup, roleGroup;
40771
+ var dataPlus, modelCondition, modelDepartment, modelGroup, roleGroup;
40378
40772
  return __generator(this, function (_a) {
40379
40773
  switch (_a.label) {
40380
40774
  case 0:
40381
40775
  dataPlus = {};
40382
- return [4 /*yield*/, this.userForm.getModelData()];
40776
+ return [4 /*yield*/, this.conditionForm.getModelData()];
40383
40777
  case 1:
40384
- modelUser = _a.sent();
40385
- if (modelUser == null) {
40778
+ modelCondition = _a.sent();
40779
+ if (modelCondition == null) {
40386
40780
  return [2 /*return*/, null];
40387
40781
  }
40388
- this.userForm.assignFieldPlus(dataPlus, modelUser);
40782
+ this.conditionForm.assignFieldPlus(dataPlus, modelCondition);
40389
40783
  return [4 /*yield*/, this.departmentForm.getModelData()];
40390
40784
  case 2:
40391
40785
  modelDepartment = _a.sent();
@@ -40417,7 +40811,7 @@
40417
40811
  StateMachinesConnectionReceiverComponent.decorators = [
40418
40812
  { type: i0.Component, args: [{
40419
40813
  selector: 'statemachines-connection-receiver',
40420
- 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>",
40814
+ 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>",
40421
40815
  providers: [ComponentContextService],
40422
40816
  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}"]
40423
40817
  },] }
@@ -40427,22 +40821,24 @@
40427
40821
  ]; };
40428
40822
  StateMachinesConnectionReceiverComponent.propDecorators = {
40429
40823
  userForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverUserComponent, { static: false },] }],
40824
+ conditionForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverConditionComponent, { static: false },] }],
40430
40825
  departmentForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverDepartmentComponent, { static: false },] }],
40431
40826
  groupForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverGroupComponent, { static: false },] }],
40432
40827
  roleForm: [{ type: i0.ViewChild, args: [StateMachinesConnectionReceiverRoleComponent, { static: false },] }],
40433
40828
  designerContext: [{ type: i0.Input }],
40434
40829
  data: [{ type: i0.Input }],
40830
+ isFormAdd: [{ type: i0.Input }],
40435
40831
  workflowData: [{ type: i0.Input }],
40436
40832
  viewOnly: [{ type: i0.Input }]
40437
40833
  };
40438
40834
 
40439
40835
  var StateMachinesConnectionSenderComponent = /** @class */ (function (_super) {
40440
40836
  __extends(StateMachinesConnectionSenderComponent, _super);
40441
- function StateMachinesConnectionSenderComponent(injector, notifierService, _userGroupService, _roleService) {
40837
+ function StateMachinesConnectionSenderComponent(injector, notifierService, _userGroupService, _dmChucVuService) {
40442
40838
  var _this = _super.call(this, injector) || this;
40443
40839
  _this.notifierService = notifierService;
40444
40840
  _this._userGroupService = _userGroupService;
40445
- _this._roleService = _roleService;
40841
+ _this._dmChucVuService = _dmChucVuService;
40446
40842
  _this.dynamicRules = [];
40447
40843
  _this.autoGetDetail = false;
40448
40844
  _this.autoSave = false;
@@ -40472,7 +40868,7 @@
40472
40868
  { id: 3, ten: '3' }
40473
40869
  ]
40474
40870
  }),
40475
- createRolePickerControl(this._roleService, 'roleId', 'Vai trò'),
40871
+ createRolePickerControl(this._dmChucVuService, 'roleId', 'Chức vụ'),
40476
40872
  userGroupPickerControl,
40477
40873
  new DropdownControlSchema({
40478
40874
  field: 'lastStateCode',
@@ -40482,6 +40878,18 @@
40482
40878
  displayField: 'name',
40483
40879
  showLabel: false,
40484
40880
  mdWidth: 12
40881
+ }),
40882
+ new CustomControlSchema({
40883
+ field: 'customField',
40884
+ label: 'Trường dữ liệu',
40885
+ operators: [
40886
+ { id: exports.Operator.equal, ten: 'Bằng' },
40887
+ { id: exports.Operator.notEqual, ten: 'Không bằng' },
40888
+ { id: exports.Operator.greater, ten: 'Lớn hơn' },
40889
+ { id: exports.Operator.greaterThanEqual, ten: 'Lớn hơn hoặc bằng' },
40890
+ { id: exports.Operator.lower, ten: 'Nhỏ hơn' },
40891
+ { id: exports.Operator.lowerThanEqual, ten: 'Nhỏ hơn hoặc bằng' }
40892
+ ]
40485
40893
  })
40486
40894
  ];
40487
40895
  if (this.data && this.data.data) {
@@ -40536,7 +40944,7 @@
40536
40944
  { type: i0.Injector },
40537
40945
  { type: NotifierService },
40538
40946
  { type: UserGroupRealService },
40539
- { type: RoleService }
40947
+ { type: DmChucVuService }
40540
40948
  ]; };
40541
40949
  StateMachinesConnectionSenderComponent.propDecorators = {
40542
40950
  queryBuilder: [{ type: i0.ViewChild, args: ['queryBuilder', { static: false },] }],
@@ -41398,7 +41806,7 @@
41398
41806
  TnAppHelpComponent.decorators = [
41399
41807
  { type: i0.Component, args: [{
41400
41808
  selector: 'li[tn-app-help]',
41401
- 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>",
41809
+ 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>",
41402
41810
  providers: [ComponentContextService],
41403
41811
  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}"]
41404
41812
  },] }
@@ -42213,7 +42621,7 @@
42213
42621
  };
42214
42622
  TnAppNotificationComponent.prototype.handleClicked = function () {
42215
42623
  var domain = this.environment.clientDomain.thongbaoDomain;
42216
- this._router.navigate([domain + "/thongbao-chuadoc"]);
42624
+ window.open(domain + "/thongbao-chuadoc");
42217
42625
  };
42218
42626
  return TnAppNotificationComponent;
42219
42627
  }(ComponentBase));
@@ -43499,10 +43907,11 @@
43499
43907
 
43500
43908
  var UserPickerComponent = /** @class */ (function (_super) {
43501
43909
  __extends(UserPickerComponent, _super);
43502
- function UserPickerComponent(_injector, _userV5Service, _translateService) {
43910
+ function UserPickerComponent(_injector, _userV5Service, _translateService, _dm_ChucVuService) {
43503
43911
  var _this = _super.call(this, _injector) || this;
43504
43912
  _this._userV5Service = _userV5Service;
43505
43913
  _this._translateService = _translateService;
43914
+ _this._dm_ChucVuService = _dm_ChucVuService;
43506
43915
  _this.popupSize = new PopupSize({
43507
43916
  width: 1100,
43508
43917
  height: 900,
@@ -43526,6 +43935,8 @@
43526
43935
  _this.dirty = false;
43527
43936
  _this.tooltip = '';
43528
43937
  _this.hasValue = false;
43938
+ _this.searchSchema = {};
43939
+ _this.searchData = {};
43529
43940
  return _this;
43530
43941
  }
43531
43942
  UserPickerComponent.prototype.ngOnInit = function () {
@@ -43557,6 +43968,21 @@
43557
43968
  code: 'email',
43558
43969
  dataType: 'string',
43559
43970
  fullTextSearch: true
43971
+ }),
43972
+ new EntityPickerColumn({
43973
+ label: 'Chức vụ',
43974
+ code: 'lstTenChucVu',
43975
+ templateFilter: this.filterChucVuRef,
43976
+ }),
43977
+ new EntityPickerColumn({
43978
+ label: 'Giảng viên',
43979
+ code: 'isGiangVien',
43980
+ dataType: 'boolean'
43981
+ }),
43982
+ new EntityPickerColumn({
43983
+ label: 'Chuyên viên',
43984
+ code: 'isChuyenVien',
43985
+ dataType: 'boolean'
43560
43986
  })
43561
43987
  ], mdWidth: 12 }));
43562
43988
  this.fieldSearchText = __spread(this.controlPicker.fieldSearchText);
@@ -43577,8 +44003,24 @@
43577
44003
  this.funcReturnValue = function (value) { return value; };
43578
44004
  this.buildFilterKeyword();
43579
44005
  this.buildSettingEntityPicker();
44006
+ this.createSchemaSearch();
43580
44007
  this.onReady.emit();
43581
44008
  };
44009
+ UserPickerComponent.prototype.createSchemaSearch = function () {
44010
+ return __awaiter(this, void 0, void 0, function () {
44011
+ return __generator(this, function (_a) {
44012
+ this.searchSchema.idChucVus = new DropdownControlSchema({
44013
+ field: 'idChucVus',
44014
+ multiple: true,
44015
+ placeholder: 'Chọn chức vụ',
44016
+ baseService: this._dm_ChucVuService,
44017
+ sortField: 'soThuTu',
44018
+ loadOnInit: true
44019
+ });
44020
+ return [2 /*return*/];
44021
+ });
44022
+ });
44023
+ };
43582
44024
  UserPickerComponent.prototype.buildFilterKeyword = function () {
43583
44025
  var _this = this;
43584
44026
  if (this.fieldSearchText.length == 1) {
@@ -43679,7 +44121,8 @@
43679
44121
  };
43680
44122
  UserPickerComponent.prototype.getData = function (keyWord) {
43681
44123
  return __awaiter(this, void 0, void 0, function () {
43682
- var filters, dataSource;
44124
+ var filters, filterOrs_1, dataSource;
44125
+ var _this = this;
43683
44126
  return __generator(this, function (_a) {
43684
44127
  switch (_a.label) {
43685
44128
  case 0:
@@ -43694,6 +44137,13 @@
43694
44137
  filters.push(this.newFilter(this.controlPicker.valueField, exports.Operator.notEqual, this.value));
43695
44138
  }
43696
44139
  }
44140
+ if (this.searchData.idChucVus && this.searchData.idChucVus.length > 0) {
44141
+ filterOrs_1 = [];
44142
+ this.searchData.idChucVus.forEach(function (idChucVu) {
44143
+ filterOrs_1.push(_this.newFilter('IdsChucVu', exports.Operator.contain, idChucVu));
44144
+ });
44145
+ filters.push(this.newFilterContainer.apply(this, __spread(['or'], filterOrs_1)));
44146
+ }
43697
44147
  return [4 /*yield*/, appendDefaultFilter(filters, this.control.defaultFilters)];
43698
44148
  case 1:
43699
44149
  _a.sent();
@@ -44004,7 +44454,7 @@
44004
44454
  UserPickerComponent.decorators = [
44005
44455
  { type: i0.Component, args: [{
44006
44456
  selector: 'user-picker',
44007
- 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>",
44457
+ 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>",
44008
44458
  providers: [
44009
44459
  {
44010
44460
  provide: forms.NG_VALUE_ACCESSOR,
@@ -44019,9 +44469,11 @@
44019
44469
  UserPickerComponent.ctorParameters = function () { return [
44020
44470
  { type: i0.Injector },
44021
44471
  { type: UserV5Service },
44022
- { type: i2.TranslateService }
44472
+ { type: i2.TranslateService },
44473
+ { type: DmChucVuService }
44023
44474
  ]; };
44024
44475
  UserPickerComponent.propDecorators = {
44476
+ filterChucVuRef: [{ type: i0.ViewChild, args: ['filterChucVuRef', { static: true },] }],
44025
44477
  control: [{ type: i0.Input }],
44026
44478
  popupSize: [{ type: i0.Input }],
44027
44479
  multiple: [{ type: i0.Input }],
@@ -45042,10 +45494,6 @@
45042
45494
  }());
45043
45495
  var WorkflowTargetDefaultValue = /** @class */ (function () {
45044
45496
  function WorkflowTargetDefaultValue() {
45045
- this.dicDefaultValue = {};
45046
- this.dicDefaultValueByWorkflow = {};
45047
- this.dicByTargetCanEdit = {};
45048
- this.dicByTargetOnlyView = {};
45049
45497
  }
45050
45498
  return WorkflowTargetDefaultValue;
45051
45499
  }());
@@ -45107,22 +45555,21 @@
45107
45555
  return __awaiter(this, void 0, void 0, function () {
45108
45556
  var nextMachine;
45109
45557
  var _this = this;
45110
- return __generator(this, function (_a) {
45111
- switch (_a.label) {
45558
+ return __generator(this, function (_g) {
45559
+ switch (_g.label) {
45112
45560
  case 0:
45113
45561
  nextMachine = this.workflow.data.machines.find(function (q) { return q.id == _this.action.target; });
45114
45562
  this.isActionKetThuc = nextMachine.type == exports.EnumStateType.STOP;
45115
45563
  if (this.isActionKetThuc) {
45116
45564
  this.mainTabData[1].active = true;
45117
45565
  }
45118
- if (!this.checkNeedGetUser()) return [3 /*break*/, 2];
45119
45566
  return [4 /*yield*/, this.getUserForProcessWorkflow()];
45120
45567
  case 1:
45121
- if (!(_a.sent())) {
45568
+ // if (this.checkNeedGetUser()) {
45569
+ if (!(_g.sent())) {
45122
45570
  return [2 /*return*/];
45123
45571
  }
45124
- _a.label = 2;
45125
- case 2:
45572
+ // }
45126
45573
  this.setDataAndTriggerReady();
45127
45574
  return [2 /*return*/];
45128
45575
  }
@@ -45130,7 +45577,7 @@
45130
45577
  });
45131
45578
  };
45132
45579
  ProcessWorkflowFormComponent.prototype.checkNeedGetUser = function () {
45133
- var e_1, _a;
45580
+ var e_1, _g;
45134
45581
  this.ruleUsers = [];
45135
45582
  if (!this.action.data.infoReceiver || !this.action.data.infoReceiver.length)
45136
45583
  return false;
@@ -45138,8 +45585,8 @@
45138
45585
  this.action.data.infoReceiver[0].lanThu = 1;
45139
45586
  }
45140
45587
  try {
45141
- for (var _b = __values(this.action.data.infoReceiver), _c = _b.next(); !_c.done; _c = _b.next()) {
45142
- var infoReceiver = _c.value;
45588
+ for (var _h = __values(this.action.data.infoReceiver), _j = _h.next(); !_j.done; _j = _h.next()) {
45589
+ var infoReceiver = _j.value;
45143
45590
  if (this.checkNeedGetUserByUserData(infoReceiver.user)) {
45144
45591
  return true;
45145
45592
  }
@@ -45151,7 +45598,7 @@
45151
45598
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
45152
45599
  finally {
45153
45600
  try {
45154
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
45601
+ if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
45155
45602
  }
45156
45603
  finally { if (e_1) throw e_1.error; }
45157
45604
  }
@@ -45161,35 +45608,26 @@
45161
45608
  return __awaiter(this, void 0, void 0, function () {
45162
45609
  var sourceMachine, resultGetUserInProcessForm, dataUserInProcessForm;
45163
45610
  var _this = this;
45164
- return __generator(this, function (_a) {
45165
- switch (_a.label) {
45611
+ return __generator(this, function (_g) {
45612
+ switch (_g.label) {
45166
45613
  case 0:
45167
45614
  sourceMachine = this.workflow.data.machines.find(function (q) { return q.id == _this.action.source; });
45168
- return [4 /*yield*/, this._stateMachinesService.getUserInProcessForm(this.workflow.code, sourceMachine.code, this.action.code, this.item.id)];
45615
+ return [4 /*yield*/, this.businessSetting.baseService.getUserInProcessForm(this.workflow.code, sourceMachine.code, this.action.code, this.item.id)];
45169
45616
  case 1:
45170
- resultGetUserInProcessForm = _a.sent();
45617
+ resultGetUserInProcessForm = _g.sent();
45171
45618
  if (!resultGetUserInProcessForm.success) {
45172
45619
  this.handleResponse(resultGetUserInProcessForm);
45173
45620
  return [2 /*return*/, false];
45174
45621
  }
45175
45622
  dataUserInProcessForm = resultGetUserInProcessForm.data;
45176
- if (dataUserInProcessForm.dicByRuleType) {
45177
- Object.keys(dataUserInProcessForm.dicByRuleType).forEach(function (key) {
45178
- _this.initValueForTargetForm.dicDefaultValue[key] = dataUserInProcessForm.dicByRuleType[key];
45179
- });
45180
- }
45181
- if (dataUserInProcessForm.dicByAction) {
45182
- Object.keys(dataUserInProcessForm.dicByAction).forEach(function (key) {
45183
- _this.initValueForTargetForm.dicDefaultValueByWorkflow[key.toUpperCase()] = dataUserInProcessForm.dicByAction[key];
45184
- });
45185
- }
45186
- if (dataUserInProcessForm.dicByTargetCanEdit) {
45187
- this.initValueForTargetForm.dicByTargetCanEdit = dataUserInProcessForm.dicByTargetCanEdit;
45188
- }
45189
- if (dataUserInProcessForm.dicByTargetOnlyView) {
45190
- this.initValueForTargetForm.dicByTargetOnlyView = dataUserInProcessForm.dicByTargetOnlyView;
45191
- }
45192
- this.infoReceiver = dataUserInProcessForm.infoReceiver;
45623
+ this.initValueForTargetForm.lstUserId = dataUserInProcessForm.lstUserId;
45624
+ this.initValueForTargetForm.lstUserViewId = dataUserInProcessForm.lstUserViewId;
45625
+ this.initValueForTargetForm.lstDonViId = dataUserInProcessForm.lstDonViId;
45626
+ this.initValueForTargetForm.lstDonViViewId = dataUserInProcessForm.lstDonViViewId;
45627
+ this.initValueForTargetForm.lstGroupId = dataUserInProcessForm.lstGroupId;
45628
+ this.initValueForTargetForm.lstGroupViewId = dataUserInProcessForm.lstGroupViewId;
45629
+ this.initValueForTargetForm.lstRoleId = dataUserInProcessForm.lstRoleId;
45630
+ this.initValueForTargetForm.lstRoleViewId = dataUserInProcessForm.lstRoleViewId;
45193
45631
  return [2 /*return*/, true];
45194
45632
  }
45195
45633
  });
@@ -45204,39 +45642,45 @@
45204
45642
  return false;
45205
45643
  };
45206
45644
  ProcessWorkflowFormComponent.prototype.setDataAndTriggerReady = function () {
45645
+ var _a, _b, _c, _d, _e, _f;
45207
45646
  this.dataAllowEdit = {
45208
45647
  rules: [],
45209
45648
  userIds: [],
45210
45649
  ruleInWorkflows: [],
45211
- departmentIds: this.action.data.departmentIds,
45212
- groupIds: this.action.data.groupIds,
45213
- roleIds: this.action.data.roleIds
45650
+ departmentIds: (_a = this.action.data.departmentIds) !== null && _a !== void 0 ? _a : [],
45651
+ groupIds: (_b = this.action.data.groupIds) !== null && _b !== void 0 ? _b : [],
45652
+ roleIds: (_c = this.action.data.roleIds) !== null && _c !== void 0 ? _c : []
45214
45653
  };
45215
45654
  this.dataOnlyView = {
45216
45655
  rules: [],
45217
45656
  userIds: [],
45218
45657
  ruleInWorkflows: [],
45219
- departmentIds: this.action.data.departmentViewIds,
45220
- groupIds: this.action.data.groupViewIds,
45221
- roleIds: this.action.data.roleViewIds
45658
+ departmentIds: (_d = this.action.data.departmentViewIds) !== null && _d !== void 0 ? _d : [],
45659
+ groupIds: (_e = this.action.data.groupViewIds) !== null && _e !== void 0 ? _e : [],
45660
+ roleIds: (_f = this.action.data.roleViewIds) !== null && _f !== void 0 ? _f : []
45222
45661
  };
45223
- if (this.infoReceiver) {
45224
- if (this.infoReceiver.user) {
45225
- this.dataAllowEdit.userIds = this.infoReceiver.user.ids;
45226
- this.dataAllowEdit.rules = this.infoReceiver.user.rules;
45227
- this.dataAllowEdit.ruleInWorkflows = this.infoReceiver.user.ruleInWorkflows;
45228
- }
45229
- if (this.infoReceiver.userView) {
45230
- this.dataOnlyView.userIds = this.infoReceiver.userView.ids;
45231
- this.dataOnlyView.rules = this.infoReceiver.userView.rules;
45232
- this.dataOnlyView.ruleInWorkflows = this.infoReceiver.userView.ruleInWorkflows;
45233
- }
45234
- }
45662
+ this.addDistinct(this.dataAllowEdit.userIds, this.initValueForTargetForm.lstUserId);
45663
+ this.addDistinct(this.dataAllowEdit.departmentIds, this.initValueForTargetForm.lstDonViId);
45664
+ this.addDistinct(this.dataAllowEdit.groupIds, this.initValueForTargetForm.lstGroupId);
45665
+ this.addDistinct(this.dataAllowEdit.roleIds, this.initValueForTargetForm.lstRoleId);
45666
+ this.addDistinct(this.dataOnlyView.userIds, this.initValueForTargetForm.lstUserViewId);
45667
+ this.addDistinct(this.dataOnlyView.departmentIds, this.initValueForTargetForm.lstDonViViewId);
45668
+ this.addDistinct(this.dataOnlyView.groupIds, this.initValueForTargetForm.lstGroupViewId);
45669
+ this.addDistinct(this.dataOnlyView.roleIds, this.initValueForTargetForm.lstRoleViewId);
45235
45670
  this.formReady = true;
45236
45671
  };
45672
+ ProcessWorkflowFormComponent.prototype.addDistinct = function (dest, source) {
45673
+ if (!source || !source.length)
45674
+ return;
45675
+ source.forEach(function (item) {
45676
+ if (dest.indexOf(item) == -1) {
45677
+ dest.push(item);
45678
+ }
45679
+ });
45680
+ };
45237
45681
  ProcessWorkflowFormComponent.prototype.onFormInitialized = function (evt) {
45238
45682
  return __awaiter(this, void 0, void 0, function () {
45239
- return __generator(this, function (_a) {
45683
+ return __generator(this, function (_g) {
45240
45684
  evt.model.id = this._commonService.guid();
45241
45685
  return [2 /*return*/];
45242
45686
  });
@@ -45244,7 +45688,7 @@
45244
45688
  };
45245
45689
  ProcessWorkflowFormComponent.prototype.validateForm = function () {
45246
45690
  return __awaiter(this, void 0, void 0, function () {
45247
- return __generator(this, function (_a) {
45691
+ return __generator(this, function (_g) {
45248
45692
  this.model.data.userIds = this.formTargetAllowEdit.model.data.userIds;
45249
45693
  this.model.data.departmentIds = this.formTargetAllowEdit.model.data.departmentIds;
45250
45694
  this.model.data.groupIds = this.formTargetAllowEdit.model.data.groupIds;
@@ -45258,7 +45702,7 @@
45258
45702
  && this.isEmptyArray(this.model.data.departmentIds)
45259
45703
  && this.isEmptyArray(this.model.data.groupIds)
45260
45704
  && this.isEmptyArray(this.model.data.roleIds)) {
45261
- 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ò)');
45705
+ 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ụ)');
45262
45706
  return [2 /*return*/, false];
45263
45707
  }
45264
45708
  }
@@ -45338,13 +45782,13 @@
45338
45782
 
45339
45783
  var ProcessWorkflowTargetComponent = /** @class */ (function (_super) {
45340
45784
  __extends(ProcessWorkflowTargetComponent, _super);
45341
- function ProcessWorkflowTargetComponent(_injector, _stateMachinesService, _coCauToChucService, _userGroupService, _roleService) {
45785
+ function ProcessWorkflowTargetComponent(_injector, _stateMachinesService, _coCauToChucService, _userGroupService, _dmChucVuService) {
45342
45786
  var _this = _super.call(this, _injector) || this;
45343
45787
  _this._injector = _injector;
45344
45788
  _this._stateMachinesService = _stateMachinesService;
45345
45789
  _this._coCauToChucService = _coCauToChucService;
45346
45790
  _this._userGroupService = _userGroupService;
45347
- _this._roleService = _roleService;
45791
+ _this._dmChucVuService = _dmChucVuService;
45348
45792
  return _this;
45349
45793
  }
45350
45794
  ProcessWorkflowTargetComponent.prototype.ngOnInit = function () {
@@ -45370,41 +45814,8 @@
45370
45814
  // this.createUserPickerControl('idCapTrenGanNhats', 'Cán bộ cấp trên gần nhất'),
45371
45815
  this._createCoCauToChucControl('departmentIds', 'Đơn vị'),
45372
45816
  this._createUserGroupPickerControl('groupIds', 'Nhóm người dùng'),
45373
- this._createRolePickerControl('roleIds', 'Vai trò')
45817
+ this._createRolePickerControl('roleIds', 'Chức vụ')
45374
45818
  ];
45375
- // Ghép thêm các user theo rule vào userIds
45376
- this.addUserIdFromDicByRule(this.initValue.dicDefaultValue, this.data.rules);
45377
- // Ghép thêm các user theo rule in workflow vào userIds
45378
- this.addUserIdFromDicByRule(this.initValue.dicDefaultValueByWorkflow, this.data.ruleInWorkflows);
45379
- // Ghép thêm các value từ dicByTargetType vào các control
45380
- if (this.data.rules.some(function (q) { return q == exports.EnumUserRule.NGUOI_NHAN; })) {
45381
- this.addValueFromDicByTarget(this.initValue.dicByTargetCanEdit);
45382
- }
45383
- // Ghép thêm các value từ dicByTargetType vào các control
45384
- if (this.data.rules.some(function (q) { return q == exports.EnumUserRule.NGUOI_THEO_DOI; })) {
45385
- this.addValueFromDicByTarget(this.initValue.dicByTargetOnlyView);
45386
- }
45387
- };
45388
- ProcessWorkflowTargetComponent.prototype.addUserIdFromDicByRule = function (dicSource, rules) {
45389
- var _this = this;
45390
- Object.keys(dicSource)
45391
- .filter(function (x) { return rules.some(function (q) { return q == x; }); })
45392
- .forEach(function (rule) {
45393
- _this.addDistinctToList(_this.data.userIds, dicSource[rule]);
45394
- });
45395
- };
45396
- ProcessWorkflowTargetComponent.prototype.addValueFromDicByTarget = function (dicByTargetType) {
45397
- this.addDistinctToList(this.data.userIds, dicByTargetType[exports.EnumTargetType.USER]);
45398
- this.addDistinctToList(this.data.departmentIds, dicByTargetType[exports.EnumTargetType.DEPARTMENT]);
45399
- this.addDistinctToList(this.data.groupIds, dicByTargetType[exports.EnumTargetType.GROUP]);
45400
- this.addDistinctToList(this.data.roleIds, dicByTargetType[exports.EnumTargetType.ROLE]);
45401
- };
45402
- ProcessWorkflowTargetComponent.prototype.addDistinctToList = function (lstDest, lstSource) {
45403
- lstSource.forEach(function (item) {
45404
- if (!lstDest.some(function (q) { return q == item; })) {
45405
- lstDest.push(item);
45406
- }
45407
- });
45408
45819
  };
45409
45820
  ProcessWorkflowTargetComponent.prototype._createUserPickerControl = function (field, label, multiple) {
45410
45821
  if (multiple === void 0) { multiple = true; }
@@ -45420,7 +45831,7 @@
45420
45831
  return createUserGroupPickerControl(this._userGroupService, field, label);
45421
45832
  };
45422
45833
  ProcessWorkflowTargetComponent.prototype._createRolePickerControl = function (field, label) {
45423
- return createRolePickerControl(this._roleService, field, label);
45834
+ return createRolePickerControl(this._dmChucVuService, field, label);
45424
45835
  };
45425
45836
  ProcessWorkflowTargetComponent.prototype.onFormInitialized = function (evt) {
45426
45837
  return __awaiter(this, void 0, void 0, function () {
@@ -45447,7 +45858,7 @@
45447
45858
  { type: StateMachinesService },
45448
45859
  { type: CoCauToChucService },
45449
45860
  { type: UserGroupRealService },
45450
- { type: RoleService }
45861
+ { type: DmChucVuService }
45451
45862
  ]; };
45452
45863
  ProcessWorkflowTargetComponent.propDecorators = {
45453
45864
  data: [{ type: i0.Input }],
@@ -45811,29 +46222,30 @@
45811
46222
  _this._fileControls.forEach(function (control) {
45812
46223
  key = control.serviceCode + "/" + control.entity + "/" + control._entityKey;
45813
46224
  if (dataFile[key]) {
45814
- control.setDatasource(dataFile[key]);
46225
+ control.setRootFolderId(dataFile[key].folderId);
46226
+ control.setDatasource(dataFile[key].lstFile);
45815
46227
  }
45816
46228
  });
45817
46229
  }); });
45818
46230
  };
45819
46231
  FileDataService.prototype.processDatasourceFile = function (fileData) {
46232
+ var _this = this;
45820
46233
  if (fileData === void 0) { fileData = []; }
45821
- var dic = {};
45822
- var key = '';
45823
- fileData.forEach(function (file) {
45824
- key = file.serviceCode + "/" + file.entity + "/" + file.entityKey;
45825
- // Nếu hết file của 1 control
45826
- if (!dic[key]) {
45827
- dic[key] = [];
45828
- }
45829
- dic[key].push(file);
45830
- });
45831
- Object.keys(dic).forEach(function (key) {
45832
- dic[key].sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
46234
+ var result = {};
46235
+ Object.keys(fileData).forEach(function (key) {
46236
+ fileData[key].lstFile.sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
45833
46237
  { name: 'name', primer: function (a) { return a.toLowerCase(); } } // Order theo tên (nhưng phải toLower vì T < b < t)
45834
46238
  ));
46239
+ var data = fileData[key];
46240
+ result[_this.generateKey(data.serviceCode, data.entity, data.entityKey)] = {
46241
+ folderId: key,
46242
+ lstFile: fileData[key].lstFile
46243
+ };
45835
46244
  });
45836
- return dic;
46245
+ return result;
46246
+ };
46247
+ FileDataService.prototype.generateKey = function (serviceCode, entity, entityKey) {
46248
+ return serviceCode + "/" + entity + "/" + entityKey;
45837
46249
  };
45838
46250
  return FileDataService;
45839
46251
  }());
@@ -45849,13 +46261,13 @@
45849
46261
 
45850
46262
  var WorkflowHistoryNewComponent = /** @class */ (function (_super) {
45851
46263
  __extends(WorkflowHistoryNewComponent, _super);
45852
- function WorkflowHistoryNewComponent(_injector, _workflowHistoryService, _coCauToChucService, _userGroupService, _roleService, _fileDataService) {
46264
+ function WorkflowHistoryNewComponent(_injector, _workflowHistoryService, _coCauToChucService, _userGroupService, _dmChucVuService, _fileDataService) {
45853
46265
  var _this = _super.call(this, _injector) || this;
45854
46266
  _this._injector = _injector;
45855
46267
  _this._workflowHistoryService = _workflowHistoryService;
45856
46268
  _this._coCauToChucService = _coCauToChucService;
45857
46269
  _this._userGroupService = _userGroupService;
45858
- _this._roleService = _roleService;
46270
+ _this._dmChucVuService = _dmChucVuService;
45859
46271
  // 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
45860
46272
  // Ở form này thì chỉ xem lịch sử chứ k dc làm gì hết
45861
46273
  _this.isRelativeForm = false;
@@ -45918,8 +46330,8 @@
45918
46330
  new ModelSchema({ field: 'donViViewIds', name: 'Đơn vị theo dõi', fullName: 'Đơn vị theo dõi', description: '' }),
45919
46331
  new ModelSchema({ field: 'groupIds', name: 'Nhóm người dùng nhận', fullName: 'Nhóm người dùng nhận', description: '' }),
45920
46332
  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: '' }),
45921
- new ModelSchema({ field: 'roleIds', name: 'Vai trò nhận', fullName: 'Vai trò nhận', description: '' }),
45922
- new ModelSchema({ field: 'roleViewIds', name: 'Vai trò theo dõi', fullName: 'Vai trò theo dõi', description: '' }),
46333
+ new ModelSchema({ field: 'roleIds', name: 'Chức vụ nhận', fullName: 'Chức vụ nhận', description: '' }),
46334
+ new ModelSchema({ field: 'roleViewIds', name: 'Chức vụ theo dõi', fullName: 'Chức vụ theo dõi', description: '' }),
45923
46335
  new ModelSchema({ field: 'note', name: 'Ý kiến', fullName: 'Ý kiến', description: '' })
45924
46336
  ];
45925
46337
  this.setting.cols = [
@@ -45991,8 +46403,7 @@
45991
46403
  new ColumnSchemaBase({
45992
46404
  field: 'roleIds',
45993
46405
  width: '15%',
45994
- baseService: this._roleService,
45995
- displayField: 'name',
46406
+ baseService: this._dmChucVuService,
45996
46407
  multiple: true,
45997
46408
  visible: false,
45998
46409
  forceGetData: true
@@ -46000,8 +46411,7 @@
46000
46411
  new ColumnSchemaBase({
46001
46412
  field: 'roleViewIds',
46002
46413
  width: '15%',
46003
- baseService: this._roleService,
46004
- displayField: 'name',
46414
+ baseService: this._dmChucVuService,
46005
46415
  multiple: true,
46006
46416
  visible: false,
46007
46417
  forceGetData: true
@@ -46218,7 +46628,7 @@
46218
46628
  WorkflowHistoryNewComponent.decorators = [
46219
46629
  { type: i0.Component, args: [{
46220
46630
  selector: 'workflow-history-new',
46221
- 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>",
46631
+ 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>",
46222
46632
  providers: [ComponentContextService],
46223
46633
  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}"]
46224
46634
  },] }
@@ -46228,7 +46638,7 @@
46228
46638
  { type: WorkflowHistoryService },
46229
46639
  { type: CoCauToChucService },
46230
46640
  { type: UserGroupRealService },
46231
- { type: RoleService },
46641
+ { type: DmChucVuService },
46232
46642
  { type: FileDataService }
46233
46643
  ]; };
46234
46644
  WorkflowHistoryNewComponent.propDecorators = {
@@ -47034,6 +47444,11 @@
47034
47444
  };
47035
47445
  CongviecDinhkemService.prototype.getDetailItem = function (serviceCode, entity, entityKey, fieldDisplay) {
47036
47446
  var serviceCodeEndpoint = this.env.apiDomain[serviceCode + "Endpoint"];
47447
+ if (!serviceCodeEndpoint) {
47448
+ var notifierService = this._injector.get(NotifierService);
47449
+ notifierService.showWarning("Kh\u00F4ng l\u1EA5y \u0111\u01B0\u1EE3c th\u00F4ng tin endpoint c\u1EE7a d\u1ECBch v\u1EE5 " + serviceCode);
47450
+ return new Promise(function (res, rej) { return res({ success: true, data: [] }); });
47451
+ }
47037
47452
  var uri = serviceCodeEndpoint + "/" + this._moduleConfigService.getConfig().environment.apiVersion + "/" + entity + "/GetData";
47038
47453
  var gridInfo = new GridInfo({
47039
47454
  fields: fieldDisplay,
@@ -47043,6 +47458,150 @@
47043
47458
  });
47044
47459
  return this._http.post(uri, gridInfo).toPromise();
47045
47460
  };
47461
+ CongviecDinhkemService.prototype.getDetailItems = function (dicGrouped) {
47462
+ return __awaiter(this, void 0, void 0, function () {
47463
+ var result, serviceCodes, _loop_1, this_1, serviceCodes_1, serviceCodes_1_1, serviceCode, state_1, e_1_1;
47464
+ var e_1, _a;
47465
+ return __generator(this, function (_b) {
47466
+ switch (_b.label) {
47467
+ case 0:
47468
+ result = {};
47469
+ serviceCodes = Object.keys(dicGrouped);
47470
+ _loop_1 = function (serviceCode) {
47471
+ var entitys, _loop_2, entitys_1, entitys_1_1, entity, serviceCodeEndpoint, _loop_3, entitys_2, entitys_2_1, entity, e_2_1;
47472
+ var e_3, _a, e_2, _b;
47473
+ return __generator(this, function (_c) {
47474
+ switch (_c.label) {
47475
+ case 0:
47476
+ result[serviceCode] = {};
47477
+ entitys = Object.keys(dicGrouped[serviceCode]);
47478
+ _loop_2 = function (entity) {
47479
+ result[serviceCode][entity] = {};
47480
+ dicGrouped[serviceCode][entity].lstId.forEach(function (entityKey) {
47481
+ result[serviceCode][entity][entityKey] = 'Không tìm thấy bản ghi';
47482
+ });
47483
+ };
47484
+ try {
47485
+ 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()) {
47486
+ entity = entitys_1_1.value;
47487
+ _loop_2(entity);
47488
+ }
47489
+ }
47490
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
47491
+ finally {
47492
+ try {
47493
+ if (entitys_1_1 && !entitys_1_1.done && (_a = entitys_1.return)) _a.call(entitys_1);
47494
+ }
47495
+ finally { if (e_3) throw e_3.error; }
47496
+ }
47497
+ serviceCodeEndpoint = this_1.env.apiDomain[serviceCode + "Endpoint"];
47498
+ if (!serviceCodeEndpoint) {
47499
+ return [2 /*return*/, { value: void 0 }];
47500
+ }
47501
+ _loop_3 = function (entity) {
47502
+ var dataByEntity, uri, filters, gridInfo, data, err_1;
47503
+ return __generator(this, function (_a) {
47504
+ switch (_a.label) {
47505
+ case 0:
47506
+ dataByEntity = dicGrouped[serviceCode][entity];
47507
+ uri = serviceCodeEndpoint + "/" + this_1._moduleConfigService.getConfig().environment.apiVersion + "/" + entity + "/GetAllByFilter";
47508
+ filters = [];
47509
+ if (dataByEntity.lstId.length == 1) {
47510
+ filters.push(this_1.newFilter('id', exports.Operator.equal, dataByEntity.lstId[0]));
47511
+ }
47512
+ else {
47513
+ filters.push(this_1.newFilter('id', exports.Operator.in, dataByEntity.lstId));
47514
+ }
47515
+ gridInfo = new GridInfo({
47516
+ fields: "id," + dataByEntity.fieldHienThi,
47517
+ pageInfo: { page: 1, pageSize: dataByEntity.lstId.length },
47518
+ filters: filters,
47519
+ sorts: []
47520
+ });
47521
+ _a.label = 1;
47522
+ case 1:
47523
+ _a.trys.push([1, 3, , 4]);
47524
+ return [4 /*yield*/, (this_1._http.post(uri, gridInfo).toPromise())];
47525
+ case 2:
47526
+ data = _a.sent();
47527
+ if (data.success && data.data && data.data.length) {
47528
+ data.data.forEach(function (itemDetail) {
47529
+ result[serviceCode][entity][itemDetail.id] = itemDetail[dataByEntity.fieldHienThi];
47530
+ });
47531
+ }
47532
+ return [3 /*break*/, 4];
47533
+ case 3:
47534
+ err_1 = _a.sent();
47535
+ console.log(err_1);
47536
+ return [3 /*break*/, 4];
47537
+ case 4: return [2 /*return*/];
47538
+ }
47539
+ });
47540
+ };
47541
+ _c.label = 1;
47542
+ case 1:
47543
+ _c.trys.push([1, 6, 7, 8]);
47544
+ entitys_2 = (e_2 = void 0, __values(entitys)), entitys_2_1 = entitys_2.next();
47545
+ _c.label = 2;
47546
+ case 2:
47547
+ if (!!entitys_2_1.done) return [3 /*break*/, 5];
47548
+ entity = entitys_2_1.value;
47549
+ return [5 /*yield**/, _loop_3(entity)];
47550
+ case 3:
47551
+ _c.sent();
47552
+ _c.label = 4;
47553
+ case 4:
47554
+ entitys_2_1 = entitys_2.next();
47555
+ return [3 /*break*/, 2];
47556
+ case 5: return [3 /*break*/, 8];
47557
+ case 6:
47558
+ e_2_1 = _c.sent();
47559
+ e_2 = { error: e_2_1 };
47560
+ return [3 /*break*/, 8];
47561
+ case 7:
47562
+ try {
47563
+ if (entitys_2_1 && !entitys_2_1.done && (_b = entitys_2.return)) _b.call(entitys_2);
47564
+ }
47565
+ finally { if (e_2) throw e_2.error; }
47566
+ return [7 /*endfinally*/];
47567
+ case 8: return [2 /*return*/];
47568
+ }
47569
+ });
47570
+ };
47571
+ this_1 = this;
47572
+ _b.label = 1;
47573
+ case 1:
47574
+ _b.trys.push([1, 6, 7, 8]);
47575
+ serviceCodes_1 = __values(serviceCodes), serviceCodes_1_1 = serviceCodes_1.next();
47576
+ _b.label = 2;
47577
+ case 2:
47578
+ if (!!serviceCodes_1_1.done) return [3 /*break*/, 5];
47579
+ serviceCode = serviceCodes_1_1.value;
47580
+ return [5 /*yield**/, _loop_1(serviceCode)];
47581
+ case 3:
47582
+ state_1 = _b.sent();
47583
+ if (typeof state_1 === "object")
47584
+ return [2 /*return*/, state_1.value];
47585
+ _b.label = 4;
47586
+ case 4:
47587
+ serviceCodes_1_1 = serviceCodes_1.next();
47588
+ return [3 /*break*/, 2];
47589
+ case 5: return [3 /*break*/, 8];
47590
+ case 6:
47591
+ e_1_1 = _b.sent();
47592
+ e_1 = { error: e_1_1 };
47593
+ return [3 /*break*/, 8];
47594
+ case 7:
47595
+ try {
47596
+ if (serviceCodes_1_1 && !serviceCodes_1_1.done && (_a = serviceCodes_1.return)) _a.call(serviceCodes_1);
47597
+ }
47598
+ finally { if (e_1) throw e_1.error; }
47599
+ return [7 /*endfinally*/];
47600
+ case 8: return [2 /*return*/, result];
47601
+ }
47602
+ });
47603
+ });
47604
+ };
47046
47605
  return CongviecDinhkemService;
47047
47606
  }(BaseService));
47048
47607
  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" });
@@ -47064,7 +47623,7 @@
47064
47623
  _this._virtualBaseService = _virtualBaseService;
47065
47624
  _this._congViecDinhKemService = _congViecDinhKemService;
47066
47625
  _this.fileDataService = fileDataService;
47067
- _this.formState = exports.FormState.VIEW;
47626
+ _this._formState = exports.FormState.VIEW;
47068
47627
  _this.layoutFile = exports.EnumFileLayout;
47069
47628
  _this.enumFormState = exports.FormState;
47070
47629
  _this.formModel = {};
@@ -47072,7 +47631,22 @@
47072
47631
  _this.typedLink = '';
47073
47632
  return _this;
47074
47633
  }
47634
+ Object.defineProperty(BaseCongviecDinhkemComponent.prototype, "formState", {
47635
+ get: function () {
47636
+ return this._formState;
47637
+ },
47638
+ set: function (value) {
47639
+ this._formState = value;
47640
+ if (this.setting) {
47641
+ this.settingIfIsFormView();
47642
+ }
47643
+ },
47644
+ enumerable: false,
47645
+ configurable: true
47646
+ });
47647
+ ;
47075
47648
  BaseCongviecDinhkemComponent.prototype.ngOnInit = function () {
47649
+ var _this = this;
47076
47650
  this.setting.objectName = 'mục đính kèm';
47077
47651
  this.setting.baseService = this._congViecDinhKemService;
47078
47652
  this.setting.hiddenSetting = true;
@@ -47082,11 +47656,10 @@
47082
47656
  this.setting.hiddenPageSetting = true;
47083
47657
  this.setting.hiddenAdvanceSearch = true;
47084
47658
  this.setting.hiddenFilterRow = true;
47085
- this.setting.hiddenCheckbox = this.formState == exports.FormState.VIEW;
47086
- this.setting.hiddenFunctionColumn = this.formState == exports.FormState.VIEW;
47087
47659
  this.setting.fixHeightTypeInDialog = false;
47088
47660
  this.setting.heightType = exports.HeightType.dynamic;
47089
47661
  this.setting.showExportSelectedItems = false;
47662
+ this.settingIfIsFormView();
47090
47663
  this.setting.modelSchemas = [
47091
47664
  new ModelSchema({ field: 'tenHienThiDoiTuong', name: 'Đối tượng', fullName: 'Đối tượng', description: 'Đối tượng' }),
47092
47665
  new ModelSchema({ field: 'tieuDe', name: 'Tiêu đề', fullName: 'Tiêu đề', description: 'Tiêu đề' }),
@@ -47104,6 +47677,17 @@
47104
47677
  dataType: 'fileDinhKem'
47105
47678
  })
47106
47679
  ];
47680
+ this.rootContext.replaySubscribe(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC, function (rowData) {
47681
+ _this.themDinhKem(false);
47682
+ });
47683
+ };
47684
+ BaseCongviecDinhkemComponent.prototype.ngOnDestroy = function () {
47685
+ this.rootContext.unSubscribleReplay(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
47686
+ _super.prototype.ngOnDestroy.call(this);
47687
+ };
47688
+ BaseCongviecDinhkemComponent.prototype.settingIfIsFormView = function () {
47689
+ this.setting.hiddenCheckbox = this.formState == exports.FormState.VIEW;
47690
+ this.setting.hiddenFunctionColumn = this.setting.hiddenCheckbox;
47107
47691
  };
47108
47692
  BaseCongviecDinhkemComponent.prototype.modifyGridInfo = function (gridInfo) {
47109
47693
  return __awaiter(this, void 0, void 0, function () {
@@ -47115,50 +47699,57 @@
47115
47699
  };
47116
47700
  BaseCongviecDinhkemComponent.prototype.afterGetData = function () {
47117
47701
  return __awaiter(this, void 0, void 0, function () {
47118
- var _a, _b, item, detail, e_1_1;
47702
+ var dicGrouped, dataDisplayName, _a, _b, item;
47119
47703
  var e_1, _c;
47120
47704
  return __generator(this, function (_d) {
47121
47705
  switch (_d.label) {
47122
47706
  case 0:
47123
- _d.trys.push([0, 5, 6, 7]);
47124
- _a = __values(this.model.dataSource), _b = _a.next();
47125
- _d.label = 1;
47707
+ dicGrouped = {};
47708
+ this.model.dataSource.forEach(function (item) {
47709
+ if (!dicGrouped[item.serviceCode]) {
47710
+ dicGrouped[item.serviceCode] = {};
47711
+ }
47712
+ if (!dicGrouped[item.serviceCode][item.entity]) {
47713
+ dicGrouped[item.serviceCode][item.entity] = {
47714
+ fieldHienThi: item.fieldHienThi,
47715
+ lstId: []
47716
+ };
47717
+ }
47718
+ dicGrouped[item.serviceCode][item.entity].lstId.push(item.entityKey);
47719
+ });
47720
+ return [4 /*yield*/, this._congViecDinhKemService.getDetailItems(dicGrouped)];
47126
47721
  case 1:
47127
- if (!!_b.done) return [3 /*break*/, 4];
47128
- item = _b.value;
47129
- return [4 /*yield*/, this._congViecDinhKemService.getDetailItem(item.serviceCode, item.entity, item.entityKey, item.fieldHienThi)];
47130
- case 2:
47131
- detail = (_d.sent()).data;
47132
- if (detail.length > 0) {
47133
- item.tieuDe = detail[0][item.fieldHienThi];
47134
- }
47135
- else {
47136
- item.tieuDe = 'Không tìm thấy bản ghi';
47137
- }
47138
- if (item.tenHienThiDoiTuong != null) {
47139
- item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.trim();
47140
- item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.substring(0, 1).toUpperCase() + item.tenHienThiDoiTuong.substring(1);
47141
- }
47142
- _d.label = 3;
47143
- case 3:
47144
- _b = _a.next();
47145
- return [3 /*break*/, 1];
47146
- case 4: return [3 /*break*/, 7];
47147
- case 5:
47148
- e_1_1 = _d.sent();
47149
- e_1 = { error: e_1_1 };
47150
- return [3 /*break*/, 7];
47151
- case 6:
47722
+ dataDisplayName = _d.sent();
47152
47723
  try {
47153
- if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
47724
+ for (_a = __values(this.model.dataSource), _b = _a.next(); !_b.done; _b = _a.next()) {
47725
+ item = _b.value;
47726
+ item.tieuDe = dataDisplayName[item.serviceCode][item.entity][item.entityKey];
47727
+ if (item.tenHienThiDoiTuong != null) {
47728
+ item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.trim();
47729
+ item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.substring(0, 1).toUpperCase() + item.tenHienThiDoiTuong.substring(1);
47730
+ }
47731
+ }
47154
47732
  }
47155
- finally { if (e_1) throw e_1.error; }
47156
- return [7 /*endfinally*/];
47157
- case 7: return [2 /*return*/];
47733
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
47734
+ finally {
47735
+ try {
47736
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
47737
+ }
47738
+ finally { if (e_1) throw e_1.error; }
47739
+ }
47740
+ return [2 /*return*/];
47158
47741
  }
47159
47742
  });
47160
47743
  });
47161
47744
  };
47745
+ BaseCongviecDinhkemComponent.prototype.afterReloaded = function () {
47746
+ return __awaiter(this, void 0, void 0, function () {
47747
+ return __generator(this, function (_a) {
47748
+ this.fileDataService.getData();
47749
+ return [2 /*return*/];
47750
+ });
47751
+ });
47752
+ };
47162
47753
  BaseCongviecDinhkemComponent.prototype.viewLinkItem = function (evt) {
47163
47754
  this.viewRawLink(evt);
47164
47755
  };
@@ -47196,7 +47787,8 @@
47196
47787
  });
47197
47788
  }); });
47198
47789
  };
47199
- BaseCongviecDinhkemComponent.prototype.themDinhKem = function () {
47790
+ BaseCongviecDinhkemComponent.prototype.themDinhKem = function (showNoti) {
47791
+ if (showNoti === void 0) { showNoti = true; }
47200
47792
  return __awaiter(this, void 0, void 0, function () {
47201
47793
  var content, obj;
47202
47794
  var _this = this;
@@ -47207,7 +47799,9 @@
47207
47799
  if (obj.length > 0) {
47208
47800
  this._congViecDinhKemService.themDinhKemNghiepVu(this.taskId, obj).then(function (rs) {
47209
47801
  if (rs.success) {
47210
- _this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
47802
+ if (showNoti) {
47803
+ _this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
47804
+ }
47211
47805
  _this.reload();
47212
47806
  _this._commonService.clearClipboardStorage();
47213
47807
  }
@@ -47328,7 +47922,7 @@
47328
47922
  BaseCongviecDinhkemComponent.decorators = [
47329
47923
  { type: i0.Component, args: [{
47330
47924
  selector: 'base-congviec-dinhkem',
47331
- 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",
47925
+ 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>",
47332
47926
  providers: [ComponentContextService],
47333
47927
  styles: [""]
47334
47928
  },] }
@@ -47442,6 +48036,7 @@
47442
48036
  },
47443
48037
  ];
47444
48038
  _this.buttons = [];
48039
+ _this.mdWidthWorkflow = 6;
47445
48040
  _this.handleChangeLoaiCongViecWhenAdd = function (evt) { return __awaiter(_this, void 0, void 0, function () {
47446
48041
  return __generator(this, function (_a) {
47447
48042
  switch (_a.label) {
@@ -47494,15 +48089,6 @@
47494
48089
  label: 'Mô tả nội dung',
47495
48090
  mdWidth: 12
47496
48091
  }),
47497
- new DropdownControlSchema({
47498
- field: 'idLoaiCongViec',
47499
- label: 'Phân loại',
47500
- baseService: this._dmLoaiCongViecService,
47501
- isTree: true,
47502
- fieldTree: 'idParent',
47503
- valueParentRoot: null,
47504
- onChanged: onChangeLoaiCongViec
47505
- }),
47506
48092
  new DropdownControlSchema({
47507
48093
  field: 'idPriority',
47508
48094
  label: 'Độ ưu tiên',
@@ -47528,9 +48114,19 @@
47528
48114
  }),
47529
48115
  new PercentControlSchema({
47530
48116
  field: 'phanTram',
47531
- mdWidth: 12,
48117
+ mdWidth: 6,
47532
48118
  label: 'Tiến độ'
47533
48119
  }),
48120
+ new DropdownControlSchema({
48121
+ field: 'idLoaiCongViec',
48122
+ label: 'Phân loại công việc',
48123
+ baseService: this._dmLoaiCongViecService,
48124
+ isTree: true,
48125
+ fieldTree: 'idParent',
48126
+ valueParentRoot: null,
48127
+ sorts: [{ field: 'maPhanCap', dir: 1 }],
48128
+ onChanged: onChangeLoaiCongViec
48129
+ }),
47534
48130
  ];
47535
48131
  this.addSchemaBase();
47536
48132
  };
@@ -47789,7 +48385,8 @@
47789
48385
  this.setting.cols = [
47790
48386
  new ColumnSchemaBase({
47791
48387
  field: 'ten',
47792
- dataType: 'congViecInfo'
48388
+ dataType: 'congViecInfo',
48389
+ width: '18rem'
47793
48390
  }),
47794
48391
  new ColumnSchemaBase({
47795
48392
  field: 'ngayBatDau',
@@ -47801,7 +48398,7 @@
47801
48398
  }),
47802
48399
  new ColumnSchemaBase({
47803
48400
  field: 'idLoaiCongViec',
47804
- width: '10%',
48401
+ width: '100px',
47805
48402
  baseService: this._dmLoaiCongViecService,
47806
48403
  isTree: true,
47807
48404
  fieldTree: 'idParent',
@@ -47809,14 +48406,14 @@
47809
48406
  }),
47810
48407
  new ColumnSchemaBase({
47811
48408
  field: 'idLinhVuc',
47812
- width: '10%',
48409
+ width: '100px',
47813
48410
  baseService: this._dmLinhVucCongViecService
47814
48411
  }),
47815
48412
  new ColumnSchemaBase({
47816
48413
  field: 'idPriority',
47817
48414
  dataType: 'idPriority',
47818
48415
  dataTypeRefField: 'idPriority',
47819
- width: '10%',
48416
+ width: '80px',
47820
48417
  baseService: this._dmPriorityService,
47821
48418
  fieldPlus: 'background,color',
47822
48419
  funcSetValueRow: function (rowItem, data) {
@@ -48092,7 +48689,7 @@
48092
48689
  BaseCongViecComponent.decorators = [
48093
48690
  { type: i0.Component, args: [{
48094
48691
  selector: 'base-congviec',
48095
- 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>",
48692
+ 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>",
48096
48693
  providers: [ComponentContextService],
48097
48694
  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}"]
48098
48695
  },] }
@@ -50668,7 +51265,8 @@
50668
51265
  };
50669
51266
  ShareLinkByPermissionComponent.prototype.createShareLink = function () {
50670
51267
  return __awaiter(this, void 0, void 0, function () {
50671
- var permission, dicState, itemShares, dicPermissionId, content;
51268
+ var permission, dicState, itemShares, firstItem, colShowEditLink, fieldHienThi, value, dicPermissionId, content;
51269
+ var _this = this;
50672
51270
  return __generator(this, function (_a) {
50673
51271
  switch (_a.label) {
50674
51272
  case 0:
@@ -50696,6 +51294,27 @@
50696
51294
  dicState = _a.sent();
50697
51295
  itemShares = new ModelShareLinkByPermission();
50698
51296
  itemShares.linkToMenu = "" + top.location.origin + top.location.pathname;
51297
+ itemShares.sourcePath = "" + encodeURIComponent(top.location.href);
51298
+ itemShares.objectDisplayName = "" + encodeURIComponent(this.setting.objectName);
51299
+ if (typeof this.setting.displayField == 'string') {
51300
+ itemShares.displayField = "" + this.setting.displayField;
51301
+ }
51302
+ else {
51303
+ firstItem = this.lstItem[0];
51304
+ colShowEditLink = this.setting.cols.find(function (q) { return q.showEditLink; });
51305
+ fieldHienThi = null;
51306
+ if (colShowEditLink) {
51307
+ value = firstItem[colShowEditLink.field];
51308
+ // Nếu có value của `str${colShowEditLink.field}` thì là trường reference
51309
+ // => Chỉ lấy trường hợp trường gốc có dữ liệu và trường reference k có dữ liệu
51310
+ if (value && !firstItem["str" + colShowEditLink.field]) {
51311
+ fieldHienThi = colShowEditLink.field;
51312
+ }
51313
+ }
51314
+ if (fieldHienThi) {
51315
+ itemShares.displayField = "" + fieldHienThi;
51316
+ }
51317
+ }
50699
51318
  itemShares.lstItemData = [];
50700
51319
  this.lstItem.forEach(function (item) {
50701
51320
  itemShares.lstItemData.push({
@@ -50703,6 +51322,13 @@
50703
51322
  permission: permission,
50704
51323
  state: encodeURIComponent(JSON.stringify(dicState[item.id]))
50705
51324
  });
51325
+ if (!itemShares.displayField) {
51326
+ var rowItem = _this.lstItem.find(function (q) { return q.id == item.id; });
51327
+ if (typeof _this.setting.displayField != 'string') {
51328
+ var tenDayDu = _this.setting.displayField(rowItem);
51329
+ content += "&displayField=&tenDayDu=" + encodeURIComponent(tenDayDu);
51330
+ }
51331
+ }
50706
51332
  });
50707
51333
  return [4 /*yield*/, this.setting.baseService.getSharedKey(itemShares)];
50708
51334
  case 2:
@@ -50723,7 +51349,7 @@
50723
51349
  ShareLinkByPermissionComponent.prototype.copyLinkToClipboard = function () {
50724
51350
  if (this.links) {
50725
51351
  this.copyToClipboard(this.links);
50726
- this._notifierService.showWarning('Copy link vào clipboard thành công');
51352
+ this._notifierService.showSuccess('Copy link vào clipboard thành công');
50727
51353
  }
50728
51354
  };
50729
51355
  return ShareLinkByPermissionComponent;
@@ -50817,6 +51443,7 @@
50817
51443
  StateMachinesConnectionReceiverDepartmentComponent,
50818
51444
  StateMachinesConnectionReceiverGroupComponent,
50819
51445
  StateMachinesConnectionReceiverRoleComponent,
51446
+ StateMachinesConnectionReceiverConditionComponent,
50820
51447
  StateMachinesConnectionSenderComponent,
50821
51448
  StateMachinesDesignerComponent,
50822
51449
  StartWorkflowComponent,
@@ -53219,74 +53846,76 @@
53219
53846
  exports.ɵcd = SimpleWorkflowFormComponent;
53220
53847
  exports.ɵce = ProcessWorkflowFormComponent;
53221
53848
  exports.ɵcf = ProcessWorkflowTargetComponent;
53222
- exports.ɵcg = ChoYKienFormComponent;
53223
- exports.ɵch = SplashComponentV1Component;
53224
- exports.ɵci = StateMachinesConnectionReceiverComponent;
53225
- exports.ɵcj = StateMachinesConnectionReceiverUserComponent;
53226
- exports.ɵck = StateMachinesConnectionReceiverDepartmentComponent;
53227
- exports.ɵcl = StateMachinesConnectionReceiverGroupComponent;
53228
- exports.ɵcm = StateMachinesConnectionReceiverRoleComponent;
53229
- exports.ɵcn = StateMachinesConnectionSenderComponent;
53230
- exports.ɵco = StartWorkflowComponent;
53231
- exports.ɵcp = WorkflowSettingsService;
53232
- exports.ɵcq = ShareLinkByPermissionComponent;
53233
- exports.ɵcr = WorkflowSettingNewComponent;
53234
- exports.ɵcs = PermissionSharingComponent;
53235
- exports.ɵct = WorkflowPermissionService;
53236
- exports.ɵcu = TnDialogComponent;
53237
- exports.ɵcv = TnColorPickerComponent;
53238
- exports.ɵcw = TnTinymceComponent;
53239
- exports.ɵcx = TnTabViewComponent;
53240
- exports.ɵcy = TableDetailFormComponent;
53241
- exports.ɵcz = FileIconPipe;
53849
+ exports.ɵcg = DmChucVuService;
53850
+ exports.ɵch = ChoYKienFormComponent;
53851
+ exports.ɵci = SplashComponentV1Component;
53852
+ exports.ɵcj = StateMachinesConnectionReceiverComponent;
53853
+ exports.ɵck = StateMachinesConnectionReceiverUserComponent;
53854
+ exports.ɵcl = StateMachinesConnectionReceiverConditionComponent;
53855
+ exports.ɵcm = StateMachinesConnectionReceiverDepartmentComponent;
53856
+ exports.ɵcn = StateMachinesConnectionReceiverGroupComponent;
53857
+ exports.ɵco = StateMachinesConnectionReceiverRoleComponent;
53858
+ exports.ɵcp = StateMachinesConnectionSenderComponent;
53859
+ exports.ɵcq = StartWorkflowComponent;
53860
+ exports.ɵcr = WorkflowSettingsService;
53861
+ exports.ɵcs = ShareLinkByPermissionComponent;
53862
+ exports.ɵct = WorkflowSettingNewComponent;
53863
+ exports.ɵcu = PermissionSharingComponent;
53864
+ exports.ɵcv = WorkflowPermissionService;
53865
+ exports.ɵcw = TnDialogComponent;
53866
+ exports.ɵcx = TnColorPickerComponent;
53867
+ exports.ɵcy = TnTinymceComponent;
53868
+ exports.ɵcz = TnTabViewComponent;
53242
53869
  exports.ɵd = ExceptionHandlerService;
53243
- exports.ɵda = FileSizePipe;
53244
- exports.ɵdb = QuickAddFormComponent;
53245
- exports.ɵdc = PreventShiftTabDirective;
53246
- exports.ɵdd = TnTemplateDirective;
53247
- exports.ɵde = UserPickerComponent;
53248
- exports.ɵdf = UserPickerBoxComponent;
53249
- exports.ɵdg = CoCauToChucTestService;
53250
- exports.ɵdh = TnAppHelpComponent;
53251
- exports.ɵdi = PathNameService;
53252
- exports.ɵdj = HelperCurrentPageComponent;
53253
- exports.ɵdk = TnAppNotificationListComponent;
53254
- exports.ɵdl = TnAppNotificationComponent;
53255
- exports.ɵdm = MyDriveService;
53256
- exports.ɵdn = FileVersionService;
53257
- exports.ɵdo = FileExplorerNewService;
53258
- exports.ɵdp = FolderFormComponent;
53259
- exports.ɵdq = FileFormComponent;
53260
- exports.ɵdr = FileViewerComponent;
53261
- exports.ɵds = FileVersionListComponent;
53262
- exports.ɵdt = WorkflowHistoryComponent;
53263
- exports.ɵdu = EntityWorkflowHistoryService;
53264
- exports.ɵdv = WorkflowHistoryDialogComponent;
53265
- exports.ɵdw = WorkflowHistoryNewComponent;
53266
- exports.ɵdx = WorkflowSettingComponent;
53267
- exports.ɵdy = EntityWorkflowSettingService;
53268
- exports.ɵdz = WorkflowSettingDialogComponent;
53870
+ exports.ɵda = TableDetailFormComponent;
53871
+ exports.ɵdb = FileIconPipe;
53872
+ exports.ɵdc = FileSizePipe;
53873
+ exports.ɵdd = QuickAddFormComponent;
53874
+ exports.ɵde = PreventShiftTabDirective;
53875
+ exports.ɵdf = TnTemplateDirective;
53876
+ exports.ɵdg = UserPickerComponent;
53877
+ exports.ɵdh = UserPickerBoxComponent;
53878
+ exports.ɵdi = CoCauToChucTestService;
53879
+ exports.ɵdj = TnAppHelpComponent;
53880
+ exports.ɵdk = PathNameService;
53881
+ exports.ɵdl = HelperCurrentPageComponent;
53882
+ exports.ɵdm = TnAppNotificationListComponent;
53883
+ exports.ɵdn = TnAppNotificationComponent;
53884
+ exports.ɵdo = MyDriveService;
53885
+ exports.ɵdp = FileVersionService;
53886
+ exports.ɵdq = FileExplorerNewService;
53887
+ exports.ɵdr = FolderFormComponent;
53888
+ exports.ɵds = FileFormComponent;
53889
+ exports.ɵdt = FileViewerComponent;
53890
+ exports.ɵdu = FileVersionListComponent;
53891
+ exports.ɵdv = WorkflowHistoryComponent;
53892
+ exports.ɵdw = EntityWorkflowHistoryService;
53893
+ exports.ɵdx = WorkflowHistoryDialogComponent;
53894
+ exports.ɵdy = WorkflowHistoryNewComponent;
53895
+ exports.ɵdz = WorkflowSettingComponent;
53269
53896
  exports.ɵe = CanBo_HoSoService;
53270
- exports.ɵea = QrCodeGeneratorComponent;
53271
- exports.ɵeb = AccessDeniedV1Component;
53272
- exports.ɵec = AddNewsComponent;
53273
- exports.ɵed = ArticleService;
53274
- exports.ɵee = NewsCategoryService;
53275
- exports.ɵef = NotFoundComponent;
53276
- exports.ɵeg = UniversalLinkProcessorComponent;
53277
- exports.ɵeh = SignatureDetailComponent;
53278
- exports.ɵei = ChatService;
53279
- exports.ɵej = ContentsService;
53280
- exports.ɵek = StatusExtendsService;
53281
- exports.ɵel = MessageBoardService;
53282
- exports.ɵem = KySoSimDanhSachChuKyComponent;
53283
- exports.ɵen = KySoSimChuKyUserService;
53284
- exports.ɵeo = FileKySoSimComponent;
53285
- exports.ɵep = KySoSimSignPDFService;
53286
- exports.ɵeq = CheckReadyComponent;
53287
- exports.ɵer = SendAccessTokenInterceptor;
53288
- exports.ɵes = LogInterceptor;
53289
- exports.ɵet = PermissionUtilsInterceptor;
53897
+ exports.ɵea = EntityWorkflowSettingService;
53898
+ exports.ɵeb = WorkflowSettingDialogComponent;
53899
+ exports.ɵec = QrCodeGeneratorComponent;
53900
+ exports.ɵed = AccessDeniedV1Component;
53901
+ exports.ɵee = AddNewsComponent;
53902
+ exports.ɵef = ArticleService;
53903
+ exports.ɵeg = NewsCategoryService;
53904
+ exports.ɵeh = NotFoundComponent;
53905
+ exports.ɵei = UniversalLinkProcessorComponent;
53906
+ exports.ɵej = SignatureDetailComponent;
53907
+ exports.ɵek = ChatService;
53908
+ exports.ɵel = ContentsService;
53909
+ exports.ɵem = StatusExtendsService;
53910
+ exports.ɵen = MessageBoardService;
53911
+ exports.ɵeo = KySoSimDanhSachChuKyComponent;
53912
+ exports.ɵep = KySoSimChuKyUserService;
53913
+ exports.ɵeq = FileKySoSimComponent;
53914
+ exports.ɵer = KySoSimSignPDFService;
53915
+ exports.ɵes = CheckReadyComponent;
53916
+ exports.ɵet = SendAccessTokenInterceptor;
53917
+ exports.ɵeu = LogInterceptor;
53918
+ exports.ɵev = PermissionUtilsInterceptor;
53290
53919
  exports.ɵf = AfterViewCheckedComponent;
53291
53920
  exports.ɵg = AdvanceSearchComponent;
53292
53921
  exports.ɵh = AppRootMenuComponent;