tnx-shared 5.3.192 → 5.3.194

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 (32) hide show
  1. package/bundles/tnx-shared.umd.js +309 -702
  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/form-schema.d.ts +1 -0
  6. package/classes/form-schema.d.ts.map +1 -1
  7. package/components/file-upload/file-upload.component.d.ts.map +1 -1
  8. package/esm2015/classes/form-schema.js +2 -1
  9. package/esm2015/components/dropdown/dropdown.component.js +2 -2
  10. package/esm2015/components/file-upload/file-upload.component.js +2 -2
  11. package/esm2015/models/file-type.js +2 -2
  12. package/esm2015/public-api.js +2 -2
  13. package/esm2015/tnx-shared.module.js +3 -3
  14. package/fesm2015/tnx-shared.js +234 -572
  15. package/fesm2015/tnx-shared.js.map +1 -1
  16. package/models/file-type.d.ts +1 -1
  17. package/models/file-type.d.ts.map +1 -1
  18. package/package.json +2 -2
  19. package/public-api.d.ts +0 -1
  20. package/public-api.d.ts.map +1 -1
  21. package/tnx-shared.metadata.json +1 -1
  22. package/tnx-shared.module.d.ts +1 -2
  23. package/tnx-shared.module.d.ts.map +1 -1
  24. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
  25. package/components/report-queue/base-job/job-item.d.ts +0 -44
  26. package/components/report-queue/base-job/job-item.d.ts.map +0 -1
  27. package/components/report-queue/report-queue.component.d.ts +0 -67
  28. package/components/report-queue/report-queue.component.d.ts.map +0 -1
  29. package/components/report-queue/report-queue.component.ngfactory.d.ts.map +0 -1
  30. package/components/report-queue/report-queue.component.scss.shim.ngstyle.d.ts.map +0 -1
  31. package/esm2015/components/report-queue/base-job/job-item.js +0 -54
  32. package/esm2015/components/report-queue/report-queue.component.js +0 -301
@@ -364,7 +364,7 @@ var FileExtensions;
364
364
  (function (FileExtensions) {
365
365
  FileExtensions["VIDEO"] = ".MP4,.MOV,.AVI,.FLV,.WMV";
366
366
  FileExtensions["IMAGE"] = ".JPG,.JPEG,.PNG,.TIF,.GIF";
367
- FileExtensions["DOC"] = ".DOC,.DOCX,.PDF,.XLS,.XLSX,.TXT,.CSV,.XML,.HTML";
367
+ FileExtensions["DOC"] = ".DOC,.DOCX,.PDF,.XLS,.XLSX,.TXT,.CSV,.XML,.HTML,.PPTX,.PPTM,.PPT";
368
368
  FileExtensions["AUDIO"] = ".MP3,.WAV,.M4A";
369
369
  FileExtensions["COMPRESSED"] = ".ZIP,.SITX,.RAR,.7Z,.GZ,.TAR";
370
370
  })(FileExtensions || (FileExtensions = {}));
@@ -1445,6 +1445,7 @@ class DropdownControlSchema extends DataSourceControlSchema {
1445
1445
  this.selectedItemsLabel = 'Đã chọn {0} mục';
1446
1446
  this.selectedAllItemLabel = 'Đã chọn tất cả';
1447
1447
  this.filterPlaceholder = 'Nhập tìm kiếm';
1448
+ this.serverLoadMessage = 'Dữ liệu sẽ được làm mới khi tìm kiếm';
1448
1449
  this.showClear = true;
1449
1450
  this.filter = true;
1450
1451
  this.multiple = false;
@@ -26768,7 +26769,7 @@ class FileUploadComponent extends ComponentBase {
26768
26769
  this.chooseLabel = 'Chọn';
26769
26770
  this.readonly = true;
26770
26771
  this.showDeleteFile = true;
26771
- this.accept = 'image/*,.xlsx,.xls,.pdf,.doc,.docx,.zip,.rar';
26772
+ this.accept = 'image/*,.xlsx,.xls,.pdf,.doc,.docx,.zip,.rar,.ppt, .pptx)';
26772
26773
  this.maxFileSize = 100000000; // Size in byte
26773
26774
  this.invalidFileSizeMessageSummary = '{0}: Quá dung lượng file cho phép, ';
26774
26775
  this.invalidFileSizeMessageDetail = 'dung lượng tối đa là {0}.';
@@ -28445,7 +28446,7 @@ class DropdownComponent extends ComponentBase {
28445
28446
  DropdownComponent.decorators = [
28446
28447
  { type: Component, args: [{
28447
28448
  selector: 'dropdown',
28448
- template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\"\n [class.server-load]=\"control.isServerLoad\">\n <span class=\"server-load-info\" pTooltip=\"D\u1EEF li\u1EC7u s\u1EBD \u0111\u01B0\u1EE3c l\u00E0m m\u1EDBi khi t\u00ECm ki\u1EBFm\" tooltipPosition=\"top\"></span>\n <p-dropdown *ngIf=\"!control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filterPlaceholder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [placeholder]=\"control.placeholder\"\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\n [disabled]=\"checkDisabled(control)\" [autoZIndex]=\"true\" [showClear]=\"control.showClear\"\n [showTransitionOptions]=\"showTransitionOptions\" [autoDisplayFirst]=\"control.autoDisplayFirst\"\n [virtualScroll]=\"control.virtualScroll\" itemSize=\"30\" [maxItemDisplay]=\"control.maxItemDisplay\"\n [autofocusSelectedItem]=\"autofocusSelectedItem\" [hideTransitionOptions]=\"hideTransitionOptions\"\n [modifyOptionsWhenFilter]=\"modifyOptionWhenFilter\" [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\"\n (onFocus)=\"handleFocus($event)\" (onBlur)=\"handleBlur($event)\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onShow)=\"onShowHandler($event)\" (onHide)=\"onHideHandler($event)\">\n <ng-template *ngIf=\"control.templateSelectedItem\" let-item pTemplate=\"selectedItem\">\n <ng-container\n *ngTemplateOutlet=\"control.templateSelectedItem; context: {$implicit: item, selectedValue: _value}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"control.templateItem\" let-item pTemplate=\"item\">\n <ng-container *ngTemplateOutlet=\"control.templateItem; context: {$implicit: item}\"></ng-container>\n </ng-template>\n </p-dropdown>\n <p-multiSelect *ngIf=\"control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filter]=\"control.filter\" [defaultLabel]=\"control.placeholder\" [placeholder]=\"control.placeholder\"\n [filterPlaceHolder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [panelStyleClass]=\"getPanelClass()\"\n [appendTo]=\"control.appendTo\" [styleClass]=\"'tn-dropdown'\"\n [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\" [disabled]=\"checkDisabled(control)\"\n [autoZIndex]=\"true\" [showTransitionOptions]=\"showTransitionOptions\"\n [hideTransitionOptions]=\"hideTransitionOptions\" [virtualScroll]=\"control.virtualScroll\"\n [maxItemDisplay]=\"control.maxItemDisplay\" [selectedItemsLabel]=\"control.selectedItemsLabel\"\n [maxSelectedLabels]=\"control.maxSelectedLabels\" [modifyOptionsWhenFilter]=\"modifyOptionWhenFilterMultiple\"\n [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onPanelShow)=\"onPanelShowHandler($event)\"\n (onPanelHide)=\"onHideHandler($event)\">\n <ng-template pTemplate=\"selectedItems\" let-value>\n <ng-container *ngIf=\"!value || value.length == 0\">{{control.placeholder}}</ng-container>\n <ng-container *ngIf=\"value && value.length > 0\">\n <span *ngFor=\"let selectedItem of value\" [class]=\"_itemSelectedStyleClass\">\n {{getItemSelectedLabel(selectedItem)}}<span class=\"remove-item\"\n (click)=\"removeItem($event, selectedItem)\"><i class=\"fas fa-times\"></i></span>\n </span>\n </ng-container>\n </ng-template>\n </p-multiSelect>\n <input #inputMask class=\"input-mask hide p-inputtext\" type=\"text\" [disabled]=\"loading\"\n [(ngModel)]=\"valueSearchServer\" (keyup)=\"keyUp.next($event)\" />\n <span #buttonSetting class=\"button-setting hide pi pi-cog\" (click)=\"showFormSetting()\"></span>\n <after-view-checked *ngIf=\"!loading\" (loaded)=\"handleLoaded()\"></after-view-checked>\n <button *ngIf=\"control.quickAdd && (control.cols || control.quickAddTemplate)\" type=\"button\" pButton\n icon=\"pi pi-plus\" class=\"p-button-text p-button-rounded button-quick-add\" pTooltip=\"Th\u00EAm nhanh\"\n tooltipPosition=\"top\" (click)=\"showFormQuickAdd()\"></button>\n</div>\n<tn-dialog *ngIf=\"quickAddDialogModel.showEditForm\" #dialog [header]=\"quickAddDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"quickAddDialogModel.showEditForm = false\">\n <quick-add-form *ngIf=\"control.cols\" #formBase [parentModel]=\"model\" [parentContext]=\"context\"\n [model]=\"quickAddDialogModel.data.formModel\" [control]=\"control\" [baseService]=\"control.baseService\"\n (onSaved)=\"handleSaved()\" (onCancel)=\"handleCancel()\">\n </quick-add-form>\n</tn-dialog>\n<tn-dialog *ngIf=\"settingDialogModel.showEditForm\" #dialog [header]=\"settingDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"settingDialogModel.showEditForm = false\">\n <dropdown-setting-form #formBase [model]=\"settingDialogModel.data.formModel\" (onSaved)=\"handleSavedSetting()\"\n (onCancel)=\"settingDialogModel.showEditForm = false\">\n </dropdown-setting-form>\n</tn-dialog>\n<ng-container *ngTemplateOutlet=\"control.quickAddTemplate; context: {\n handleSaved: handleSaved,\n handleCancel: handleCancel,\n dialogModel: quickAddDialogModel\n}\"></ng-container>",
28449
+ template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\"\n [class.server-load]=\"control.isServerLoad\">\n <span class=\"server-load-info\" [pTooltip]=\"control.serverLoadMessage\" tooltipPosition=\"top\"></span>\n <p-dropdown *ngIf=\"!control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filterPlaceholder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [placeholder]=\"control.placeholder\"\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\n [disabled]=\"checkDisabled(control)\" [autoZIndex]=\"true\" [showClear]=\"control.showClear\"\n [showTransitionOptions]=\"showTransitionOptions\" [autoDisplayFirst]=\"control.autoDisplayFirst\"\n [virtualScroll]=\"control.virtualScroll\" itemSize=\"30\" [maxItemDisplay]=\"control.maxItemDisplay\"\n [autofocusSelectedItem]=\"autofocusSelectedItem\" [hideTransitionOptions]=\"hideTransitionOptions\"\n [modifyOptionsWhenFilter]=\"modifyOptionWhenFilter\" [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\"\n (onFocus)=\"handleFocus($event)\" (onBlur)=\"handleBlur($event)\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onShow)=\"onShowHandler($event)\" (onHide)=\"onHideHandler($event)\">\n <ng-template *ngIf=\"control.templateSelectedItem\" let-item pTemplate=\"selectedItem\">\n <ng-container\n *ngTemplateOutlet=\"control.templateSelectedItem; context: {$implicit: item, selectedValue: _value}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"control.templateItem\" let-item pTemplate=\"item\">\n <ng-container *ngTemplateOutlet=\"control.templateItem; context: {$implicit: item}\"></ng-container>\n </ng-template>\n </p-dropdown>\n <p-multiSelect *ngIf=\"control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filter]=\"control.filter\" [defaultLabel]=\"control.placeholder\" [placeholder]=\"control.placeholder\"\n [filterPlaceHolder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [panelStyleClass]=\"getPanelClass()\"\n [appendTo]=\"control.appendTo\" [styleClass]=\"'tn-dropdown'\"\n [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\" [disabled]=\"checkDisabled(control)\"\n [autoZIndex]=\"true\" [showTransitionOptions]=\"showTransitionOptions\"\n [hideTransitionOptions]=\"hideTransitionOptions\" [virtualScroll]=\"control.virtualScroll\"\n [maxItemDisplay]=\"control.maxItemDisplay\" [selectedItemsLabel]=\"control.selectedItemsLabel\"\n [maxSelectedLabels]=\"control.maxSelectedLabels\" [modifyOptionsWhenFilter]=\"modifyOptionWhenFilterMultiple\"\n [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onPanelShow)=\"onPanelShowHandler($event)\"\n (onPanelHide)=\"onHideHandler($event)\">\n <ng-template pTemplate=\"selectedItems\" let-value>\n <ng-container *ngIf=\"!value || value.length == 0\">{{control.placeholder}}</ng-container>\n <ng-container *ngIf=\"value && value.length > 0\">\n <span *ngFor=\"let selectedItem of value\" [class]=\"_itemSelectedStyleClass\">\n {{getItemSelectedLabel(selectedItem)}}<span class=\"remove-item\"\n (click)=\"removeItem($event, selectedItem)\"><i class=\"fas fa-times\"></i></span>\n </span>\n </ng-container>\n </ng-template>\n </p-multiSelect>\n <input #inputMask class=\"input-mask hide p-inputtext\" type=\"text\" [disabled]=\"loading\"\n [(ngModel)]=\"valueSearchServer\" (keyup)=\"keyUp.next($event)\" />\n <span #buttonSetting class=\"button-setting hide pi pi-cog\" (click)=\"showFormSetting()\"></span>\n <after-view-checked *ngIf=\"!loading\" (loaded)=\"handleLoaded()\"></after-view-checked>\n <button *ngIf=\"control.quickAdd && (control.cols || control.quickAddTemplate)\" type=\"button\" pButton\n icon=\"pi pi-plus\" class=\"p-button-text p-button-rounded button-quick-add\" pTooltip=\"Th\u00EAm nhanh\"\n tooltipPosition=\"top\" (click)=\"showFormQuickAdd()\"></button>\n</div>\n<tn-dialog *ngIf=\"quickAddDialogModel.showEditForm\" #dialog [header]=\"quickAddDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"quickAddDialogModel.showEditForm = false\">\n <quick-add-form *ngIf=\"control.cols\" #formBase [parentModel]=\"model\" [parentContext]=\"context\"\n [model]=\"quickAddDialogModel.data.formModel\" [control]=\"control\" [baseService]=\"control.baseService\"\n (onSaved)=\"handleSaved()\" (onCancel)=\"handleCancel()\">\n </quick-add-form>\n</tn-dialog>\n<tn-dialog *ngIf=\"settingDialogModel.showEditForm\" #dialog [header]=\"settingDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"settingDialogModel.showEditForm = false\">\n <dropdown-setting-form #formBase [model]=\"settingDialogModel.data.formModel\" (onSaved)=\"handleSavedSetting()\"\n (onCancel)=\"settingDialogModel.showEditForm = false\">\n </dropdown-setting-form>\n</tn-dialog>\n<ng-container *ngTemplateOutlet=\"control.quickAddTemplate; context: {\n handleSaved: handleSaved,\n handleCancel: handleCancel,\n dialogModel: quickAddDialogModel\n}\"></ng-container>",
28449
28450
  providers: [ComponentContextService],
28450
28451
  styles: [".tn-dropdown{display:flex}.tn-dropdown p-dropdown,.tn-dropdown p-multiSelect{flex:1 1;width:100%}.tn-dropdown>.button-quick-add{flex:0 0 auto}.tn-dropdown .server-load-info{display:none}.tn-dropdown.server-load{position:relative}.tn-dropdown.server-load .server-load-info{display:block;position:absolute;top:0;left:0;width:6px;height:6px}.tn-dropdown.server-load .server-load-info:before{content:\"\";display:block;position:absolute;top:-6px;left:-6px;z-index:1;transform:rotate(45deg);border:6px solid transparent;border-right-color:green}.input-mask{position:absolute;z-index:1;width:100%;padding-left:12px;padding-right:32px;box-sizing:border-box;border:1px solid transparent;outline:none;background:transparent;border-radius:3px}.input-mask.hide{display:none}.input-mask:focus{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3}.button-setting{position:absolute;width:30px;height:30px;top:1px;right:1px;display:flex;align-items:center;justify-content:center;z-index:1;cursor:pointer;background:#fff;border-radius:3px}.button-setting.hide{display:none}.custom-select-item{display:inline-flex;align-items:center;background:#d2eefb;border-radius:3px;padding:3px 5px;margin:0 0 0 3px;border:1px solid #a9d8ff}.custom-select-item>span{font-size:12px;color:#555;margin-left:3px}.custom-select-item>span i{font-size:10px}.custom-select-item.min{padding:1px 5px;margin-left:2px}.custom-select-item:first-child{margin-left:0}::ng-deep .tn-dropdown.ui-state-disabled .custom-select-item{background:#e1e1e1;border-color:#d4d4d4}::ng-deep .tn-dropdown.ui-state-disabled .custom-select-item>span{display:none}::ng-deep .ui-multiselect-filter-container .input-mask{padding:.2em;height:22px;width:calc(100% - 2px);box-sizing:border-box;text-indent:1.5em;left:1px;top:1px}::ng-deep .ui-multiselect-filter-container .input-mask:focus{left:1px;width:calc(100% - 2px)}"]
28451
28452
  },] }
@@ -32911,573 +32912,6 @@ CommonLibComponent.propDecorators = {
32911
32912
  cancelButton: [{ type: ViewChild, args: ['cancelButton',] }]
32912
32913
  };
32913
32914
 
32914
- class HighPerformanceService {
32915
- constructor(_signalrService, _commonService, _httpClient, _moduleConfigService) {
32916
- this._signalrService = _signalrService;
32917
- this._commonService = _commonService;
32918
- this._httpClient = _httpClient;
32919
- this._moduleConfigService = _moduleConfigService;
32920
- }
32921
- createProcess(queueName, callBackOnMessage = null, data = null, returnSequenceNumber = false) {
32922
- const internalClientKey = this._commonService.guid();
32923
- const model = {
32924
- queueName,
32925
- data,
32926
- clientKey: internalClientKey
32927
- };
32928
- this._signalrService.start(null, internalClientKey, (data) => {
32929
- if (callBackOnMessage) {
32930
- callBackOnMessage(data);
32931
- }
32932
- this._signalrService.unSubscribeViewCode(null, internalClientKey);
32933
- });
32934
- return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
32935
- this.env = this._moduleConfigService.getConfig().environment;
32936
- const highPerformanceEndpoint = `${this.env.apiDomain.highPerformanceEndpoint}/HighPerformance/DoWork?returnSequenceNumber=${returnSequenceNumber}`;
32937
- try {
32938
- const rs = yield this._httpClient.post(highPerformanceEndpoint, model).toPromise();
32939
- if (rs.success) {
32940
- resolve(rs.data);
32941
- }
32942
- }
32943
- catch (_a) {
32944
- }
32945
- resolve(null);
32946
- }));
32947
- }
32948
- cancelProcess(queueName, uniqueKey) {
32949
- return __awaiter(this, void 0, void 0, function* () {
32950
- try {
32951
- const highPerformanceEndpoint = `${this.env.apiDomain.highPerformanceEndpoint}/HighPerformance/CancelWork?queueName=${queueName}&uniqueKey=${uniqueKey}`;
32952
- const rs = yield this._httpClient.post(highPerformanceEndpoint, {}).toPromise();
32953
- if (rs.success) {
32954
- return rs.data;
32955
- }
32956
- }
32957
- catch (_a) {
32958
- }
32959
- return false;
32960
- });
32961
- }
32962
- }
32963
- HighPerformanceService.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighPerformanceService_Factory() { return new HighPerformanceService(i0.ɵɵinject(SignalRService), i0.ɵɵinject(CommonService), i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(ModuleConfigService)); }, token: HighPerformanceService, providedIn: "root" });
32964
- HighPerformanceService.decorators = [
32965
- { type: Injectable, args: [{
32966
- providedIn: 'root'
32967
- },] }
32968
- ];
32969
- HighPerformanceService.ctorParameters = () => [
32970
- { type: SignalRService },
32971
- { type: CommonService },
32972
- { type: HttpClient },
32973
- { type: ModuleConfigService }
32974
- ];
32975
-
32976
- class TemplateService {
32977
- constructor(_moduleConfigService, _httpClient, _printService, _fileService, _notifierService, _crudService, _commonService) {
32978
- this._httpClient = _httpClient;
32979
- this._printService = _printService;
32980
- this._fileService = _fileService;
32981
- this._notifierService = _notifierService;
32982
- this._crudService = _crudService;
32983
- this._commonService = _commonService;
32984
- this._moduleConfig = _moduleConfigService.getConfig();
32985
- this.environment = this._moduleConfig.environment;
32986
- this.serviceUri = `${this.environment.apiDomain.templateEndpoint}/template`;
32987
- }
32988
- laTexToBase64Image(laTex, font = 54) {
32989
- const api = `${this.serviceUri}/LatexToBase64`;
32990
- return this._httpClient.post(api, { laTex, font }).toPromise();
32991
- }
32992
- /**
32993
- * Description: Xuất file sử dụng thư viện CX, xuất xong tự động mở popup để lưu file.
32994
- */
32995
- exportCxExcelByCode(model) {
32996
- const url = `${this.serviceUri}/ExportCxExcelByCode`;
32997
- this.setFileInfo(model);
32998
- return this._httpClient
32999
- .post(url, model, { responseType: 'blob' })
33000
- .toPromise()
33001
- .then(res => {
33002
- FileSaver.saveAs(res, this.getFullFileName(model.fileName || model.code));
33003
- }).catch((err) => __awaiter(this, void 0, void 0, function* () {
33004
- const errorText = yield err.error.text();
33005
- this._crudService.processErrorResponse(JSON.parse(errorText || ''));
33006
- }));
33007
- }
33008
- exportManyCxExcelByCode(model) {
33009
- const url = `${this.serviceUri}/ExportManyCxExcelByCode`;
33010
- this.setManyFileInfo(model);
33011
- return this._httpClient
33012
- .post(url, model)
33013
- .toPromise()
33014
- .then(res => {
33015
- if (res.success) {
33016
- this._fileService.downloadFolder(res.data.folderId);
33017
- }
33018
- else {
33019
- this._crudService.processErrorResponse(res);
33020
- }
33021
- }).catch((err) => __awaiter(this, void 0, void 0, function* () {
33022
- const errorText = yield err.error.text();
33023
- this._crudService.processErrorResponse(JSON.parse(errorText || ''));
33024
- }));
33025
- }
33026
- getFullFileName(fileName, extension = TemplateConstant.EXCEL_EXTENSION) {
33027
- return `${fileName}${extension}`;
33028
- }
33029
- /**
33030
- * Description: Export sử dung ClosedXml.Report (Cx) với signalR, sử dụng cho file dữ liệu lớn.
33031
- * Param: model chứa
33032
- * - code : code của template cấu hình bên Quản trị > Biểu mẫu > Biểu mẫu excel.
33033
- * - data : object chứa dữ liệu đã chuyền thành dạng json.
33034
- * - fileName: tên file sau khi export.
33035
- * - topic: guid dùng để subscribe.
33036
- */
33037
- ExportCxExcelByCodeWithSignalR(model) {
33038
- return __awaiter(this, void 0, void 0, function* () {
33039
- const url = `${this.serviceUri}/ExportCxExcelByCodeWithSignalR`;
33040
- return this._httpClient.post(url, model)
33041
- .toPromise();
33042
- });
33043
- }
33044
- /**
33045
- * Description: Export sử dung ClosedXml.Report (Cx) với HighPerformanceService, sử dụng cho file dữ liệu lớn.
33046
- * Param: model chứa
33047
- * - code : code của template cấu hình bên Quản trị > Biểu mẫu > Biểu mẫu excel.
33048
- * - data : object chứa dữ liệu đã chuyền thành dạng json.
33049
- * - fileName: tên file sau khi export.
33050
- * - queueName: queue của topic.
33051
- * - uniqueKey: unique key cho task.
33052
- */
33053
- ExportCxExcelByCodeWithHPS(model) {
33054
- return __awaiter(this, void 0, void 0, function* () {
33055
- const url = `${this.serviceUri}/ExportWithHighPerformanceService`;
33056
- return this._httpClient.post(url, model)
33057
- .toPromise();
33058
- });
33059
- }
33060
- exportCxExcelByCodePromise(model) {
33061
- return __awaiter(this, void 0, void 0, function* () {
33062
- const url = `${this.serviceUri}/ExportCxExcelByCode`;
33063
- return this._httpClient
33064
- .post(url, model, { responseType: 'blob' })
33065
- .toPromise();
33066
- });
33067
- }
33068
- fillTemplateByCodeAndGetPdf(templateCode, data, onLoadingDataPdf = null, onEndLoadingDataPdf = null) {
33069
- const url = `${this.serviceUri}/fillWordByTemplateCode/${templateCode}?isPrint=true`;
33070
- return this._httpClient
33071
- .post(url, data)
33072
- .toPromise().then(res => {
33073
- if (res.data) {
33074
- this._printService.printBase64Pdf(res.data, onLoadingDataPdf, onEndLoadingDataPdf);
33075
- }
33076
- });
33077
- }
33078
- fillWordByTemplateCodeMultiData(templateCode, data, onLoadingDataPdf = null, onEndLoadingDataPdf = null) {
33079
- const url = `${this.serviceUri}/fillWordByTemplateCodeMultiData/${templateCode}?isPrint=true`;
33080
- return this._httpClient
33081
- .post(url, data)
33082
- .toPromise().then(res => {
33083
- if (res.data) {
33084
- this._printService.printBase64Pdf(res.data, onLoadingDataPdf, onEndLoadingDataPdf);
33085
- }
33086
- });
33087
- }
33088
- setFileInfo(model) {
33089
- model.data = model.data ? model.data : JSON.stringify(model.dataObject);
33090
- delete model.dataObject;
33091
- }
33092
- setManyFileInfo(manyModel) {
33093
- let hasModel = manyModel && manyModel.lstFileInfo && manyModel.lstFileInfo.length;
33094
- if (!hasModel) {
33095
- return;
33096
- }
33097
- manyModel.lstFileInfo.forEach(fileInfo => {
33098
- this.setFileInfo(fileInfo);
33099
- fileInfo.fileName = `${fileInfo.fileName}_${this._commonService.guid()}.${TemplateConstant.EXCEL_EXTENSION}`;
33100
- });
33101
- }
33102
- /**
33103
- * Export dữ liệu không dùng template.
33104
- */
33105
- exportCxExcel(model) {
33106
- const url = `${this.serviceUri}/ExportCxExcel`;
33107
- return this._httpClient
33108
- .post(url, model, { responseType: 'blob' })
33109
- .toPromise()
33110
- .then(res => {
33111
- FileSaver.saveAs(res, this.getFullFileName(model.fileName || 'Export'));
33112
- }).catch((err) => __awaiter(this, void 0, void 0, function* () {
33113
- const errorText = yield err.error.text();
33114
- this._crudService.processErrorResponse(JSON.parse(errorText || ''));
33115
- }));
33116
- }
33117
- exportCxExcelPromise(model) {
33118
- return __awaiter(this, void 0, void 0, function* () {
33119
- const url = `${this.serviceUri}/ExportCxExcel`;
33120
- return this._httpClient
33121
- .post(url, model, { responseType: 'blob' })
33122
- .toPromise();
33123
- });
33124
- }
33125
- }
33126
- TemplateService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TemplateService_Factory() { return new TemplateService(i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(PrintService), i0.ɵɵinject(FileExplorerService), i0.ɵɵinject(NotifierService), i0.ɵɵinject(CrudService), i0.ɵɵinject(CommonService)); }, token: TemplateService, providedIn: "root" });
33127
- TemplateService.decorators = [
33128
- { type: Injectable, args: [{
33129
- providedIn: 'root'
33130
- },] }
33131
- ];
33132
- TemplateService.ctorParameters = () => [
33133
- { type: ModuleConfigService },
33134
- { type: HttpClient },
33135
- { type: PrintService },
33136
- { type: FileExplorerService },
33137
- { type: NotifierService },
33138
- { type: CrudService },
33139
- { type: CommonService }
33140
- ];
33141
-
33142
- class JobItem {
33143
- constructor(code, data, fileName = 'BaoCao', status = REPORT_QUEUE_CONSTANT.statuses.Waiting) {
33144
- // Loại export.
33145
- this._type = JobTypes.SingnalR;
33146
- this._code = code;
33147
- const datepipe = new DatePipe('en-US');
33148
- let formattedDate = datepipe.transform(new Date(), 'ddMMyyyy_hhmmss');
33149
- this._fileName = `${fileName}_${formattedDate}${TemplateConstant.EXCEL_EXTENSION}`;
33150
- this._data = data || {};
33151
- this._status = status;
33152
- }
33153
- }
33154
- class REPORT_QUEUE_CONSTANT {
33155
- }
33156
- REPORT_QUEUE_CONSTANT.statuses = {
33157
- Waiting: 1,
33158
- Exporting: 2,
33159
- Success: 3,
33160
- Error: 4,
33161
- Downloaded: 5
33162
- };
33163
- REPORT_QUEUE_CONSTANT.dicStatus = new SimpleDictionary([
33164
- new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Waiting, 'Chờ để xử lý'),
33165
- new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Exporting, 'Đang xử lý'),
33166
- new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Success, 'Tải xuống'),
33167
- new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Error, 'Xuất file chưa thành công'),
33168
- new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Downloaded, 'Đã tải'),
33169
- ]);
33170
- var JobTypes;
33171
- (function (JobTypes) {
33172
- JobTypes[JobTypes["Normal"] = 1] = "Normal";
33173
- JobTypes[JobTypes["SingnalR"] = 2] = "SingnalR";
33174
- JobTypes[JobTypes["Many"] = 3] = "Many"; // Export nhiều file cùng một lúc và nén vào file zip, mỗi file có thể là các loại biểu mẫu khác nhau.
33175
- })(JobTypes || (JobTypes = {}));
33176
- class ExportJob {
33177
- constructor(templateCode, // code template cấu hình bên quản trị
33178
- dataPromise, // promise dùng để lấy dữ liệu, trả về dạng ResponseResult
33179
- fileName, // tên của file được lưu
33180
- rootName = '', // tên thuộc tính của lst dữ liệu ngoài cùng
33181
- cb = null, // dùng để xử lý dữ liệu sau khi lấy xong
33182
- type = JobTypes.Normal // Loại export.
33183
- ) {
33184
- this.templateCode = templateCode;
33185
- this.dataPromise = dataPromise;
33186
- this.fileName = fileName;
33187
- this.rootName = rootName;
33188
- this.cb = cb;
33189
- this.type = type;
33190
- }
33191
- }
33192
-
33193
- class ReportQueueComponent {
33194
- constructor(_notifierService, _commonService, _fileService, _tempateService, _signalRService, _highPerformanceService, _crudService) {
33195
- this._notifierService = _notifierService;
33196
- this._commonService = _commonService;
33197
- this._fileService = _fileService;
33198
- this._tempateService = _tempateService;
33199
- this._signalRService = _signalRService;
33200
- this._highPerformanceService = _highPerformanceService;
33201
- this._crudService = _crudService;
33202
- this.name = 'reportQueue';
33203
- this.header = 'Xuất báo cáo';
33204
- this.autoDownload = false;
33205
- this.maxNameLength = 40;
33206
- this.expand = true;
33207
- this.queueName = 'REPORT_QUEUE';
33208
- this.hub = 'CommonHub';
33209
- this.dicStatus = REPORT_QUEUE_CONSTANT.dicStatus;
33210
- this.statuses = REPORT_QUEUE_CONSTANT.statuses;
33211
- this._queue = [];
33212
- this.maxHeight = 200;
33213
- this.itemHeight = 50;
33214
- this.popupHeight = this.itemHeight;
33215
- }
33216
- ngOnInit() {
33217
- if (this.parentDataModel && this.name) {
33218
- this.parentDataModel[this.name] = this;
33219
- }
33220
- }
33221
- toggleExpand() {
33222
- this.expand = !this.expand;
33223
- }
33224
- /**
33225
- * Thêm job vào để thực hiện
33226
- */
33227
- addJob(exportJob) {
33228
- return __awaiter(this, void 0, void 0, function* () {
33229
- var foundIndex = this._queue.findIndex(job => job._code == exportJob.templateCode && job._status == this.statuses.Exporting);
33230
- if (foundIndex !== -1) {
33231
- this._notifierService.showWarning("File cùng loại đang được xử lý, thử lại sau khi xử lý xong!");
33232
- return;
33233
- }
33234
- var job = new JobItem(exportJob.templateCode, {}, exportJob.fileName || exportJob.templateCode, this.statuses.Exporting);
33235
- this._queue.push(job);
33236
- this.updatePopupHeight();
33237
- setTimeout(() => {
33238
- this.scrollbar.scrollToBottom();
33239
- }, 100);
33240
- var rsData = yield exportJob.dataPromise;
33241
- if (rsData.data == null) {
33242
- job._status = this.statuses.Error;
33243
- return this._crudService.processErrorResponse(rsData);
33244
- }
33245
- if (exportJob.cb) {
33246
- job._data = exportJob.cb(rsData.data);
33247
- }
33248
- else if (exportJob.rootName) {
33249
- job._data[exportJob.rootName] = rsData.data;
33250
- }
33251
- else {
33252
- job._data = rsData.data;
33253
- }
33254
- switch (exportJob.type) {
33255
- case JobTypes.Normal:
33256
- this.Export(job);
33257
- break;
33258
- case JobTypes.SingnalR:
33259
- this.ExportWithSignalR(job);
33260
- break;
33261
- case JobTypes.Many:
33262
- break;
33263
- }
33264
- });
33265
- }
33266
- /**
33267
- * Thêm job vào để thực hiện
33268
- * - templateCode: code template cấu hình bên quản trị
33269
- * - data: dữ liệu export
33270
- * - fileName: tên của file được lưu
33271
- * - useSignalR: thay vì gọi request và chờ đến khi thực hiện xong
33272
- * trả về binaryFile thì tạo tiến trình riêng để export, và dùng signalR thông
33273
- * báo kết quả export, trả về fileId để tải.
33274
- */
33275
- addJobWithData(templateCode, data, fileName, useSignalR = false) {
33276
- return __awaiter(this, void 0, void 0, function* () {
33277
- var foundIndex = this._queue.findIndex(job => job._code == templateCode && job._status == this.statuses.Exporting);
33278
- if (foundIndex !== -1) {
33279
- this._notifierService.showWarning("File cùng loại đang được xử lý, thử lại sau khi xử lý xong!");
33280
- return;
33281
- }
33282
- var job = new JobItem(templateCode, data, fileName || templateCode, this.statuses.Exporting);
33283
- this._queue.push(job);
33284
- if (useSignalR) {
33285
- this.ExportWithSignalR(job);
33286
- }
33287
- else {
33288
- this.Export(job);
33289
- }
33290
- });
33291
- }
33292
- Export(job) {
33293
- return __awaiter(this, void 0, void 0, function* () {
33294
- this._tempateService.exportCxExcelByCodePromise({ code: job._code, data: JSON.stringify(job._data), fileName: job._fileName })
33295
- .then(file => {
33296
- job._status = this.statuses.Success;
33297
- job._binaryFile = file;
33298
- if (this.autoDownload) {
33299
- this.download(job);
33300
- }
33301
- }).catch((err) => __awaiter(this, void 0, void 0, function* () {
33302
- job._status = this.statuses.Error;
33303
- const errorText = yield err.error.text();
33304
- this._crudService.processErrorResponse(JSON.parse(errorText || ''));
33305
- }));
33306
- });
33307
- }
33308
- ExportWithSignalR(job) {
33309
- return __awaiter(this, void 0, void 0, function* () {
33310
- const topic = this._commonService.guid();
33311
- job._uniqueKey = topic;
33312
- this._signalRService.start(this.hub, topic, (message) => {
33313
- var rs = JSON.parse(message);
33314
- if (rs.success) {
33315
- job._status = this.statuses.Success;
33316
- job._fileId = rs.data;
33317
- if (this.autoDownload) {
33318
- this.download(job);
33319
- }
33320
- }
33321
- else {
33322
- job._status = this.statuses.Error;
33323
- this._crudService.processErrorResponse(rs);
33324
- }
33325
- });
33326
- this._tempateService.ExportCxExcelByCodeWithSignalR({ code: job._code, data: JSON.stringify(job._data), fileName: job._fileName, topic: topic })
33327
- .then(rs => {
33328
- if (!rs.success) {
33329
- job._status = this.statuses.Error;
33330
- this._crudService.processErrorResponse(rs);
33331
- }
33332
- }).catch((err) => __awaiter(this, void 0, void 0, function* () {
33333
- job._status = this.statuses.Error;
33334
- this._crudService.processErrorResponse(err.error);
33335
- }));
33336
- ;
33337
- });
33338
- }
33339
- ExportCxExcelByCodeWithHPS(job) {
33340
- return __awaiter(this, void 0, void 0, function* () {
33341
- this._highPerformanceService.createProcess(this.queueName, (arrMessage) => {
33342
- var message = arrMessage.pop();
33343
- var rs = JSON.parse(message);
33344
- if (rs.success) {
33345
- job._status = this.statuses.Success;
33346
- job._fileId = rs.data;
33347
- if (this.autoDownload) {
33348
- this._fileService.downloadFile(job._fileId);
33349
- job._status = this.statuses.Downloaded;
33350
- job._fileId = null;
33351
- }
33352
- }
33353
- else {
33354
- job._status = this.statuses.Error;
33355
- this._crudService.processErrorResponse(rs);
33356
- }
33357
- }).then(rs => {
33358
- job._uniqueKey = rs;
33359
- this._tempateService.ExportCxExcelByCodeWithHPS({
33360
- code: job._code,
33361
- data: JSON.stringify(job._data),
33362
- fileName: job._fileName,
33363
- topic: this.queueName,
33364
- uniqueKey: job._uniqueKey
33365
- }).then(rs => {
33366
- if (!rs.success) {
33367
- job._status = this.statuses.Error;
33368
- this._crudService.processErrorResponse(rs);
33369
- }
33370
- }, err => {
33371
- job._status = this.statuses.Error;
33372
- console.log("Lỗi gọi api server export");
33373
- });
33374
- }, err => {
33375
- job._status = this.statuses.Error;
33376
- console.log("Lỗi gọi HPS service :(");
33377
- });
33378
- });
33379
- }
33380
- download(job) {
33381
- if (job._status == this.statuses.Downloaded) {
33382
- return;
33383
- }
33384
- if (job._fileId) {
33385
- this._fileService.downloadFile(job._fileId, false, job._fileName);
33386
- }
33387
- else if (job._binaryFile) {
33388
- FileSaver.saveAs(job._binaryFile, job._fileName);
33389
- }
33390
- job._status = this.statuses.Downloaded;
33391
- job._binaryFile = null;
33392
- job._fileId = null;
33393
- }
33394
- showQueue() {
33395
- let show = this._queue && this._queue.length > 0;
33396
- return show;
33397
- }
33398
- getName(job) {
33399
- var name = job._fileName.length > this.maxNameLength ? `${job._fileName.substr(0, this.maxNameLength - 10)}[...]${TemplateConstant.EXCEL_EXTENSION}` : job._fileName;
33400
- return name;
33401
- }
33402
- cancelJob(job) {
33403
- let foundIndex = this._queue.findIndex(j => j._code == job._code);
33404
- if (foundIndex == -1) {
33405
- return;
33406
- }
33407
- let foundJob = this._queue[foundIndex];
33408
- if (foundJob._status == this.statuses.Exporting) {
33409
- this._notifierService
33410
- .showConfirm('File này đang được xử lý. Bạn có muốn dừng lại?', 'Hủy xuất file')
33411
- .then(rs => {
33412
- if (!rs) {
33413
- return;
33414
- }
33415
- let needUnsubscribe = foundJob._type == JobTypes.SingnalR && foundJob._uniqueKey;
33416
- if (needUnsubscribe) {
33417
- this._signalRService.unSubscribeViewCode(foundJob._uniqueKey, this.hub);
33418
- }
33419
- this._queue.splice(foundIndex, 1);
33420
- this.updatePopupHeight();
33421
- });
33422
- }
33423
- else if (foundJob._status != this.statuses.Exporting) {
33424
- this._queue.splice(foundIndex, 1);
33425
- this.updatePopupHeight();
33426
- }
33427
- }
33428
- close() {
33429
- var hasExporting = this._queue && this._queue.filter(item => item._status == this.statuses.Exporting).length > 0;
33430
- if (hasExporting) {
33431
- this._notifierService
33432
- .showConfirm('Có file đang được xử lý. Bạn có muốn dừng lại?', 'Hủy xuất file')
33433
- .then(rs => {
33434
- if (!rs) {
33435
- return;
33436
- }
33437
- let needUnsubscribe = false;
33438
- this._queue.forEach(job => {
33439
- needUnsubscribe = job._type == JobTypes.SingnalR && job._uniqueKey;
33440
- if (needUnsubscribe) {
33441
- this._signalRService.unSubscribeViewCode(job._uniqueKey, this.hub);
33442
- }
33443
- });
33444
- this._queue = [];
33445
- this.updatePopupHeight();
33446
- });
33447
- }
33448
- else {
33449
- this._queue = [];
33450
- }
33451
- }
33452
- updatePopupHeight() {
33453
- let height = (this._queue || []).length * this.itemHeight;
33454
- this.popupHeight = height > this.maxHeight ? this.maxHeight : height;
33455
- }
33456
- }
33457
- ReportQueueComponent.decorators = [
33458
- { type: Component, args: [{
33459
- selector: 'report-queue',
33460
- template: "<div class=\"rq-container\" *ngIf=\"showQueue()\">\n <div class=\"rq-header\">\n <div>{{header | translate}}</div>\n <div>\n\n <p-checkbox [(ngModel)]=\"autoDownload\" binary=\"true\" pTooltip=\"T\u1EF1 \u0111\u1ED9ng t\u1EA3i\" tooltipPosition=\"left\">\n </p-checkbox>\n\n <a href=\"javascript:;\" (click)=\"toggleExpand()\" pTooltip=\"{{expand ? 'Thu g\u1ECDn' : 'M\u1EDF r\u1ED9ng'}}\"\n tooltipPosition=\"left\">\n <i class=\"fas\" [ngClass]=\"{'fa-compress' : expand, 'fa-expand': !expand}\"></i>\n </a>\n\n <a href=\"javascript:;\" (click)=\"close()\" pTooltip=\"\u0110\u00F3ng\">\n <i class=\"fas fa-times\"></i>\n </a>\n </div>\n </div>\n <div class=\"rq-body\" *ngIf=\"expand\">\n <tn-custom-scrollbar [style]=\"{'height.px': popupHeight}\" #scrollbar>\n <div class=\"re-job\" *ngFor=\"let job of _queue\">\n <div class=\"re-job-title\">\n <div>{{getName(job)}}</div>\n <div>\n <a href=\"javascript:;\" (click)=\"cancelJob(job)\">\n <i class=\"fas fa-times\"></i>\n </a>\n </div>\n </div>\n <div class=\"re-job-result\"\n [ngClass]=\"{'job-success': job._status == statuses.Success, 'job-error': job._status == statuses.Error, 'job-exporting' : job._status == statuses.Exporting, 'job-downloaded': job._status == statuses.Downloaded}\">\n <span *ngIf=\"job._status != statuses.Success && job._status != statuses.Exporting\">\n {{dicStatus.get(job._status) | translate}}\n </span>\n\n <span *ngIf=\"job._status == statuses.Exporting\">\n <div class=\"loader\"></div>\n {{dicStatus.get(job._status) | translate}}\n </span>\n\n <a href=\"javascript:;\" (click)=\"download(job)\" class=\"job-success\"\n *ngIf=\"job._status == statuses.Success\">\n <i class=\"fas fa-download\"></i> {{dicStatus.get(job._status) | translate}}\n </a>\n </div>\n </div>\n </tn-custom-scrollbar>\n </div>\n</div>\n",
33461
- styles: ["::ng-deep .rq-container{width:350px;border:1px solid #3192e1;border-radius:3px;background-color:#fff}::ng-deep .rq-container .rq-header{background-color:#3192e1;padding:5px 10px;display:flex;border-radius:3px 3px 0 0;color:#fff;font-weight:400;font-size:15px}::ng-deep .rq-container .rq-header>div:first-child{flex-grow:1}::ng-deep .rq-container .rq-header>div:last-child>a{font-weight:200;margin-left:10px;color:#fff}::ng-deep .rq-container .rq-header>div:last-child>a>i{font-size:13px}::ng-deep .rq-container .rq-header>div:last-child .ui-chkbox-box{width:14px;height:14px;margin-top:-2px}::ng-deep .rq-container .rq-header>div:last-child .ui-chkbox-icon{font-size:13px;line-height:13px}::ng-deep .rq-container .rq-body .re-job{padding:6px 10px;display:flex;flex-direction:column}::ng-deep .rq-container .rq-body .re-job:first-child{padding-top:6px}::ng-deep .rq-container .rq-body .re-job .re-job-title{display:flex;font-size:13px}::ng-deep .rq-container .rq-body .re-job .re-job-title>div:first-child{flex-grow:1;padding-bottom:3px}::ng-deep .rq-container .rq-body .re-job .re-job-title>div a{color:#3192e1}::ng-deep .rq-container .rq-body .re-job .re-job-result{font-size:11px}::ng-deep .rq-container .rq-body .re-job .re-job-result>span{display:flex;align-items:center;height:20px}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-exporting{color:#3192e1}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-exporting>span>div{margin-right:5px}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-success{color:#1ab91a}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-success>a>i{margin-right:2px}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-error{color:#e95353}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-downloaded{color:#b2b2b2}::ng-deep .loader{border-radius:50%;border:2px solid #bcdbf5;border-top-color:#3192e1;width:12px;height:12px;animation:spin 1s linear infinite;display:inline-block}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}:host{position:absolute;bottom:1px;right:2px;z-index:1000}"]
33462
- },] }
33463
- ];
33464
- ReportQueueComponent.ctorParameters = () => [
33465
- { type: NotifierService },
33466
- { type: CommonService },
33467
- { type: FileExplorerService },
33468
- { type: TemplateService },
33469
- { type: SignalRService },
33470
- { type: HighPerformanceService },
33471
- { type: CrudService }
33472
- ];
33473
- ReportQueueComponent.propDecorators = {
33474
- parentDataModel: [{ type: Input }],
33475
- name: [{ type: Input }],
33476
- header: [{ type: Input }],
33477
- autoDownload: [{ type: Input }],
33478
- scrollbar: [{ type: ViewChild, args: ['scrollbar',] }]
33479
- };
33480
-
33481
32915
  class AfterViewCheckedComponent extends ComponentBase {
33482
32916
  constructor(injector, ref) {
33483
32917
  super(injector);
@@ -35611,6 +35045,68 @@ GuardService.ctorParameters = () => [
35611
35045
  { type: NotifierService }
35612
35046
  ];
35613
35047
 
35048
+ class HighPerformanceService {
35049
+ constructor(_signalrService, _commonService, _httpClient, _moduleConfigService) {
35050
+ this._signalrService = _signalrService;
35051
+ this._commonService = _commonService;
35052
+ this._httpClient = _httpClient;
35053
+ this._moduleConfigService = _moduleConfigService;
35054
+ }
35055
+ createProcess(queueName, callBackOnMessage = null, data = null, returnSequenceNumber = false) {
35056
+ const internalClientKey = this._commonService.guid();
35057
+ const model = {
35058
+ queueName,
35059
+ data,
35060
+ clientKey: internalClientKey
35061
+ };
35062
+ this._signalrService.start(null, internalClientKey, (data) => {
35063
+ if (callBackOnMessage) {
35064
+ callBackOnMessage(data);
35065
+ }
35066
+ this._signalrService.unSubscribeViewCode(null, internalClientKey);
35067
+ });
35068
+ return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
35069
+ this.env = this._moduleConfigService.getConfig().environment;
35070
+ const highPerformanceEndpoint = `${this.env.apiDomain.highPerformanceEndpoint}/HighPerformance/DoWork?returnSequenceNumber=${returnSequenceNumber}`;
35071
+ try {
35072
+ const rs = yield this._httpClient.post(highPerformanceEndpoint, model).toPromise();
35073
+ if (rs.success) {
35074
+ resolve(rs.data);
35075
+ }
35076
+ }
35077
+ catch (_a) {
35078
+ }
35079
+ resolve(null);
35080
+ }));
35081
+ }
35082
+ cancelProcess(queueName, uniqueKey) {
35083
+ return __awaiter(this, void 0, void 0, function* () {
35084
+ try {
35085
+ const highPerformanceEndpoint = `${this.env.apiDomain.highPerformanceEndpoint}/HighPerformance/CancelWork?queueName=${queueName}&uniqueKey=${uniqueKey}`;
35086
+ const rs = yield this._httpClient.post(highPerformanceEndpoint, {}).toPromise();
35087
+ if (rs.success) {
35088
+ return rs.data;
35089
+ }
35090
+ }
35091
+ catch (_a) {
35092
+ }
35093
+ return false;
35094
+ });
35095
+ }
35096
+ }
35097
+ HighPerformanceService.ɵprov = i0.ɵɵdefineInjectable({ factory: function HighPerformanceService_Factory() { return new HighPerformanceService(i0.ɵɵinject(SignalRService), i0.ɵɵinject(CommonService), i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(ModuleConfigService)); }, token: HighPerformanceService, providedIn: "root" });
35098
+ HighPerformanceService.decorators = [
35099
+ { type: Injectable, args: [{
35100
+ providedIn: 'root'
35101
+ },] }
35102
+ ];
35103
+ HighPerformanceService.ctorParameters = () => [
35104
+ { type: SignalRService },
35105
+ { type: CommonService },
35106
+ { type: HttpClient },
35107
+ { type: ModuleConfigService }
35108
+ ];
35109
+
35614
35110
  class ImageService {
35615
35111
  constructor(_moduleConfigService) {
35616
35112
  this._moduleConfigService = _moduleConfigService;
@@ -36167,6 +35663,172 @@ TemplateTextV4Service.ctorParameters = () => [
36167
35663
  { type: Injector }
36168
35664
  ];
36169
35665
 
35666
+ class TemplateService {
35667
+ constructor(_moduleConfigService, _httpClient, _printService, _fileService, _notifierService, _crudService, _commonService) {
35668
+ this._httpClient = _httpClient;
35669
+ this._printService = _printService;
35670
+ this._fileService = _fileService;
35671
+ this._notifierService = _notifierService;
35672
+ this._crudService = _crudService;
35673
+ this._commonService = _commonService;
35674
+ this._moduleConfig = _moduleConfigService.getConfig();
35675
+ this.environment = this._moduleConfig.environment;
35676
+ this.serviceUri = `${this.environment.apiDomain.templateEndpoint}/template`;
35677
+ }
35678
+ laTexToBase64Image(laTex, font = 54) {
35679
+ const api = `${this.serviceUri}/LatexToBase64`;
35680
+ return this._httpClient.post(api, { laTex, font }).toPromise();
35681
+ }
35682
+ /**
35683
+ * Description: Xuất file sử dụng thư viện CX, xuất xong tự động mở popup để lưu file.
35684
+ */
35685
+ exportCxExcelByCode(model) {
35686
+ const url = `${this.serviceUri}/ExportCxExcelByCode`;
35687
+ this.setFileInfo(model);
35688
+ return this._httpClient
35689
+ .post(url, model, { responseType: 'blob' })
35690
+ .toPromise()
35691
+ .then(res => {
35692
+ FileSaver.saveAs(res, this.getFullFileName(model.fileName || model.code));
35693
+ }).catch((err) => __awaiter(this, void 0, void 0, function* () {
35694
+ const errorText = yield err.error.text();
35695
+ this._crudService.processErrorResponse(JSON.parse(errorText || ''));
35696
+ }));
35697
+ }
35698
+ exportManyCxExcelByCode(model) {
35699
+ const url = `${this.serviceUri}/ExportManyCxExcelByCode`;
35700
+ this.setManyFileInfo(model);
35701
+ return this._httpClient
35702
+ .post(url, model)
35703
+ .toPromise()
35704
+ .then(res => {
35705
+ if (res.success) {
35706
+ this._fileService.downloadFolder(res.data.folderId);
35707
+ }
35708
+ else {
35709
+ this._crudService.processErrorResponse(res);
35710
+ }
35711
+ }).catch((err) => __awaiter(this, void 0, void 0, function* () {
35712
+ const errorText = yield err.error.text();
35713
+ this._crudService.processErrorResponse(JSON.parse(errorText || ''));
35714
+ }));
35715
+ }
35716
+ getFullFileName(fileName, extension = TemplateConstant.EXCEL_EXTENSION) {
35717
+ return `${fileName}${extension}`;
35718
+ }
35719
+ /**
35720
+ * Description: Export sử dung ClosedXml.Report (Cx) với signalR, sử dụng cho file dữ liệu lớn.
35721
+ * Param: model chứa
35722
+ * - code : code của template cấu hình bên Quản trị > Biểu mẫu > Biểu mẫu excel.
35723
+ * - data : object chứa dữ liệu đã chuyền thành dạng json.
35724
+ * - fileName: tên file sau khi export.
35725
+ * - topic: guid dùng để subscribe.
35726
+ */
35727
+ ExportCxExcelByCodeWithSignalR(model) {
35728
+ return __awaiter(this, void 0, void 0, function* () {
35729
+ const url = `${this.serviceUri}/ExportCxExcelByCodeWithSignalR`;
35730
+ return this._httpClient.post(url, model)
35731
+ .toPromise();
35732
+ });
35733
+ }
35734
+ /**
35735
+ * Description: Export sử dung ClosedXml.Report (Cx) với HighPerformanceService, sử dụng cho file dữ liệu lớn.
35736
+ * Param: model chứa
35737
+ * - code : code của template cấu hình bên Quản trị > Biểu mẫu > Biểu mẫu excel.
35738
+ * - data : object chứa dữ liệu đã chuyền thành dạng json.
35739
+ * - fileName: tên file sau khi export.
35740
+ * - queueName: queue của topic.
35741
+ * - uniqueKey: unique key cho task.
35742
+ */
35743
+ ExportCxExcelByCodeWithHPS(model) {
35744
+ return __awaiter(this, void 0, void 0, function* () {
35745
+ const url = `${this.serviceUri}/ExportWithHighPerformanceService`;
35746
+ return this._httpClient.post(url, model)
35747
+ .toPromise();
35748
+ });
35749
+ }
35750
+ exportCxExcelByCodePromise(model) {
35751
+ return __awaiter(this, void 0, void 0, function* () {
35752
+ const url = `${this.serviceUri}/ExportCxExcelByCode`;
35753
+ return this._httpClient
35754
+ .post(url, model, { responseType: 'blob' })
35755
+ .toPromise();
35756
+ });
35757
+ }
35758
+ fillTemplateByCodeAndGetPdf(templateCode, data, onLoadingDataPdf = null, onEndLoadingDataPdf = null) {
35759
+ const url = `${this.serviceUri}/fillWordByTemplateCode/${templateCode}?isPrint=true`;
35760
+ return this._httpClient
35761
+ .post(url, data)
35762
+ .toPromise().then(res => {
35763
+ if (res.data) {
35764
+ this._printService.printBase64Pdf(res.data, onLoadingDataPdf, onEndLoadingDataPdf);
35765
+ }
35766
+ });
35767
+ }
35768
+ fillWordByTemplateCodeMultiData(templateCode, data, onLoadingDataPdf = null, onEndLoadingDataPdf = null) {
35769
+ const url = `${this.serviceUri}/fillWordByTemplateCodeMultiData/${templateCode}?isPrint=true`;
35770
+ return this._httpClient
35771
+ .post(url, data)
35772
+ .toPromise().then(res => {
35773
+ if (res.data) {
35774
+ this._printService.printBase64Pdf(res.data, onLoadingDataPdf, onEndLoadingDataPdf);
35775
+ }
35776
+ });
35777
+ }
35778
+ setFileInfo(model) {
35779
+ model.data = model.data ? model.data : JSON.stringify(model.dataObject);
35780
+ delete model.dataObject;
35781
+ }
35782
+ setManyFileInfo(manyModel) {
35783
+ let hasModel = manyModel && manyModel.lstFileInfo && manyModel.lstFileInfo.length;
35784
+ if (!hasModel) {
35785
+ return;
35786
+ }
35787
+ manyModel.lstFileInfo.forEach(fileInfo => {
35788
+ this.setFileInfo(fileInfo);
35789
+ fileInfo.fileName = `${fileInfo.fileName}_${this._commonService.guid()}.${TemplateConstant.EXCEL_EXTENSION}`;
35790
+ });
35791
+ }
35792
+ /**
35793
+ * Export dữ liệu không dùng template.
35794
+ */
35795
+ exportCxExcel(model) {
35796
+ const url = `${this.serviceUri}/ExportCxExcel`;
35797
+ return this._httpClient
35798
+ .post(url, model, { responseType: 'blob' })
35799
+ .toPromise()
35800
+ .then(res => {
35801
+ FileSaver.saveAs(res, this.getFullFileName(model.fileName || 'Export'));
35802
+ }).catch((err) => __awaiter(this, void 0, void 0, function* () {
35803
+ const errorText = yield err.error.text();
35804
+ this._crudService.processErrorResponse(JSON.parse(errorText || ''));
35805
+ }));
35806
+ }
35807
+ exportCxExcelPromise(model) {
35808
+ return __awaiter(this, void 0, void 0, function* () {
35809
+ const url = `${this.serviceUri}/ExportCxExcel`;
35810
+ return this._httpClient
35811
+ .post(url, model, { responseType: 'blob' })
35812
+ .toPromise();
35813
+ });
35814
+ }
35815
+ }
35816
+ TemplateService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TemplateService_Factory() { return new TemplateService(i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(PrintService), i0.ɵɵinject(FileExplorerService), i0.ɵɵinject(NotifierService), i0.ɵɵinject(CrudService), i0.ɵɵinject(CommonService)); }, token: TemplateService, providedIn: "root" });
35817
+ TemplateService.decorators = [
35818
+ { type: Injectable, args: [{
35819
+ providedIn: 'root'
35820
+ },] }
35821
+ ];
35822
+ TemplateService.ctorParameters = () => [
35823
+ { type: ModuleConfigService },
35824
+ { type: HttpClient },
35825
+ { type: PrintService },
35826
+ { type: FileExplorerService },
35827
+ { type: NotifierService },
35828
+ { type: CrudService },
35829
+ { type: CommonService }
35830
+ ];
35831
+
36170
35832
  class UniqueNumberService {
36171
35833
  constructor(_http, _moduleConfigService) {
36172
35834
  this._http = _http;
@@ -47064,7 +46726,7 @@ function coreDeclaration() {
47064
46726
  VanbanDiPickerComponent,
47065
46727
  VanbanDenPickerComponent,
47066
46728
  CongViecPickerComponent,
47067
- ReportQueueComponent,
46729
+ // ReportQueueComponent,
47068
46730
  SettingsComponent,
47069
46731
  SettingsRowComponent,
47070
46732
  ShareLinkByPermissionComponent,
@@ -47318,5 +46980,5 @@ class Pair {
47318
46980
  * Generated bundle index. Do not edit.
47319
46981
  */
47320
46982
 
47321
- export { AccessDeniedComponent, Action, ActionChoYKienBase, ActionThuHoiBase, ActionUpdateModel, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AfterViewCheckedComponent, AnnouncementReadsService, AnnouncementsService, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonAction, ButtonControlSchema, ButtonPermission, ButtonPermissions, ButtonTextActionCongViec, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CanBo_HoSo_CoCauToChucService, CauHinhWorkflowService, CccdValidator, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ChipsControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucNewService, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucPickerControlSchemaNew, CoCauToChucService, CodeValidator, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonDashboardComponent, CommonErrorCode, CommonLibComponent, CommonSearchFormComponent, CommonService, CompareValidator, ComponentBase, ComponentBaseWithButton, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, CustomizeUiModel, CustomizeUiService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourceGioiTinh, DataSourcePermissionBase, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmChucVuService, DmLoaiCongViecService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DummyWorkflowCode, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowHistoryService, EntityWorkflowType, EnumActionType, EnumAppSwitcherCode, EnumCanBo, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumGioiTinh, EnumHocHamHocVi, EnumLoaiVanBanBase$1 as EnumLoaiVanBanBase, EnumPermissionType, EnumProcessWorkflowType, EnumProperties, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumUserSource, EnumWFNhomTrangThai, EnumWorkflowCheckboxOption, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, EventType, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, ExtensionsConst, FILE_TYPES, FederationService, FieldCheckboxCrudList, FieldColExpandCrudList, FieldColReorderCrudList, FieldDefineHasTask, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FieldFunctionCrudList, FieldIndexInDataSource, FieldOrderCrudList, FieldRowSpan, FieldWorkflowCodeInCrudForm, FileDataService, FileExplorerService, FileExtensions, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileManagerSetting, FileObjectService, FilePickerDialogComponent, FilePickerSetting, FileType, FileTypeFlag, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileUploadSetting, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardChildService, GenericGuardService, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HoSoDoiTacService, HtmlFormatPipe, HttpOptions, ImageService, ImageUploaderControlSchema, Include, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyFunctionReload, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, MaActionBatDauQuyTrinh, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MenuSource, MergeConfigModel, MethodResult, ModelKySoDonVi, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NameValidator, NotificationObjectType, NotificationService, NotifierService, NotifierType, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, PassportValidator, PasswordValidator, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionName, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhanQuyenModel, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RELOAD_FILE_LIST, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, ReferenceTextControlSchema, RegexSplitFieldByItem, ReponseResult, ReportQueueComponent, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, ScalarValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, ServiceRequestModel, ServiceRequestModelV5, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateMachinesService, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringCompareOption, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TabViewData, TableSchema, TagSeparator, TaiLieuComponent, TaxCodeValidator, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnMenu, TnMenuItem, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnTreeTableToggler, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TreeListBase, TreeNode, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserGroupRealService, UserGroupService, UserOnlineDetailsService, UserPickerControlSchema, UserPickerDialogComponent, UserPublicInfo, UserService, UserType, UserV5Service, Validation, ValueType, VanBanPickerControlSchema, ViewContainerRefDirective, VirtualBaseService, WfAction, WfItem, WfMachine, WfSchema, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowService, WorkflowSetting, WorkflowSettingNew, WorkflowSettingsService, WorkflowTargetDefaultValue, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, dataSourceIcon, dateDiff, fileTypeSource, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, isValidTime, keyUserSurveyLocal, loadRemoteModule, loadRemotePageModule, mapProperty, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, monthDiff, multipleSort, romanize, ɵ0$2 as ɵ0, ɵ1$1 as ɵ1, ɵ2$1 as ɵ2, ɵ3, ɵ4, LoggerService as ɵa, DropdownService as ɵb, ImageUploaderComponent as ɵba, CheckBoxListComponent as ɵbb, CoCauToChucPickerListComponent as ɵbc, CoCauToChucPickerListNewComponent as ɵbd, FormBuilderComponent as ɵbe, DatetimePickerComponent as ɵbf, DatetimePickerRangeComponent as ɵbg, EntityPickerBoxComponent as ɵbh, EntityPickerDataComponent as ɵbi, EntityPickerSelectedComponent as ɵbj, EntityPickerComponent as ɵbk, EntityPickerSearchFormComponent as ɵbl, EntityPickerDialogComponent as ɵbm, EntityPickerTreeDataComponent as ɵbn, EntityPickerTreeSelectedComponent as ɵbo, EntityPermissionComponent as ɵbp, EquationEditorComponent as ɵbq, MaskComponent as ɵbr, NumberPickerRangeComponent as ɵbs, PagingNextBackOnlyComponent as ɵbt, RadioButtonListComponent as ɵbu, VanBanPickerComponent as ɵbv, VanBanDenService as ɵbw, VanBanDiService as ɵbx, VanBanPickerDialogComponent as ɵby, VanbanDiPickerComponent as ɵbz, EntityPickerService as ɵc, VanbanDenPickerComponent as ɵca, CongViecPickerComponent as ɵcb, SettingsComponent as ɵcc, SettingsRowComponent as ɵcd, ShareLinkByPermissionComponent as ɵce, TnCheckboxComponent as ɵcf, TnDialogComponent as ɵcg, TnColorPickerComponent as ɵch, TnTinymceComponent as ɵci, TnTabViewComponent as ɵcj, TableDetailFormComponent as ɵck, FileIconPipe as ɵcl, FileSizePipe as ɵcm, QuickAddFormComponent as ɵcn, PreventShiftTabDirective as ɵco, TnTemplateDirective as ɵcp, UserPickerComponent as ɵcq, UserPickerBoxComponent as ɵcr, CoCauToChucTestService as ɵcs, TnAppHelpComponent as ɵct, PathNameService as ɵcu, HelperCurrentPageComponent as ɵcv, TnAppNotificationListComponent as ɵcw, TnAppNotificationComponent as ɵcx, FolderFormComponent as ɵcy, FileFormComponent as ɵcz, ExceptionHandlerService as ɵd, FileViewerComponent as ɵda, FileVersionListComponent as ɵdb, ViewDetailComponent as ɵdc, ReferenceTextBoxComponent as ɵdd, QrCodeGeneratorComponent as ɵde, AddNewsComponent as ɵdf, ArticleService as ɵdg, NewsCategoryService as ɵdh, UniversalLinkProcessorComponent as ɵdi, SignatureDetailComponent as ɵdj, KySoSimDanhSachChuKyComponent as ɵdk, KySoSimChuKyUserService as ɵdl, FileKySoSimComponent as ɵdm, KySoSimSignPDFService as ɵdn, TaiLieuCuaToiComponent as ɵdo, KhaiThacTaiLieuDungChungComponent as ɵdp, DanhMucDungChungService as ɵdq, TnTemplateComponent as ɵdr, DropdownSettingFormComponent as ɵds, CheckReadyComponent as ɵdt, TnAccordionTabComponent as ɵdu, SettingsWorkflowComponent as ɵdv, SettingAuthorizeButtonComponent as ɵdw, BasePermissionService as ɵdx, SettingsWorkflowNo1Component as ɵdy, ListBase as ɵe, ListComponentBase as ɵf, TreeTableComponent as ɵg, NotFoundComponent as ɵh, SendAccessTokenInterceptor as ɵi, LogInterceptor as ɵj, PermissionUtilsInterceptor as ɵk, TraceInterceptor as ɵl, EntityPermissionService as ɵm, ChatService as ɵn, MyDriveService as ɵo, ContentsService as ɵp, StatusExtendsService as ɵq, MessageBoardService as ɵr, FileExplorerNewService as ɵs, FileVersionService as ɵt, FileManagerService as ɵu, DM_ChucVuService as ɵv, RoleService as ɵw, AddressComponent as ɵx, AdvanceSearchComponent as ɵy, AutoCompletePickerComponent as ɵz };
46983
+ export { AccessDeniedComponent, Action, ActionChoYKienBase, ActionThuHoiBase, ActionUpdateModel, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AfterViewCheckedComponent, AnnouncementReadsService, AnnouncementsService, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonAction, ButtonControlSchema, ButtonPermission, ButtonPermissions, ButtonTextActionCongViec, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CanBo_HoSo_CoCauToChucService, CauHinhWorkflowService, CccdValidator, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ChipsControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucNewService, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucPickerControlSchemaNew, CoCauToChucService, CodeValidator, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonDashboardComponent, CommonErrorCode, CommonLibComponent, CommonSearchFormComponent, CommonService, CompareValidator, ComponentBase, ComponentBaseWithButton, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, CustomizeUiModel, CustomizeUiService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourceGioiTinh, DataSourcePermissionBase, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmChucVuService, DmLoaiCongViecService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DummyWorkflowCode, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowHistoryService, EntityWorkflowType, EnumActionType, EnumAppSwitcherCode, EnumCanBo, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumGioiTinh, EnumHocHamHocVi, EnumLoaiVanBanBase$1 as EnumLoaiVanBanBase, EnumPermissionType, EnumProcessWorkflowType, EnumProperties, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumUserSource, EnumWFNhomTrangThai, EnumWorkflowCheckboxOption, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, EventType, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, ExtensionsConst, FILE_TYPES, FederationService, FieldCheckboxCrudList, FieldColExpandCrudList, FieldColReorderCrudList, FieldDefineHasTask, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FieldFunctionCrudList, FieldIndexInDataSource, FieldOrderCrudList, FieldRowSpan, FieldWorkflowCodeInCrudForm, FileDataService, FileExplorerService, FileExtensions, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileManagerSetting, FileObjectService, FilePickerDialogComponent, FilePickerSetting, FileType, FileTypeFlag, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileUploadSetting, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardChildService, GenericGuardService, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HoSoDoiTacService, HtmlFormatPipe, HttpOptions, ImageService, ImageUploaderControlSchema, Include, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyFunctionReload, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, MaActionBatDauQuyTrinh, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MenuSource, MergeConfigModel, MethodResult, ModelKySoDonVi, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NameValidator, NotificationObjectType, NotificationService, NotifierService, NotifierType, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, PassportValidator, PasswordValidator, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionName, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhanQuyenModel, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RELOAD_FILE_LIST, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, ReferenceTextControlSchema, RegexSplitFieldByItem, ReponseResult, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, ScalarValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, ServiceRequestModel, ServiceRequestModelV5, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateMachinesService, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringCompareOption, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TabViewData, TableSchema, TagSeparator, TaiLieuComponent, TaxCodeValidator, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnMenu, TnMenuItem, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnTreeTableToggler, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TreeListBase, TreeNode, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserGroupRealService, UserGroupService, UserOnlineDetailsService, UserPickerControlSchema, UserPickerDialogComponent, UserPublicInfo, UserService, UserType, UserV5Service, Validation, ValueType, VanBanPickerControlSchema, ViewContainerRefDirective, VirtualBaseService, WfAction, WfItem, WfMachine, WfSchema, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowService, WorkflowSetting, WorkflowSettingNew, WorkflowSettingsService, WorkflowTargetDefaultValue, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, dataSourceIcon, dateDiff, fileTypeSource, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, isValidTime, keyUserSurveyLocal, loadRemoteModule, loadRemotePageModule, mapProperty, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, monthDiff, multipleSort, romanize, ɵ0$2 as ɵ0, ɵ1$1 as ɵ1, ɵ2$1 as ɵ2, ɵ3, ɵ4, LoggerService as ɵa, DropdownService as ɵb, ImageUploaderComponent as ɵba, CheckBoxListComponent as ɵbb, CoCauToChucPickerListComponent as ɵbc, CoCauToChucPickerListNewComponent as ɵbd, FormBuilderComponent as ɵbe, DatetimePickerComponent as ɵbf, DatetimePickerRangeComponent as ɵbg, EntityPickerBoxComponent as ɵbh, EntityPickerDataComponent as ɵbi, EntityPickerSelectedComponent as ɵbj, EntityPickerComponent as ɵbk, EntityPickerSearchFormComponent as ɵbl, EntityPickerDialogComponent as ɵbm, EntityPickerTreeDataComponent as ɵbn, EntityPickerTreeSelectedComponent as ɵbo, EntityPermissionComponent as ɵbp, EquationEditorComponent as ɵbq, MaskComponent as ɵbr, NumberPickerRangeComponent as ɵbs, PagingNextBackOnlyComponent as ɵbt, RadioButtonListComponent as ɵbu, VanBanPickerComponent as ɵbv, VanBanDenService as ɵbw, VanBanDiService as ɵbx, VanBanPickerDialogComponent as ɵby, VanbanDiPickerComponent as ɵbz, EntityPickerService as ɵc, VanbanDenPickerComponent as ɵca, CongViecPickerComponent as ɵcb, SettingsComponent as ɵcc, SettingsRowComponent as ɵcd, ShareLinkByPermissionComponent as ɵce, TnCheckboxComponent as ɵcf, TnDialogComponent as ɵcg, TnColorPickerComponent as ɵch, TnTinymceComponent as ɵci, TnTabViewComponent as ɵcj, TableDetailFormComponent as ɵck, FileIconPipe as ɵcl, FileSizePipe as ɵcm, QuickAddFormComponent as ɵcn, PreventShiftTabDirective as ɵco, TnTemplateDirective as ɵcp, UserPickerComponent as ɵcq, UserPickerBoxComponent as ɵcr, CoCauToChucTestService as ɵcs, TnAppHelpComponent as ɵct, PathNameService as ɵcu, HelperCurrentPageComponent as ɵcv, TnAppNotificationListComponent as ɵcw, TnAppNotificationComponent as ɵcx, FolderFormComponent as ɵcy, FileFormComponent as ɵcz, ExceptionHandlerService as ɵd, FileViewerComponent as ɵda, FileVersionListComponent as ɵdb, ViewDetailComponent as ɵdc, ReferenceTextBoxComponent as ɵdd, QrCodeGeneratorComponent as ɵde, AddNewsComponent as ɵdf, ArticleService as ɵdg, NewsCategoryService as ɵdh, UniversalLinkProcessorComponent as ɵdi, SignatureDetailComponent as ɵdj, KySoSimDanhSachChuKyComponent as ɵdk, KySoSimChuKyUserService as ɵdl, FileKySoSimComponent as ɵdm, KySoSimSignPDFService as ɵdn, TaiLieuCuaToiComponent as ɵdo, KhaiThacTaiLieuDungChungComponent as ɵdp, DanhMucDungChungService as ɵdq, TnTemplateComponent as ɵdr, DropdownSettingFormComponent as ɵds, CheckReadyComponent as ɵdt, TnAccordionTabComponent as ɵdu, SettingsWorkflowComponent as ɵdv, SettingAuthorizeButtonComponent as ɵdw, BasePermissionService as ɵdx, SettingsWorkflowNo1Component as ɵdy, ListBase as ɵe, ListComponentBase as ɵf, TreeTableComponent as ɵg, NotFoundComponent as ɵh, SendAccessTokenInterceptor as ɵi, LogInterceptor as ɵj, PermissionUtilsInterceptor as ɵk, TraceInterceptor as ɵl, EntityPermissionService as ɵm, ChatService as ɵn, MyDriveService as ɵo, ContentsService as ɵp, StatusExtendsService as ɵq, MessageBoardService as ɵr, FileExplorerNewService as ɵs, FileVersionService as ɵt, FileManagerService as ɵu, DM_ChucVuService as ɵv, RoleService as ɵw, AddressComponent as ɵx, AdvanceSearchComponent as ɵy, AutoCompletePickerComponent as ɵz };
47322
46984
  //# sourceMappingURL=tnx-shared.js.map