tnx-shared 5.1.80 → 5.1.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/bundles/tnx-shared.umd.js +132 -53
  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/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  8. package/components/entity-permission/services.cs/entity-permission.service.d.ts +1 -0
  9. package/components/entity-permission/services.cs/entity-permission.service.d.ts.map +1 -1
  10. package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -0
  11. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  12. package/components/file-explorer/services/file-data.service.d.ts +1 -0
  13. package/components/file-explorer/services/file-data.service.d.ts.map +1 -1
  14. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts.map +1 -1
  15. package/components/user-picker/user-picker.component.d.ts +8 -2
  16. package/components/user-picker/user-picker.component.d.ts.map +1 -1
  17. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts +1 -0
  18. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts.map +1 -1
  19. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +2 -0
  20. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  21. package/congviec/congviec/congviec.component.d.ts.map +1 -1
  22. package/congviec/congviec/services/congviec.service.d.ts.map +1 -1
  23. package/esm2015/classes/base/data-form-base.js +2 -2
  24. package/esm2015/components/crud/crud-form/crud-form.component.js +2 -1
  25. package/esm2015/components/entity-permission/services.cs/entity-permission.service.js +8 -5
  26. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +17 -10
  27. package/esm2015/components/file-explorer/services/file-data.service.js +15 -15
  28. package/esm2015/components/share-link-by-permission/share-link-by-permission.component.js +2 -2
  29. package/esm2015/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.js +14 -2
  30. package/esm2015/components/tn-app-help/tn-app-help.component.js +1 -1
  31. package/esm2015/components/user-picker/user-picker.component.js +47 -6
  32. package/esm2015/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.js +8 -3
  33. package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +13 -11
  34. package/esm2015/congviec/congviec/congviec.component.js +7 -6
  35. package/esm2015/congviec/congviec/services/congviec.service.js +3 -3
  36. package/fesm2015/tnx-shared.js +123 -52
  37. package/fesm2015/tnx-shared.js.map +1 -1
  38. package/package.json +2 -2
  39. package/tnx-shared.metadata.json +1 -1
@@ -10308,10 +10308,10 @@
10308
10308
  var CongViecService = /** @class */ (function (_super) {
10309
10309
  __extends(CongViecService, _super);
10310
10310
  function CongViecService(http, injector, _moduleConfigService) {
10311
- var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CongViec") || this;
10311
+ var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CongViec_Chinh") || this;
10312
10312
  _this._moduleConfigService = _moduleConfigService;
10313
10313
  _this.serviceCode = 'congviec';
10314
- _this.entityName = 'CongViec';
10314
+ _this.entityName = 'CongViec_Chinh';
10315
10315
  _this.objectName = 'công việc';
10316
10316
  _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
10317
10317
  return _this;
@@ -14111,6 +14111,7 @@
14111
14111
  }
14112
14112
  if (schema instanceof TitleSchema
14113
14113
  || schema instanceof LabelSchema) {
14114
+ schema.showLabel = false;
14114
14115
  if (!schema.field) {
14115
14116
  schema.field = this._commonService.guid();
14116
14117
  }
@@ -16774,8 +16775,8 @@
16774
16775
  defaultValue: defaultValue,
16775
16776
  valueField: 'code',
16776
16777
  displayField: 'title',
16778
+ mdWidth: this.mdWidthWorkflow || 12,
16777
16779
  enableCaching: false,
16778
- mdWidth: 12,
16779
16780
  hiddenCheck: function (rootModel) { return !rootModel || rootModel.createTaskInstead; }
16780
16781
  }));
16781
16782
  if (this.parentSetting.workflowSettingNew
@@ -21760,12 +21761,15 @@
21760
21761
  var EntityPermissionService = /** @class */ (function (_super) {
21761
21762
  __extends(EntityPermissionService, _super);
21762
21763
  function EntityPermissionService(http, injector, _moduleConfigService) {
21763
- var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint + "/EntityPermission") || this;
21764
+ var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/EntityPermission") || this;
21764
21765
  _this.serviceManagers = {};
21765
21766
  _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.userOrgEndpoint;
21766
21767
  _this._moduleConfig = _moduleConfigService.getConfig();
21767
21768
  return _this;
21768
21769
  }
21770
+ EntityPermissionService.prototype.getEndpointByService = function (service) {
21771
+ return service.endPoint + "/" + this._moduleConfig.environment.apiVersion;
21772
+ };
21769
21773
  EntityPermissionService.prototype.registerService = function (entityName, service) {
21770
21774
  this.serviceManagers[entityName] = service;
21771
21775
  };
@@ -21774,15 +21778,15 @@
21774
21778
  if (service == undefined) {
21775
21779
  (this._injector.get(NotifierService)).showWarning('Bạn chưa đăng ký base service cho entity permission service');
21776
21780
  }
21777
- return this.defaultPost(service.endPoint + "/EntityPermission/GetPermission/" + service.entityName, {});
21781
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/GetPermission/" + service.entityName, {});
21778
21782
  };
21779
21783
  EntityPermissionService.prototype.savePermission = function (tableName, data) {
21780
21784
  var service = this.serviceManagers[tableName];
21781
- return this.defaultPost(service.endPoint + "/EntityPermission/SavePermission/" + service.entityName, data);
21785
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/SavePermission/" + service.entityName, data);
21782
21786
  };
21783
21787
  EntityPermissionService.prototype.removePermission = function (tableName) {
21784
21788
  var service = this.serviceManagers[tableName];
21785
- return this.defaultPost(service.endPoint + "/EntityPermission/RemovePermission/" + service.entityName, {});
21789
+ return this.defaultPost(this.getEndpointByService(service) + "/EntityPermission/RemovePermission/" + service.entityName, {});
21786
21790
  };
21787
21791
  return EntityPermissionService;
21788
21792
  }(BaseService));
@@ -34942,6 +34946,10 @@
34942
34946
  this.data.breadcrumbs = [];
34943
34947
  this._dataSource = [];
34944
34948
  };
34949
+ FileManagerComponent.prototype.setRootFolderId = function (rootFolderId) {
34950
+ this.rootFolderId = rootFolderId;
34951
+ this.data.currentFolderId = this.rootFolderId;
34952
+ };
34945
34953
  FileManagerComponent.prototype.setDatasource = function (dataSource) {
34946
34954
  if (dataSource === void 0) { dataSource = []; }
34947
34955
  this._dataSource = dataSource;
@@ -35118,7 +35126,7 @@
35118
35126
  command: function (event) {
35119
35127
  _this.openObject(item);
35120
35128
  },
35121
- visible: this._deviceDetectorService.isDesktop()
35129
+ visible: (this._deviceDetectorService.isDesktop() && !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly))
35122
35130
  },
35123
35131
  {
35124
35132
  label: 'Ký số cá nhân (SIM)',
@@ -35126,33 +35134,35 @@
35126
35134
  command: function () {
35127
35135
  _this.signKySimFile(item);
35128
35136
  },
35129
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35137
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35130
35138
  },
35131
35139
  {
35132
35140
  label: 'Ký số cá nhân (USB)', icon: 'fas fa-signature',
35133
35141
  command: function () {
35134
35142
  _this.signFile(item);
35135
35143
  },
35136
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35144
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35137
35145
  },
35138
35146
  {
35139
35147
  label: 'Ký số đơn vị (USB)', icon: 'fas fa-signature',
35140
35148
  command: function () {
35141
35149
  _this.signFileDonVi(item);
35142
35150
  },
35143
- visible: (this._fileObjectService.isTypeFileKySo(item.name) && !this.readonly)
35151
+ visible: this._fileObjectService.isTypeFileKySo(item.name)
35144
35152
  },
35145
35153
  {
35146
35154
  label: 'Tải về', icon: 'fas fa-download',
35147
35155
  command: function () {
35148
35156
  _this.download(item);
35149
- }
35157
+ },
35158
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35150
35159
  },
35151
35160
  {
35152
35161
  label: 'Sao chép đường dẫn', icon: 'fas fa-link',
35153
35162
  command: function () {
35154
35163
  _this.copyDownloadLink(item);
35155
- }
35164
+ },
35165
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35156
35166
  },
35157
35167
  {
35158
35168
  label: 'Đổi tên', icon: 'fas fa-eraser',
@@ -35165,7 +35175,8 @@
35165
35175
  label: 'Xem các phiên bản khác', icon: 'fas fa-history',
35166
35176
  command: function () {
35167
35177
  _this.openFileVersions(item);
35168
- }
35178
+ },
35179
+ visible: !(this.layout === exports.EnumFileLayout.SIMPLE && this.readonly)
35169
35180
  },
35170
35181
  {
35171
35182
  label: 'Xóa tệp tin', icon: 'far fa-trash-alt',
@@ -35902,7 +35913,7 @@
35902
35913
  { type: i0.Component, args: [{
35903
35914
  // tslint:disable-next-line: component-selector
35904
35915
  selector: 'file-manager',
35905
- template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\">\r\n <div class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton pRipple type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\"\r\n tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\" label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\"\r\n (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i t\u1EC7p tin t\u1EEB m\u00E1y t\u00EDnh c\u1EE7a b\u1EA1n\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i l\u00EAn\"\r\n (click)=\"selectFile()\"></button>\r\n\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\"\r\n iconPos=\"left\" label=\"Di chuy\u1EC3n\" (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn t\u1EDBi \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\"\r\n iconPos=\"left\" label=\"\u0110\u1EB7t t\u1EA1i \u0111\u00E2y\" (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" icon=\"pi pi-undo\" pButton class=\"p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" label=\"B\u1ECF qua\"\r\n (click)=\"cancelMove()\">\r\n </button>\r\n\r\n <button *ngIf=\"hasSelect()\" pButton type=\"button\"\r\n pTooltip=\"{{ 'X\u00F3a th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn' | translate }}\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n iconPos=\"left\" class=\"p-button-text p-button-danger\" label=\"X\u00F3a\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly && hasSelect()\" class=\"p-button-text p-button-secondary\" pButton type=\"button\"\r\n pTooltip=\"N\u00E9n & t\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\" iconPos=\"left\" label=\"T\u1EA3i v\u1EC1\"\r\n (click)=\"downloadMultiple()\">\r\n </button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"fm-grid\">\r\n <crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"_dataSource\"\r\n [disableKeypressControl]=\"true\" [showScrollBar]=\"false\" class=\"--auto-height-content --no-wrapper-padding\"\r\n [widthFunctionColumn]=\"'8.2rem'\" (onReload)=\"_triggerProcessData($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span (click)=\"openObject(rowData)\" class=\"pull-left file-ex-icon\"\r\n [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <span (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n {{rowData.name}}\r\n </span>\r\n <span *ngIf=\"rowData.signatures\" class=\"pull-right signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #fileSize let-rowData='rowData'>\r\n <div *ngIf=\"rowData.isFile\">{{rowData.fileSize | fileSize}}</div>\r\n </ng-template>\r\n\r\n <ng-template #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <div class=\"function-list\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" pButton type=\"button\"\r\n tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\" (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\" pButton\r\n type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"pi pi-cloud-download\"\r\n (click)=\"download(rowData)\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n </div>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n <!-- <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>{{rowData.nameWithoutExtension}}</span>\r\n <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </a>\r\n <a (click)=\"openObject(rowData)\" class=\"file-ex-extension\">{{rowData.extension}}</a> -->\r\n\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\r\n <span>{{rowData.nameWithoutExtension}}</span>\r\n <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </span>\r\n <span class=\"file-ex-extension\">{{rowData.extension}}</span>\r\n </a>\r\n </div>\r\n\r\n <div *ngIf=\"rowData.isFile\" class=\"nfl-version\">\r\n v{{rowData.currentFileVersion}}\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></button>\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #breadCrumb>\r\n <div *ngIf=\"data.breadcrumbs.length > 0\" class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n</ng-template>\r\n\r\n<p-fileUpload #fileControl [ngStyle]=\"{'display': 'none'}\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file\"\r\n [url]=\"apiUploadUrl\" [maxFileSize]=\"maxFileSize\" auto=\"true\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onProgress)=\"onUploadProgress($event)\"\r\n (onBeforeUpload)=\"onBeforeUpload($event)\" (onSelect)=\"handleSelectFile($event)\" (onUpload)=\"onUploaded($event)\">\r\n</p-fileUpload>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"data.itemsMenuFile\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- T\u1EA1o m\u1EDBi/ \u0111\u1ED5i t\u00EAn th\u01B0 m\u1EE5c -->\r\n<tn-dialog *ngIf=\"forms.createFolder.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.createFolder.header | translate\" [popupSize]=\"forms[formIds.createFolder].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.createFolder)\">\r\n <folder-form #formBase [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms[formIds.createFolder].formData\" (onSaved)=\"onSavedForm(formIds.createFolder)\"\r\n (onCancel)=\"onCancelForm(formIds.createFolder)\">\r\n </folder-form>\r\n</tn-dialog>\r\n\r\n<!-- \u0110\u1ED5i t\u00EAn file -->\r\n<tn-dialog *ngIf=\"forms.renameFile.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.renameFile.header | translate\" [popupSize]=\"forms[formIds.renameFile].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.renameFile)\">\r\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"forms[formIds.renameFile].formData\"\r\n (onSaved)=\"onSavedForm(formIds.renameFile)\" (onCancel)=\"onCancelForm(formIds.renameFile)\">\r\n </file-form>\r\n</tn-dialog>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\" [readonly]=\"readonly\"\r\n [model]=\"forms.fileViewer.formData\" (onClose)=\"closeFileViewer()\">\r\n</file-viewer>\r\n\r\n<!-- Xem phi\u00EAn b\u1EA3n -->\r\n<tn-dialog *ngIf=\"forms.fileVersionList.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.fileVersionList.header | translate\" [popupSize]=\"forms[formIds.fileVersionList].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.fileVersionList)\">\r\n <file-version-list *ngIf=\"forms.fileVersionList.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [fileId]=\"forms[formIds.fileVersionList].fileId\" [readonly]=\"readonly\">\r\n </file-version-list>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB t\u1EC7p tin kh\u00E1c...\"\r\n (keyup.enter)=\"addAttachLink()\" pInputText [(ngModel)]=\"typedLink\" class=\"p-col-12\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" (click)=\"addAttachLink()\" [disabled]=\"typedLink != ''? null : true\" pButton\r\n class=\"p-button-primary p-col-12\" label=\"Ok\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n<!--\r\n\r\n<share-file *ngIf=\"forms.shareFile.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFile.formData\">\r\n</share-file>\r\n\r\n<share-folder *ngIf=\"forms.shareFolder.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFolder.formData\">\r\n</share-folder>\r\n -->\r\n\r\n<!-- Xem ch\u1EEF k\u00FD s\u1ED1 -->\r\n<tn-dialog *ngIf=\"forms.signatureDetail.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.signatureDetail.header | translate\" [popupSize]=\"forms[formIds.signatureDetail].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.signatureDetail)\">\r\n <signature-detail [parentModel]=\"model\" [parentContext]=\"context\">\r\n </signature-detail>\r\n</tn-dialog>\r\n<!--K\u00FD s\u1ED1 sim-->\r\n<tn-dialog *ngIf=\"forms.kySoSim.show\" #dialog [styleClass]=\"'address-form'\" [header]=\"forms.kySoSim.header | translate\"\r\n [popupSize]=\"forms.kySoSim.popupSize\" [showFooter]=\"true\" (onHide)=\"onCancelForm(formIds.kySoSim)\">\r\n <app-file-ky-so-sim #fileKySoSim [parentModel]=\"model\" [parentContext]=\"context\">\r\n </app-file-ky-so-sim>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"fas fa-images\" [disabled]=\"model.submitting\" class=\"p-button-text\"\r\n [label]=\"'Ch\u1ECDn ch\u1EEF k\u00FD' | translate\" (click)=\"chonChuKy()\"></button>\r\n <button type=\"button\" pButton icon=\"fas fa-signature\" class=\"p-button-text ui-button-success\"\r\n [disabled]=\"model.submitting\" [label]=\"'Th\u1EF1c hi\u1EC7n k\u00FD' | translate\" (click)=\"kySo()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"forms.kySoSim.show=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
35916
+ template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\">\r\n <div class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton pRipple type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\"\r\n tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\" label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\"\r\n (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i t\u1EC7p tin t\u1EEB m\u00E1y t\u00EDnh c\u1EE7a b\u1EA1n\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i l\u00EAn\"\r\n (click)=\"selectFile()\"></button>\r\n\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\"\r\n iconPos=\"left\" label=\"Di chuy\u1EC3n\" (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn t\u1EDBi \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\"\r\n iconPos=\"left\" label=\"\u0110\u1EB7t t\u1EA1i \u0111\u00E2y\" (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" icon=\"pi pi-undo\" pButton class=\"p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" label=\"B\u1ECF qua\"\r\n (click)=\"cancelMove()\">\r\n </button>\r\n\r\n <button *ngIf=\"hasSelect()\" pButton type=\"button\"\r\n pTooltip=\"{{ 'X\u00F3a th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn' | translate }}\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n iconPos=\"left\" class=\"p-button-text p-button-danger\" label=\"X\u00F3a\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly && hasSelect()\" class=\"p-button-text p-button-secondary\" pButton type=\"button\"\r\n pTooltip=\"N\u00E9n & t\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\" iconPos=\"left\" label=\"T\u1EA3i v\u1EC1\"\r\n (click)=\"downloadMultiple()\">\r\n </button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"fm-grid\">\r\n <crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"_dataSource\"\r\n [disableKeypressControl]=\"true\" [showScrollBar]=\"false\" class=\"--auto-height-content --no-wrapper-padding\"\r\n [widthFunctionColumn]=\"'8.2rem'\" (onReload)=\"_triggerProcessData($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span (click)=\"openObject(rowData)\" class=\"pull-left file-ex-icon\"\r\n [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <span (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n {{rowData.name}}\r\n </span>\r\n <span *ngIf=\"rowData.signatures\" class=\"pull-right signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #fileSize let-rowData='rowData'>\r\n <div *ngIf=\"rowData.isFile\">{{rowData.fileSize | fileSize}}</div>\r\n </ng-template>\r\n\r\n <ng-template #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <div class=\"function-list\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" pButton type=\"button\"\r\n tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\" (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\" pButton\r\n type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"pi pi-cloud-download\"\r\n (click)=\"download(rowData)\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n </div>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n <!-- <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>{{rowData.nameWithoutExtension}}</span>\r\n <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </a>\r\n <a (click)=\"openObject(rowData)\" class=\"file-ex-extension\">{{rowData.extension}}</a> -->\r\n\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\r\n <span>{{rowData.name}}</span>\r\n <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n </span>\r\n <!-- <span class=\"file-ex-extension\">{{rowData.extension}}</span> -->\r\n </a>\r\n </div>\r\n\r\n <div *ngIf=\"rowData.isFile\" class=\"nfl-version\">\r\n v{{rowData.currentFileVersion}}\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></button>\r\n </ng-container>\r\n\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #breadCrumb>\r\n <div *ngIf=\"data.breadcrumbs.length > 0\" class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n</ng-template>\r\n\r\n<p-fileUpload #fileControl [ngStyle]=\"{'display': 'none'}\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file\"\r\n [url]=\"apiUploadUrl\" [maxFileSize]=\"maxFileSize\" auto=\"true\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onProgress)=\"onUploadProgress($event)\"\r\n (onBeforeUpload)=\"onBeforeUpload($event)\" (onSelect)=\"handleSelectFile($event)\" (onUpload)=\"onUploaded($event)\">\r\n</p-fileUpload>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"data.itemsMenuFile\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- T\u1EA1o m\u1EDBi/ \u0111\u1ED5i t\u00EAn th\u01B0 m\u1EE5c -->\r\n<tn-dialog *ngIf=\"forms.createFolder.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.createFolder.header | translate\" [popupSize]=\"forms[formIds.createFolder].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.createFolder)\">\r\n <folder-form #formBase [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms[formIds.createFolder].formData\" (onSaved)=\"onSavedForm(formIds.createFolder)\"\r\n (onCancel)=\"onCancelForm(formIds.createFolder)\">\r\n </folder-form>\r\n</tn-dialog>\r\n\r\n<!-- \u0110\u1ED5i t\u00EAn file -->\r\n<tn-dialog *ngIf=\"forms.renameFile.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.renameFile.header | translate\" [popupSize]=\"forms[formIds.renameFile].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.renameFile)\">\r\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"forms[formIds.renameFile].formData\"\r\n (onSaved)=\"onSavedForm(formIds.renameFile)\" (onCancel)=\"onCancelForm(formIds.renameFile)\">\r\n </file-form>\r\n</tn-dialog>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\" [readonly]=\"readonly\"\r\n [model]=\"forms.fileViewer.formData\" (onClose)=\"closeFileViewer()\">\r\n</file-viewer>\r\n\r\n<!-- Xem phi\u00EAn b\u1EA3n -->\r\n<tn-dialog *ngIf=\"forms.fileVersionList.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.fileVersionList.header | translate\" [popupSize]=\"forms[formIds.fileVersionList].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.fileVersionList)\">\r\n <file-version-list *ngIf=\"forms.fileVersionList.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [fileId]=\"forms[formIds.fileVersionList].fileId\" [readonly]=\"readonly\">\r\n </file-version-list>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB t\u1EC7p tin kh\u00E1c...\"\r\n (keyup.enter)=\"addAttachLink()\" pInputText [(ngModel)]=\"typedLink\" class=\"p-col-12\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" (click)=\"addAttachLink()\" [disabled]=\"typedLink != ''? null : true\" pButton\r\n class=\"p-button-primary p-col-12\" label=\"Ok\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n<!--\r\n\r\n<share-file *ngIf=\"forms.shareFile.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFile.formData\">\r\n</share-file>\r\n\r\n<share-folder *ngIf=\"forms.shareFolder.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFolder.formData\">\r\n</share-folder>\r\n -->\r\n\r\n<!-- Xem ch\u1EEF k\u00FD s\u1ED1 -->\r\n<tn-dialog *ngIf=\"forms.signatureDetail.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.signatureDetail.header | translate\" [popupSize]=\"forms[formIds.signatureDetail].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.signatureDetail)\">\r\n <signature-detail [parentModel]=\"model\" [parentContext]=\"context\">\r\n </signature-detail>\r\n</tn-dialog>\r\n<!--K\u00FD s\u1ED1 sim-->\r\n<tn-dialog *ngIf=\"forms.kySoSim.show\" #dialog [styleClass]=\"'address-form'\" [header]=\"forms.kySoSim.header | translate\"\r\n [popupSize]=\"forms.kySoSim.popupSize\" [showFooter]=\"true\" (onHide)=\"onCancelForm(formIds.kySoSim)\">\r\n <app-file-ky-so-sim #fileKySoSim [parentModel]=\"model\" [parentContext]=\"context\">\r\n </app-file-ky-so-sim>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"fas fa-images\" [disabled]=\"model.submitting\" class=\"p-button-text\"\r\n [label]=\"'Ch\u1ECDn ch\u1EEF k\u00FD' | translate\" (click)=\"chonChuKy()\"></button>\r\n <button type=\"button\" pButton icon=\"fas fa-signature\" class=\"p-button-text ui-button-success\"\r\n [disabled]=\"model.submitting\" [label]=\"'Th\u1EF1c hi\u1EC7n k\u00FD' | translate\" (click)=\"kySo()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"forms.kySoSim.show=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
35906
35917
  providers: [
35907
35918
  {
35908
35919
  provide: forms.NG_VALUE_ACCESSOR,
@@ -35911,7 +35922,7 @@
35911
35922
  },
35912
35923
  ComponentContextService
35913
35924
  ],
35914
- styles: [".file-header-tab a{color:#000!important}.file-ex-name:hover{cursor:pointer}.file-ex-name .signature{margin-left:3px}.file-ex-row:hover{background:#e8e8e8}.function-list{text-align:center}.function-list a{margin:5px}.function-list a:hover{color:#6aa3d4}.file-btn{color:#337ab7;cursor:pointer;display:inline-block;font-size:1.1em;line-height:45px;margin-left:10px;padding:5px;vertical-align:middle}.file-btn:hover{color:#3ea8ff}.file-btn i{font-size:1.2em;margin-right:10px}.file-action{text-align:right}.file-row-action i{margin-right:5px}.file-row-action{line-height:34px}.function-list .topbar-items{margin-top:0}.function-list .topbar-items>li .topbar-icon{color:#909090}.function-list .topbar-items>li .topbar-icon:hover{color:#444}.function-list .topbar-items>li>ul{border-top:0;right:15px;top:30px}.function-list .topbar-items>li>ul:before{display:none}.function-list .topbar-items>li.active-top-menu>ul{z-index:1}.function-list .layout-menu li a{border:none;margin:0;text-align:left}.function-list .layout-menu li a i:first-child{color:#666f77;font-size:1.2em}.group-link-share{height:34px}.txt-link-share{max-width:335px!important}.btn-copy-link-share{font-size:small!important}.tbl-checkbox-header{width:3em}.tbl-checkbox{text-align:center;width:3em}.my-drive-checkbox{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);height:20px;text-align:center;transition:border-color .3s,background-color .3s,box-shadow .3s;width:20px}.get-link-share{cursor:pointer;float:right}.file-toolbar{text-align:right}.function-topbar button:last-child{margin-right:0!important}::ng-deep body>.fm-contextMenu-panel{min-width:210px}.folderUnClickable{pointer-events:none}::ng-deep file-manager .file-menu.ui-menu ul li a{text-align:left!important}::ng-deep file-manager .item-inline-name .ui-tooltip-text{white-space:normal;word-break:break-word}::ng-deep file-manager .full-layout .fm-grid a{display:flex;padding-top:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon{margin-right:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon:hover{cursor:pointer}::ng-deep file-manager .fm-toolbar{align-items:center;display:flex;padding-bottom:.5em;padding-left:0;padding-top:.5em}::ng-deep file-manager .fm-toolbar .fm-toolbar-buttons{align-items:center;display:flex;padding-left:3px}::ng-deep file-manager .fm-toolbar .fm-toolbar-path{flex:1 1;margin-left:2em;position:relative}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb .p-breadcrumb{background:transparent}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb>div{border:none;padding:0}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a{cursor:pointer}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a .p-menuitem-text{color:#2196f3}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:last-child .p-menuitem-text{color:rgba(255,102,0,.685)}::ng-deep file-manager .fm-toolbar .fm-toolbar-path:after{background:#b8b8b8;content:\"\";height:100%;left:-1.4em;position:absolute;top:0;width:2px}::ng-deep file-manager .not-full-layout{border-radius:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item{display:flex}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-function,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{align-items:center;display:flex;justify-content:center}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no{flex:0 0 30px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name{flex:1 1;justify-content:left;margin-right:1em}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name>span:not(.file-ex-extension){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{flex:0 0 auto;font-size:.85rem;font-weight:700;margin-right:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:left;padding:1em}::ng-deep td file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:center;padding:8px}"]
35925
+ styles: [".file-header-tab a{color:#000!important}.file-ex-name:hover{cursor:pointer}.file-ex-name .signature{margin-left:3px}.file-ex-row:hover{background:#e8e8e8}.function-list{text-align:center}.function-list a{margin:5px}.function-list a:hover{color:#6aa3d4}.file-btn{color:#337ab7;cursor:pointer;display:inline-block;font-size:1.1em;line-height:45px;margin-left:10px;padding:5px;vertical-align:middle}.file-btn:hover{color:#3ea8ff}.file-btn i{font-size:1.2em;margin-right:10px}.file-action{text-align:right}.file-row-action i{margin-right:5px}.file-row-action{line-height:34px}.function-list .topbar-items{margin-top:0}.function-list .topbar-items>li .topbar-icon{color:#909090}.function-list .topbar-items>li .topbar-icon:hover{color:#444}.function-list .topbar-items>li>ul{border-top:0;right:15px;top:30px}.function-list .topbar-items>li>ul:before{display:none}.function-list .topbar-items>li.active-top-menu>ul{z-index:1}.function-list .layout-menu li a{border:none;margin:0;text-align:left}.function-list .layout-menu li a i:first-child{color:#666f77;font-size:1.2em}.group-link-share{height:34px}.txt-link-share{max-width:335px!important}.btn-copy-link-share{font-size:small!important}.tbl-checkbox-header{width:3em}.tbl-checkbox{text-align:center;width:3em}.my-drive-checkbox{background-color:#fff;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);height:20px;text-align:center;transition:border-color .3s,background-color .3s,box-shadow .3s;width:20px}.get-link-share{cursor:pointer;float:right}.file-toolbar{text-align:right}.function-topbar button:last-child{margin-right:0!important}::ng-deep body>.fm-contextMenu-panel{min-width:210px}.folderUnClickable{pointer-events:none}::ng-deep file-manager .file-menu.ui-menu ul li a{text-align:left!important}::ng-deep file-manager .item-inline-name .ui-tooltip-text{white-space:normal;word-break:break-word}::ng-deep file-manager .full-layout .fm-grid a{display:flex;padding-top:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon{margin-right:5px}::ng-deep file-manager .full-layout .fm-grid a .file-ex-icon:hover{cursor:pointer}::ng-deep file-manager .fm-toolbar{align-items:center;display:flex;padding-bottom:.5em;padding-left:0;padding-top:.5em}::ng-deep file-manager .fm-toolbar .fm-toolbar-buttons{align-items:center;display:flex;padding-left:3px}::ng-deep file-manager .fm-toolbar .fm-toolbar-path{flex:1 1;margin-left:2em;position:relative}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb .p-breadcrumb{background:transparent}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb>div{border:none;padding:0}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a{cursor:pointer}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:not(:last-child)>a .p-menuitem-text{color:#2196f3}::ng-deep file-manager .fm-toolbar .fm-toolbar-path>p-breadcrumb ul li:last-child .p-menuitem-text{color:rgba(255,102,0,.685)}::ng-deep file-manager .fm-toolbar .fm-toolbar-path:after{background:#b8b8b8;content:\"\";height:100%;left:-1.4em;position:absolute;top:0;width:2px}::ng-deep file-manager .not-full-layout{border-radius:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item{display:flex}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-function,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no,::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{align-items:center;display:flex;justify-content:center}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-no{flex:0 0 30px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name{display:flex;flex:1 1;justify-content:left;margin-right:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-name .file-ex-name>span:not(.file-ex-extension){display:flex;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-item .nfl-version{flex:0 0 auto;font-size:.85rem;font-weight:700;margin-right:5px}::ng-deep file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:left;padding:1em}::ng-deep td file-manager .not-full-layout .nfl-grid .nfl-no-item{align-items:center;display:flex;justify-content:center;padding:8px}"]
35915
35926
  },] }
35916
35927
  ];
35917
35928
  FileManagerComponent.ctorParameters = function () { return [
@@ -40867,6 +40878,18 @@
40867
40878
  displayField: 'name',
40868
40879
  showLabel: false,
40869
40880
  mdWidth: 12
40881
+ }),
40882
+ new CustomControlSchema({
40883
+ field: 'customField',
40884
+ label: 'Trường dữ liệu',
40885
+ operators: [
40886
+ { id: exports.Operator.equal, ten: 'Bằng' },
40887
+ { id: exports.Operator.notEqual, ten: 'Không bằng' },
40888
+ { id: exports.Operator.greater, ten: 'Lớn hơn' },
40889
+ { id: exports.Operator.greaterThanEqual, ten: 'Lớn hơn hoặc bằng' },
40890
+ { id: exports.Operator.lower, ten: 'Nhỏ hơn' },
40891
+ { id: exports.Operator.lowerThanEqual, ten: 'Nhỏ hơn hoặc bằng' }
40892
+ ]
40870
40893
  })
40871
40894
  ];
40872
40895
  if (this.data && this.data.data) {
@@ -41783,7 +41806,7 @@
41783
41806
  TnAppHelpComponent.decorators = [
41784
41807
  { type: i0.Component, args: [{
41785
41808
  selector: 'li[tn-app-help]',
41786
- template: "<a href=\"javascript:;\" tabindex=\"9\" (click)=\"showHelper()\" style=\"height: 30px;\" pTooltip=\"Tr\u1EE3 gi\u00FAp\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"topbar-icon-left\">\r\n <!-- <svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\r\n class=\"topbar-icon animated swing svgmodule\">\r\n <path fill=\"currentColor\"\r\n d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"\r\n class=\"\"></path>\r\n </svg> -->\r\n <i class=\"topbar-icon animated swing pi pi-question-circle\"></i>\r\n </span>\r\n <span class=\"topbar-item-name\">{{ \"Tr\u1EE3 gi\u00FAp\" | translate }}</span>\r\n</a>\r\n\r\n<p-sidebar [styleClass]=\"'HelperSlideBar tn-l-sidebar-wrapper'\" [(visible)]=\"display\" position=\"right\"\r\n [appendTo]=\"'body'\" [style]=\"{ width: '30em', border: 0, 'max-width': '100vw' }\">\r\n <div style=\"background-color: #fff; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.35);\">\r\n <h1 style=\"font-size: 16px; color: #212529;\">Trung t\u00E2m tr\u1EE3 gi\u00FAp</h1>\r\n </div>\r\n\r\n <div class=\"tn-l-help-wrapper\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'max-height':'calc(100vh - 50px)'}\">\r\n <div class=\"HelpCenter\">\r\n <div class=\"p-grid\" style=\"margin-top:10px; margin-bottom: 50px;\">\r\n <div class=\"p-col-8\">\r\n <p style=\"font-weight:bold;font-size: 16px;margin-bottom: 8px; margin-top:20px\">\r\n {{environment.helpConfig?.expertName}}\r\n </p>\r\n <p style=\"margin: 0px;\">\r\n <a [href]=\"hrefTelephone\"><i class=\"fas fa-phone\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{phoneNumber}}</a>\r\n </p>\r\n <p style=\"margin-top: 8px;\">\r\n <a [href]=\"hrefMail\"><i class=\"fas fa-envelope\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{mail}}</a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4\">\r\n <img src=\"/assets/images/tri-nam-group-logo.png\"\r\n style=\"width: 100%; float: right; margin-top: 25px; opacity: 0.7;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-video\" style=\"margin-top: 0px\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Xem h\u01B0\u1EDBng d\u1EABn</span>\r\n </div>\r\n <div class=\"p-col-12 help-content\">\r\n <h2 *ngIf=\"showHelperCurrentPageState\" style=\"margin-top: 0px\">\r\n <a href=\"javascript:;\" (click)=\"showHelperCurrentPage(null)\"\r\n style=\"display:inline-block; position: relative; border-top: 1px solid #52abf5;\">\r\n <img src=\"/assets/images/bgvideo.png\" alt=\"screen shot\"\r\n style=\"width:100%; filter: brightness(0.88);\" />\r\n <i class=\"fab fa-youtube fa-2x\"></i>\r\n </a>\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-download\" style=\"margin-top: 0px; margin-bottom: 40px;\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Ph\u1EA7n m\u1EC1m ti\u1EC7n \u00EDch</span>\r\n </div>\r\n <div class=\"tn-l-pmti\" style=\"border: 1px solid #ccc; width: 100%\">\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"{{environment.signalr.linkDownloadClientApp}}\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-appTN64x64.png\" />\r\n <br />TN Client\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://ultraviewer.net/vi/UltraViewer_setup_6.2_vi.exe\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/ultraviewer.ico\" />\r\n <br />Ultraviewer\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://www.teamviewer.com/vi/tai-xuong-tu-dong-teamviewer/\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-teamviewer.png\" />\r\n <br />Teamviewer\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </tn-custom-scrollbar>\r\n </div>\r\n</p-sidebar>",
41809
+ template: "<a href=\"javascript:;\" tabindex=\"9\" (click)=\"showHelper()\" style=\"height: 30px;\" pTooltip=\"Tr\u1EE3 gi\u00FAp\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"topbar-icon-left\">\r\n <!-- <svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\r\n class=\"topbar-icon animated swing svgmodule\">\r\n <path fill=\"currentColor\"\r\n d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"\r\n class=\"\"></path>\r\n </svg> -->\r\n <i class=\"topbar-icon animated swing pi pi-question-circle\"></i>\r\n </span>\r\n <span class=\"topbar-item-name\">{{ \"Tr\u1EE3 gi\u00FAp\" | translate }}</span>\r\n</a>\r\n\r\n<p-sidebar [styleClass]=\"'HelperSlideBar tn-l-sidebar-wrapper'\" [(visible)]=\"display\" position=\"right\"\r\n [appendTo]=\"'body'\" [style]=\"{ width: '30em', border: 0, 'max-width': '100vw' }\">\r\n <div style=\"background-color: #fff; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.35);\">\r\n <h1 style=\"font-size: 16px; color: #212529;\">Trung t\u00E2m tr\u1EE3 gi\u00FAp</h1>\r\n </div>\r\n\r\n <div class=\"tn-l-help-wrapper\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'max-height':'calc(100vh - 50px)'}\">\r\n <div class=\"HelpCenter\">\r\n <div class=\"p-grid\" style=\"margin-top:10px; margin-bottom: 25px;\">\r\n <div class=\"p-col-8\">\r\n <p style=\"font-weight:bold;font-size: 16px;margin-bottom: 8px; margin-top:20px\">\r\n {{environment.helpConfig?.expertName}}\r\n </p>\r\n <p style=\"margin: 0px;\">\r\n <a [href]=\"hrefTelephone\"><i class=\"fas fa-phone\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{phoneNumber}}</a>\r\n </p>\r\n <p style=\"margin-top: 8px;\">\r\n <a [href]=\"hrefMail\"><i class=\"fas fa-envelope\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{mail}}</a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4\">\r\n <img src=\"/assets/images/tri-nam-group-logo.png\"\r\n style=\"width: 100%; float: right; margin-top: 15px; opacity: 0.7;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-video\" style=\"margin-top: 0px\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Xem h\u01B0\u1EDBng d\u1EABn</span>\r\n </div>\r\n <div class=\"p-col-12 help-content\">\r\n <h2 *ngIf=\"showHelperCurrentPageState\" style=\"margin-top: 0px\">\r\n <a href=\"javascript:;\" (click)=\"showHelperCurrentPage(null)\"\r\n style=\"display:inline-block; position: relative; border-top: 1px solid #52abf5;\">\r\n <img src=\"/assets/images/bgvideo.png\" alt=\"screen shot\"\r\n style=\"width:100%; filter: brightness(0.88);\" />\r\n <i class=\"fab fa-youtube fa-2x\"></i>\r\n </a>\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-download\" style=\"margin-top: 0px; margin-bottom: 40px;\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Ph\u1EA7n m\u1EC1m ti\u1EC7n \u00EDch</span>\r\n </div>\r\n <div class=\"tn-l-pmti\" style=\"border: 1px solid #ccc; width: 100%\">\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"{{environment.signalr.linkDownloadClientApp}}\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-appTN64x64.png\" />\r\n <br />TN Client\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://ultraviewer.net/vi/UltraViewer_setup_6.2_vi.exe\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/ultraviewer.ico\" />\r\n <br />Ultraviewer\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://www.teamviewer.com/vi/tai-xuong-tu-dong-teamviewer/\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-teamviewer.png\" />\r\n <br />Teamviewer\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </tn-custom-scrollbar>\r\n </div>\r\n</p-sidebar>",
41787
41810
  providers: [ComponentContextService],
41788
41811
  styles: [".HelpCenter{color:#555;padding:0 20px}::ng-deep .tn-l-sidebar-wrapper{padding:0}.tn-l-pmti{display:flex}.HelpCenter p:first-child img{margin-bottom:10px}::ng-deep .HelperSlideBar .p-sidebar-content>button{color:#212529;cursor:pointer;font-size:20px;margin-right:14px;margin-top:10px}::ng-deep .ui-sidebar{padding:0}::ng-deep .HelperSlideBar h1{height:50px;line-height:50px;margin:0;padding-left:20px;text-transform:uppercase}.HelpCenter-video{position:relative}.HelpCenter-video i{color:#454545;cursor:pointer;left:50%;opacity:.5;position:absolute;top:calc(50% - 10px);transform:translateX(-50%) translateY(-50%);transition:.5s}.HelpCenter-video video{opacity:1}.HelpCenter-video:hover video{cursor:pointer;opacity:.5}.HelpCenter-video:hover i{opacity:1}.HelpCenter-download img{height:45px;width:45px}.HelpCenter .help-title{background-color:rgba(49,146,225,.8784313725490196);color:#fff}.HelpCenter .help-title .tit-name{font-size:14px;font-weight:700}.HelpCenter .help-content{padding:0}.HelpCenter .HelpCenter-comment .help-content{padding:0;text-align:center}.HelpCenter-comment,.HelpCenter-download,.HelpCenter-video{margin-bottom:15px}.tn-l-help-wrapper{display:flex;max-height:calc(100vh - 60px);overflow:auto}"]
41789
41812
  },] }
@@ -43884,10 +43907,11 @@
43884
43907
 
43885
43908
  var UserPickerComponent = /** @class */ (function (_super) {
43886
43909
  __extends(UserPickerComponent, _super);
43887
- function UserPickerComponent(_injector, _userV5Service, _translateService) {
43910
+ function UserPickerComponent(_injector, _userV5Service, _translateService, _dm_ChucVuService) {
43888
43911
  var _this = _super.call(this, _injector) || this;
43889
43912
  _this._userV5Service = _userV5Service;
43890
43913
  _this._translateService = _translateService;
43914
+ _this._dm_ChucVuService = _dm_ChucVuService;
43891
43915
  _this.popupSize = new PopupSize({
43892
43916
  width: 1100,
43893
43917
  height: 900,
@@ -43911,6 +43935,8 @@
43911
43935
  _this.dirty = false;
43912
43936
  _this.tooltip = '';
43913
43937
  _this.hasValue = false;
43938
+ _this.searchSchema = {};
43939
+ _this.searchData = {};
43914
43940
  return _this;
43915
43941
  }
43916
43942
  UserPickerComponent.prototype.ngOnInit = function () {
@@ -43942,6 +43968,21 @@
43942
43968
  code: 'email',
43943
43969
  dataType: 'string',
43944
43970
  fullTextSearch: true
43971
+ }),
43972
+ new EntityPickerColumn({
43973
+ label: 'Chức vụ',
43974
+ code: 'lstTenChucVu',
43975
+ templateFilter: this.filterChucVuRef,
43976
+ }),
43977
+ new EntityPickerColumn({
43978
+ label: 'Giảng viên',
43979
+ code: 'isGiangVien',
43980
+ dataType: 'boolean'
43981
+ }),
43982
+ new EntityPickerColumn({
43983
+ label: 'Chuyên viên',
43984
+ code: 'isChuyenVien',
43985
+ dataType: 'boolean'
43945
43986
  })
43946
43987
  ], mdWidth: 12 }));
43947
43988
  this.fieldSearchText = __spread(this.controlPicker.fieldSearchText);
@@ -43962,8 +44003,24 @@
43962
44003
  this.funcReturnValue = function (value) { return value; };
43963
44004
  this.buildFilterKeyword();
43964
44005
  this.buildSettingEntityPicker();
44006
+ this.createSchemaSearch();
43965
44007
  this.onReady.emit();
43966
44008
  };
44009
+ UserPickerComponent.prototype.createSchemaSearch = function () {
44010
+ return __awaiter(this, void 0, void 0, function () {
44011
+ return __generator(this, function (_a) {
44012
+ this.searchSchema.idChucVus = new DropdownControlSchema({
44013
+ field: 'idChucVus',
44014
+ multiple: true,
44015
+ placeholder: 'Chọn chức vụ',
44016
+ baseService: this._dm_ChucVuService,
44017
+ sortField: 'soThuTu',
44018
+ loadOnInit: true
44019
+ });
44020
+ return [2 /*return*/];
44021
+ });
44022
+ });
44023
+ };
43967
44024
  UserPickerComponent.prototype.buildFilterKeyword = function () {
43968
44025
  var _this = this;
43969
44026
  if (this.fieldSearchText.length == 1) {
@@ -44064,7 +44121,8 @@
44064
44121
  };
44065
44122
  UserPickerComponent.prototype.getData = function (keyWord) {
44066
44123
  return __awaiter(this, void 0, void 0, function () {
44067
- var filters, dataSource;
44124
+ var filters, filterOrs_1, dataSource;
44125
+ var _this = this;
44068
44126
  return __generator(this, function (_a) {
44069
44127
  switch (_a.label) {
44070
44128
  case 0:
@@ -44079,6 +44137,13 @@
44079
44137
  filters.push(this.newFilter(this.controlPicker.valueField, exports.Operator.notEqual, this.value));
44080
44138
  }
44081
44139
  }
44140
+ if (this.searchData.idChucVus && this.searchData.idChucVus.length > 0) {
44141
+ filterOrs_1 = [];
44142
+ this.searchData.idChucVus.forEach(function (idChucVu) {
44143
+ filterOrs_1.push(_this.newFilter('IdsChucVu', exports.Operator.contain, idChucVu));
44144
+ });
44145
+ filters.push(this.newFilterContainer.apply(this, __spread(['or'], filterOrs_1)));
44146
+ }
44082
44147
  return [4 /*yield*/, appendDefaultFilter(filters, this.control.defaultFilters)];
44083
44148
  case 1:
44084
44149
  _a.sent();
@@ -44389,7 +44454,7 @@
44389
44454
  UserPickerComponent.decorators = [
44390
44455
  { type: i0.Component, args: [{
44391
44456
  selector: 'user-picker',
44392
- template: "<div class=\"p-inputgroup user-picker\" [class.multiple]=\"multiple\" [class.hasValue]=\"hasValue\">\r\n <div style=\"width: calc(100% - 28px)\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\">\r\n <p-autoComplete emptyMessage=\"Kh\u00F4ng c\u00F3 k\u1EBFt qu\u1EA3 n\u00E0o\" [ngClass]=\"'custom-autocomplete'\" [disabled]=\"disabled\"\r\n [placeholder]=\"control.placeholder\" [appendTo]=\"control.appendTo\" [suggestions]=\"results\" field=\"label\"\r\n [styleClass]=\"control.validators && control.required ? 'rq' : ''\" [multiple]=\"control.multiple\"\r\n [minLength]=\"2\" [(ngModel)]=\"selectedValueObject\" (onFocus)=\"handleFocus($event)\"\r\n (onBlur)=\"handleBlur($event)\" (completeMethod)=\"search($event)\" (onKeyUp)=\"handleKeyUp($event)\"\r\n (onSelect)=\"handleSelect($event)\" (onUnselect)=\"handleUnSelect($event)\">\r\n </p-autoComplete>\r\n </div>\r\n <span *ngIf=\"!control.multiple && !disabled && hasValue\" class=\"icon-clear\" (click)=\"clearValue()\"><i\r\n class=\"fas fa-times\"></i></span>\r\n <button class=\"custom-autocomplete-button\" [disabled]=\"disabled\" tabindex=\"-1\" (click)=\"showPickForm()\" pButton\r\n [pTooltip]=\"control.title\" icon=\"fas fa-external-link-alt\" type=\"button\"></button>\r\n</div>\r\n<tn-dialog #dialog *ngIf=\"showFormPicker\" styleClass=\"user-picker-box-dialog no-padding\" [useDefaultScrollBar]=\"true\"\r\n [header]=\"control.title | translate\" [popupSize]=\"popupSize\" (onHide)=\"handleHide($event)\">\r\n <user-picker-box #userPickerBox [controlSetting]=\"control\" [control]=\"controlPicker\" [parentSetting]=\"settingPicker\"\r\n [advanceData]=\"advanceDataPicker\" [selectedValue]=\"selectedValue\" (onChanged)=\"handleChangeEntity($event)\"\r\n (onSelect)=\"handleSelectEntity($event)\" (onUnSelect)=\"handleUnSelectEntity($event)\"\r\n (onDone)=\"handleHide($event)\" (onRowSelect)=\"handleRowSelect($event)\">\r\n </user-picker-box>\r\n <ng-template #footer>\r\n <button type=\" button\" pButton class=\"p-button-text\" (click)=\"onClickSubmitButton($event, userPickerBox)\"\r\n [label]=\"'Ho\u00E0n th\u00E0nh'\" icon=\"pi pi-check\"></button>\r\n </ng-template>\r\n</tn-dialog>",
44457
+ template: "<div class=\"p-inputgroup user-picker\" [class.multiple]=\"multiple\" [class.hasValue]=\"hasValue\">\r\n <div style=\"width: calc(100% - 28px)\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\">\r\n <p-autoComplete emptyMessage=\"Kh\u00F4ng c\u00F3 k\u1EBFt qu\u1EA3 n\u00E0o\" [ngClass]=\"'custom-autocomplete'\" [disabled]=\"disabled\"\r\n [placeholder]=\"control.placeholder\" [appendTo]=\"control.appendTo\" [suggestions]=\"results\" field=\"label\"\r\n [styleClass]=\"control.validators && control.required ? 'rq' : ''\" [multiple]=\"control.multiple\"\r\n [minLength]=\"2\" [(ngModel)]=\"selectedValueObject\" (onFocus)=\"handleFocus($event)\"\r\n (onBlur)=\"handleBlur($event)\" (completeMethod)=\"search($event)\" (onKeyUp)=\"handleKeyUp($event)\"\r\n (onSelect)=\"handleSelect($event)\" (onUnselect)=\"handleUnSelect($event)\">\r\n </p-autoComplete>\r\n </div>\r\n <span *ngIf=\"!control.multiple && !disabled && hasValue\" class=\"icon-clear\" (click)=\"clearValue()\"><i\r\n class=\"fas fa-times\"></i></span>\r\n <button class=\"custom-autocomplete-button\" [disabled]=\"disabled\" tabindex=\"-1\" (click)=\"showPickForm()\" pButton\r\n [pTooltip]=\"control.title\" icon=\"fas fa-external-link-alt\" type=\"button\"></button>\r\n</div>\r\n<tn-dialog #dialog *ngIf=\"showFormPicker\" styleClass=\"user-picker-box-dialog no-padding\" [useDefaultScrollBar]=\"true\"\r\n [header]=\"control.title | translate\" [popupSize]=\"popupSize\" (onHide)=\"handleHide($event)\">\r\n <user-picker-box #userPickerBox [controlSetting]=\"control\" [control]=\"controlPicker\" [parentSetting]=\"settingPicker\"\r\n [advanceData]=\"advanceDataPicker\" [selectedValue]=\"selectedValue\" (onChanged)=\"handleChangeEntity($event)\"\r\n (onSelect)=\"handleSelectEntity($event)\" (onUnSelect)=\"handleUnSelectEntity($event)\"\r\n (onDone)=\"handleHide($event)\" (onRowSelect)=\"handleRowSelect($event)\">\r\n </user-picker-box>\r\n <ng-template #footer>\r\n <button type=\" button\" pButton class=\"p-button-text\" (click)=\"onClickSubmitButton($event, userPickerBox)\"\r\n [label]=\"'Ho\u00E0n th\u00E0nh'\" icon=\"pi pi-check\"></button>\r\n </ng-template>\r\n</tn-dialog>\r\n\r\n<ng-template #filterChucVuRef let-col=\"col\" let-filterData=\"filterData\" let-onSearch=\"onSearch\"\r\n let-onShowFilterDropdownPanel=\"onShowFilterDropdownPanel\" let-onHideFilterDropdownPanel=\"onHideFilterDropdownPanel\">\r\n <dropdown [control]=\"searchSchema.idChucVus\" [(value)]=\"searchData.idChucVus\" (onHideSmartEvent)=\"onSearch()\"\r\n (onShow)=\"onShowFilterDropdownPanel($event)\" (onHideSmartEvent)=\"onHideFilterDropdownPanel($event)\">\r\n </dropdown>\r\n</ng-template>",
44393
44458
  providers: [
44394
44459
  {
44395
44460
  provide: forms.NG_VALUE_ACCESSOR,
@@ -44404,9 +44469,11 @@
44404
44469
  UserPickerComponent.ctorParameters = function () { return [
44405
44470
  { type: i0.Injector },
44406
44471
  { type: UserV5Service },
44407
- { type: i2.TranslateService }
44472
+ { type: i2.TranslateService },
44473
+ { type: DmChucVuService }
44408
44474
  ]; };
44409
44475
  UserPickerComponent.propDecorators = {
44476
+ filterChucVuRef: [{ type: i0.ViewChild, args: ['filterChucVuRef', { static: true },] }],
44410
44477
  control: [{ type: i0.Input }],
44411
44478
  popupSize: [{ type: i0.Input }],
44412
44479
  multiple: [{ type: i0.Input }],
@@ -46155,29 +46222,30 @@
46155
46222
  _this._fileControls.forEach(function (control) {
46156
46223
  key = control.serviceCode + "/" + control.entity + "/" + control._entityKey;
46157
46224
  if (dataFile[key]) {
46158
- control.setDatasource(dataFile[key]);
46225
+ control.setRootFolderId(dataFile[key].folderId);
46226
+ control.setDatasource(dataFile[key].lstFile);
46159
46227
  }
46160
46228
  });
46161
46229
  }); });
46162
46230
  };
46163
46231
  FileDataService.prototype.processDatasourceFile = function (fileData) {
46232
+ var _this = this;
46164
46233
  if (fileData === void 0) { fileData = []; }
46165
- var dic = {};
46166
- var key = '';
46167
- fileData.forEach(function (file) {
46168
- key = file.serviceCode + "/" + file.entity + "/" + file.entityKey;
46169
- // Nếu hết file của 1 control
46170
- if (!dic[key]) {
46171
- dic[key] = [];
46172
- }
46173
- dic[key].push(file);
46174
- });
46175
- Object.keys(dic).forEach(function (key) {
46176
- dic[key].sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
46234
+ var result = {};
46235
+ Object.keys(fileData).forEach(function (key) {
46236
+ fileData[key].lstFile.sort(multipleSort({ name: 'fileExplorerItemType', reverse: true }, // Sắp xếp folder lên trên file
46177
46237
  { name: 'name', primer: function (a) { return a.toLowerCase(); } } // Order theo tên (nhưng phải toLower vì T < b < t)
46178
46238
  ));
46239
+ var data = fileData[key];
46240
+ result[_this.generateKey(data.serviceCode, data.entity, data.entityKey)] = {
46241
+ folderId: key,
46242
+ lstFile: fileData[key].lstFile
46243
+ };
46179
46244
  });
46180
- return dic;
46245
+ return result;
46246
+ };
46247
+ FileDataService.prototype.generateKey = function (serviceCode, entity, entityKey) {
46248
+ return serviceCode + "/" + entity + "/" + entityKey;
46181
46249
  };
46182
46250
  return FileDataService;
46183
46251
  }());
@@ -47615,7 +47683,7 @@
47615
47683
  };
47616
47684
  BaseCongviecDinhkemComponent.prototype.ngOnDestroy = function () {
47617
47685
  this.rootContext.unSubscribleReplay(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
47618
- this.ngOnDestroy();
47686
+ _super.prototype.ngOnDestroy.call(this);
47619
47687
  };
47620
47688
  BaseCongviecDinhkemComponent.prototype.settingIfIsFormView = function () {
47621
47689
  this.setting.hiddenCheckbox = this.formState == exports.FormState.VIEW;
@@ -47674,6 +47742,14 @@
47674
47742
  });
47675
47743
  });
47676
47744
  };
47745
+ BaseCongviecDinhkemComponent.prototype.afterReloaded = function () {
47746
+ return __awaiter(this, void 0, void 0, function () {
47747
+ return __generator(this, function (_a) {
47748
+ this.fileDataService.getData();
47749
+ return [2 /*return*/];
47750
+ });
47751
+ });
47752
+ };
47677
47753
  BaseCongviecDinhkemComponent.prototype.viewLinkItem = function (evt) {
47678
47754
  this.viewRawLink(evt);
47679
47755
  };
@@ -47846,7 +47922,7 @@
47846
47922
  BaseCongviecDinhkemComponent.decorators = [
47847
47923
  { type: i0.Component, args: [{
47848
47924
  selector: 'base-congviec-dinhkem',
47849
- template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" [hiddenCopyLink]=\"true\" (onReload)=\"_triggerProcessData($event)\"\r\n (onView)=\"viewLinkItem($event)\" (onDelete)=\"deleteLinkItem($event)\"\r\n (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\" [entity]=\"rowData.entity\"\r\n [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\" [fileDataService]=\"fileDataService\">\r\n </file-manager>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n",
47925
+ template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" [hiddenCopyLink]=\"true\" (onReload)=\"_triggerProcessData($event)\"\r\n (onView)=\"viewLinkItem($event)\" (onDelete)=\"deleteLinkItem($event)\"\r\n (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\" (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\" [entity]=\"rowData.entity\"\r\n [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>",
47850
47926
  providers: [ComponentContextService],
47851
47927
  styles: [""]
47852
47928
  },] }
@@ -47960,6 +48036,7 @@
47960
48036
  },
47961
48037
  ];
47962
48038
  _this.buttons = [];
48039
+ _this.mdWidthWorkflow = 6;
47963
48040
  _this.handleChangeLoaiCongViecWhenAdd = function (evt) { return __awaiter(_this, void 0, void 0, function () {
47964
48041
  return __generator(this, function (_a) {
47965
48042
  switch (_a.label) {
@@ -48012,15 +48089,6 @@
48012
48089
  label: 'Mô tả nội dung',
48013
48090
  mdWidth: 12
48014
48091
  }),
48015
- new DropdownControlSchema({
48016
- field: 'idLoaiCongViec',
48017
- label: 'Phân loại',
48018
- baseService: this._dmLoaiCongViecService,
48019
- isTree: true,
48020
- fieldTree: 'idParent',
48021
- valueParentRoot: null,
48022
- onChanged: onChangeLoaiCongViec
48023
- }),
48024
48092
  new DropdownControlSchema({
48025
48093
  field: 'idPriority',
48026
48094
  label: 'Độ ưu tiên',
@@ -48046,9 +48114,19 @@
48046
48114
  }),
48047
48115
  new PercentControlSchema({
48048
48116
  field: 'phanTram',
48049
- mdWidth: 12,
48117
+ mdWidth: 6,
48050
48118
  label: 'Tiến độ'
48051
48119
  }),
48120
+ new DropdownControlSchema({
48121
+ field: 'idLoaiCongViec',
48122
+ label: 'Phân loại công việc',
48123
+ baseService: this._dmLoaiCongViecService,
48124
+ isTree: true,
48125
+ fieldTree: 'idParent',
48126
+ valueParentRoot: null,
48127
+ sorts: [{ field: 'maPhanCap', dir: 1 }],
48128
+ onChanged: onChangeLoaiCongViec
48129
+ }),
48052
48130
  ];
48053
48131
  this.addSchemaBase();
48054
48132
  };
@@ -48307,7 +48385,8 @@
48307
48385
  this.setting.cols = [
48308
48386
  new ColumnSchemaBase({
48309
48387
  field: 'ten',
48310
- dataType: 'congViecInfo'
48388
+ dataType: 'congViecInfo',
48389
+ width: '18rem'
48311
48390
  }),
48312
48391
  new ColumnSchemaBase({
48313
48392
  field: 'ngayBatDau',
@@ -48319,7 +48398,7 @@
48319
48398
  }),
48320
48399
  new ColumnSchemaBase({
48321
48400
  field: 'idLoaiCongViec',
48322
- width: '10%',
48401
+ width: '100px',
48323
48402
  baseService: this._dmLoaiCongViecService,
48324
48403
  isTree: true,
48325
48404
  fieldTree: 'idParent',
@@ -48327,14 +48406,14 @@
48327
48406
  }),
48328
48407
  new ColumnSchemaBase({
48329
48408
  field: 'idLinhVuc',
48330
- width: '10%',
48409
+ width: '100px',
48331
48410
  baseService: this._dmLinhVucCongViecService
48332
48411
  }),
48333
48412
  new ColumnSchemaBase({
48334
48413
  field: 'idPriority',
48335
48414
  dataType: 'idPriority',
48336
48415
  dataTypeRefField: 'idPriority',
48337
- width: '10%',
48416
+ width: '80px',
48338
48417
  baseService: this._dmPriorityService,
48339
48418
  fieldPlus: 'background,color',
48340
48419
  funcSetValueRow: function (rowItem, data) {
@@ -48610,7 +48689,7 @@
48610
48689
  BaseCongViecComponent.decorators = [
48611
48690
  { type: i0.Component, args: [{
48612
48691
  selector: 'base-congviec',
48613
- template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n (onCopyLink)=\"_copyLink($event)\" (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\"\r\n (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n</crud-list>\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [loaiDanhSach]=\"loaiDanhSach\" [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
48692
+ template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n [showScrollHorizontal]=\"true\" (onCopyLink)=\"_copyLink($event)\" (onCopyLinkMultiple)=\"_copyLinkMultiple()\"\r\n (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\"\r\n (onDelete)=\"_delete($event)\" (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n</crud-list>\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [loaiDanhSach]=\"loaiDanhSach\" [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
48614
48693
  providers: [ComponentContextService],
48615
48694
  styles: [".container-task-info .percent-done{background-color:#f0f0f0;border-radius:2px;height:5px;margin-top:5px;overflow:hidden;position:relative}.container-task-info .percent-done .detail{background:#3eb839;border-radius:2px;font-size:13px;height:5px;left:0;position:absolute;text-align:center;top:0}.priority{text-align:center}.priority>span{border-radius:3px;font-size:.8em;padding:3px 7px}"]
48616
48695
  },] }
@@ -51270,7 +51349,7 @@
51270
51349
  ShareLinkByPermissionComponent.prototype.copyLinkToClipboard = function () {
51271
51350
  if (this.links) {
51272
51351
  this.copyToClipboard(this.links);
51273
- this._notifierService.showWarning('Copy link vào clipboard thành công');
51352
+ this._notifierService.showSuccess('Copy link vào clipboard thành công');
51274
51353
  }
51275
51354
  };
51276
51355
  return ShareLinkByPermissionComponent;