tnx-shared 5.1.78 → 5.1.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/bundles/tnx-shared.umd.js +994 -321
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-form-base.d.ts +1 -0
  6. package/classes/base/data-form-base.d.ts.map +1 -1
  7. package/classes/base/data-list-base.d.ts +2 -1
  8. package/classes/base/data-list-base.d.ts.map +1 -1
  9. package/classes/form-schema.d.ts +3 -0
  10. package/classes/form-schema.d.ts.map +1 -1
  11. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  12. package/components/crud/crud-list/crud-list.component.d.ts +1 -0
  13. package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
  14. package/components/entity-permission/services.cs/entity-permission.service.d.ts +1 -0
  15. package/components/entity-permission/services.cs/entity-permission.service.d.ts.map +1 -1
  16. package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -0
  17. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  18. package/components/file-explorer/services/file-data.service.d.ts +1 -0
  19. package/components/file-explorer/services/file-data.service.d.ts.map +1 -1
  20. package/components/query-builders/query-builder/query-builder.component.d.ts.map +1 -1
  21. package/components/query-builders/query-builder-group/query-builder-group.component.d.ts +1 -0
  22. package/components/query-builders/query-builder-group/query-builder-group.component.d.ts.map +1 -1
  23. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts +3 -0
  24. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts.map +1 -1
  25. package/components/statemachines/models/constants.d.ts +5 -1
  26. package/components/statemachines/models/constants.d.ts.map +1 -1
  27. package/components/statemachines/models/enums.d.ts +4 -0
  28. package/components/statemachines/models/enums.d.ts.map +1 -1
  29. package/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.d.ts.map +1 -1
  30. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts +3 -0
  31. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts.map +1 -1
  32. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts +28 -0
  33. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts.map +1 -0
  34. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.ngfactory.d.ts.map +1 -0
  35. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.scss.shim.ngstyle.d.ts.map +1 -0
  36. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts +3 -1
  37. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts.map +1 -1
  38. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts +3 -1
  39. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts.map +1 -1
  40. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts +6 -4
  41. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts.map +1 -1
  42. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts +3 -3
  43. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts.map +1 -1
  44. package/components/user-picker/user-picker.component.d.ts +8 -2
  45. package/components/user-picker/user-picker.component.d.ts.map +1 -1
  46. package/components/workflow/models/models.d.ts +8 -8
  47. package/components/workflow/models/models.d.ts.map +1 -1
  48. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts +1 -1
  49. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts.map +1 -1
  50. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts +3 -6
  51. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts.map +1 -1
  52. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +3 -3
  53. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
  54. package/components/workflow/workflow-setting-new/workflow-setting-new.component.d.ts +1 -0
  55. package/components/workflow/workflow-setting-new/workflow-setting-new.component.d.ts.map +1 -1
  56. package/configs/component-context.constant.d.ts +1 -0
  57. package/configs/component-context.constant.d.ts.map +1 -1
  58. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts +8 -3
  59. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts.map +1 -1
  60. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +2 -0
  61. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  62. package/congviec/congviec/congviec.component.d.ts.map +1 -1
  63. package/congviec/congviec/services/congviec-dinhkem.service.d.ts +8 -0
  64. package/congviec/congviec/services/congviec-dinhkem.service.d.ts.map +1 -1
  65. package/congviec/congviec/services/congviec.service.d.ts.map +1 -1
  66. package/esm2015/classes/base/data-form-base.js +6 -3
  67. package/esm2015/classes/base/data-list-base.js +13 -3
  68. package/esm2015/classes/form-schema.js +1 -1
  69. package/esm2015/components/crud/crud-form/crud-form.component.js +2 -1
  70. package/esm2015/components/crud/crud-list/crud-list.component.js +6 -2
  71. package/esm2015/components/entity-permission/services.cs/entity-permission.service.js +8 -5
  72. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +17 -10
  73. package/esm2015/components/file-explorer/services/file-data.service.js +15 -15
  74. package/esm2015/components/query-builders/query-builder/query-builder.component.js +24 -7
  75. package/esm2015/components/query-builders/query-builder-group/query-builder-group.component.js +6 -2
  76. package/esm2015/components/query-builders/query-builder-rule/query-builder-rule.component.js +39 -3
  77. package/esm2015/components/share-link-by-permission/share-link-by-permission.component.js +2 -2
  78. package/esm2015/components/statemachines/models/constants.js +9 -4
  79. package/esm2015/components/statemachines/models/enums.js +6 -1
  80. package/esm2015/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.js +9 -5
  81. package/esm2015/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.js +19 -6
  82. package/esm2015/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.js +179 -0
  83. package/esm2015/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.js +32 -1
  84. package/esm2015/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.js +32 -1
  85. package/esm2015/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.js +39 -8
  86. package/esm2015/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.js +19 -7
  87. package/esm2015/components/statemachines/statemachines-designer/statemachines-designer.component.js +1 -1
  88. package/esm2015/components/statemachines/utils/utils.js +6 -6
  89. package/esm2015/components/tn-app-help/tn-app-help.component.js +1 -1
  90. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +2 -2
  91. package/esm2015/components/user-picker/user-picker.component.js +47 -6
  92. package/esm2015/components/workflow/models/models.js +1 -7
  93. package/esm2015/components/workflow/process-workflow-form/process-workflow-form.component.js +39 -42
  94. package/esm2015/components/workflow/process-workflow-target/process-workflow-target.component.js +7 -40
  95. package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +10 -12
  96. package/esm2015/components/workflow/workflow-setting-new/workflow-setting-new.component.js +67 -10
  97. package/esm2015/configs/component-context.constant.js +3 -2
  98. package/esm2015/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.js +50 -14
  99. package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +24 -12
  100. package/esm2015/congviec/congviec/congviec.component.js +7 -6
  101. package/esm2015/congviec/congviec/services/congviec-dinhkem.service.js +57 -1
  102. package/esm2015/congviec/congviec/services/congviec.service.js +3 -3
  103. package/esm2015/services/base.service.js +4 -1
  104. package/esm2015/services/dm-chucvu.service.js +28 -0
  105. package/esm2015/services/role.service.js +1 -1
  106. package/esm2015/tnx-shared.js +69 -67
  107. package/esm2015/tnx-shared.module.js +3 -1
  108. package/fesm2015/tnx-shared.js +776 -220
  109. package/fesm2015/tnx-shared.js.map +1 -1
  110. package/package.json +2 -2
  111. package/services/base.service.d.ts +1 -0
  112. package/services/base.service.d.ts.map +1 -1
  113. package/services/dm-chucvu.service.d.ts +12 -0
  114. package/services/dm-chucvu.service.d.ts.map +1 -0
  115. package/services/dm-chucvu.service.ngfactory.d.ts.map +1 -0
  116. package/tnx-shared.d.ts +68 -66
  117. package/tnx-shared.d.ts.map +1 -1
  118. package/tnx-shared.metadata.json +1 -1
  119. package/tnx-shared.module.d.ts +2 -1
  120. package/tnx-shared.module.d.ts.map +1 -1
  121. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
@@ -138,7 +138,8 @@ ComCtxConstants.ROOT = {
138
138
  MENU_CHANGED: 'MENU_CHANGED',
139
139
  ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER: 'ADVANCE_SEARCH_INIT_WITHOUT_UPDATE_ROUTER',
140
140
  SHOW_WAIT_BOX: 'SHOW_WAIT_BOX',
141
- SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM'
141
+ SHOW_REJECT_CONFIRM: 'SHOW_REJECT_CONFIRM',
142
+ GAN_ENTITY_SANG_CONG_VIEC: 'GAN_ENTITY_SANG_CONG_VIEC'
142
143
  };
143
144
  ComCtxConstants.ROOT_USMART = {
144
145
  SHOW_CONFIG_DATA_DEFAULT: 'SHOW_CONFIG_DATA_DEFAULT',
@@ -5968,6 +5969,9 @@ class BaseService {
5968
5969
  processWorkflow(id, actionCode, data) {
5969
5970
  return this.defaultPost(`${this.serviceUri}/ProcessWorkflow/${id}/${actionCode}`, data);
5970
5971
  }
5972
+ getUserInProcessForm(workflowCode, stateCode, actionCode, itemId) {
5973
+ return this.defaultPost(`${this.serviceUri}/GetUserInProcessFormBase/${workflowCode}/${stateCode}/${actionCode}/${itemId}`, {});
5974
+ }
5971
5975
  handleError(error, injector) {
5972
5976
  const commonService = injector.get(CommonService);
5973
5977
  return commonService.handleError(error, injector);
@@ -8792,10 +8796,10 @@ class WorkflowSettingNew {
8792
8796
 
8793
8797
  class CongViecService extends BaseService {
8794
8798
  constructor(http, injector, _moduleConfigService) {
8795
- super(http, injector, `${_moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint}/${_moduleConfigService.getConfig().environment.apiVersion}/CongViec`);
8799
+ super(http, injector, `${_moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint}/${_moduleConfigService.getConfig().environment.apiVersion}/CongViec_Chinh`);
8796
8800
  this._moduleConfigService = _moduleConfigService;
8797
8801
  this.serviceCode = 'congviec';
8798
- this.entityName = 'CongViec';
8802
+ this.entityName = 'CongViec_Chinh';
8799
8803
  this.objectName = 'công việc';
8800
8804
  this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
8801
8805
  }
@@ -12324,6 +12328,7 @@ class CrudFormComponent extends ComponentBase {
12324
12328
  }
12325
12329
  if (schema instanceof TitleSchema
12326
12330
  || schema instanceof LabelSchema) {
12331
+ schema.showLabel = false;
12327
12332
  if (!schema.field) {
12328
12333
  schema.field = this._commonService.guid();
12329
12334
  }
@@ -14474,7 +14479,8 @@ class DataFormBase extends ComponentBase {
14474
14479
  defaultValue,
14475
14480
  valueField: 'code',
14476
14481
  displayField: 'title',
14477
- mdWidth: 12,
14482
+ mdWidth: this.mdWidthWorkflow || 12,
14483
+ enableCaching: false,
14478
14484
  hiddenCheck: (rootModel) => !rootModel || rootModel.createTaskInstead
14479
14485
  }));
14480
14486
  if (this.parentSetting.workflowSettingNew
@@ -14805,7 +14811,9 @@ class DataFormBase extends ComponentBase {
14805
14811
  if (resultValidateFormTask) {
14806
14812
  this.model.data.itemCongViec = taskForm.model.data;
14807
14813
  }
14808
- // reset field _WorkflowCode để backend biết được chạy quy trình theo kiểu nào
14814
+ }
14815
+ if (this.model.data.createTaskInstead) {
14816
+ // reset field _WorkflowCode để backend không chạy quy trình bản ghi
14809
14817
  this.model.data._WorkflowCode = null;
14810
14818
  }
14811
14819
  const confirmed = yield this.createConfirmIfRequire();
@@ -16194,6 +16202,7 @@ class CrudListComponent extends ComponentBase {
16194
16202
  this.onProcessedWorkflow = new EventEmitter();
16195
16203
  this.onRollbackedWorkflow = new EventEmitter();
16196
16204
  this.onChangedStatusWorkflow = new EventEmitter();
16205
+ this.onShowFormStartWorkflow = new EventEmitter();
16197
16206
  this.tableReady = new Subject();
16198
16207
  this.tableReadySource$ = this.tableReady.asObservable();
16199
16208
  this.checkedAll = null;
@@ -17077,6 +17086,7 @@ class CrudListComponent extends ComponentBase {
17077
17086
  formState: FormState.ADD,
17078
17087
  data: {
17079
17088
  checkUniqueTaskForEntity: true,
17089
+ autoNextStep: workflowSetting.autoNextStep,
17080
17090
  idLoaiCongViec: workflowSetting.idLoaiCongViecDefault,
17081
17091
  serviceCode: this.setting.baseService.serviceCode,
17082
17092
  entity: this.setting.baseService.entityName,
@@ -17085,6 +17095,7 @@ class CrudListComponent extends ComponentBase {
17085
17095
  }
17086
17096
  };
17087
17097
  this.congViecModel.showEditForm = true;
17098
+ this.onShowFormStartWorkflow.emit(rowData);
17088
17099
  }
17089
17100
  else {
17090
17101
  if (workflowSetting.workflows.length == 1) {
@@ -18865,16 +18876,20 @@ CrudListComponent.propDecorators = {
18865
18876
  onStartedWorkflow: [{ type: Output }],
18866
18877
  onProcessedWorkflow: [{ type: Output }],
18867
18878
  onRollbackedWorkflow: [{ type: Output }],
18868
- onChangedStatusWorkflow: [{ type: Output }]
18879
+ onChangedStatusWorkflow: [{ type: Output }],
18880
+ onShowFormStartWorkflow: [{ type: Output }]
18869
18881
  };
18870
18882
 
18871
18883
  class EntityPermissionService extends BaseService {
18872
18884
  constructor(http, injector, _moduleConfigService) {
18873
- super(http, injector, `${_moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint}/EntityPermission`);
18885
+ super(http, injector, `${_moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint}/${_moduleConfigService.getConfig().environment.apiVersion}/EntityPermission`);
18874
18886
  this.serviceManagers = {};
18875
18887
  this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint;
18876
18888
  this._moduleConfig = _moduleConfigService.getConfig();
18877
18889
  }
18890
+ getEndpointByService(service) {
18891
+ return `${service.endPoint}/${this._moduleConfig.environment.apiVersion}`;
18892
+ }
18878
18893
  registerService(entityName, service) {
18879
18894
  this.serviceManagers[entityName] = service;
18880
18895
  }
@@ -18883,15 +18898,15 @@ class EntityPermissionService extends BaseService {
18883
18898
  if (service == undefined) {
18884
18899
  (this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity permission service');
18885
18900
  }
18886
- return this.defaultPost(`${service.endPoint}/EntityPermission/GetPermission/${service.entityName}`, {});
18901
+ return this.defaultPost(`${this.getEndpointByService(service)}/EntityPermission/GetPermission/${service.entityName}`, {});
18887
18902
  }
18888
18903
  savePermission(tableName, data) {
18889
18904
  const service = this.serviceManagers[tableName];
18890
- return this.defaultPost(`${service.endPoint}/EntityPermission/SavePermission/${service.entityName}`, data);
18905
+ return this.defaultPost(`${this.getEndpointByService(service)}/EntityPermission/SavePermission/${service.entityName}`, data);
18891
18906
  }
18892
18907
  removePermission(tableName) {
18893
18908
  const service = this.serviceManagers[tableName];
18894
- return this.defaultPost(`${service.endPoint}/EntityPermission/RemovePermission/${service.entityName}`, {});
18909
+ return this.defaultPost(`${this.getEndpointByService(service)}/EntityPermission/RemovePermission/${service.entityName}`, {});
18895
18910
  }
18896
18911
  }
18897
18912
  EntityPermissionService.decorators = [
@@ -19425,11 +19440,21 @@ class DataListBase extends ComponentBase {
19425
19440
  this._notifierService.showSuccess('Đã sao chép các liên kết đã chọn');
19426
19441
  });
19427
19442
  }
19428
- _copyLink(rowData) {
19443
+ _copyLink(rowData, showNoti = true) {
19429
19444
  return __awaiter(this, void 0, void 0, function* () {
19430
19445
  const path = yield this.getCopyPath(rowData);
19431
19446
  this._commonService.copyByStorage(path);
19432
- this._notifierService.showSuccess('Đã sao chép liên kết');
19447
+ if (showNoti) {
19448
+ this._notifierService.showSuccess('Đã sao chép liên kết');
19449
+ }
19450
+ });
19451
+ }
19452
+ _onShowFormStartWorkflow(rowData) {
19453
+ return __awaiter(this, void 0, void 0, function* () {
19454
+ // Fire event gắn link công việc
19455
+ this._copyLink(rowData, false).then(x => {
19456
+ this.rootContext.fireReplayEvent(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
19457
+ });
19433
19458
  });
19434
19459
  }
19435
19460
  getCopyPath(rowData) {
@@ -29200,10 +29225,14 @@ class QueryRule {
29200
29225
  && (this.value == null || this.value == '')) {
29201
29226
  return null;
29202
29227
  }
29228
+ let value = this.value;
29229
+ if (this.funcGetValue) {
29230
+ value = this.funcGetValue(this);
29231
+ }
29203
29232
  return new Filter({
29204
29233
  field: this.field,
29205
29234
  operator: this.compareType,
29206
- value: JSON.stringify(this.value)
29235
+ value: JSON.stringify(value)
29207
29236
  });
29208
29237
  }
29209
29238
  isGroup() {
@@ -29451,14 +29480,26 @@ class QueryBuilderComponent {
29451
29480
  itemSourceField.controlType = 'datetime';
29452
29481
  }
29453
29482
  else if (schema instanceof NumberRangeControlSchema) {
29454
- itemSourceField.operators = operatorDateAndNumber;
29483
+ const operators = itemSourceField.control['operators'];
29484
+ if (!operators || !operators.length) {
29485
+ itemSourceField.operators = operatorDateAndNumber;
29486
+ }
29487
+ else {
29488
+ itemSourceField.operators = operators;
29489
+ }
29455
29490
  itemSourceField.controlType = 'number';
29456
29491
  }
29457
29492
  else if (schema instanceof DropdownControlSchema || schema instanceof CheckBoxListControlSchema) {
29458
- itemSourceField.operators = [
29459
- { id: Operator.in, ten: 'Nằm trong' },
29460
- { id: Operator.notIn, ten: 'Không nằm trong' }
29461
- ];
29493
+ const operators = itemSourceField.control['operators'];
29494
+ if (!operators || !operators.length) {
29495
+ itemSourceField.operators = [
29496
+ { id: Operator.in, ten: 'Nằm trong' },
29497
+ { id: Operator.notIn, ten: 'Không nằm trong' }
29498
+ ];
29499
+ }
29500
+ else {
29501
+ itemSourceField.operators = [...operators];
29502
+ }
29462
29503
  if (schema.hasOperatorCanBo) {
29463
29504
  itemSourceField.operators.push({
29464
29505
  id: Operator.isCurrentCanBo, ten: 'Là cán bộ hiện tại', _disabled: true
@@ -29488,6 +29529,11 @@ class QueryBuilderComponent {
29488
29529
  ];
29489
29530
  itemSourceField.controlType = 'autocomplete-picker';
29490
29531
  }
29532
+ else if (schema instanceof CustomControlSchema) {
29533
+ const operators = itemSourceField.control['operators'];
29534
+ itemSourceField.operators = operators ? operators : [];
29535
+ itemSourceField.controlType = 'custom';
29536
+ }
29491
29537
  else { // Là textbox
29492
29538
  itemSourceField.operators = [
29493
29539
  { id: Operator.equal, ten: 'Bằng' },
@@ -30624,28 +30670,28 @@ class FileDataService {
30624
30670
  this._fileControls.forEach(control => {
30625
30671
  key = `${control.serviceCode}/${control.entity}/${control._entityKey}`;
30626
30672
  if (dataFile[key]) {
30627
- control.setDatasource(dataFile[key]);
30673
+ control.setRootFolderId(dataFile[key].folderId);
30674
+ control.setDatasource(dataFile[key].lstFile);
30628
30675
  }
30629
30676
  });
30630
30677
  }));
30631
30678
  }
30632
30679
  processDatasourceFile(fileData = []) {
30633
- const dic = {};
30634
- let key = '';
30635
- fileData.forEach(file => {
30636
- key = `${file.serviceCode}/${file.entity}/${file.entityKey}`;
30637
- // Nếu hết file của 1 control
30638
- if (!dic[key]) {
30639
- dic[key] = [];
30640
- }
30641
- dic[key].push(file);
30642
- });
30643
- Object.keys(dic).forEach(key => {
30644
- dic[key].sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
30680
+ const result = {};
30681
+ Object.keys(fileData).forEach(key => {
30682
+ fileData[key].lstFile.sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
30645
30683
  { name: 'name', primer: a => a.toLowerCase() } // Order theo tên (nhưng phải toLower vì T < b < t)
30646
30684
  ));
30685
+ const data = fileData[key];
30686
+ result[this.generateKey(data.serviceCode, data.entity, data.entityKey)] = {
30687
+ folderId: key,
30688
+ lstFile: fileData[key].lstFile
30689
+ };
30647
30690
  });
30648
- return dic;
30691
+ return result;
30692
+ }
30693
+ generateKey(serviceCode, entity, entityKey) {
30694
+ return `${serviceCode}/${entity}/${entityKey}`;
30649
30695
  }
30650
30696
  }
30651
30697
  FileDataService.ɵprov = ɵɵdefineInjectable({ factory: function FileDataService_Factory() { return new FileDataService(ɵɵinject(INJECTOR)); }, token: FileDataService, providedIn: "root" });
@@ -31194,6 +31240,10 @@ class FileManagerComponent extends DataListBase {
31194
31240
  this.data.breadcrumbs = [];
31195
31241
  this._dataSource = [];
31196
31242
  }
31243
+ setRootFolderId(rootFolderId) {
31244
+ this.rootFolderId = rootFolderId;
31245
+ this.data.currentFolderId = this.rootFolderId;
31246
+ }
31197
31247
  setDatasource(dataSource = []) {
31198
31248
  this._dataSource = dataSource;
31199
31249
  this._oldValue = this._value;
@@ -31367,7 +31417,7 @@ class FileManagerComponent extends DataListBase {
31367
31417
  label: 'Xem trực tuyến', icon: 'fas fa-eye', command: (event) => {
31368
31418
  this.openObject(item);
31369
31419
  },
31370
- visible: this._deviceDetectorService.isDesktop()
31420
+ visible: (this._deviceDetectorService.isDesktop() && !(this.layout === EnumFileLayout.SIMPLE && this.readonly))
31371
31421
  },
31372
31422
  {
31373
31423
  label: 'Ký số cá nhân (SIM)',
@@ -31375,31 +31425,33 @@ class FileManagerComponent extends DataListBase {
31375
31425
  command: () => {
31376
31426
  this.signKySimFile(item);
31377
31427
  },
31378
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
31428
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
31379
31429
  },
31380
31430
  {
31381
31431
  label: 'Ký số cá nhân (USB)', icon: 'fas fa-signature',
31382
31432
  command: () => {
31383
31433
  this.signFile(item);
31384
31434
  },
31385
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
31435
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
31386
31436
  },
31387
31437
  {
31388
31438
  label: 'Ký số đơn vị (USB)', icon: 'fas fa-signature',
31389
31439
  command: () => {
31390
31440
  this.signFileDonVi(item);
31391
31441
  },
31392
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
31442
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
31393
31443
  },
31394
31444
  {
31395
31445
  label: 'Tải về', icon: 'fas fa-download', command: () => {
31396
31446
  this.download(item);
31397
- }
31447
+ },
31448
+ visible: !(this.layout === EnumFileLayout.SIMPLE && this.readonly)
31398
31449
  },
31399
31450
  {
31400
31451
  label: 'Sao chép đường dẫn', icon: 'fas fa-link', command: () => {
31401
31452
  this.copyDownloadLink(item);
31402
- }
31453
+ },
31454
+ visible: !(this.layout === EnumFileLayout.SIMPLE && this.readonly)
31403
31455
  },
31404
31456
  {
31405
31457
  label: 'Đổi tên', icon: 'fas fa-eraser', command: () => {
@@ -31410,7 +31462,8 @@ class FileManagerComponent extends DataListBase {
31410
31462
  {
31411
31463
  label: 'Xem các phiên bản khác', icon: 'fas fa-history', command: () => {
31412
31464
  this.openFileVersions(item);
31413
- }
31465
+ },
31466
+ visible: !(this.layout === EnumFileLayout.SIMPLE && this.readonly)
31414
31467
  },
31415
31468
  {
31416
31469
  label: 'Xóa tệp tin', icon: 'far fa-trash-alt', command: () => {
@@ -32071,7 +32124,7 @@ FileManagerComponent.decorators = [
32071
32124
  { type: Component, args: [{
32072
32125
  // tslint:disable-next-line: component-selector
32073
32126
  selector: 'file-manager',
32074
- 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>",
32127
+ 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>",
32075
32128
  providers: [
32076
32129
  {
32077
32130
  provide: NG_VALUE_ACCESSOR,
@@ -32080,7 +32133,7 @@ FileManagerComponent.decorators = [
32080
32133
  },
32081
32134
  ComponentContextService
32082
32135
  ],
32083
- 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}"]
32136
+ 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}"]
32084
32137
  },] }
32085
32138
  ];
32086
32139
  FileManagerComponent.ctorParameters = () => [
@@ -33585,6 +33638,8 @@ class QueryBuilderRuleComponent {
33585
33638
  this.onRemove = new EventEmitter();
33586
33639
  this.disabled = null;
33587
33640
  this.custom = false;
33641
+ this.customTypeFieldName = 'fieldValue';
33642
+ this.customTypeSeparator = '____';
33588
33643
  }
33589
33644
  // control value cố định, dùng trong trường hợp custom form
33590
33645
  set controlValue(value) {
@@ -33605,6 +33660,22 @@ class QueryBuilderRuleComponent {
33605
33660
  }
33606
33661
  this.handleChangeOperator();
33607
33662
  }
33663
+ if (this.controlType == 'custom') {
33664
+ this.setFuncGetValue();
33665
+ if (this.query.value) {
33666
+ try {
33667
+ this.query[this.customTypeFieldName] = this.query.value['field'];
33668
+ this.query.value = this.query.value['value'];
33669
+ }
33670
+ catch (ex) {
33671
+ }
33672
+ // const arrInfo = this.query.value.split(this.customTypeSeparator);
33673
+ // if (arrInfo.length > 1) {
33674
+ // this.query[this.customTypeFieldName] = arrInfo[0];
33675
+ // this.query.value = arrInfo[1];
33676
+ // }
33677
+ }
33678
+ }
33608
33679
  if (this.itemField != null && this.itemField.controlType == 'datetime' && this.query.value) {
33609
33680
  if (!isValidDate(new Date(this.query.value))) {
33610
33681
  this.custom = true;
@@ -33614,6 +33685,17 @@ class QueryBuilderRuleComponent {
33614
33685
  }
33615
33686
  }
33616
33687
  }
33688
+ setFuncGetValue() {
33689
+ if (this.controlType == 'custom') {
33690
+ this.query.funcGetValue = (item) => ({
33691
+ field: item[this.customTypeFieldName],
33692
+ value: item.value
33693
+ });
33694
+ }
33695
+ else {
33696
+ this.query.funcGetValue = null;
33697
+ }
33698
+ }
33617
33699
  removeGroup() {
33618
33700
  this.onRemove.emit(this.query);
33619
33701
  }
@@ -33628,7 +33710,13 @@ class QueryBuilderRuleComponent {
33628
33710
  this.resetControl(this.itemField);
33629
33711
  const itemOperator = this.operators.find(q => q.id == this.query.compareType);
33630
33712
  if (!itemOperator) {
33631
- this.query.compareType = null;
33713
+ if (this.operators.length == 1) {
33714
+ this.query.compareType = this.operators[0].id;
33715
+ this.handleChangeOperator();
33716
+ }
33717
+ else {
33718
+ this.query.compareType = null;
33719
+ }
33632
33720
  }
33633
33721
  else if (itemOperator.controlType) {
33634
33722
  this.resetControl(itemOperator);
@@ -33650,6 +33738,7 @@ class QueryBuilderRuleComponent {
33650
33738
  if (this.control) {
33651
33739
  this.control.disabled = this.disabled;
33652
33740
  }
33741
+ this.setFuncGetValue();
33653
33742
  }
33654
33743
  }
33655
33744
  handleChangeOperator() {
@@ -33687,7 +33776,7 @@ class QueryBuilderRuleComponent {
33687
33776
  QueryBuilderRuleComponent.decorators = [
33688
33777
  { type: Component, args: [{
33689
33778
  selector: 'query-builder-rule',
33690
- 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>",
33779
+ 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>",
33691
33780
  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%}}"]
33692
33781
  },] }
33693
33782
  ];
@@ -35119,7 +35208,12 @@ var EnumPermissionType;
35119
35208
  (function (EnumPermissionType) {
35120
35209
  EnumPermissionType[EnumPermissionType["MAIN"] = 0] = "MAIN";
35121
35210
  EnumPermissionType[EnumPermissionType["SHARE"] = 1] = "SHARE"; // Bản ghi tạo ra để chia sẻ
35122
- })(EnumPermissionType || (EnumPermissionType = {}));
35211
+ })(EnumPermissionType || (EnumPermissionType = {}));
35212
+ var EnumWorkflowCheckboxOption;
35213
+ (function (EnumWorkflowCheckboxOption) {
35214
+ EnumWorkflowCheckboxOption[EnumWorkflowCheckboxOption["TAO_CONG_VIEC"] = 1] = "TAO_CONG_VIEC";
35215
+ EnumWorkflowCheckboxOption[EnumWorkflowCheckboxOption["AUTO_NEXT_STEP"] = 2] = "AUTO_NEXT_STEP";
35216
+ })(EnumWorkflowCheckboxOption || (EnumWorkflowCheckboxOption = {}));
35123
35217
 
35124
35218
  const StateMachineTopic = {
35125
35219
  CONNECTION_CHANGE: 'CONNECTION_CHANGE'
@@ -35135,7 +35229,7 @@ const DataSourceTargetType = [
35135
35229
  { id: ɵ3, ten: 'Người dùng' },
35136
35230
  { id: ɵ4, ten: 'Đơn vị' },
35137
35231
  { id: ɵ5, ten: 'Nhóm người dùng' },
35138
- { id: ɵ6, ten: 'Vai trò' }
35232
+ { id: ɵ6, ten: 'Chức vụ' }
35139
35233
  ];
35140
35234
  const ɵ7 = EnumUserRule.CAP_TREN, ɵ8 = EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH, ɵ9 = EnumUserRule.NGUOI_NHAN, ɵ10 = EnumUserRule.NGUOI_THEO_DOI;
35141
35235
  const DataSourceUserRule = [
@@ -35156,6 +35250,11 @@ const DataSourceUserSender = [
35156
35250
  // { id: EnumUserRule.CAP_TREN_DA_GUI, ten: 'Cấp trên đã trình' },
35157
35251
  // { id: EnumUserRule.NGUOI_CUOI_CUNG, ten: 'Người cuối cùng' },
35158
35252
  { id: ɵ12, ten: 'Người tham gia quy trình' }
35253
+ ];
35254
+ const ɵ13 = EnumWorkflowCheckboxOption.TAO_CONG_VIEC, ɵ14 = EnumWorkflowCheckboxOption.AUTO_NEXT_STEP;
35255
+ const DataSourceWorkflowCheckboxOption = [
35256
+ { id: ɵ13, ten: 'Tạo công việc' },
35257
+ { id: ɵ14, ten: 'Tự động chuyển bước đầu tiên' }
35159
35258
  ];
35160
35259
 
35161
35260
  class StateMetadataComponent extends DataFormBase {
@@ -35335,6 +35434,41 @@ StateComponent.propDecorators = {
35335
35434
  onReady: [{ type: Output }]
35336
35435
  };
35337
35436
 
35437
+ class DmChucVuService extends BaseService {
35438
+ constructor(http, injector, _moduleConfigService) {
35439
+ super(http, injector, `${_moduleConfigService.getConfig().environment.apiDomain.canboEndpoint}/${_moduleConfigService.getConfig().environment.apiVersion}/DM_ChucVu`);
35440
+ this.serviceCode = 'canbo';
35441
+ this.entityName = 'DM_ChucVu';
35442
+ this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.canboEndpoint;
35443
+ this._moduleConfig = _moduleConfigService.getConfig();
35444
+ }
35445
+ }
35446
+ DmChucVuService.ɵprov = ɵɵdefineInjectable({ factory: function DmChucVuService_Factory() { return new DmChucVuService(ɵɵinject(HttpClient), ɵɵinject(INJECTOR), ɵɵinject(ModuleConfigService)); }, token: DmChucVuService, providedIn: "root" });
35447
+ DmChucVuService.decorators = [
35448
+ { type: Injectable, args: [{
35449
+ providedIn: 'root'
35450
+ },] }
35451
+ ];
35452
+ DmChucVuService.ctorParameters = () => [
35453
+ { type: HttpClient },
35454
+ { type: Injector },
35455
+ { type: ModuleConfigService }
35456
+ ];
35457
+
35458
+ class WfItem {
35459
+ }
35460
+ class WfSchema {
35461
+ }
35462
+ class WfMachine {
35463
+ }
35464
+ class WfAction {
35465
+ constructor() {
35466
+ this.editing = false;
35467
+ }
35468
+ }
35469
+ class WorkflowTargetDefaultValue {
35470
+ }
35471
+
35338
35472
  function createJsPlumnInstance(containerId, viewOnly) {
35339
35473
  const jsPlumbOptions = {
35340
35474
  Container: containerId,
@@ -35457,11 +35591,11 @@ function createRolePickerControl(_roleService, field, label) {
35457
35591
  return new AutoCompletePickerControlSchema({
35458
35592
  field,
35459
35593
  label,
35460
- title: 'Chọn vai trò',
35461
- placeholder: 'Chọn vai trò',
35594
+ title: 'Chọn chức vụ',
35595
+ placeholder: 'Chọn chức vụ',
35462
35596
  mdWidth: 12,
35463
35597
  baseService: _roleService,
35464
- displayField: 'name',
35598
+ displayField: 'ten',
35465
35599
  fieldPlus: 'code',
35466
35600
  fieldSearchText: ['code'],
35467
35601
  multiple: true,
@@ -35474,8 +35608,8 @@ function createRolePickerControl(_roleService, field, label) {
35474
35608
  fullTextSearch: true
35475
35609
  }),
35476
35610
  new EntityPickerColumn({
35477
- label: 'Tên vai trò',
35478
- code: 'name',
35611
+ label: 'Tên chức vụ',
35612
+ code: 'ten',
35479
35613
  dataType: 'string',
35480
35614
  operator: Operator.contain,
35481
35615
  notInFields: true
@@ -35491,6 +35625,172 @@ function setMetadataConnection(dest, source) {
35491
35625
  dest.data = source.data;
35492
35626
  }
35493
35627
 
35628
+ class StateMachinesConnectionReceiverConditionComponent extends DataFormBase {
35629
+ constructor(injector, _dmChucVuService, _userGroupService) {
35630
+ super(injector);
35631
+ this._dmChucVuService = _dmChucVuService;
35632
+ this._userGroupService = _userGroupService;
35633
+ this.receiverDynamicRules = [];
35634
+ this.receiverDynamicViewRules = [];
35635
+ this.dataSourceAction = [];
35636
+ this.autoGetDetail = false;
35637
+ this.autoSave = false;
35638
+ }
35639
+ ngOnInit() {
35640
+ super.ngOnInit();
35641
+ this.doNotCheckBaseService = true;
35642
+ this.renderDataSourceAction();
35643
+ this.setting.schema = [
35644
+ new CustomControlSchema({
35645
+ field: 'receiverRules',
35646
+ label: 'Người nhận xử lý',
35647
+ mdWidth: 12
35648
+ }),
35649
+ new CustomControlSchema({
35650
+ field: 'receiverViewRules',
35651
+ label: 'Người nhận chỉ xem',
35652
+ mdWidth: 12
35653
+ })
35654
+ ];
35655
+ this.dynamicSchema = [
35656
+ new DropdownControlSchema({
35657
+ field: 'ruleType',
35658
+ label: 'Người dùng',
35659
+ dataSource: DataSourceUserRule,
35660
+ operators: [
35661
+ { id: Operator.in, ten: 'Là' }
35662
+ ]
35663
+ }),
35664
+ new DropdownControlSchema({
35665
+ field: 'userMade',
35666
+ label: 'Người dùng thao tác',
35667
+ valueField: 'code',
35668
+ dataSource: this.dataSourceAction,
35669
+ operators: [
35670
+ { id: Operator.in, ten: 'Thao tác' }
35671
+ ]
35672
+ }),
35673
+ new UserPickerControlSchema({
35674
+ field: 'userIds',
35675
+ label: 'Người dùng đích danh',
35676
+ placeholder: 'Chọn người dùng',
35677
+ mdWidth: 12
35678
+ }),
35679
+ createOrgPickerControl('donViId', 'Đơn vị'),
35680
+ new DropdownControlSchema({
35681
+ field: 'donViCap',
35682
+ label: 'Đơn vị cấp',
35683
+ multiple: true,
35684
+ dataSource: [
35685
+ { id: 1, ten: '1' },
35686
+ { id: 2, ten: '2' },
35687
+ { id: 3, ten: '3' }
35688
+ ]
35689
+ }),
35690
+ createRolePickerControl(this._dmChucVuService, 'roleId', 'Chức vụ'),
35691
+ createUserGroupPickerControl(this._userGroupService, 'groupId', 'Nhóm người dùng'),
35692
+ new NumberRangeControlSchema({
35693
+ field: 'lanThu',
35694
+ label: 'Lần thứ'
35695
+ }),
35696
+ new CustomControlSchema({
35697
+ field: 'customField',
35698
+ label: 'Trường dữ liệu',
35699
+ operators: [
35700
+ { id: Operator.equal, ten: 'Bằng' },
35701
+ { id: Operator.notEqual, ten: 'Không bằng' },
35702
+ { id: Operator.greater, ten: 'Lớn hơn' },
35703
+ { id: Operator.greaterThanEqual, ten: 'Lớn hơn hoặc bằng' },
35704
+ { id: Operator.lower, ten: 'Nhỏ hơn' },
35705
+ { id: Operator.lowerThanEqual, ten: 'Nhỏ hơn hoặc bằng' }
35706
+ ]
35707
+ })
35708
+ ];
35709
+ if (this.data && this.data.data) {
35710
+ this.receiverDynamicRules = this.data.data.receiverRules;
35711
+ this.receiverDynamicViewRules = this.data.data.receiverViewRules;
35712
+ }
35713
+ if (this.isFormAdd) {
35714
+ this.receiverDynamicViewRules = [
35715
+ this.newFilter('ruleType', Operator.in, [
35716
+ EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH,
35717
+ EnumUserRule.NGUOI_NHAN,
35718
+ EnumUserRule.NGUOI_THEO_DOI
35719
+ ])
35720
+ ];
35721
+ }
35722
+ }
35723
+ renderDataSourceAction() {
35724
+ const dataSourceAction = [];
35725
+ if (this.workflowData) {
35726
+ this.workflowData.connections.sort(multipleSort('soThuTu')).forEach(action => {
35727
+ const source = this.workflowData.machines.find(q => q.id == action.source);
35728
+ if (source) {
35729
+ const itemAdd = {
35730
+ code: `${source.code}___${action.code}`,
35731
+ name: action.name,
35732
+ nameLower: action.name.toLowerCase(),
35733
+ ten: action.name,
35734
+ sourceName: source.name
35735
+ };
35736
+ const itemExist = dataSourceAction.find(q => q.nameLower == itemAdd.nameLower);
35737
+ if (itemExist) {
35738
+ itemExist.ten = `${itemExist.name} (${itemExist.sourceName})`;
35739
+ itemAdd.ten = `${itemAdd.name} (${itemAdd.sourceName})`;
35740
+ }
35741
+ dataSourceAction.push(itemAdd);
35742
+ }
35743
+ });
35744
+ }
35745
+ this.dataSourceAction = dataSourceAction;
35746
+ }
35747
+ onFormInitialized(evt) {
35748
+ var _a;
35749
+ return __awaiter(this, void 0, void 0, function* () {
35750
+ if (this.data) {
35751
+ this.assignFieldPlus(evt.model, (_a = this.data.data) !== null && _a !== void 0 ? _a : {});
35752
+ }
35753
+ else {
35754
+ evt.model.data = {};
35755
+ }
35756
+ });
35757
+ }
35758
+ assignFieldPlus(dest, source) {
35759
+ dest.receiverRules = source.receiverRules;
35760
+ dest.receiverViewRules = source.receiverViewRules;
35761
+ }
35762
+ getModelData() {
35763
+ return __awaiter(this, void 0, void 0, function* () {
35764
+ const dataPlus = {};
35765
+ this.model.data.receiverRules = this.queryBuilder.getQuery();
35766
+ this.model.data.receiverViewRules = this.queryBuilderView.getQuery();
35767
+ this.assignFieldPlus(dataPlus, this.model.data);
35768
+ return dataPlus;
35769
+ });
35770
+ }
35771
+ }
35772
+ StateMachinesConnectionReceiverConditionComponent.decorators = [
35773
+ { type: Component, args: [{
35774
+ selector: 'statemachines-connection-receiver-condition',
35775
+ 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>",
35776
+ providers: [ComponentContextService],
35777
+ 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)}"]
35778
+ },] }
35779
+ ];
35780
+ StateMachinesConnectionReceiverConditionComponent.ctorParameters = () => [
35781
+ { type: Injector },
35782
+ { type: DmChucVuService },
35783
+ { type: UserGroupRealService }
35784
+ ];
35785
+ StateMachinesConnectionReceiverConditionComponent.propDecorators = {
35786
+ queryBuilder: [{ type: ViewChild, args: ['queryBuilder', { static: false },] }],
35787
+ queryBuilderView: [{ type: ViewChild, args: ['queryBuilderView', { static: false },] }],
35788
+ workflowData: [{ type: Input }],
35789
+ data: [{ type: Input }],
35790
+ isFormAdd: [{ type: Input }],
35791
+ viewOnly: [{ type: Input }]
35792
+ };
35793
+
35494
35794
  class StateMachinesConnectionReceiverDepartmentComponent extends DataFormBase {
35495
35795
  constructor(injector) {
35496
35796
  super(injector);
@@ -35502,9 +35802,35 @@ class StateMachinesConnectionReceiverDepartmentComponent extends DataFormBase {
35502
35802
  super.ngOnInit();
35503
35803
  this.doNotCheckBaseService = true;
35504
35804
  this.setting.schema = [
35805
+ this.createCheckboxRule('departmentRules'),
35505
35806
  this.createOrgPickerControlReceiver('departmentIds', 'Đơn vị nhận'),
35807
+ this.createCheckboxRule('departmentViewRules'),
35506
35808
  this.createOrgPickerControlReceiver('departmentViewIds', 'Đơn vị theo dõi'),
35507
35809
  ];
35810
+ if (this.isFormAdd) {
35811
+ if (!this.data.data) {
35812
+ this.data.data = {};
35813
+ }
35814
+ if (this.data.data.departmentRules == null) {
35815
+ this.data.data.departmentRules = [EnumUserRule.NGUOI_NHAN];
35816
+ }
35817
+ if (this.data.data.departmentViewRules == null) {
35818
+ this.data.data.departmentViewRules = [EnumUserRule.NGUOI_THEO_DOI];
35819
+ }
35820
+ }
35821
+ }
35822
+ createCheckboxRule(field) {
35823
+ return new CheckBoxListControlSchema({
35824
+ field,
35825
+ label: 'Cán bộ đặc biệt',
35826
+ class: 'rules',
35827
+ dataSource: [
35828
+ { id: EnumUserRule.NGUOI_NHAN, ten: 'Đơn vị nhận bước trước' },
35829
+ { id: EnumUserRule.NGUOI_THEO_DOI, ten: 'Đơn vị theo dõi bước trước' }
35830
+ ],
35831
+ showLabel: false,
35832
+ mdWidth: 12
35833
+ });
35508
35834
  }
35509
35835
  createOrgPickerControlReceiver(field, label) {
35510
35836
  const control = createOrgPickerControl(field, label);
@@ -35530,7 +35856,9 @@ class StateMachinesConnectionReceiverDepartmentComponent extends DataFormBase {
35530
35856
  });
35531
35857
  }
35532
35858
  assignFieldPlus(dest, source) {
35859
+ dest.departmentRules = source.departmentRules;
35533
35860
  dest.departmentIds = source.departmentIds;
35861
+ dest.departmentViewRules = source.departmentViewRules;
35534
35862
  dest.departmentViewIds = source.departmentViewIds;
35535
35863
  }
35536
35864
  }
@@ -35547,6 +35875,7 @@ StateMachinesConnectionReceiverDepartmentComponent.ctorParameters = () => [
35547
35875
  ];
35548
35876
  StateMachinesConnectionReceiverDepartmentComponent.propDecorators = {
35549
35877
  data: [{ type: Input }],
35878
+ isFormAdd: [{ type: Input }],
35550
35879
  viewOnly: [{ type: Input }]
35551
35880
  };
35552
35881
 
@@ -35562,9 +35891,35 @@ class StateMachinesConnectionReceiverGroupComponent extends DataFormBase {
35562
35891
  super.ngOnInit();
35563
35892
  this.doNotCheckBaseService = true;
35564
35893
  this.setting.schema = [
35894
+ this.createCheckboxRule('groupRules'),
35565
35895
  this.createUserGroupPickerControlReceiver('groupIds', 'Nhóm người dùng nhận'),
35896
+ this.createCheckboxRule('groupViewRules'),
35566
35897
  this.createUserGroupPickerControlReceiver('groupViewIds', 'Nhóm người dùng theo dõi'),
35567
35898
  ];
35899
+ if (this.isFormAdd) {
35900
+ if (!this.data.data) {
35901
+ this.data.data = {};
35902
+ }
35903
+ if (this.data.data.groupRules == null) {
35904
+ this.data.data.groupRules = [EnumUserRule.NGUOI_NHAN];
35905
+ }
35906
+ if (this.data.data.groupViewRules == null) {
35907
+ this.data.data.groupViewRules = [EnumUserRule.NGUOI_THEO_DOI];
35908
+ }
35909
+ }
35910
+ }
35911
+ createCheckboxRule(field) {
35912
+ return new CheckBoxListControlSchema({
35913
+ field,
35914
+ label: 'Cán bộ đặc biệt',
35915
+ class: 'rules',
35916
+ dataSource: [
35917
+ { id: EnumUserRule.NGUOI_NHAN, ten: 'Nhóm người dùng nhận bước trước' },
35918
+ { id: EnumUserRule.NGUOI_THEO_DOI, ten: 'Nhóm người dùng theo dõi bước trước' }
35919
+ ],
35920
+ showLabel: false,
35921
+ mdWidth: 12
35922
+ });
35568
35923
  }
35569
35924
  createUserGroupPickerControlReceiver(field, label) {
35570
35925
  const control = createUserGroupPickerControl(this._userGroupService, field, label);
@@ -35590,7 +35945,9 @@ class StateMachinesConnectionReceiverGroupComponent extends DataFormBase {
35590
35945
  });
35591
35946
  }
35592
35947
  assignFieldPlus(dest, source) {
35948
+ dest.groupRules = source.groupRules;
35593
35949
  dest.groupIds = source.groupIds;
35950
+ dest.groupViewRules = source.groupViewRules;
35594
35951
  dest.groupViewIds = source.groupViewIds;
35595
35952
  }
35596
35953
  }
@@ -35608,13 +35965,14 @@ StateMachinesConnectionReceiverGroupComponent.ctorParameters = () => [
35608
35965
  ];
35609
35966
  StateMachinesConnectionReceiverGroupComponent.propDecorators = {
35610
35967
  data: [{ type: Input }],
35968
+ isFormAdd: [{ type: Input }],
35611
35969
  viewOnly: [{ type: Input }]
35612
35970
  };
35613
35971
 
35614
35972
  class StateMachinesConnectionReceiverRoleComponent extends DataFormBase {
35615
- constructor(injector, _roleService) {
35973
+ constructor(injector, _dmChucVuService) {
35616
35974
  super(injector);
35617
- this._roleService = _roleService;
35975
+ this._dmChucVuService = _dmChucVuService;
35618
35976
  this.dataSourceAction = [];
35619
35977
  this.autoGetDetail = false;
35620
35978
  this.autoSave = false;
@@ -35623,12 +35981,38 @@ class StateMachinesConnectionReceiverRoleComponent extends DataFormBase {
35623
35981
  super.ngOnInit();
35624
35982
  this.doNotCheckBaseService = true;
35625
35983
  this.setting.schema = [
35626
- this.createRolePickerControlReceiver('roleIds', 'Vai trò nhận'),
35627
- this.createRolePickerControlReceiver('roleViewIds', 'Vai trò theo dõi'),
35984
+ this.createCheckboxRule('roleRules'),
35985
+ this.createRolePickerControlReceiver('roleIds', 'Chức vụ nhận'),
35986
+ this.createCheckboxRule('roleViewRules'),
35987
+ this.createRolePickerControlReceiver('roleViewIds', 'Chức vụ theo dõi'),
35628
35988
  ];
35989
+ if (this.isFormAdd) {
35990
+ if (!this.data.data) {
35991
+ this.data.data = {};
35992
+ }
35993
+ if (this.data.data.roleRules == null) {
35994
+ this.data.data.roleRules = [EnumUserRule.NGUOI_NHAN];
35995
+ }
35996
+ if (this.data.data.roleViewRules == null) {
35997
+ this.data.data.roleViewRules = [EnumUserRule.NGUOI_THEO_DOI];
35998
+ }
35999
+ }
36000
+ }
36001
+ createCheckboxRule(field) {
36002
+ return new CheckBoxListControlSchema({
36003
+ field,
36004
+ label: 'Cán bộ đặc biệt',
36005
+ class: 'rules',
36006
+ dataSource: [
36007
+ { id: EnumUserRule.NGUOI_NHAN, ten: 'Chức vụ nhận bước trước' },
36008
+ { id: EnumUserRule.NGUOI_THEO_DOI, ten: 'Chức vụ theo dõi bước trước' }
36009
+ ],
36010
+ showLabel: false,
36011
+ mdWidth: 12
36012
+ });
35629
36013
  }
35630
36014
  createRolePickerControlReceiver(field, label) {
35631
- const control = createRolePickerControl(this._roleService, field, label);
36015
+ const control = createRolePickerControl(this._dmChucVuService, field, label);
35632
36016
  return control;
35633
36017
  }
35634
36018
  onFormInitialized(evt) {
@@ -35651,7 +36035,9 @@ class StateMachinesConnectionReceiverRoleComponent extends DataFormBase {
35651
36035
  });
35652
36036
  }
35653
36037
  assignFieldPlus(dest, source) {
36038
+ dest.roleRules = source.roleRules;
35654
36039
  dest.roleIds = source.roleIds;
36040
+ dest.roleViewRules = source.roleViewRules;
35655
36041
  dest.roleViewIds = source.roleViewIds;
35656
36042
  }
35657
36043
  }
@@ -35665,33 +36051,14 @@ StateMachinesConnectionReceiverRoleComponent.decorators = [
35665
36051
  ];
35666
36052
  StateMachinesConnectionReceiverRoleComponent.ctorParameters = () => [
35667
36053
  { type: Injector },
35668
- { type: RoleService }
36054
+ { type: DmChucVuService }
35669
36055
  ];
35670
36056
  StateMachinesConnectionReceiverRoleComponent.propDecorators = {
35671
36057
  data: [{ type: Input }],
36058
+ isFormAdd: [{ type: Input }],
35672
36059
  viewOnly: [{ type: Input }]
35673
36060
  };
35674
36061
 
35675
- class WfItem {
35676
- }
35677
- class WfSchema {
35678
- }
35679
- class WfMachine {
35680
- }
35681
- class WfAction {
35682
- constructor() {
35683
- this.editing = false;
35684
- }
35685
- }
35686
- class WorkflowTargetDefaultValue {
35687
- constructor() {
35688
- this.dicDefaultValue = {};
35689
- this.dicDefaultValueByWorkflow = {};
35690
- this.dicByTargetCanEdit = {};
35691
- this.dicByTargetOnlyView = {};
35692
- }
35693
- }
35694
-
35695
36062
  class StateMachinesConnectionReceiverUserComponent extends DataFormBase {
35696
36063
  constructor(injector) {
35697
36064
  super(injector);
@@ -35874,8 +36241,13 @@ class StateMachinesConnectionReceiverComponent extends ComponentBase {
35874
36241
  constructor(injector) {
35875
36242
  super(injector);
35876
36243
  this.tabDataReceiver = [
36244
+ // {
36245
+ // code: 'user',
36246
+ // icon: 'fa fa-user',
36247
+ // label: ''
36248
+ // },
35877
36249
  {
35878
- code: 'user',
36250
+ code: 'condition',
35879
36251
  icon: 'fa fa-user',
35880
36252
  label: ''
35881
36253
  },
@@ -35901,11 +36273,16 @@ class StateMachinesConnectionReceiverComponent extends ComponentBase {
35901
36273
  getModelData() {
35902
36274
  return __awaiter(this, void 0, void 0, function* () {
35903
36275
  const dataPlus = {};
35904
- const modelUser = yield this.userForm.getModelData();
35905
- if (modelUser == null) {
36276
+ const modelCondition = yield this.conditionForm.getModelData();
36277
+ if (modelCondition == null) {
35906
36278
  return null;
35907
36279
  }
35908
- this.userForm.assignFieldPlus(dataPlus, modelUser);
36280
+ this.conditionForm.assignFieldPlus(dataPlus, modelCondition);
36281
+ // const modelUser = await this.userForm.getModelData();
36282
+ // if (modelUser == null) {
36283
+ // return null;
36284
+ // }
36285
+ // this.userForm.assignFieldPlus(dataPlus, modelUser);
35909
36286
  const modelDepartment = yield this.departmentForm.getModelData();
35910
36287
  if (modelDepartment == null) {
35911
36288
  return null;
@@ -35928,7 +36305,7 @@ class StateMachinesConnectionReceiverComponent extends ComponentBase {
35928
36305
  StateMachinesConnectionReceiverComponent.decorators = [
35929
36306
  { type: Component, args: [{
35930
36307
  selector: 'statemachines-connection-receiver',
35931
- 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>",
36308
+ 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>",
35932
36309
  providers: [ComponentContextService],
35933
36310
  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}"]
35934
36311
  },] }
@@ -35938,21 +36315,23 @@ StateMachinesConnectionReceiverComponent.ctorParameters = () => [
35938
36315
  ];
35939
36316
  StateMachinesConnectionReceiverComponent.propDecorators = {
35940
36317
  userForm: [{ type: ViewChild, args: [StateMachinesConnectionReceiverUserComponent, { static: false },] }],
36318
+ conditionForm: [{ type: ViewChild, args: [StateMachinesConnectionReceiverConditionComponent, { static: false },] }],
35941
36319
  departmentForm: [{ type: ViewChild, args: [StateMachinesConnectionReceiverDepartmentComponent, { static: false },] }],
35942
36320
  groupForm: [{ type: ViewChild, args: [StateMachinesConnectionReceiverGroupComponent, { static: false },] }],
35943
36321
  roleForm: [{ type: ViewChild, args: [StateMachinesConnectionReceiverRoleComponent, { static: false },] }],
35944
36322
  designerContext: [{ type: Input }],
35945
36323
  data: [{ type: Input }],
36324
+ isFormAdd: [{ type: Input }],
35946
36325
  workflowData: [{ type: Input }],
35947
36326
  viewOnly: [{ type: Input }]
35948
36327
  };
35949
36328
 
35950
36329
  class StateMachinesConnectionSenderComponent extends DataFormBase {
35951
- constructor(injector, notifierService, _userGroupService, _roleService) {
36330
+ constructor(injector, notifierService, _userGroupService, _dmChucVuService) {
35952
36331
  super(injector);
35953
36332
  this.notifierService = notifierService;
35954
36333
  this._userGroupService = _userGroupService;
35955
- this._roleService = _roleService;
36334
+ this._dmChucVuService = _dmChucVuService;
35956
36335
  this.dynamicRules = [];
35957
36336
  this.autoGetDetail = false;
35958
36337
  this.autoSave = false;
@@ -35981,7 +36360,7 @@ class StateMachinesConnectionSenderComponent extends DataFormBase {
35981
36360
  { id: 3, ten: '3' }
35982
36361
  ]
35983
36362
  }),
35984
- createRolePickerControl(this._roleService, 'roleId', 'Vai trò'),
36363
+ createRolePickerControl(this._dmChucVuService, 'roleId', 'Chức vụ'),
35985
36364
  userGroupPickerControl,
35986
36365
  new DropdownControlSchema({
35987
36366
  field: 'lastStateCode',
@@ -35991,6 +36370,18 @@ class StateMachinesConnectionSenderComponent extends DataFormBase {
35991
36370
  displayField: 'name',
35992
36371
  showLabel: false,
35993
36372
  mdWidth: 12
36373
+ }),
36374
+ new CustomControlSchema({
36375
+ field: 'customField',
36376
+ label: 'Trường dữ liệu',
36377
+ operators: [
36378
+ { id: Operator.equal, ten: 'Bằng' },
36379
+ { id: Operator.notEqual, ten: 'Không bằng' },
36380
+ { id: Operator.greater, ten: 'Lớn hơn' },
36381
+ { id: Operator.greaterThanEqual, ten: 'Lớn hơn hoặc bằng' },
36382
+ { id: Operator.lower, ten: 'Nhỏ hơn' },
36383
+ { id: Operator.lowerThanEqual, ten: 'Nhỏ hơn hoặc bằng' }
36384
+ ]
35994
36385
  })
35995
36386
  ];
35996
36387
  if (this.data && this.data.data) {
@@ -36041,7 +36432,7 @@ StateMachinesConnectionSenderComponent.ctorParameters = () => [
36041
36432
  { type: Injector },
36042
36433
  { type: NotifierService },
36043
36434
  { type: UserGroupRealService },
36044
- { type: RoleService }
36435
+ { type: DmChucVuService }
36045
36436
  ];
36046
36437
  StateMachinesConnectionSenderComponent.propDecorators = {
36047
36438
  queryBuilder: [{ type: ViewChild, args: ['queryBuilder', { static: false },] }],
@@ -36127,16 +36518,20 @@ class StateMachinesConnectionMetadataComponent extends DataFormBase {
36127
36518
  required: true,
36128
36519
  })
36129
36520
  ];
36521
+ if (this.data && this.data.editing) {
36522
+ this.isFormAdd = false;
36523
+ }
36524
+ else {
36525
+ this.isFormAdd = true;
36526
+ }
36130
36527
  }
36131
36528
  onFormInitialized(evt) {
36132
36529
  return __awaiter(this, void 0, void 0, function* () {
36133
- if (this.data) {
36134
- this.isFormAdd = false;
36530
+ if (!this.isFormAdd) {
36135
36531
  setMetadataConnection(evt.model, this.data);
36136
36532
  this.source = this.data.source;
36137
36533
  }
36138
36534
  else {
36139
- this.isFormAdd = true;
36140
36535
  evt.model.id = this._commonService.guid();
36141
36536
  evt.model.data = {};
36142
36537
  }
@@ -36190,7 +36585,7 @@ class StateMachinesConnectionMetadataComponent extends DataFormBase {
36190
36585
  StateMachinesConnectionMetadataComponent.decorators = [
36191
36586
  { type: Component, args: [{
36192
36587
  selector: 'statemachines-connection-metadata',
36193
- 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>",
36588
+ 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>",
36194
36589
  providers: [ComponentContextService],
36195
36590
  styles: [""]
36196
36591
  },] }
@@ -36567,7 +36962,7 @@ StateMachinesDesignerComponent.decorators = [
36567
36962
  selector: 'statemachines-designer',
36568
36963
  template: "<div class=\"state-control\" [ngStyle]=\"holderStyle\" [class.highlight]=\"highlighting\">\r\n <tn-custom-scrollbar *ngIf=\"useScrollBar\" #scrollbar [ngStyle]=\"{ height: '100%', display: 'block'}\"\r\n [config]=\"{suppressScrollX : true}\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </tn-custom-scrollbar>\r\n <ng-container *ngIf=\"!useScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </ng-container>\r\n <div class=\"container-note\">\r\n <span *ngIf=\"!viewOnly\"><i class=\"fas fa-info-circle\"></i> Click \u0111\u00FAp v\u00E0o v\u00F9ng tr\u1ED1ng \u0111\u1EC3 th\u00EAm m\u1EDBi tr\u1EA1ng th\u00E1i\r\n </span>\r\n\r\n <button (click)=\"copyWfToClipboard()\" pButton type=\"button\" pTooltip=\"Sao ch\u00E9p\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-info p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i class=\"fas fa-copy\"></i>\r\n </button>\r\n\r\n <button *ngIf=\"!viewOnly\" (click)=\"pasteWfToClipboard()\" pButton type=\"button\" label=\"Success\" pTooltip=\"D\u00E1n\"\r\n tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-success p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i class=\"fas fa-paste\"></i>\r\n </button>\r\n\r\n <button (click)=\"fullScreen(!fullScreenMode)\" pButton type=\"button\" label=\"Success\" pTooltip=\"M\u1EDF r\u1ED9ng\"\r\n tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-secondary p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i *ngIf=\"!fullScreenMode\" class=\"fas fa-expand-arrows-alt\"></i>\r\n <i *ngIf=\"fullScreenMode\" class=\"fas fa-compress-arrows-alt\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #content>\r\n <div *ngIf=\"jsPlumbReady\" #container [id]=\"containerId\" class=\"container\" [ngClass]=\"viewOnly?'':'editable'\"\r\n [ngStyle]=\"{ height: viewHeight + 'px' }\" (dblclick)=\"createNewNode($event, container)\">\r\n <ng-container *ngIf=\"data.machines.length > 0\">\r\n <state *ngFor=\"let machine of data.machines\" [id]=\"containerId + '_' + machine.id\" [machine]=\"machine\"\r\n [viewOnly]=\"viewOnly\" class=\"state-node\"\r\n [ngStyle]=\"{'left': machine.location[0] + 'px', 'top': machine.location[1] + 'px'}\"\r\n [jsPlumbInstance]=\"jsPlumbInstance\" [containerId]=\"containerId\" (onEdit)=\"editNode($event)\"\r\n (onDelete)=\"deleteNode($event)\" (onReady)=\"checkStatesReadyThenRenderConnections($event)\">\r\n </state>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\"></p-contextMenu>\r\n\r\n<tn-dialog *ngIf=\"stateMetadataModel.showEditForm\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"'Th\u00F4ng tin tr\u1EA1ng th\u00E1i' | translate\" [popupSize]=\"stateMetadataModel.popupSize\"\r\n (onHide)=\"hideStateMetadataForm()\">\r\n <state-metadata #formBase [data]=\"currentState\" [location]=\"locationWhenAdd\" [machinesData]=\"data\"\r\n (onSaved)=\"handleSavedStateMetadata($event)\" (onCancel)=\"hideStateMetadataForm()\"\r\n (onRemove)=\"handleRemoveFromDialog()\">\r\n </state-metadata>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"stateMachineConnectionModel.showEditForm\" #dialog [styleClass]=\"'address-form'\"\r\n [useDefaultScrollBar]=\"true\" [header]=\"'Th\u00F4ng tin \u0111\u01B0\u1EDDng n\u1ED1i' | translate\"\r\n [popupSize]=\"stateMachineConnectionModel.popupSize\" (onHide)=\"hideConnectionForm()\">\r\n <statemachines-connection-metadata #formBase [data]=\"currentConnectionObject.connectionMetadata\"\r\n [designerContext]=\"context\" [machinesData]=\"data\" [viewOnly]=\"viewOnly\"\r\n (onSaved)=\"handleSavedConnection($event)\" (onCancel)=\"hideConnectionForm()\"\r\n (onRemove)=\"handleRemoveConnectionFromDialog()\">\r\n </statemachines-connection-metadata>\r\n</tn-dialog>",
36569
36964
  providers: [ComponentContextService],
36570
- styles: [".state-control{border:1px solid #ced4da;border-radius:3px;overflow:hidden;position:relative}.state-control .container{height:1500px;position:relative}.state-control .container .state-node{display:block;height:100px;max-height:100px;position:absolute;width:150px}.state-control .container-note{display:inline-block;font-weight:100;margin:0;padding:10px 14px;position:absolute;text-align:right;top:0;width:100%}.state-control .container-note span{background:#ffeb3b;line-height:30px;margin-right:10px;padding:5px}.state-control .container-note button{margin-right:5px}:host ::ng-deep .jtk-hover{z-index:1}:host ::ng-deep .conn-label{background:rgba(97,183,207,.30196078431372547);border:1px dashed #c5c5c5;padding:5px;z-index:2}:host ::ng-deep .conn-label:hover{background:#fff}:host ::ng-deep .conn-label.jtk-hover{background:#44a7c3;border:none;color:#fff;z-index:3}:host ::ng-deep .editable .conn-label,:host ::ng-deep .editable .jtk-connector,:host ::ng-deep .editable .jtk-endpoint,:host ::ng-deep .editable path{cursor:pointer}::ng-deep .state-control.highlight .conn-label,::ng-deep .state-control.highlight .jtk-connector,::ng-deep .state-control.highlight state{opacity:.3}::ng-deep .state-control.highlight .conn-label.--current,::ng-deep .state-control.highlight .jtk-connector.--current,::ng-deep .state-control.highlight state.--current{opacity:unset}"]
36965
+ styles: [".state-control{border:1px solid #ced4da;border-radius:3px;overflow:hidden;position:relative}.state-control .container{height:1500px;position:relative}.state-control .container .state-node{display:block;height:100px;max-height:100px;position:absolute;width:150px}.state-control .container-note{display:inline-block;font-weight:100;margin:0;padding:10px 14px;position:absolute;text-align:right;top:0;width:100%}.state-control .container-note span{background:#ffeb3b;line-height:30px;margin-right:10px;padding:5px}.state-control .container-note button{margin-right:5px}:host ::ng-deep .jtk-hover{z-index:1}:host ::ng-deep .conn-label{background:rgba(97,183,207,.30196078431372547);border:1px dashed #c5c5c5;padding:5px;z-index:2}:host ::ng-deep .conn-label:hover{background:#fff}:host ::ng-deep .conn-label.jtk-hover{background:#44a7c3;border:none;color:#fff;z-index:3}:host ::ng-deep .editable .conn-label,:host ::ng-deep .editable .jtk-connector,:host ::ng-deep .editable .jtk-endpoint,:host ::ng-deep .editable path{cursor:pointer}::ng-deep .state-control.highlight .conn-label,::ng-deep .state-control.highlight .jtk-connector,::ng-deep .state-control.highlight state{opacity:.3}::ng-deep .state-control.highlight .conn-label.--current,::ng-deep .state-control.highlight .jtk-connector.--current,::ng-deep .state-control.highlight state.--current{opacity:unset}::ng-deep .state-control.highlight .conn-label.--current{background:#44a7c3;border:none;color:#fff}"]
36571
36966
  },] }
36572
36967
  ];
36573
36968
  StateMachinesDesignerComponent.ctorParameters = () => [
@@ -36979,7 +37374,7 @@ class TnAppHelpComponent extends ComponentBase {
36979
37374
  TnAppHelpComponent.decorators = [
36980
37375
  { type: Component, args: [{
36981
37376
  selector: 'li[tn-app-help]',
36982
- 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>",
37377
+ 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>",
36983
37378
  providers: [ComponentContextService],
36984
37379
  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}"]
36985
37380
  },] }
@@ -37744,7 +38139,7 @@ class TnAppNotificationComponent extends ComponentBase {
37744
38139
  }
37745
38140
  handleClicked() {
37746
38141
  const domain = this.environment.clientDomain.thongbaoDomain;
37747
- this._router.navigate([`${domain}/thongbao-chuadoc`]);
38142
+ window.open(`${domain}/thongbao-chuadoc`);
37748
38143
  }
37749
38144
  }
37750
38145
  TnAppNotificationComponent.decorators = [
@@ -38694,10 +39089,11 @@ UserPickerDialogComponent.propDecorators = {
38694
39089
  };
38695
39090
 
38696
39091
  class UserPickerComponent extends ComponentBase {
38697
- constructor(_injector, _userV5Service, _translateService) {
39092
+ constructor(_injector, _userV5Service, _translateService, _dm_ChucVuService) {
38698
39093
  super(_injector);
38699
39094
  this._userV5Service = _userV5Service;
38700
39095
  this._translateService = _translateService;
39096
+ this._dm_ChucVuService = _dm_ChucVuService;
38701
39097
  this.popupSize = new PopupSize({
38702
39098
  width: 1100,
38703
39099
  height: 900,
@@ -38721,6 +39117,8 @@ class UserPickerComponent extends ComponentBase {
38721
39117
  this.dirty = false;
38722
39118
  this.tooltip = '';
38723
39119
  this.hasValue = false;
39120
+ this.searchSchema = {};
39121
+ this.searchData = {};
38724
39122
  }
38725
39123
  ngOnInit() {
38726
39124
  this.control._component = this;
@@ -38750,6 +39148,21 @@ class UserPickerComponent extends ComponentBase {
38750
39148
  code: 'email',
38751
39149
  dataType: 'string',
38752
39150
  fullTextSearch: true
39151
+ }),
39152
+ new EntityPickerColumn({
39153
+ label: 'Chức vụ',
39154
+ code: 'lstTenChucVu',
39155
+ templateFilter: this.filterChucVuRef,
39156
+ }),
39157
+ new EntityPickerColumn({
39158
+ label: 'Giảng viên',
39159
+ code: 'isGiangVien',
39160
+ dataType: 'boolean'
39161
+ }),
39162
+ new EntityPickerColumn({
39163
+ label: 'Chuyên viên',
39164
+ code: 'isChuyenVien',
39165
+ dataType: 'boolean'
38753
39166
  })
38754
39167
  ], mdWidth: 12 }));
38755
39168
  this.fieldSearchText = [...this.controlPicker.fieldSearchText];
@@ -38770,8 +39183,21 @@ class UserPickerComponent extends ComponentBase {
38770
39183
  this.funcReturnValue = value => value;
38771
39184
  this.buildFilterKeyword();
38772
39185
  this.buildSettingEntityPicker();
39186
+ this.createSchemaSearch();
38773
39187
  this.onReady.emit();
38774
39188
  }
39189
+ createSchemaSearch() {
39190
+ return __awaiter(this, void 0, void 0, function* () {
39191
+ this.searchSchema.idChucVus = new DropdownControlSchema({
39192
+ field: 'idChucVus',
39193
+ multiple: true,
39194
+ placeholder: 'Chọn chức vụ',
39195
+ baseService: this._dm_ChucVuService,
39196
+ sortField: 'soThuTu',
39197
+ loadOnInit: true
39198
+ });
39199
+ });
39200
+ }
38775
39201
  buildFilterKeyword() {
38776
39202
  if (this.fieldSearchText.length == 1) {
38777
39203
  this.getFilterOnSearch = value => this.newFilter(this.controlPicker.displayField, Operator.contain, value);
@@ -38867,6 +39293,13 @@ class UserPickerComponent extends ComponentBase {
38867
39293
  filters.push(this.newFilter(this.controlPicker.valueField, Operator.notEqual, this.value));
38868
39294
  }
38869
39295
  }
39296
+ if (this.searchData.idChucVus && this.searchData.idChucVus.length > 0) {
39297
+ const filterOrs = [];
39298
+ this.searchData.idChucVus.forEach(idChucVu => {
39299
+ filterOrs.push(this.newFilter('IdsChucVu', Operator.contain, idChucVu));
39300
+ });
39301
+ filters.push(this.newFilterContainer('or', ...filterOrs));
39302
+ }
38870
39303
  yield appendDefaultFilter(filters, this.control.defaultFilters);
38871
39304
  if (keyWord && keyWord.length > 0) {
38872
39305
  filters.push(this.getFilterOnSearch(keyWord));
@@ -39134,7 +39567,7 @@ class UserPickerComponent extends ComponentBase {
39134
39567
  UserPickerComponent.decorators = [
39135
39568
  { type: Component, args: [{
39136
39569
  selector: 'user-picker',
39137
- 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>",
39570
+ 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>",
39138
39571
  providers: [
39139
39572
  {
39140
39573
  provide: NG_VALUE_ACCESSOR,
@@ -39149,9 +39582,11 @@ UserPickerComponent.decorators = [
39149
39582
  UserPickerComponent.ctorParameters = () => [
39150
39583
  { type: Injector },
39151
39584
  { type: UserV5Service },
39152
- { type: TranslateService }
39585
+ { type: TranslateService },
39586
+ { type: DmChucVuService }
39153
39587
  ];
39154
39588
  UserPickerComponent.propDecorators = {
39589
+ filterChucVuRef: [{ type: ViewChild, args: ['filterChucVuRef', { static: true },] }],
39155
39590
  control: [{ type: Input }],
39156
39591
  popupSize: [{ type: Input }],
39157
39592
  multiple: [{ type: Input }],
@@ -40088,13 +40523,13 @@ PermissionSharingComponent.propDecorators = {
40088
40523
  };
40089
40524
 
40090
40525
  class ProcessWorkflowTargetComponent extends DataFormBase {
40091
- constructor(_injector, _stateMachinesService, _coCauToChucService, _userGroupService, _roleService) {
40526
+ constructor(_injector, _stateMachinesService, _coCauToChucService, _userGroupService, _dmChucVuService) {
40092
40527
  super(_injector);
40093
40528
  this._injector = _injector;
40094
40529
  this._stateMachinesService = _stateMachinesService;
40095
40530
  this._coCauToChucService = _coCauToChucService;
40096
40531
  this._userGroupService = _userGroupService;
40097
- this._roleService = _roleService;
40532
+ this._dmChucVuService = _dmChucVuService;
40098
40533
  }
40099
40534
  ngOnInit() {
40100
40535
  super.ngOnInit();
@@ -40119,40 +40554,8 @@ class ProcessWorkflowTargetComponent extends DataFormBase {
40119
40554
  // this.createUserPickerControl('idCapTrenGanNhats', 'Cán bộ cấp trên gần nhất'),
40120
40555
  this._createCoCauToChucControl('departmentIds', 'Đơn vị'),
40121
40556
  this._createUserGroupPickerControl('groupIds', 'Nhóm người dùng'),
40122
- this._createRolePickerControl('roleIds', 'Vai trò')
40557
+ this._createRolePickerControl('roleIds', 'Chức vụ')
40123
40558
  ];
40124
- // Ghép thêm các user theo rule vào userIds
40125
- this.addUserIdFromDicByRule(this.initValue.dicDefaultValue, this.data.rules);
40126
- // Ghép thêm các user theo rule in workflow vào userIds
40127
- this.addUserIdFromDicByRule(this.initValue.dicDefaultValueByWorkflow, this.data.ruleInWorkflows);
40128
- // Ghép thêm các value từ dicByTargetType vào các control
40129
- if (this.data.rules.some(q => q == EnumUserRule.NGUOI_NHAN)) {
40130
- this.addValueFromDicByTarget(this.initValue.dicByTargetCanEdit);
40131
- }
40132
- // Ghép thêm các value từ dicByTargetType vào các control
40133
- if (this.data.rules.some(q => q == EnumUserRule.NGUOI_THEO_DOI)) {
40134
- this.addValueFromDicByTarget(this.initValue.dicByTargetOnlyView);
40135
- }
40136
- }
40137
- addUserIdFromDicByRule(dicSource, rules) {
40138
- Object.keys(dicSource)
40139
- .filter(x => rules.some(q => q == x))
40140
- .forEach(rule => {
40141
- this.addDistinctToList(this.data.userIds, dicSource[rule]);
40142
- });
40143
- }
40144
- addValueFromDicByTarget(dicByTargetType) {
40145
- this.addDistinctToList(this.data.userIds, dicByTargetType[EnumTargetType.USER]);
40146
- this.addDistinctToList(this.data.departmentIds, dicByTargetType[EnumTargetType.DEPARTMENT]);
40147
- this.addDistinctToList(this.data.groupIds, dicByTargetType[EnumTargetType.GROUP]);
40148
- this.addDistinctToList(this.data.roleIds, dicByTargetType[EnumTargetType.ROLE]);
40149
- }
40150
- addDistinctToList(lstDest, lstSource) {
40151
- lstSource.forEach(item => {
40152
- if (!lstDest.some(q => q == item)) {
40153
- lstDest.push(item);
40154
- }
40155
- });
40156
40559
  }
40157
40560
  _createUserPickerControl(field, label, multiple = true) {
40158
40561
  const control = createUserPickerControl(field, label);
@@ -40167,7 +40570,7 @@ class ProcessWorkflowTargetComponent extends DataFormBase {
40167
40570
  return createUserGroupPickerControl(this._userGroupService, field, label);
40168
40571
  }
40169
40572
  _createRolePickerControl(field, label) {
40170
- return createRolePickerControl(this._roleService, field, label);
40573
+ return createRolePickerControl(this._dmChucVuService, field, label);
40171
40574
  }
40172
40575
  onFormInitialized(evt) {
40173
40576
  return __awaiter(this, void 0, void 0, function* () {
@@ -40190,7 +40593,7 @@ ProcessWorkflowTargetComponent.ctorParameters = () => [
40190
40593
  { type: StateMachinesService },
40191
40594
  { type: CoCauToChucService },
40192
40595
  { type: UserGroupRealService },
40193
- { type: RoleService }
40596
+ { type: DmChucVuService }
40194
40597
  ];
40195
40598
  ProcessWorkflowTargetComponent.propDecorators = {
40196
40599
  data: [{ type: Input }],
@@ -40256,11 +40659,11 @@ class ProcessWorkflowFormComponent extends DataFormBase {
40256
40659
  if (this.isActionKetThuc) {
40257
40660
  this.mainTabData[1].active = true;
40258
40661
  }
40259
- if (this.checkNeedGetUser()) {
40260
- if (!(yield this.getUserForProcessWorkflow())) {
40261
- return;
40262
- }
40662
+ // if (this.checkNeedGetUser()) {
40663
+ if (!(yield this.getUserForProcessWorkflow())) {
40664
+ return;
40263
40665
  }
40666
+ // }
40264
40667
  this.setDataAndTriggerReady();
40265
40668
  });
40266
40669
  }
@@ -40284,29 +40687,20 @@ class ProcessWorkflowFormComponent extends DataFormBase {
40284
40687
  getUserForProcessWorkflow() {
40285
40688
  return __awaiter(this, void 0, void 0, function* () {
40286
40689
  const sourceMachine = this.workflow.data.machines.find(q => q.id == this.action.source);
40287
- const resultGetUserInProcessForm = yield this._stateMachinesService.getUserInProcessForm(this.workflow.code, sourceMachine.code, this.action.code, this.item.id);
40690
+ const resultGetUserInProcessForm = yield this.businessSetting.baseService.getUserInProcessForm(this.workflow.code, sourceMachine.code, this.action.code, this.item.id);
40288
40691
  if (!resultGetUserInProcessForm.success) {
40289
40692
  this.handleResponse(resultGetUserInProcessForm);
40290
40693
  return false;
40291
40694
  }
40292
40695
  const dataUserInProcessForm = resultGetUserInProcessForm.data;
40293
- if (dataUserInProcessForm.dicByRuleType) {
40294
- Object.keys(dataUserInProcessForm.dicByRuleType).forEach(key => {
40295
- this.initValueForTargetForm.dicDefaultValue[key] = dataUserInProcessForm.dicByRuleType[key];
40296
- });
40297
- }
40298
- if (dataUserInProcessForm.dicByAction) {
40299
- Object.keys(dataUserInProcessForm.dicByAction).forEach(key => {
40300
- this.initValueForTargetForm.dicDefaultValueByWorkflow[key.toUpperCase()] = dataUserInProcessForm.dicByAction[key];
40301
- });
40302
- }
40303
- if (dataUserInProcessForm.dicByTargetCanEdit) {
40304
- this.initValueForTargetForm.dicByTargetCanEdit = dataUserInProcessForm.dicByTargetCanEdit;
40305
- }
40306
- if (dataUserInProcessForm.dicByTargetOnlyView) {
40307
- this.initValueForTargetForm.dicByTargetOnlyView = dataUserInProcessForm.dicByTargetOnlyView;
40308
- }
40309
- this.infoReceiver = dataUserInProcessForm.infoReceiver;
40696
+ this.initValueForTargetForm.lstUserId = dataUserInProcessForm.lstUserId;
40697
+ this.initValueForTargetForm.lstUserViewId = dataUserInProcessForm.lstUserViewId;
40698
+ this.initValueForTargetForm.lstDonViId = dataUserInProcessForm.lstDonViId;
40699
+ this.initValueForTargetForm.lstDonViViewId = dataUserInProcessForm.lstDonViViewId;
40700
+ this.initValueForTargetForm.lstGroupId = dataUserInProcessForm.lstGroupId;
40701
+ this.initValueForTargetForm.lstGroupViewId = dataUserInProcessForm.lstGroupViewId;
40702
+ this.initValueForTargetForm.lstRoleId = dataUserInProcessForm.lstRoleId;
40703
+ this.initValueForTargetForm.lstRoleViewId = dataUserInProcessForm.lstRoleViewId;
40310
40704
  return true;
40311
40705
  });
40312
40706
  }
@@ -40319,36 +40713,42 @@ class ProcessWorkflowFormComponent extends DataFormBase {
40319
40713
  return false;
40320
40714
  }
40321
40715
  setDataAndTriggerReady() {
40716
+ var _a, _b, _c, _d, _e, _f;
40322
40717
  this.dataAllowEdit = {
40323
40718
  rules: [],
40324
40719
  userIds: [],
40325
40720
  ruleInWorkflows: [],
40326
- departmentIds: this.action.data.departmentIds,
40327
- groupIds: this.action.data.groupIds,
40328
- roleIds: this.action.data.roleIds
40721
+ departmentIds: (_a = this.action.data.departmentIds) !== null && _a !== void 0 ? _a : [],
40722
+ groupIds: (_b = this.action.data.groupIds) !== null && _b !== void 0 ? _b : [],
40723
+ roleIds: (_c = this.action.data.roleIds) !== null && _c !== void 0 ? _c : []
40329
40724
  };
40330
40725
  this.dataOnlyView = {
40331
40726
  rules: [],
40332
40727
  userIds: [],
40333
40728
  ruleInWorkflows: [],
40334
- departmentIds: this.action.data.departmentViewIds,
40335
- groupIds: this.action.data.groupViewIds,
40336
- roleIds: this.action.data.roleViewIds
40729
+ departmentIds: (_d = this.action.data.departmentViewIds) !== null && _d !== void 0 ? _d : [],
40730
+ groupIds: (_e = this.action.data.groupViewIds) !== null && _e !== void 0 ? _e : [],
40731
+ roleIds: (_f = this.action.data.roleViewIds) !== null && _f !== void 0 ? _f : []
40337
40732
  };
40338
- if (this.infoReceiver) {
40339
- if (this.infoReceiver.user) {
40340
- this.dataAllowEdit.userIds = this.infoReceiver.user.ids;
40341
- this.dataAllowEdit.rules = this.infoReceiver.user.rules;
40342
- this.dataAllowEdit.ruleInWorkflows = this.infoReceiver.user.ruleInWorkflows;
40343
- }
40344
- if (this.infoReceiver.userView) {
40345
- this.dataOnlyView.userIds = this.infoReceiver.userView.ids;
40346
- this.dataOnlyView.rules = this.infoReceiver.userView.rules;
40347
- this.dataOnlyView.ruleInWorkflows = this.infoReceiver.userView.ruleInWorkflows;
40348
- }
40349
- }
40733
+ this.addDistinct(this.dataAllowEdit.userIds, this.initValueForTargetForm.lstUserId);
40734
+ this.addDistinct(this.dataAllowEdit.departmentIds, this.initValueForTargetForm.lstDonViId);
40735
+ this.addDistinct(this.dataAllowEdit.groupIds, this.initValueForTargetForm.lstGroupId);
40736
+ this.addDistinct(this.dataAllowEdit.roleIds, this.initValueForTargetForm.lstRoleId);
40737
+ this.addDistinct(this.dataOnlyView.userIds, this.initValueForTargetForm.lstUserViewId);
40738
+ this.addDistinct(this.dataOnlyView.departmentIds, this.initValueForTargetForm.lstDonViViewId);
40739
+ this.addDistinct(this.dataOnlyView.groupIds, this.initValueForTargetForm.lstGroupViewId);
40740
+ this.addDistinct(this.dataOnlyView.roleIds, this.initValueForTargetForm.lstRoleViewId);
40350
40741
  this.formReady = true;
40351
40742
  }
40743
+ addDistinct(dest, source) {
40744
+ if (!source || !source.length)
40745
+ return;
40746
+ source.forEach(item => {
40747
+ if (dest.indexOf(item) == -1) {
40748
+ dest.push(item);
40749
+ }
40750
+ });
40751
+ }
40352
40752
  onFormInitialized(evt) {
40353
40753
  return __awaiter(this, void 0, void 0, function* () {
40354
40754
  evt.model.id = this._commonService.guid();
@@ -40369,7 +40769,7 @@ class ProcessWorkflowFormComponent extends DataFormBase {
40369
40769
  && this.isEmptyArray(this.model.data.departmentIds)
40370
40770
  && this.isEmptyArray(this.model.data.groupIds)
40371
40771
  && this.isEmptyArray(this.model.data.roleIds)) {
40372
- 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ò)');
40772
+ 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ụ)');
40373
40773
  return false;
40374
40774
  }
40375
40775
  }
@@ -40720,13 +41120,13 @@ WorkflowHistoryDialogComponent.propDecorators = {
40720
41120
  };
40721
41121
 
40722
41122
  class WorkflowHistoryNewComponent extends DataListBase {
40723
- constructor(_injector, _workflowHistoryService, _coCauToChucService, _userGroupService, _roleService, _fileDataService) {
41123
+ constructor(_injector, _workflowHistoryService, _coCauToChucService, _userGroupService, _dmChucVuService, _fileDataService) {
40724
41124
  super(_injector);
40725
41125
  this._injector = _injector;
40726
41126
  this._workflowHistoryService = _workflowHistoryService;
40727
41127
  this._coCauToChucService = _coCauToChucService;
40728
41128
  this._userGroupService = _userGroupService;
40729
- this._roleService = _roleService;
41129
+ this._dmChucVuService = _dmChucVuService;
40730
41130
  // 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
40731
41131
  // Ở form này thì chỉ xem lịch sử chứ k dc làm gì hết
40732
41132
  this.isRelativeForm = false;
@@ -40787,8 +41187,8 @@ class WorkflowHistoryNewComponent extends DataListBase {
40787
41187
  new ModelSchema({ field: 'donViViewIds', name: 'Đơn vị theo dõi', fullName: 'Đơn vị theo dõi', description: '' }),
40788
41188
  new ModelSchema({ field: 'groupIds', name: 'Nhóm người dùng nhận', fullName: 'Nhóm người dùng nhận', description: '' }),
40789
41189
  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: '' }),
40790
- new ModelSchema({ field: 'roleIds', name: 'Vai trò nhận', fullName: 'Vai trò nhận', description: '' }),
40791
- new ModelSchema({ field: 'roleViewIds', name: 'Vai trò theo dõi', fullName: 'Vai trò theo dõi', description: '' }),
41190
+ new ModelSchema({ field: 'roleIds', name: 'Chức vụ nhận', fullName: 'Chức vụ nhận', description: '' }),
41191
+ new ModelSchema({ field: 'roleViewIds', name: 'Chức vụ theo dõi', fullName: 'Chức vụ theo dõi', description: '' }),
40792
41192
  new ModelSchema({ field: 'note', name: 'Ý kiến', fullName: 'Ý kiến', description: '' })
40793
41193
  ];
40794
41194
  this.setting.cols = [
@@ -40860,8 +41260,7 @@ class WorkflowHistoryNewComponent extends DataListBase {
40860
41260
  new ColumnSchemaBase({
40861
41261
  field: 'roleIds',
40862
41262
  width: '15%',
40863
- baseService: this._roleService,
40864
- displayField: 'name',
41263
+ baseService: this._dmChucVuService,
40865
41264
  multiple: true,
40866
41265
  visible: false,
40867
41266
  forceGetData: true
@@ -40869,8 +41268,7 @@ class WorkflowHistoryNewComponent extends DataListBase {
40869
41268
  new ColumnSchemaBase({
40870
41269
  field: 'roleViewIds',
40871
41270
  width: '15%',
40872
- baseService: this._roleService,
40873
- displayField: 'name',
41271
+ baseService: this._dmChucVuService,
40874
41272
  multiple: true,
40875
41273
  visible: false,
40876
41274
  forceGetData: true
@@ -41066,7 +41464,7 @@ class WorkflowHistoryNewComponent extends DataListBase {
41066
41464
  WorkflowHistoryNewComponent.decorators = [
41067
41465
  { type: Component, args: [{
41068
41466
  selector: 'workflow-history-new',
41069
- 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>",
41467
+ 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>",
41070
41468
  providers: [ComponentContextService],
41071
41469
  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}"]
41072
41470
  },] }
@@ -41076,7 +41474,7 @@ WorkflowHistoryNewComponent.ctorParameters = () => [
41076
41474
  { type: WorkflowHistoryService },
41077
41475
  { type: CoCauToChucService },
41078
41476
  { type: UserGroupRealService },
41079
- { type: RoleService },
41477
+ { type: DmChucVuService },
41080
41478
  { type: FileDataService }
41081
41479
  ];
41082
41480
  WorkflowHistoryNewComponent.propDecorators = {
@@ -41439,14 +41837,40 @@ class WorkflowSettingNewComponent extends DataFormBase {
41439
41837
  ngOnInit() {
41440
41838
  this.setting.baseService = this._workflowSettingsService;
41441
41839
  this.setting.schema = [
41442
- new CheckboxControlSchema({
41443
- field: 'createTaskInstead',
41444
- label: 'Tạo công việc',
41840
+ new CheckBoxListControlSchema({
41841
+ field: 'options',
41445
41842
  showLabel: false,
41446
- mdWidth: 2
41843
+ dataSource: DataSourceWorkflowCheckboxOption,
41844
+ mdWidth: 4,
41845
+ onChanged: (evt) => {
41846
+ if (evt.rootModel.options.indexOf(EnumWorkflowCheckboxOption.TAO_CONG_VIEC) > -1) {
41847
+ evt.rootModel.createTaskInstead = true;
41848
+ }
41849
+ else {
41850
+ evt.rootModel.createTaskInstead = false;
41851
+ }
41852
+ if (evt.rootModel.options.indexOf(EnumWorkflowCheckboxOption.AUTO_NEXT_STEP) > -1) {
41853
+ evt.rootModel.autoNextStep = true;
41854
+ }
41855
+ else {
41856
+ evt.rootModel.autoNextStep = false;
41857
+ }
41858
+ }
41447
41859
  }),
41860
+ // new CheckboxControlSchema({
41861
+ // field: 'createTaskInstead',
41862
+ // label: 'Tạo công việc',
41863
+ // showLabel: false,
41864
+ // mdWidth: 2
41865
+ // }),
41866
+ // new CheckboxControlSchema({
41867
+ // field: 'autoNextStep',
41868
+ // label: 'Tự động chuyển bước đầu tiên',
41869
+ // showLabel: false,
41870
+ // mdWidth: 2
41871
+ // }),
41448
41872
  new LabelSchema({
41449
- mdWidth: 10,
41873
+ mdWidth: 8,
41450
41874
  hiddenCheck: (rootModel) => this.checkIfCreateTaskInstead(rootModel, true)
41451
41875
  }),
41452
41876
  new CustomControlSchema({
@@ -41458,8 +41882,9 @@ class WorkflowSettingNewComponent extends DataFormBase {
41458
41882
  new CheckboxControlSchema({
41459
41883
  field: 'taskInsideBusinessForm',
41460
41884
  label: 'Hiển thị giao diện tạo công việc trên giao diện thêm mới',
41885
+ class: 'taskInsideBusinessForm',
41461
41886
  showLabel: false,
41462
- mdWidth: 10,
41887
+ mdWidth: 8,
41463
41888
  hiddenCheck: (rootModel) => this.checkIfCreateTaskInstead(rootModel, false)
41464
41889
  }),
41465
41890
  new TextControlSchema({
@@ -41485,9 +41910,20 @@ class WorkflowSettingNewComponent extends DataFormBase {
41485
41910
  }
41486
41911
  getSetting() {
41487
41912
  return __awaiter(this, void 0, void 0, function* () {
41488
- this.model.data = (yield this._workflowSettingsService.getDetailByFilter([
41913
+ const data = (yield this._workflowSettingsService.getDetailByFilter([
41489
41914
  this.newFilter('tableName', Operator.equal, this.parentSetting.baseService.entityName)
41490
41915
  ])).data;
41916
+ if (data) {
41917
+ if (!data.options)
41918
+ data.options = [];
41919
+ if (data.createTaskInstead) {
41920
+ data.options.push(EnumWorkflowCheckboxOption.TAO_CONG_VIEC);
41921
+ }
41922
+ if (data.autoNextStep) {
41923
+ data.options.push(EnumWorkflowCheckboxOption.AUTO_NEXT_STEP);
41924
+ }
41925
+ }
41926
+ this.model.data = data;
41491
41927
  this.afterGetSetting();
41492
41928
  });
41493
41929
  }
@@ -41537,6 +41973,20 @@ class WorkflowSettingNewComponent extends DataFormBase {
41537
41973
  return true;
41538
41974
  });
41539
41975
  }
41976
+ setValueOption(data) {
41977
+ if (data.options.indexOf(EnumWorkflowCheckboxOption.TAO_CONG_VIEC) > -1) {
41978
+ data.createTaskInstead = true;
41979
+ }
41980
+ else {
41981
+ data.createTaskInstead = false;
41982
+ }
41983
+ if (data.options.indexOf(EnumWorkflowCheckboxOption.AUTO_NEXT_STEP) > -1) {
41984
+ data.autoNextStep = true;
41985
+ }
41986
+ else {
41987
+ data.autoNextStep = false;
41988
+ }
41989
+ }
41540
41990
  onBeforeSave() {
41541
41991
  if (this.workflowPickerComp) {
41542
41992
  Object.assign(this.model.data, this.workflowPickerComp.model.data);
@@ -41547,6 +41997,9 @@ class WorkflowSettingNewComponent extends DataFormBase {
41547
41997
  else {
41548
41998
  this.model.data.workflowCodes = null;
41549
41999
  }
42000
+ if (this.model.data.options) {
42001
+ this.setValueOption(this.model.data);
42002
+ }
41550
42003
  this.model.data.tableName = this.parentSetting.baseService.entityName;
41551
42004
  }
41552
42005
  handleManualSave() {
@@ -41559,7 +42012,7 @@ WorkflowSettingNewComponent.decorators = [
41559
42012
  selector: 'workflow-setting-new',
41560
42013
  template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #workflowPicker>\r\n <workflow-picker [data]=\"model.data\"></workflow-picker>\r\n </ng-template>\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <div class=\"footer-workflow-setting\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n <button *ngIf=\"model.data.id\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-danger p-button-text\"\r\n [label]=\"'H\u1EE7y quy tr\u00ECnh' | translate\" (click)=\"handleCancelWorkflow($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n </div>\r\n</ng-template>",
41561
42014
  providers: [ComponentContextService],
41562
- styles: [".title-workflow{font-size:.9em;font-weight:700;padding:1em 0 .5em}.title-workflow .pi-star{color:orange}.container-button-workflow{background:#fff;border-top:1px solid #ddd;bottom:0;padding:.5em;position:-webkit-sticky;position:sticky;text-align:right;z-index:10}"]
42015
+ styles: [".title-workflow{font-size:.9em;font-weight:700;padding:1em 0 .5em}.title-workflow .pi-star{color:orange}.container-button-workflow{background:#fff;border-top:1px solid #ddd;bottom:0;padding:.5em;position:-webkit-sticky;position:sticky;text-align:right;z-index:10}::ng-deep workflow-setting-new .crud-form-control div[role=checkbox-alone].taskInsideBusinessForm{margin-top:12px!important}"]
41563
42016
  },] }
41564
42017
  ];
41565
42018
  WorkflowSettingNewComponent.ctorParameters = () => [
@@ -41778,6 +42231,11 @@ class CongviecDinhkemService extends BaseService {
41778
42231
  }
41779
42232
  getDetailItem(serviceCode, entity, entityKey, fieldDisplay) {
41780
42233
  const serviceCodeEndpoint = this.env.apiDomain[`${serviceCode}Endpoint`];
42234
+ if (!serviceCodeEndpoint) {
42235
+ const notifierService = this._injector.get(NotifierService);
42236
+ notifierService.showWarning(`Không lấy được thông tin endpoint của dịch vụ ${serviceCode}`);
42237
+ return new Promise((res, rej) => res({ success: true, data: [] }));
42238
+ }
41781
42239
  const uri = `${serviceCodeEndpoint}/${this._moduleConfigService.getConfig().environment.apiVersion}/${entity}/GetData`;
41782
42240
  const gridInfo = new GridInfo({
41783
42241
  fields: fieldDisplay,
@@ -41787,6 +42245,55 @@ class CongviecDinhkemService extends BaseService {
41787
42245
  });
41788
42246
  return this._http.post(uri, gridInfo).toPromise();
41789
42247
  }
42248
+ getDetailItems(dicGrouped) {
42249
+ return __awaiter(this, void 0, void 0, function* () {
42250
+ const result = {};
42251
+ const serviceCodes = Object.keys(dicGrouped);
42252
+ for (const serviceCode of serviceCodes) {
42253
+ result[serviceCode] = {};
42254
+ const entitys = Object.keys(dicGrouped[serviceCode]);
42255
+ for (const entity of entitys) {
42256
+ result[serviceCode][entity] = {};
42257
+ dicGrouped[serviceCode][entity].lstId.forEach(entityKey => {
42258
+ result[serviceCode][entity][entityKey] = 'Không tìm thấy bản ghi';
42259
+ });
42260
+ }
42261
+ const serviceCodeEndpoint = this.env.apiDomain[`${serviceCode}Endpoint`];
42262
+ if (!serviceCodeEndpoint) {
42263
+ return;
42264
+ }
42265
+ for (const entity of entitys) {
42266
+ const dataByEntity = dicGrouped[serviceCode][entity];
42267
+ const uri = `${serviceCodeEndpoint}/${this._moduleConfigService.getConfig().environment.apiVersion}/${entity}/GetAllByFilter`;
42268
+ const filters = [];
42269
+ if (dataByEntity.lstId.length == 1) {
42270
+ filters.push(this.newFilter('id', Operator.equal, dataByEntity.lstId[0]));
42271
+ }
42272
+ else {
42273
+ filters.push(this.newFilter('id', Operator.in, dataByEntity.lstId));
42274
+ }
42275
+ const gridInfo = new GridInfo({
42276
+ fields: `id,${dataByEntity.fieldHienThi}`,
42277
+ pageInfo: { page: 1, pageSize: dataByEntity.lstId.length },
42278
+ filters,
42279
+ sorts: []
42280
+ });
42281
+ try {
42282
+ const data = yield (this._http.post(uri, gridInfo).toPromise());
42283
+ if (data.success && data.data && data.data.length) {
42284
+ data.data.forEach(itemDetail => {
42285
+ result[serviceCode][entity][itemDetail.id] = itemDetail[dataByEntity.fieldHienThi];
42286
+ });
42287
+ }
42288
+ }
42289
+ catch (err) {
42290
+ console.log(err);
42291
+ }
42292
+ }
42293
+ }
42294
+ return result;
42295
+ });
42296
+ }
41790
42297
  }
41791
42298
  CongviecDinhkemService.ɵprov = ɵɵdefineInjectable({ factory: function CongviecDinhkemService_Factory() { return new CongviecDinhkemService(ɵɵinject(HttpClient), ɵɵinject(INJECTOR), ɵɵinject(ModuleConfigService)); }, token: CongviecDinhkemService, providedIn: "root" });
41792
42299
  CongviecDinhkemService.decorators = [
@@ -41806,13 +42313,23 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41806
42313
  this._virtualBaseService = _virtualBaseService;
41807
42314
  this._congViecDinhKemService = _congViecDinhKemService;
41808
42315
  this.fileDataService = fileDataService;
41809
- this.formState = FormState.VIEW;
42316
+ this._formState = FormState.VIEW;
41810
42317
  this.layoutFile = EnumFileLayout;
41811
42318
  this.enumFormState = FormState;
41812
42319
  this.formModel = {};
41813
42320
  this.showAttachLinkBox = false;
41814
42321
  this.typedLink = '';
41815
42322
  }
42323
+ set formState(value) {
42324
+ this._formState = value;
42325
+ if (this.setting) {
42326
+ this.settingIfIsFormView();
42327
+ }
42328
+ }
42329
+ ;
42330
+ get formState() {
42331
+ return this._formState;
42332
+ }
41816
42333
  ngOnInit() {
41817
42334
  this.setting.objectName = 'mục đính kèm';
41818
42335
  this.setting.baseService = this._congViecDinhKemService;
@@ -41823,11 +42340,10 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41823
42340
  this.setting.hiddenPageSetting = true;
41824
42341
  this.setting.hiddenAdvanceSearch = true;
41825
42342
  this.setting.hiddenFilterRow = true;
41826
- // this.setting.hiddenCheckbox = this.formState == FormState.VIEW;
41827
- // this.setting.hiddenFunctionColumn = this.formState == FormState.VIEW;
41828
42343
  this.setting.fixHeightTypeInDialog = false;
41829
42344
  this.setting.heightType = HeightType.dynamic;
41830
42345
  this.setting.showExportSelectedItems = false;
42346
+ this.settingIfIsFormView();
41831
42347
  this.setting.modelSchemas = [
41832
42348
  new ModelSchema({ field: 'tenHienThiDoiTuong', name: 'Đối tượng', fullName: 'Đối tượng', description: 'Đối tượng' }),
41833
42349
  new ModelSchema({ field: 'tieuDe', name: 'Tiêu đề', fullName: 'Tiêu đề', description: 'Tiêu đề' }),
@@ -41845,6 +42361,17 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41845
42361
  dataType: 'fileDinhKem'
41846
42362
  })
41847
42363
  ];
42364
+ this.rootContext.replaySubscribe(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC, rowData => {
42365
+ this.themDinhKem(false);
42366
+ });
42367
+ }
42368
+ ngOnDestroy() {
42369
+ this.rootContext.unSubscribleReplay(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
42370
+ super.ngOnDestroy();
42371
+ }
42372
+ settingIfIsFormView() {
42373
+ this.setting.hiddenCheckbox = this.formState == FormState.VIEW;
42374
+ this.setting.hiddenFunctionColumn = this.setting.hiddenCheckbox;
41848
42375
  }
41849
42376
  modifyGridInfo(gridInfo) {
41850
42377
  return __awaiter(this, void 0, void 0, function* () {
@@ -41853,14 +42380,22 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41853
42380
  }
41854
42381
  afterGetData() {
41855
42382
  return __awaiter(this, void 0, void 0, function* () {
41856
- for (const item of this.model.dataSource) {
41857
- const detail = (yield this._congViecDinhKemService.getDetailItem(item.serviceCode, item.entity, item.entityKey, item.fieldHienThi)).data;
41858
- if (detail.length > 0) {
41859
- item.tieuDe = detail[0][item.fieldHienThi];
42383
+ const dicGrouped = {};
42384
+ this.model.dataSource.forEach(item => {
42385
+ if (!dicGrouped[item.serviceCode]) {
42386
+ dicGrouped[item.serviceCode] = {};
41860
42387
  }
41861
- else {
41862
- item.tieuDe = 'Không tìm thấy bản ghi';
42388
+ if (!dicGrouped[item.serviceCode][item.entity]) {
42389
+ dicGrouped[item.serviceCode][item.entity] = {
42390
+ fieldHienThi: item.fieldHienThi,
42391
+ lstId: []
42392
+ };
41863
42393
  }
42394
+ dicGrouped[item.serviceCode][item.entity].lstId.push(item.entityKey);
42395
+ });
42396
+ const dataDisplayName = yield this._congViecDinhKemService.getDetailItems(dicGrouped);
42397
+ for (const item of this.model.dataSource) {
42398
+ item.tieuDe = dataDisplayName[item.serviceCode][item.entity][item.entityKey];
41864
42399
  if (item.tenHienThiDoiTuong != null) {
41865
42400
  item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.trim();
41866
42401
  item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.substring(0, 1).toUpperCase() + item.tenHienThiDoiTuong.substring(1);
@@ -41868,6 +42403,11 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41868
42403
  }
41869
42404
  });
41870
42405
  }
42406
+ afterReloaded() {
42407
+ return __awaiter(this, void 0, void 0, function* () {
42408
+ this.fileDataService.getData();
42409
+ });
42410
+ }
41871
42411
  viewLinkItem(evt) {
41872
42412
  this.viewRawLink(evt);
41873
42413
  }
@@ -41887,7 +42427,7 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41887
42427
  }
41888
42428
  }));
41889
42429
  }
41890
- themDinhKem() {
42430
+ themDinhKem(showNoti = true) {
41891
42431
  return __awaiter(this, void 0, void 0, function* () {
41892
42432
  const content = this._commonService.pasteByStorage();
41893
42433
  if (content) {
@@ -41895,7 +42435,9 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41895
42435
  if (obj.length > 0) {
41896
42436
  this._congViecDinhKemService.themDinhKemNghiepVu(this.taskId, obj).then(rs => {
41897
42437
  if (rs.success) {
41898
- this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
42438
+ if (showNoti) {
42439
+ this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
42440
+ }
41899
42441
  this.reload();
41900
42442
  this._commonService.clearClipboardStorage();
41901
42443
  }
@@ -41990,7 +42532,7 @@ class BaseCongviecDinhkemComponent extends DataListBase {
41990
42532
  BaseCongviecDinhkemComponent.decorators = [
41991
42533
  { type: Component, args: [{
41992
42534
  selector: 'base-congviec-dinhkem',
41993
- 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",
42535
+ 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>",
41994
42536
  providers: [ComponentContextService],
41995
42537
  styles: [""]
41996
42538
  },] }
@@ -42099,6 +42641,7 @@ class BaseCongViecFormComponent extends DataFormBase {
42099
42641
  },
42100
42642
  ];
42101
42643
  this.buttons = [];
42644
+ this.mdWidthWorkflow = 6;
42102
42645
  this.handleChangeLoaiCongViecWhenAdd = (evt) => __awaiter(this, void 0, void 0, function* () {
42103
42646
  if (evt.eventType == 'change') {
42104
42647
  yield this.loadWorkflowByLoaiCongViec(evt, evt.model.id);
@@ -42138,15 +42681,6 @@ class BaseCongViecFormComponent extends DataFormBase {
42138
42681
  label: 'Mô tả nội dung',
42139
42682
  mdWidth: 12
42140
42683
  }),
42141
- new DropdownControlSchema({
42142
- field: 'idLoaiCongViec',
42143
- label: 'Phân loại',
42144
- baseService: this._dmLoaiCongViecService,
42145
- isTree: true,
42146
- fieldTree: 'idParent',
42147
- valueParentRoot: null,
42148
- onChanged: onChangeLoaiCongViec
42149
- }),
42150
42684
  new DropdownControlSchema({
42151
42685
  field: 'idPriority',
42152
42686
  label: 'Độ ưu tiên',
@@ -42172,11 +42706,31 @@ class BaseCongViecFormComponent extends DataFormBase {
42172
42706
  }),
42173
42707
  new PercentControlSchema({
42174
42708
  field: 'phanTram',
42175
- mdWidth: 12,
42709
+ mdWidth: 6,
42176
42710
  label: 'Tiến độ'
42177
42711
  }),
42712
+ new DropdownControlSchema({
42713
+ field: 'idLoaiCongViec',
42714
+ label: 'Phân loại công việc',
42715
+ baseService: this._dmLoaiCongViecService,
42716
+ isTree: true,
42717
+ fieldTree: 'idParent',
42718
+ valueParentRoot: null,
42719
+ sorts: [{ field: 'maPhanCap', dir: 1 }],
42720
+ onChanged: onChangeLoaiCongViec
42721
+ })
42178
42722
  ];
42179
42723
  this.addSchemaBase();
42724
+ if (this._isFormAddNew()) {
42725
+ this.setting.schema.push(new CheckboxControlSchema({
42726
+ field: 'autoNextStep',
42727
+ label: 'Tự động chuyển bước đầu tiên',
42728
+ class: 'mg-top-0',
42729
+ showLabel: false,
42730
+ mdWidth: 6,
42731
+ hiddenCheck: (rootModel) => !rootModel._WorkflowCode
42732
+ }));
42733
+ }
42180
42734
  }
42181
42735
  onFormInitialized(evt) {
42182
42736
  return __awaiter(this, void 0, void 0, function* () {
@@ -42390,7 +42944,8 @@ class BaseCongViecComponent extends DataListBase {
42390
42944
  this.setting.cols = [
42391
42945
  new ColumnSchemaBase({
42392
42946
  field: 'ten',
42393
- dataType: 'congViecInfo'
42947
+ dataType: 'congViecInfo',
42948
+ width: '18rem'
42394
42949
  }),
42395
42950
  new ColumnSchemaBase({
42396
42951
  field: 'ngayBatDau',
@@ -42402,7 +42957,7 @@ class BaseCongViecComponent extends DataListBase {
42402
42957
  }),
42403
42958
  new ColumnSchemaBase({
42404
42959
  field: 'idLoaiCongViec',
42405
- width: '10%',
42960
+ width: '100px',
42406
42961
  baseService: this._dmLoaiCongViecService,
42407
42962
  isTree: true,
42408
42963
  fieldTree: 'idParent',
@@ -42410,14 +42965,14 @@ class BaseCongViecComponent extends DataListBase {
42410
42965
  }),
42411
42966
  new ColumnSchemaBase({
42412
42967
  field: 'idLinhVuc',
42413
- width: '10%',
42968
+ width: '100px',
42414
42969
  baseService: this._dmLinhVucCongViecService
42415
42970
  }),
42416
42971
  new ColumnSchemaBase({
42417
42972
  field: 'idPriority',
42418
42973
  dataType: 'idPriority',
42419
42974
  dataTypeRefField: 'idPriority',
42420
- width: '10%',
42975
+ width: '80px',
42421
42976
  baseService: this._dmPriorityService,
42422
42977
  fieldPlus: 'background,color',
42423
42978
  funcSetValueRow: (rowItem, data) => {
@@ -42654,7 +43209,7 @@ class BaseCongViecComponent extends DataListBase {
42654
43209
  BaseCongViecComponent.decorators = [
42655
43210
  { type: Component, args: [{
42656
43211
  selector: 'base-congviec',
42657
- 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>",
43212
+ 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>",
42658
43213
  providers: [ComponentContextService],
42659
43214
  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}"]
42660
43215
  },] }
@@ -44710,7 +45265,7 @@ class ShareLinkByPermissionComponent extends ComponentBase {
44710
45265
  copyLinkToClipboard() {
44711
45266
  if (this.links) {
44712
45267
  this.copyToClipboard(this.links);
44713
- this._notifierService.showWarning('Copy link vào clipboard thành công');
45268
+ this._notifierService.showSuccess('Copy link vào clipboard thành công');
44714
45269
  }
44715
45270
  }
44716
45271
  }
@@ -44803,6 +45358,7 @@ function coreDeclaration() {
44803
45358
  StateMachinesConnectionReceiverDepartmentComponent,
44804
45359
  StateMachinesConnectionReceiverGroupComponent,
44805
45360
  StateMachinesConnectionReceiverRoleComponent,
45361
+ StateMachinesConnectionReceiverConditionComponent,
44806
45362
  StateMachinesConnectionSenderComponent,
44807
45363
  StateMachinesDesignerComponent,
44808
45364
  StartWorkflowComponent,
@@ -46620,5 +47176,5 @@ DynamicComponentService.ctorParameters = () => [
46620
47176
  * Generated bundle index. Do not edit.
46621
47177
  */
46622
47178
 
46623
- export { AccessDeniedComponent, Action, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseCauHinhWorkflowComponent, BaseCongViecComponent, BaseCongViecFormComponent, BaseDmLinhVucCongViecComponent, BaseDmLoaiCongViecComponent, BaseDmPriorityComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonControlSchema, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CauHinhWorkflowService, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucService, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonAppComponentComponent, CommonDashboardComponent, CommonErrorCode, CommonService, CompareValidator, ComponentBase, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecLienQuanService, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourceStateType, DataSourceTargetType, DataSourceUserRule, DataSourceUserSender, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmLinhVucCongViecService, DmLoaiCongViecService, DmPriorityService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowType, EnumActionType, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumLoaiDanhSachCongViec, EnumPermissionType, EnumStateByMenuCongViec, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumWFNhomTrangThai, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, FILE_TYPES, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FileDataService, FileExplorerService, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileObjectService, FilePickerDialogComponent, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardService, GetRefDataSchema, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HtmlFormatPipe, ImageService, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MethodResult, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NodeService, NotificationObjectType, NotificationService, NotifierService, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, RegexSplitFieldByItem, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateComponent, StateMachineTopic, StateMachinesConnectionMetadataComponent, StateMachinesDesignerComponent, StateMachinesService, StateMetadataComponent, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TableSchema, TagSeparator, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserFormatPipe, UserGroupRealService, UserGroupService, UserPickerControlSchema, UserPickerDialogComponent, UserService, UserV5Service, UsersFormatPipe, Validation, VanBanPickerControlSchema, VirtualBaseService, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowPickerComponent, WorkflowService, WorkflowSetting, WorkflowSettingNew, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, createJsPlumnInstance, createOrgPickerControl, createRolePickerControl, createUserGroupPickerControl, createUserPickerControl, dataSourceIcon$1 as dataSourceIcon, dateDiff, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, keyUserSurveyLocal, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, multipleSort, romanize, setMetadataConnection, translateStateMachine, ɵ0, ɵ1, ɵ10, ɵ11, ɵ12, ɵ2, ɵ3, ɵ4, ɵ5, ɵ6, ɵ7, ɵ8, ɵ9, AddressComponent as ɵa, DropdownService as ɵb, DatetimePickerRangeComponent as ɵba, DynamicNodeComponent as ɵbb, EntityPickerBoxComponent as ɵbc, EntityPickerDataComponent as ɵbd, EntityPickerSelectedComponent as ɵbe, EntityPickerComponent as ɵbf, EntityPickerDialogComponent as ɵbg, EntityPermissionComponent as ɵbh, DM_ChucVuService as ɵbi, RoleService as ɵbj, EntityPermissionService as ɵbk, EquationEditorComponent as ɵbl, MaskComponent as ɵbm, NumberPickerRangeComponent as ɵbn, PagingNextBackOnlyComponent as ɵbo, RadioButtonListComponent as ɵbp, VanBanPickerComponent as ɵbq, VanBanDenService as ɵbr, VanBanDiService as ɵbs, VanBanPickerDialogComponent as ɵbt, VanbanDiPickerComponent as ɵbu, VanbanDenPickerComponent as ɵbv, CongViecPickerComponent as ɵbw, CongViecService$1 as ɵbx, TaskWorkflowHistoriesService as ɵby, SettingsComponent as ɵbz, EntityPickerService as ɵc, SettingsRowComponent as ɵca, SettingsWorkflowComponent as ɵcb, SettingsWorkflowNo1Component as ɵcc, SimpleWorkflowFormComponent as ɵcd, ProcessWorkflowFormComponent as ɵce, ProcessWorkflowTargetComponent as ɵcf, ChoYKienFormComponent as ɵcg, SplashComponentV1Component as ɵch, StateMachinesConnectionReceiverComponent as ɵci, StateMachinesConnectionReceiverUserComponent as ɵcj, StateMachinesConnectionReceiverDepartmentComponent as ɵck, StateMachinesConnectionReceiverGroupComponent as ɵcl, StateMachinesConnectionReceiverRoleComponent as ɵcm, StateMachinesConnectionSenderComponent as ɵcn, StartWorkflowComponent as ɵco, WorkflowSettingsService as ɵcp, ShareLinkByPermissionComponent as ɵcq, WorkflowSettingNewComponent as ɵcr, PermissionSharingComponent as ɵcs, WorkflowPermissionService as ɵct, TnDialogComponent as ɵcu, TnColorPickerComponent as ɵcv, TnTinymceComponent as ɵcw, TnTabViewComponent as ɵcx, TableDetailFormComponent as ɵcy, FileIconPipe as ɵcz, ExceptionHandlerService as ɵd, FileSizePipe as ɵda, QuickAddFormComponent as ɵdb, PreventShiftTabDirective as ɵdc, TnTemplateDirective as ɵdd, UserPickerComponent as ɵde, UserPickerBoxComponent as ɵdf, CoCauToChucTestService as ɵdg, TnAppHelpComponent as ɵdh, PathNameService as ɵdi, HelperCurrentPageComponent as ɵdj, TnAppNotificationListComponent as ɵdk, TnAppNotificationComponent as ɵdl, MyDriveService as ɵdm, FileVersionService as ɵdn, FileExplorerNewService as ɵdo, FolderFormComponent as ɵdp, FileFormComponent as ɵdq, FileViewerComponent as ɵdr, FileVersionListComponent as ɵds, WorkflowHistoryComponent as ɵdt, EntityWorkflowHistoryService as ɵdu, WorkflowHistoryDialogComponent as ɵdv, WorkflowHistoryNewComponent as ɵdw, WorkflowSettingComponent as ɵdx, EntityWorkflowSettingService as ɵdy, WorkflowSettingDialogComponent as ɵdz, CanBo_HoSoService as ɵe, QrCodeGeneratorComponent as ɵea, AccessDeniedV1Component as ɵeb, AddNewsComponent as ɵec, ArticleService as ɵed, NewsCategoryService as ɵee, NotFoundComponent as ɵef, UniversalLinkProcessorComponent as ɵeg, SignatureDetailComponent as ɵeh, ChatService as ɵei, ContentsService as ɵej, StatusExtendsService as ɵek, MessageBoardService as ɵel, KySoSimDanhSachChuKyComponent as ɵem, KySoSimChuKyUserService as ɵen, FileKySoSimComponent as ɵeo, KySoSimSignPDFService as ɵep, CheckReadyComponent as ɵeq, SendAccessTokenInterceptor as ɵer, LogInterceptor as ɵes, PermissionUtilsInterceptor as ɵet, AfterViewCheckedComponent as ɵf, AdvanceSearchComponent as ɵg, AppRootMenuComponent as ɵh, AppTopBarComponent as ɵi, AppTopBarV1Component as ɵj, AppProfileComponent as ɵk, AppSubMenuComponent as ɵl, AppMenuComponent as ɵm, AutoCompletePickerComponent as ɵn, CheckBoxListComponent as ɵo, ReportQueueComponent as ɵp, CoCauToChucPickerListComponent as ɵq, BaseCongViecTestComponent as ɵr, BaseCauHinhWorkflowDetailComponent as ɵs, BaseDmLoaiCongViecFormComponent as ɵt, BaseDmLinhVucCongViecFormComponent as ɵu, BaseDmPriorityFormComponent as ɵv, BaseCongviecDinhkemComponent as ɵw, CongviecDinhkemService as ɵx, BaseCongviecDinhkemFormComponent as ɵy, DatetimePickerComponent as ɵz };
47179
+ export { AccessDeniedComponent, Action, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseCauHinhWorkflowComponent, BaseCongViecComponent, BaseCongViecFormComponent, BaseDmLinhVucCongViecComponent, BaseDmLoaiCongViecComponent, BaseDmPriorityComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonControlSchema, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CauHinhWorkflowService, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucService, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonAppComponentComponent, CommonDashboardComponent, CommonErrorCode, CommonService, CompareValidator, ComponentBase, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecLienQuanService, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourceStateType, DataSourceTargetType, DataSourceUserRule, DataSourceUserSender, DataSourceWorkflowCheckboxOption, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmLinhVucCongViecService, DmLoaiCongViecService, DmPriorityService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowType, EnumActionType, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumLoaiDanhSachCongViec, EnumPermissionType, EnumStateByMenuCongViec, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumWFNhomTrangThai, EnumWorkflowCheckboxOption, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, FILE_TYPES, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FileDataService, FileExplorerService, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileObjectService, FilePickerDialogComponent, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardService, GetRefDataSchema, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HtmlFormatPipe, ImageService, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MethodResult, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NodeService, NotificationObjectType, NotificationService, NotifierService, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, RegexSplitFieldByItem, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateComponent, StateMachineTopic, StateMachinesConnectionMetadataComponent, StateMachinesDesignerComponent, StateMachinesService, StateMetadataComponent, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TableSchema, TagSeparator, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserFormatPipe, UserGroupRealService, UserGroupService, UserPickerControlSchema, UserPickerDialogComponent, UserService, UserV5Service, UsersFormatPipe, Validation, VanBanPickerControlSchema, VirtualBaseService, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowPickerComponent, WorkflowService, WorkflowSetting, WorkflowSettingNew, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, createJsPlumnInstance, createOrgPickerControl, createRolePickerControl, createUserGroupPickerControl, createUserPickerControl, dataSourceIcon$1 as dataSourceIcon, dateDiff, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, keyUserSurveyLocal, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, multipleSort, romanize, setMetadataConnection, translateStateMachine, ɵ0, ɵ1, ɵ10, ɵ11, ɵ12, ɵ13, ɵ14, ɵ2, ɵ3, ɵ4, ɵ5, ɵ6, ɵ7, ɵ8, ɵ9, AddressComponent as ɵa, DropdownService as ɵb, DatetimePickerRangeComponent as ɵba, DynamicNodeComponent as ɵbb, EntityPickerBoxComponent as ɵbc, EntityPickerDataComponent as ɵbd, EntityPickerSelectedComponent as ɵbe, EntityPickerComponent as ɵbf, EntityPickerDialogComponent as ɵbg, EntityPermissionComponent as ɵbh, DM_ChucVuService as ɵbi, RoleService as ɵbj, EntityPermissionService as ɵbk, EquationEditorComponent as ɵbl, MaskComponent as ɵbm, NumberPickerRangeComponent as ɵbn, PagingNextBackOnlyComponent as ɵbo, RadioButtonListComponent as ɵbp, VanBanPickerComponent as ɵbq, VanBanDenService as ɵbr, VanBanDiService as ɵbs, VanBanPickerDialogComponent as ɵbt, VanbanDiPickerComponent as ɵbu, VanbanDenPickerComponent as ɵbv, CongViecPickerComponent as ɵbw, CongViecService$1 as ɵbx, TaskWorkflowHistoriesService as ɵby, SettingsComponent as ɵbz, EntityPickerService as ɵc, SettingsRowComponent as ɵca, SettingsWorkflowComponent as ɵcb, SettingsWorkflowNo1Component as ɵcc, SimpleWorkflowFormComponent as ɵcd, ProcessWorkflowFormComponent as ɵce, ProcessWorkflowTargetComponent as ɵcf, DmChucVuService as ɵcg, ChoYKienFormComponent as ɵch, SplashComponentV1Component as ɵci, StateMachinesConnectionReceiverComponent as ɵcj, StateMachinesConnectionReceiverUserComponent as ɵck, StateMachinesConnectionReceiverConditionComponent as ɵcl, StateMachinesConnectionReceiverDepartmentComponent as ɵcm, StateMachinesConnectionReceiverGroupComponent as ɵcn, StateMachinesConnectionReceiverRoleComponent as ɵco, StateMachinesConnectionSenderComponent as ɵcp, StartWorkflowComponent as ɵcq, WorkflowSettingsService as ɵcr, ShareLinkByPermissionComponent as ɵcs, WorkflowSettingNewComponent as ɵct, PermissionSharingComponent as ɵcu, WorkflowPermissionService as ɵcv, TnDialogComponent as ɵcw, TnColorPickerComponent as ɵcx, TnTinymceComponent as ɵcy, TnTabViewComponent as ɵcz, ExceptionHandlerService as ɵd, TableDetailFormComponent as ɵda, FileIconPipe as ɵdb, FileSizePipe as ɵdc, QuickAddFormComponent as ɵdd, PreventShiftTabDirective as ɵde, TnTemplateDirective as ɵdf, UserPickerComponent as ɵdg, UserPickerBoxComponent as ɵdh, CoCauToChucTestService as ɵdi, TnAppHelpComponent as ɵdj, PathNameService as ɵdk, HelperCurrentPageComponent as ɵdl, TnAppNotificationListComponent as ɵdm, TnAppNotificationComponent as ɵdn, MyDriveService as ɵdo, FileVersionService as ɵdp, FileExplorerNewService as ɵdq, FolderFormComponent as ɵdr, FileFormComponent as ɵds, FileViewerComponent as ɵdt, FileVersionListComponent as ɵdu, WorkflowHistoryComponent as ɵdv, EntityWorkflowHistoryService as ɵdw, WorkflowHistoryDialogComponent as ɵdx, WorkflowHistoryNewComponent as ɵdy, WorkflowSettingComponent as ɵdz, CanBo_HoSoService as ɵe, EntityWorkflowSettingService as ɵea, WorkflowSettingDialogComponent as ɵeb, QrCodeGeneratorComponent as ɵec, AccessDeniedV1Component as ɵed, AddNewsComponent as ɵee, ArticleService as ɵef, NewsCategoryService as ɵeg, NotFoundComponent as ɵeh, UniversalLinkProcessorComponent as ɵei, SignatureDetailComponent as ɵej, ChatService as ɵek, ContentsService as ɵel, StatusExtendsService as ɵem, MessageBoardService as ɵen, KySoSimDanhSachChuKyComponent as ɵeo, KySoSimChuKyUserService as ɵep, FileKySoSimComponent as ɵeq, KySoSimSignPDFService as ɵer, CheckReadyComponent as ɵes, SendAccessTokenInterceptor as ɵet, LogInterceptor as ɵeu, PermissionUtilsInterceptor as ɵev, AfterViewCheckedComponent as ɵf, AdvanceSearchComponent as ɵg, AppRootMenuComponent as ɵh, AppTopBarComponent as ɵi, AppTopBarV1Component as ɵj, AppProfileComponent as ɵk, AppSubMenuComponent as ɵl, AppMenuComponent as ɵm, AutoCompletePickerComponent as ɵn, CheckBoxListComponent as ɵo, ReportQueueComponent as ɵp, CoCauToChucPickerListComponent as ɵq, BaseCongViecTestComponent as ɵr, BaseCauHinhWorkflowDetailComponent as ɵs, BaseDmLoaiCongViecFormComponent as ɵt, BaseDmLinhVucCongViecFormComponent as ɵu, BaseDmPriorityFormComponent as ɵv, BaseCongviecDinhkemComponent as ɵw, CongviecDinhkemService as ɵx, BaseCongviecDinhkemFormComponent as ɵy, DatetimePickerComponent as ɵz };
46624
47180
  //# sourceMappingURL=tnx-shared.js.map