tnx-shared 5.1.181 → 5.1.185

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 (40) hide show
  1. package/bundles/tnx-shared.umd.js +1277 -1193
  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-list-base.d.ts.map +1 -1
  6. package/classes/public-function.d.ts +6 -0
  7. package/classes/public-function.d.ts.map +1 -1
  8. package/components/statemachines/models/enums.d.ts +4 -0
  9. package/components/statemachines/models/enums.d.ts.map +1 -1
  10. package/components/tn-app-notification/tn-app-notification.component.d.ts +2 -2
  11. package/components/tn-app-notification/tn-app-notification.component.d.ts.map +1 -1
  12. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts.map +1 -1
  13. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts.map +1 -1
  14. package/congviec/dm-loai-congviec/dm-loai-congviec.component.d.ts +2 -0
  15. package/congviec/dm-loai-congviec/dm-loai-congviec.component.d.ts.map +1 -1
  16. package/esm2015/classes/base/data-list-base.js +4 -1
  17. package/esm2015/classes/public-function.js +7 -1
  18. package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
  19. package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
  20. package/esm2015/components/statemachines/models/enums.js +6 -1
  21. package/esm2015/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.js +3 -3
  22. package/esm2015/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.js +3 -3
  23. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +38 -34
  24. package/esm2015/components/workflow/process-workflow-form/process-workflow-form.component.js +6 -4
  25. package/esm2015/components/workflow/process-workflow-target/process-workflow-target.component.js +10 -4
  26. package/esm2015/congviec/dm-loai-congviec/dm-loai-congviec.component.js +8 -3
  27. package/esm2015/intercepters/anonymous-token.interceptor.js +43 -0
  28. package/esm2015/tnx-shared.js +2 -1
  29. package/esm2015/tnx-shared.module.js +32 -32
  30. package/fesm2015/tnx-shared.js +824 -759
  31. package/fesm2015/tnx-shared.js.map +1 -1
  32. package/intercepters/anonymous-token.interceptor.d.ts +13 -0
  33. package/intercepters/anonymous-token.interceptor.d.ts.map +1 -0
  34. package/intercepters/anonymous-token.interceptor.ngfactory.d.ts.map +1 -0
  35. package/package.json +2 -2
  36. package/tnx-shared.d.ts +1 -0
  37. package/tnx-shared.d.ts.map +1 -1
  38. package/tnx-shared.metadata.json +1 -1
  39. package/tnx-shared.module.d.ts +5 -5
  40. package/tnx-shared.module.d.ts.map +1 -1
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@ngx-translate/core'), require('angular-split'), require('ng2-currency-mask'), require('ngx-device-detector'), require('ngx-extended-pdf-viewer'), require('ngx-img-fallback'), require('ngx-mask'), require('ngx-perfect-scrollbar'), require('tn-custom-primeng/autocomplete'), require('tn-custom-primeng/blockui'), require('tn-custom-primeng/breadcrumb'), require('tn-custom-primeng/button'), require('tn-custom-primeng/calendar'), require('tn-custom-primeng/card'), require('tn-custom-primeng/chart'), require('tn-custom-primeng/checkbox'), require('tn-custom-primeng/chips'), require('tn-custom-primeng/colorpicker'), require('tn-custom-primeng/confirmdialog'), require('tn-custom-primeng/contextmenu'), require('tn-custom-primeng/dataview'), require('tn-custom-primeng/dialog'), require('tn-custom-primeng/dropdown'), require('tn-custom-primeng/fieldset'), require('tn-custom-primeng/fileupload'), require('tn-custom-primeng/focustrap'), require('tn-custom-primeng/inputmask'), require('tn-custom-primeng/inputswitch'), require('tn-custom-primeng/inputtext'), require('tn-custom-primeng/inputtextarea'), require('tn-custom-primeng/menu'), require('tn-custom-primeng/menubar'), require('tn-custom-primeng/multiselect'), require('tn-custom-primeng/overlaypanel'), require('tn-custom-primeng/paginator'), require('tn-custom-primeng/panel'), require('tn-custom-primeng/progressspinner'), require('tn-custom-primeng/radiobutton'), require('tn-custom-primeng/scrollpanel'), require('tn-custom-primeng/selectbutton'), require('tn-custom-primeng/sidebar'), require('tn-custom-primeng/slider'), require('tn-custom-primeng/spinner'), require('tn-custom-primeng/splitbutton'), require('tn-custom-primeng/steps'), require('tn-custom-primeng/table'), require('tn-custom-primeng/tabview'), require('tn-custom-primeng/toast'), require('tn-custom-primeng/tooltip'), require('tn-custom-primeng/tree'), require('tn-custom-primeng/treetable'), require('tn-custom-primeng/tristatecheckbox'), require('@angular/router'), require('rxjs'), require('rxjs/operators'), require('uuid'), require('fast-safe-stringify'), require('moment'), require('underscore'), require('angular-oauth2-oidc'), require('tn-custom-primeng/api'), require('@angular/common/http'), require('@aspnet/signalr'), require('file-saver'), require('print-js'), require('jwt-decode'), require('@angular/platform-browser'), require('jquery'), require('nanoid'), require('@angular/animations'), require('hammerjs'), require('ng2-signalr'), require('tn-custom-primeng/dom'), require('qrcode'), require('jsplumb'), require('rtf.js'), require('tn-custom-primeng/accordion'), require('@angular/common/locales/vi'), require('@angular/platform-browser/animations')) :
3
- typeof define === 'function' && define.amd ? define('tnx-shared', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@ngx-translate/core', 'angular-split', 'ng2-currency-mask', 'ngx-device-detector', 'ngx-extended-pdf-viewer', 'ngx-img-fallback', 'ngx-mask', 'ngx-perfect-scrollbar', 'tn-custom-primeng/autocomplete', 'tn-custom-primeng/blockui', 'tn-custom-primeng/breadcrumb', 'tn-custom-primeng/button', 'tn-custom-primeng/calendar', 'tn-custom-primeng/card', 'tn-custom-primeng/chart', 'tn-custom-primeng/checkbox', 'tn-custom-primeng/chips', 'tn-custom-primeng/colorpicker', 'tn-custom-primeng/confirmdialog', 'tn-custom-primeng/contextmenu', 'tn-custom-primeng/dataview', 'tn-custom-primeng/dialog', 'tn-custom-primeng/dropdown', 'tn-custom-primeng/fieldset', 'tn-custom-primeng/fileupload', 'tn-custom-primeng/focustrap', 'tn-custom-primeng/inputmask', 'tn-custom-primeng/inputswitch', 'tn-custom-primeng/inputtext', 'tn-custom-primeng/inputtextarea', 'tn-custom-primeng/menu', 'tn-custom-primeng/menubar', 'tn-custom-primeng/multiselect', 'tn-custom-primeng/overlaypanel', 'tn-custom-primeng/paginator', 'tn-custom-primeng/panel', 'tn-custom-primeng/progressspinner', 'tn-custom-primeng/radiobutton', 'tn-custom-primeng/scrollpanel', 'tn-custom-primeng/selectbutton', 'tn-custom-primeng/sidebar', 'tn-custom-primeng/slider', 'tn-custom-primeng/spinner', 'tn-custom-primeng/splitbutton', 'tn-custom-primeng/steps', 'tn-custom-primeng/table', 'tn-custom-primeng/tabview', 'tn-custom-primeng/toast', 'tn-custom-primeng/tooltip', 'tn-custom-primeng/tree', 'tn-custom-primeng/treetable', 'tn-custom-primeng/tristatecheckbox', '@angular/router', 'rxjs', 'rxjs/operators', 'uuid', 'fast-safe-stringify', 'moment', 'underscore', 'angular-oauth2-oidc', 'tn-custom-primeng/api', '@angular/common/http', '@aspnet/signalr', 'file-saver', 'print-js', 'jwt-decode', '@angular/platform-browser', 'jquery', 'nanoid', '@angular/animations', 'hammerjs', 'ng2-signalr', 'tn-custom-primeng/dom', 'qrcode', 'jsplumb', 'rtf.js', 'tn-custom-primeng/accordion', '@angular/common/locales/vi', '@angular/platform-browser/animations'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['tnx-shared'] = {}, global.ng.common, global.ng.core, global.ng.forms, global.i2, global.angularSplit, global.ng2CurrencyMask, global.ngxDeviceDetector, global.ngxExtendedPdfViewer, global.ngxImgFallback, global.ngxMask, global.ngxPerfectScrollbar, global.autocomplete, global.blockui, global.breadcrumb, global.button, global.calendar, global.card, global.chart, global.checkbox, global.chips, global.colorpicker, global.confirmdialog, global.contextmenu, global.dataview, global.dialog, global.dropdown, global.fieldset, global.fileupload, global.focustrap, global.inputmask, global.inputswitch, global.inputtext, global.inputtextarea, global.menu, global.menubar, global.multiselect, global.overlaypanel, global.paginator, global.panel, global.progressspinner, global.radiobutton, global.scrollpanel, global.selectbutton, global.sidebar, global.slider, global.spinner, global.splitbutton, global.steps, global.table, global.tabview, global.toast, global.tooltip, global.tree, global.treetable, global.tristatecheckbox, global.ng.router, global.rxjs, global.rxjs.operators, global.uuid, global.stringify, global.moment_, global._, global.i4, global.i1, global.ng.common.http, global.signalR, global.FileSaver, global.printJS_, global.JWT_, global.ng.platformBrowser, global.jQuery_, global.nanoid_, global.ng.animations, global.Hammer, global.ng2Signalr, global.dom, global.QRCode, global.jsplumb, global.rtf_js, global.accordion, global.ng.common.locales.vi, global.ng.platformBrowser.animations));
5
- }(this, (function (exports, i2$1, i0, forms, i2, angularSplit, ng2CurrencyMask, ngxDeviceDetector, ngxExtendedPdfViewer, ngxImgFallback, ngxMask, ngxPerfectScrollbar, autocomplete, blockui, breadcrumb, button, calendar, card, chart, checkbox, chips, colorpicker, confirmdialog, contextmenu, dataview, dialog, dropdown, fieldset, fileupload, focustrap, inputmask, inputswitch, inputtext, inputtextarea, menu, menubar, multiselect, overlaypanel, paginator, panel, progressspinner, radiobutton, scrollpanel, selectbutton, sidebar, slider, spinner, splitbutton, steps, table, tabview, toast, tooltip, tree, treetable, tristatecheckbox, i3, rxjs, operators, uuid, stringify, moment_, _, i4, i1, i1$1, signalR, FileSaver, printJS_, JWT_, platformBrowser, jQuery_, nanoid_, animations, Hammer, ng2Signalr, dom, QRCode, jsplumb, rtf_js, accordion, localeVi, animations$1) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('@angular/core'), require('@angular/forms'), require('@ngx-translate/core'), require('angular-split'), require('ng2-currency-mask'), require('ngx-device-detector'), require('ngx-extended-pdf-viewer'), require('ngx-img-fallback'), require('ngx-mask'), require('ngx-perfect-scrollbar'), require('tn-custom-primeng/accordion'), require('tn-custom-primeng/autocomplete'), require('tn-custom-primeng/blockui'), require('tn-custom-primeng/breadcrumb'), require('tn-custom-primeng/button'), require('tn-custom-primeng/calendar'), require('tn-custom-primeng/card'), require('tn-custom-primeng/chart'), require('tn-custom-primeng/checkbox'), require('tn-custom-primeng/chips'), require('tn-custom-primeng/colorpicker'), require('tn-custom-primeng/confirmdialog'), require('tn-custom-primeng/contextmenu'), require('tn-custom-primeng/dataview'), require('tn-custom-primeng/dialog'), require('tn-custom-primeng/dropdown'), require('tn-custom-primeng/fieldset'), require('tn-custom-primeng/fileupload'), require('tn-custom-primeng/focustrap'), require('tn-custom-primeng/inputmask'), require('tn-custom-primeng/inputswitch'), require('tn-custom-primeng/inputtext'), require('tn-custom-primeng/inputtextarea'), require('tn-custom-primeng/menu'), require('tn-custom-primeng/menubar'), require('tn-custom-primeng/multiselect'), require('tn-custom-primeng/overlaypanel'), require('tn-custom-primeng/paginator'), require('tn-custom-primeng/panel'), require('tn-custom-primeng/progressspinner'), require('tn-custom-primeng/radiobutton'), require('tn-custom-primeng/scrollpanel'), require('tn-custom-primeng/selectbutton'), require('tn-custom-primeng/sidebar'), require('tn-custom-primeng/slider'), require('tn-custom-primeng/spinner'), require('tn-custom-primeng/splitbutton'), require('tn-custom-primeng/steps'), require('tn-custom-primeng/table'), require('tn-custom-primeng/tabview'), require('tn-custom-primeng/toast'), require('tn-custom-primeng/tooltip'), require('tn-custom-primeng/tree'), require('tn-custom-primeng/treetable'), require('tn-custom-primeng/tristatecheckbox'), require('@angular/router'), require('rxjs'), require('rxjs/operators'), require('uuid'), require('fast-safe-stringify'), require('moment'), require('underscore'), require('angular-oauth2-oidc'), require('tn-custom-primeng/api'), require('@angular/common/http'), require('@aspnet/signalr'), require('file-saver'), require('print-js'), require('jwt-decode'), require('@angular/platform-browser'), require('jquery'), require('nanoid'), require('@angular/animations'), require('hammerjs'), require('ng2-signalr'), require('tn-custom-primeng/dom'), require('qrcode'), require('jsplumb'), require('rtf.js'), require('@angular/common/locales/vi'), require('@angular/platform-browser/animations')) :
3
+ typeof define === 'function' && define.amd ? define('tnx-shared', ['exports', '@angular/common', '@angular/core', '@angular/forms', '@ngx-translate/core', 'angular-split', 'ng2-currency-mask', 'ngx-device-detector', 'ngx-extended-pdf-viewer', 'ngx-img-fallback', 'ngx-mask', 'ngx-perfect-scrollbar', 'tn-custom-primeng/accordion', 'tn-custom-primeng/autocomplete', 'tn-custom-primeng/blockui', 'tn-custom-primeng/breadcrumb', 'tn-custom-primeng/button', 'tn-custom-primeng/calendar', 'tn-custom-primeng/card', 'tn-custom-primeng/chart', 'tn-custom-primeng/checkbox', 'tn-custom-primeng/chips', 'tn-custom-primeng/colorpicker', 'tn-custom-primeng/confirmdialog', 'tn-custom-primeng/contextmenu', 'tn-custom-primeng/dataview', 'tn-custom-primeng/dialog', 'tn-custom-primeng/dropdown', 'tn-custom-primeng/fieldset', 'tn-custom-primeng/fileupload', 'tn-custom-primeng/focustrap', 'tn-custom-primeng/inputmask', 'tn-custom-primeng/inputswitch', 'tn-custom-primeng/inputtext', 'tn-custom-primeng/inputtextarea', 'tn-custom-primeng/menu', 'tn-custom-primeng/menubar', 'tn-custom-primeng/multiselect', 'tn-custom-primeng/overlaypanel', 'tn-custom-primeng/paginator', 'tn-custom-primeng/panel', 'tn-custom-primeng/progressspinner', 'tn-custom-primeng/radiobutton', 'tn-custom-primeng/scrollpanel', 'tn-custom-primeng/selectbutton', 'tn-custom-primeng/sidebar', 'tn-custom-primeng/slider', 'tn-custom-primeng/spinner', 'tn-custom-primeng/splitbutton', 'tn-custom-primeng/steps', 'tn-custom-primeng/table', 'tn-custom-primeng/tabview', 'tn-custom-primeng/toast', 'tn-custom-primeng/tooltip', 'tn-custom-primeng/tree', 'tn-custom-primeng/treetable', 'tn-custom-primeng/tristatecheckbox', '@angular/router', 'rxjs', 'rxjs/operators', 'uuid', 'fast-safe-stringify', 'moment', 'underscore', 'angular-oauth2-oidc', 'tn-custom-primeng/api', '@angular/common/http', '@aspnet/signalr', 'file-saver', 'print-js', 'jwt-decode', '@angular/platform-browser', 'jquery', 'nanoid', '@angular/animations', 'hammerjs', 'ng2-signalr', 'tn-custom-primeng/dom', 'qrcode', 'jsplumb', 'rtf.js', '@angular/common/locales/vi', '@angular/platform-browser/animations'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['tnx-shared'] = {}, global.ng.common, global.ng.core, global.ng.forms, global.i2, global.angularSplit, global.ng2CurrencyMask, global.ngxDeviceDetector, global.ngxExtendedPdfViewer, global.ngxImgFallback, global.ngxMask, global.ngxPerfectScrollbar, global.accordion, global.autocomplete, global.blockui, global.breadcrumb, global.button, global.calendar, global.card, global.chart, global.checkbox, global.chips, global.colorpicker, global.confirmdialog, global.contextmenu, global.dataview, global.dialog, global.dropdown, global.fieldset, global.fileupload, global.focustrap, global.inputmask, global.inputswitch, global.inputtext, global.inputtextarea, global.menu, global.menubar, global.multiselect, global.overlaypanel, global.paginator, global.panel, global.progressspinner, global.radiobutton, global.scrollpanel, global.selectbutton, global.sidebar, global.slider, global.spinner, global.splitbutton, global.steps, global.table, global.tabview, global.toast, global.tooltip, global.tree, global.treetable, global.tristatecheckbox, global.ng.router, global.rxjs, global.rxjs.operators, global.uuid, global.stringify, global.moment_, global._, global.i4, global.i1, global.ng.common.http, global.signalR, global.FileSaver, global.printJS_, global.JWT_, global.ng.platformBrowser, global.jQuery_, global.nanoid_, global.ng.animations, global.Hammer, global.ng2Signalr, global.dom, global.QRCode, global.jsplumb, global.rtf_js, global.ng.common.locales.vi, global.ng.platformBrowser.animations));
5
+ }(this, (function (exports, i2$1, i0, forms, i2, angularSplit, ng2CurrencyMask, ngxDeviceDetector, ngxExtendedPdfViewer, ngxImgFallback, ngxMask, ngxPerfectScrollbar, accordion, autocomplete, blockui, breadcrumb, button, calendar, card, chart, checkbox, chips, colorpicker, confirmdialog, contextmenu, dataview, dialog, dropdown, fieldset, fileupload, focustrap, inputmask, inputswitch, inputtext, inputtextarea, menu, menubar, multiselect, overlaypanel, paginator, panel, progressspinner, radiobutton, scrollpanel, selectbutton, sidebar, slider, spinner, splitbutton, steps, table, tabview, toast, tooltip, tree, treetable, tristatecheckbox, i3, rxjs, operators, uuid, stringify, moment_, _, i4, i1, i1$1, signalR, FileSaver, printJS_, JWT_, platformBrowser, jQuery_, nanoid_, animations, Hammer, ng2Signalr, dom, QRCode, jsplumb, rtf_js, localeVi, animations$1) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -11402,7 +11402,11 @@
11402
11402
  EnumWorkflowCheckboxOption[EnumWorkflowCheckboxOption["TAO_CONG_VIEC"] = 1] = "TAO_CONG_VIEC";
11403
11403
  EnumWorkflowCheckboxOption[EnumWorkflowCheckboxOption["AUTO_NEXT_STEP"] = 2] = "AUTO_NEXT_STEP";
11404
11404
  EnumWorkflowCheckboxOption[EnumWorkflowCheckboxOption["AUTO_START_TASK"] = 3] = "AUTO_START_TASK";
11405
- })(exports.EnumWorkflowCheckboxOption || (exports.EnumWorkflowCheckboxOption = {}));
11405
+ })(exports.EnumWorkflowCheckboxOption || (exports.EnumWorkflowCheckboxOption = {}));
11406
+ (function (EnumProcessWorkflowType) {
11407
+ EnumProcessWorkflowType[EnumProcessWorkflowType["EDIT"] = 1] = "EDIT";
11408
+ EnumProcessWorkflowType[EnumProcessWorkflowType["VIEW"] = 2] = "VIEW";
11409
+ })(exports.EnumProcessWorkflowType || (exports.EnumProcessWorkflowType = {}));
11406
11410
 
11407
11411
  var DummyWorkflowCode = 'DummyWorkflowCode';
11408
11412
  var MaActionBatDauQuyTrinh = '_START_';
@@ -22422,6 +22426,9 @@
22422
22426
  configurable: true
22423
22427
  });
22424
22428
  DataListBase.prototype.ngOnInit = function () {
22429
+ // if (window) {
22430
+ // window['_clbc'] = this;
22431
+ // }
22425
22432
  this.model.baseReady = false;
22426
22433
  if (this.setting.cols) {
22427
22434
  this.setting.cols = this.setting.cols.filter(function (q) { return !q.removeOnInit; });
@@ -26940,7 +26947,7 @@
26940
26947
  selector: 'chat-box',
26941
26948
  template: "<div class=\"dashboard\">\r\n <div class=\"chat\">\r\n <div class=\"group-info\">\r\n <a href=\"javascript:\">C\u00F3 {{peopleAll.length}} ng\u01B0\u1EDDi trong nh\u00F3m n\u00E0y</a>\r\n <div class=\"circleButton\" pTooltip=\"Xem to\u00E0n b\u1ED9 \u0111\u00EDnh k\u00E8m\" tooltipPosition=\"top\">\r\n <a href=\"javascript:\"><i class=\"far fa-images\"></i></a>\r\n </div>\r\n <div (click)=\"addPeople()\" class=\"circleButton\" pTooltip=\"Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi v\u00E0o nh\u00F3m\" tooltipPosition=\"top\"\r\n disabled=\"true\">\r\n <a href=\"javascript:\"><i class=\"fas fa-user-plus\"></i></a>\r\n </div>\r\n </div>\r\n <ul #scrollMe [ngClass]=\"{'hasPin': model.pinnedMessage != null}\">\r\n <li *ngIf=\"model.pinnedMessage\" class=\"clearfix pin\" [ngClass]=\"{'message-from': true}\">\r\n <ng-container\r\n *ngTemplateOutlet=\"messageItem; context: { i : -1, item: model.pinnedMessage, isPinnedMessage: true}\">\r\n </ng-container>\r\n </li>\r\n <li *ngFor=\"let item of model.dataSource; let i = index; trackBy: trackByFunc\" class=\"clearfix\"\r\n [ngClass]=\"{ 'message-own': item.type == 'own'}\">\r\n <ng-container *ngTemplateOutlet=\"messageItem; context: { i : i, item: item}\">\r\n </ng-container>\r\n </li>\r\n </ul>\r\n <!-- <chat-send-message-box *ngIf=\"showSendMessageBox\"></chat-send-message-box>-->\r\n <div [ngClass]=\"{'visible2': model.scrolling, 'hidden2': !model.scrolling}\" class=\"scroll-to-bottom\">\r\n <span *ngIf=\"model.newMessageNotUpdatedCount > 0\" (click)=\"scrollToBottom(350, true, null)\">\r\n {{model.newMessageNotUpdatedCount <= 5 ? model.newMessageNotUpdatedCount : '5+' }} </span>\r\n <span (click)=\"scrollToBottom(350, true, null)\" *ngIf=\"model.newMessageNotUpdatedCount == 0\">\r\n <i class=\"fas fa-chevron-down\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<file-viewer *ngIf=\"fileViewerModel.showEditForm\" [parentContext]=\"context\" [parentModel]=\"model\"\r\n [model]=\"fileViewerModel\">\r\n</file-viewer>\r\n\r\n<ng-template #messageItem let-i=\"i\" let-isPinnedMessage=\"isPinnedMessage\" let-item=\"item\">\r\n <img *ngIf=\"item.isFirstMessageFlow && item.type != 'own' && !isPinnedMessage && item.avatar != null\" alt=\"\"\r\n class=\"chat-avatar\" src=\"{{getCurrentUserAvatar(item.avatar)}}\">\r\n <p *ngIf=\"(item.isFirstMessageFlow && item.type != 'own') && !isPinnedMessage\" class=\"message-created-by\">\r\n {{item.fullName}}\r\n </p>\r\n <span *ngIf=\"!hasAttachment(item)\">\r\n <!-- [class]=\"addClassToMessage(item, isPinnedMessage)\">-->\r\n <p *ngIf=\"!hasAttachment(item)\" class=\"message-content\">\r\n <i (click)=\"pinMessage(item)\" class=\"fas fa-thumbtack\" style=\"right: 0;\"></i>\r\n <i (click)=\"quickNote(item)\" class=\"fas fa-sticky-note\"></i>\r\n {{item.content}}\r\n </p>\r\n <p *ngIf=\"!isPinnedMessage && (item.isLastMessageFlow || !inTheSameTime(i, item, model.dataSource))\"\r\n class=\"message-created\" pTooltip=\"{{item.created | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"{{item.type != 'own'?'right':'left'}}\">\r\n {{_crudService.renderDateTime(item.created)}}\r\n </p>\r\n <p *ngIf=\"isPinnedMessage\" class=\"message-created\">\r\n {{item.createdBy}} \u0111\u00E3 g\u1EEDi l\u00FAc {{item.created | date:'dd/MM/yyyy HH:mm'}}\r\n </p>\r\n </span>\r\n <ng-container *ngIf=\"hasAttachment(item)\">\r\n <ng-container *ngFor=\"let attachmentItem of item.attachments;let index=index\">\r\n <div class=\"file\"\r\n [ngClass]=\"{'first':item.isFirstMessageFlow && index == 0, 'middle':index > 0 || !item.isFirstMessageFlow, 'image' : attachmentItem.type == 'image'}\"\r\n [ngStyle]=\"{'width': model.img[i + 'width' + index]}\">\r\n <p class=\"attachment\">\r\n <span (mouseup)=\"onMouseUp($event)\" class=\"attachment-item\">\r\n <a *ngIf=\"attachmentItem.type != 'image'\" (click)=\"viewOrDownloadFile($event, attachmentItem)\">\r\n <i class=\"fas fa-paperclip\"></i>{{attachmentItem.fileName}}\r\n </a>\r\n <a *ngIf=\"attachmentItem.type == 'image'\" #aElement\r\n [ngClass]=\"{'hidden': !model.img[i + '' + index], 'visible':model.img[i + '' + index]}\"\r\n (click)=\"viewOrDownloadFile($event, attachmentItem)\">\r\n <img class=\"message-img\" (load)=\"loadImg($event, i, index)\"\r\n [src]=\"attachmentItem.url | secure | async\" />\r\n </a>\r\n </span>\r\n </p>\r\n <div style=\"clear: both\"></div>\r\n <p class=\"message-created\" pTooltip=\"{{item.created | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"{{item.type != 'own'?'right':'left'}}\">\r\n {{_crudService.renderDateTime(item.created)}}\r\n </p>\r\n </div>\r\n <div style=\"clear: both\"></div>\r\n </ng-container>\r\n </ng-container>\r\n <after-view-checked *ngIf=\"model.dataSource.length == i + 1\" (loading)=\"scrollToBottom(0, false, item.sent)\">\r\n </after-view-checked>\r\n</ng-template>\r\n\r\n<!--<tn-dialog *ngIf=\"userPickerForm.show\" #dialog [styleClass]=\"'tn-form-dialog'\"-->\r\n<!-- [header]=\"'Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi d\u00F9ng' | translate\" [popupSize]=\"userPickerForm.popupSize\"-->\r\n<!-- (onCancel)=\"userPickerForm.show = false\"-->\r\n<!-- (onHide)=\"userPickerForm.show = false\">-->\r\n<!-- &lt;!&ndash; <congviec-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onAfterSaved)=\"onAfterSaved($event)\"></congviec-form>&ndash;&gt;-->\r\n<!-- <user-picker-box #formBase [control]=\"userPickerControl\"-->\r\n<!-- [(ngModel)]=\"this.peopleAll\" [multiple]=\"userPickerControl.multiple\">-->\r\n<!-- </user-picker-box>-->\r\n<!--</tn-dialog>-->\r\n\r\n\r\n<!--<tn-dialog *ngIf=\"userPickerForm.show\" #dialog [styleClass]=\"'tn-form-dialog'\"-->\r\n<!-- [header]=\"'Th\u00EAm m\u1EDBi ng\u01B0\u1EDDi d\u00F9ng' | translate\" [popupSize]=\"userPickerForm.popupSize\" (onHide)=\"userPickerForm.show == false\">-->\r\n<!-- &lt;!&ndash; <congviec-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; (onAfterSaved)=\"onAfterSaved($event)\"></congviec-form>&ndash;&gt;-->\r\n\r\n<!-- &lt;!&ndash;<quick-add-form *ngIf=\"model.editFormModel.showQuickNoteForm\" [parentContext]=\"context\"&ndash;&gt;-->\r\n<!-- &lt;!&ndash; [parentModel]=\"context.data.noteDataModel\"></quick-add-form>&ndash;&gt;-->\r\n<!--</tn-dialog>-->",
26942
26949
  providers: [ComponentContextService, CheckControlVisibleService],
26943
- styles: [".paging-advance{list-style:none;margin:3px 0;padding-left:0}.paging-advance li{line-height:30;padding-left:15px;width:150px}.paging-advance li.disabled{color:#bdbdbd;outline:none}.paging-advance li.disabled:hover{background:none;cursor:default}.paging-advance li:hover{background:red;cursor:pointer}.paging-advance-overlay .ui-overlaypanel-content{padding:0}.paging-advance-overlay.ui-overlaypanel-shifted:before{left:1.25em;margin-left:-10;right:auto}.paging-advance-overlay.ui-overlaypanel-shifted:after{left:1.25em;margin-left:-8px;right:auto}.chat-avatar{border:2px solid #eee;height:36px}", "@charset \"UTF-8\";@import url(C:\\Code\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(C:\\Code\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
26950
+ styles: [".paging-advance{list-style:none;margin:3px 0;padding-left:0}.paging-advance li{line-height:30;padding-left:15px;width:150px}.paging-advance li.disabled{color:#bdbdbd;outline:none}.paging-advance li.disabled:hover{background:none;cursor:default}.paging-advance li:hover{background:red;cursor:pointer}.paging-advance-overlay .ui-overlaypanel-content{padding:0}.paging-advance-overlay.ui-overlaypanel-shifted:before{left:1.25em;margin-left:-10;right:auto}.paging-advance-overlay.ui-overlaypanel-shifted:after{left:1.25em;margin-left:-8px;right:auto}.chat-avatar{border:2px solid #eee;height:36px}", "@charset \"UTF-8\";@import url(D:\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(D:\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
26944
26951
  },] }
26945
26952
  ];
26946
26953
  ChatBoxComponent.ctorParameters = function () { return [
@@ -27546,7 +27553,7 @@
27546
27553
  selector: 'chat-send-message-box',
27547
27554
  template: "<div class=\"dashboard\" (mouseup)=\"onMouseUp($event)\">\r\n <div class=\"chat\">\r\n <div class=\"new-message\">\r\n <div class=\"message-emotion\">\r\n <i class=\"far fa-smile\" style=\"color: gray;\" disabled=\"true\"></i>\r\n </div>\r\n <div class=\"message-attachment\" pTooltip=\"\u0110\u00EDnh k\u00E8m file\" tooltipPosition=\"top\" (click)=\"op.toggle($event)\">\r\n <i class=\"fas fa-paperclip\"></i>\r\n </div>\r\n <p-overlayPanel #op [dismissable]=\"true\" [appendTo]=\"'body'\" [styleClass]=\"'paging-advance-overlay'\"\r\n (mouseup)=\"onMouseUp($event)\">\r\n <ul class=\"paging-advance\">\r\n <li (click)=\"browseFileFromPersonal()\">T\u1EEB file c\u00E1 nh\u00E2n</li>\r\n <li (click)=\"browseFileFromComputer()\">T\u1EA3i l\u00EAn t\u1EEB m\u00E1y t\u00EDnh</li>\r\n </ul>\r\n </p-overlayPanel>\r\n <div class=\"message-input p-float-label\">\r\n <input #input pInputText\r\n id=\"message\"\r\n autocomplete=\"off\" autocorrect=\"off\"\r\n spellcheck=\"false\" class=\"ui-inputtext\"\r\n type=\"text\" placeholder=\"N\u1ED9i dung tin nh\u1EAFn\"\r\n [(ngModel)]=\"model.content\"\r\n (keyup.enter)=\"onSendMessage($event.target.value)\" (keydown.shift.tab)=\"cancelBlur($event)\"\r\n (keydown.tab)=\"cancelBlur($event)\" (paste)=\"handlePaste($event)\" (click)=\"clickInputText()\"/>\r\n </div>\r\n <div>\r\n <button pButton class=\"p-button-danger\" icon=\"fas fa-send\" type=\"button\" label=\"G\u1EEDi\"\r\n (click)=\"onSendMessage(model.content)\">\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"attachment-list\" [ngClass]=\"model.classHasAttachment\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'height': '100px'}\">\r\n <div *ngFor=\"let item of model.attachments\" class=\"attachment-item\">\r\n <img *ngIf=\"item.type == 'image'\" [src]=\"item.url | safeUrl\"/>\r\n <span *ngIf=\"item.type == 'file'\">{{item.fileName}}</span>\r\n <i class=\"far fa-times-circle label-danger remove-file-attachment\"\r\n (click)=\"removeAttachment(item)\"></i>\r\n </div>\r\n </tn-custom-scrollbar>\r\n <!-- <div class=\"clearfix\"></div>-->\r\n </div>\r\n </div>\r\n</div>\r\n<p-fileUpload [ngStyle]=\"{'display': 'none'}\" #fileElement (onSelect)=\"onSelectFileFromComputer($event)\"\r\n multiple=\"multiple\" name=\"fileUpload\" [maxFileSize]=\"model.maxFileSize\" auto=\"false\">\r\n</p-fileUpload>\r\n\r\n<!-- <app-drive-file-dialog *ngIf=\"model.driveFileDialog.show\" [parentDataContext]=\"dataContext\"\r\n []=\"model.driveFileDialog\" #driveFileDialog>\r\n</app-drive-file-dialog> -->\r\n",
27548
27555
  providers: [ComponentContextService],
27549
- styles: ["", "@charset \"UTF-8\";@import url(C:\\Code\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(C:\\Code\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
27556
+ styles: ["", "@charset \"UTF-8\";@import url(D:\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\@angular\\material\\prebuilt-themes\\indigo-pink.css);@import url(D:\\git.dttt.vn\\5.1\\shared\\AppSharedV5\\node_modules\\jsoneditor\\dist\\jsoneditor.min.css);.flex{display:flex}.flex .fit{flex:1 1}.flex.flex-column{flex-direction:column}.flex.flex-wrap{flex-wrap:wrap}.flex.center-v{align-items:center}.flex.center-all,.flex.center-h{justify-content:center}.flex.center-all{align-items:center}.validate-item{color:#e00000;display:inline-block;font-size:.9em;white-space:nowrap}.tn-scroll-bar.bgWhite>div,.validate-item{background-color:#fff}.label-primary{background-color:#1ab394;padding:2px}.label-danger,.label-primary{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px}.label-danger{background-color:#ed5565;padding:2px 5px}.label-warning{background-color:#b8860b}.label-secondary,.label-warning{border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.label-secondary{background-color:#a9a9a9}.label-done{background-color:#3b1ef7;border-radius:.25em;color:#fff;display:inline-block;font-size:12px;margin-left:3px;margin-right:3px;min-width:60px;padding:2px}.text-navy{color:#1ab394!important}.text-danger{color:red!important}.fa-user-edit{font-size:14px}.flexcolumn{border:1px solid #eee;border-radius:5px;min-height:80px;overflow-x:hidden;overflow-y:hidden}.flexcolumn,.has2ScrollZone2 .flexcolumn{max-height:calc(100vh - 180px)}.headerNoBorder>th{border:none!important;border-bottom:1px solid #eee!important}.cellNoBorder table tr td{border:0!important}.layout-wrapper .layout-main{overflow:hidden;padding:60px 0 0}div.circleButton{border-radius:50%;display:inline-block;height:32px;line-height:32px;margin-bottom:4px;margin-top:4px;overflow:hidden;position:relative;text-align:center;transform:perspective(1px);width:32px}div.circleButton>a{line-height:32px;padding:0!important}div.circleButton>a>i{width:24px!important}div.circleButton:before{background:#e6e6e6;border-radius:50%;bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:scale(0);transition:all .3s cubic-bezier(.4,.34,.01,.97);z-index:-1}div.circleButton:hover:before{transform:scale(1)}.message-notice{background:#e0e0e0;text-align:center}.message-created-by{color:#888;font-size:.82em;font-weight:400;margin-bottom:3px;margin-left:45px;margin-top:5px}.message-created{color:#495057;display:inline-block;font-size:.82em;margin-bottom:0;margin-top:0}.message-own .message-created{padding-left:10px;padding-right:6px}.message-from .message-created{padding-left:6px;padding-right:10px}.message-content{color:#000;line-height:20px;margin-bottom:6px;margin-top:3px;position:relative}.message-content i{display:none}.message-content:hover i{display:block}.message-content:hover{padding-right:20px!important}.chat-box-content{max-height:500px}.attachment-list .attachment-item{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;background:#f1f1f1;border:1px solid #ccc;border-radius:8px;box-shadow:1px 2px 3px rgba(0,0,0,.06);float:left;height:84px;margin:8px;overflow:hidden;position:relative;text-align:center;user-select:none;width:84px}.attachment-list .attachment-item img{height:100%;width:100%}.attachment-list .attachment-item span{left:0;padding:5px;position:absolute;top:25px;width:100%;word-break:break-all}.clearfix{clear:both}.dashboard .chat ul li img.message-img{float:none;height:120px;margin-left:0;width:auto}.message-attachment{cursor:pointer;font-size:1.5em;margin:0 5px 0 0;position:relative}.hidden{display:none}.message-input{width:100%}.message-input label{font-size:1.2rem}.remove-file-attachment{background:#495057;border-radius:50%;color:#fff;cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px}.attachment-list{background:#fff;bottom:51px;box-shadow:0 -2px 3px -3px rgba(0,0,0,.21176470588235294);display:none;height:100px;left:-15px;position:absolute;width:calc(100% + 30px)}.attachment-list.attached-file{display:block}.dashboard{margin-bottom:-15px;margin-top:-5px}.dashboard .timeline>.ui-g .ui-g-9 .event-text{color:#555;white-space:nowrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2{line-height:18px;padding-left:30px;text-align:justify;white-space:pre-wrap}.dashboard .timeline>.ui-g .ui-g-9 .event-text.event-text2 i{left:20px;margin-top:3px;position:absolute}.new-message{align-items:center;justify-content:center}.dashboard .chat .new-message{border:0;display:flex;margin:0;padding:0;text-align:left}.dashboard .chat .new-message i{color:#495057}.dashboard .chat .new-message .message-attachment{border:0}.dashboard .chat .new-message .button-send{display:inline-block;line-height:40px;position:relative}.dashboard .chat .new-message .button-send .p-button-label{text-align:center}.dashboard .chat .new-message .message-emotion{display:inline-block;height:100%;line-height:40px;text-align:center;width:40px}.dashboard .chat .new-message .message-emotion i{font-size:24px;line-height:inherit}.dashboard .chat .new-message .message-input{width:calc(100% - 155px)}.dashboard .chat ul li.message-from,.dashboard .chat ul li.message-own{padding:0}.dashboard .chat ul li.message-from>span{background-color:#f0e3fd;border:0;border-radius:2px 20px 20px 2px}.dashboard .chat ul li.message-from>.first,.dashboard .chat ul li.message-from>.middle{margin-left:45px!important}.dashboard .chat ul li.message-from>.last{border-radius:2px 20px 20px 20px;margin-left:45px!important}.dashboard .chat ul li.message-from>img{border-radius:50%;margin-top:5px;position:absolute;width:36px}.dashboard .chat ul li.message-own>span{background-color:#def6f8;border:0;border-radius:20px 2px 2px 20px;text-align:right}.dashboard .chat ul li.message-own>span.sending{background-color:#eee}.dashboard .chat ul li.message-own>span.last{border-radius:20px 2px 20px 20px}.dashboard .chat ul li.message-own .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-own .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-own>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:right}.dashboard .chat ul li.message-from .attachment span.attachment-item{background-color:#f1f1f1!important;border:0!important;padding-left:0;padding-right:0}.dashboard .chat ul li.message-from .attachment span.attachment-item a{color:#555;cursor:pointer;display:inline-block;font-weight:700}.dashboard .chat ul li.message-from .attachment span.attachment-item a img{margin-right:0}.dashboard .chat ul li.message-from>div.file{background:#f1f1f1;border:1px solid #e4e4e4;border-radius:6px;display:inline-block;margin:1px;overflow:hidden;text-align:left}.dashboard .chat ul li .attachment span.attachment-item a>i{padding-right:8px}.dashboard .chat ul li div.file p.attachment{display:inline-block;margin-bottom:5px}.dashboard .chat ul li.message-from{text-align:left}.dashboard .chat ul li.message-own{text-align:right}.dashboard .chat ul li>div.file.image{height:170px;max-width:100%;padding:15px;transition:width .15s linear;width:220px}.dashboard .chat ul li>div.file.image p.attachment{height:120px}.dashboard .chat ul li>div.file{padding:15px}.dashboard .chat ul li>div.file p,.dashboard .chat ul li>div.file span{display:inline-block;margin:0;padding:0}.visible{opacity:1;transition:opacity .15s linear;visibility:visible}.hidden{opacity:0;transition:visibility 0s .1s,opacity .1s linear;visibility:hidden}.visible2{opacity:1;transition:opacity .35s linear;visibility:visible}.hidden2{opacity:0;transition:visibility 0s .3s,opacity .3s linear;visibility:hidden}.dashboard .chat{position:relative}.dashboard .chat .scroll-to-bottom{bottom:6px;min-height:40px;padding-right:12px;position:-webkit-sticky;position:sticky;text-align:right}.dashboard .chat .scroll-to-bottom span{background:#495057;border:2px solid #fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,.34901960784313724);color:#fff;cursor:pointer;display:inline-block;font-size:20px;height:35px;line-height:35px;overflow:hidden;text-align:center;width:35px}.dashboard .chat .group-info{line-height:30px;margin:-10px;padding:5px 10px;top:0;z-index:99}.dashboard .chat .group-info,.dashboard .chat .pin{background:#fff;box-shadow:0 0 3px -1px rgba(0,0,0,.21176470588235294);position:-webkit-sticky;position:sticky}.dashboard .chat .pin{margin-bottom:10px;margin-left:-10px;top:40px;width:calc(100% + 20px);z-index:98}.dashboard .chat ul li.message-from.pin>span,.dashboard .chat ul li.message-own.pin>span{background-color:transparent}.dashboard .chat ul li.message-from.pin>span{margin-left:0}.dashboard .chat .message-content i{color:#495057;cursor:pointer;font-size:11px}.dashboard .chat .pin .message-content i{display:block}.dashboard .chat li.message-from .message-content{padding-left:6px}.dashboard .chat li.message-from .message-content i{padding:5px}.dashboard .chat li.message-own .message-content i{padding:5px;position:absolute;right:-15px}.dashboard .chat .group-info .circleButton{float:right;margin-bottom:0;margin-top:0}.dashboard .chat ul{margin-top:20px;padding:0}.dashboard .chat .new-message .message-input input.ui-inputtext:focus{box-shadow:none;outline:none}.dashboard .chat ul.hasPin{margin-top:10px}.dashboard .chat .group-info a{color:#495057}.normalHtml,.normalHtml b,.normalHtml strong{font-weight:400}.normalHtml{display:inline-block}.avatar-viewer .profile-image{border:1px solid #fff;border-radius:50%;height:40px;margin-top:-6px;width:40px}a.button>i{margin-right:5px}.dashboard .timeline{padding-top:20px}.ui-inputgroup .ui-inputtext{padding-right:0}.new-message .ui-inputtext{width:100%}.full-screen,.full-screen>.p-dialog{height:100%!important;left:0!important;max-height:100%;min-height:unset!important;min-width:100%!important;top:0!important;width:100%!important}#image-view-list.image-gallery-2{background-color:rgba(0,0,0,.4);height:calc(100vh - 41px);margin:-14px auto 0;touch-action:none;width:100%}#image-view-list.image-gallery-2 .image-container{background-color:transparent;border:0;bottom:0;height:85%;margin:auto}#image-view-list.image-gallery-2 .image-container .iv-snap-view{bottom:20px;left:calc(50% - 75px);top:auto}#image-view-list.image-gallery-2 .image-container .iv-image-view img{touch-action:auto}#image-view-list .inline-icon{margin-top:-41px}#image-view-list .footer-info,#image-view-list .material-icons.next,#image-view-list .material-icons.prev{display:none}#image-view-list .options-image-viewer{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;margin-right:37px;user-select:none}.mobile-image-viewer-close{color:#fff;cursor:pointer;font-size:x-large;height:42px;line-height:42px;padding-right:7px;padding-top:2px;position:absolute;right:0;text-align:center;top:0;vertical-align:middle;width:37px}.mobile-image-viewer-close:hover{color:#feca37!important}.hide-holder{padding:0}.file-ex-name{word-break:break-all}.box-function{background:#fff;border-radius:0 0 5px 5px;border-top:1px solid #e8e8e8;bottom:0;left:0;padding:8px 30px;position:absolute;text-align:right;width:100%}.box-function button{margin-left:5px}.quick-note-button-holder{bottom:40px;display:none;height:50px;position:absolute;right:50px;width:50px;z-index:99}.quick-note-button{background:#ffc107;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:2em;height:50px;line-height:50px;outline:none;text-align:center;width:50px}.quick-note-button:hover{color:#fff}.all-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.all-note-button:hover{color:#fff}.setting-note-button{background:#ffd24b;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 5px 0 #b9b9b9;color:#fff;display:block;font-size:1.5em;height:40px;line-height:40px;outline:none;position:absolute;right:5px;text-align:center;top:5px;transition:right;transition-duration:.16s;transition-timing-function:ease-in;width:40px;z-index:-1}.setting-note-button:hover{color:#fff}.pinned-notes-holder{bottom:20px;display:none;left:20px;position:absolute;width:250px;z-index:98}.pinned-notes{background:transparent;display:block;outline:none;padding:0}.pinned-notes-header{font-size:1rem;font-weight:700}.pinned-notes-setting{position:absolute;right:.5rem}.pinned-note{background-color:#fff1ac;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);font-size:.8rem;margin-bottom:10px;padding:0;position:relative}.pinned-note:last-child{margin-bottom:0}.pinned-notes-minimize-button{background:#ffc003;border:1px solid #fff;border-radius:50%;box-shadow:1px 2px 3px rgba(185,139,6,.6313725490196078);color:#fff;cursor:pointer;height:25px;padding-top:5px;position:absolute;right:-15px;text-align:center;top:-15px;width:25px;z-index:1}.pinned-note-header-line{border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);height:calc(100% - 1rem);left:3px;margin-bottom:.5rem;margin-top:.5rem;max-height:20px;position:absolute;width:13px}.pinned-note-header-right{cursor:pointer;float:right;margin-left:3px;width:32px}.pinned-note-header-time{font-size:.6rem}.pinned-note-header-button-unpin{display:none;float:left;height:14px;margin-right:2px;opacity:.8;width:14px}.pinned-note-header-button-complete{display:none;padding-top:2px}.pinned-note-body{float:right;padding:.5rem .5rem .5rem 25px;width:100%}.pinned-note-body:hover{background-color:#feeb82}.pinned-note-body:hover .pinned-note-header-time{display:none}.pinned-note-body:hover .pinned-note-header-button-complete,.pinned-note-body:hover .pinned-note-header-button-unpin{display:block}.pinned-note-line-title{color:#333;display:block;font-weight:700;padding-bottom:6px}.pinned-note-line{display:block}.view-port{border-radius:5px;box-shadow:0 0 0 9999px rgba(0,0,0,.5882352941176471);display:none;height:0;width:0;z-index:999}.view-port,.view-port-mask{background:transparent;position:absolute}.view-port-mask{display:block;height:100%;left:0;top:0;width:100%;z-index:9998}.tinymce-control{border:1px solid #ccc;display:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;width:100%}.input-tab-trap{filter:alpha(opacity=0)!important;opacity:0!important;overflow:hidden!important;width:0!important}.color-value input{font-size:.8em;line-height:16px}.dialog-material.mobile{width:100%!important}audio,audio:focus,video,video:focus{outline:none}.iv-image-view img.iv-image{-webkit-animation:fadein .5s;animation:fadein .5s;visibility:hidden!important}@-webkit-keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes fadein{0%{opacity:0}to{opacity:1}}.iv-image-view img.iv-image.show{visibility:visible!important}.row-line{padding-bottom:0;padding-top:0}.fc-ltr{padding-bottom:7px}.padding-bottom-5px{padding-bottom:5px}.no-margin{margin:0!important}.no-padding{padding:0}.no-padding-left{padding-left:0}.float-left{float:left}body .fc .fc-toolbar .fc-button{background-color:#007ad9;border:1px solid #007ad9;border-radius:3px;color:#fff;font-size:14px;transition:background-color .2s,box-shadow .2s}body .fc .fc-toolbar .fc-button:enabled:hover{background-color:#116fbf;border-color:#116fbf;color:#fff}body .fc .fc-toolbar .fc-button:focus{box-shadow:0 0 0 .2em #8dcdff;outline:0 none;outline-offset:0}body .fc .fc-toolbar .fc-button-group .fc-button{border-radius:0}body .fc .fc-toolbar .fc-button-group .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-button-group .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}body .fc .fc-toolbar .fc-right .fc-button{border-radius:0}body .fc .fc-toolbar .fc-right .fc-button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}body .fc .fc-toolbar .fc-right .fc-button:last-child{border-bottom-right-radius:3px;border-top-right-radius:3px}.fc-toolbar>*>:not(:first-child){margin-left:0}.fc-axis,.fc-dayGridMonth-button,.fc-timeGridDay-button,.fc-timeGridWeek-button,.old-content{line-height:0;text-indent:-9999px}.fc-axis:after,.fc-dayGridMonth-button:after,.fc-timeGridDay-button:after,.fc-timeGridWeek-button:after,.new-content{display:block;line-height:normal;text-indent:0}.fc-dayGridMonth-button:after{content:\"Th\u00E1ng\";padding:.2em}.fc-timeGridWeek-button:after{content:\"Tu\u1EA7n\";padding:.2em}.fc-timeGridDay-button:after{content:\"Ng\u00E0y\";padding:.2em}body .fc th{background-color:#f4f4f4;border:1px solid #c8c8c8;color:#333;padding:.571em 1em}.ui-fluid .button-group button,.ui-fluid .button-group p-button{margin-right:.5em!important;text-align:left;width:auto}.layout-wrapper .layout-menu-container{z-index:97}.base-status,.base-status-aborted,.base-status-approved,.base-status-completed,.base-status-create-new,.base-status-ended,.base-status-high,.base-status-immediately,.base-status-low,.base-status-medium,.base-status-on-conducting,.base-status-on-going,.base-status-pending,.base-status-rejected,.base-status-returned,.base-status-urgent{border-radius:.25em;color:#fff;font-size:.8em;padding:3px;text-align:center}.base-status-create-new{background-color:#f2f2f2;color:#666}.base-status-on-conducting,.base-status-on-going{background-color:#337ab7}.base-status-pending{background-color:#ffba01}.base-status-approved{background-color:#34a835}.base-status-returned{background-color:#ffba01}.base-status-rejected{background-color:#d9534f}.base-status-completed{background-color:#34a835}.base-status-aborted{background-color:#ffba01}.base-status-ended{background-color:#34a835}.base-status-low,.base-status-medium{background-color:#f2f2f2;color:#666}.base-status-high{background-color:#ffba01}.base-status-immediately,.base-status-urgent{background-color:#d9534f}.text-align-center{text-align:center}.font-weight-bold{font-weight:700}.landing-body .landing-menu li a:hover{border-bottom:none}.landing-body .landing-menu li:first-child{margin-left:8px}.crud-form .label-control p{margin:0;padding:0}.crud-form .tn-check-box-list .p-row{display:block;padding:.5em;width:100%}.crud-form dropdown,.crud-form tn-mask{width:100%}.crud-form .tn-dropdown{min-height:32px}.crud-form .tn-dropdown.free-text.horizontal{display:flex}.crud-form .tn-dropdown.free-text.horizontal>div{flex-grow:1;padding-left:.5em;padding-right:.5em}.crud-form .tn-dropdown.free-text.horizontal>div:first-child{padding-left:0}.crud-form .tn-dropdown.free-text.horizontal>div:last-child{padding-right:0}.crud-form .tn-dropdown.free-text.vertical input.ui-inputtext.input-free-text{margin-top:.5em}.crud-form.assessment .label-control{font-weight:700}.crud-form.assessment .label-control.haveIndex{display:block;margin-bottom:5px;padding-left:20px;position:relative}.crud-form.assessment .label-control.haveIndex:before{content:\" \" attr(label-index) \".\";left:0;position:absolute;top:0}.crud-form.assessment .ViewMode{border-bottom:none}.crud-form.assessment .ViewMode .label-control{margin-bottom:0}body .ui-inputtext.min-width{padding:6px}.ps__rail-x,.ps__rail-y{z-index:2}.zIndex5 .ps__rail-x,.zIndex5 .ps__rail-y{z-index:5}.table-sticky table{border-collapse:separate;border-spacing:0}.table-sticky tr td,.table-sticky tr th{border:1px solid #eee!important;border-left:none!important;border-top:none!important}.table-sticky tr td:first-child,.table-sticky tr th:first-child{border-left:1px solid #eee!important}.table-sticky tr td:last-child,.table-sticky tr th:last-child{border-right:none!important}.table-sticky tr:first-child th{border-top:1px solid #eee!important}.table-sticky th{background:#eee}.table-sticky tbody td.disabled{background:#eee!important}.table-sticky tbody td.disabled:not(:last-child){border-right:1px solid #fff!important}.table-sticky.fix-height tr:first-child th{position:-webkit-sticky;position:sticky;top:0;z-index:2}.container-flex{align-items:center;display:flex}.container-flex>div:first-child{flex:0 0 auto;margin-right:.5em}.container-flex>div:last-child{flex-grow:1}.container-control{display:flex}.container-control>span.label{flex:0 0 auto;padding-right:.5em;padding-top:.5em}.container-control>span.label+*{flex-grow:1;flex-shrink:1;position:relative}.container-control>span.label+* .tn-dropdown,.container-control>span.label+* .ui-autocomplete-multiple,.container-control>span.label+* .ui-inputgroup .ui-inputtext{width:100%}.container-control>span.label+* .validation-container{margin-top:3px}.container-control>span.label+* .validation-container .validate-item{white-space:unset}.container-control>span.label+*>div{left:0;position:absolute;top:0;width:100%}.container-control.no-label>span.label{display:none}.container-control.inline{display:inline-flex}.align-flex-center{align-items:center;display:flex;justify-content:center}@media print{.isPrinting>*{display:none}.isPrinting app-print-layout{display:block}}.layout-wrapper .topbar .topbar-left,.layout-wrapper .topbar .topbar-right{background:#397ac3}#searchResultPanel-holder{padding:0 .5em}.cus-dropdown{line-height:normal;margin-right:1em}.tn-thumbnail{padding:.5rem}.tn-thumbnail.tn-thumbnail.tn-thumbnail{box-sizing:border-box}.fa-10:before{content:\"A+\";font-family:cursive;font-weight:700}.layout-wrapper .topbar .topbar-right #menu-button i{font-size:20px;margin-top:4px}.layout-wrapper .layout-menu li a i.menuitem-toggle-icon{font-size:15px;margin-left:auto}.flex-container-main-content{display:flex;flex-direction:column}.flex-container-main-content>div:last-child{background-color:#f4f4f4;display:flex;flex:1 1;overflow:hidden;position:relative}.flex-container-main-content>div:last-child>div{height:100%;left:0;overflow:hidden;padding-top:.5em;position:absolute;top:0;width:100%}.flex-container-main-content .block-with-button-search{display:flex;justify-content:flex-end}.flex-container-main-content .block-with-button-search>*{margin-left:.5em}.flex-container-main-content .block-with-button-search>input{height:26px;margin-left:0;max-width:200px;width:100%}.flex-container-main-content .block-with-button-search>dropdown{max-width:140px;width:100%}.flex-container-main-content .title-main-component{border-bottom:2px solid #1ca7ff}.clickable-table.clickable-table{cursor:pointer}.main-crud-container{height:calc(100vh - 76px)}.flex-container-fit-child{display:flex;flex-direction:column;height:100%;overflow:hidden}.flex-container-fit-child>div.fit-content{flex:1 1;position:relative}.flex-container-fit-child>div.fit-content>div{height:100%;overflow:auto;position:absolute;width:100%}.waiting-box{display:none;height:100%;left:0;position:fixed;top:0;width:100%;z-index:9999}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);height:100%;width:100%}.waiting-box .content-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.waiting-box.show{display:block}.function-topbar>*{vertical-align:top}.function-topbar button{width:auto}.function-topbar p-fileUpload{margin-right:1em}.function-topbar .container-control{display:inline-flex;line-height:normal}.function-topbar .container-control dropdown{width:100%}:focus{outline-color:#a6d5fa!important}address{font-style:normal}body .p-toast .p-toast-message{border-radius:0;border-width:0 0 0 4px!important}.__status span,.status span{font-size:.8rem}p-table.single-check .p-datatable .p-datatable-tbody>tr{cursor:pointer}p-table.single-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important;outline:2px solid #a6d5fa}p-table.single-check .p-datatable .p-datatable-tbody>tr td.sticky .fix-sticky.top{display:none}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td{border-color:#fff}p-table.multi-check .p-datatable .p-datatable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}.tn-animated-left-arrow-icon,.tn-animated-right-arrow-icon{height:32px;position:relative;width:14px;z-index:10}.tn-animated-right-arrow-icon{-webkit-animation:arrowBounceToRight .8s ease-in-out infinite alternate;animation:arrowBounceToRight .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon{-webkit-animation:arrowBounceToLeft .8s ease-in-out infinite alternate;animation:arrowBounceToLeft .8s ease-in-out infinite alternate}.tn-animated-left-arrow-icon:after,.tn-animated-left-arrow-icon:before,.tn-animated-right-arrow-icon:after,.tn-animated-right-arrow-icon:before{background-color:#88b0dd;content:\"\";display:block;height:20px;position:absolute;width:5px}.tn-animated-right-arrow-icon:before{left:4px;top:0;transform:rotate(-35deg)}.tn-animated-right-arrow-icon:after{left:4px;top:14px;transform:rotate(35deg)}.tn-animated-left-arrow-icon:before{right:4px;top:0;transform:rotate(35deg)}.tn-animated-left-arrow-icon:after{right:4px;top:14px;transform:rotate(-35deg)}@-webkit-keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@keyframes arrowBounceToLeft{0%{transform:translateX(-3px)}to{transform:translateX(3px)}}@-webkit-keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}@keyframes arrowBounceToRight{0%{transform:translateX(3px)}to{transform:translateX(-3px)}}.pass{color:#49c949}.not-pass,.pass{margin:5px;text-align:center}.not-pass{color:red}"]
27550
27557
  },] }
27551
27558
  ];
27552
27559
  ChatSendMessageBoxComponent.ctorParameters = function () { return [
@@ -28591,6 +28598,432 @@
28591
28598
  notify: [{ type: i0.ViewChild, args: ['notify', { static: true },] }]
28592
28599
  };
28593
28600
 
28601
+ var AppTopBarV2Component = /** @class */ (function (_super) {
28602
+ __extends(AppTopBarV2Component, _super);
28603
+ function AppTopBarV2Component(
28604
+ // public app: AppComponent,
28605
+ _customRouteService, _router, _commonService, _authenService, _cd, _injector, _permissionService, _moduleConfigService, _userService, _notifierService, _translateService) {
28606
+ var _this = _super.call(this, _injector) || this;
28607
+ _this._customRouteService = _customRouteService;
28608
+ _this._router = _router;
28609
+ _this._commonService = _commonService;
28610
+ _this._authenService = _authenService;
28611
+ _this._cd = _cd;
28612
+ _this._permissionService = _permissionService;
28613
+ _this._moduleConfigService = _moduleConfigService;
28614
+ _this._userService = _userService;
28615
+ _this._notifierService = _notifierService;
28616
+ _this._translateService = _translateService;
28617
+ _this.defaultAvatar = '';
28618
+ _this.key = '';
28619
+ _this.currentRoute = '';
28620
+ _this.fileApi = '';
28621
+ _this.currentUser = null;
28622
+ _this.appSwitcherItems = [];
28623
+ _this.isFirstTime = false;
28624
+ _this.showSettings = false;
28625
+ _this.allSubscriptions = [];
28626
+ _this.message = '';
28627
+ _this.environment = _this._moduleConfigService.getConfig().environment;
28628
+ _this.defaultAvatar = _this.environment.appMetadata.main.defaultMaleAvatar;
28629
+ _this.fileApi = _this.environment.apiDomain.fileEndpoint;
28630
+ if (_this.rootContext.data.currentAppMetadata && _this.rootContext.data.currentAppMetadata.showDefaultSetting != null && _this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined) {
28631
+ _this.showDefaultSetting = _this.rootContext.data.currentAppMetadata.showDefaultSetting;
28632
+ }
28633
+ else {
28634
+ if (_this.environment.appMetadata.main.showDefaultSetting != null && _this.environment.appMetadata.main.showDefaultSetting != undefined) {
28635
+ _this.showDefaultSetting = _this.environment.appMetadata.main.showDefaultSetting;
28636
+ }
28637
+ else {
28638
+ _this.showDefaultSetting = false;
28639
+ }
28640
+ }
28641
+ if (!_this.rootContext.data.currentUser) {
28642
+ _this.rootContext.data.currentUser = {};
28643
+ }
28644
+ // this.allSubscriptions.push(this.rootContext.subscribe(ComCtxConstants.ROOT.USER_INFO_CHANGED, rs => {
28645
+ // this._cd.detectChanges();
28646
+ // }));
28647
+ _this.rootContext.replaySubscribeOnce(ComCtxConstants.ROOT.USER_LOADED, function (rs) {
28648
+ _this.currentUser = _this._userService.getCurrentUser();
28649
+ _this.loadMenuMetadata();
28650
+ });
28651
+ if (_this.rootModel.allowAnonymous) {
28652
+ _this.loadMenuMetadata();
28653
+ }
28654
+ return _this;
28655
+ }
28656
+ AppTopBarV2Component.prototype.loadMenuMetadata = function () {
28657
+ var _this = this;
28658
+ var prmsAppSwicherItem = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
28659
+ var arr, _a, _b, _i, ind, element, clientId, isAuthorized;
28660
+ return __generator(this, function (_c) {
28661
+ switch (_c.label) {
28662
+ case 0:
28663
+ arr = [];
28664
+ _a = [];
28665
+ for (_b in this.environment.appMetadata.appSwitcher)
28666
+ _a.push(_b);
28667
+ _i = 0;
28668
+ _c.label = 1;
28669
+ case 1:
28670
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
28671
+ ind = _a[_i];
28672
+ element = this.environment.appMetadata.appSwitcher[ind];
28673
+ clientId = this.environment.authenticationSettings.clientId;
28674
+ if (!(this.rootContext.data.allowAnonymous && element.allowAnonymous)) return [3 /*break*/, 2];
28675
+ arr.push(element);
28676
+ return [3 /*break*/, 4];
28677
+ case 2:
28678
+ if (!this.currentUser) return [3 /*break*/, 4];
28679
+ return [4 /*yield*/, this._permissionService.isAuthorized(element.code, (element.code + ".MODULE." + element.code).toUpperCase(), true)];
28680
+ case 3:
28681
+ isAuthorized = _c.sent();
28682
+ if (isAuthorized) {
28683
+ arr.push(element);
28684
+ }
28685
+ _c.label = 4;
28686
+ case 4:
28687
+ _i++;
28688
+ return [3 /*break*/, 1];
28689
+ case 5:
28690
+ resolve(arr);
28691
+ return [2 /*return*/];
28692
+ }
28693
+ });
28694
+ }); });
28695
+ prmsAppSwicherItem.then(function (rs) {
28696
+ if (rs) {
28697
+ var currentUser_1 = _this._userService.getCurrentUser();
28698
+ _this.appSwitcherItems.length = 0;
28699
+ rs.forEach(function (element) {
28700
+ if (element.visible) {
28701
+ if (element.allowAnonymous) {
28702
+ _this.appSwitcherItems.push(element);
28703
+ }
28704
+ else {
28705
+ if (currentUser_1.maNguoiHoc && currentUser_1.issuperuser && currentUser_1.issuperuser.toLowerCase() != 'true') {
28706
+ if (element.code.toLowerCase() == 'sv' || element.code.toLowerCase() == 'user') {
28707
+ _this.appSwitcherItems.push(element);
28708
+ }
28709
+ }
28710
+ else {
28711
+ _this.appSwitcherItems.push(element);
28712
+ }
28713
+ }
28714
+ }
28715
+ });
28716
+ }
28717
+ });
28718
+ };
28719
+ AppTopBarV2Component.prototype.ngOnInit = function () {
28720
+ var _this = this;
28721
+ if (this.rootContext.data.currentUser) {
28722
+ if (this.rootContext.data.currentUser.gender == 0) {
28723
+ this.defaultAvatar = this.environment.appMetadata.main.defaultFemaleAvatar;
28724
+ }
28725
+ else {
28726
+ this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
28727
+ }
28728
+ this.userProfile = this._userService.getProfileInfo();
28729
+ }
28730
+ this.rootContext.subscribe(ComCtxConstants.ROOT.BODY_MOUSE_DOWN, function (e) {
28731
+ setTimeout(function () {
28732
+ _this.hideAdvanceSearch(e);
28733
+ });
28734
+ });
28735
+ this.rootContext.subscribe(ComCtxConstants.ROOT.KEY_DOWN_CTRL_F, function (e) {
28736
+ _this.focusToSearchBox();
28737
+ });
28738
+ this.rootContext.subscribe(ComCtxConstants.COMMON.FORCE_RELOAD, function (e) {
28739
+ _this.showNotificationReload();
28740
+ });
28741
+ this.rootContext.subscribe(ComCtxConstants.COMMON.SHOW_NOTIFY, function (e) {
28742
+ _this.setNotify(e.message);
28743
+ });
28744
+ this.allSubscriptions.push(this.rootContext.subscribe(ComCtxConstants.ROOT_USMART.SHOW_CONFIG_DATA_DEFAULT, function (e) {
28745
+ _this.model.dataModelSetting.showSettings = true;
28746
+ }));
28747
+ this.model.dataModelSetting = {
28748
+ data: {},
28749
+ showSettings: false
28750
+ };
28751
+ this.subscribe(ComCtxConstants.COMMON.SAVE_DATA_DEFAULT, function (data) {
28752
+ _this.formatDefaultDataSetting(data);
28753
+ _this.reloadWindow();
28754
+ });
28755
+ var stringDataDefault = localStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.DEFAULT_DATA);
28756
+ if (stringDataDefault) {
28757
+ var dataCacheDefault = JSON.parse(stringDataDefault);
28758
+ this.formatDefaultDataSetting(dataCacheDefault);
28759
+ }
28760
+ else {
28761
+ this.defaultDataSetting = 'Thiết lập tham số mặc định';
28762
+ }
28763
+ };
28764
+ AppTopBarV2Component.prototype.ngOnDestroy = function () {
28765
+ this.allSubscriptions.forEach(function (element) {
28766
+ element.unsubscribe();
28767
+ });
28768
+ if (this.intervalCountdown) {
28769
+ clearInterval(this.intervalCountdown);
28770
+ }
28771
+ _super.prototype.ngOnDestroy.call(this);
28772
+ };
28773
+ AppTopBarV2Component.prototype.formatDefaultDataSetting = function (data) {
28774
+ var _this = this;
28775
+ var dataSetting = '';
28776
+ var fields = ['instanceIdHeDaoTao', 'heDaoTao', 'namHoc', 'hocKy', 'instanceIdNamHoc', 'instanceIdHocKy', 'idDotThi'];
28777
+ var fieldPluses = ['code', 'code', 'ten', 'ten', 'ten', 'ten', 'ten'];
28778
+ fields.forEach(function (field, index) {
28779
+ if (!_this.checkHidden(field)) {
28780
+ var _f = "" + field + fieldPluses[index];
28781
+ if (data[_f]) {
28782
+ dataSetting += data[_f] + '/';
28783
+ }
28784
+ }
28785
+ });
28786
+ if (dataSetting.length > 0) {
28787
+ dataSetting = dataSetting.substring(0, dataSetting.length - 1);
28788
+ }
28789
+ this.defaultDataSetting = dataSetting;
28790
+ };
28791
+ AppTopBarV2Component.prototype.checkHidden = function (field) {
28792
+ return this.rootModel.currentAppMetadata.configDefaultSetting && !this.rootModel.currentAppMetadata.configDefaultSetting.column.some(function (p) { return p.field == field; });
28793
+ };
28794
+ AppTopBarV2Component.prototype.getCurrentUserFullName = function () {
28795
+ return this.rootContext.data.currentUser && this.rootContext.data.currentUser.fullName ? this.rootContext.data.currentUser.fullName : 'Khách';
28796
+ };
28797
+ AppTopBarV2Component.prototype.getCurrentUserPosition = function () {
28798
+ return this.userProfile ? this.userProfile.tenDonVi : null;
28799
+ };
28800
+ AppTopBarV2Component.prototype.getCurrentUserAvatar = function () {
28801
+ if (this.rootContext.data.currentUser && this.rootContext.data.currentUser.avatar) {
28802
+ return this.fileApi + "/file/public/" + this.rootContext.data.currentUser.avatar + "/Download";
28803
+ }
28804
+ else {
28805
+ return this.defaultAvatar;
28806
+ }
28807
+ };
28808
+ AppTopBarV2Component.prototype.clearFilter = function (input) {
28809
+ var _this = this;
28810
+ setTimeout(function () {
28811
+ _this.model.searchModel[_this.model.fieldKey] = '';
28812
+ _this._customRouteService.updateFragment(_this.model.fieldKey, null);
28813
+ _this._customRouteService.updateWithoutFireEvent();
28814
+ _this.rootContext.fireEvent(ComCtxConstants.ROOT.ON_SEARCH, _this.model.searchModel);
28815
+ input.value = '';
28816
+ input.focus();
28817
+ _this._cd.detectChanges();
28818
+ });
28819
+ };
28820
+ AppTopBarV2Component.prototype.toggleAdvanceSearch = function (evt) {
28821
+ this.rootContext.fireEvent(ComCtxConstants.ROOT.ADVANCE_SEARCH_TOGGLE_BOX, { event: evt });
28822
+ evt.preventDefault();
28823
+ evt.cancelBubble = true;
28824
+ };
28825
+ AppTopBarV2Component.prototype.hideAdvanceSearch = function (evt) {
28826
+ if (document.getElementById('advance-search-box')) {
28827
+ var mask = document.body.querySelectorAll('div[class~="ui-dialog-mask"]');
28828
+ if (!mask.length) {
28829
+ var closestDropdown = evt.target.closest('.dropdown-advs');
28830
+ if (closestDropdown == null || closestDropdown.length == 0) {
28831
+ this.rootContext.fireEvent(ComCtxConstants.ROOT.ADVANCE_SEARCH_HIDE_BOX, { event: evt });
28832
+ }
28833
+ }
28834
+ }
28835
+ };
28836
+ AppTopBarV2Component.prototype.focusToSearchBox = function () {
28837
+ if (!document.body.querySelector('div[class~="ui-dialog-mask"]')) {
28838
+ this.input.nativeElement.focus();
28839
+ }
28840
+ };
28841
+ AppTopBarV2Component.prototype.onTopbarSearchClick = function (event, input) {
28842
+ var _this = this;
28843
+ if (!this.model.fieldKey) {
28844
+ return;
28845
+ }
28846
+ setTimeout(function () {
28847
+ _this.rootContext.fireEvent(ComCtxConstants.ROOT.ON_SEARCH, _this.model.searchModel);
28848
+ _this._customRouteService.updateFragment(_this.model.fieldKey, input.value);
28849
+ _this._customRouteService.updateWithoutFireEvent();
28850
+ input.focus();
28851
+ });
28852
+ };
28853
+ AppTopBarV2Component.prototype.onEsc = function (event, input) {
28854
+ this.clearFilter(input);
28855
+ };
28856
+ AppTopBarV2Component.prototype.onEnter = function (event, input) {
28857
+ this.onTopbarSearchClick(event, input);
28858
+ };
28859
+ AppTopBarV2Component.prototype.switchApp = function (item, openNewTab) {
28860
+ if (openNewTab === void 0) { openNewTab = false; }
28861
+ if (item.target == '_blank') {
28862
+ if (!item.defaultRedirect) {
28863
+ item.defaultRedirect = '';
28864
+ }
28865
+ // NamNH tip trick cho mot so may bi loi item.url = 'main' -> redirect sai khi click vao cac phan he
28866
+ if (item.url == item.defaultRedirect) {
28867
+ item.url = '/' + item.code.toLowerCase();
28868
+ }
28869
+ if (!openNewTab) {
28870
+ top.location.href = item.url + "/" + item.defaultRedirect;
28871
+ }
28872
+ else {
28873
+ window.open(item.url + "/" + item.defaultRedirect, '_blank');
28874
+ }
28875
+ }
28876
+ else {
28877
+ if (item.defaultRedirect != '' && !this.rootContext.data.flags.menuTopOpenning) {
28878
+ this._router.navigateByUrl(item.defaultRedirect);
28879
+ this.rootContext.data.currentAppMetadata = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == item.code; });
28880
+ if (this.rootContext.data.currentAppMetadata
28881
+ && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined
28882
+ && this.rootContext.data.currentAppMetadata.showDefaultSetting != null) {
28883
+ this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting && this.showDefaultSetting;
28884
+ }
28885
+ }
28886
+ }
28887
+ };
28888
+ AppTopBarV2Component.prototype.hasAdvanceSearchBox = function () {
28889
+ return this.model.searchModel.hasAdvanceSearch;
28890
+ };
28891
+ AppTopBarV2Component.prototype.isAdvanceSearching = function () {
28892
+ return this.hasAdvanceSearchValue(this.model.searchModel);
28893
+ };
28894
+ AppTopBarV2Component.prototype.hasAdvanceSearchValue = function (obj) {
28895
+ for (var key in obj) {
28896
+ if (key === '_k' || key === 'hasAdvanceSearch') {
28897
+ continue;
28898
+ }
28899
+ if (obj[key] != null && obj[key] != '') {
28900
+ return false;
28901
+ }
28902
+ }
28903
+ return true;
28904
+ };
28905
+ AppTopBarV2Component.prototype.getComponentId = function () {
28906
+ return 'TOPBAR';
28907
+ };
28908
+ AppTopBarV2Component.prototype.goToHome = function () {
28909
+ this.rootContext.fireEvent('GO_HOME');
28910
+ };
28911
+ AppTopBarV2Component.prototype.onEditInfo = function (event) {
28912
+ event.preventDefault();
28913
+ var currentAppSetting = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == 'USER'; });
28914
+ if (currentAppSetting) {
28915
+ this.switchApp(currentAppSetting);
28916
+ }
28917
+ else {
28918
+ console.error('Bạn chưa thiết lập metadata cho trang cá nhân');
28919
+ }
28920
+ };
28921
+ AppTopBarV2Component.prototype.onChangePassword = function (event) {
28922
+ event.preventDefault();
28923
+ // this.changePassword.showPopup(this._userService.getId());
28924
+ };
28925
+ AppTopBarV2Component.prototype.onTopbarLogout = function () {
28926
+ if (!localStorage.getItem('currentUrl')) {
28927
+ localStorage.setItem('currentUrl', top.location.href);
28928
+ }
28929
+ this._authenService.logout();
28930
+ };
28931
+ AppTopBarV2Component.prototype.settingDefault = function () {
28932
+ this.model.dataModelSetting = {
28933
+ data: {},
28934
+ showSettings: true
28935
+ };
28936
+ };
28937
+ AppTopBarV2Component.prototype.onShowSettings = function (ev) {
28938
+ this.rootContext.fireEvent(ComCtxConstants.ROOT_USMART.CONFIG_DATA_DEFAULT_OPENED);
28939
+ };
28940
+ AppTopBarV2Component.prototype.onCloseSettings = function (ev) {
28941
+ this.rootContext.fireEvent(ComCtxConstants.ROOT_USMART.CONFIG_DATA_DEFAULT_CLOSED);
28942
+ };
28943
+ AppTopBarV2Component.prototype.showProfilePage = function () {
28944
+ if (this._userService.isSinhVienAccount()) {
28945
+ return false;
28946
+ }
28947
+ return true;
28948
+ };
28949
+ AppTopBarV2Component.prototype.login = function () {
28950
+ this.rootContext.fireEvent('LOGIN');
28951
+ };
28952
+ AppTopBarV2Component.prototype.setNotify = function (message) {
28953
+ this.message = message;
28954
+ };
28955
+ AppTopBarV2Component.prototype.handleMouseOver = function (evt) {
28956
+ evt.target.stop();
28957
+ };
28958
+ AppTopBarV2Component.prototype.handleMouseOut = function (evt) {
28959
+ evt.target.start();
28960
+ };
28961
+ AppTopBarV2Component.prototype.showNotificationReload = function () {
28962
+ var _this = this;
28963
+ this.message = 'Hệ thống có phiên bản mới, hãy refresh trình duyệt để cập nhật';
28964
+ this.rootContext.fireEvent(ComCtxConstants.ROOT.SHOW_REJECT_CONFIRM, false);
28965
+ this._notifierService.showConfirm(this.message).then(function (res) {
28966
+ _this.reloadWindow();
28967
+ });
28968
+ // if (this.intervalCountdown) {
28969
+ // clearInterval(this.intervalCountdown);
28970
+ // }
28971
+ // const date = new Date();
28972
+ // const goalDate = (new Date(date.getTime() + 10 * 1000)).getTime(); // Đếm 10s
28973
+ // this.intervalCountdown = setInterval(f => {
28974
+ // const now = new Date().getTime();
28975
+ // const distance = goalDate - now;
28976
+ // var seconds = Math.floor(distance / 1000);
28977
+ // // If the count down is finished, write some text
28978
+ // if (distance < 0) {
28979
+ // clearInterval(this.intervalCountdown);
28980
+ // this.reloadWindow();
28981
+ // return;
28982
+ // }
28983
+ // let message = `Trình duyệt sẽ khởi động lại sau ${seconds}s`;
28984
+ // if (seconds < 1) {
28985
+ // message = 'Trình duyệt sẽ khởi động lại ngay bây giờ';
28986
+ // }
28987
+ // this._notifierService.showConfirm(
28988
+ // message, null, null, false, this._translateService.instant('CONFIRM.ACCEPT_LABEL'),
28989
+ // 'pi pi-check'
28990
+ // ).then(res => {
28991
+ // clearInterval(this.intervalCountdown);
28992
+ // this.reloadWindow();
28993
+ // });
28994
+ // }, 1000);
28995
+ };
28996
+ AppTopBarV2Component.prototype.reloadWindow = function () {
28997
+ top.location.reload();
28998
+ };
28999
+ return AppTopBarV2Component;
29000
+ }(ComponentBase));
29001
+ AppTopBarV2Component.decorators = [
29002
+ { type: i0.Component, args: [{
29003
+ selector: 'app-topbar-v2',
29004
+ template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !environment.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"environment.appMetadata.main.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{environment.appMetadata.main.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{environment.appMetadata.main.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"settingDefault()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"settingDefault()\">\r\n {{defaultDataSetting}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !environment.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li #profile class=\"profile-item tn-l-top-bar-menu-item\"\r\n *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <li *ngIf=\"currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help></li>\r\n <li id=\"li-notifications\" class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>",
29005
+ providers: [ComponentContextService],
29006
+ styles: [".topBarSearchButton:disabled{background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important;opacity:1}::ng-deep app-topbar a{outline:none}input:disabled::-moz-placeholder{color:#b1b1b1}input:disabled:-ms-input-placeholder{color:#b1b1b1}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{float:none;margin-top:0}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;float:none;justify-content:center;order:0;text-align:right}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{-ms-grid-row-align:stretch;align-items:center;align-self:stretch;box-shadow:0 0 5px 0 rgba(0,0,0,.3764705882352941);display:flex}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{height:40px;margin:0;width:auto}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{font-size:0;height:auto;margin:0;padding-left:8px;padding-right:8px;width:auto}.tn-l-top-bar{display:flex}.topbar-description,.topbar-owner{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{display:flex;float:none;width:auto}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{display:block;height:28px;margin:auto;width:30px}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{justify-content:center}.notify-message,.setting-default-container{align-items:center;display:flex;margin-left:30px}.notify-message{flex:1 1;overflow:hidden}.notify-message>marquee{color:#ff0;font-size:500;white-space:nowrap}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{color:#52abff;text-align:center;text-shadow:none}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{color:#52abff;font-size:38px;margin:5px auto;text-shadow:none}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{margin-top:0;width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1):last-child,::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v2 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v2 .wrapper-appswitch{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));text-align:center}@media (max-width:1024px){::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}}@media (min-width:1025px){.tn-l-top-bar-right{align-items:center;display:flex;justify-content:space-between}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{align-items:center;display:flex;flex-direction:row-reverse;justify-content:flex-start;margin:0}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width:1025px) and (max-width:1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width:1024px){.tn-l-m-default-setting{align-items:center;color:#fff;display:flex;font-size:28px;height:36px;justify-content:center;width:36px}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{align-items:center;display:flex;justify-content:center;width:36px}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-logo-title-block,.tn-l-top-bar-left,.topbar-description,.topbar-owner{overflow:hidden}.topbar-description,.topbar-owner{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{align-items:center;display:flex;justify-content:flex-end;padding:0 .5em}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{margin-left:.5em;position:relative;right:0;top:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:220px}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{align-items:center;display:flex;justify-content:center}.tn-l-topbar-item-role-wrapper{display:none}}"]
29007
+ },] }
29008
+ ];
29009
+ AppTopBarV2Component.ctorParameters = function () { return [
29010
+ { type: CustomRouterService },
29011
+ { type: i3.Router },
29012
+ { type: CommonService },
29013
+ { type: AuthenService },
29014
+ { type: i0.ChangeDetectorRef },
29015
+ { type: i0.Injector },
29016
+ { type: PermissionService },
29017
+ { type: ModuleConfigService },
29018
+ { type: UserService },
29019
+ { type: NotifierService },
29020
+ { type: i2.TranslateService }
29021
+ ]; };
29022
+ AppTopBarV2Component.propDecorators = {
29023
+ input: [{ type: i0.ViewChild, args: ['input',] }],
29024
+ notify: [{ type: i0.ViewChild, args: ['notify', { static: true },] }]
29025
+ };
29026
+
28594
29027
  var MenuService = /** @class */ (function () {
28595
29028
  function MenuService(_moduleConfigService, _permissionService, _commonService, _applicationContext) {
28596
29029
  this._moduleConfigService = _moduleConfigService;
@@ -32288,6 +32721,46 @@
32288
32721
  onReady: [{ type: i0.Output }]
32289
32722
  };
32290
32723
 
32724
+ var TableDetailFormComponent = /** @class */ (function (_super) {
32725
+ __extends(TableDetailFormComponent, _super);
32726
+ function TableDetailFormComponent(injector) {
32727
+ var _this = _super.call(this, injector) || this;
32728
+ _this.schema = [];
32729
+ _this.data = {};
32730
+ _this.onSaved = new i0.EventEmitter();
32731
+ return _this;
32732
+ }
32733
+ TableDetailFormComponent.prototype.ngOnInit = function () {
32734
+ _super.prototype.ngOnInit.call(this);
32735
+ this.autoSave = false;
32736
+ this.model.data = this.data;
32737
+ this.setting.baseService = this.parentSetting.baseService;
32738
+ this.setting.schema = this.schema;
32739
+ };
32740
+ TableDetailFormComponent.prototype.handleManualSave = function () {
32741
+ this.onSaved.emit(this.model.data);
32742
+ };
32743
+ return TableDetailFormComponent;
32744
+ }(DataFormBase));
32745
+ TableDetailFormComponent.decorators = [
32746
+ { type: i0.Component, args: [{
32747
+ selector: 'table-detail-form',
32748
+ template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>",
32749
+ providers: [
32750
+ ComponentContextService
32751
+ ],
32752
+ styles: [".tn-check-box-list.p-grid{margin-bottom:-.5em}.btn-clear{background:#337ab7;border:none;border-radius:3px;color:#fff;cursor:pointer;height:30px;margin:1px .5em 0;padding:0 10px}.p-col-horizontal{padding:.5em}::ng-deep .tn-check-box-list{position:relative}::ng-deep .tn-check-box-list.flex-end{justify-content:flex-end}::ng-deep .tn-check-box-list.flex-center{justify-content:center}::ng-deep .tn-check-box-list label{cursor:pointer}"]
32753
+ },] }
32754
+ ];
32755
+ TableDetailFormComponent.ctorParameters = function () { return [
32756
+ { type: i0.Injector }
32757
+ ]; };
32758
+ TableDetailFormComponent.propDecorators = {
32759
+ schema: [{ type: i0.Input }],
32760
+ data: [{ type: i0.Input }],
32761
+ onSaved: [{ type: i0.Output }]
32762
+ };
32763
+
32291
32764
  var TreeTableComponent = /** @class */ (function (_super) {
32292
32765
  __extends(TreeTableComponent, _super);
32293
32766
  function TreeTableComponent(injector, _crudService, _notifierService) {
@@ -32965,46 +33438,6 @@
32965
33438
  onReloaded: [{ type: i0.Output }]
32966
33439
  };
32967
33440
 
32968
- var TableDetailFormComponent = /** @class */ (function (_super) {
32969
- __extends(TableDetailFormComponent, _super);
32970
- function TableDetailFormComponent(injector) {
32971
- var _this = _super.call(this, injector) || this;
32972
- _this.schema = [];
32973
- _this.data = {};
32974
- _this.onSaved = new i0.EventEmitter();
32975
- return _this;
32976
- }
32977
- TableDetailFormComponent.prototype.ngOnInit = function () {
32978
- _super.prototype.ngOnInit.call(this);
32979
- this.autoSave = false;
32980
- this.model.data = this.data;
32981
- this.setting.baseService = this.parentSetting.baseService;
32982
- this.setting.schema = this.schema;
32983
- };
32984
- TableDetailFormComponent.prototype.handleManualSave = function () {
32985
- this.onSaved.emit(this.model.data);
32986
- };
32987
- return TableDetailFormComponent;
32988
- }(DataFormBase));
32989
- TableDetailFormComponent.decorators = [
32990
- { type: i0.Component, args: [{
32991
- selector: 'table-detail-form',
32992
- template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'FORM.SAVE' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>",
32993
- providers: [
32994
- ComponentContextService
32995
- ],
32996
- styles: [".tn-check-box-list.p-grid{margin-bottom:-.5em}.btn-clear{background:#337ab7;border:none;border-radius:3px;color:#fff;cursor:pointer;height:30px;margin:1px .5em 0;padding:0 10px}.p-col-horizontal{padding:.5em}::ng-deep .tn-check-box-list{position:relative}::ng-deep .tn-check-box-list.flex-end{justify-content:flex-end}::ng-deep .tn-check-box-list.flex-center{justify-content:center}::ng-deep .tn-check-box-list label{cursor:pointer}"]
32997
- },] }
32998
- ];
32999
- TableDetailFormComponent.ctorParameters = function () { return [
33000
- { type: i0.Injector }
33001
- ]; };
33002
- TableDetailFormComponent.propDecorators = {
33003
- schema: [{ type: i0.Input }],
33004
- data: [{ type: i0.Input }],
33005
- onSaved: [{ type: i0.Output }]
33006
- };
33007
-
33008
33441
  var DatetimePickerRangeComponent = /** @class */ (function () {
33009
33442
  function DatetimePickerRangeComponent() {
33010
33443
  this.control = new DateTimeRangeControlSchema();
@@ -41489,213 +41922,6 @@
41489
41922
  lstItem: [{ type: i0.Input }]
41490
41923
  };
41491
41924
 
41492
- var SplashComponentV2Component = /** @class */ (function (_super) {
41493
- __extends(SplashComponentV2Component, _super);
41494
- function SplashComponentV2Component(injector, _moduleConfigService, _permissionService, _deviceDetectorService, _userService, _router, _authenService, _globalService) {
41495
- var _this = _super.call(this, injector) || this;
41496
- _this._moduleConfigService = _moduleConfigService;
41497
- _this._permissionService = _permissionService;
41498
- _this._deviceDetectorService = _deviceDetectorService;
41499
- _this._userService = _userService;
41500
- _this._router = _router;
41501
- _this._authenService = _authenService;
41502
- _this._globalService = _globalService;
41503
- _this.defaultAvatar = '';
41504
- _this.appSwitcherItems = [];
41505
- _this.loaded = false;
41506
- _this.currentDate = new Date();
41507
- _this.showDefaultSetting = false;
41508
- _this.fileApi = '';
41509
- _this.isOnMobile = false;
41510
- _this.daysInWeek = ['Chủ nhật', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'];
41511
- _this.rootContext.fireEvent('MAIN_CONTENT_ONLY', true);
41512
- _this.environment = _this._moduleConfigService.getConfig().environment;
41513
- _this.defaultAvatar = _this.environment.appMetadata.main.defaultMaleAvatar;
41514
- _this.fileApi = _this.environment.apiDomain.fileEndpoint;
41515
- setInterval(function () {
41516
- _this.currentDate = new Date();
41517
- }, 1000);
41518
- if (_this.rootContext.data.currentAppMetadata && _this.rootContext.data.currentAppMetadata && _this.rootContext.data.currentAppMetadata.showDefaultSetting != null && _this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined) {
41519
- _this.showDefaultSetting = _this.rootContext.data.currentAppMetadata.showDefaultSetting;
41520
- }
41521
- else {
41522
- if (_this.environment.appMetadata.main.showDefaultSetting != null && _this.environment.appMetadata.main.showDefaultSetting != undefined) {
41523
- _this.showDefaultSetting = _this.environment.appMetadata.main.showDefaultSetting;
41524
- }
41525
- else {
41526
- _this.showDefaultSetting = false;
41527
- }
41528
- }
41529
- // Config for authentication
41530
- _this._globalService.setHeaderState(false);
41531
- _this._globalService.setMenuState(false);
41532
- _this.underconstruction = _this.environment.underconstruction;
41533
- return _this;
41534
- }
41535
- SplashComponentV2Component.prototype.ngOnInit = function () {
41536
- var _this = this;
41537
- if (this._deviceDetectorService.isMobile()) {
41538
- this.isOnMobile = true;
41539
- }
41540
- if (this.rootContext.data.currentUser) {
41541
- if (this.rootContext.data.currentUser.gender == 0) {
41542
- this.defaultAvatar = this.environment.appMetadata.main.defaultFemaleAvatar;
41543
- }
41544
- else {
41545
- this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
41546
- }
41547
- }
41548
- this.rootContext.replaySubscribe(ComCtxConstants.ROOT.USER_LOADED, function (rs) {
41549
- _this.currentUser = _this._userService.getCurrentUser();
41550
- _this.loadAppMetadata();
41551
- _this.loaded = true;
41552
- });
41553
- if (this.rootModel.allowAnonymous) {
41554
- this.loaded = true;
41555
- this.loadAppMetadata();
41556
- }
41557
- };
41558
- SplashComponentV2Component.prototype.loadAppMetadata = function () {
41559
- var _this = this;
41560
- var prmsAppSwicherItem = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
41561
- var arr, _a, _b, _i, ind, element, clientId, isAuthorized;
41562
- return __generator(this, function (_c) {
41563
- switch (_c.label) {
41564
- case 0:
41565
- arr = [];
41566
- _a = [];
41567
- for (_b in this.environment.appMetadata.appSwitcher)
41568
- _a.push(_b);
41569
- _i = 0;
41570
- _c.label = 1;
41571
- case 1:
41572
- if (!(_i < _a.length)) return [3 /*break*/, 5];
41573
- ind = _a[_i];
41574
- element = this.environment.appMetadata.appSwitcher[ind];
41575
- clientId = this.environment.authenticationSettings.clientId;
41576
- if (!(this.rootModel.allowAnonymous && element.allowAnonymous)) return [3 /*break*/, 2];
41577
- arr.push(element);
41578
- return [3 /*break*/, 4];
41579
- case 2:
41580
- if (!this.currentUser) return [3 /*break*/, 4];
41581
- return [4 /*yield*/, this._permissionService.isAuthorized(element.code, (element.code + ".MODULE." + element.code).toUpperCase(), true)];
41582
- case 3:
41583
- isAuthorized = _c.sent();
41584
- if (isAuthorized) {
41585
- arr.push(element);
41586
- }
41587
- _c.label = 4;
41588
- case 4:
41589
- _i++;
41590
- return [3 /*break*/, 1];
41591
- case 5:
41592
- resolve(arr);
41593
- return [2 /*return*/];
41594
- }
41595
- });
41596
- }); });
41597
- prmsAppSwicherItem.then(function (rs) {
41598
- _this.appSwitcherItems.length = 0;
41599
- if (rs) {
41600
- rs.forEach(function (element) {
41601
- if (element.visible) {
41602
- if (!_this.currentUser) { // allow anonymous
41603
- _this.appSwitcherItems.push(element);
41604
- }
41605
- else {
41606
- if (_this.currentUser.maNguoiHoc && _this.currentUser.issuperuser.toLowerCase() != 'true') {
41607
- if (element.code.toLowerCase() == 'sv' || element.code.toLowerCase() == 'user') {
41608
- _this.appSwitcherItems.push(element);
41609
- }
41610
- }
41611
- else {
41612
- _this.appSwitcherItems.push(element);
41613
- }
41614
- }
41615
- }
41616
- });
41617
- }
41618
- });
41619
- };
41620
- SplashComponentV2Component.prototype.switchApp = function (item) {
41621
- this.loaded = false;
41622
- if (item.target == '_blank') {
41623
- if (!item.defaultRedirect) {
41624
- item.defaultRedirect = '';
41625
- }
41626
- // NamNH tip trick cho mot so may bi loi item.url = 'main' -> redirect sai khi click vao cac phan he
41627
- if (item.url == item.defaultRedirect) {
41628
- item.url = '/' + item.code.toLowerCase();
41629
- }
41630
- var link = item.url + "/" + item.defaultRedirect;
41631
- if (!link.startsWith('/') && !link.startsWith('http')) {
41632
- link = '/' + link;
41633
- }
41634
- top.location.href = link;
41635
- }
41636
- else {
41637
- if (item.defaultRedirect != '' && !this.rootContext.data.flags.menuTopOpenning) {
41638
- this._router.navigateByUrl(item.defaultRedirect);
41639
- this.rootContext.data.currentAppMetadata = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == item.code; });
41640
- if (this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined && this.rootContext.data.currentAppMetadata.showDefaultSetting != null) {
41641
- this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting && this.showDefaultSetting;
41642
- }
41643
- }
41644
- }
41645
- };
41646
- SplashComponentV2Component.prototype.logout = function () {
41647
- this._authenService.logout();
41648
- };
41649
- SplashComponentV2Component.prototype.goToPersonal = function () {
41650
- var userMenu = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == 'USER'; });
41651
- this.switchApp(userMenu);
41652
- };
41653
- SplashComponentV2Component.prototype.getCurrentUserAvatar = function () {
41654
- if (this.rootContext.data.currentUser && this.rootContext.data.currentUser.avatar) {
41655
- return this.fileApi + "/file/public/" + this.rootContext.data.currentUser.avatar + "/Download";
41656
- }
41657
- else {
41658
- return this.defaultAvatar;
41659
- }
41660
- };
41661
- SplashComponentV2Component.prototype.getNgayTrongTuan = function () {
41662
- return this.daysInWeek[this.currentDate.getDay()];
41663
- };
41664
- SplashComponentV2Component.prototype.showProfilePage = function () {
41665
- if (this._userService.isSinhVienAccount()) {
41666
- return false;
41667
- }
41668
- return true;
41669
- };
41670
- SplashComponentV2Component.prototype.ngOnDestroy = function () {
41671
- _super.prototype.ngOnDestroy.call(this);
41672
- this._globalService.setHeaderState(true);
41673
- this._globalService.setMenuState(true);
41674
- };
41675
- SplashComponentV2Component.prototype.login = function () {
41676
- this.rootContext.fireEvent('LOGIN');
41677
- };
41678
- return SplashComponentV2Component;
41679
- }(ComponentBase));
41680
- SplashComponentV2Component.decorators = [
41681
- { type: i0.Component, args: [{
41682
- selector: 'splash-component-v2',
41683
- template: "<div *ngIf=\"!loaded\" class=\"wrp-loader\">\r\n <div class=\"loader\"></div>\r\n</div>\r\n<div *ngIf=\"loaded\" class=\"modules-v2\">\r\n <div class=\"welcome-user\">\r\n <div class=\"profile-image\">\r\n <div class=\"tn-full-name\">{{currentUser.fullName}}</div>\r\n <img class=\"custom-avatar\" [src-fallback]=\"defaultAvatar\" [src]=\"getCurrentUserAvatar()\" />\r\n <div *ngIf=\"currentUser\" class=\"login\">\r\n <a class=\"tn-icon-signout\" title=\"\u0110\u0103ng xu\u1EA5t\" (click)=\"logout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"module-icons\">\r\n <div class=\"img-title\">\r\n <img class=\"tn-custom-logo\" [src]=\"environment.appMetadata.main.logo\"\r\n [alt]=\"environment.appMetadata.main.owner\">\r\n <div class=\"title\">\r\n <h2>{{environment.appMetadata.main.title}}</h2>\r\n <h1>{{environment.appMetadata.main.owner}}</h1>\r\n </div>\r\n <div *ngIf=\"!currentUser\" class=\"login\">\r\n <a class=\"tn-icon-signin\" title=\"\u0110\u0103ng nh\u1EADp\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\u0110\u0103ng nh\u1EADp\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"div1111-wrapper\">\r\n <tn-custom-scrollbar *ngIf=\"!isOnMobile\" [config]=\"{'suppressScrollY': true}\">\r\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\r\n </tn-custom-scrollbar>\r\n\r\n <ng-container *ngIf=\"isOnMobile\">\r\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"clock-wrapper\">\r\n <h1 class=\"clock\">{{currentDate | date:'HH:mm:ss'}}</h1>\r\n <h4 class=\"data-time\">{{getNgayTrongTuan()}}, ng\u00E0y {{currentDate | date:'dd/MM/yyyy'}}</h4>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #appSwitcher>\r\n <div class=\"div1111\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <span>\r\n <a class=\"bg-switcher\" (click)=\"switchApp(item)\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon\"></i>\r\n <span>{{ item.title | translate}}</span>\r\n </a>\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>",
41684
- providers: [ComponentContextService],
41685
- styles: ["body{background-color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.wrp-loader{display:inline-block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:101}.wrp-loader .loader{-webkit-animation:load4 1.3s linear infinite;animation:load4 1.3s linear infinite;border:2px solid #bcdbf5;border-radius:50%;border-top-color:#3192e1;color:#607d8b;display:block;font-size:10px;height:10px;width:10px}.modules-v2{align-items:center;background-image:url(/assets/images/background-splash.png);background-position:50%;background-repeat:no-repeat;background-size:cover;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:100}.modules-v2 div>span{border-radius:5px;box-shadow:1px 2px 9px 1px #dfd1d1;display:inline-block;height:120px;margin:10px;min-width:100px;white-space:normal;width:120px}.modules-v2 div>span>a{border-radius:5px;cursor:pointer;display:inline-block;display:flex;flex-direction:column;font-weight:700;height:100%;justify-content:space-evenly;position:relative}.modules-v2 div>span>a,.modules-v2 div>span>a>span{color:#fff;text-align:center;text-decoration:unset;width:100%}.modules-v2 div>span>a>span{display:inline-block;line-height:1.2;padding:0 5px}.modules-v2 div>span>a>i{font-size:3.5em;width:100%}.modules-v2 .module-icons{background:hsla(0,0%,100%,.9490196078431372);border-radius:10px;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804);color:#666;display:flex;flex-direction:column;justify-content:center;padding:40px 60px;text-align:center}.modules-v2 .module-icons h2{color:#271756;font-size:25px;margin-bottom:15px;margin-top:15px}.modules-v2 .module-icons h1{color:#2f70ac;font-size:35px;margin-bottom:0;margin-top:0}.modules-v2 .module-icons .img-title{margin-bottom:80px}.modules-v2 .module-icons .img-title img.tn-custom-logo{margin-bottom:30px}.modules-v2 .module-icons .img-title a.tn-icon-signin{align-items:center;background:#002c6c;border-radius:5px;color:#fff;cursor:pointer;display:inline-flex;justify-content:center;padding:10px}.modules-v2 .module-icons .img-title a.tn-icon-signin i{margin-right:5px}.modules-v2 .module-icons .div1111-wrapper{margin:0 auto 80px}.modules-v2 .module-icons .div1111-wrapper .div1111{display:flex;flex-wrap:wrap;white-space:nowrap;width:100%}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher{background:#fff;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher .app-switcher-item-icon{color:#2f70ac;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{color:#2f70ac;font-weight:500;text-shadow:none;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover{background:#002c6c;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804)}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover .app-switcher-item-icon,.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover span{color:#fff}.modules-v2 .module-icons .clock-wrapper{color:#fff;margin-bottom:auto;margin-top:auto;text-align:center}.modules-v2 .module-icons .clock-wrapper h4{color:#2f70ac;font-size:20px;font-weight:500;margin-bottom:0;margin-top:10px}.modules-v2 .module-icons .clock-wrapper h1{font-size:40px;margin-bottom:0}.modules-v2 .welcome-user{background:hsla(0,0%,100%,.9019607843137255);border-radius:10px;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804);color:#333;display:flex;padding:10px;position:absolute;right:20px;text-align:center;top:20px}.modules-v2 .welcome-user .wrp-login{align-items:center;color:#333;display:flex;flex-direction:column;margin:auto}.modules-v2 .welcome-user .wrp-login h2{font-size:20px;font-weight:500;margin-bottom:5px;margin-top:0}.modules-v2 .profile-image{align-items:center;display:flex;justify-content:center}.modules-v2 .profile-image .tn-full-name{font-size:18px;margin-right:10px}.modules-v2 .profile-image img{-o-object-fit:contain;background:#fff;border-radius:50%;height:40px;margin-right:10px;object-fit:contain;width:40px}.modules-v2 .profile-image .login{display:-ms-grid;display:grid;grid-gap:10px}.modules-v2 .profile-image .login a.tn-icon-signout{align-items:center;background:#002c6c;border-radius:50%;cursor:pointer;display:flex;height:40px;justify-content:center;width:40px}.modules-v2 .profile-image .login a.tn-icon-signout i{color:#edc16f;font-size:16px}@media (max-width:1368px){.modules-v2 .clock{font-size:1.5em;margin:0 20px}.modules-v2 .data-time{font-size:1em;margin:10px 0 20px}}@media (max-width:1200px){.modules-v2 .welcome-user{right:10px;top:10px}}@media (max-width:768px){.modules-v2 .module-icons .img-title .title h2{font-size:28px}.modules-v2 .module-icons .img-title .title h1{font-size:32px}}@media (max-width:640px){.modules-v2 .welcome-user{justify-content:flex-end;right:10px;top:10px;width:calc(100% - 20px)}.modules-v2 .module-icons{margin:10px;padding:20px}.modules-v2 .module-icons .img-title{margin-bottom:40px}.modules-v2 .module-icons .img-title .title h1{font-size:19px}.modules-v2 .module-icons .img-title .title h2{font-size:16px;margin-bottom:10px;margin-top:0}.modules-v2 .module-icons .div1111-wrapper{margin-bottom:50px}.modules-v2 .module-icons .div1111-wrapper .div1111{-ms-grid-columns:(minmax(100px,1fr))[3];display:-ms-grid;display:grid;grid-template-columns:repeat(3,minmax(100px,1fr))}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{font-size:14px}.modules-v2 .module-icons div>span{height:100px;width:100px}.modules-v2 .module-icons div>span>a>i{font-size:3em;top:15px}.modules-v2 .module-icons .clock-wrapper h4{font-size:16px;margin-top:5px}.modules-v2 .module-icons .clock-wrapper h1{font-size:30px}}@media (max-width:375px){.modules-v2 .module-icons .img-title{margin-bottom:0}.modules-v2 .module-icons .img-title img.tn-custom-logo{margin-bottom:10px;width:100px}.modules-v2 .module-icons .img-title .title{padding:0}.modules-v2 .module-icons .img-title .title h2{font-size:14px;margin-bottom:10px}.modules-v2 .module-icons .div1111-wrapper{margin-bottom:0}.modules-v2 .module-icons .div1111-wrapper .div1111{display:flex;justify-content:center}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{font-size:14px}}@-webkit-keyframes load4{0%,to{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes load4{0%,to{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}"]
41686
- },] }
41687
- ];
41688
- SplashComponentV2Component.ctorParameters = function () { return [
41689
- { type: i0.Injector },
41690
- { type: ModuleConfigService },
41691
- { type: PermissionService },
41692
- { type: ngxDeviceDetector.DeviceDetectorService },
41693
- { type: UserService },
41694
- { type: i3.Router },
41695
- { type: AuthenService },
41696
- { type: GlobalService }
41697
- ]; };
41698
-
41699
41925
  var SplashComponentV1Component = /** @class */ (function (_super) {
41700
41926
  __extends(SplashComponentV1Component, _super);
41701
41927
  function SplashComponentV1Component(injector, _moduleConfigService, _permissionService, _deviceDetectorService, _userService, _router, _authenService, _globalService) {
@@ -41903,6 +42129,213 @@
41903
42129
  { type: GlobalService }
41904
42130
  ]; };
41905
42131
 
42132
+ var SplashComponentV2Component = /** @class */ (function (_super) {
42133
+ __extends(SplashComponentV2Component, _super);
42134
+ function SplashComponentV2Component(injector, _moduleConfigService, _permissionService, _deviceDetectorService, _userService, _router, _authenService, _globalService) {
42135
+ var _this = _super.call(this, injector) || this;
42136
+ _this._moduleConfigService = _moduleConfigService;
42137
+ _this._permissionService = _permissionService;
42138
+ _this._deviceDetectorService = _deviceDetectorService;
42139
+ _this._userService = _userService;
42140
+ _this._router = _router;
42141
+ _this._authenService = _authenService;
42142
+ _this._globalService = _globalService;
42143
+ _this.defaultAvatar = '';
42144
+ _this.appSwitcherItems = [];
42145
+ _this.loaded = false;
42146
+ _this.currentDate = new Date();
42147
+ _this.showDefaultSetting = false;
42148
+ _this.fileApi = '';
42149
+ _this.isOnMobile = false;
42150
+ _this.daysInWeek = ['Chủ nhật', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'];
42151
+ _this.rootContext.fireEvent('MAIN_CONTENT_ONLY', true);
42152
+ _this.environment = _this._moduleConfigService.getConfig().environment;
42153
+ _this.defaultAvatar = _this.environment.appMetadata.main.defaultMaleAvatar;
42154
+ _this.fileApi = _this.environment.apiDomain.fileEndpoint;
42155
+ setInterval(function () {
42156
+ _this.currentDate = new Date();
42157
+ }, 1000);
42158
+ if (_this.rootContext.data.currentAppMetadata && _this.rootContext.data.currentAppMetadata && _this.rootContext.data.currentAppMetadata.showDefaultSetting != null && _this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined) {
42159
+ _this.showDefaultSetting = _this.rootContext.data.currentAppMetadata.showDefaultSetting;
42160
+ }
42161
+ else {
42162
+ if (_this.environment.appMetadata.main.showDefaultSetting != null && _this.environment.appMetadata.main.showDefaultSetting != undefined) {
42163
+ _this.showDefaultSetting = _this.environment.appMetadata.main.showDefaultSetting;
42164
+ }
42165
+ else {
42166
+ _this.showDefaultSetting = false;
42167
+ }
42168
+ }
42169
+ // Config for authentication
42170
+ _this._globalService.setHeaderState(false);
42171
+ _this._globalService.setMenuState(false);
42172
+ _this.underconstruction = _this.environment.underconstruction;
42173
+ return _this;
42174
+ }
42175
+ SplashComponentV2Component.prototype.ngOnInit = function () {
42176
+ var _this = this;
42177
+ if (this._deviceDetectorService.isMobile()) {
42178
+ this.isOnMobile = true;
42179
+ }
42180
+ if (this.rootContext.data.currentUser) {
42181
+ if (this.rootContext.data.currentUser.gender == 0) {
42182
+ this.defaultAvatar = this.environment.appMetadata.main.defaultFemaleAvatar;
42183
+ }
42184
+ else {
42185
+ this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
42186
+ }
42187
+ }
42188
+ this.rootContext.replaySubscribe(ComCtxConstants.ROOT.USER_LOADED, function (rs) {
42189
+ _this.currentUser = _this._userService.getCurrentUser();
42190
+ _this.loadAppMetadata();
42191
+ _this.loaded = true;
42192
+ });
42193
+ if (this.rootModel.allowAnonymous) {
42194
+ this.loaded = true;
42195
+ this.loadAppMetadata();
42196
+ }
42197
+ };
42198
+ SplashComponentV2Component.prototype.loadAppMetadata = function () {
42199
+ var _this = this;
42200
+ var prmsAppSwicherItem = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
42201
+ var arr, _a, _b, _i, ind, element, clientId, isAuthorized;
42202
+ return __generator(this, function (_c) {
42203
+ switch (_c.label) {
42204
+ case 0:
42205
+ arr = [];
42206
+ _a = [];
42207
+ for (_b in this.environment.appMetadata.appSwitcher)
42208
+ _a.push(_b);
42209
+ _i = 0;
42210
+ _c.label = 1;
42211
+ case 1:
42212
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
42213
+ ind = _a[_i];
42214
+ element = this.environment.appMetadata.appSwitcher[ind];
42215
+ clientId = this.environment.authenticationSettings.clientId;
42216
+ if (!(this.rootModel.allowAnonymous && element.allowAnonymous)) return [3 /*break*/, 2];
42217
+ arr.push(element);
42218
+ return [3 /*break*/, 4];
42219
+ case 2:
42220
+ if (!this.currentUser) return [3 /*break*/, 4];
42221
+ return [4 /*yield*/, this._permissionService.isAuthorized(element.code, (element.code + ".MODULE." + element.code).toUpperCase(), true)];
42222
+ case 3:
42223
+ isAuthorized = _c.sent();
42224
+ if (isAuthorized) {
42225
+ arr.push(element);
42226
+ }
42227
+ _c.label = 4;
42228
+ case 4:
42229
+ _i++;
42230
+ return [3 /*break*/, 1];
42231
+ case 5:
42232
+ resolve(arr);
42233
+ return [2 /*return*/];
42234
+ }
42235
+ });
42236
+ }); });
42237
+ prmsAppSwicherItem.then(function (rs) {
42238
+ _this.appSwitcherItems.length = 0;
42239
+ if (rs) {
42240
+ rs.forEach(function (element) {
42241
+ if (element.visible) {
42242
+ if (!_this.currentUser) { // allow anonymous
42243
+ _this.appSwitcherItems.push(element);
42244
+ }
42245
+ else {
42246
+ if (_this.currentUser.maNguoiHoc && _this.currentUser.issuperuser.toLowerCase() != 'true') {
42247
+ if (element.code.toLowerCase() == 'sv' || element.code.toLowerCase() == 'user') {
42248
+ _this.appSwitcherItems.push(element);
42249
+ }
42250
+ }
42251
+ else {
42252
+ _this.appSwitcherItems.push(element);
42253
+ }
42254
+ }
42255
+ }
42256
+ });
42257
+ }
42258
+ });
42259
+ };
42260
+ SplashComponentV2Component.prototype.switchApp = function (item) {
42261
+ this.loaded = false;
42262
+ if (item.target == '_blank') {
42263
+ if (!item.defaultRedirect) {
42264
+ item.defaultRedirect = '';
42265
+ }
42266
+ // NamNH tip trick cho mot so may bi loi item.url = 'main' -> redirect sai khi click vao cac phan he
42267
+ if (item.url == item.defaultRedirect) {
42268
+ item.url = '/' + item.code.toLowerCase();
42269
+ }
42270
+ var link = item.url + "/" + item.defaultRedirect;
42271
+ if (!link.startsWith('/') && !link.startsWith('http')) {
42272
+ link = '/' + link;
42273
+ }
42274
+ top.location.href = link;
42275
+ }
42276
+ else {
42277
+ if (item.defaultRedirect != '' && !this.rootContext.data.flags.menuTopOpenning) {
42278
+ this._router.navigateByUrl(item.defaultRedirect);
42279
+ this.rootContext.data.currentAppMetadata = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == item.code; });
42280
+ if (this.rootContext.data.currentAppMetadata && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined && this.rootContext.data.currentAppMetadata.showDefaultSetting != null) {
42281
+ this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting && this.showDefaultSetting;
42282
+ }
42283
+ }
42284
+ }
42285
+ };
42286
+ SplashComponentV2Component.prototype.logout = function () {
42287
+ this._authenService.logout();
42288
+ };
42289
+ SplashComponentV2Component.prototype.goToPersonal = function () {
42290
+ var userMenu = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == 'USER'; });
42291
+ this.switchApp(userMenu);
42292
+ };
42293
+ SplashComponentV2Component.prototype.getCurrentUserAvatar = function () {
42294
+ if (this.rootContext.data.currentUser && this.rootContext.data.currentUser.avatar) {
42295
+ return this.fileApi + "/file/public/" + this.rootContext.data.currentUser.avatar + "/Download";
42296
+ }
42297
+ else {
42298
+ return this.defaultAvatar;
42299
+ }
42300
+ };
42301
+ SplashComponentV2Component.prototype.getNgayTrongTuan = function () {
42302
+ return this.daysInWeek[this.currentDate.getDay()];
42303
+ };
42304
+ SplashComponentV2Component.prototype.showProfilePage = function () {
42305
+ if (this._userService.isSinhVienAccount()) {
42306
+ return false;
42307
+ }
42308
+ return true;
42309
+ };
42310
+ SplashComponentV2Component.prototype.ngOnDestroy = function () {
42311
+ _super.prototype.ngOnDestroy.call(this);
42312
+ this._globalService.setHeaderState(true);
42313
+ this._globalService.setMenuState(true);
42314
+ };
42315
+ SplashComponentV2Component.prototype.login = function () {
42316
+ this.rootContext.fireEvent('LOGIN');
42317
+ };
42318
+ return SplashComponentV2Component;
42319
+ }(ComponentBase));
42320
+ SplashComponentV2Component.decorators = [
42321
+ { type: i0.Component, args: [{
42322
+ selector: 'splash-component-v2',
42323
+ template: "<div *ngIf=\"!loaded\" class=\"wrp-loader\">\r\n <div class=\"loader\"></div>\r\n</div>\r\n<div *ngIf=\"loaded\" class=\"modules-v2\">\r\n <div class=\"welcome-user\">\r\n <div class=\"profile-image\">\r\n <div class=\"tn-full-name\">{{currentUser.fullName}}</div>\r\n <img class=\"custom-avatar\" [src-fallback]=\"defaultAvatar\" [src]=\"getCurrentUserAvatar()\" />\r\n <div *ngIf=\"currentUser\" class=\"login\">\r\n <a class=\"tn-icon-signout\" title=\"\u0110\u0103ng xu\u1EA5t\" (click)=\"logout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"module-icons\">\r\n <div class=\"img-title\">\r\n <img class=\"tn-custom-logo\" [src]=\"environment.appMetadata.main.logo\"\r\n [alt]=\"environment.appMetadata.main.owner\">\r\n <div class=\"title\">\r\n <h2>{{environment.appMetadata.main.title}}</h2>\r\n <h1>{{environment.appMetadata.main.owner}}</h1>\r\n </div>\r\n <div *ngIf=\"!currentUser\" class=\"login\">\r\n <a class=\"tn-icon-signin\" title=\"\u0110\u0103ng nh\u1EADp\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\u0110\u0103ng nh\u1EADp\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <div class=\"div1111-wrapper\">\r\n <tn-custom-scrollbar *ngIf=\"!isOnMobile\" [config]=\"{'suppressScrollY': true}\">\r\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\r\n </tn-custom-scrollbar>\r\n\r\n <ng-container *ngIf=\"isOnMobile\">\r\n <ng-container *ngTemplateOutlet=\"appSwitcher\"></ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"clock-wrapper\">\r\n <h1 class=\"clock\">{{currentDate | date:'HH:mm:ss'}}</h1>\r\n <h4 class=\"data-time\">{{getNgayTrongTuan()}}, ng\u00E0y {{currentDate | date:'dd/MM/yyyy'}}</h4>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #appSwitcher>\r\n <div class=\"div1111\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <span>\r\n <a class=\"bg-switcher\" (click)=\"switchApp(item)\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon\"></i>\r\n <span>{{ item.title | translate}}</span>\r\n </a>\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>",
42324
+ providers: [ComponentContextService],
42325
+ styles: ["body{background-color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.wrp-loader{display:inline-block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:101}.wrp-loader .loader{-webkit-animation:load4 1.3s linear infinite;animation:load4 1.3s linear infinite;border:2px solid #bcdbf5;border-radius:50%;border-top-color:#3192e1;color:#607d8b;display:block;font-size:10px;height:10px;width:10px}.modules-v2{align-items:center;background-image:url(/assets/images/background-splash.png);background-position:50%;background-repeat:no-repeat;background-size:cover;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:100}.modules-v2 div>span{border-radius:5px;box-shadow:1px 2px 9px 1px #dfd1d1;display:inline-block;height:120px;margin:10px;min-width:100px;white-space:normal;width:120px}.modules-v2 div>span>a{border-radius:5px;cursor:pointer;display:inline-block;display:flex;flex-direction:column;font-weight:700;height:100%;justify-content:space-evenly;position:relative}.modules-v2 div>span>a,.modules-v2 div>span>a>span{color:#fff;text-align:center;text-decoration:unset;width:100%}.modules-v2 div>span>a>span{display:inline-block;line-height:1.2;padding:0 5px}.modules-v2 div>span>a>i{font-size:3.5em;width:100%}.modules-v2 .module-icons{background:hsla(0,0%,100%,.9490196078431372);border-radius:10px;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804);color:#666;display:flex;flex-direction:column;justify-content:center;padding:40px 60px;text-align:center}.modules-v2 .module-icons h2{color:#271756;font-size:25px;margin-bottom:15px;margin-top:15px}.modules-v2 .module-icons h1{color:#2f70ac;font-size:35px;margin-bottom:0;margin-top:0}.modules-v2 .module-icons .img-title{margin-bottom:80px}.modules-v2 .module-icons .img-title img.tn-custom-logo{margin-bottom:30px}.modules-v2 .module-icons .img-title a.tn-icon-signin{align-items:center;background:#002c6c;border-radius:5px;color:#fff;cursor:pointer;display:inline-flex;justify-content:center;padding:10px}.modules-v2 .module-icons .img-title a.tn-icon-signin i{margin-right:5px}.modules-v2 .module-icons .div1111-wrapper{margin:0 auto 80px}.modules-v2 .module-icons .div1111-wrapper .div1111{display:flex;flex-wrap:wrap;white-space:nowrap;width:100%}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher{background:#fff;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher .app-switcher-item-icon{color:#2f70ac;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{color:#2f70ac;font-weight:500;text-shadow:none;transition:.3s}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover{background:#002c6c;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804)}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover .app-switcher-item-icon,.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher:hover span{color:#fff}.modules-v2 .module-icons .clock-wrapper{color:#fff;margin-bottom:auto;margin-top:auto;text-align:center}.modules-v2 .module-icons .clock-wrapper h4{color:#2f70ac;font-size:20px;font-weight:500;margin-bottom:0;margin-top:10px}.modules-v2 .module-icons .clock-wrapper h1{font-size:40px;margin-bottom:0}.modules-v2 .welcome-user{background:hsla(0,0%,100%,.9019607843137255);border-radius:10px;box-shadow:1px 2px 9px 1px rgba(39,23,86,.5215686274509804);color:#333;display:flex;padding:10px;position:absolute;right:20px;text-align:center;top:20px}.modules-v2 .welcome-user .wrp-login{align-items:center;color:#333;display:flex;flex-direction:column;margin:auto}.modules-v2 .welcome-user .wrp-login h2{font-size:20px;font-weight:500;margin-bottom:5px;margin-top:0}.modules-v2 .profile-image{align-items:center;display:flex;justify-content:center}.modules-v2 .profile-image .tn-full-name{font-size:18px;margin-right:10px}.modules-v2 .profile-image img{-o-object-fit:contain;background:#fff;border-radius:50%;height:40px;margin-right:10px;object-fit:contain;width:40px}.modules-v2 .profile-image .login{display:-ms-grid;display:grid;grid-gap:10px}.modules-v2 .profile-image .login a.tn-icon-signout{align-items:center;background:#002c6c;border-radius:50%;cursor:pointer;display:flex;height:40px;justify-content:center;width:40px}.modules-v2 .profile-image .login a.tn-icon-signout i{color:#edc16f;font-size:16px}@media (max-width:1368px){.modules-v2 .clock{font-size:1.5em;margin:0 20px}.modules-v2 .data-time{font-size:1em;margin:10px 0 20px}}@media (max-width:1200px){.modules-v2 .welcome-user{right:10px;top:10px}}@media (max-width:768px){.modules-v2 .module-icons .img-title .title h2{font-size:28px}.modules-v2 .module-icons .img-title .title h1{font-size:32px}}@media (max-width:640px){.modules-v2 .welcome-user{justify-content:flex-end;right:10px;top:10px;width:calc(100% - 20px)}.modules-v2 .module-icons{margin:10px;padding:20px}.modules-v2 .module-icons .img-title{margin-bottom:40px}.modules-v2 .module-icons .img-title .title h1{font-size:19px}.modules-v2 .module-icons .img-title .title h2{font-size:16px;margin-bottom:10px;margin-top:0}.modules-v2 .module-icons .div1111-wrapper{margin-bottom:50px}.modules-v2 .module-icons .div1111-wrapper .div1111{-ms-grid-columns:(minmax(100px,1fr))[3];display:-ms-grid;display:grid;grid-template-columns:repeat(3,minmax(100px,1fr))}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{font-size:14px}.modules-v2 .module-icons div>span{height:100px;width:100px}.modules-v2 .module-icons div>span>a>i{font-size:3em;top:15px}.modules-v2 .module-icons .clock-wrapper h4{font-size:16px;margin-top:5px}.modules-v2 .module-icons .clock-wrapper h1{font-size:30px}}@media (max-width:375px){.modules-v2 .module-icons .img-title{margin-bottom:0}.modules-v2 .module-icons .img-title img.tn-custom-logo{margin-bottom:10px;width:100px}.modules-v2 .module-icons .img-title .title{padding:0}.modules-v2 .module-icons .img-title .title h2{font-size:14px;margin-bottom:10px}.modules-v2 .module-icons .div1111-wrapper{margin-bottom:0}.modules-v2 .module-icons .div1111-wrapper .div1111{display:flex;justify-content:center}.modules-v2 .module-icons .div1111-wrapper .div1111 .bg-switcher span{font-size:14px}}@-webkit-keyframes load4{0%,to{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes load4{0%,to{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}"]
42326
+ },] }
42327
+ ];
42328
+ SplashComponentV2Component.ctorParameters = function () { return [
42329
+ { type: i0.Injector },
42330
+ { type: ModuleConfigService },
42331
+ { type: PermissionService },
42332
+ { type: ngxDeviceDetector.DeviceDetectorService },
42333
+ { type: UserService },
42334
+ { type: i3.Router },
42335
+ { type: AuthenService },
42336
+ { type: GlobalService }
42337
+ ]; };
42338
+
41906
42339
  var DynamicNodeComponent = /** @class */ (function (_super) {
41907
42340
  __extends(DynamicNodeComponent, _super);
41908
42341
  function DynamicNodeComponent(injector) {
@@ -42808,10 +43241,10 @@
42808
43241
  this.data.data = {};
42809
43242
  }
42810
43243
  if (this.data.data.departmentRules == null) {
42811
- this.data.data.departmentRules = [exports.EnumUserRule.NGUOI_NHAN];
43244
+ this.data.data.departmentRules = [];
42812
43245
  }
42813
43246
  if (this.data.data.departmentViewRules == null) {
42814
- this.data.data.departmentViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
43247
+ this.data.data.departmentViewRules = [exports.EnumUserRule.NGUOI_NHAN, exports.EnumUserRule.NGUOI_THEO_DOI];
42815
43248
  }
42816
43249
  }
42817
43250
  };
@@ -42910,10 +43343,10 @@
42910
43343
  this.data.data = {};
42911
43344
  }
42912
43345
  if (this.data.data.groupRules == null) {
42913
- this.data.data.groupRules = [exports.EnumUserRule.NGUOI_NHAN];
43346
+ this.data.data.groupRules = [];
42914
43347
  }
42915
43348
  if (this.data.data.groupViewRules == null) {
42916
- this.data.data.groupViewRules = [exports.EnumUserRule.NGUOI_THEO_DOI];
43349
+ this.data.data.groupViewRules = [exports.EnumUserRule.NGUOI_NHAN, exports.EnumUserRule.NGUOI_THEO_DOI];
42917
43350
  }
42918
43351
  }
42919
43352
  };
@@ -45177,17 +45610,24 @@
45177
45610
  });
45178
45611
  };
45179
45612
  TnAppNotificationComponent.prototype.readById = function (data) {
45180
- var _this = this;
45181
- data.readedTime = new Date();
45182
- this._notificationService.markReadById(data.id).then(function (res) {
45183
- _this.rootContext.fireEvent(ComCtxConstants.NOTIFICATION.NOTIFICATION_RELOAD);
45184
- }).catch(function (err) { return _this._commonService.handleError(err, _this._injector); });
45613
+ return __awaiter(this, void 0, void 0, function () {
45614
+ var _this = this;
45615
+ return __generator(this, function (_b) {
45616
+ switch (_b.label) {
45617
+ case 0:
45618
+ data.readedTime = new Date();
45619
+ return [4 /*yield*/, this._notificationService.markReadById(data.id).then(function (res) {
45620
+ _this.rootContext.fireEvent(ComCtxConstants.NOTIFICATION.NOTIFICATION_RELOAD);
45621
+ }).catch(function (err) { return _this._commonService.handleError(err, _this._injector); })];
45622
+ case 1:
45623
+ _b.sent();
45624
+ return [2 /*return*/];
45625
+ }
45626
+ });
45627
+ });
45185
45628
  };
45186
45629
  TnAppNotificationComponent.prototype.isHasAvatar = function (item) {
45187
- if (item.avatarId) {
45188
- return true;
45189
- }
45190
- return false;
45630
+ return !!item.avatarId;
45191
45631
  };
45192
45632
  TnAppNotificationComponent.prototype.isReaded = function (item) {
45193
45633
  return !!item.readedTime;
@@ -45196,30 +45636,42 @@
45196
45636
  return this.apiUploadUrl + "/public/" + item + "/Download";
45197
45637
  };
45198
45638
  TnAppNotificationComponent.prototype.goToLink = function (item) {
45199
- if (!this.isReaded(item)) {
45200
- this.readById(item);
45201
- this.totalUnRead--;
45202
- }
45203
- // Save current path to go back
45204
- localStorage.setItem('currentUrl', top.location.href);
45205
- localStorage.setItem('currentPathName', top.location.pathname);
45206
- if (item.messageLink) {
45207
- var link = item.messageLink;
45208
- // NamNH - Để top location href vì có thể click xem thông báo từ phân hệ khác, sau tối ưu nếu cùng phân hệ thì router navigate, còn khác phân hệ thì location href
45209
- top.location.href = link;
45210
- // if (this._router.isActive(link, false)) {
45211
- // this.rootContext.fireEvent(ComCtxConstants.ROOT.NOTI_CLICK, link);
45212
- // } else {
45213
- // if (this.rootModel.fragments) {
45214
- // for (const item of this.rootModel.fragments) {
45215
- // if (!item.closed) {
45216
- // item.unsubscribe();
45217
- // }
45218
- // }
45219
- // }
45220
- // this._router.navigateByUrl(link);
45221
- // }
45222
- }
45639
+ return __awaiter(this, void 0, void 0, function () {
45640
+ var link;
45641
+ return __generator(this, function (_b) {
45642
+ switch (_b.label) {
45643
+ case 0:
45644
+ if (!!this.isReaded(item)) return [3 /*break*/, 2];
45645
+ return [4 /*yield*/, this.readById(item)];
45646
+ case 1:
45647
+ _b.sent();
45648
+ this.totalUnRead--;
45649
+ _b.label = 2;
45650
+ case 2:
45651
+ // Save current path to go back
45652
+ localStorage.setItem('currentUrl', top.location.href);
45653
+ localStorage.setItem('currentPathName', top.location.pathname);
45654
+ if (item.messageLink) {
45655
+ link = item.messageLink;
45656
+ // NamNH - Để top location href vì có thể click xem thông báo từ phân hệ khác, sau tối ưu nếu cùng phân hệ thì router navigate, còn khác phân hệ thì location href
45657
+ top.location.href = link;
45658
+ // if (this._router.isActive(link, false)) {
45659
+ // this.rootContext.fireEvent(ComCtxConstants.ROOT.NOTI_CLICK, link);
45660
+ // } else {
45661
+ // if (this.rootModel.fragments) {
45662
+ // for (const item of this.rootModel.fragments) {
45663
+ // if (!item.closed) {
45664
+ // item.unsubscribe();
45665
+ // }
45666
+ // }
45667
+ // }
45668
+ // this._router.navigateByUrl(link);
45669
+ // }
45670
+ }
45671
+ return [2 /*return*/];
45672
+ }
45673
+ });
45674
+ });
45223
45675
  };
45224
45676
  TnAppNotificationComponent.prototype.headerClick = function (event) {
45225
45677
  event.preventDefault();
@@ -45230,7 +45682,9 @@
45230
45682
  this.bounceNoti = false;
45231
45683
  };
45232
45684
  TnAppNotificationComponent.prototype.handleClicked = function () {
45233
- this._router.navigate(["user/managemant-notification"]);
45685
+ var _a;
45686
+ var thongBaoDomain = (_a = this.environment.clientDomain.thongbaoDomain) !== null && _a !== void 0 ? _a : '';
45687
+ window.open(thongBaoDomain);
45234
45688
  };
45235
45689
  return TnAppNotificationComponent;
45236
45690
  }(ComponentBase));
@@ -48351,7 +48805,8 @@
48351
48805
  ruleInWorkflows: [],
48352
48806
  departmentIds: (_a = this.action.data.departmentIds) !== null && _a !== void 0 ? _a : [],
48353
48807
  groupIds: (_b = this.action.data.groupIds) !== null && _b !== void 0 ? _b : [],
48354
- roleIds: (_c = this.action.data.roleIds) !== null && _c !== void 0 ? _c : []
48808
+ roleIds: (_c = this.action.data.roleIds) !== null && _c !== void 0 ? _c : [],
48809
+ type: exports.EnumProcessWorkflowType.EDIT
48355
48810
  };
48356
48811
  this.dataOnlyView = {
48357
48812
  rules: [],
@@ -48359,7 +48814,8 @@
48359
48814
  ruleInWorkflows: [],
48360
48815
  departmentIds: (_d = this.action.data.departmentViewIds) !== null && _d !== void 0 ? _d : [],
48361
48816
  groupIds: (_e = this.action.data.groupViewIds) !== null && _e !== void 0 ? _e : [],
48362
- roleIds: (_f = this.action.data.roleViewIds) !== null && _f !== void 0 ? _f : []
48817
+ roleIds: (_f = this.action.data.roleViewIds) !== null && _f !== void 0 ? _f : [],
48818
+ type: exports.EnumProcessWorkflowType.VIEW
48363
48819
  };
48364
48820
  this.addDistinct(this.dataAllowEdit.userIds, this.initValueForTargetForm.lstUserId);
48365
48821
  this.addDistinct(this.dataAllowEdit.departmentIds, this.initValueForTargetForm.lstDonViId);
@@ -48512,11 +48968,16 @@
48512
48968
  if (!this.data.roleIds)
48513
48969
  this.data.roleIds = [];
48514
48970
  this.setting.baseService = this._stateMachinesService;
48971
+ // set text label
48972
+ var txtLabel = 'nhận xử lý';
48973
+ if (this.data.type === exports.EnumProcessWorkflowType.VIEW) {
48974
+ txtLabel = 'theo dõi';
48975
+ }
48515
48976
  this.setting.schema = [
48516
- this._createUserPickerControl('userIds', 'Người nhận xử lý'),
48977
+ this._createUserPickerControl('userIds', "Ng\u01B0\u1EDDi " + txtLabel),
48517
48978
  // this.createUserPickerControl('idCapTrenGanNhats', 'Cán bộ cấp trên gần nhất'),
48518
- this._createCoCauToChucControl('departmentIds', 'Đơn vị'),
48519
- this._createUserGroupPickerControl('groupIds', 'Nhóm người dùng'),
48979
+ this._createCoCauToChucControl('departmentIds', "\u0110\u01A1n v\u1ECB " + txtLabel),
48980
+ this._createUserGroupPickerControl('groupIds', "Nh\u00F3m ng\u01B0\u1EDDi " + txtLabel),
48520
48981
  ];
48521
48982
  };
48522
48983
  ProcessWorkflowTargetComponent.prototype._createUserPickerControl = function (field, label, multiple) {
@@ -49677,196 +50138,496 @@
49677
50138
  workflowSetting: [{ type: i0.Input }]
49678
50139
  };
49679
50140
 
49680
- var WorkflowPickerComponent = /** @class */ (function (_super) {
49681
- __extends(WorkflowPickerComponent, _super);
49682
- function WorkflowPickerComponent(_injector, _workflowSettingsService, _stateMachinesService) {
50141
+ var WorkflowPermissionFormComponent = /** @class */ (function (_super) {
50142
+ __extends(WorkflowPermissionFormComponent, _super);
50143
+ function WorkflowPermissionFormComponent(_injector, _workflowPermissionService, _workflowPermissionDetailService, _userGroupService) {
49683
50144
  var _this = _super.call(this, _injector) || this;
49684
50145
  _this._injector = _injector;
49685
- _this._workflowSettingsService = _workflowSettingsService;
49686
- _this._stateMachinesService = _stateMachinesService;
49687
- _this.showButtonSave = false;
49688
- _this.onSaved = new i0.EventEmitter();
49689
- _this.onCancel = new i0.EventEmitter();
49690
- _this.onSaveSetting = new i0.EventEmitter();
49691
- _this.dicMachinesData = {};
49692
- _this.readyCrudForm = false;
49693
- _this.autoGetDetail = false;
49694
- _this.autoSave = false;
50146
+ _this._workflowPermissionService = _workflowPermissionService;
50147
+ _this._workflowPermissionDetailService = _workflowPermissionDetailService;
50148
+ _this._userGroupService = _userGroupService;
49695
50149
  return _this;
49696
50150
  }
49697
- WorkflowPickerComponent.prototype.ngOnInit = function () {
49698
- var _this = this;
49699
- this.setting.baseService = this._workflowSettingsService;
50151
+ WorkflowPermissionFormComponent.prototype.ngOnInit = function () {
50152
+ _super.prototype.ngOnInit.call(this);
50153
+ this.setting.baseService = this._workflowPermissionService;
50154
+ this._workflowPermissionService.changeEndpoint(this.businessSetting.baseService);
50155
+ var dataSourcePermission = DataSourcePermissionBase.map(function (q) { return (Object.assign(Object.assign({}, q), { disabled: true })); });
49700
50156
  this.setting.schema = [
49701
- new DropdownControlSchema({
49702
- field: '_workflowCodes',
49703
- label: 'Danh sách quy trình',
49704
- multiple: true,
49705
- baseService: this._stateMachinesService,
49706
- valueField: 'code',
49707
- displayField: 'title',
49708
- onChanged: function (evt) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
49709
- switch (_a.label) {
49710
- case 0: return [4 /*yield*/, this.handleChangeWorkflow(evt)];
49711
- case 1: return [2 /*return*/, _a.sent()];
49712
- }
49713
- }); }); },
49714
- onAdjustedValue: function (evt) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
49715
- switch (_a.label) {
49716
- case 0: return [4 /*yield*/, this.handleChangeWorkflow(evt)];
49717
- case 1: return [2 /*return*/, _a.sent()];
49718
- }
49719
- }); }); },
49720
- required: true
49721
- // onReady: async (evt: EventData) => await this.handleChangeWorkflow(evt)
49722
- }),
49723
- new DropdownControlSchema({
49724
- field: 'workflowCode',
49725
- label: 'Quy trình mặc định',
49726
- valueField: 'code',
49727
- displayField: 'title',
49728
- onChanged: function (evt) { return _this.handleChangeWorkflowDefault(evt); }
49729
- }),
49730
- new CustomControlSchema({
49731
- field: 'designer',
49732
- label: this._translateService.instant('Sơ đồ trạng thái'),
49733
- mdWidth: 12
50157
+ this._createUserPickerControl('userIds', 'Người dùng'),
50158
+ this._createCoCauToChucControl('donViIds', 'Đơn vị'),
50159
+ this._createUserGroupPickerControl('groupIds', 'Nhóm người dùng'),
50160
+ new CheckBoxListControlSchema({
50161
+ field: 'lstPermission',
50162
+ label: 'Quyền khả dụng',
50163
+ dataSource: dataSourcePermission
49734
50164
  })
49735
50165
  ];
49736
- this.model.data = this.data;
49737
- this.afterGetSetting();
49738
- _super.prototype.ngOnInit.call(this);
49739
50166
  };
49740
- WorkflowPickerComponent.prototype.onFormInitialized = function (evt) {
50167
+ WorkflowPermissionFormComponent.prototype._createUserPickerControl = function (field, label, multiple) {
50168
+ if (multiple === void 0) { multiple = true; }
50169
+ var control = createUserPickerControl(field, label);
50170
+ control.multiple = multiple;
50171
+ return control;
50172
+ };
50173
+ WorkflowPermissionFormComponent.prototype._createCoCauToChucControl = function (field, label) {
50174
+ return createOrgPickerControl(field, label);
50175
+ };
50176
+ WorkflowPermissionFormComponent.prototype._createUserGroupPickerControl = function (field, label) {
50177
+ return createUserGroupPickerControl(this._userGroupService, field, label);
50178
+ };
50179
+ WorkflowPermissionFormComponent.prototype.onFormInitialized = function (constrols) {
49741
50180
  return __awaiter(this, void 0, void 0, function () {
49742
50181
  return __generator(this, function (_a) {
49743
- return [2 /*return*/];
50182
+ switch (_a.label) {
50183
+ case 0:
50184
+ // tiền xử lý dữ liệu (ví dụ tổng hợp datasource), trước khi gọi api get detail
50185
+ return [4 /*yield*/, this.getItemPermissionCurrent()];
50186
+ case 1:
50187
+ // tiền xử lý dữ liệu (ví dụ tổng hợp datasource), trước khi gọi api get detail
50188
+ _a.sent();
50189
+ return [2 /*return*/];
50190
+ }
49744
50191
  });
49745
50192
  });
49746
50193
  };
49747
- WorkflowPickerComponent.prototype.afterGetSetting = function () {
49748
- var _this = this;
49749
- if (!this.model.data) {
49750
- this.model.data = {};
49751
- this.model.formState = exports.FormState.ADD;
49752
- }
49753
- else {
49754
- if (this.model.data.workflowCodes) {
49755
- this.model.data._workflowCodes = this.model.data.workflowCodes.split(',');
49756
- this.model.data._workflowCodes.forEach(function (wfCode) {
49757
- _this.dicMachinesData[wfCode] = {
49758
- machines: [],
49759
- connections: []
49760
- };
49761
- });
49762
- }
49763
- this.model.formState = exports.FormState.EDIT;
49764
- }
49765
- this.readyCrudForm = true;
49766
- };
49767
- WorkflowPickerComponent.prototype.handleChangeWorkflow = function (evt) {
50194
+ WorkflowPermissionFormComponent.prototype.getItemPermissionCurrent = function () {
49768
50195
  return __awaiter(this, void 0, void 0, function () {
49769
- var dataSourceSelected_1, index, codeDeleted, dataMachines;
49770
- var _this = this;
50196
+ var itemPermission;
49771
50197
  return __generator(this, function (_a) {
49772
50198
  switch (_a.label) {
49773
- case 0:
49774
- if (!(this.model.data._workflowCodes && this.model.data._workflowCodes.length)) return [3 /*break*/, 2];
49775
- dataSourceSelected_1 = evt.formControls['_workflowCodes']._component.dataSourceInternal
49776
- .filter(function (q) { return _this.model.data._workflowCodes.some(function (x) { return x == q.value.code; }); })
49777
- .map(function (q) { return q.value; });
49778
- evt.formControls['workflowCode'].dataSource = dataSourceSelected_1;
49779
- if (!evt.rootModel.workflowCode || !dataSourceSelected_1.some(function (x) { return x.code == evt.rootModel.workflowCode; })) {
49780
- evt.rootModel.workflowCode = this.model.data._workflowCodes[0];
49781
- }
49782
- else {
49783
- index = this.model.data._workflowCodes.findIndex(function (q) { return q == evt.rootModel.workflowCode; });
49784
- if (index > 0) {
49785
- codeDeleted = this.model.data._workflowCodes.splice(index, 1);
49786
- this.model.data._workflowCodes.unshift(codeDeleted);
49787
- evt.rootModel._workflowCodes = this.model.data._workflowCodes;
49788
- }
49789
- }
49790
- this.model.data._workflowCodes.forEach(function (wfCode) {
49791
- _this.dicMachinesData[wfCode] = {
49792
- ten: dataSourceSelected_1.find(function (q) { return q.code == wfCode; }).title,
49793
- machines: [],
49794
- connections: []
49795
- };
49796
- });
49797
- return [4 /*yield*/, this._stateMachinesService.getAll([
49798
- this.newFilter('code', exports.Operator.in, this.model.data._workflowCodes)
49799
- ])];
50199
+ case 0: return [4 /*yield*/, this._workflowPermissionDetailService.changeEndpoint(this.businessSetting.baseService)
50200
+ .getDetailByFilter([
50201
+ this.newFilter('itemId', exports.Operator.equal, this.itemId),
50202
+ this.newFilter('userId', exports.Operator.equal, this._userService.getId())
50203
+ ])];
49800
50204
  case 1:
49801
- dataMachines = (_a.sent()).data;
49802
- dataMachines.forEach(function (data) {
49803
- _this.dicMachinesData[data.code].machines = [];
49804
- _this.dicMachinesData[data.code].connections = [];
49805
- if (data.data) {
49806
- _this.dicMachinesData[data.code] = Object.assign(Object.assign({}, JSON.parse(data.data)), { ten: data.title });
49807
- }
49808
- });
49809
- return [3 /*break*/, 3];
49810
- case 2:
49811
- evt.formControls['workflowCode'].dataSource = [];
49812
- evt.rootModel.workflowCode = null;
49813
- _a.label = 3;
49814
- case 3: return [2 /*return*/];
50205
+ itemPermission = (_a.sent()).data;
50206
+ if (itemPermission) {
50207
+ this.formControls['lstPermission'].dataSource.forEach(function (item) {
50208
+ if ((itemPermission.permission & item.id) == item.id) {
50209
+ item.disabled = false;
50210
+ }
50211
+ });
50212
+ }
50213
+ return [2 /*return*/];
49815
50214
  }
49816
50215
  });
49817
50216
  });
49818
50217
  };
49819
- WorkflowPickerComponent.prototype.handleChangeWorkflowDefault = function (evt) {
49820
- var _this = this;
49821
- if (!evt.rootModel.workflowCode)
49822
- return;
49823
- if (this.model.data._workflowCodes && this.model.data._workflowCodes.length) {
49824
- var index = this.model.data._workflowCodes.findIndex(function (q) { return q == _this.model.data.workflowCode; });
49825
- if (index > 0) {
49826
- var codeDeleteds = this.model.data._workflowCodes.splice(index, 1);
49827
- this.model.data._workflowCodes.unshift(codeDeleteds[0]);
49828
- var itemDeleteds = evt.rootModel._workflowCodes.splice(index, 1);
49829
- evt.rootModel._workflowCodes.unshift(itemDeleteds[0]);
49830
- }
49831
- }
49832
- };
49833
- WorkflowPickerComponent.prototype.handleCancelWorkflow = function (event) {
49834
- var _this = this;
49835
- this._notifierService.showConfirm('Bạn có chắc chắn muốn hủy bỏ quy trình nghiệp vụ')
49836
- .then(function (res) {
49837
- if (!res)
49838
- return;
49839
- _this._workflowSettingsService.delete(_this.model.data.id)
49840
- .then(function (res) { return _this.handleResponse(res, 'Hủy bỏ quy trình nghiệp vụ thành công', function (f) {
49841
- _this.onSaved.emit();
49842
- }); });
50218
+ WorkflowPermissionFormComponent.prototype.modifyDetailData = function (data) {
50219
+ return __awaiter(this, void 0, void 0, function () {
50220
+ return __generator(this, function (_a) {
50221
+ // xử lý dữ liệu lấy từ get detail về
50222
+ if (data.userIds) {
50223
+ data.userIds = data.userIds.split(',');
50224
+ }
50225
+ if (data.donViIds) {
50226
+ data.donViIds = data.donViIds.split(',');
50227
+ }
50228
+ if (data.groupIds) {
50229
+ data.groupIds = data.groupIds.split(',');
50230
+ }
50231
+ data.lstPermission = [];
50232
+ if (data.permission) {
50233
+ if ((data.permission & exports.PermissionBase.READ)) {
50234
+ data.lstPermission.push(exports.PermissionBase.READ);
50235
+ }
50236
+ if ((data.permission & exports.PermissionBase.EDIT)) {
50237
+ data.lstPermission.push(exports.PermissionBase.EDIT);
50238
+ }
50239
+ if ((data.permission & exports.PermissionBase.DELETE)) {
50240
+ data.lstPermission.push(exports.PermissionBase.DELETE);
50241
+ }
50242
+ }
50243
+ return [2 /*return*/];
50244
+ });
49843
50245
  });
49844
50246
  };
49845
- WorkflowPickerComponent.prototype.onBeforeSave = function () {
49846
- this.model.data.workflowCodes = this.model.data._workflowCodes.toString();
49847
- };
49848
- WorkflowPickerComponent.prototype.handleManualSave = function () {
49849
- this.model.submitting = false;
49850
- this.onSaveSetting.emit(this.model.data);
50247
+ WorkflowPermissionFormComponent.prototype.validateForm = function () {
50248
+ return __awaiter(this, void 0, void 0, function () {
50249
+ var itemMissings;
50250
+ return __generator(this, function (_a) {
50251
+ itemMissings = [];
50252
+ if (!this.isNotNullArray(this.model.data.userIds)
50253
+ && !this.isNotNullArray(this.model.data.donViIds)
50254
+ && !this.isNotNullArray(this.model.data.groupIds)) {
50255
+ itemMissings.push('người muốn phân quyền');
50256
+ }
50257
+ if (!this.isNotNullArray(this.model.data.lstPermission)) {
50258
+ itemMissings.push('quyền muốn phân');
50259
+ }
50260
+ if (itemMissings.length) {
50261
+ this._notifierService.showWarning("B\u1EA1n ph\u1EA3i nh\u1EADp " + itemMissings.join(', '));
50262
+ return [2 /*return*/, false];
50263
+ }
50264
+ return [2 /*return*/, true];
50265
+ });
50266
+ });
49851
50267
  };
49852
- return WorkflowPickerComponent;
49853
- }(DataFormBase));
49854
- WorkflowPickerComponent.decorators = [
49855
- { type: i0.Component, args: [{
49856
- selector: 'workflow-picker',
49857
- template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #designer>\r\n <div *ngFor=\"let wfCode of model.data._workflowCodes\">\r\n <div class=\"title-workflow\">\r\n Quy tr\u00ECnh {{dicMachinesData[wfCode].ten}} ({{wfCode}})\r\n <span *ngIf=\"wfCode == model.data.workflowCode\" class=\"pi pi-star\" pTooltip=\"\u0110\u00E2y l\u00E0 quy tr\u00ECnh ch\u00EDnh\"\r\n tooltipPosition=\"top\"></span>\r\n </div>\r\n <div class=\"state-machines-container\">\r\n <statemachines-designer #designer [data]=\"dicMachinesData[wfCode]\" [viewOnly]=\"true\">\r\n </statemachines-designer>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</crud-form>\r\n<div *ngIf=\"showButtonSave\" class=\"container-button-workflow\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'L\u01B0u c\u1EA5u h\u00ECnh' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n</div>",
49858
- providers: [ComponentContextService],
49859
- styles: [".title-workflow{font-size:.9em;font-weight:700;padding:1em 0 .5em}.title-workflow .pi-star{color:orange}.state-machines-container{border:1px solid #ced4da;border-radius:3px}.container-button-workflow{background:#fff;border-top:1px solid #ddd;bottom:0;padding:.5em;position:-webkit-sticky;position:sticky;text-align:right;z-index:10}"]
49860
- },] }
49861
- ];
49862
- WorkflowPickerComponent.ctorParameters = function () { return [
49863
- { type: i0.Injector },
49864
- { type: WorkflowSettingsService },
49865
- { type: StateMachinesService }
49866
- ]; };
49867
- WorkflowPickerComponent.propDecorators = {
49868
- parentSetting: [{ type: i0.Input }],
49869
- data: [{ type: i0.Input }],
50268
+ WorkflowPermissionFormComponent.prototype.onBeforeSave = function () {
50269
+ this.model.data.tableName = this.businessSetting.baseService.entityName;
50270
+ this.model.data.workflowCode = DummyWorkflowCode;
50271
+ this.model.data.itemId = this.itemId;
50272
+ if (this.model.data.userIds) {
50273
+ this.model.data.userIds = this.model.data.userIds.toString();
50274
+ }
50275
+ if (this.model.data.donViIds) {
50276
+ this.model.data.donViIds = this.model.data.donViIds.toString();
50277
+ }
50278
+ if (this.model.data.groupIds) {
50279
+ this.model.data.groupIds = this.model.data.groupIds.toString();
50280
+ }
50281
+ if (this.model.data.lstPermission) {
50282
+ var permission = 0;
50283
+ if (this.model.data.lstPermission & exports.PermissionBase.READ) {
50284
+ permission = permission | exports.PermissionBase.READ;
50285
+ }
50286
+ if (this.model.data.lstPermission & exports.PermissionBase.EDIT) {
50287
+ permission = permission | exports.PermissionBase.EDIT;
50288
+ }
50289
+ if (this.model.data.lstPermission & exports.PermissionBase.DELETE) {
50290
+ permission = permission | exports.PermissionBase.DELETE;
50291
+ }
50292
+ this.model.data.permission = permission;
50293
+ }
50294
+ };
50295
+ WorkflowPermissionFormComponent.prototype.getPromiseActionInsert = function () {
50296
+ return this._workflowPermissionService.insertPermission(this.model.data);
50297
+ };
50298
+ WorkflowPermissionFormComponent.prototype.getPromiseActionUpdate = function () {
50299
+ return this._workflowPermissionService.updatePermission(this.model.data);
50300
+ };
50301
+ return WorkflowPermissionFormComponent;
50302
+ }(DataFormBase));
50303
+ WorkflowPermissionFormComponent.decorators = [
50304
+ { type: i0.Component, args: [{
50305
+ selector: 'workflow-permission-form',
50306
+ template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n",
50307
+ providers: [ComponentContextService],
50308
+ styles: [""]
50309
+ },] }
50310
+ ];
50311
+ WorkflowPermissionFormComponent.ctorParameters = function () { return [
50312
+ { type: i0.Injector },
50313
+ { type: WorkflowPermissionService },
50314
+ { type: WorkflowPermissionDetailService },
50315
+ { type: UserGroupRealService }
50316
+ ]; };
50317
+ WorkflowPermissionFormComponent.propDecorators = {
50318
+ businessSetting: [{ type: i0.Input }],
50319
+ itemId: [{ type: i0.Input }]
50320
+ };
50321
+
50322
+ var WorkflowPermissionComponent = /** @class */ (function (_super) {
50323
+ __extends(WorkflowPermissionComponent, _super);
50324
+ function WorkflowPermissionComponent(_injector, _workflowPermissionService, _coCauToChucService, _userGroupService) {
50325
+ var _this = _super.call(this, _injector) || this;
50326
+ _this._injector = _injector;
50327
+ _this._workflowPermissionService = _workflowPermissionService;
50328
+ _this._coCauToChucService = _coCauToChucService;
50329
+ _this._userGroupService = _userGroupService;
50330
+ _this.searchSchema = {};
50331
+ _this.searchData = {};
50332
+ return _this;
50333
+ }
50334
+ WorkflowPermissionComponent.prototype.ngOnInit = function () {
50335
+ this.setting.baseService = this._workflowPermissionService;
50336
+ this._workflowPermissionService.changeEndpoint(this.businessSetting.baseService);
50337
+ this.setting.title = '';
50338
+ this.setting.disableShare = true;
50339
+ this.setting.hiddenSettingPermission = true;
50340
+ this.setting.hiddenSettingWorkflow = true;
50341
+ this.setting.hiddenSettingWorkflowNew = true;
50342
+ this.setting.modelSchemas = [
50343
+ new ModelSchema({ field: 'userIds', name: 'Người dùng', fullName: 'Người dùng', description: 'Người dùng' }),
50344
+ new ModelSchema({ field: 'donViIds', name: 'Đơn vị', fullName: 'Đơn vị', description: 'Đơn vị' }),
50345
+ new ModelSchema({ field: 'groupIds', name: 'Nhóm người dùng', fullName: 'Nhóm người dùng', description: 'Nhóm người dùng' }),
50346
+ new ModelSchema({ field: 'permission', dataType: 'boolean', name: 'Sử dụng', fullName: 'Sử dụng', description: 'Sử dụng' })
50347
+ ];
50348
+ this.setting.cols = [
50349
+ new ColumnSchemaBase({
50350
+ field: 'userIds',
50351
+ baseService: this._userService,
50352
+ displayField: 'fullNameNew',
50353
+ fieldPlus: 'userName',
50354
+ multiple: true
50355
+ }),
50356
+ new ColumnSchemaBase({
50357
+ field: 'donViIds',
50358
+ baseService: this._coCauToChucService,
50359
+ multiple: true,
50360
+ }),
50361
+ new ColumnSchemaBase({
50362
+ field: 'groupIds',
50363
+ baseService: this._userGroupService,
50364
+ displayField: 'name',
50365
+ multiple: true,
50366
+ }),
50367
+ new ColumnSchemaBase({
50368
+ field: 'permissions',
50369
+ label: 'Quyền hiện tại'
50370
+ })
50371
+ ];
50372
+ this.setting.objectName = ' quyền bản ghi';
50373
+ _super.prototype.ngOnInit.call(this);
50374
+ };
50375
+ WorkflowPermissionComponent.prototype.modifyGridInfo = function (gridInfo) {
50376
+ return __awaiter(this, void 0, void 0, function () {
50377
+ return __generator(this, function (_a) {
50378
+ gridInfo.filters.push(this.newFilter('itemId', exports.Operator.equal, this.item.id), this.newFilterContainer('or', this.newFilterContainer('and', this.newFilter('userIds', exports.Operator.isNotNull, '1'), this.newFilter('userIds', exports.Operator.notEqual, '')), this.newFilterContainer('and', this.newFilter('donViIds', exports.Operator.isNotNull, '1'), this.newFilter('donViIds', exports.Operator.notEqual, '')), this.newFilterContainer('and', this.newFilter('groupIds', exports.Operator.isNotNull, '1'), this.newFilter('groupIds', exports.Operator.notEqual, ''))));
50379
+ return [2 /*return*/];
50380
+ });
50381
+ });
50382
+ };
50383
+ WorkflowPermissionComponent.prototype.beforeRenderDataSource = function (dataSource) {
50384
+ return __awaiter(this, void 0, void 0, function () {
50385
+ var userId;
50386
+ return __generator(this, function (_a) {
50387
+ userId = this._userService.getId();
50388
+ dataSource.forEach(function (item) {
50389
+ item.__disableEdit = item.type != exports.EnumPermissionType.SHARE || item.userIdCreated != userId;
50390
+ item.__disableDelete = item.type != exports.EnumPermissionType.SHARE || item.userIdCreated != userId;
50391
+ if (!item.permission)
50392
+ return;
50393
+ var strPermission = '';
50394
+ if ((item.permission & exports.PermissionBase.READ) == exports.PermissionBase.READ)
50395
+ strPermission += 'xem, ';
50396
+ if ((item.permission & exports.PermissionBase.EDIT) == exports.PermissionBase.EDIT)
50397
+ strPermission += 'sửa, ';
50398
+ if ((item.permission & exports.PermissionBase.DELETE) == exports.PermissionBase.DELETE)
50399
+ strPermission += 'xóa, ';
50400
+ if (strPermission.length) {
50401
+ strPermission = strPermission.charAt(0).toUpperCase() + strPermission.substring(1, strPermission.length - 2);
50402
+ }
50403
+ item.permissions = strPermission;
50404
+ });
50405
+ return [2 /*return*/];
50406
+ });
50407
+ });
50408
+ };
50409
+ WorkflowPermissionComponent.prototype.handleDelete = function (rowData) {
50410
+ var _this = this;
50411
+ this._notifierService.showConfirm('Bạn có chắc chắn muốn xóa phân quyền')
50412
+ .then(function (res) {
50413
+ if (!res)
50414
+ return;
50415
+ _this._workflowPermissionService.deletePermission(rowData.id)
50416
+ .then(function (res) { return _this.handleResponse(res, '', function (f) {
50417
+ _this._triggerProcessData();
50418
+ }); });
50419
+ });
50420
+ };
50421
+ return WorkflowPermissionComponent;
50422
+ }(DataListBase));
50423
+ WorkflowPermissionComponent.decorators = [
50424
+ { type: i0.Component, args: [{
50425
+ selector: 'workflow-permission',
50426
+ template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\r\n (onCopyLink)=\"_copyLink($event)\" (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\"\r\n (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"handleDelete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'workflow-permission-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <workflow-permission-form #formBase [itemId]=\"item.id\" [businessSetting]=\"businessSetting\" [parentModel]=\"model\"\r\n [parentContext]=\"context\" [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\">\r\n </workflow-permission-form>\r\n</tn-dialog>",
50427
+ styles: [""]
50428
+ },] }
50429
+ ];
50430
+ WorkflowPermissionComponent.ctorParameters = function () { return [
50431
+ { type: i0.Injector },
50432
+ { type: WorkflowPermissionService },
50433
+ { type: CoCauToChucService },
50434
+ { type: UserGroupRealService }
50435
+ ]; };
50436
+ WorkflowPermissionComponent.propDecorators = {
50437
+ businessSetting: [{ type: i0.Input }],
50438
+ item: [{ type: i0.Input }]
50439
+ };
50440
+
50441
+ var WorkflowPickerComponent = /** @class */ (function (_super) {
50442
+ __extends(WorkflowPickerComponent, _super);
50443
+ function WorkflowPickerComponent(_injector, _workflowSettingsService, _stateMachinesService) {
50444
+ var _this = _super.call(this, _injector) || this;
50445
+ _this._injector = _injector;
50446
+ _this._workflowSettingsService = _workflowSettingsService;
50447
+ _this._stateMachinesService = _stateMachinesService;
50448
+ _this.showButtonSave = false;
50449
+ _this.onSaved = new i0.EventEmitter();
50450
+ _this.onCancel = new i0.EventEmitter();
50451
+ _this.onSaveSetting = new i0.EventEmitter();
50452
+ _this.dicMachinesData = {};
50453
+ _this.readyCrudForm = false;
50454
+ _this.autoGetDetail = false;
50455
+ _this.autoSave = false;
50456
+ return _this;
50457
+ }
50458
+ WorkflowPickerComponent.prototype.ngOnInit = function () {
50459
+ var _this = this;
50460
+ this.setting.baseService = this._workflowSettingsService;
50461
+ this.setting.schema = [
50462
+ new DropdownControlSchema({
50463
+ field: '_workflowCodes',
50464
+ label: 'Danh sách quy trình',
50465
+ multiple: true,
50466
+ baseService: this._stateMachinesService,
50467
+ valueField: 'code',
50468
+ displayField: 'title',
50469
+ onChanged: function (evt) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
50470
+ switch (_a.label) {
50471
+ case 0: return [4 /*yield*/, this.handleChangeWorkflow(evt)];
50472
+ case 1: return [2 /*return*/, _a.sent()];
50473
+ }
50474
+ }); }); },
50475
+ onAdjustedValue: function (evt) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
50476
+ switch (_a.label) {
50477
+ case 0: return [4 /*yield*/, this.handleChangeWorkflow(evt)];
50478
+ case 1: return [2 /*return*/, _a.sent()];
50479
+ }
50480
+ }); }); },
50481
+ required: true
50482
+ // onReady: async (evt: EventData) => await this.handleChangeWorkflow(evt)
50483
+ }),
50484
+ new DropdownControlSchema({
50485
+ field: 'workflowCode',
50486
+ label: 'Quy trình mặc định',
50487
+ valueField: 'code',
50488
+ displayField: 'title',
50489
+ onChanged: function (evt) { return _this.handleChangeWorkflowDefault(evt); }
50490
+ }),
50491
+ new CustomControlSchema({
50492
+ field: 'designer',
50493
+ label: this._translateService.instant('Sơ đồ trạng thái'),
50494
+ mdWidth: 12
50495
+ })
50496
+ ];
50497
+ this.model.data = this.data;
50498
+ this.afterGetSetting();
50499
+ _super.prototype.ngOnInit.call(this);
50500
+ };
50501
+ WorkflowPickerComponent.prototype.onFormInitialized = function (evt) {
50502
+ return __awaiter(this, void 0, void 0, function () {
50503
+ return __generator(this, function (_a) {
50504
+ return [2 /*return*/];
50505
+ });
50506
+ });
50507
+ };
50508
+ WorkflowPickerComponent.prototype.afterGetSetting = function () {
50509
+ var _this = this;
50510
+ if (!this.model.data) {
50511
+ this.model.data = {};
50512
+ this.model.formState = exports.FormState.ADD;
50513
+ }
50514
+ else {
50515
+ if (this.model.data.workflowCodes) {
50516
+ this.model.data._workflowCodes = this.model.data.workflowCodes.split(',');
50517
+ this.model.data._workflowCodes.forEach(function (wfCode) {
50518
+ _this.dicMachinesData[wfCode] = {
50519
+ machines: [],
50520
+ connections: []
50521
+ };
50522
+ });
50523
+ }
50524
+ this.model.formState = exports.FormState.EDIT;
50525
+ }
50526
+ this.readyCrudForm = true;
50527
+ };
50528
+ WorkflowPickerComponent.prototype.handleChangeWorkflow = function (evt) {
50529
+ return __awaiter(this, void 0, void 0, function () {
50530
+ var dataSourceSelected_1, index, codeDeleted, dataMachines;
50531
+ var _this = this;
50532
+ return __generator(this, function (_a) {
50533
+ switch (_a.label) {
50534
+ case 0:
50535
+ if (!(this.model.data._workflowCodes && this.model.data._workflowCodes.length)) return [3 /*break*/, 2];
50536
+ dataSourceSelected_1 = evt.formControls['_workflowCodes']._component.dataSourceInternal
50537
+ .filter(function (q) { return _this.model.data._workflowCodes.some(function (x) { return x == q.value.code; }); })
50538
+ .map(function (q) { return q.value; });
50539
+ evt.formControls['workflowCode'].dataSource = dataSourceSelected_1;
50540
+ if (!evt.rootModel.workflowCode || !dataSourceSelected_1.some(function (x) { return x.code == evt.rootModel.workflowCode; })) {
50541
+ evt.rootModel.workflowCode = this.model.data._workflowCodes[0];
50542
+ }
50543
+ else {
50544
+ index = this.model.data._workflowCodes.findIndex(function (q) { return q == evt.rootModel.workflowCode; });
50545
+ if (index > 0) {
50546
+ codeDeleted = this.model.data._workflowCodes.splice(index, 1);
50547
+ this.model.data._workflowCodes.unshift(codeDeleted);
50548
+ evt.rootModel._workflowCodes = this.model.data._workflowCodes;
50549
+ }
50550
+ }
50551
+ this.model.data._workflowCodes.forEach(function (wfCode) {
50552
+ _this.dicMachinesData[wfCode] = {
50553
+ ten: dataSourceSelected_1.find(function (q) { return q.code == wfCode; }).title,
50554
+ machines: [],
50555
+ connections: []
50556
+ };
50557
+ });
50558
+ return [4 /*yield*/, this._stateMachinesService.getAll([
50559
+ this.newFilter('code', exports.Operator.in, this.model.data._workflowCodes)
50560
+ ])];
50561
+ case 1:
50562
+ dataMachines = (_a.sent()).data;
50563
+ dataMachines.forEach(function (data) {
50564
+ _this.dicMachinesData[data.code].machines = [];
50565
+ _this.dicMachinesData[data.code].connections = [];
50566
+ if (data.data) {
50567
+ _this.dicMachinesData[data.code] = Object.assign(Object.assign({}, JSON.parse(data.data)), { ten: data.title });
50568
+ }
50569
+ });
50570
+ return [3 /*break*/, 3];
50571
+ case 2:
50572
+ evt.formControls['workflowCode'].dataSource = [];
50573
+ evt.rootModel.workflowCode = null;
50574
+ _a.label = 3;
50575
+ case 3: return [2 /*return*/];
50576
+ }
50577
+ });
50578
+ });
50579
+ };
50580
+ WorkflowPickerComponent.prototype.handleChangeWorkflowDefault = function (evt) {
50581
+ var _this = this;
50582
+ if (!evt.rootModel.workflowCode)
50583
+ return;
50584
+ if (this.model.data._workflowCodes && this.model.data._workflowCodes.length) {
50585
+ var index = this.model.data._workflowCodes.findIndex(function (q) { return q == _this.model.data.workflowCode; });
50586
+ if (index > 0) {
50587
+ var codeDeleteds = this.model.data._workflowCodes.splice(index, 1);
50588
+ this.model.data._workflowCodes.unshift(codeDeleteds[0]);
50589
+ var itemDeleteds = evt.rootModel._workflowCodes.splice(index, 1);
50590
+ evt.rootModel._workflowCodes.unshift(itemDeleteds[0]);
50591
+ }
50592
+ }
50593
+ };
50594
+ WorkflowPickerComponent.prototype.handleCancelWorkflow = function (event) {
50595
+ var _this = this;
50596
+ this._notifierService.showConfirm('Bạn có chắc chắn muốn hủy bỏ quy trình nghiệp vụ')
50597
+ .then(function (res) {
50598
+ if (!res)
50599
+ return;
50600
+ _this._workflowSettingsService.delete(_this.model.data.id)
50601
+ .then(function (res) { return _this.handleResponse(res, 'Hủy bỏ quy trình nghiệp vụ thành công', function (f) {
50602
+ _this.onSaved.emit();
50603
+ }); });
50604
+ });
50605
+ };
50606
+ WorkflowPickerComponent.prototype.onBeforeSave = function () {
50607
+ this.model.data.workflowCodes = this.model.data._workflowCodes.toString();
50608
+ };
50609
+ WorkflowPickerComponent.prototype.handleManualSave = function () {
50610
+ this.model.submitting = false;
50611
+ this.onSaveSetting.emit(this.model.data);
50612
+ };
50613
+ return WorkflowPickerComponent;
50614
+ }(DataFormBase));
50615
+ WorkflowPickerComponent.decorators = [
50616
+ { type: i0.Component, args: [{
50617
+ selector: 'workflow-picker',
50618
+ template: "<crud-form *ngIf=\"readyCrudForm\" #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\"\r\n [styleClass]=\"'workflow-setting'\" [disableCaching]=\"true\" (onFormReady)=\"_handleFormReady($event)\">\r\n <ng-template #designer>\r\n <div *ngFor=\"let wfCode of model.data._workflowCodes\">\r\n <div class=\"title-workflow\">\r\n Quy tr\u00ECnh {{dicMachinesData[wfCode].ten}} ({{wfCode}})\r\n <span *ngIf=\"wfCode == model.data.workflowCode\" class=\"pi pi-star\" pTooltip=\"\u0110\u00E2y l\u00E0 quy tr\u00ECnh ch\u00EDnh\"\r\n tooltipPosition=\"top\"></span>\r\n </div>\r\n <div class=\"state-machines-container\">\r\n <statemachines-designer #designer [data]=\"dicMachinesData[wfCode]\" [viewOnly]=\"true\">\r\n </statemachines-designer>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</crud-form>\r\n<div *ngIf=\"showButtonSave\" class=\"container-button-workflow\">\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'L\u01B0u c\u1EA5u h\u00ECnh' | translate\"\r\n (click)=\"_handleSave($event)\"></button>\r\n</div>",
50619
+ providers: [ComponentContextService],
50620
+ styles: [".title-workflow{font-size:.9em;font-weight:700;padding:1em 0 .5em}.title-workflow .pi-star{color:orange}.state-machines-container{border:1px solid #ced4da;border-radius:3px}.container-button-workflow{background:#fff;border-top:1px solid #ddd;bottom:0;padding:.5em;position:-webkit-sticky;position:sticky;text-align:right;z-index:10}"]
50621
+ },] }
50622
+ ];
50623
+ WorkflowPickerComponent.ctorParameters = function () { return [
50624
+ { type: i0.Injector },
50625
+ { type: WorkflowSettingsService },
50626
+ { type: StateMachinesService }
50627
+ ]; };
50628
+ WorkflowPickerComponent.propDecorators = {
50629
+ parentSetting: [{ type: i0.Input }],
50630
+ data: [{ type: i0.Input }],
49870
50631
  showButtonSave: [{ type: i0.Input }],
49871
50632
  onSaved: [{ type: i0.Output }],
49872
50633
  onCancel: [{ type: i0.Output }],
@@ -52118,7 +52879,7 @@
52118
52879
  this.setting.cols = [
52119
52880
  new ColumnSchemaBase({
52120
52881
  field: 'code',
52121
- width: '120px',
52882
+ width: '150px',
52122
52883
  sort: false
52123
52884
  }),
52124
52885
  new ColumnSchemaBase({
@@ -52132,6 +52893,9 @@
52132
52893
  this.setting.objectName = ' loại công việc';
52133
52894
  _super.prototype.ngOnInit.call(this);
52134
52895
  };
52896
+ BaseDmLoaiCongViecComponent.prototype.getPromiseGetData = function (gridInfo) {
52897
+ return this._dmLoaiCongViecService.baseGetTreeData(gridInfo);
52898
+ };
52135
52899
  BaseDmLoaiCongViecComponent.prototype.modifyGridInfo = function (gridInfo) {
52136
52900
  return __awaiter(this, void 0, void 0, function () {
52137
52901
  return __generator(this, function (_a) {
@@ -52143,7 +52907,7 @@
52143
52907
  };
52144
52908
  BaseDmLoaiCongViecComponent.prototype.beforeRenderDataSource = function (dataSource) {
52145
52909
  return __awaiter(this, void 0, void 0, function () {
52146
- var lstParent, itemParentBefore, itemLastChild, dicParentChild;
52910
+ var lstParent, itemParentBefore, itemLastChild, dicParentChild, i;
52147
52911
  var _this = this;
52148
52912
  return __generator(this, function (_a) {
52149
52913
  lstParent = [];
@@ -52214,7 +52978,9 @@
52214
52978
  lstParent.forEach(function (itemParent) {
52215
52979
  itemParent.isLast = true;
52216
52980
  });
52217
- this.setIsLastParentForChild(dicParentChild, lstParent[lstParent.length - 1], dataSource);
52981
+ for (i = lstParent.length - 1; i >= 0; i--) {
52982
+ this.setIsLastParentForChild(dicParentChild, lstParent[i], dataSource);
52983
+ }
52218
52984
  }
52219
52985
  if (itemLastChild != null) {
52220
52986
  itemLastChild.isLast = true;
@@ -53898,732 +54664,6 @@
53898
54664
  { type: UserService }
53899
54665
  ]; };
53900
54666
 
53901
- var WorkflowPermissionComponent = /** @class */ (function (_super) {
53902
- __extends(WorkflowPermissionComponent, _super);
53903
- function WorkflowPermissionComponent(_injector, _workflowPermissionService, _coCauToChucService, _userGroupService) {
53904
- var _this = _super.call(this, _injector) || this;
53905
- _this._injector = _injector;
53906
- _this._workflowPermissionService = _workflowPermissionService;
53907
- _this._coCauToChucService = _coCauToChucService;
53908
- _this._userGroupService = _userGroupService;
53909
- _this.searchSchema = {};
53910
- _this.searchData = {};
53911
- return _this;
53912
- }
53913
- WorkflowPermissionComponent.prototype.ngOnInit = function () {
53914
- this.setting.baseService = this._workflowPermissionService;
53915
- this._workflowPermissionService.changeEndpoint(this.businessSetting.baseService);
53916
- this.setting.title = '';
53917
- this.setting.disableShare = true;
53918
- this.setting.hiddenSettingPermission = true;
53919
- this.setting.hiddenSettingWorkflow = true;
53920
- this.setting.hiddenSettingWorkflowNew = true;
53921
- this.setting.modelSchemas = [
53922
- new ModelSchema({ field: 'userIds', name: 'Người dùng', fullName: 'Người dùng', description: 'Người dùng' }),
53923
- new ModelSchema({ field: 'donViIds', name: 'Đơn vị', fullName: 'Đơn vị', description: 'Đơn vị' }),
53924
- new ModelSchema({ field: 'groupIds', name: 'Nhóm người dùng', fullName: 'Nhóm người dùng', description: 'Nhóm người dùng' }),
53925
- new ModelSchema({ field: 'permission', dataType: 'boolean', name: 'Sử dụng', fullName: 'Sử dụng', description: 'Sử dụng' })
53926
- ];
53927
- this.setting.cols = [
53928
- new ColumnSchemaBase({
53929
- field: 'userIds',
53930
- baseService: this._userService,
53931
- displayField: 'fullNameNew',
53932
- fieldPlus: 'userName',
53933
- multiple: true
53934
- }),
53935
- new ColumnSchemaBase({
53936
- field: 'donViIds',
53937
- baseService: this._coCauToChucService,
53938
- multiple: true,
53939
- }),
53940
- new ColumnSchemaBase({
53941
- field: 'groupIds',
53942
- baseService: this._userGroupService,
53943
- displayField: 'name',
53944
- multiple: true,
53945
- }),
53946
- new ColumnSchemaBase({
53947
- field: 'permissions',
53948
- label: 'Quyền hiện tại'
53949
- })
53950
- ];
53951
- this.setting.objectName = ' quyền bản ghi';
53952
- _super.prototype.ngOnInit.call(this);
53953
- };
53954
- WorkflowPermissionComponent.prototype.modifyGridInfo = function (gridInfo) {
53955
- return __awaiter(this, void 0, void 0, function () {
53956
- return __generator(this, function (_a) {
53957
- gridInfo.filters.push(this.newFilter('itemId', exports.Operator.equal, this.item.id), this.newFilterContainer('or', this.newFilterContainer('and', this.newFilter('userIds', exports.Operator.isNotNull, '1'), this.newFilter('userIds', exports.Operator.notEqual, '')), this.newFilterContainer('and', this.newFilter('donViIds', exports.Operator.isNotNull, '1'), this.newFilter('donViIds', exports.Operator.notEqual, '')), this.newFilterContainer('and', this.newFilter('groupIds', exports.Operator.isNotNull, '1'), this.newFilter('groupIds', exports.Operator.notEqual, ''))));
53958
- return [2 /*return*/];
53959
- });
53960
- });
53961
- };
53962
- WorkflowPermissionComponent.prototype.beforeRenderDataSource = function (dataSource) {
53963
- return __awaiter(this, void 0, void 0, function () {
53964
- var userId;
53965
- return __generator(this, function (_a) {
53966
- userId = this._userService.getId();
53967
- dataSource.forEach(function (item) {
53968
- item.__disableEdit = item.type != exports.EnumPermissionType.SHARE || item.userIdCreated != userId;
53969
- item.__disableDelete = item.type != exports.EnumPermissionType.SHARE || item.userIdCreated != userId;
53970
- if (!item.permission)
53971
- return;
53972
- var strPermission = '';
53973
- if ((item.permission & exports.PermissionBase.READ) == exports.PermissionBase.READ)
53974
- strPermission += 'xem, ';
53975
- if ((item.permission & exports.PermissionBase.EDIT) == exports.PermissionBase.EDIT)
53976
- strPermission += 'sửa, ';
53977
- if ((item.permission & exports.PermissionBase.DELETE) == exports.PermissionBase.DELETE)
53978
- strPermission += 'xóa, ';
53979
- if (strPermission.length) {
53980
- strPermission = strPermission.charAt(0).toUpperCase() + strPermission.substring(1, strPermission.length - 2);
53981
- }
53982
- item.permissions = strPermission;
53983
- });
53984
- return [2 /*return*/];
53985
- });
53986
- });
53987
- };
53988
- WorkflowPermissionComponent.prototype.handleDelete = function (rowData) {
53989
- var _this = this;
53990
- this._notifierService.showConfirm('Bạn có chắc chắn muốn xóa phân quyền')
53991
- .then(function (res) {
53992
- if (!res)
53993
- return;
53994
- _this._workflowPermissionService.deletePermission(rowData.id)
53995
- .then(function (res) { return _this.handleResponse(res, '', function (f) {
53996
- _this._triggerProcessData();
53997
- }); });
53998
- });
53999
- };
54000
- return WorkflowPermissionComponent;
54001
- }(DataListBase));
54002
- WorkflowPermissionComponent.decorators = [
54003
- { type: i0.Component, args: [{
54004
- selector: 'workflow-permission',
54005
- template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\r\n (onCopyLink)=\"_copyLink($event)\" (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\"\r\n (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"handleDelete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'workflow-permission-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <workflow-permission-form #formBase [itemId]=\"item.id\" [businessSetting]=\"businessSetting\" [parentModel]=\"model\"\r\n [parentContext]=\"context\" [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\">\r\n </workflow-permission-form>\r\n</tn-dialog>",
54006
- styles: [""]
54007
- },] }
54008
- ];
54009
- WorkflowPermissionComponent.ctorParameters = function () { return [
54010
- { type: i0.Injector },
54011
- { type: WorkflowPermissionService },
54012
- { type: CoCauToChucService },
54013
- { type: UserGroupRealService }
54014
- ]; };
54015
- WorkflowPermissionComponent.propDecorators = {
54016
- businessSetting: [{ type: i0.Input }],
54017
- item: [{ type: i0.Input }]
54018
- };
54019
-
54020
- var WorkflowPermissionFormComponent = /** @class */ (function (_super) {
54021
- __extends(WorkflowPermissionFormComponent, _super);
54022
- function WorkflowPermissionFormComponent(_injector, _workflowPermissionService, _workflowPermissionDetailService, _userGroupService) {
54023
- var _this = _super.call(this, _injector) || this;
54024
- _this._injector = _injector;
54025
- _this._workflowPermissionService = _workflowPermissionService;
54026
- _this._workflowPermissionDetailService = _workflowPermissionDetailService;
54027
- _this._userGroupService = _userGroupService;
54028
- return _this;
54029
- }
54030
- WorkflowPermissionFormComponent.prototype.ngOnInit = function () {
54031
- _super.prototype.ngOnInit.call(this);
54032
- this.setting.baseService = this._workflowPermissionService;
54033
- this._workflowPermissionService.changeEndpoint(this.businessSetting.baseService);
54034
- var dataSourcePermission = DataSourcePermissionBase.map(function (q) { return (Object.assign(Object.assign({}, q), { disabled: true })); });
54035
- this.setting.schema = [
54036
- this._createUserPickerControl('userIds', 'Người dùng'),
54037
- this._createCoCauToChucControl('donViIds', 'Đơn vị'),
54038
- this._createUserGroupPickerControl('groupIds', 'Nhóm người dùng'),
54039
- new CheckBoxListControlSchema({
54040
- field: 'lstPermission',
54041
- label: 'Quyền khả dụng',
54042
- dataSource: dataSourcePermission
54043
- })
54044
- ];
54045
- };
54046
- WorkflowPermissionFormComponent.prototype._createUserPickerControl = function (field, label, multiple) {
54047
- if (multiple === void 0) { multiple = true; }
54048
- var control = createUserPickerControl(field, label);
54049
- control.multiple = multiple;
54050
- return control;
54051
- };
54052
- WorkflowPermissionFormComponent.prototype._createCoCauToChucControl = function (field, label) {
54053
- return createOrgPickerControl(field, label);
54054
- };
54055
- WorkflowPermissionFormComponent.prototype._createUserGroupPickerControl = function (field, label) {
54056
- return createUserGroupPickerControl(this._userGroupService, field, label);
54057
- };
54058
- WorkflowPermissionFormComponent.prototype.onFormInitialized = function (constrols) {
54059
- return __awaiter(this, void 0, void 0, function () {
54060
- return __generator(this, function (_a) {
54061
- switch (_a.label) {
54062
- case 0:
54063
- // tiền xử lý dữ liệu (ví dụ tổng hợp datasource), trước khi gọi api get detail
54064
- return [4 /*yield*/, this.getItemPermissionCurrent()];
54065
- case 1:
54066
- // tiền xử lý dữ liệu (ví dụ tổng hợp datasource), trước khi gọi api get detail
54067
- _a.sent();
54068
- return [2 /*return*/];
54069
- }
54070
- });
54071
- });
54072
- };
54073
- WorkflowPermissionFormComponent.prototype.getItemPermissionCurrent = function () {
54074
- return __awaiter(this, void 0, void 0, function () {
54075
- var itemPermission;
54076
- return __generator(this, function (_a) {
54077
- switch (_a.label) {
54078
- case 0: return [4 /*yield*/, this._workflowPermissionDetailService.changeEndpoint(this.businessSetting.baseService)
54079
- .getDetailByFilter([
54080
- this.newFilter('itemId', exports.Operator.equal, this.itemId),
54081
- this.newFilter('userId', exports.Operator.equal, this._userService.getId())
54082
- ])];
54083
- case 1:
54084
- itemPermission = (_a.sent()).data;
54085
- if (itemPermission) {
54086
- this.formControls['lstPermission'].dataSource.forEach(function (item) {
54087
- if ((itemPermission.permission & item.id) == item.id) {
54088
- item.disabled = false;
54089
- }
54090
- });
54091
- }
54092
- return [2 /*return*/];
54093
- }
54094
- });
54095
- });
54096
- };
54097
- WorkflowPermissionFormComponent.prototype.modifyDetailData = function (data) {
54098
- return __awaiter(this, void 0, void 0, function () {
54099
- return __generator(this, function (_a) {
54100
- // xử lý dữ liệu lấy từ get detail về
54101
- if (data.userIds) {
54102
- data.userIds = data.userIds.split(',');
54103
- }
54104
- if (data.donViIds) {
54105
- data.donViIds = data.donViIds.split(',');
54106
- }
54107
- if (data.groupIds) {
54108
- data.groupIds = data.groupIds.split(',');
54109
- }
54110
- data.lstPermission = [];
54111
- if (data.permission) {
54112
- if ((data.permission & exports.PermissionBase.READ)) {
54113
- data.lstPermission.push(exports.PermissionBase.READ);
54114
- }
54115
- if ((data.permission & exports.PermissionBase.EDIT)) {
54116
- data.lstPermission.push(exports.PermissionBase.EDIT);
54117
- }
54118
- if ((data.permission & exports.PermissionBase.DELETE)) {
54119
- data.lstPermission.push(exports.PermissionBase.DELETE);
54120
- }
54121
- }
54122
- return [2 /*return*/];
54123
- });
54124
- });
54125
- };
54126
- WorkflowPermissionFormComponent.prototype.validateForm = function () {
54127
- return __awaiter(this, void 0, void 0, function () {
54128
- var itemMissings;
54129
- return __generator(this, function (_a) {
54130
- itemMissings = [];
54131
- if (!this.isNotNullArray(this.model.data.userIds)
54132
- && !this.isNotNullArray(this.model.data.donViIds)
54133
- && !this.isNotNullArray(this.model.data.groupIds)) {
54134
- itemMissings.push('người muốn phân quyền');
54135
- }
54136
- if (!this.isNotNullArray(this.model.data.lstPermission)) {
54137
- itemMissings.push('quyền muốn phân');
54138
- }
54139
- if (itemMissings.length) {
54140
- this._notifierService.showWarning("B\u1EA1n ph\u1EA3i nh\u1EADp " + itemMissings.join(', '));
54141
- return [2 /*return*/, false];
54142
- }
54143
- return [2 /*return*/, true];
54144
- });
54145
- });
54146
- };
54147
- WorkflowPermissionFormComponent.prototype.onBeforeSave = function () {
54148
- this.model.data.tableName = this.businessSetting.baseService.entityName;
54149
- this.model.data.workflowCode = DummyWorkflowCode;
54150
- this.model.data.itemId = this.itemId;
54151
- if (this.model.data.userIds) {
54152
- this.model.data.userIds = this.model.data.userIds.toString();
54153
- }
54154
- if (this.model.data.donViIds) {
54155
- this.model.data.donViIds = this.model.data.donViIds.toString();
54156
- }
54157
- if (this.model.data.groupIds) {
54158
- this.model.data.groupIds = this.model.data.groupIds.toString();
54159
- }
54160
- if (this.model.data.lstPermission) {
54161
- var permission = 0;
54162
- if (this.model.data.lstPermission & exports.PermissionBase.READ) {
54163
- permission = permission | exports.PermissionBase.READ;
54164
- }
54165
- if (this.model.data.lstPermission & exports.PermissionBase.EDIT) {
54166
- permission = permission | exports.PermissionBase.EDIT;
54167
- }
54168
- if (this.model.data.lstPermission & exports.PermissionBase.DELETE) {
54169
- permission = permission | exports.PermissionBase.DELETE;
54170
- }
54171
- this.model.data.permission = permission;
54172
- }
54173
- };
54174
- WorkflowPermissionFormComponent.prototype.getPromiseActionInsert = function () {
54175
- return this._workflowPermissionService.insertPermission(this.model.data);
54176
- };
54177
- WorkflowPermissionFormComponent.prototype.getPromiseActionUpdate = function () {
54178
- return this._workflowPermissionService.updatePermission(this.model.data);
54179
- };
54180
- return WorkflowPermissionFormComponent;
54181
- }(DataFormBase));
54182
- WorkflowPermissionFormComponent.decorators = [
54183
- { type: i0.Component, args: [{
54184
- selector: 'workflow-permission-form',
54185
- template: "<crud-form #crudForm [(data)]=\"model.data\" [setting]=\"setting\" [context]=\"context\" [disableCaching]=\"true\"\r\n (onFormReady)=\"_handleFormReady($event)\">\r\n</crud-form>\r\n<ng-template #buttonTemplate>\r\n <button *ngIf=\"!model.data.__disableEdit && !__isFormView\" type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\"\r\n [label]=\"'FORM.SAVE' | translate\" (click)=\"_handleSave($event)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"_handleCancel($event)\"></button>\r\n</ng-template>\r\n",
54186
- providers: [ComponentContextService],
54187
- styles: [""]
54188
- },] }
54189
- ];
54190
- WorkflowPermissionFormComponent.ctorParameters = function () { return [
54191
- { type: i0.Injector },
54192
- { type: WorkflowPermissionService },
54193
- { type: WorkflowPermissionDetailService },
54194
- { type: UserGroupRealService }
54195
- ]; };
54196
- WorkflowPermissionFormComponent.propDecorators = {
54197
- businessSetting: [{ type: i0.Input }],
54198
- itemId: [{ type: i0.Input }]
54199
- };
54200
-
54201
- var AppTopBarV2Component = /** @class */ (function (_super) {
54202
- __extends(AppTopBarV2Component, _super);
54203
- function AppTopBarV2Component(
54204
- // public app: AppComponent,
54205
- _customRouteService, _router, _commonService, _authenService, _cd, _injector, _permissionService, _moduleConfigService, _userService, _notifierService, _translateService) {
54206
- var _this = _super.call(this, _injector) || this;
54207
- _this._customRouteService = _customRouteService;
54208
- _this._router = _router;
54209
- _this._commonService = _commonService;
54210
- _this._authenService = _authenService;
54211
- _this._cd = _cd;
54212
- _this._permissionService = _permissionService;
54213
- _this._moduleConfigService = _moduleConfigService;
54214
- _this._userService = _userService;
54215
- _this._notifierService = _notifierService;
54216
- _this._translateService = _translateService;
54217
- _this.defaultAvatar = '';
54218
- _this.key = '';
54219
- _this.currentRoute = '';
54220
- _this.fileApi = '';
54221
- _this.currentUser = null;
54222
- _this.appSwitcherItems = [];
54223
- _this.isFirstTime = false;
54224
- _this.showSettings = false;
54225
- _this.allSubscriptions = [];
54226
- _this.message = '';
54227
- _this.environment = _this._moduleConfigService.getConfig().environment;
54228
- _this.defaultAvatar = _this.environment.appMetadata.main.defaultMaleAvatar;
54229
- _this.fileApi = _this.environment.apiDomain.fileEndpoint;
54230
- if (_this.rootContext.data.currentAppMetadata && _this.rootContext.data.currentAppMetadata.showDefaultSetting != null && _this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined) {
54231
- _this.showDefaultSetting = _this.rootContext.data.currentAppMetadata.showDefaultSetting;
54232
- }
54233
- else {
54234
- if (_this.environment.appMetadata.main.showDefaultSetting != null && _this.environment.appMetadata.main.showDefaultSetting != undefined) {
54235
- _this.showDefaultSetting = _this.environment.appMetadata.main.showDefaultSetting;
54236
- }
54237
- else {
54238
- _this.showDefaultSetting = false;
54239
- }
54240
- }
54241
- if (!_this.rootContext.data.currentUser) {
54242
- _this.rootContext.data.currentUser = {};
54243
- }
54244
- // this.allSubscriptions.push(this.rootContext.subscribe(ComCtxConstants.ROOT.USER_INFO_CHANGED, rs => {
54245
- // this._cd.detectChanges();
54246
- // }));
54247
- _this.rootContext.replaySubscribeOnce(ComCtxConstants.ROOT.USER_LOADED, function (rs) {
54248
- _this.currentUser = _this._userService.getCurrentUser();
54249
- _this.loadMenuMetadata();
54250
- });
54251
- if (_this.rootModel.allowAnonymous) {
54252
- _this.loadMenuMetadata();
54253
- }
54254
- return _this;
54255
- }
54256
- AppTopBarV2Component.prototype.loadMenuMetadata = function () {
54257
- var _this = this;
54258
- var prmsAppSwicherItem = new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
54259
- var arr, _a, _b, _i, ind, element, clientId, isAuthorized;
54260
- return __generator(this, function (_c) {
54261
- switch (_c.label) {
54262
- case 0:
54263
- arr = [];
54264
- _a = [];
54265
- for (_b in this.environment.appMetadata.appSwitcher)
54266
- _a.push(_b);
54267
- _i = 0;
54268
- _c.label = 1;
54269
- case 1:
54270
- if (!(_i < _a.length)) return [3 /*break*/, 5];
54271
- ind = _a[_i];
54272
- element = this.environment.appMetadata.appSwitcher[ind];
54273
- clientId = this.environment.authenticationSettings.clientId;
54274
- if (!(this.rootContext.data.allowAnonymous && element.allowAnonymous)) return [3 /*break*/, 2];
54275
- arr.push(element);
54276
- return [3 /*break*/, 4];
54277
- case 2:
54278
- if (!this.currentUser) return [3 /*break*/, 4];
54279
- return [4 /*yield*/, this._permissionService.isAuthorized(element.code, (element.code + ".MODULE." + element.code).toUpperCase(), true)];
54280
- case 3:
54281
- isAuthorized = _c.sent();
54282
- if (isAuthorized) {
54283
- arr.push(element);
54284
- }
54285
- _c.label = 4;
54286
- case 4:
54287
- _i++;
54288
- return [3 /*break*/, 1];
54289
- case 5:
54290
- resolve(arr);
54291
- return [2 /*return*/];
54292
- }
54293
- });
54294
- }); });
54295
- prmsAppSwicherItem.then(function (rs) {
54296
- if (rs) {
54297
- var currentUser_1 = _this._userService.getCurrentUser();
54298
- _this.appSwitcherItems.length = 0;
54299
- rs.forEach(function (element) {
54300
- if (element.visible) {
54301
- if (element.allowAnonymous) {
54302
- _this.appSwitcherItems.push(element);
54303
- }
54304
- else {
54305
- if (currentUser_1.maNguoiHoc && currentUser_1.issuperuser && currentUser_1.issuperuser.toLowerCase() != 'true') {
54306
- if (element.code.toLowerCase() == 'sv' || element.code.toLowerCase() == 'user') {
54307
- _this.appSwitcherItems.push(element);
54308
- }
54309
- }
54310
- else {
54311
- _this.appSwitcherItems.push(element);
54312
- }
54313
- }
54314
- }
54315
- });
54316
- }
54317
- });
54318
- };
54319
- AppTopBarV2Component.prototype.ngOnInit = function () {
54320
- var _this = this;
54321
- if (this.rootContext.data.currentUser) {
54322
- if (this.rootContext.data.currentUser.gender == 0) {
54323
- this.defaultAvatar = this.environment.appMetadata.main.defaultFemaleAvatar;
54324
- }
54325
- else {
54326
- this.defaultAvatar = this.environment.appMetadata.main.defaultMaleAvatar;
54327
- }
54328
- this.userProfile = this._userService.getProfileInfo();
54329
- }
54330
- this.rootContext.subscribe(ComCtxConstants.ROOT.BODY_MOUSE_DOWN, function (e) {
54331
- setTimeout(function () {
54332
- _this.hideAdvanceSearch(e);
54333
- });
54334
- });
54335
- this.rootContext.subscribe(ComCtxConstants.ROOT.KEY_DOWN_CTRL_F, function (e) {
54336
- _this.focusToSearchBox();
54337
- });
54338
- this.rootContext.subscribe(ComCtxConstants.COMMON.FORCE_RELOAD, function (e) {
54339
- _this.showNotificationReload();
54340
- });
54341
- this.rootContext.subscribe(ComCtxConstants.COMMON.SHOW_NOTIFY, function (e) {
54342
- _this.setNotify(e.message);
54343
- });
54344
- this.allSubscriptions.push(this.rootContext.subscribe(ComCtxConstants.ROOT_USMART.SHOW_CONFIG_DATA_DEFAULT, function (e) {
54345
- _this.model.dataModelSetting.showSettings = true;
54346
- }));
54347
- this.model.dataModelSetting = {
54348
- data: {},
54349
- showSettings: false
54350
- };
54351
- this.subscribe(ComCtxConstants.COMMON.SAVE_DATA_DEFAULT, function (data) {
54352
- _this.formatDefaultDataSetting(data);
54353
- _this.reloadWindow();
54354
- });
54355
- var stringDataDefault = localStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.DEFAULT_DATA);
54356
- if (stringDataDefault) {
54357
- var dataCacheDefault = JSON.parse(stringDataDefault);
54358
- this.formatDefaultDataSetting(dataCacheDefault);
54359
- }
54360
- else {
54361
- this.defaultDataSetting = 'Thiết lập tham số mặc định';
54362
- }
54363
- };
54364
- AppTopBarV2Component.prototype.ngOnDestroy = function () {
54365
- this.allSubscriptions.forEach(function (element) {
54366
- element.unsubscribe();
54367
- });
54368
- if (this.intervalCountdown) {
54369
- clearInterval(this.intervalCountdown);
54370
- }
54371
- _super.prototype.ngOnDestroy.call(this);
54372
- };
54373
- AppTopBarV2Component.prototype.formatDefaultDataSetting = function (data) {
54374
- var _this = this;
54375
- var dataSetting = '';
54376
- var fields = ['instanceIdHeDaoTao', 'heDaoTao', 'namHoc', 'hocKy', 'instanceIdNamHoc', 'instanceIdHocKy', 'idDotThi'];
54377
- var fieldPluses = ['code', 'code', 'ten', 'ten', 'ten', 'ten', 'ten'];
54378
- fields.forEach(function (field, index) {
54379
- if (!_this.checkHidden(field)) {
54380
- var _f = "" + field + fieldPluses[index];
54381
- if (data[_f]) {
54382
- dataSetting += data[_f] + '/';
54383
- }
54384
- }
54385
- });
54386
- if (dataSetting.length > 0) {
54387
- dataSetting = dataSetting.substring(0, dataSetting.length - 1);
54388
- }
54389
- this.defaultDataSetting = dataSetting;
54390
- };
54391
- AppTopBarV2Component.prototype.checkHidden = function (field) {
54392
- return this.rootModel.currentAppMetadata.configDefaultSetting && !this.rootModel.currentAppMetadata.configDefaultSetting.column.some(function (p) { return p.field == field; });
54393
- };
54394
- AppTopBarV2Component.prototype.getCurrentUserFullName = function () {
54395
- return this.rootContext.data.currentUser && this.rootContext.data.currentUser.fullName ? this.rootContext.data.currentUser.fullName : 'Khách';
54396
- };
54397
- AppTopBarV2Component.prototype.getCurrentUserPosition = function () {
54398
- return this.userProfile ? this.userProfile.tenDonVi : null;
54399
- };
54400
- AppTopBarV2Component.prototype.getCurrentUserAvatar = function () {
54401
- if (this.rootContext.data.currentUser && this.rootContext.data.currentUser.avatar) {
54402
- return this.fileApi + "/file/public/" + this.rootContext.data.currentUser.avatar + "/Download";
54403
- }
54404
- else {
54405
- return this.defaultAvatar;
54406
- }
54407
- };
54408
- AppTopBarV2Component.prototype.clearFilter = function (input) {
54409
- var _this = this;
54410
- setTimeout(function () {
54411
- _this.model.searchModel[_this.model.fieldKey] = '';
54412
- _this._customRouteService.updateFragment(_this.model.fieldKey, null);
54413
- _this._customRouteService.updateWithoutFireEvent();
54414
- _this.rootContext.fireEvent(ComCtxConstants.ROOT.ON_SEARCH, _this.model.searchModel);
54415
- input.value = '';
54416
- input.focus();
54417
- _this._cd.detectChanges();
54418
- });
54419
- };
54420
- AppTopBarV2Component.prototype.toggleAdvanceSearch = function (evt) {
54421
- this.rootContext.fireEvent(ComCtxConstants.ROOT.ADVANCE_SEARCH_TOGGLE_BOX, { event: evt });
54422
- evt.preventDefault();
54423
- evt.cancelBubble = true;
54424
- };
54425
- AppTopBarV2Component.prototype.hideAdvanceSearch = function (evt) {
54426
- if (document.getElementById('advance-search-box')) {
54427
- var mask = document.body.querySelectorAll('div[class~="ui-dialog-mask"]');
54428
- if (!mask.length) {
54429
- var closestDropdown = evt.target.closest('.dropdown-advs');
54430
- if (closestDropdown == null || closestDropdown.length == 0) {
54431
- this.rootContext.fireEvent(ComCtxConstants.ROOT.ADVANCE_SEARCH_HIDE_BOX, { event: evt });
54432
- }
54433
- }
54434
- }
54435
- };
54436
- AppTopBarV2Component.prototype.focusToSearchBox = function () {
54437
- if (!document.body.querySelector('div[class~="ui-dialog-mask"]')) {
54438
- this.input.nativeElement.focus();
54439
- }
54440
- };
54441
- AppTopBarV2Component.prototype.onTopbarSearchClick = function (event, input) {
54442
- var _this = this;
54443
- if (!this.model.fieldKey) {
54444
- return;
54445
- }
54446
- setTimeout(function () {
54447
- _this.rootContext.fireEvent(ComCtxConstants.ROOT.ON_SEARCH, _this.model.searchModel);
54448
- _this._customRouteService.updateFragment(_this.model.fieldKey, input.value);
54449
- _this._customRouteService.updateWithoutFireEvent();
54450
- input.focus();
54451
- });
54452
- };
54453
- AppTopBarV2Component.prototype.onEsc = function (event, input) {
54454
- this.clearFilter(input);
54455
- };
54456
- AppTopBarV2Component.prototype.onEnter = function (event, input) {
54457
- this.onTopbarSearchClick(event, input);
54458
- };
54459
- AppTopBarV2Component.prototype.switchApp = function (item, openNewTab) {
54460
- if (openNewTab === void 0) { openNewTab = false; }
54461
- if (item.target == '_blank') {
54462
- if (!item.defaultRedirect) {
54463
- item.defaultRedirect = '';
54464
- }
54465
- // NamNH tip trick cho mot so may bi loi item.url = 'main' -> redirect sai khi click vao cac phan he
54466
- if (item.url == item.defaultRedirect) {
54467
- item.url = '/' + item.code.toLowerCase();
54468
- }
54469
- if (!openNewTab) {
54470
- top.location.href = item.url + "/" + item.defaultRedirect;
54471
- }
54472
- else {
54473
- window.open(item.url + "/" + item.defaultRedirect, '_blank');
54474
- }
54475
- }
54476
- else {
54477
- if (item.defaultRedirect != '' && !this.rootContext.data.flags.menuTopOpenning) {
54478
- this._router.navigateByUrl(item.defaultRedirect);
54479
- this.rootContext.data.currentAppMetadata = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == item.code; });
54480
- if (this.rootContext.data.currentAppMetadata
54481
- && this.rootContext.data.currentAppMetadata.showDefaultSetting != undefined
54482
- && this.rootContext.data.currentAppMetadata.showDefaultSetting != null) {
54483
- this.showDefaultSetting = this.rootContext.data.currentAppMetadata.showDefaultSetting && this.showDefaultSetting;
54484
- }
54485
- }
54486
- }
54487
- };
54488
- AppTopBarV2Component.prototype.hasAdvanceSearchBox = function () {
54489
- return this.model.searchModel.hasAdvanceSearch;
54490
- };
54491
- AppTopBarV2Component.prototype.isAdvanceSearching = function () {
54492
- return this.hasAdvanceSearchValue(this.model.searchModel);
54493
- };
54494
- AppTopBarV2Component.prototype.hasAdvanceSearchValue = function (obj) {
54495
- for (var key in obj) {
54496
- if (key === '_k' || key === 'hasAdvanceSearch') {
54497
- continue;
54498
- }
54499
- if (obj[key] != null && obj[key] != '') {
54500
- return false;
54501
- }
54502
- }
54503
- return true;
54504
- };
54505
- AppTopBarV2Component.prototype.getComponentId = function () {
54506
- return 'TOPBAR';
54507
- };
54508
- AppTopBarV2Component.prototype.goToHome = function () {
54509
- this.rootContext.fireEvent('GO_HOME');
54510
- };
54511
- AppTopBarV2Component.prototype.onEditInfo = function (event) {
54512
- event.preventDefault();
54513
- var currentAppSetting = this.environment.appMetadata.appSwitcher.find(function (x) { return x.code == 'USER'; });
54514
- if (currentAppSetting) {
54515
- this.switchApp(currentAppSetting);
54516
- }
54517
- else {
54518
- console.error('Bạn chưa thiết lập metadata cho trang cá nhân');
54519
- }
54520
- };
54521
- AppTopBarV2Component.prototype.onChangePassword = function (event) {
54522
- event.preventDefault();
54523
- // this.changePassword.showPopup(this._userService.getId());
54524
- };
54525
- AppTopBarV2Component.prototype.onTopbarLogout = function () {
54526
- if (!localStorage.getItem('currentUrl')) {
54527
- localStorage.setItem('currentUrl', top.location.href);
54528
- }
54529
- this._authenService.logout();
54530
- };
54531
- AppTopBarV2Component.prototype.settingDefault = function () {
54532
- this.model.dataModelSetting = {
54533
- data: {},
54534
- showSettings: true
54535
- };
54536
- };
54537
- AppTopBarV2Component.prototype.onShowSettings = function (ev) {
54538
- this.rootContext.fireEvent(ComCtxConstants.ROOT_USMART.CONFIG_DATA_DEFAULT_OPENED);
54539
- };
54540
- AppTopBarV2Component.prototype.onCloseSettings = function (ev) {
54541
- this.rootContext.fireEvent(ComCtxConstants.ROOT_USMART.CONFIG_DATA_DEFAULT_CLOSED);
54542
- };
54543
- AppTopBarV2Component.prototype.showProfilePage = function () {
54544
- if (this._userService.isSinhVienAccount()) {
54545
- return false;
54546
- }
54547
- return true;
54548
- };
54549
- AppTopBarV2Component.prototype.login = function () {
54550
- this.rootContext.fireEvent('LOGIN');
54551
- };
54552
- AppTopBarV2Component.prototype.setNotify = function (message) {
54553
- this.message = message;
54554
- };
54555
- AppTopBarV2Component.prototype.handleMouseOver = function (evt) {
54556
- evt.target.stop();
54557
- };
54558
- AppTopBarV2Component.prototype.handleMouseOut = function (evt) {
54559
- evt.target.start();
54560
- };
54561
- AppTopBarV2Component.prototype.showNotificationReload = function () {
54562
- var _this = this;
54563
- this.message = 'Hệ thống có phiên bản mới, hãy refresh trình duyệt để cập nhật';
54564
- this.rootContext.fireEvent(ComCtxConstants.ROOT.SHOW_REJECT_CONFIRM, false);
54565
- this._notifierService.showConfirm(this.message).then(function (res) {
54566
- _this.reloadWindow();
54567
- });
54568
- // if (this.intervalCountdown) {
54569
- // clearInterval(this.intervalCountdown);
54570
- // }
54571
- // const date = new Date();
54572
- // const goalDate = (new Date(date.getTime() + 10 * 1000)).getTime(); // Đếm 10s
54573
- // this.intervalCountdown = setInterval(f => {
54574
- // const now = new Date().getTime();
54575
- // const distance = goalDate - now;
54576
- // var seconds = Math.floor(distance / 1000);
54577
- // // If the count down is finished, write some text
54578
- // if (distance < 0) {
54579
- // clearInterval(this.intervalCountdown);
54580
- // this.reloadWindow();
54581
- // return;
54582
- // }
54583
- // let message = `Trình duyệt sẽ khởi động lại sau ${seconds}s`;
54584
- // if (seconds < 1) {
54585
- // message = 'Trình duyệt sẽ khởi động lại ngay bây giờ';
54586
- // }
54587
- // this._notifierService.showConfirm(
54588
- // message, null, null, false, this._translateService.instant('CONFIRM.ACCEPT_LABEL'),
54589
- // 'pi pi-check'
54590
- // ).then(res => {
54591
- // clearInterval(this.intervalCountdown);
54592
- // this.reloadWindow();
54593
- // });
54594
- // }, 1000);
54595
- };
54596
- AppTopBarV2Component.prototype.reloadWindow = function () {
54597
- top.location.reload();
54598
- };
54599
- return AppTopBarV2Component;
54600
- }(ComponentBase));
54601
- AppTopBarV2Component.decorators = [
54602
- { type: i0.Component, args: [{
54603
- selector: 'app-topbar-v2',
54604
- template: "<div class=\"topbar clearfix tn-l-top-bar\">\r\n <div class=\"topbar-left tn-l-top-bar-left\" [ngClass]=\"{'beta-version': !environment.isProduction }\">\r\n <div class=\"tn-l-left-menu-toggle-block\">\r\n <a tabindex=\"1\" id=\"menu-button\" class=\"tn-l-left-menu-toggle\" href=\"#\"\r\n (click)=\"_commonService.onMenuButtonClick($event)\">\r\n <i class=\"pi pi-chevron-left\"></i>\r\n </a>\r\n </div>\r\n\r\n <div class=\"topbar-logo tn-l-logo-wrapper\">\r\n <a tabindex=\"2\" href=\"javascript:\" style=\"display: inline-block;\">\r\n <img class=\"topbar-logo tn-l-logo\" [src]=\"environment.appMetadata.main.logo\" (click)=\"goToHome()\" /></a>\r\n </div>\r\n <div class=\"topbar-title tn-l-logo-title-block\">\r\n <div class=\"topbar-owner\">\r\n {{environment.appMetadata.main.owner}}\r\n </div>\r\n <div class=\"topbar-description\">\r\n {{environment.appMetadata.main.title}}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"setting-default-container\">\r\n <ng-container *ngIf=\"showDefaultSetting && currentUser\">\r\n <a tabindex=\"3\" href=\"javascript:void(0)\" class=\"tn-l-m-default-setting pi pi-cog\"\r\n (click)=\"settingDefault()\">\r\n </a>\r\n <h3 class=\"tn-l-default-detting\" (click)=\"settingDefault()\">\r\n {{defaultDataSetting}} <i class=\"pi pi-pencil\" style=\"margin-left:10px\"></i></h3>\r\n </ng-container>\r\n </div>\r\n <div #notify class=\"notify-message\">\r\n <marquee (mouseover)=\"handleMouseOver($event)\" (mouseout)=\"handleMouseOut($event)\">{{message}}</marquee>\r\n </div>\r\n <div class=\"topbar-right tn-l-top-bar-right\" [ngClass]=\"{'beta-version': !environment.isProduction}\"\r\n oncontextmenu=\"return false\">\r\n <div class=\"tn-l-top-bar-right-block-1\">\r\n <a tabindex=\"4\" class=\"topbar-menu-button\" id=\"topbar-menu-button\" href=\"#\"\r\n (click)=\"_commonService.onTopbarMenuButtonClick($event)\">\r\n <svg focusable=\"false\" class=\"tn-m-topbar-menu-toggle\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <span *ngIf=\"messages.totalUnRead > 0\" class=\"topbar-badge animated rubberBand\"\r\n [ngClass]=\"{'topbar-badge-bounce': messages.bounceNoti}\">{{messages.totalUnRead}}</span>\r\n </a>\r\n </div>\r\n\r\n <div class=\"tn-l-top-bar-right-block-2\">\r\n <ul class=\"topbar-items fadeInDown\" [ngClass]=\"{'topbar-items-visible': _commonService.topbarMenuActive}\">\r\n <li #profile class=\"profile-item tn-l-top-bar-menu-item\"\r\n *ngIf=\"_commonService.profileMode==='top'||_commonService.isHorizontal()\"\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === profile}\">\r\n\r\n <a href=\"#\" tabindex=\"10\" class=\"UserPane tn-l-top-bar-menu-item-inner\"\r\n (click)=\"_commonService.onTopbarItemClick($event,profile)\">\r\n <div class=\"profile-image-wrapper topbar-icon-left\">\r\n <img class=\"profile-image tn-l-profile-img\" [src-fallback]=\"defaultAvatar\"\r\n [src]=\"getCurrentUserAvatar()\" />\r\n </div>\r\n <div class=\"profile-info-wrapper\">\r\n <div class=\"topbar-item-name-wrapper\"\r\n [ngClass]=\"{'not-show-position': !getCurrentUserPosition()}\">\r\n <span class=\"topbar-item-name tn-l-user-name\">{{getCurrentUserFullName()}}</span>\r\n </div>\r\n <div class=\"topbar-item-role-wrapper tn-l-topbar-item-role-wrapper\"><span\r\n class=\"topbar-item-role\">{{getCurrentUserPosition()}}</span></div>\r\n </div>\r\n <i class=\"pi pi-user\" style=\"opacity: 0; position: absolute;\"></i>\r\n </a>\r\n\r\n <ul class=\"layout-menu fadeInDown tn-l-switcher\">\r\n <li *ngIf=\"currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"onTopbarLogout()\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>\u0110\u0103ng xu\u1EA5t</span>\r\n </a>\r\n </li>\r\n <li *ngIf=\"!currentUser\" role=\"menuitem\">\r\n <a href=\"javascript:;\" (click)=\"login()\">\r\n <i class=\"pi pi-sign-in\"></i>\r\n <span>\u0110\u0103ng nh\u1EADp</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li #help class=\"menu-help tn-l-top-bar-menu-item\" tn-app-help></li>\r\n <li id=\"li-notifications\" class=\"tn-l-top-bar-menu-item\" #messages\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === messages || _commonService.activeTopbarItem === 0}\"\r\n tn-app-notification (openMenu)=\"_commonService.onTopbarItemClick($event,messages)\"></li>\r\n <li id=\"li-app-switcher\" class=\"tn-l-top-bar-menu-item\" #modules\r\n [ngClass]=\"{'active-top-menu':_commonService.activeTopbarItem === modules || _commonService.activeTopbarItem === 1}\">\r\n <a href=\"#\" tabindex=\"7\" class=\"tn-l-top-bar-menu-item-inner\" style=\"height: 30px;\"\r\n pTooltip=\"Danh s\u00E1ch ph\u00E2n h\u1EC7\" tooltipPosition=\"bottom\"\r\n (click)=\"_commonService.onTopbarItemClick($event,modules)\">\r\n <span class=\"topbar-icon-left tn-l-topbar-icon-left\">\r\n <svg focusable=\"false\" class=\"topbar-icon animated swing svgmodule\" role=\"img\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\r\n <path fill=\"currentColor\"\r\n d=\"M0 224h192V32H0v192zm256-192v192h192V32H256zM0 480h192V288H0v192zm256-192v192h192V288H256z\">\r\n </path>\r\n </svg>\r\n <!-- <i class=\"pi pi-microsoft\"></i> -->\r\n </span>\r\n <span class=\"topbar-item-name\">{{ 'Danh s\u00E1ch ph\u00E2n h\u1EC7' | translate}}</span>\r\n </a>\r\n <ul class=\"app-switcher layout-menu fadeInDown\">\r\n <tn-custom-scrollbar #scrollbar class=\"app-switcher-holder\">\r\n <li role=\"menuitem\" class=\"wrapper-appswitch\">\r\n <ng-container *ngFor=\"let item of appSwitcherItems; let ind = index;\">\r\n <a class=\"switcher-item tn-l-switcher-item\" href=\"javascript:\"\r\n (click)=\"switchApp(item, true)\">\r\n <span class=\"tn-l-switcher-item-inner\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon tn-l-switcher-item-icon\"></i>\r\n <div class=\"tn-l-switcher-item-label\">\r\n {{ item.title | translate}}\r\n </div>\r\n </span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </tn-custom-scrollbar>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>",
54605
- providers: [ComponentContextService],
54606
- styles: [".topBarSearchButton:disabled{background-color:#eee!important;border:1px solid #c8c8c8!important;border-right:none!important;color:#c1c1c1!important;opacity:1}::ng-deep app-topbar a{outline:none}input:disabled::-moz-placeholder{color:#b1b1b1}input:disabled:-ms-input-placeholder{color:#b1b1b1}input:disabled::placeholder{color:#b1b1b1}.UserPane.UserPane{display:flex}.profile-image-wrapper{order:1}.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name.tn-l-user-name{float:none;margin-top:0}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{display:inline-flex;flex-direction:column;float:none;justify-content:center;order:0;text-align:right}.tn-l-logo{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.tn-l-default-detting{color:#fff;cursor:pointer;margin:0}.tn-l-left-menu-toggle-block{-ms-grid-row-align:stretch;align-items:center;align-self:stretch;box-shadow:0 0 5px 0 rgba(0,0,0,.3764705882352941);display:flex}.tn-l-left-menu-toggle{color:#fff;padding:8px;transition:transform .25s ease-in-out}::ng-deep .layout-menu-static-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-left:0;margin-right:30px}.topbar-logo.topbar-logo.topbar-logo{float:none}.tn-l-logo.tn-l-logo.tn-l-logo.tn-l-logo{height:40px;margin:0;width:auto}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{font-size:0;height:auto;margin:0;padding-left:8px;padding-right:8px;width:auto}.tn-l-top-bar{display:flex}.topbar-description,.topbar-owner{white-space:nowrap}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:15px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:11px;text-transform:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{display:flex;float:none;width:auto}.tn-l-top-bar-left{align-items:center}.tn-m-topbar-menu-toggle{display:block;height:28px;margin:auto;width:30px}.tn-m-topbar-menu-toggle g{stroke:#fff}.tn-m-topbar-menu-toggle path{fill:#fff}.tn-l-m-default-setting{display:none}.setting-default-container{justify-content:center}.notify-message,.setting-default-container{align-items:center;display:flex;margin-left:30px}.notify-message{flex:1 1;overflow:hidden}.notify-message>marquee{color:#ff0;font-size:500;white-space:nowrap}.search-item{margin-right:10px}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{background:#fff}.tn-l-switcher-item-label{color:#52abff;text-align:center;text-shadow:none}.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon.tn-l-switcher-item-icon{color:#52abff;font-size:38px;margin:5px auto;text-shadow:none}.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item.tn-l-switcher-item{padding:8px}.tn-l-switcher.tn-l-switcher{margin-bottom:0}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{margin-top:0;width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+0){border-left:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1){border-right:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2){border:none}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+1):last-child,::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item:nth-child(3n+2):last-child{width:unset}::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a span{line-height:1.2}::ng-deep .layout-wrapper app-topbar-v2 .topbar .topbar-left{box-shadow:none}::ng-deep .layout-wrapper app-topbar-v2 .wrapper-appswitch{display:-ms-grid;display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));text-align:center}@media (max-width:1024px){::ng-deep .layout-wrapper app-topbar-v2 .layout-menu li a.switcher-item{width:unset}}@media (min-width:1025px){.tn-l-top-bar-right{align-items:center;display:flex;justify-content:space-between}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding:0 15px}.topbar-items.topbar-items.topbar-items{align-items:center;display:flex;flex-direction:row-reverse;justify-content:flex-start;margin:0}.topbar-items.topbar-items.topbar-items,.topbar-items.topbar-items.topbar-items>li{float:none}::ng-deep .topbar .topbar-items>li>a{margin-top:0}::ng-deep .topbar .topbar-items>li>a>span>i{color:#fff;font-size:24px}.topbar .topbar-items>li>a.UserPane{height:auto;line-height:inherit;top:0}a.UserPane .profile-image.profile-image.profile-image.profile-image{margin-top:0}}@media (min-width:1025px) and (max-width:1400px){.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block.tn-l-logo-title-block{margin-right:19px}.search-item{margin-right:0}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{padding-left:15px}.topbar-items>li.profile-item{margin-left:14px}}@media (max-width:1024px){.tn-l-m-default-setting{align-items:center;color:#fff;display:flex;font-size:28px;height:36px;justify-content:center;width:36px}.tn-l-default-detting{display:none}::ng-deep .layout-menu-static-mobile-inactive app-topbar .tn-l-left-menu-toggle{transform:rotate(180deg)}.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper.profile-info-wrapper{text-align:left}.topbar .topbar-right #topbar-menu-button{align-items:center;display:flex;justify-content:center;width:36px}.tn-l-top-bar-right-block-1{display:flex}.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper.tn-l-logo-wrapper{padding-left:5px;padding-right:5px}.tn-l-logo-title-block,.tn-l-top-bar-left,.topbar-description,.topbar-owner{overflow:hidden}.topbar-description,.topbar-owner{text-overflow:ellipsis}.tn-l-top-bar-menu-item:empty{display:none}.tn-l-top-bar-left.tn-l-top-bar-left.tn-l-top-bar-left{padding-left:0;padding-right:0}.topbar-title.topbar-title.topbar-title.topbar-title{margin:0}.topbar-owner.topbar-owner.topbar-owner.topbar-owner.topbar-owner{font-size:14px}.topbar-description.topbar-description.topbar-description.topbar-description.topbar-description{font-size:10px}.tn-l-top-bar-right{flex:1;position:relative}.topbar-menu-button span.topbar-badge{right:-4px}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right{align-items:center;display:flex;justify-content:flex-end;padding:0 .5em}.tn-l-top-bar-right.tn-l-top-bar-right.tn-l-top-bar-right #topbar-menu-button{margin-left:.5em;position:relative;right:0;top:0}.app-switcher.layout-menu.layout-menu.layout-menu.layout-menu{width:270px}.profile-image-wrapper{order:0}.tn-l-user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:220px}::ng-deep app-topbar .tn-l-top-bar-menu-item .topbar-icon-left{align-items:center;display:flex;justify-content:center}.tn-l-topbar-item-role-wrapper{display:none}}"]
54607
- },] }
54608
- ];
54609
- AppTopBarV2Component.ctorParameters = function () { return [
54610
- { type: CustomRouterService },
54611
- { type: i3.Router },
54612
- { type: CommonService },
54613
- { type: AuthenService },
54614
- { type: i0.ChangeDetectorRef },
54615
- { type: i0.Injector },
54616
- { type: PermissionService },
54617
- { type: ModuleConfigService },
54618
- { type: UserService },
54619
- { type: NotifierService },
54620
- { type: i2.TranslateService }
54621
- ]; };
54622
- AppTopBarV2Component.propDecorators = {
54623
- input: [{ type: i0.ViewChild, args: ['input',] }],
54624
- notify: [{ type: i0.ViewChild, args: ['notify', { static: true },] }]
54625
- };
54626
-
54627
54667
  function coreDeclaration() {
54628
54668
  return [
54629
54669
  AddressComponent,
@@ -54786,7 +54826,7 @@
54786
54826
  FileKySoSimComponent,
54787
54827
  TaiLieuComponent,
54788
54828
  TaiLieuCuaToiComponent,
54789
- KhaiThacTaiLieuDungChungComponent
54829
+ KhaiThacTaiLieuDungChungComponent,
54790
54830
  ];
54791
54831
  }
54792
54832
  function coreModuleImport() {
@@ -56121,6 +56161,44 @@
56121
56161
  { type: CommonService }
56122
56162
  ]; };
56123
56163
 
56164
+ var AnonymousTokenInterceptor = /** @class */ (function () {
56165
+ function AnonymousTokenInterceptor(_moduleConfigService, _applicationContextService) {
56166
+ this._moduleConfigService = _moduleConfigService;
56167
+ this._applicationContextService = _applicationContextService;
56168
+ this.env = this._moduleConfigService.getConfig().environment;
56169
+ }
56170
+ AnonymousTokenInterceptor.prototype.intercept = function (request, next) {
56171
+ // Tạm thời xử lý đọc access token từ config, sau khi Phúc xử lý xong phần backend thì sẽ thay đổi logic đoạn này để đọc từ querystring
56172
+ try {
56173
+ this.appMetadata = this._applicationContextService.getRootContext().data.currentAppMetadata;
56174
+ if (this.appMetadata && this.appMetadata.enableTemporaryAccessToken) {
56175
+ console.log("using temporary accesstoken from config: " + this.appMetadata.temporaryAccessToken);
56176
+ request = request.clone({
56177
+ setHeaders: {
56178
+ Authorization: "Bearer " + this.appMetadata.temporaryAccessToken,
56179
+ PortalAlias: location.origin
56180
+ }
56181
+ });
56182
+ }
56183
+ }
56184
+ catch (e) {
56185
+ console.error("error on AnonymousTokenInterceptor " + e);
56186
+ }
56187
+ return next.handle(request);
56188
+ };
56189
+ return AnonymousTokenInterceptor;
56190
+ }());
56191
+ AnonymousTokenInterceptor.ɵprov = i0.ɵɵdefineInjectable({ factory: function AnonymousTokenInterceptor_Factory() { return new AnonymousTokenInterceptor(i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(ApplicationContextService)); }, token: AnonymousTokenInterceptor, providedIn: "root" });
56192
+ AnonymousTokenInterceptor.decorators = [
56193
+ { type: i0.Injectable, args: [{
56194
+ providedIn: 'root'
56195
+ },] }
56196
+ ];
56197
+ AnonymousTokenInterceptor.ctorParameters = function () { return [
56198
+ { type: ModuleConfigService },
56199
+ { type: ApplicationContextService }
56200
+ ]; };
56201
+
56124
56202
  var PublicFunction = /** @class */ (function () {
56125
56203
  function PublicFunction() {
56126
56204
  }
@@ -56217,6 +56295,11 @@
56217
56295
  useClass: TraceInterceptor,
56218
56296
  multi: true,
56219
56297
  },
56298
+ {
56299
+ provide: i1$1.HTTP_INTERCEPTORS,
56300
+ useClass: AnonymousTokenInterceptor,
56301
+ multi: true,
56302
+ },
56220
56303
  i1.MessageService,
56221
56304
  i1.ConfirmationService,
56222
56305
  i2$1.DatePipe,
@@ -58188,6 +58271,7 @@
58188
58271
  exports.ɵfd = LogInterceptor;
58189
58272
  exports.ɵfe = PermissionUtilsInterceptor;
58190
58273
  exports.ɵff = TraceInterceptor;
58274
+ exports.ɵfg = AnonymousTokenInterceptor;
58191
58275
  exports.ɵg = AdvanceSearchComponent;
58192
58276
  exports.ɵh = AppRootMenuComponent;
58193
58277
  exports.ɵi = AppTopBarComponent;