@brggroup/share-lib 0.1.65 → 0.1.67

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 (38) hide show
  1. package/fesm2022/brggroup-share-lib.mjs +990 -143
  2. package/fesm2022/brggroup-share-lib.mjs.map +1 -1
  3. package/lib/WF/model/WF_DocInstanceStageActionRole.model.d.ts +36 -0
  4. package/lib/WF/model/WF_DocInstanceStageActionRole.model.d.ts.map +1 -0
  5. package/lib/WF/model/WF_Template.model.d.ts +38 -0
  6. package/lib/WF/model/WF_Template.model.d.ts.map +1 -0
  7. package/lib/WF/model/WF_TemplateActionRef.model.d.ts +40 -0
  8. package/lib/WF/model/WF_TemplateActionRef.model.d.ts.map +1 -0
  9. package/lib/WF/model/WF_TemplateStage.model.d.ts +55 -0
  10. package/lib/WF/model/WF_TemplateStage.model.d.ts.map +1 -0
  11. package/lib/WF/model/WF_TemplateStageAction.model.d.ts +81 -0
  12. package/lib/WF/model/WF_TemplateStageAction.model.d.ts.map +1 -0
  13. package/lib/WF/model/WF_TemplateStageActionRole.model.d.ts +33 -0
  14. package/lib/WF/model/WF_TemplateStageActionRole.model.d.ts.map +1 -0
  15. package/lib/WF/wf-editor/minimap.d.ts.map +1 -0
  16. package/lib/{components → WF}/wf-editor/workflow-editor.component.d.ts +3 -1
  17. package/lib/WF/wf-editor/workflow-editor.component.d.ts.map +1 -0
  18. package/lib/WF/wf-template/detail/wf-template.detail.d.ts +48 -0
  19. package/lib/WF/wf-template/detail/wf-template.detail.d.ts.map +1 -0
  20. package/lib/WF/wf-template/list/wf-template.list.d.ts +18 -0
  21. package/lib/WF/wf-template/list/wf-template.list.d.ts.map +1 -0
  22. package/lib/WF/wf-template.service.d.ts +32 -0
  23. package/lib/WF/wf-template.service.d.ts.map +1 -0
  24. package/lib/admin/component/index.d.ts +1 -0
  25. package/lib/admin/component/index.d.ts.map +1 -1
  26. package/lib/admin/component/register/register.component.d.ts +25 -0
  27. package/lib/admin/component/register/register.component.d.ts.map +1 -0
  28. package/lib/admin/component/user/detail/user-detail.d.ts +1 -0
  29. package/lib/admin/component/user/detail/user-detail.d.ts.map +1 -1
  30. package/lib/components/index.d.ts +1 -1
  31. package/lib/components/index.d.ts.map +1 -1
  32. package/lib/components/layout/menu/side-menu/side-menu.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/public-api.d.ts +2 -0
  35. package/public-api.d.ts.map +1 -1
  36. package/lib/components/wf-editor/minimap.d.ts.map +0 -1
  37. package/lib/components/wf-editor/workflow-editor.component.d.ts.map +0 -1
  38. /package/lib/{components → WF}/wf-editor/minimap.d.ts +0 -0
@@ -11,9 +11,9 @@ import * as i15 from 'ng-zorro-antd/modal';
11
11
  import { NzModalService, NzModalModule, NzModalRef, NZ_MODAL_DATA, NzModalComponent, NzModalContentDirective, NzModalTitleDirective, NzModalFooterDirective } from 'ng-zorro-antd/modal';
12
12
  import * as i1 from 'ng-zorro-antd/notification';
13
13
  import { jwtDecode } from 'jwt-decode';
14
- import { switchMap, distinctUntilChanged, filter as filter$1, takeUntil } from 'rxjs/operators';
14
+ import { switchMap, distinctUntilChanged, filter as filter$1, takeUntil, startWith as startWith$1, map as map$1 } from 'rxjs/operators';
15
15
  import * as i2 from '@angular/forms';
16
- import { FormGroup, FormsModule, ReactiveFormsModule, Validators, FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';
16
+ import { FormGroup, FormsModule, ReactiveFormsModule, Validators, FormBuilder, NG_VALUE_ACCESSOR, FormControl } from '@angular/forms';
17
17
  import * as i1$1 from '@angular/common';
18
18
  import { Location, CommonModule, NgTemplateOutlet, DecimalPipe, DatePipe } from '@angular/common';
19
19
  import { Overlay } from '@angular/cdk/overlay';
@@ -94,6 +94,7 @@ import * as i12$1 from 'ng-zorro-antd/color-picker';
94
94
  import { NzColorPickerModule } from 'ng-zorro-antd/color-picker';
95
95
  import * as i2$4 from 'ng-zorro-antd/progress';
96
96
  import { NzProgressModule } from 'ng-zorro-antd/progress';
97
+ import { NzSwitchModule } from 'ng-zorro-antd/switch';
97
98
  import * as i3$6 from '@angular/cdk/drag-drop';
98
99
  import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
99
100
  import * as i10 from 'ng-zorro-antd/slider';
@@ -114,7 +115,6 @@ import * as i6$5 from 'ng-zorro-antd/list';
114
115
  import { NzListModule } from 'ng-zorro-antd/list';
115
116
  import * as i7$1 from 'ng-zorro-antd/avatar';
116
117
  import { NzAvatarModule } from 'ng-zorro-antd/avatar';
117
- import { NzSwitchModule } from 'ng-zorro-antd/switch';
118
118
 
119
119
  var TranslateKey;
120
120
  (function (TranslateKey) {
@@ -630,7 +630,7 @@ class TokenStorage {
630
630
  }
631
631
  }
632
632
 
633
- const URLs$e = {
633
+ const URLs$f = {
634
634
  login: '/api/Auth/Login',
635
635
  register: '/api/Auth/Register',
636
636
  pingAuth: '/api/Auth/PingAuth',
@@ -699,7 +699,7 @@ class AuthService extends HTTPService {
699
699
  }
700
700
  }
701
701
  async sendSignIn(body) {
702
- return firstValueFrom(this.httpClient.post(AppGlobals.apiEndpoint + URLs$e.login, body, {
702
+ return firstValueFrom(this.httpClient.post(AppGlobals.apiEndpoint + URLs$f.login, body, {
703
703
  headers: new HttpHeaders().set('Content-Type', 'application/json').set('No-Loading-Mark', '1'),
704
704
  }));
705
705
  }
@@ -719,7 +719,7 @@ class AuthService extends HTTPService {
719
719
  ---------------------------------------- */
720
720
  async pingAuth() {
721
721
  try {
722
- const res = await this.get(AppGlobals.apiEndpoint + URLs$e.pingAuth, true);
722
+ const res = await this.get(AppGlobals.apiEndpoint + URLs$f.pingAuth, true);
723
723
  return res?.IsSuccess;
724
724
  }
725
725
  catch {
@@ -751,10 +751,10 @@ class AuthService extends HTTPService {
751
751
  PASSWORD
752
752
  ---------------------------------------- */
753
753
  changePassword(data) {
754
- return this.postData(AppGlobals.apiEndpoint + URLs$e.changePassword, data);
754
+ return this.postData(AppGlobals.apiEndpoint + URLs$f.changePassword, data);
755
755
  }
756
756
  setPass(data) {
757
- return this.postData(AppGlobals.apiEndpoint + URLs$e.setPass, data);
757
+ return this.postData(AppGlobals.apiEndpoint + URLs$f.setPass, data);
758
758
  }
759
759
  /* ----------------------------------------
760
760
  REGISTER
@@ -775,7 +775,7 @@ class AuthService extends HTTPService {
775
775
  }
776
776
  }
777
777
  async sendSignUp(d) {
778
- return this.postData(AppGlobals.apiEndpoint + URLs$e.register, d);
778
+ return this.postData(AppGlobals.apiEndpoint + URLs$f.register, d);
779
779
  }
780
780
  /* ----------------------------------------
781
781
  CHANGE ORG
@@ -797,7 +797,7 @@ class AuthService extends HTTPService {
797
797
  }
798
798
  async sendChangeOrg(App_Org_Id) {
799
799
  let params = new HttpParams().append('App_Org_Id', App_Org_Id);
800
- return this.postParams(AppGlobals.apiEndpoint + URLs$e.changeOrgLogin, params);
800
+ return this.postParams(AppGlobals.apiEndpoint + URLs$f.changeOrgLogin, params);
801
801
  }
802
802
  static pingInterVal;
803
803
  startPingAuth(intervalTime) {
@@ -3314,7 +3314,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3314
3314
  }]
3315
3315
  }] });
3316
3316
 
3317
- const URLs$d = {
3317
+ const URLs$e = {
3318
3318
  getById: '/api/App_Dic_Domain/GetById',
3319
3319
  getAll: '/api/App_Dic_Domain/GetAll',
3320
3320
  getList: '/api/App_Dic_Domain/GetList',
@@ -3326,21 +3326,21 @@ const URLs$d = {
3326
3326
  class DicDomainService extends HTTPService {
3327
3327
  getById(id) {
3328
3328
  let pr = new HttpParams().append('id', id);
3329
- return this.postParams(AppGlobals.apiEndpoint + URLs$d.getById, pr);
3329
+ return this.postParams(AppGlobals.apiEndpoint + URLs$e.getById, pr);
3330
3330
  }
3331
3331
  getPaging(filter) {
3332
- return this.postData(AppGlobals.apiEndpoint + URLs$d.getPaging, filter);
3332
+ return this.postData(AppGlobals.apiEndpoint + URLs$e.getPaging, filter);
3333
3333
  }
3334
3334
  addOrEdit(obj) {
3335
- return this.postData(AppGlobals.apiEndpoint + URLs$d.addOrEdit, obj);
3335
+ return this.postData(AppGlobals.apiEndpoint + URLs$e.addOrEdit, obj);
3336
3336
  }
3337
3337
  delete(id) {
3338
3338
  const params = new HttpParams().append('id', id);
3339
- return this.postParams(AppGlobals.apiEndpoint + URLs$d.delete, params);
3339
+ return this.postParams(AppGlobals.apiEndpoint + URLs$e.delete, params);
3340
3340
  }
3341
3341
  async getByDomain(DomainCode) {
3342
3342
  var pr = new HttpParams().append('DomainCode', DomainCode);
3343
- const ret = await this.postParams(AppGlobals.apiEndpoint + URLs$d.getByDomain, pr);
3343
+ const ret = await this.postParams(AppGlobals.apiEndpoint + URLs$e.getByDomain, pr);
3344
3344
  return ret.Data;
3345
3345
  }
3346
3346
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DicDomainService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
@@ -4648,7 +4648,7 @@ class DicDomainListComponent extends BaseComponent {
4648
4648
  this.getData();
4649
4649
  }
4650
4650
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DicDomainListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
4651
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: DicDomainListComponent, isStandalone: true, selector: "app-dic-domain-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 195px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'DomainCode' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'DomainCode'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Domain Code\r\n </th>\r\n <th>Item Code</th>\r\n <th>Item Value</th>\r\n <th nzWidth=\"100px\">Order Value</th>\r\n <th nzWidth=\"150px\">Child Domain Code</th>\r\n <th nzWidth=\"150px\">Parent Item Code</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\" nzRight>Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.DomainCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemValue\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.DomainCode }}</td>\r\n <td>{{ row.ItemCode }}</td>\r\n <td>{{ row.ItemValue }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ChildDomainCode }}</td>\r\n <td>{{ row.ParentItemCode }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.DomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ItemCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-textarea\r\n [minRows]=\"1\"\r\n [formItemNoButtom]=\"true\"\r\n [(_ngModel)]=\"selectedRow.ItemValue\"\r\n ></extend-textarea>\r\n </td>\r\n <td>\r\n <extend-input-number [(_ngModel)]=\"selectedRow.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ChildDomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ParentItemCode\"></extend-input>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzTagModule }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSave, selector: "icon-save", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "formItemNoButtom", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isTouched", "inputErrorMessage", "errorMessages"], outputs: ["_ngModelChange"] }] });
4651
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: DicDomainListComponent, isStandalone: true, selector: "app-dic-domain-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 195px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'DomainCode' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'DomainCode'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Domain Code\r\n </th>\r\n <th>Item Code</th>\r\n <th>Item Value</th>\r\n <th nzWidth=\"100px\">Order Value</th>\r\n <th nzWidth=\"150px\">Child Domain Code</th>\r\n <th nzWidth=\"150px\">Parent Item Code</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\" nzRight>Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.DomainCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemValue\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.DomainCode }}</td>\r\n <td>{{ row.ItemCode }}</td>\r\n <td>{{ row.ItemValue }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ChildDomainCode }}</td>\r\n <td>{{ row.ParentItemCode }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.DomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ItemCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-textarea\r\n [minRows]=\"1\"\r\n [formItemNoButtom]=\"true\"\r\n [(_ngModel)]=\"selectedRow.ItemValue\"\r\n ></extend-textarea>\r\n </td>\r\n <td>\r\n <extend-input-number [(_ngModel)]=\"selectedRow.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ChildDomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ParentItemCode\"></extend-input>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzTagModule }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSave, selector: "icon-save", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "formItemNoButtom", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isTouched", "inputErrorMessage", "errorMessages"], outputs: ["_ngModelChange"] }] });
4652
4652
  }
4653
4653
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DicDomainListComponent, decorators: [{
4654
4654
  type: Component,
@@ -4672,7 +4672,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
4672
4672
  NzButtonModule,
4673
4673
  Box,
4674
4674
  ExtendTextArea,
4675
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 195px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'DomainCode' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'DomainCode'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Domain Code\r\n </th>\r\n <th>Item Code</th>\r\n <th>Item Value</th>\r\n <th nzWidth=\"100px\">Order Value</th>\r\n <th nzWidth=\"150px\">Child Domain Code</th>\r\n <th nzWidth=\"150px\">Parent Item Code</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\" nzRight>Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.DomainCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemValue\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.DomainCode }}</td>\r\n <td>{{ row.ItemCode }}</td>\r\n <td>{{ row.ItemValue }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ChildDomainCode }}</td>\r\n <td>{{ row.ParentItemCode }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.DomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ItemCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-textarea\r\n [minRows]=\"1\"\r\n [formItemNoButtom]=\"true\"\r\n [(_ngModel)]=\"selectedRow.ItemValue\"\r\n ></extend-textarea>\r\n </td>\r\n <td>\r\n <extend-input-number [(_ngModel)]=\"selectedRow.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ChildDomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ParentItemCode\"></extend-input>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
4675
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 195px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'DomainCode' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'DomainCode'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Domain Code\r\n </th>\r\n <th>Item Code</th>\r\n <th>Item Value</th>\r\n <th nzWidth=\"100px\">Order Value</th>\r\n <th nzWidth=\"150px\">Child Domain Code</th>\r\n <th nzWidth=\"150px\">Parent Item Code</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\" nzRight>Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.DomainCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemCode\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ItemValue\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.DomainCode }}</td>\r\n <td>{{ row.ItemCode }}</td>\r\n <td>{{ row.ItemValue }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ChildDomainCode }}</td>\r\n <td>{{ row.ParentItemCode }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.DomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ItemCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-textarea\r\n [minRows]=\"1\"\r\n [formItemNoButtom]=\"true\"\r\n [(_ngModel)]=\"selectedRow.ItemValue\"\r\n ></extend-textarea>\r\n </td>\r\n <td>\r\n <extend-input-number [(_ngModel)]=\"selectedRow.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ChildDomainCode\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.ParentItemCode\"></extend-input>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
4676
4676
  }] });
4677
4677
 
4678
4678
  let DicDomainSelectComponent$1 = class DicDomainSelectComponent {
@@ -4904,7 +4904,7 @@ class FileListComponent extends BaseComponent {
4904
4904
  }
4905
4905
  }
4906
4906
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: FileListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
4907
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: FileListComponent, isStandalone: true, selector: "app-file-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row [nzGutter]=\"[8, 0]\">\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" (click)=\"getData()\">{{ TranslateKey.SEARCH | translate }}</button>\r\n </div>\r\n <nz-upload\r\n [nzAction]=\"\r\n AppGlobals.apiEndpoint +\r\n '/api/file/Upload?SaveToDB=' +\r\n (SaveTo == 'DB' ? 'true' : 'false') +\r\n '&FileCode=' +\r\n FileCode\r\n \"\r\n (nzChange)=\"handleChange($event)\"\r\n >\r\n <button nz-button>\r\n <nz-icon nzType=\"upload\" />\r\n T\u1EA3i file\r\n </button>\r\n </nz-upload>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"3\"\r\n [placeHolder]=\"'Save To'\"\r\n [lstItem]=\"[\r\n {\r\n Code: 'DB',\r\n Name: 'DB',\r\n },\r\n {\r\n Code: 'DISC',\r\n Name: 'DISC',\r\n },\r\n ]\"\r\n [valueField]=\"'Code'\"\r\n [displayField]=\"'Name'\"\r\n [(_ngModel)]=\"SaveTo\"\r\n ></extend-select>\r\n <div nz-col [nzSpan]=\"8\">\r\n <input nz-input placeholder=\"File Code\" [(ngModel)]=\"FileCode\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 225px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th>Temp file</th>\r\n <th>Content only</th>\r\n <th>FileName</th>\r\n <th class=\"right\">FileSize</th>\r\n <th>FileId</th>\r\n <th nzWidth=\"100px\">Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.Code }}</td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsTemp\"></extend-checkbox></td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsContentOnly\"></extend-checkbox></td>\r\n <td>{{ row.FileName }}</td>\r\n <td class=\"right\">{{ row.FileSize || 0 | formatBytes }}</td>\r\n <td>\r\n {{ row.App_File_Id }}\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <i\r\n *ngIf=\"row.IsContentOnly\"\r\n nz-tooltip=\"Move to disk\"\r\n nz-icon\r\n nzType=\"file\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"moveFileToDisk(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"save(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"download\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"download(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <a\r\n nz-popconfirm\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n nzPopconfirmPlacement=\"top\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n nzOkDanger\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: NzUploadModule }, { kind: "component", type: i1$6.NzUploadComponent, selector: "nz-upload", inputs: ["nzType", "nzLimit", "nzSize", "nzFileType", "nzAccept", "nzAction", "nzDirectory", "nzOpenFileDialogOnClick", "nzBeforeUpload", "nzCustomRequest", "nzData", "nzFilter", "nzFileList", "nzDisabled", "nzHeaders", "nzListType", "nzMultiple", "nzName", "nzShowUploadList", "nzShowButton", "nzWithCredentials", "nzRemove", "nzPreview", "nzPreviewFile", "nzPreviewIsImage", "nzTransformFile", "nzDownload", "nzIconRender", "nzFileListRender"], outputs: ["nzChange", "nzFileListChange"], exportAs: ["nzUpload"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: ExtendSelectComponent, selector: "extend-select", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "dropdownMatchSelectWidth", "labelSpan", "labelFlex", "disabled", "required", "noBottom", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "displayFields", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "itemChange", "onFocus"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "directive", type: i9.NzPopconfirmDirective, selector: "[nz-popconfirm]", inputs: ["nzPopconfirmArrowPointAtCenter", "nzPopconfirmTitle", "nzPopconfirmTitleContext", "nz-popconfirm", "nzPopconfirmTrigger", "nzPopconfirmPlacement", "nzPopconfirmOrigin", "nzPopconfirmMouseEnterDelay", "nzPopconfirmMouseLeaveDelay", "nzPopconfirmOverlayClassName", "nzPopconfirmOverlayStyle", "nzPopconfirmVisible", "nzOkText", "nzOkType", "nzOkDisabled", "nzOkDanger", "nzCancelText", "nzBeforeConfirm", "nzIcon", "nzCondition", "nzPopconfirmShowArrow", "nzPopconfirmBackdrop", "nzAutofocus"], outputs: ["nzPopconfirmVisibleChange", "nzOnCancel", "nzOnConfirm"], exportAs: ["nzPopconfirm"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i5$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "pipe", type: FormatBytesPipe, name: "formatBytes" }] });
4907
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: FileListComponent, isStandalone: true, selector: "app-file-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row [nzGutter]=\"[8, 0]\">\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" (click)=\"getData()\">{{ TranslateKey.SEARCH | translate }}</button>\r\n </div>\r\n <nz-upload\r\n [nzAction]=\"\r\n AppGlobals.apiEndpoint +\r\n '/api/file/Upload?SaveToDB=' +\r\n (SaveTo == 'DB' ? 'true' : 'false') +\r\n '&FileCode=' +\r\n FileCode\r\n \"\r\n (nzChange)=\"handleChange($event)\"\r\n >\r\n <button nz-button>\r\n <nz-icon nzType=\"upload\" />\r\n T\u1EA3i file\r\n </button>\r\n </nz-upload>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"3\"\r\n [placeHolder]=\"'Save To'\"\r\n [lstItem]=\"[\r\n {\r\n Code: 'DB',\r\n Name: 'DB',\r\n },\r\n {\r\n Code: 'DISC',\r\n Name: 'DISC',\r\n },\r\n ]\"\r\n [valueField]=\"'Code'\"\r\n [displayField]=\"'Name'\"\r\n [(_ngModel)]=\"SaveTo\"\r\n ></extend-select>\r\n <div nz-col [nzSpan]=\"8\">\r\n <input nz-input placeholder=\"File Code\" [(ngModel)]=\"FileCode\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 225px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th>Temp file</th>\r\n <th>Content only</th>\r\n <th>FileName</th>\r\n <th class=\"right\">FileSize</th>\r\n <th>FileId</th>\r\n <th nzWidth=\"100px\">Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.Code }}</td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsTemp\"></extend-checkbox></td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsContentOnly\"></extend-checkbox></td>\r\n <td>{{ row.FileName }}</td>\r\n <td class=\"right\">{{ row.FileSize || 0 | formatBytes }}</td>\r\n <td>\r\n {{ row.App_File_Id }}\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <i\r\n *ngIf=\"row.IsContentOnly\"\r\n nz-tooltip=\"Move to disk\"\r\n nz-icon\r\n nzType=\"file\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"moveFileToDisk(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"save(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"download\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"download(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <a\r\n nz-popconfirm\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n nzPopconfirmPlacement=\"top\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n nzOkDanger\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: NzUploadModule }, { kind: "component", type: i1$6.NzUploadComponent, selector: "nz-upload", inputs: ["nzType", "nzLimit", "nzSize", "nzFileType", "nzAccept", "nzAction", "nzDirectory", "nzOpenFileDialogOnClick", "nzBeforeUpload", "nzCustomRequest", "nzData", "nzFilter", "nzFileList", "nzDisabled", "nzHeaders", "nzListType", "nzMultiple", "nzName", "nzShowUploadList", "nzShowButton", "nzWithCredentials", "nzRemove", "nzPreview", "nzPreviewFile", "nzPreviewIsImage", "nzTransformFile", "nzDownload", "nzIconRender", "nzFileListRender"], outputs: ["nzChange", "nzFileListChange"], exportAs: ["nzUpload"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: ExtendSelectComponent, selector: "extend-select", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "dropdownMatchSelectWidth", "labelSpan", "labelFlex", "disabled", "required", "noBottom", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "displayFields", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "itemChange", "onFocus"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "directive", type: i9.NzPopconfirmDirective, selector: "[nz-popconfirm]", inputs: ["nzPopconfirmArrowPointAtCenter", "nzPopconfirmTitle", "nzPopconfirmTitleContext", "nz-popconfirm", "nzPopconfirmTrigger", "nzPopconfirmPlacement", "nzPopconfirmOrigin", "nzPopconfirmMouseEnterDelay", "nzPopconfirmMouseLeaveDelay", "nzPopconfirmOverlayClassName", "nzPopconfirmOverlayStyle", "nzPopconfirmVisible", "nzOkText", "nzOkType", "nzOkDisabled", "nzOkDanger", "nzCancelText", "nzBeforeConfirm", "nzIcon", "nzCondition", "nzPopconfirmShowArrow", "nzPopconfirmBackdrop", "nzAutofocus"], outputs: ["nzPopconfirmVisibleChange", "nzOnCancel", "nzOnConfirm"], exportAs: ["nzPopconfirm"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i5$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "pipe", type: FormatBytesPipe, name: "formatBytes" }] });
4908
4908
  }
4909
4909
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: FileListComponent, decorators: [{
4910
4910
  type: Component,
@@ -4928,7 +4928,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
4928
4928
  NzInputModule,
4929
4929
  NzToolTipModule,
4930
4930
  FormatBytesPipe,
4931
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row [nzGutter]=\"[8, 0]\">\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" (click)=\"getData()\">{{ TranslateKey.SEARCH | translate }}</button>\r\n </div>\r\n <nz-upload\r\n [nzAction]=\"\r\n AppGlobals.apiEndpoint +\r\n '/api/file/Upload?SaveToDB=' +\r\n (SaveTo == 'DB' ? 'true' : 'false') +\r\n '&FileCode=' +\r\n FileCode\r\n \"\r\n (nzChange)=\"handleChange($event)\"\r\n >\r\n <button nz-button>\r\n <nz-icon nzType=\"upload\" />\r\n T\u1EA3i file\r\n </button>\r\n </nz-upload>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"3\"\r\n [placeHolder]=\"'Save To'\"\r\n [lstItem]=\"[\r\n {\r\n Code: 'DB',\r\n Name: 'DB',\r\n },\r\n {\r\n Code: 'DISC',\r\n Name: 'DISC',\r\n },\r\n ]\"\r\n [valueField]=\"'Code'\"\r\n [displayField]=\"'Name'\"\r\n [(_ngModel)]=\"SaveTo\"\r\n ></extend-select>\r\n <div nz-col [nzSpan]=\"8\">\r\n <input nz-input placeholder=\"File Code\" [(ngModel)]=\"FileCode\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 225px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th>Temp file</th>\r\n <th>Content only</th>\r\n <th>FileName</th>\r\n <th class=\"right\">FileSize</th>\r\n <th>FileId</th>\r\n <th nzWidth=\"100px\">Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.Code }}</td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsTemp\"></extend-checkbox></td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsContentOnly\"></extend-checkbox></td>\r\n <td>{{ row.FileName }}</td>\r\n <td class=\"right\">{{ row.FileSize || 0 | formatBytes }}</td>\r\n <td>\r\n {{ row.App_File_Id }}\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <i\r\n *ngIf=\"row.IsContentOnly\"\r\n nz-tooltip=\"Move to disk\"\r\n nz-icon\r\n nzType=\"file\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"moveFileToDisk(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"save(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"download\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"download(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <a\r\n nz-popconfirm\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n nzPopconfirmPlacement=\"top\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n nzOkDanger\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
4931
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row [nzGutter]=\"[8, 0]\">\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" (click)=\"getData()\">{{ TranslateKey.SEARCH | translate }}</button>\r\n </div>\r\n <nz-upload\r\n [nzAction]=\"\r\n AppGlobals.apiEndpoint +\r\n '/api/file/Upload?SaveToDB=' +\r\n (SaveTo == 'DB' ? 'true' : 'false') +\r\n '&FileCode=' +\r\n FileCode\r\n \"\r\n (nzChange)=\"handleChange($event)\"\r\n >\r\n <button nz-button>\r\n <nz-icon nzType=\"upload\" />\r\n T\u1EA3i file\r\n </button>\r\n </nz-upload>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"3\"\r\n [placeHolder]=\"'Save To'\"\r\n [lstItem]=\"[\r\n {\r\n Code: 'DB',\r\n Name: 'DB',\r\n },\r\n {\r\n Code: 'DISC',\r\n Name: 'DISC',\r\n },\r\n ]\"\r\n [valueField]=\"'Code'\"\r\n [displayField]=\"'Name'\"\r\n [(_ngModel)]=\"SaveTo\"\r\n ></extend-select>\r\n <div nz-col [nzSpan]=\"8\">\r\n <input nz-input placeholder=\"File Code\" [(ngModel)]=\"FileCode\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n [nzData]=\"data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 225px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th>Temp file</th>\r\n <th>Content only</th>\r\n <th>FileName</th>\r\n <th class=\"right\">FileSize</th>\r\n <th>FileId</th>\r\n <th nzWidth=\"100px\">Action</th>\r\n </tr>\r\n <tr (keyup.enter)=\"search()\" class=\"tr-search\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.Code }}</td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsTemp\"></extend-checkbox></td>\r\n <td class=\"center\"><extend-checkbox [(_ngModel)]=\"row.IsContentOnly\"></extend-checkbox></td>\r\n <td>{{ row.FileName }}</td>\r\n <td class=\"right\">{{ row.FileSize || 0 | formatBytes }}</td>\r\n <td>\r\n {{ row.App_File_Id }}\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <i\r\n *ngIf=\"row.IsContentOnly\"\r\n nz-tooltip=\"Move to disk\"\r\n nz-icon\r\n nzType=\"file\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"moveFileToDisk(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"save(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <i\r\n nz-icon\r\n nzType=\"download\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"download(row)\"\r\n ></i>\r\n <box [width]=\"5\"></box>\r\n <a\r\n nz-popconfirm\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n nzPopconfirmPlacement=\"top\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n nzOkDanger\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
4932
4932
  }] });
4933
4933
 
4934
4934
  let App_Menu$1 = class App_Menu {
@@ -5162,7 +5162,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
5162
5162
  }]
5163
5163
  }] });
5164
5164
 
5165
- const URLs$c = {
5165
+ const URLs$d = {
5166
5166
  getById: '/api/App_Menu/GetById',
5167
5167
  getAll: '/api/App_Menu/GetAll',
5168
5168
  getList: '/api/App_Menu/GetList',
@@ -5175,29 +5175,29 @@ const URLs$c = {
5175
5175
  class MenuService extends HTTPService {
5176
5176
  getById(id) {
5177
5177
  let pr = new HttpParams().append('id', id);
5178
- return this.postParams(AppGlobals.apiEndpoint + URLs$c.getById, pr);
5178
+ return this.postParams(AppGlobals.apiEndpoint + URLs$d.getById, pr);
5179
5179
  }
5180
5180
  getAll() {
5181
- return this.post(AppGlobals.apiEndpoint + URLs$c.getAll);
5181
+ return this.post(AppGlobals.apiEndpoint + URLs$d.getAll);
5182
5182
  }
5183
5183
  getList(filter) {
5184
- return this.postData(AppGlobals.apiEndpoint + URLs$c.getList, filter);
5184
+ return this.postData(AppGlobals.apiEndpoint + URLs$d.getList, filter);
5185
5185
  }
5186
5186
  getPaging(filter) {
5187
- return this.postData(AppGlobals.apiEndpoint + URLs$c.getPaging, filter);
5187
+ return this.postData(AppGlobals.apiEndpoint + URLs$d.getPaging, filter);
5188
5188
  }
5189
5189
  addOrEdit(obj) {
5190
- return this.postData(AppGlobals.apiEndpoint + URLs$c.addOrEdit, obj);
5190
+ return this.postData(AppGlobals.apiEndpoint + URLs$d.addOrEdit, obj);
5191
5191
  }
5192
5192
  addOrEditInListComponent(obj) {
5193
- return this.postData(AppGlobals.apiEndpoint + URLs$c.addOrEditInListComponent, obj);
5193
+ return this.postData(AppGlobals.apiEndpoint + URLs$d.addOrEditInListComponent, obj);
5194
5194
  }
5195
5195
  delete(id) {
5196
5196
  const params = new HttpParams().append('id', id);
5197
- return this.postParams(AppGlobals.apiEndpoint + URLs$c.delete, params);
5197
+ return this.postParams(AppGlobals.apiEndpoint + URLs$d.delete, params);
5198
5198
  }
5199
5199
  getTree() {
5200
- return this.post(AppGlobals.apiEndpoint + URLs$c.getTree);
5200
+ return this.post(AppGlobals.apiEndpoint + URLs$d.getTree);
5201
5201
  }
5202
5202
  getRoleMenuRefByMenuId(menuId) {
5203
5203
  let pr = new HttpParams().append('menuId', menuId);
@@ -5306,7 +5306,7 @@ class MenuListComponent extends BaseComponent {
5306
5306
  }
5307
5307
  }
5308
5308
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: MenuListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
5309
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: MenuListComponent, isStandalone: true, selector: "app-menu-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th>T\u00EAn</th>\r\n <th>URL</th>\r\n <th nzWidth=\"90px\">Icon</th>\r\n <th nzWidth=\"90px\">Order</th>\r\n <th>Menu cha</th>\r\n <th nzWidth=\"110px\">Header menu</th>\r\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox-3-value\r\n [(_ngModel)]=\"filter.IsHeaderMenu\"\r\n (_ngModelChange)=\"search()\"\r\n ></extend-checkbox-3-value>\r\n </th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n @if (selectedMenu != row) {\r\n <tr (click)=\"selectedMenu = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.TreeNodeName }}</td>\r\n <td>{{ row.Url }}</td>\r\n <td>{{ row.Icon }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td class=\"center\">\r\n @if (row.IsHeaderMenu) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Name\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Url\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Icon\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input-number [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <nz-tree-select\r\n class=\"full-width\"\r\n [nzNodes]=\"treeMenu\"\r\n nzShowSearch\r\n nzPlaceHolder=\" \"\r\n [nzSize]=\"'small'\"\r\n [nzDropdownMatchSelectWidth]=\"false\"\r\n [(ngModel)]=\"selectedMenu.ParentId\"\r\n ></nz-tree-select>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsHeaderMenu\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzTreeSelectModule }, { kind: "component", type: i3$4.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckboxChange"], exportAs: ["nzTreeSelect"] }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSave, selector: "icon-save", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: ExtendCheckbox3Value, selector: "extend-checkbox-3-value", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }] });
5309
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: MenuListComponent, isStandalone: true, selector: "app-menu-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th>T\u00EAn</th>\r\n <th>URL</th>\r\n <th nzWidth=\"90px\">Icon</th>\r\n <th nzWidth=\"90px\">Order</th>\r\n <th>Menu cha</th>\r\n <th nzWidth=\"110px\">Header menu</th>\r\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox-3-value\r\n [(_ngModel)]=\"filter.IsHeaderMenu\"\r\n (_ngModelChange)=\"search()\"\r\n ></extend-checkbox-3-value>\r\n </th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n @if (selectedMenu != row) {\r\n <tr (click)=\"selectedMenu = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.TreeNodeName }}</td>\r\n <td>{{ row.Url }}</td>\r\n <td>{{ row.Icon }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td class=\"center\">\r\n @if (row.IsHeaderMenu) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Name\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Url\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Icon\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input-number [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <nz-tree-select\r\n class=\"full-width\"\r\n [nzNodes]=\"treeMenu\"\r\n nzShowSearch\r\n nzPlaceHolder=\" \"\r\n [nzSize]=\"'small'\"\r\n [nzDropdownMatchSelectWidth]=\"false\"\r\n [(ngModel)]=\"selectedMenu.ParentId\"\r\n ></nz-tree-select>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsHeaderMenu\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzTreeSelectModule }, { kind: "component", type: i3$4.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckboxChange"], exportAs: ["nzTreeSelect"] }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSave, selector: "icon-save", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: ExtendCheckbox3Value, selector: "extend-checkbox-3-value", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }] });
5310
5310
  }
5311
5311
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: MenuListComponent, decorators: [{
5312
5312
  type: Component,
@@ -5331,10 +5331,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
5331
5331
  ExtendCheckbox,
5332
5332
  Box,
5333
5333
  ExtendCheckbox3Value,
5334
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th>T\u00EAn</th>\r\n <th>URL</th>\r\n <th nzWidth=\"90px\">Icon</th>\r\n <th nzWidth=\"90px\">Order</th>\r\n <th>Menu cha</th>\r\n <th nzWidth=\"110px\">Header menu</th>\r\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox-3-value\r\n [(_ngModel)]=\"filter.IsHeaderMenu\"\r\n (_ngModelChange)=\"search()\"\r\n ></extend-checkbox-3-value>\r\n </th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n @if (selectedMenu != row) {\r\n <tr (click)=\"selectedMenu = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.TreeNodeName }}</td>\r\n <td>{{ row.Url }}</td>\r\n <td>{{ row.Icon }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td class=\"center\">\r\n @if (row.IsHeaderMenu) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Name\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Url\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Icon\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input-number [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <nz-tree-select\r\n class=\"full-width\"\r\n [nzNodes]=\"treeMenu\"\r\n nzShowSearch\r\n nzPlaceHolder=\" \"\r\n [nzSize]=\"'small'\"\r\n [nzDropdownMatchSelectWidth]=\"false\"\r\n [(ngModel)]=\"selectedMenu.ParentId\"\r\n ></nz-tree-select>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsHeaderMenu\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
5334
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th>T\u00EAn</th>\r\n <th>URL</th>\r\n <th nzWidth=\"90px\">Icon</th>\r\n <th nzWidth=\"90px\">Order</th>\r\n <th>Menu cha</th>\r\n <th nzWidth=\"110px\">Header menu</th>\r\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox-3-value\r\n [(_ngModel)]=\"filter.IsHeaderMenu\"\r\n (_ngModelChange)=\"search()\"\r\n ></extend-checkbox-3-value>\r\n </th>\r\n <th></th>\r\n <th class=\"center\" nzRight>\r\n <icon-add (click)=\"add()\"></icon-add>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n @if (selectedMenu != row) {\r\n <tr (click)=\"selectedMenu = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.TreeNodeName }}</td>\r\n <td>{{ row.Url }}</td>\r\n <td>{{ row.Icon }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td class=\"center\">\r\n @if (row.IsHeaderMenu) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\" class=\"selected\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Name\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Url\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Icon\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input-number [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.OrderValue\"></extend-input-number>\r\n </td>\r\n <td>\r\n <nz-tree-select\r\n class=\"full-width\"\r\n [nzNodes]=\"treeMenu\"\r\n nzShowSearch\r\n nzPlaceHolder=\" \"\r\n [nzSize]=\"'small'\"\r\n [nzDropdownMatchSelectWidth]=\"false\"\r\n [(ngModel)]=\"selectedMenu.ParentId\"\r\n ></nz-tree-select>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsHeaderMenu\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"center\">\r\n <icon-save (click)=\"save()\"></icon-save>\r\n <box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
5335
5335
  }] });
5336
5336
 
5337
- const URLs$b = {
5337
+ const URLs$c = {
5338
5338
  getById: '/api/App_Role/GetById',
5339
5339
  getAll: '/api/App_Role/GetAll',
5340
5340
  getList: '/api/App_Role/GetList',
@@ -5346,23 +5346,23 @@ class RoleService extends HTTPService {
5346
5346
  commonService = inject(CommonService);
5347
5347
  getById(id) {
5348
5348
  let pr = new HttpParams().append('id', id);
5349
- return this.postParams(AppGlobals.apiEndpoint + URLs$b.getById, pr);
5349
+ return this.postParams(AppGlobals.apiEndpoint + URLs$c.getById, pr);
5350
5350
  }
5351
5351
  getAll() {
5352
- return this.post(AppGlobals.apiEndpoint + URLs$b.getAll);
5352
+ return this.post(AppGlobals.apiEndpoint + URLs$c.getAll);
5353
5353
  }
5354
5354
  getList(filter) {
5355
- return this.postData(AppGlobals.apiEndpoint + URLs$b.getList, filter);
5355
+ return this.postData(AppGlobals.apiEndpoint + URLs$c.getList, filter);
5356
5356
  }
5357
5357
  getPaging(filter) {
5358
- return this.postData(AppGlobals.apiEndpoint + URLs$b.getPaging, filter);
5358
+ return this.postData(AppGlobals.apiEndpoint + URLs$c.getPaging, filter);
5359
5359
  }
5360
5360
  addOrEdit(obj) {
5361
- return this.postData(AppGlobals.apiEndpoint + URLs$b.addOrEdit, obj);
5361
+ return this.postData(AppGlobals.apiEndpoint + URLs$c.addOrEdit, obj);
5362
5362
  }
5363
5363
  delete(id) {
5364
5364
  const params = new HttpParams().append('id', id);
5365
- return this.postParams(AppGlobals.apiEndpoint + URLs$b.delete, params);
5365
+ return this.postParams(AppGlobals.apiEndpoint + URLs$c.delete, params);
5366
5366
  }
5367
5367
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RoleService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
5368
5368
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RoleService, providedIn: 'root' });
@@ -5606,7 +5606,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
5606
5606
  ], template: "<form nz-form [formGroup]=\"formData\">\r\n <!-- BUTTONS -->\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-save (click)=\"save()\"></button-save>\r\n <button-delete *ngIf=\"formData.controls.App_Menu_Id.value\" (click)=\"delete()\"></button-delete>\r\n <button-back (click)=\"goto('/admin/menu')\"></button-back>\r\n </div>\r\n </div>\r\n\r\n <nz-divider></nz-divider>\r\n\r\n <div nz-row [nzGutter]=\"['0', '16']\">\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Menu cha </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <nz-tree-select\r\n class=\"full-width\"\r\n [nzNodes]=\"treeMenu\"\r\n nzShowSearch\r\n nzPlaceHolder=\" \"\r\n formControlName=\"ParentId\"\r\n ></nz-tree-select>\r\n </nz-form-control>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Name\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired> T\u00EAn </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"Name\" id=\"Name\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Url\" nzLabelAlign=\"left\" nzNoColon=\"true\"> URL </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"Url\" id=\"Url\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Icon\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Icon </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"Icon\" id=\"Icon\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"OrderValue\" nzLabelAlign=\"left\" nzNoColon=\"true\">Order value</nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <nz-input-number formControlName=\"OrderValue\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n <div nz-row>\r\n <div nz-col [nzSpan]=\"8\"></div>\r\n <div nz-col [nzSpan]=\"16\">\r\n <label nz-checkbox formControlName=\"IsActive\">Active</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- C\u1ED8T PH\u1EA2I: QU\u1EA2N L\u00DD ROLE -->\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <div style=\"border: 1px solid #d9d9d9; border-radius: 4px; padding: 16px; height: 100%; margin-left: 10px\">\r\n <h4 style=\"margin-top: 0; margin-bottom: 16px\">\r\n <span nz-icon nzType=\"team\" style=\"margin-right: 8px\"></span>\r\n Qu\u1EA3n l\u00FD Role\r\n </h4>\r\n\r\n <nz-alert\r\n *ngIf=\"!formData.controls.App_Menu_Id.value\"\r\n nzType=\"info\"\r\n nzMessage=\"Vui l\u00F2ng l\u01B0u Menu tr\u01B0\u1EDBc\"\r\n nzDescription=\"B\u1EA1n c\u1EA7n l\u01B0u Menu tr\u01B0\u1EDBc, sau \u0111\u00F3 m\u1EDBi c\u00F3 th\u1EC3 th\u00EAm Role.\"\r\n nzShowIcon\r\n ></nz-alert>\r\n\r\n <div *ngIf=\"formData.controls.App_Menu_Id.value\">\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Roles ({{ lstRoleMenu.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddRoleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 400px; overflow-y: auto\">\r\n <nz-table\r\n #roleTable\r\n [nzData]=\"lstRoleMenu\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzLoading]=\"isLoadingRoles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Role</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\" nz-tooltip nzTooltipTitle=\"Xem\">C</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\" nz-tooltip nzTooltipTitle=\"S\u1EEDa\">U</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\" nz-tooltip nzTooltipTitle=\"S\u1EEDa\">D</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of roleTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.RoleName }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.RoleCode }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.CanCreate\" [ngModelOptions]=\"{ standalone: true }\"> </label>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.CanUpdate\" [ngModelOptions]=\"{ standalone: true }\"> </label>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.CanDelete\" [ngModelOptions]=\"{ standalone: true }\"> </label>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <icon-delete (click)=\"deleteRoleFromMenu(item)\"></icon-delete>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<!-- Modal ch\u1ECDn Role -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddRoleModalVisible\"\r\n nzTitle=\"Th\u00EAm Role v\u00E0o Menu\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddRoleModal()\"\r\n (nzOnOk)=\"addRolesToMenu()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearch\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Role...\"\r\n [(ngModel)]=\"searchRoleText\"\r\n (ngModelChange)=\"filterAvailableRoles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearch>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addRoleTable\r\n [nzData]=\"lstFilteredRole\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableRoles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"isAllRoleChecked\"\r\n (nzCheckedChange)=\"onAllRoleChecked($event)\"\r\n [nzIndeterminate]=\"isRoleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3 Role</th>\r\n <th>T\u00EAn Role</th>\r\n <th>M\u00F4 t\u1EA3</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addRoleTable.data\">\r\n <td nz-flex nzJustify=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onRoleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n <td>{{ item.Description }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n" }]
5607
5607
  }] });
5608
5608
 
5609
- const URLs$a = {
5609
+ const URLs$b = {
5610
5610
  getById: '/api/App_Org/GetById',
5611
5611
  getAll: '/api/App_Org/GetAll',
5612
5612
  getList: '/api/App_Org/GetList',
@@ -5618,23 +5618,23 @@ class OrgService extends HTTPService {
5618
5618
  cms = inject(CommonService);
5619
5619
  getById(id) {
5620
5620
  let pr = new HttpParams().append('id', id);
5621
- return this.postParams(AppGlobals.apiEndpoint + URLs$a.getById, pr);
5621
+ return this.postParams(AppGlobals.apiEndpoint + URLs$b.getById, pr);
5622
5622
  }
5623
5623
  getAll() {
5624
- return this.post(AppGlobals.apiEndpoint + URLs$a.getAll);
5624
+ return this.post(AppGlobals.apiEndpoint + URLs$b.getAll);
5625
5625
  }
5626
5626
  getList(filter) {
5627
- return this.postData(AppGlobals.apiEndpoint + URLs$a.getList, filter);
5627
+ return this.postData(AppGlobals.apiEndpoint + URLs$b.getList, filter);
5628
5628
  }
5629
5629
  getPaging(filter) {
5630
- return this.postData(AppGlobals.apiEndpoint + URLs$a.getPaging, filter);
5630
+ return this.postData(AppGlobals.apiEndpoint + URLs$b.getPaging, filter);
5631
5631
  }
5632
5632
  addOrEdit(obj) {
5633
- return this.postData(AppGlobals.apiEndpoint + URLs$a.addOrEdit, obj);
5633
+ return this.postData(AppGlobals.apiEndpoint + URLs$b.addOrEdit, obj);
5634
5634
  }
5635
5635
  delete(id) {
5636
5636
  const params = new HttpParams().append('id', id);
5637
- return this.postParams(AppGlobals.apiEndpoint + URLs$a.delete, params);
5637
+ return this.postParams(AppGlobals.apiEndpoint + URLs$b.delete, params);
5638
5638
  }
5639
5639
  getAllForLogin(UserName) {
5640
5640
  const params = new HttpParams().append('UserName', UserName);
@@ -5748,7 +5748,7 @@ class OrgListComponent extends BaseComponent {
5748
5748
  this.getData();
5749
5749
  }
5750
5750
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: OrgListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
5751
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: OrgListComponent, isStandalone: true, selector: "app-org-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th nzWidth=\"200px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th nzWidth=\"250px\">T\u00EAn \u0111\u01A1n v\u1ECB cha</th>\r\n <th nzWidth=\"75px\">Th\u1EE9 t\u1EF1</th>\r\n <th nzWidth=\"75px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Name\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th nzRight></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }] });
5751
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: OrgListComponent, isStandalone: true, selector: "app-org-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th nzWidth=\"200px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th nzWidth=\"250px\">T\u00EAn \u0111\u01A1n v\u1ECB cha</th>\r\n <th nzWidth=\"75px\">Th\u1EE9 t\u1EF1</th>\r\n <th nzWidth=\"75px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Name\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th nzRight></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }] });
5752
5752
  }
5753
5753
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: OrgListComponent, decorators: [{
5754
5754
  type: Component,
@@ -5765,10 +5765,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
5765
5765
  IconCheck,
5766
5766
  ExtendInput,
5767
5767
  Box,
5768
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th nzWidth=\"200px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th nzWidth=\"250px\">T\u00EAn \u0111\u01A1n v\u1ECB cha</th>\r\n <th nzWidth=\"75px\">Th\u1EE9 t\u1EF1</th>\r\n <th nzWidth=\"75px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Name\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th nzRight></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
5768
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th nzWidth=\"200px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th nzWidth=\"250px\">T\u00EAn \u0111\u01A1n v\u1ECB cha</th>\r\n <th nzWidth=\"75px\">Th\u1EE9 t\u1EF1</th>\r\n <th nzWidth=\"75px\">Hi\u1EC7u l\u1EF1c</th>\r\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.Name\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [(_ngModel)]=\"filter.ParentName\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th nzRight></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.ParentName }}</td>\r\n <td>{{ row.OrderValue }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\" nzRight>\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
5769
5769
  }] });
5770
5770
 
5771
- const URLs$9 = {
5771
+ const URLs$a = {
5772
5772
  getById: '/api/App_User/GetById',
5773
5773
  getByIdEx: '/api/App_User/GetByIdEx',
5774
5774
  getAll: '/api/App_User/GetAll',
@@ -5781,27 +5781,27 @@ class UserService extends HTTPService {
5781
5781
  cms = inject(CommonService);
5782
5782
  getById(id) {
5783
5783
  const params = new HttpParams().append('id', id);
5784
- return this.postParams(AppGlobals.apiEndpoint + URLs$9.getById, params);
5784
+ return this.postParams(AppGlobals.apiEndpoint + URLs$a.getById, params);
5785
5785
  }
5786
5786
  getByIdEx(id) {
5787
5787
  const params = new HttpParams().append('id', id);
5788
- return this.postParams(AppGlobals.apiEndpoint + URLs$9.getByIdEx, params);
5788
+ return this.postParams(AppGlobals.apiEndpoint + URLs$a.getByIdEx, params);
5789
5789
  }
5790
5790
  getAll() {
5791
- return this.post(AppGlobals.apiEndpoint + URLs$9.getAll);
5791
+ return this.post(AppGlobals.apiEndpoint + URLs$a.getAll);
5792
5792
  }
5793
5793
  getList(filter) {
5794
- return this.postData(AppGlobals.apiEndpoint + URLs$9.getList, filter);
5794
+ return this.postData(AppGlobals.apiEndpoint + URLs$a.getList, filter);
5795
5795
  }
5796
5796
  getPaging(filter) {
5797
- return this.postData(AppGlobals.apiEndpoint + URLs$9.getPaging, filter);
5797
+ return this.postData(AppGlobals.apiEndpoint + URLs$a.getPaging, filter);
5798
5798
  }
5799
5799
  addOrEdit(obj) {
5800
- return this.postData(AppGlobals.apiEndpoint + URLs$9.addOrEdit, obj);
5800
+ return this.postData(AppGlobals.apiEndpoint + URLs$a.addOrEdit, obj);
5801
5801
  }
5802
5802
  delete(id) {
5803
5803
  const params = new HttpParams().append('id', id);
5804
- return this.postParams(AppGlobals.apiEndpoint + URLs$9.delete, params);
5804
+ return this.postParams(AppGlobals.apiEndpoint + URLs$a.delete, params);
5805
5805
  }
5806
5806
  importUser(data) {
5807
5807
  return this.postData(`${AppGlobals.apiEndpoint}/api/App_User/ImportUser`, data);
@@ -6964,7 +6964,7 @@ class RoleListComponent extends BaseComponent {
6964
6964
  this.getData();
6965
6965
  }
6966
6966
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RoleListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
6967
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: RoleListComponent, isStandalone: true, selector: "app-role-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"getData()\"></button-search>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Name' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Name'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Name\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Description' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Description'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Description\r\n </th>\r\n <th\r\n nzWidth=\"75px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Active\r\n </th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }] });
6967
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: RoleListComponent, isStandalone: true, selector: "app-role-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"getData()\"></button-search>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Name' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Name'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Name\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Description' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Description'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Description\r\n </th>\r\n <th\r\n nzWidth=\"75px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Active\r\n </th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }] });
6968
6968
  }
6969
6969
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RoleListComponent, decorators: [{
6970
6970
  type: Component,
@@ -6981,7 +6981,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
6981
6981
  IconDelete,
6982
6982
  ExtendInput,
6983
6983
  Box,
6984
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"getData()\"></button-search>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Name' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Name'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Name\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Description' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Description'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Description\r\n </th>\r\n <th\r\n nzWidth=\"75px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Active\r\n </th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
6984
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"getData()\"></button-search>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Name' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Name'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Name\r\n </th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Description' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Description'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Description\r\n </th>\r\n <th\r\n nzWidth=\"75px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Active\r\n </th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Code\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.Name\"\r\n (onclickClearIcon)=\"search()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Name }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\r\n <icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
6985
6985
  }] });
6986
6986
 
6987
6987
  class RoleDetailComponent extends BaseComponent {
@@ -7413,7 +7413,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
7413
7413
  args: ['parentSelect', { static: false }]
7414
7414
  }] } });
7415
7415
 
7416
- const URLs$8 = {
7416
+ const URLs$9 = {
7417
7417
  getById: '/api/App_Setting/GetById',
7418
7418
  getAll: '/api/App_Setting/GetAll',
7419
7419
  getList: '/api/App_Setting/GetList',
@@ -7429,34 +7429,34 @@ let SettingService$1 = class SettingService extends HTTPService {
7429
7429
  commonService = inject(CommonService);
7430
7430
  getById(id) {
7431
7431
  const params = new HttpParams().append('id', id);
7432
- return this.postParams(AppGlobals.apiEndpoint + URLs$8.getById, params);
7432
+ return this.postParams(AppGlobals.apiEndpoint + URLs$9.getById, params);
7433
7433
  }
7434
7434
  getPaging(filter) {
7435
- return this.postData(AppGlobals.apiEndpoint + URLs$8.getPaging, filter);
7435
+ return this.postData(AppGlobals.apiEndpoint + URLs$9.getPaging, filter);
7436
7436
  }
7437
7437
  addOrEdit(obj) {
7438
- return this.postData(AppGlobals.apiEndpoint + URLs$8.addOrEdit, obj);
7438
+ return this.postData(AppGlobals.apiEndpoint + URLs$9.addOrEdit, obj);
7439
7439
  }
7440
7440
  delete(id) {
7441
7441
  const params = new HttpParams().append('id', id);
7442
- return this.postParams(AppGlobals.apiEndpoint + URLs$8.delete, params);
7442
+ return this.postParams(AppGlobals.apiEndpoint + URLs$9.delete, params);
7443
7443
  }
7444
7444
  getByCodeAnonymous(code) {
7445
7445
  const params = new HttpParams().append('Code', code);
7446
- return this.getParams(AppGlobals.apiEndpoint + URLs$8.getByCodeAnonymous, params);
7446
+ return this.getParams(AppGlobals.apiEndpoint + URLs$9.getByCodeAnonymous, params);
7447
7447
  }
7448
7448
  // getGroupByCodeAnonymous(code: string) {
7449
7449
  // const params = new HttpParams().append('Code', code);
7450
7450
  // return this.getParams(AppGlobals.apiEndpoint + URLs.getByCodeAnonymous, params);
7451
7451
  // }
7452
7452
  getAllConfig() {
7453
- return this.post(AppGlobals.apiEndpoint + URLs$8.GetAllConfig);
7453
+ return this.post(AppGlobals.apiEndpoint + URLs$9.GetAllConfig);
7454
7454
  }
7455
7455
  applyConfig(config) {
7456
- return this.postData(AppGlobals.apiEndpoint + URLs$8.ApplyConfig, config);
7456
+ return this.postData(AppGlobals.apiEndpoint + URLs$9.ApplyConfig, config);
7457
7457
  }
7458
7458
  getDbInfo() {
7459
- return this.post(AppGlobals.apiEndpoint + URLs$8.GetDbInfo);
7459
+ return this.post(AppGlobals.apiEndpoint + URLs$9.GetDbInfo);
7460
7460
  }
7461
7461
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
7462
7462
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingService, providedIn: 'root' });
@@ -7581,7 +7581,7 @@ class SettingListComponent extends BaseComponent {
7581
7581
  this.getData();
7582
7582
  }
7583
7583
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7584
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SettingListComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th>Value</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Value\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Description\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"filter.IsActive\"></extend-checkbox>\r\n </th>\r\n <th class=\"center\">\r\n <nz-icon\r\n nzType=\"plus\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); add()\"\r\n ></nz-icon>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.Code }}</td>\r\n <td>{{ row.Value }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"text-center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n <a\r\n nz-popconfirm\r\n nzOkDanger\r\n nzPopconfirmPlacement=\"top\"\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [required]=\"true\" [(_ngModel)]=\"selectedRow.Code\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.Value\"></extend-input>\r\n </td>\r\n <td class=\"form-item-no-bottom\">\r\n <extend-textarea [minRows]=\"1\" [(_ngModel)]=\"selectedRow.Description\"></extend-textarea>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"text-center\">\r\n <nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); save()\"\r\n ></nz-icon>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "directive", type: i9.NzPopconfirmDirective, selector: "[nz-popconfirm]", inputs: ["nzPopconfirmArrowPointAtCenter", "nzPopconfirmTitle", "nzPopconfirmTitleContext", "nz-popconfirm", "nzPopconfirmTrigger", "nzPopconfirmPlacement", "nzPopconfirmOrigin", "nzPopconfirmMouseEnterDelay", "nzPopconfirmMouseLeaveDelay", "nzPopconfirmOverlayClassName", "nzPopconfirmOverlayStyle", "nzPopconfirmVisible", "nzOkText", "nzOkType", "nzOkDisabled", "nzOkDanger", "nzCancelText", "nzBeforeConfirm", "nzIcon", "nzCondition", "nzPopconfirmShowArrow", "nzPopconfirmBackdrop", "nzAutofocus"], outputs: ["nzPopconfirmVisibleChange", "nzOnCancel", "nzOnConfirm"], exportAs: ["nzPopconfirm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "formItemNoButtom", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isTouched", "inputErrorMessage", "errorMessages"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }] });
7584
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SettingListComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"300px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th nzWidth=\"450px\">Value</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Value\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Description\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"filter.IsActive\"></extend-checkbox>\r\n </th>\r\n <th class=\"center\">\r\n <nz-icon\r\n nzType=\"plus\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); add()\"\r\n ></nz-icon>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"break-word\">{{ row.Code }}</td>\r\n <td class=\"break-word\">{{ row.Value }}</td>\r\n <td class=\"break-word\">{{ row.Description }}</td>\r\n <td class=\"text-center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n <a\r\n nz-popconfirm\r\n nzOkDanger\r\n nzPopconfirmPlacement=\"top\"\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr class=\"form-item-no-bottom\" (keyup.enter)=\"save()\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [required]=\"true\" [(_ngModel)]=\"selectedRow.Code\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-textarea [minRows]=\"1\" [(_ngModel)]=\"selectedRow.Value\"></extend-textarea>\r\n </td>\r\n <td>\r\n <extend-textarea [minRows]=\"1\" [(_ngModel)]=\"selectedRow.Description\"></extend-textarea>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"text-center\">\r\n <nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); save()\"\r\n ></nz-icon>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "directive", type: i9.NzPopconfirmDirective, selector: "[nz-popconfirm]", inputs: ["nzPopconfirmArrowPointAtCenter", "nzPopconfirmTitle", "nzPopconfirmTitleContext", "nz-popconfirm", "nzPopconfirmTrigger", "nzPopconfirmPlacement", "nzPopconfirmOrigin", "nzPopconfirmMouseEnterDelay", "nzPopconfirmMouseLeaveDelay", "nzPopconfirmOverlayClassName", "nzPopconfirmOverlayStyle", "nzPopconfirmVisible", "nzOkText", "nzOkType", "nzOkDisabled", "nzOkDanger", "nzCancelText", "nzBeforeConfirm", "nzIcon", "nzCondition", "nzPopconfirmShowArrow", "nzPopconfirmBackdrop", "nzAutofocus"], outputs: ["nzPopconfirmVisibleChange", "nzOnCancel", "nzOnConfirm"], exportAs: ["nzPopconfirm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "formItemNoButtom", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isTouched", "inputErrorMessage", "errorMessages"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }] });
7585
7585
  }
7586
7586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingListComponent, decorators: [{
7587
7587
  type: Component,
@@ -7599,10 +7599,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
7599
7599
  NzPaginationModule,
7600
7600
  NzGridModule,
7601
7601
  NzFlexModule,
7602
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th>Value</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Value\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Description\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"filter.IsActive\"></extend-checkbox>\r\n </th>\r\n <th class=\"center\">\r\n <nz-icon\r\n nzType=\"plus\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); add()\"\r\n ></nz-icon>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>{{ row.Code }}</td>\r\n <td>{{ row.Value }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"text-center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n <a\r\n nz-popconfirm\r\n nzOkDanger\r\n nzPopconfirmPlacement=\"top\"\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr (keyup.enter)=\"save()\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [required]=\"true\" [(_ngModel)]=\"selectedRow.Code\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-input [(_ngModel)]=\"selectedRow.Value\"></extend-input>\r\n </td>\r\n <td class=\"form-item-no-bottom\">\r\n <extend-textarea [minRows]=\"1\" [(_ngModel)]=\"selectedRow.Description\"></extend-textarea>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"text-center\">\r\n <nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); save()\"\r\n ></nz-icon>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
7602
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data?.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"300px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th nzWidth=\"450px\">Value</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Value\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Description\" (onclickClearIcon)=\"search()\"></extend-input>\r\n </th>\r\n <th class=\"center\">\r\n <extend-checkbox [(_ngModel)]=\"filter.IsActive\"></extend-checkbox>\r\n </th>\r\n <th class=\"center\">\r\n <nz-icon\r\n nzType=\"plus\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); add()\"\r\n ></nz-icon>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of data?.LstItem; track $index; let i = $index) {\r\n @if (selectedRow != row) {\r\n <tr (click)=\"selectedRow = row\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"break-word\">{{ row.Code }}</td>\r\n <td class=\"break-word\">{{ row.Value }}</td>\r\n <td class=\"break-word\">{{ row.Description }}</td>\r\n <td class=\"text-center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n <a\r\n nz-popconfirm\r\n nzOkDanger\r\n nzPopconfirmPlacement=\"top\"\r\n [nzPopconfirmTitle]=\"TranslateKey.CONFIRM_DELETE | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (nzOnConfirm)=\"delete(row)\"\r\n >\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n } @else {\r\n <tr class=\"form-item-no-bottom\" (keyup.enter)=\"save()\">\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <extend-input [required]=\"true\" [(_ngModel)]=\"selectedRow.Code\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-textarea [minRows]=\"1\" [(_ngModel)]=\"selectedRow.Value\"></extend-textarea>\r\n </td>\r\n <td>\r\n <extend-textarea [minRows]=\"1\" [(_ngModel)]=\"selectedRow.Description\"></extend-textarea>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"selectedRow.IsActive\"></extend-checkbox>\r\n </td>\r\n <td class=\"text-center\">\r\n <nz-icon\r\n nzType=\"save\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); save()\"\r\n ></nz-icon>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data?.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
7603
7603
  }] });
7604
7604
 
7605
- const URLs$7 = {
7605
+ const URLs$8 = {
7606
7606
  getById: '/api/file/GetById',
7607
7607
  getAll: '/api/file/GetAll',
7608
7608
  getList: '/api/file/GetList',
@@ -7616,23 +7616,23 @@ class FileService extends HTTPService {
7616
7616
  commonService = inject(CommonService);
7617
7617
  getById(id) {
7618
7618
  const params = new HttpParams().append('id', id);
7619
- return this.postParams(AppGlobals.apiEndpoint + URLs$7.getById, params);
7619
+ return this.postParams(AppGlobals.apiEndpoint + URLs$8.getById, params);
7620
7620
  }
7621
7621
  getAll() {
7622
- return this.post(AppGlobals.apiEndpoint + URLs$7.getAll);
7622
+ return this.post(AppGlobals.apiEndpoint + URLs$8.getAll);
7623
7623
  }
7624
7624
  getList(filter) {
7625
- return this.postData(AppGlobals.apiEndpoint + URLs$7.getList, filter);
7625
+ return this.postData(AppGlobals.apiEndpoint + URLs$8.getList, filter);
7626
7626
  }
7627
7627
  getPaging(filter) {
7628
- return this.postData(AppGlobals.apiEndpoint + URLs$7.getPaging, filter);
7628
+ return this.postData(AppGlobals.apiEndpoint + URLs$8.getPaging, filter);
7629
7629
  }
7630
7630
  addOrEdit(obj) {
7631
- return this.postData(AppGlobals.apiEndpoint + URLs$7.addOrEdit, obj);
7631
+ return this.postData(AppGlobals.apiEndpoint + URLs$8.addOrEdit, obj);
7632
7632
  }
7633
7633
  delete(id) {
7634
7634
  const params = new HttpParams().append('id', id);
7635
- return this.postParams(AppGlobals.apiEndpoint + URLs$7.delete, params);
7635
+ return this.postParams(AppGlobals.apiEndpoint + URLs$8.delete, params);
7636
7636
  }
7637
7637
  downloadFile(id) {
7638
7638
  const params = new HttpParams().append('id', id);
@@ -7677,7 +7677,7 @@ class FileService extends HTTPService {
7677
7677
  });
7678
7678
  }
7679
7679
  addFileWithRef(obj) {
7680
- return this.postData(AppGlobals.apiEndpoint + URLs$7.addFileWithRef, obj);
7680
+ return this.postData(AppGlobals.apiEndpoint + URLs$8.addFileWithRef, obj);
7681
7681
  }
7682
7682
  getAnhWithRef(Ref_Table, Ref_Id) {
7683
7683
  return this.commonService.ESP({
@@ -7686,7 +7686,7 @@ class FileService extends HTTPService {
7686
7686
  });
7687
7687
  }
7688
7688
  moveFileToDisk(obj) {
7689
- return this.postData(AppGlobals.apiEndpoint + URLs$7.moveFileToDisk, obj);
7689
+ return this.postData(AppGlobals.apiEndpoint + URLs$8.moveFileToDisk, obj);
7690
7690
  }
7691
7691
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: FileService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
7692
7692
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: FileService, providedIn: 'root' });
@@ -7956,7 +7956,7 @@ class UserListComponent extends BaseComponent {
7956
7956
  }
7957
7957
  }
7958
7958
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: UserListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7959
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: UserListComponent, isStandalone: true, selector: "app-user-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n <button nz-button nz-dropdown [nzDropdownMenu]=\"menuAction\" nzTrigger=\"click\">\r\n <nz-icon nzType=\"more\" nzTheme=\"outline\" />\r\n <!-- {{ TranslateKey.ACTION | translate }} -->\r\n </button>\r\n <nz-dropdown-menu #menuAction=\"nzDropdownMenu\">\r\n <ul nz-menu>\r\n <li nz-menu-item (click)=\"import()\">Import</li>\r\n </ul>\r\n </nz-dropdown-menu>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"200px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'UserName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'UserName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'FullName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'FullName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th\r\n nzWidth=\"90px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Hi\u1EC7u l\u1EF1c\r\n </th>\r\n <th nzWidth=\"100px\">\u0110ang online</th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th><extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.UserName\"></extend-input></th>\r\n <th><extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.FullName\"></extend-input></th>\r\n <th><extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.OrgName\"></extend-input></th>\r\n <th></th>\r\n <th class=\"center\"><extend-checkbox [(_ngModel)]=\"showOnlineOnly\"></extend-checkbox></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of getLstUser(); track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.UserName }}</td>\r\n <td>{{ row.FullName }}</td>\r\n <td>\r\n {{ row.OrgName }}\r\n <div *ngIf=\"row.LstOrgName\" [innerHtml]=\"row.LstOrgName\"></div>\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n @if (SignalRService.connection?.state == HubConnectionState.Connected && row.LoginStatus) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box><icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\" nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$1.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$1.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i5$4.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5$4.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i5$4.NzDropdownButtonDirective, selector: "[nz-button][nz-dropdown]" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }] });
7959
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: UserListComponent, isStandalone: true, selector: "app-user-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n <button nz-button nz-dropdown [nzDropdownMenu]=\"menuAction\" nzTrigger=\"click\">\r\n <nz-icon nzType=\"more\" nzTheme=\"outline\" />\r\n <!-- {{ TranslateKey.ACTION | translate }} -->\r\n </button>\r\n <nz-dropdown-menu #menuAction=\"nzDropdownMenu\">\r\n <ul nz-menu>\r\n <li nz-menu-item (click)=\"import()\">Import</li>\r\n </ul>\r\n </nz-dropdown-menu>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"200px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'UserName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'UserName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'FullName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'FullName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th\r\n nzWidth=\"90px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Hi\u1EC7u l\u1EF1c\r\n </th>\r\n <th nzWidth=\"100px\">\u0110ang online</th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.UserName\"\r\n (onclickClearIcon)=\"getData()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.FullName\"\r\n (onclickClearIcon)=\"getData()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.OrgName\"\r\n (onclickClearIcon)=\"getData()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th class=\"center\"><extend-checkbox [(_ngModel)]=\"showOnlineOnly\"></extend-checkbox></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of getLstUser(); track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.UserName }}</td>\r\n <td>{{ row.FullName }}</td>\r\n <td>\r\n {{ row.OrgName }}\r\n <div *ngIf=\"row.LstOrgName\" [innerHtml]=\"row.LstOrgName\"></div>\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n @if (SignalRService.connection?.state == HubConnectionState.Connected && row.LoginStatus) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box><icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\" nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$1.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$1.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i5$4.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5$4.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i5$4.NzDropdownButtonDirective, selector: "[nz-button][nz-dropdown]" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }] });
7960
7960
  }
7961
7961
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: UserListComponent, decorators: [{
7962
7962
  type: Component,
@@ -7982,7 +7982,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
7982
7982
  NzGridModule,
7983
7983
  NzFlexModule,
7984
7984
  NzButtonModule,
7985
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n <button nz-button nz-dropdown [nzDropdownMenu]=\"menuAction\" nzTrigger=\"click\">\r\n <nz-icon nzType=\"more\" nzTheme=\"outline\" />\r\n <!-- {{ TranslateKey.ACTION | translate }} -->\r\n </button>\r\n <nz-dropdown-menu #menuAction=\"nzDropdownMenu\">\r\n <ul nz-menu>\r\n <li nz-menu-item (click)=\"import()\">Import</li>\r\n </ul>\r\n </nz-dropdown-menu>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"200px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'UserName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'UserName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'FullName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'FullName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th\r\n nzWidth=\"90px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Hi\u1EC7u l\u1EF1c\r\n </th>\r\n <th nzWidth=\"100px\">\u0110ang online</th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th><extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.UserName\"></extend-input></th>\r\n <th><extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.FullName\"></extend-input></th>\r\n <th><extend-input [size]=\"'small'\" [(_ngModel)]=\"filter.OrgName\"></extend-input></th>\r\n <th></th>\r\n <th class=\"center\"><extend-checkbox [(_ngModel)]=\"showOnlineOnly\"></extend-checkbox></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of getLstUser(); track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.UserName }}</td>\r\n <td>{{ row.FullName }}</td>\r\n <td>\r\n {{ row.OrgName }}\r\n <div *ngIf=\"row.LstOrgName\" [innerHtml]=\"row.LstOrgName\"></div>\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n @if (SignalRService.connection?.state == HubConnectionState.Connected && row.LoginStatus) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box><icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\" nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
7985
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n <button nz-button nz-dropdown [nzDropdownMenu]=\"menuAction\" nzTrigger=\"click\">\r\n <nz-icon nzType=\"more\" nzTheme=\"outline\" />\r\n <!-- {{ TranslateKey.ACTION | translate }} -->\r\n </button>\r\n <nz-dropdown-menu #menuAction=\"nzDropdownMenu\">\r\n <ul nz-menu>\r\n <li nz-menu-item (click)=\"import()\">Import</li>\r\n </ul>\r\n </nz-dropdown-menu>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"this.data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n nzWidth=\"200px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'UserName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'UserName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </th>\r\n <th\r\n nzWidth=\"250px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'FullName' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'FullName'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th\r\n nzWidth=\"90px\"\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'IsActive' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'IsActive'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Hi\u1EC7u l\u1EF1c\r\n </th>\r\n <th nzWidth=\"100px\">\u0110ang online</th>\r\n <th nzWidth=\"75px\">Thao t\u00E1c</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.UserName\"\r\n (onclickClearIcon)=\"getData()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.FullName\"\r\n (onclickClearIcon)=\"getData()\"\r\n ></extend-input>\r\n </th>\r\n <th>\r\n <extend-input\r\n [size]=\"'small'\"\r\n [showClear]=\"true\"\r\n [(_ngModel)]=\"filter.OrgName\"\r\n (onclickClearIcon)=\"getData()\"\r\n ></extend-input>\r\n </th>\r\n <th></th>\r\n <th class=\"center\"><extend-checkbox [(_ngModel)]=\"showOnlineOnly\"></extend-checkbox></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of getLstUser(); track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.UserName }}</td>\r\n <td>{{ row.FullName }}</td>\r\n <td>\r\n {{ row.OrgName }}\r\n <div *ngIf=\"row.LstOrgName\" [innerHtml]=\"row.LstOrgName\"></div>\r\n </td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"text-center\">\r\n @if (SignalRService.connection?.state == HubConnectionState.Connected && row.LoginStatus) {\r\n <icon-check></icon-check>\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box><icon-delete (click)=\"delete(row)\"></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex nzJustify=\"end\" nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
7986
7986
  }] });
7987
7987
 
7988
7988
  class ResetPassComponent extends BaseComponent {
@@ -8046,7 +8046,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
8046
8046
  ], template: "<form nz-form [formGroup]=\"formData\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"UserName\" nzLabelAlign=\"left\" nzNoColon=\"true\">\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <input nz-input formControlName=\"UserName\" autocomplete=\"off\" nzDisabled />\r\n </nz-form-control>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Password\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group [nzSuffix]=\"visiblePass ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\">\r\n <input type=\"{{ passwordType }}\" nz-input formControlName=\"Password\" autocomplete=\"new-password\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"RetypePassword\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n Nh\u1EADp l\u1EA1i M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\">\r\n <nz-input-group [nzSuffix]=\"visibleRePass ? suffixTemplateHiddenRePassword : suffixTemplateShowRePassword\">\r\n <input type=\"{{ rePasswordType }}\" nz-input formControlName=\"RetypePassword\" autocomplete=\"new-password\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowRePassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenRePassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\" nzGap=\"small\">\r\n <button nz-button nzType=\"default\" (click)=\"close()\">{{ TranslateKey.CLOSE | translate }}</button>\r\n <button nz-button nzType=\"primary\" (click)=\"submit()\" nzDanger>{{ TranslateKey.OK | translate }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n" }]
8047
8047
  }] });
8048
8048
 
8049
- const URLs$6 = {
8049
+ const URLs$7 = {
8050
8050
  getById: '/api/App_Setting/GetById',
8051
8051
  getAll: '/api/App_Setting/GetAll',
8052
8052
  getList: '/api/App_Setting/GetList',
@@ -8068,10 +8068,10 @@ class SettingService extends HTTPService {
8068
8068
  });
8069
8069
  }
8070
8070
  getAll() {
8071
- return this.post(AppGlobals.apiEndpoint + URLs$6.getAll);
8071
+ return this.post(AppGlobals.apiEndpoint + URLs$7.getAll);
8072
8072
  }
8073
8073
  getList(filter) {
8074
- return this.postData(AppGlobals.apiEndpoint + URLs$6.getList, filter);
8074
+ return this.postData(AppGlobals.apiEndpoint + URLs$7.getList, filter);
8075
8075
  }
8076
8076
  getPaging(filter) {
8077
8077
  return this.cms.ESP({
@@ -8087,27 +8087,27 @@ class SettingService extends HTTPService {
8087
8087
  }
8088
8088
  delete(id) {
8089
8089
  const params = new HttpParams().append('id', id);
8090
- return this.postParams(AppGlobals.apiEndpoint + URLs$6.delete, params);
8090
+ return this.postParams(AppGlobals.apiEndpoint + URLs$7.delete, params);
8091
8091
  }
8092
8092
  getByCodeAnonymous(code) {
8093
8093
  const params = new HttpParams().append('Code', code);
8094
- return this.getParams(AppGlobals.apiEndpoint + URLs$6.getByCodeAnonymous, params);
8094
+ return this.getParams(AppGlobals.apiEndpoint + URLs$7.getByCodeAnonymous, params);
8095
8095
  }
8096
8096
  // getGroupByCodeAnonymous(code: string) {
8097
8097
  // const params = new HttpParams().append('Code', code);
8098
8098
  // return this.getParams(AppGlobals.apiEndpoint + URLs.getByCodeAnonymous, params);
8099
8099
  // }
8100
8100
  getAllConfig() {
8101
- return this.post(AppGlobals.apiEndpoint + URLs$6.GetAllConfig);
8101
+ return this.post(AppGlobals.apiEndpoint + URLs$7.GetAllConfig);
8102
8102
  }
8103
8103
  applyConfig(config) {
8104
- return this.postData(AppGlobals.apiEndpoint + URLs$6.ApplyConfig, config);
8104
+ return this.postData(AppGlobals.apiEndpoint + URLs$7.ApplyConfig, config);
8105
8105
  }
8106
8106
  getDbInfo() {
8107
- return this.post(AppGlobals.apiEndpoint + URLs$6.GetDbInfo);
8107
+ return this.post(AppGlobals.apiEndpoint + URLs$7.GetDbInfo);
8108
8108
  }
8109
8109
  loadConfigTheme() {
8110
- return this.get(AppGlobals.apiEndpoint + URLs$6.ConfigTheme);
8110
+ return this.get(AppGlobals.apiEndpoint + URLs$7.ConfigTheme);
8111
8111
  }
8112
8112
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
8113
8113
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingService, providedIn: 'root' });
@@ -8119,7 +8119,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
8119
8119
  }]
8120
8120
  }] });
8121
8121
 
8122
- const URLs$5 = {
8122
+ const URLs$6 = {
8123
8123
  getById: '/api/App_JobTitle/GetById',
8124
8124
  getByIdEx: '/api/App_JobTitle/getByIdEx',
8125
8125
  getAll: '/api/App_JobTitle/GetAll',
@@ -8131,27 +8131,27 @@ const URLs$5 = {
8131
8131
  class JobTitleService extends HTTPService {
8132
8132
  getById(id) {
8133
8133
  const params = new HttpParams().append('id', id);
8134
- return this.postParams(AppGlobals.apiEndpoint + URLs$5.getById, params);
8134
+ return this.postParams(AppGlobals.apiEndpoint + URLs$6.getById, params);
8135
8135
  }
8136
8136
  getByIdEx(id) {
8137
8137
  const params = new HttpParams().append('id', id);
8138
- return this.postParams(AppGlobals.apiEndpoint + URLs$5.getByIdEx, params);
8138
+ return this.postParams(AppGlobals.apiEndpoint + URLs$6.getByIdEx, params);
8139
8139
  }
8140
8140
  getAll() {
8141
- return this.post(AppGlobals.apiEndpoint + URLs$5.getAll);
8141
+ return this.post(AppGlobals.apiEndpoint + URLs$6.getAll);
8142
8142
  }
8143
8143
  getList(filter) {
8144
- return this.postData(AppGlobals.apiEndpoint + URLs$5.getList, filter);
8144
+ return this.postData(AppGlobals.apiEndpoint + URLs$6.getList, filter);
8145
8145
  }
8146
8146
  getPaging(filter) {
8147
- return this.postData(AppGlobals.apiEndpoint + URLs$5.getPaging, filter);
8147
+ return this.postData(AppGlobals.apiEndpoint + URLs$6.getPaging, filter);
8148
8148
  }
8149
8149
  addOrEdit(obj) {
8150
- return this.postData(AppGlobals.apiEndpoint + URLs$5.addOrEdit, obj);
8150
+ return this.postData(AppGlobals.apiEndpoint + URLs$6.addOrEdit, obj);
8151
8151
  }
8152
8152
  delete(id) {
8153
8153
  const params = new HttpParams().append('id', id);
8154
- return this.postParams(AppGlobals.apiEndpoint + URLs$5.delete, params);
8154
+ return this.postParams(AppGlobals.apiEndpoint + URLs$6.delete, params);
8155
8155
  }
8156
8156
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: JobTitleService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
8157
8157
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: JobTitleService, providedIn: 'root' });
@@ -8213,6 +8213,7 @@ class UserDetailComponent extends BaseComponent {
8213
8213
  FullName: this.fb.control(null, [Validators.required]),
8214
8214
  Email: this.fb.control(null, [Validators.email]),
8215
8215
  IsActive: this.fb.control(true),
8216
+ IsAdLogin: this.fb.control(false),
8216
8217
  Password: this.fb.control(null),
8217
8218
  RetypePassword: this.fb.control(null),
8218
8219
  });
@@ -8598,7 +8599,7 @@ class UserDetailComponent extends BaseComponent {
8598
8599
  this.notiService.success('Đã xóa Chức danh khỏi danh sách');
8599
8600
  }
8600
8601
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: UserDetailComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
8601
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: UserDetailComponent, isStandalone: true, selector: "app-user-detail", usesInheritance: true, ngImport: i0, template: "<form nz-form [formGroup]=\"formData\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n @if (item?.App_User_Id) {\r\n <button nz-button nzType=\"primary\" type=\"button\" (click)=\"resetPassword()\">\r\n {{ TranslateKey.RESET_PASSWORD | translate }}\r\n </button>\r\n <button nz-button nzType=\"primary\" type=\"button\" nzDanger (click)=\"delete()\">\r\n {{ TranslateKey.DELETE | translate }}\r\n </button>\r\n }\r\n <button-save (click)=\"save()\"></button-save>\r\n <button-back (click)=\"goto('/admin/user')\"></button-back>\r\n </div>\r\n\r\n <nz-divider></nz-divider>\r\n\r\n <div nz-row [nzGutter]=\"[16, 16]\">\r\n <!-- C\u1ED8T TR\u00C1I: FORM USER -->\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"UserName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"UserName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"FullName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"FullName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Email\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Email </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'Ch\u01B0a \u0111\u00FAng \u0111\u1ECBnh d\u1EA1ng email'\">\r\n <input nz-input formControlName=\"Email\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <div *ngIf=\"!item?.App_User_Id\" nz-row [nzGutter]=\"16\">\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Password\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group [nzSuffix]=\"visiblePass ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\">\r\n <input type=\"{{ passwordType }}\" nz-input formControlName=\"Password\" autocomplete=\"new-password\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"RetypePassword\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n Nh\u1EADp l\u1EA1i M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\">\r\n <nz-input-group\r\n [nzSuffix]=\"visibleRePass ? suffixTemplateHiddenRePassword : suffixTemplateShowRePassword\"\r\n >\r\n <input\r\n type=\"{{ rePasswordType }}\"\r\n nz-input\r\n formControlName=\"RetypePassword\"\r\n autocomplete=\"new-password\"\r\n />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowRePassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenRePassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col [nzSpan]=\"8\"></div>\r\n <div nz-col [nzSpan]=\"16\">\r\n <label nz-checkbox formControlName=\"IsActive\">Active</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- C\u1ED8T PH\u1EA2I: TABS ORG & ROLE -->\r\n <div nz-col [nzSpan]=\"12\">\r\n <nz-tabset nzType=\"card\" nzSize=\"small\">\r\n <!-- TAB ORG -->\r\n <nz-tab nzTitle=\"\u0110\u01A1n v\u1ECB\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch \u0110\u01A1n v\u1ECB</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">\u0110\u01A1n v\u1ECB ({{ lstOrgInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddOrgModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm \u0110\u01A1n v\u1ECB\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgTable\r\n [nzData]=\"lstOrgInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstOrgInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a \u0110\u01A1n v\u1ECB n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteOrgFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- TAB ROLE -->\r\n <nz-tab nzTitle=\"Nh\u00F3m quy\u1EC1n\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Nh\u00F3m quy\u1EC1n</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Roles ({{ lstRoleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddRoleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Role\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #roleTable\r\n [nzData]=\"lstRoleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstRoleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Role</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of roleTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a Role n\u00E0y?\"\r\n (nzOnConfirm)=\"deleteRoleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- ch\u1EE9c danh -->\r\n <nz-tab nzTitle=\"Ch\u1EE9c danh\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Ch\u1EE9c danh</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Ch\u1EE9c danh ({{ lstJobTitleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddJobTitleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Ch\u1EE9c danh\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgJobTilte\r\n [nzData]=\"lstJobTitleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstJobTitleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Ch\u1EE9c danh</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgJobTilte.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a ch\u1EE9c danh n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteJobTitleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n </nz-tabset>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<!-- Modal ch\u1ECDn Org -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddOrgModalVisible\"\r\n nzTitle=\"Th\u00EAm \u0110\u01A1n v\u1ECB v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddOrgModal()\"\r\n (nzOnOk)=\"addOrgsToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiOrgs\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 \u0110\u01A1n v\u1ECB\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchOrg\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm \u0110\u01A1n v\u1ECB...\"\r\n [(ngModel)]=\"searchOrgText\"\r\n (ngModelChange)=\"filterAvailableOrgs()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchOrg>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addOrgTable\r\n [nzData]=\"lstFilteredOrg\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableOrgs\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiOrgs\"\r\n [(nzChecked)]=\"isAllOrgChecked\"\r\n (nzCheckedChange)=\"onAllOrgChecked($event)\"\r\n [nzIndeterminate]=\"isOrgIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addOrgTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onOrgChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.TreeNodeName || item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn Role -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddRoleModalVisible\"\r\n nzTitle=\"Th\u00EAm Role v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddRoleModal()\"\r\n (nzOnOk)=\"addRolesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchRole\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Role...\"\r\n [(ngModel)]=\"searchRoleText\"\r\n (ngModelChange)=\"filterAvailableRoles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchRole>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addRoleTable\r\n [nzData]=\"lstFilteredRole\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableRoles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"isAllRoleChecked\"\r\n (nzCheckedChange)=\"onAllRoleChecked($event)\"\r\n [nzIndeterminate]=\"isRoleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th>M\u00F4 t\u1EA3</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addRoleTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onRoleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n <td>{{ item.Description }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn JobTitle -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddJobTitleModalVisible\"\r\n nzTitle=\"Th\u00EAm Ch\u1EE9c danh v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddJobTitleModal()\"\r\n (nzOnOk)=\"addJobTitlesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiJobTitles\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 Ch\u1EE9c danh\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchJobTitle\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Ch\u1EE9c danh...\"\r\n [(ngModel)]=\"searchJobTitleText\"\r\n (ngModelChange)=\"filterAvailableJobTitles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchJobTitle>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addJobTitleTable\r\n [nzData]=\"lstFilteredJobTitle\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableJobTitles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiJobTitles\"\r\n [(nzChecked)]=\"isAllJobTitleChecked\"\r\n (nzCheckedChange)=\"onAllJobTitleChecked($event)\"\r\n [nzIndeterminate]=\"isJobTitleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addJobTitleTable.data\">\r\n <td>\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onJobTitleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i5.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i5$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i5$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i5$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzCheckboxModule }, { kind: "component", type: i3$1.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId", "nzName"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellAlignDirective, selector: "th[nzAlign],td[nzAlign]", inputs: ["nzAlign"] }, { kind: "component", type: i6$2.NzThSelectionComponent, selector: "th[nzSelections],th[nzChecked],th[nzShowCheckbox],th[nzShowRowSelection]", inputs: ["nzSelections", "nzChecked", "nzDisabled", "nzIndeterminate", "nzLabel", "nzShowCheckbox", "nzShowRowSelection"], outputs: ["nzCheckedChange"] }, { kind: "ngmodule", type: NzModalModule }, { kind: "component", type: i15.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i15.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "directive", type: i9.NzPopconfirmDirective, selector: "[nz-popconfirm]", inputs: ["nzPopconfirmArrowPointAtCenter", "nzPopconfirmTitle", "nzPopconfirmTitleContext", "nz-popconfirm", "nzPopconfirmTrigger", "nzPopconfirmPlacement", "nzPopconfirmOrigin", "nzPopconfirmMouseEnterDelay", "nzPopconfirmMouseLeaveDelay", "nzPopconfirmOverlayClassName", "nzPopconfirmOverlayStyle", "nzPopconfirmVisible", "nzOkText", "nzOkType", "nzOkDisabled", "nzOkDanger", "nzCancelText", "nzBeforeConfirm", "nzIcon", "nzCondition", "nzPopconfirmShowArrow", "nzPopconfirmBackdrop", "nzAutofocus"], outputs: ["nzPopconfirmVisibleChange", "nzOnCancel", "nzOnConfirm"], exportAs: ["nzPopconfirm"] }, { kind: "ngmodule", type: NzEmptyModule }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDividerModule }, { kind: "component", type: i8$1.NzDividerComponent, selector: "nz-divider", inputs: ["nzText", "nzType", "nzOrientation", "nzVariant", "nzDashed", "nzPlain"], exportAs: ["nzDivider"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "ngmodule", type: NzTabsModule }, { kind: "component", type: i1$7.NzTabSetComponent, selector: "nz-tabset", inputs: ["nzSelectedIndex", "nzTabPosition", "nzTabBarExtraContent", "nzCanDeactivate", "nzAddIcon", "nzTabBarStyle", "nzType", "nzSize", "nzAnimated", "nzTabBarGutter", "nzHideAdd", "nzCentered", "nzHideAll", "nzLinkRouter", "nzLinkExact", "nzDestroyInactiveTabPane"], outputs: ["nzSelectChange", "nzSelectedIndexChange", "nzTabListScroll", "nzClose", "nzAdd"], exportAs: ["nzTabset"] }, { kind: "component", type: i1$7.NzTabComponent, selector: "nz-tab", inputs: ["nzTitle", "nzClosable", "nzCloseIcon", "nzDisabled", "nzForceRender"], outputs: ["nzSelect", "nzDeselect", "nzClick", "nzContextmenu"], exportAs: ["nzTab"] }, { kind: "component", type: NzAlertComponent, selector: "nz-alert", inputs: ["nzAction", "nzCloseText", "nzIconType", "nzMessage", "nzDescription", "nzType", "nzCloseable", "nzShowIcon", "nzBanner", "nzNoAnimation", "nzIcon"], outputs: ["nzOnClose"], exportAs: ["nzAlert"] }, { kind: "component", type: ButtonBack, selector: "button-back" }, { kind: "component", type: ButtonSave, selector: "button-save" }] });
8602
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: UserDetailComponent, isStandalone: true, selector: "app-user-detail", usesInheritance: true, ngImport: i0, template: "<form nz-form [formGroup]=\"formData\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n @if (item?.App_User_Id) {\r\n <button nz-button nzType=\"primary\" type=\"button\" (click)=\"resetPassword()\">\r\n {{ TranslateKey.RESET_PASSWORD | translate }}\r\n </button>\r\n <button nz-button nzType=\"primary\" type=\"button\" nzDanger (click)=\"delete()\">\r\n {{ TranslateKey.DELETE | translate }}\r\n </button>\r\n }\r\n <button-save (click)=\"save()\"></button-save>\r\n <button-back (click)=\"goto('/admin/user')\"></button-back>\r\n </div>\r\n\r\n <nz-divider></nz-divider>\r\n\r\n <div nz-row [nzGutter]=\"[16, 16]\">\r\n <!-- C\u1ED8T TR\u00C1I: FORM USER -->\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"UserName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"UserName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"FullName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"FullName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Email\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Email </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'Ch\u01B0a \u0111\u00FAng \u0111\u1ECBnh d\u1EA1ng email'\">\r\n <input nz-input formControlName=\"Email\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <div *ngIf=\"!item?.App_User_Id\" nz-row [nzGutter]=\"16\">\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Password\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group [nzSuffix]=\"visiblePass ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\">\r\n <input type=\"{{ passwordType }}\" nz-input formControlName=\"Password\" autocomplete=\"new-password\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"RetypePassword\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n Nh\u1EADp l\u1EA1i M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\">\r\n <nz-input-group\r\n [nzSuffix]=\"visibleRePass ? suffixTemplateHiddenRePassword : suffixTemplateShowRePassword\"\r\n >\r\n <input\r\n type=\"{{ rePasswordType }}\"\r\n nz-input\r\n formControlName=\"RetypePassword\"\r\n autocomplete=\"new-password\"\r\n />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowRePassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenRePassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col [nzSpan]=\"8\"></div>\r\n <div nz-col [nzSpan]=\"16\">\r\n <label nz-checkbox formControlName=\"IsActive\">Active</label>\r\n <label nz-checkbox formControlName=\"IsAdLogin\">AD login</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- C\u1ED8T PH\u1EA2I: TABS ORG & ROLE -->\r\n <div nz-col [nzSpan]=\"12\">\r\n <nz-tabset nzType=\"card\" nzSize=\"small\">\r\n <!-- TAB ORG -->\r\n <nz-tab nzTitle=\"\u0110\u01A1n v\u1ECB\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch \u0110\u01A1n v\u1ECB</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">\u0110\u01A1n v\u1ECB ({{ lstOrgInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddOrgModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm \u0110\u01A1n v\u1ECB\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgTable\r\n [nzData]=\"lstOrgInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstOrgInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a \u0110\u01A1n v\u1ECB n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteOrgFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- TAB ROLE -->\r\n <nz-tab nzTitle=\"Nh\u00F3m quy\u1EC1n\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Nh\u00F3m quy\u1EC1n</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Roles ({{ lstRoleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddRoleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Role\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #roleTable\r\n [nzData]=\"lstRoleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstRoleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Role</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of roleTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a Role n\u00E0y?\"\r\n (nzOnConfirm)=\"deleteRoleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- ch\u1EE9c danh -->\r\n <nz-tab nzTitle=\"Ch\u1EE9c danh\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Ch\u1EE9c danh</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Ch\u1EE9c danh ({{ lstJobTitleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddJobTitleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Ch\u1EE9c danh\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgJobTilte\r\n [nzData]=\"lstJobTitleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstJobTitleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Ch\u1EE9c danh</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgJobTilte.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a ch\u1EE9c danh n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteJobTitleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n </nz-tabset>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<!-- Modal ch\u1ECDn Org -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddOrgModalVisible\"\r\n nzTitle=\"Th\u00EAm \u0110\u01A1n v\u1ECB v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddOrgModal()\"\r\n (nzOnOk)=\"addOrgsToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiOrgs\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 \u0110\u01A1n v\u1ECB\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchOrg\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm \u0110\u01A1n v\u1ECB...\"\r\n [(ngModel)]=\"searchOrgText\"\r\n (ngModelChange)=\"filterAvailableOrgs()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchOrg>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addOrgTable\r\n [nzData]=\"lstFilteredOrg\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableOrgs\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiOrgs\"\r\n [(nzChecked)]=\"isAllOrgChecked\"\r\n (nzCheckedChange)=\"onAllOrgChecked($event)\"\r\n [nzIndeterminate]=\"isOrgIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addOrgTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onOrgChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.TreeNodeName || item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn Role -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddRoleModalVisible\"\r\n nzTitle=\"Th\u00EAm Role v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddRoleModal()\"\r\n (nzOnOk)=\"addRolesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchRole\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Role...\"\r\n [(ngModel)]=\"searchRoleText\"\r\n (ngModelChange)=\"filterAvailableRoles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchRole>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addRoleTable\r\n [nzData]=\"lstFilteredRole\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableRoles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"isAllRoleChecked\"\r\n (nzCheckedChange)=\"onAllRoleChecked($event)\"\r\n [nzIndeterminate]=\"isRoleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th>M\u00F4 t\u1EA3</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addRoleTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onRoleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n <td>{{ item.Description }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn JobTitle -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddJobTitleModalVisible\"\r\n nzTitle=\"Th\u00EAm Ch\u1EE9c danh v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddJobTitleModal()\"\r\n (nzOnOk)=\"addJobTitlesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiJobTitles\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 Ch\u1EE9c danh\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchJobTitle\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Ch\u1EE9c danh...\"\r\n [(ngModel)]=\"searchJobTitleText\"\r\n (ngModelChange)=\"filterAvailableJobTitles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchJobTitle>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addJobTitleTable\r\n [nzData]=\"lstFilteredJobTitle\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableJobTitles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiJobTitles\"\r\n [(nzChecked)]=\"isAllJobTitleChecked\"\r\n (nzCheckedChange)=\"onAllJobTitleChecked($event)\"\r\n [nzIndeterminate]=\"isJobTitleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addJobTitleTable.data\">\r\n <td>\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onJobTitleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i5.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i5$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i5$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i5$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzCheckboxModule }, { kind: "component", type: i3$1.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId", "nzName"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i6$2.NzCellAlignDirective, selector: "th[nzAlign],td[nzAlign]", inputs: ["nzAlign"] }, { kind: "component", type: i6$2.NzThSelectionComponent, selector: "th[nzSelections],th[nzChecked],th[nzShowCheckbox],th[nzShowRowSelection]", inputs: ["nzSelections", "nzChecked", "nzDisabled", "nzIndeterminate", "nzLabel", "nzShowCheckbox", "nzShowRowSelection"], outputs: ["nzCheckedChange"] }, { kind: "ngmodule", type: NzModalModule }, { kind: "component", type: i15.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i15.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "ngmodule", type: NzPopconfirmModule }, { kind: "directive", type: i9.NzPopconfirmDirective, selector: "[nz-popconfirm]", inputs: ["nzPopconfirmArrowPointAtCenter", "nzPopconfirmTitle", "nzPopconfirmTitleContext", "nz-popconfirm", "nzPopconfirmTrigger", "nzPopconfirmPlacement", "nzPopconfirmOrigin", "nzPopconfirmMouseEnterDelay", "nzPopconfirmMouseLeaveDelay", "nzPopconfirmOverlayClassName", "nzPopconfirmOverlayStyle", "nzPopconfirmVisible", "nzOkText", "nzOkType", "nzOkDisabled", "nzOkDanger", "nzCancelText", "nzBeforeConfirm", "nzIcon", "nzCondition", "nzPopconfirmShowArrow", "nzPopconfirmBackdrop", "nzAutofocus"], outputs: ["nzPopconfirmVisibleChange", "nzOnCancel", "nzOnConfirm"], exportAs: ["nzPopconfirm"] }, { kind: "ngmodule", type: NzEmptyModule }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDividerModule }, { kind: "component", type: i8$1.NzDividerComponent, selector: "nz-divider", inputs: ["nzText", "nzType", "nzOrientation", "nzVariant", "nzDashed", "nzPlain"], exportAs: ["nzDivider"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "ngmodule", type: NzTabsModule }, { kind: "component", type: i1$7.NzTabSetComponent, selector: "nz-tabset", inputs: ["nzSelectedIndex", "nzTabPosition", "nzTabBarExtraContent", "nzCanDeactivate", "nzAddIcon", "nzTabBarStyle", "nzType", "nzSize", "nzAnimated", "nzTabBarGutter", "nzHideAdd", "nzCentered", "nzHideAll", "nzLinkRouter", "nzLinkExact", "nzDestroyInactiveTabPane"], outputs: ["nzSelectChange", "nzSelectedIndexChange", "nzTabListScroll", "nzClose", "nzAdd"], exportAs: ["nzTabset"] }, { kind: "component", type: i1$7.NzTabComponent, selector: "nz-tab", inputs: ["nzTitle", "nzClosable", "nzCloseIcon", "nzDisabled", "nzForceRender"], outputs: ["nzSelect", "nzDeselect", "nzClick", "nzContextmenu"], exportAs: ["nzTab"] }, { kind: "component", type: NzAlertComponent, selector: "nz-alert", inputs: ["nzAction", "nzCloseText", "nzIconType", "nzMessage", "nzDescription", "nzType", "nzCloseable", "nzShowIcon", "nzBanner", "nzNoAnimation", "nzIcon"], outputs: ["nzOnClose"], exportAs: ["nzAlert"] }, { kind: "component", type: ButtonBack, selector: "button-back" }, { kind: "component", type: ButtonSave, selector: "button-save" }] });
8602
8603
  }
8603
8604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: UserDetailComponent, decorators: [{
8604
8605
  type: Component,
@@ -8626,7 +8627,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
8626
8627
  NzAlertComponent,
8627
8628
  ButtonBack,
8628
8629
  ButtonSave,
8629
- ], template: "<form nz-form [formGroup]=\"formData\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n @if (item?.App_User_Id) {\r\n <button nz-button nzType=\"primary\" type=\"button\" (click)=\"resetPassword()\">\r\n {{ TranslateKey.RESET_PASSWORD | translate }}\r\n </button>\r\n <button nz-button nzType=\"primary\" type=\"button\" nzDanger (click)=\"delete()\">\r\n {{ TranslateKey.DELETE | translate }}\r\n </button>\r\n }\r\n <button-save (click)=\"save()\"></button-save>\r\n <button-back (click)=\"goto('/admin/user')\"></button-back>\r\n </div>\r\n\r\n <nz-divider></nz-divider>\r\n\r\n <div nz-row [nzGutter]=\"[16, 16]\">\r\n <!-- C\u1ED8T TR\u00C1I: FORM USER -->\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"UserName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"UserName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"FullName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"FullName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Email\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Email </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'Ch\u01B0a \u0111\u00FAng \u0111\u1ECBnh d\u1EA1ng email'\">\r\n <input nz-input formControlName=\"Email\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <div *ngIf=\"!item?.App_User_Id\" nz-row [nzGutter]=\"16\">\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Password\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group [nzSuffix]=\"visiblePass ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\">\r\n <input type=\"{{ passwordType }}\" nz-input formControlName=\"Password\" autocomplete=\"new-password\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"RetypePassword\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n Nh\u1EADp l\u1EA1i M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\">\r\n <nz-input-group\r\n [nzSuffix]=\"visibleRePass ? suffixTemplateHiddenRePassword : suffixTemplateShowRePassword\"\r\n >\r\n <input\r\n type=\"{{ rePasswordType }}\"\r\n nz-input\r\n formControlName=\"RetypePassword\"\r\n autocomplete=\"new-password\"\r\n />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowRePassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenRePassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col [nzSpan]=\"8\"></div>\r\n <div nz-col [nzSpan]=\"16\">\r\n <label nz-checkbox formControlName=\"IsActive\">Active</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- C\u1ED8T PH\u1EA2I: TABS ORG & ROLE -->\r\n <div nz-col [nzSpan]=\"12\">\r\n <nz-tabset nzType=\"card\" nzSize=\"small\">\r\n <!-- TAB ORG -->\r\n <nz-tab nzTitle=\"\u0110\u01A1n v\u1ECB\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch \u0110\u01A1n v\u1ECB</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">\u0110\u01A1n v\u1ECB ({{ lstOrgInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddOrgModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm \u0110\u01A1n v\u1ECB\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgTable\r\n [nzData]=\"lstOrgInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstOrgInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a \u0110\u01A1n v\u1ECB n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteOrgFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- TAB ROLE -->\r\n <nz-tab nzTitle=\"Nh\u00F3m quy\u1EC1n\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Nh\u00F3m quy\u1EC1n</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Roles ({{ lstRoleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddRoleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Role\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #roleTable\r\n [nzData]=\"lstRoleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstRoleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Role</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of roleTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a Role n\u00E0y?\"\r\n (nzOnConfirm)=\"deleteRoleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- ch\u1EE9c danh -->\r\n <nz-tab nzTitle=\"Ch\u1EE9c danh\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Ch\u1EE9c danh</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Ch\u1EE9c danh ({{ lstJobTitleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddJobTitleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Ch\u1EE9c danh\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgJobTilte\r\n [nzData]=\"lstJobTitleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstJobTitleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Ch\u1EE9c danh</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgJobTilte.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a ch\u1EE9c danh n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteJobTitleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n </nz-tabset>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<!-- Modal ch\u1ECDn Org -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddOrgModalVisible\"\r\n nzTitle=\"Th\u00EAm \u0110\u01A1n v\u1ECB v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddOrgModal()\"\r\n (nzOnOk)=\"addOrgsToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiOrgs\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 \u0110\u01A1n v\u1ECB\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchOrg\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm \u0110\u01A1n v\u1ECB...\"\r\n [(ngModel)]=\"searchOrgText\"\r\n (ngModelChange)=\"filterAvailableOrgs()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchOrg>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addOrgTable\r\n [nzData]=\"lstFilteredOrg\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableOrgs\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiOrgs\"\r\n [(nzChecked)]=\"isAllOrgChecked\"\r\n (nzCheckedChange)=\"onAllOrgChecked($event)\"\r\n [nzIndeterminate]=\"isOrgIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addOrgTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onOrgChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.TreeNodeName || item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn Role -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddRoleModalVisible\"\r\n nzTitle=\"Th\u00EAm Role v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddRoleModal()\"\r\n (nzOnOk)=\"addRolesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchRole\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Role...\"\r\n [(ngModel)]=\"searchRoleText\"\r\n (ngModelChange)=\"filterAvailableRoles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchRole>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addRoleTable\r\n [nzData]=\"lstFilteredRole\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableRoles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"isAllRoleChecked\"\r\n (nzCheckedChange)=\"onAllRoleChecked($event)\"\r\n [nzIndeterminate]=\"isRoleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th>M\u00F4 t\u1EA3</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addRoleTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onRoleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n <td>{{ item.Description }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn JobTitle -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddJobTitleModalVisible\"\r\n nzTitle=\"Th\u00EAm Ch\u1EE9c danh v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddJobTitleModal()\"\r\n (nzOnOk)=\"addJobTitlesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiJobTitles\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 Ch\u1EE9c danh\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchJobTitle\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Ch\u1EE9c danh...\"\r\n [(ngModel)]=\"searchJobTitleText\"\r\n (ngModelChange)=\"filterAvailableJobTitles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchJobTitle>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addJobTitleTable\r\n [nzData]=\"lstFilteredJobTitle\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableJobTitles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiJobTitles\"\r\n [(nzChecked)]=\"isAllJobTitleChecked\"\r\n (nzCheckedChange)=\"onAllJobTitleChecked($event)\"\r\n [nzIndeterminate]=\"isJobTitleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addJobTitleTable.data\">\r\n <td>\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onJobTitleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n" }]
8630
+ ], template: "<form nz-form [formGroup]=\"formData\">\r\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\r\n @if (item?.App_User_Id) {\r\n <button nz-button nzType=\"primary\" type=\"button\" (click)=\"resetPassword()\">\r\n {{ TranslateKey.RESET_PASSWORD | translate }}\r\n </button>\r\n <button nz-button nzType=\"primary\" type=\"button\" nzDanger (click)=\"delete()\">\r\n {{ TranslateKey.DELETE | translate }}\r\n </button>\r\n }\r\n <button-save (click)=\"save()\"></button-save>\r\n <button-back (click)=\"goto('/admin/user')\"></button-back>\r\n </div>\r\n\r\n <nz-divider></nz-divider>\r\n\r\n <div nz-row [nzGutter]=\"[16, 16]\">\r\n <!-- C\u1ED8T TR\u00C1I: FORM USER -->\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"UserName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn \u0111\u0103ng nh\u1EADp\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"UserName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"FullName\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n T\u00EAn ng\u01B0\u1EDDi d\u00F9ng\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"FullName\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Email\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Email </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'Ch\u01B0a \u0111\u00FAng \u0111\u1ECBnh d\u1EA1ng email'\">\r\n <input nz-input formControlName=\"Email\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <div *ngIf=\"!item?.App_User_Id\" nz-row [nzGutter]=\"16\">\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Password\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group [nzSuffix]=\"visiblePass ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\">\r\n <input type=\"{{ passwordType }}\" nz-input formControlName=\"Password\" autocomplete=\"new-password\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visiblePass = !visiblePass; passwordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n <div nz-col [nzSpan]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"RetypePassword\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired>\r\n Nh\u1EADp l\u1EA1i M\u1EADt kh\u1EA9u\r\n </nz-form-label>\r\n <nz-form-control nzErrorTip=\"M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\">\r\n <nz-input-group\r\n [nzSuffix]=\"visibleRePass ? suffixTemplateHiddenRePassword : suffixTemplateShowRePassword\"\r\n >\r\n <input\r\n type=\"{{ rePasswordType }}\"\r\n nz-input\r\n formControlName=\"RetypePassword\"\r\n autocomplete=\"new-password\"\r\n />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowRePassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenRePassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visibleRePass = !visibleRePass; rePasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <div nz-row>\r\n <div nz-col [nzSpan]=\"8\"></div>\r\n <div nz-col [nzSpan]=\"16\">\r\n <label nz-checkbox formControlName=\"IsActive\">Active</label>\r\n <label nz-checkbox formControlName=\"IsAdLogin\">AD login</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- C\u1ED8T PH\u1EA2I: TABS ORG & ROLE -->\r\n <div nz-col [nzSpan]=\"12\">\r\n <nz-tabset nzType=\"card\" nzSize=\"small\">\r\n <!-- TAB ORG -->\r\n <nz-tab nzTitle=\"\u0110\u01A1n v\u1ECB\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch \u0110\u01A1n v\u1ECB</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">\u0110\u01A1n v\u1ECB ({{ lstOrgInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddOrgModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm \u0110\u01A1n v\u1ECB\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgTable\r\n [nzData]=\"lstOrgInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstOrgInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>\u0110\u01A1n v\u1ECB</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a \u0110\u01A1n v\u1ECB n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteOrgFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- TAB ROLE -->\r\n <nz-tab nzTitle=\"Nh\u00F3m quy\u1EC1n\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Nh\u00F3m quy\u1EC1n</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Roles ({{ lstRoleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddRoleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Role\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #roleTable\r\n [nzData]=\"lstRoleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstRoleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n [nzBordered]=\"true\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Role</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of roleTable.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a Role n\u00E0y?\"\r\n (nzOnConfirm)=\"deleteRoleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n\r\n <!-- ch\u1EE9c danh -->\r\n <nz-tab nzTitle=\"Ch\u1EE9c danh\">\r\n <div style=\"padding: 8px\">\r\n <h3 style=\"margin-bottom: 16px\">Danh s\u00E1ch Ch\u1EE9c danh</h3>\r\n\r\n <div nz-flex [nzJustify]=\"'space-between'\" [nzAlign]=\"'center'\" style=\"margin-bottom: 12px\">\r\n <span style=\"font-weight: 500\">Ch\u1EE9c danh ({{ lstJobTitleInUser.length }})</span>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"openAddJobTitleModal()\">\r\n <span nz-icon nzType=\"plus\"></span>\r\n Th\u00EAm Ch\u1EE9c danh\r\n </button>\r\n </div>\r\n\r\n <div style=\"max-height: 450px; overflow-y: auto\">\r\n <nz-table\r\n #orgJobTilte\r\n [nzData]=\"lstJobTitleInUser\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"lstJobTitleInUser.length > 20\"\r\n [nzPageSize]=\"20\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"40px\">STT</th>\r\n <th>Ch\u1EE9c danh</th>\r\n <th nzWidth=\"50px\" nzAlign=\"center\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of orgJobTilte.data; let i = index\">\r\n <td>{{ i + 1 }}</td>\r\n <td>\r\n <div style=\"font-weight: 500\">{{ item.Name }}</div>\r\n <div style=\"font-size: 12px; color: #888\">{{ item.Code }}</div>\r\n </td>\r\n <td nzAlign=\"center\">\r\n <button\r\n nz-button\r\n nzType=\"link\"\r\n nzDanger\r\n nzSize=\"small\"\r\n nz-popconfirm\r\n nzPopconfirmTitle=\"X\u00F3a ch\u1EE9c danh n\u00E0y?\"\r\n nzAutofocus=\"ok\"\r\n (nzOnConfirm)=\"deleteJobTitleFromUser(item)\"\r\n >\r\n <span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n </nz-tabset>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<!-- Modal ch\u1ECDn Org -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddOrgModalVisible\"\r\n nzTitle=\"Th\u00EAm \u0110\u01A1n v\u1ECB v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddOrgModal()\"\r\n (nzOnOk)=\"addOrgsToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiOrgs\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 \u0110\u01A1n v\u1ECB\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchOrg\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm \u0110\u01A1n v\u1ECB...\"\r\n [(ngModel)]=\"searchOrgText\"\r\n (ngModelChange)=\"filterAvailableOrgs()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchOrg>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addOrgTable\r\n [nzData]=\"lstFilteredOrg\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableOrgs\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiOrgs\"\r\n [(nzChecked)]=\"isAllOrgChecked\"\r\n (nzCheckedChange)=\"onAllOrgChecked($event)\"\r\n [nzIndeterminate]=\"isOrgIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addOrgTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onOrgChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.TreeNodeName || item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn Role -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddRoleModalVisible\"\r\n nzTitle=\"Th\u00EAm Role v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddRoleModal()\"\r\n (nzOnOk)=\"addRolesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchRole\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Role...\"\r\n [(ngModel)]=\"searchRoleText\"\r\n (ngModelChange)=\"filterAvailableRoles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchRole>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addRoleTable\r\n [nzData]=\"lstFilteredRole\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableRoles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n nzShowCheckbox\r\n [(nzChecked)]=\"isAllRoleChecked\"\r\n (nzCheckedChange)=\"onAllRoleChecked($event)\"\r\n [nzIndeterminate]=\"isRoleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n <th>M\u00F4 t\u1EA3</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addRoleTable.data\">\r\n <td nzAlign=\"center\">\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onRoleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n <td>{{ item.Description }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n\r\n<!-- Modal ch\u1ECDn JobTitle -->\r\n<nz-modal\r\n [(nzVisible)]=\"isAddJobTitleModalVisible\"\r\n nzTitle=\"Th\u00EAm Ch\u1EE9c danh v\u00E0o User\"\r\n [nzWidth]=\"700\"\r\n (nzOnCancel)=\"closeAddJobTitleModal()\"\r\n (nzOnOk)=\"addJobTitlesToUser()\"\r\n nzOkText=\"Th\u00EAm\"\r\n nzCancelText=\"H\u1EE7y\"\r\n>\r\n <ng-container *nzModalContent>\r\n <nz-alert\r\n *ngIf=\"!isOneUserMultiJobTitles\"\r\n nzType=\"info\"\r\n nzMessage=\"Ch\u1EC9 \u0111\u01B0\u1EE3c ch\u1ECDn 1 Ch\u1EE9c danh\"\r\n nzShowIcon\r\n style=\"margin-bottom: 16px\"\r\n ></nz-alert>\r\n <!-- Search box -->\r\n <nz-input-group [nzPrefix]=\"prefixIconSearchJobTitle\" style=\"margin-bottom: 16px\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n placeholder=\"T\u00ECm ki\u1EBFm Ch\u1EE9c danh...\"\r\n [(ngModel)]=\"searchJobTitleText\"\r\n (ngModelChange)=\"filterAvailableJobTitles()\"\r\n />\r\n </nz-input-group>\r\n <ng-template #prefixIconSearchJobTitle>\r\n <span nz-icon nzType=\"search\"></span>\r\n </ng-template>\r\n\r\n <nz-table\r\n #addJobTitleTable\r\n [nzData]=\"lstFilteredJobTitle\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"true\"\r\n [nzPageSize]=\"10\"\r\n [nzLoading]=\"isLoadingAvailableJobTitles\"\r\n >\r\n <thead>\r\n <tr>\r\n <th\r\n nzWidth=\"60px\"\r\n [nzShowCheckbox]=\"isOneUserMultiJobTitles\"\r\n [(nzChecked)]=\"isAllJobTitleChecked\"\r\n (nzCheckedChange)=\"onAllJobTitleChecked($event)\"\r\n [nzIndeterminate]=\"isJobTitleIndeterminate\"\r\n ></th>\r\n <th nzWidth=\"150px\">M\u00E3</th>\r\n <th>T\u00EAn</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of addJobTitleTable.data\">\r\n <td>\r\n <label nz-checkbox [(ngModel)]=\"item.checked\" (ngModelChange)=\"onJobTitleChecked(item, $event)\"></label>\r\n </td>\r\n <td>{{ item.Code }}</td>\r\n <td>{{ item.Name }}</td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n </ng-container>\r\n</nz-modal>\r\n" }]
8630
8631
  }] });
8631
8632
 
8632
8633
  class UserProfileService {
@@ -8835,7 +8836,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
8835
8836
  ], template: "<!-- <h3>User Profile</h3> -->\r\n<nz-tabset [nzSize]=\"'small'\" [nzType]=\"'card'\" (nzSelectedIndexChange)=\"nzSelectedIndexChange($event)\">\r\n <nz-tab [nzTitle]=\"'\u0110\u1ED5i m\u1EADt kh\u1EA9u'\">\r\n <form [formGroup]=\"formData\" (ngSubmit)=\"onSubmit()\" nz-form>\r\n <div nz-row>\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"10\" [nzFor]=\"'CurrentPassword'\" nzNoColon nzLabelWrap nzRequired>\r\n M\u1EADt kh\u1EA9u hi\u1EC7n t\u1EA1i\r\n </nz-form-label>\r\n <nz-form-control [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <nz-input-group\r\n [nzSuffix]=\"\r\n !CurrentPasswordVisible ? suffixTemplateShowCurrentPassword : suffixTemplateHiddenCurrentPassword\r\n \"\r\n >\r\n <input\r\n nz-input\r\n type=\"{{ CurrentPasswordType }}\"\r\n formControlName=\"CurrentPassword\"\r\n id=\"CurrentPassword\"\r\n />\r\n </nz-input-group>\r\n <ng-template #suffixTemplateShowCurrentPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"CurrentPasswordVisible = !CurrentPasswordVisible; CurrentPasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenCurrentPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"CurrentPasswordVisible = !CurrentPasswordVisible; CurrentPasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"10\" [nzFor]=\"'NewPassword'\" nzNoColon nzLabelWrap nzRequired>\r\n M\u1EADt kh\u1EA9u m\u1EDBi\r\n </nz-form-label>\r\n <nz-form-control [nzErrorTip]=\"NewPasswordErrorTpl\">\r\n <nz-input-group\r\n [nzSuffix]=\"!NewPasswordVisible ? suffixTemplateShowNewPassword : suffixTemplateHiddenNewPassword\"\r\n >\r\n <input nz-input type=\"{{ NewPasswordType }}\" formControlName=\"NewPassword\" id=\"NewPassword\" />\r\n </nz-input-group>\r\n <ng-template #suffixTemplateShowNewPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"NewPasswordVisible = !NewPasswordVisible; NewPasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenNewPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"NewPasswordVisible = !NewPasswordVisible; NewPasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n <ng-template #NewPasswordErrorTpl let-control>\r\n @if (control.errors?.[\"required\"]) {\r\n {{ \"REQUIRED_FIELD\" | translate }}\r\n }\r\n @if (control.errors?.[\"minlength\"]) {\r\n M\u1EADt kh\u1EA9u d\u00E0i t\u1ED1i thi\u1EC3u 6 k\u00FD t\u1EF1\r\n }\r\n </ng-template>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"10\" [nzFor]=\"'ConfirmPassword'\" nzNoColon nzLabelWrap nzRequired>\r\n X\u00E1c nh\u1EADn m\u1EADt kh\u1EA9u m\u1EDBi\r\n </nz-form-label>\r\n <nz-form-control [nzErrorTip]=\"ConfirmPasswordErrorTpl\">\r\n <nz-input-group\r\n [nzSuffix]=\"\r\n !ConfirmPasswordVisible ? suffixTemplateShowConfirmPassword : suffixTemplateHiddenConfirmPassword\r\n \"\r\n >\r\n <input\r\n nz-input\r\n type=\"{{ ConfirmPasswordType }}\"\r\n formControlName=\"ConfirmPassword\"\r\n id=\"ConfirmPassword\"\r\n />\r\n </nz-input-group>\r\n <ng-template #suffixTemplateShowConfirmPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"ConfirmPasswordVisible = !ConfirmPasswordVisible; ConfirmPasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenConfirmPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"ConfirmPasswordVisible = !ConfirmPasswordVisible; ConfirmPasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n <ng-template #ConfirmPasswordErrorTpl let-control>\r\n @if (control.errors?.[\"required\"]) {\r\n {{ \"REQUIRED_FIELD\" | translate }}\r\n }\r\n @if (control.errors?.[\"passwordMismatch\"]) {\r\n M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\r\n }\r\n </ng-template>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n </div>\r\n\r\n <button nz-button nzType=\"primary\">\u0110\u1ED5i m\u1EADt kh\u1EA9u</button>\r\n </form>\r\n </nz-tab>\r\n\r\n <nz-tab [nzTitle]=\"'Giao di\u1EC7n'\">\r\n <div nz-row>\r\n <extend-checkbox\r\n nz-col\r\n [nzSpan]=\"6\"\r\n [label]=\"'High contrast'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"isHighContrast\"\r\n (_ngModelChange)=\"onChangeHighContrast()\"\r\n ></extend-checkbox>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"6\"\r\n [label]=\"'Side width'\"\r\n [(_ngModel)]=\"sideWidth\"\r\n (_ngModelChange)=\"onChangeSideWidth()\"\r\n ></extend-input>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col>\r\n Theme color:\r\n <nz-color-picker\r\n nzShowText\r\n [ngModel]=\"\r\n profileService.userProfile[profileService.KEY_THEME_COLOR] ||\r\n profileService.themecf[profileService.KEY_THEME_COLOR] ||\r\n profileService.DEFAULT_THEME_COLOR\r\n \"\r\n (ngModelChange)=\"\r\n profileService.updateUserProfile(profileService.KEY_THEME_COLOR, $event); profileService.loadTheme()\r\n \"\r\n ></nz-color-picker>\r\n </div>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col>\r\n Theme menu color:\r\n <nz-color-picker\r\n nzShowText\r\n [ngModel]=\"\r\n profileService.userProfile[profileService.KEY_THEME_MENU_COLOR] ||\r\n profileService.themecf[profileService.KEY_THEME_MENU_COLOR] ||\r\n profileService.DEFAULT_THEME_MENU_COLOR\r\n \"\r\n (ngModelChange)=\"\r\n profileService.updateUserProfile(profileService.KEY_THEME_MENU_COLOR, $event); profileService.loadTheme()\r\n \"\r\n ></nz-color-picker>\r\n </div>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col>\r\n <button type=\"button\" nz-button nzType=\"primary\" nzDanger (click)=\"profileService.resetTheme()\">\r\n Reset Theme\r\n </button>\r\n </div>\r\n </div>\r\n </nz-tab>\r\n <!-- <nz-tab [nzTitle]=\"'Tab3'\"> Tab3 </nz-tab> -->\r\n</nz-tabset>\r\n" }]
8836
8837
  }] });
8837
8838
 
8838
- const URLs$4 = {
8839
+ const URLs$5 = {
8839
8840
  getById: '/api/App_Sequence/GetById',
8840
8841
  getAll: '/api/App_Sequence/GetAll',
8841
8842
  getList: '/api/App_Sequence/GetList',
@@ -8847,13 +8848,13 @@ class SequenceService extends HTTPService {
8847
8848
  commonService = inject(CommonService);
8848
8849
  getById(id) {
8849
8850
  const params = new HttpParams().append('id', id);
8850
- return this.postParams(AppGlobals.apiEndpoint + URLs$4.getById, params);
8851
+ return this.postParams(AppGlobals.apiEndpoint + URLs$5.getById, params);
8851
8852
  }
8852
8853
  getAll() {
8853
- return this.post(AppGlobals.apiEndpoint + URLs$4.getAll);
8854
+ return this.post(AppGlobals.apiEndpoint + URLs$5.getAll);
8854
8855
  }
8855
8856
  getList(filter) {
8856
- return this.postData(AppGlobals.apiEndpoint + URLs$4.getList, filter);
8857
+ return this.postData(AppGlobals.apiEndpoint + URLs$5.getList, filter);
8857
8858
  }
8858
8859
  getPaging(filter) {
8859
8860
  return this.commonService.ESP({
@@ -8869,7 +8870,7 @@ class SequenceService extends HTTPService {
8869
8870
  }
8870
8871
  delete(id) {
8871
8872
  const params = new HttpParams().append('id', id);
8872
- return this.postParams(AppGlobals.apiEndpoint + URLs$4.delete, params);
8873
+ return this.postParams(AppGlobals.apiEndpoint + URLs$5.delete, params);
8873
8874
  }
8874
8875
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SequenceService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
8875
8876
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SequenceService, providedIn: 'root' });
@@ -8971,7 +8972,7 @@ class SequenceListComponent extends BaseComponent {
8971
8972
  this.getData();
8972
8973
  }
8973
8974
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SequenceListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
8974
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SequenceListComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th nzWidth=\"75px\">Type</th>\r\n <th nzWidth=\"75px\">Prefix</th>\r\n <th nzWidth=\"75px\">Suffix</th>\r\n <th nzWidth=\"75px\">Length</th>\r\n <th nzWidth=\"75px\">Start at</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\"></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Type }}</td>\r\n <td>{{ row.Prefix }}</td>\r\n <td>{{ row.Suffix }}</td>\r\n <td>{{ row.Length }}</td>\r\n <td>{{ row.SeqStartAt }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
8975
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SequenceListComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th nzWidth=\"75px\">Type</th>\r\n <th nzWidth=\"75px\">Prefix</th>\r\n <th nzWidth=\"75px\">Suffix</th>\r\n <th nzWidth=\"75px\">Length</th>\r\n <th nzWidth=\"75px\">Start at</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\"></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Type }}</td>\r\n <td>{{ row.Prefix }}</td>\r\n <td>{{ row.Suffix }}</td>\r\n <td>{{ row.Length }}</td>\r\n <td>{{ row.SeqStartAt }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "component", type: ButtonSearch, selector: "button-search" }, { kind: "component", type: ButtonAdd, selector: "button-add" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i6$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
8975
8976
  }
8976
8977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SequenceListComponent, decorators: [{
8977
8978
  type: Component,
@@ -8988,7 +8989,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
8988
8989
  IconDelete,
8989
8990
  NzPaginationModule,
8990
8991
  CommonModule,
8991
- ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th nzWidth=\"75px\">Type</th>\r\n <th nzWidth=\"75px\">Prefix</th>\r\n <th nzWidth=\"75px\">Suffix</th>\r\n <th nzWidth=\"75px\">Length</th>\r\n <th nzWidth=\"75px\">Start at</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\"></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Type }}</td>\r\n <td>{{ row.Prefix }}</td>\r\n <td>{{ row.Suffix }}</td>\r\n <td>{{ row.Length }}</td>\r\n <td>{{ row.SeqStartAt }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
8992
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-flex nzJustify=\"end\">\r\n <div nz-flex nzGap=\"small\">\r\n <button-add (click)=\"edit(null)\"></button-add>\r\n <button-search (click)=\"search()\"></button-search>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"data.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzShowPagination]=\"false\"\r\n [nzFrontPagination]=\"false\"\r\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\r\n >\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\">#</th>\r\n <th\r\n [nzShowSort]=\"true\"\r\n [nzSortOrder]=\"filter.OrderOption.FieldName == 'Code' ? filter.OrderOption.Direction : null\"\r\n [nzSortDirections]=\"['ascend', 'descend']\"\r\n (nzSortOrderChange)=\"\r\n filter.OrderOption.FieldName = 'Code'; filter.OrderOption.Direction = $event; getData()\r\n \"\r\n >\r\n Code\r\n </th>\r\n <th nzWidth=\"75px\">Type</th>\r\n <th nzWidth=\"75px\">Prefix</th>\r\n <th nzWidth=\"75px\">Suffix</th>\r\n <th nzWidth=\"75px\">Length</th>\r\n <th nzWidth=\"75px\">Start at</th>\r\n <th>Description</th>\r\n <th nzWidth=\"75px\">Active</th>\r\n <th nzWidth=\"75px\">Action</th>\r\n </tr>\r\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\r\n <th></th>\r\n <th>\r\n <extend-input size=\"small\" [(_ngModel)]=\"filter.Code\"></extend-input>\r\n </th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Code }}</td>\r\n <td>{{ row.Type }}</td>\r\n <td>{{ row.Prefix }}</td>\r\n <td>{{ row.Suffix }}</td>\r\n <td>{{ row.Length }}</td>\r\n <td>{{ row.SeqStartAt }}</td>\r\n <td>{{ row.Description }}</td>\r\n <td class=\"center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n }\r\n </td>\r\n <td class=\"center\">\r\n <icon-edit (click)=\"edit(row)\"></icon-edit>\r\n <box [width]=\"4\"></box>\r\n <icon-delete></icon-delete>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"data.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
8992
8993
  }] });
8993
8994
 
8994
8995
  class SequenceDetailComponent extends BaseComponent {
@@ -9096,7 +9097,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
9096
9097
  ], template: "<form nz-form [formGroup]=\"formData\">\r\n <div nz-row [nzGutter]=\"[32, 16]\">\r\n <div nz-col [nzSpan]=\"24\">\r\n <div nz-flex [nzGap]=\"'small'\" nzJustify=\"end\">\r\n <button-save (click)=\"save()\"></button-save>\r\n <button-delete (click)=\"delete()\"></button-delete>\r\n <button-back (click)=\"goback()\"></button-back>\r\n </div>\r\n </div>\r\n\r\n <nz-divider style=\"margin: 8px\"></nz-divider>\r\n\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Code\" nzLabelAlign=\"left\" nzNoColon=\"true\" nzRequired> M\u00E3 </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\" [nzErrorTip]=\"'REQUIRED_FIELD' | translate\">\r\n <input nz-input formControlName=\"Code\" id=\"Code\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Name\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Lo\u1EA1i </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <nz-select formControlName=\"Type\" nzAllowClear>\r\n <nz-option nzValue=\"daily\" nzLabel=\"Daily\"></nz-option>\r\n <nz-option nzValue=\"monthly\" nzLabel=\"Monthly\"></nz-option>\r\n <nz-option nzValue=\"yearly\" nzLabel=\"Yearly\"></nz-option>\r\n </nz-select>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Prefix\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Prefix </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <input nz-input formControlName=\"Prefix\" id=\"Prefix\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Suffix\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Suffix </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <input nz-input formControlName=\"Suffix\" id=\"Suffix\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <div nz-row>\r\n <div nz-col [nzSpan]=\"8\"></div>\r\n <div nz-col [nzSpan]=\"16\">\r\n <label nz-checkbox formControlName=\"IsActive\">Active</label>\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <nz-alert\r\n nzShowIcon\r\n nzType=\"info\"\r\n nzMessage=\"\uD83D\uDCA1 H\u01B0\u1EDBng d\u1EABn Prefix, Suffix\"\r\n [nzDescription]=\"descriptionTemplate2\"\r\n ></nz-alert>\r\n <ng-template #descriptionTemplate2>\r\n <div>{{ \"{ORG_CODE}\" }}</div>\r\n <div>{{ \"{yyyy}\" }}</div>\r\n <div>{{ \"{yy}\" }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <div nz-col [nzMd]=\"12\" [nzSm]=\"24\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"Length\" nzLabelAlign=\"left\" nzNoColon=\"true\"> Length </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <nz-input-number id=\"Length\" formControlName=\"Length\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"8\" nzFor=\"SeqStartAt\" nzLabelAlign=\"left\" nzNoColon=\"true\"> SeqStartAt </nz-form-label>\r\n <nz-form-control [nzSpan]=\"16\">\r\n <nz-input-number id=\"SeqStartAt\" formControlName=\"SeqStartAt\" />\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <extend-textarea [label]=\"'M\u00F4 t\u1EA3'\" [formData]=\"formData\" [controlName]=\"'Description'\"></extend-textarea>\r\n </div>\r\n\r\n <div nz-col nzSpan=\"24\"></div>\r\n </div>\r\n</form>\r\n" }]
9097
9098
  }] });
9098
9099
 
9099
- const URLs$3 = {
9100
+ const URLs$4 = {
9100
9101
  getPaging: '/api/Cache/paging',
9101
9102
  remove: '/api/Cache/remove',
9102
9103
  removeStartWith: '/api/Cache/remove-start-with',
@@ -9106,22 +9107,22 @@ const URLs$3 = {
9106
9107
  };
9107
9108
  class CacheService extends HTTPService {
9108
9109
  getPaging(filter) {
9109
- return this.postData(AppGlobals.apiEndpoint + URLs$3.getPaging, filter);
9110
+ return this.postData(AppGlobals.apiEndpoint + URLs$4.getPaging, filter);
9110
9111
  }
9111
9112
  getValue(key) {
9112
9113
  const params = new HttpParams().append('key', key);
9113
- return this.postParams(AppGlobals.apiEndpoint + URLs$3.getValue, params);
9114
+ return this.postParams(AppGlobals.apiEndpoint + URLs$4.getValue, params);
9114
9115
  }
9115
9116
  remove(key) {
9116
9117
  const params = new HttpParams().append('key', key);
9117
- return this.postParams(AppGlobals.apiEndpoint + URLs$3.remove, params);
9118
+ return this.postParams(AppGlobals.apiEndpoint + URLs$4.remove, params);
9118
9119
  }
9119
9120
  removeStartWith(prefix) {
9120
9121
  const params = new HttpParams().append('prefix', prefix);
9121
- return this.postParams(AppGlobals.apiEndpoint + URLs$3.removeStartWith, params);
9122
+ return this.postParams(AppGlobals.apiEndpoint + URLs$4.removeStartWith, params);
9122
9123
  }
9123
9124
  clearAll() {
9124
- return this.post(AppGlobals.apiEndpoint + URLs$3.clearAll);
9125
+ return this.post(AppGlobals.apiEndpoint + URLs$4.clearAll);
9125
9126
  }
9126
9127
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CacheService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
9127
9128
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CacheService, providedIn: 'root' });
@@ -9625,7 +9626,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
9625
9626
  args: [{ imports: [NzButtonModule], template: "<div style=\"overflow: auto\">\r\n <pre>\r\n {{ _data }}\r\n </pre>\r\n</div>\r\n<button nz-button nzType=\"primary\" (click)=\"load()\" style=\"position: fixed; right: 80px; bottom: 45px\">Reload</button>\r\n" }]
9626
9627
  }] });
9627
9628
 
9628
- const URLs$2 = {
9629
+ const URLs$3 = {
9629
9630
  getById: '/api/App_Log/GetById',
9630
9631
  getAll: '/api/App_Log/GetAll',
9631
9632
  getList: '/api/App_Log/GetList',
@@ -9637,13 +9638,13 @@ class LogAppService extends HTTPService {
9637
9638
  commonService = inject(CommonService);
9638
9639
  getById(id) {
9639
9640
  const params = new HttpParams().append('id', id);
9640
- return this.postParams(AppGlobals.apiEndpoint + URLs$2.getById, params);
9641
+ return this.postParams(AppGlobals.apiEndpoint + URLs$3.getById, params);
9641
9642
  }
9642
9643
  getAll() {
9643
- return this.post(AppGlobals.apiEndpoint + URLs$2.getAll);
9644
+ return this.post(AppGlobals.apiEndpoint + URLs$3.getAll);
9644
9645
  }
9645
9646
  getList(filter) {
9646
- return this.postData(AppGlobals.apiEndpoint + URLs$2.getList, filter);
9647
+ return this.postData(AppGlobals.apiEndpoint + URLs$3.getList, filter);
9647
9648
  }
9648
9649
  getPaging(filter) {
9649
9650
  return this.commonService.ESP({
@@ -9652,11 +9653,11 @@ class LogAppService extends HTTPService {
9652
9653
  });
9653
9654
  }
9654
9655
  addOrEdit(obj) {
9655
- return this.postData(AppGlobals.apiEndpoint + URLs$2.addOrEdit, obj);
9656
+ return this.postData(AppGlobals.apiEndpoint + URLs$3.addOrEdit, obj);
9656
9657
  }
9657
9658
  delete(id) {
9658
9659
  const params = new HttpParams().append('id', id);
9659
- return this.postParams(AppGlobals.apiEndpoint + URLs$2.delete, params);
9660
+ return this.postParams(AppGlobals.apiEndpoint + URLs$3.delete, params);
9660
9661
  }
9661
9662
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LogAppService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
9662
9663
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LogAppService, providedIn: 'root' });
@@ -9800,7 +9801,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
9800
9801
  args: [{ selector: 'app-version', imports: [NzButtonModule, ButtonReload], template: "<div style=\"padding: 16px\">\r\n <button nz-button nzType=\"primary\" (click)=\"refresh()\">Refresh</button>&nbsp;\r\n\r\n <pre>\r\nFrontend Client Version: {{ VscService.feClientVersion }}\r\nFrontend Server Version: {{ VscService.feServerVersion }}\r\n\r\nBackend Version: {{ JSON.stringify(VscService.beVersion, null, 2) }}\r\n\r\n\r\n</pre\r\n >\r\n</div>\r\n" }]
9801
9802
  }], ctorParameters: () => [{ type: VscService }] });
9802
9803
 
9803
- const URLs$1 = {
9804
+ const URLs$2 = {
9804
9805
  systemResourseInfo: '/api/monitor/SystemResourseInfo',
9805
9806
  };
9806
9807
  class MonitorService extends HTTPService {
@@ -9812,7 +9813,7 @@ class MonitorService extends HTTPService {
9812
9813
  });
9813
9814
  }
9814
9815
  getResourseInfo() {
9815
- return this.get(AppGlobals.apiEndpoint + URLs$1.systemResourseInfo, true);
9816
+ return this.get(AppGlobals.apiEndpoint + URLs$2.systemResourseInfo, true);
9816
9817
  }
9817
9818
  getLstDbMonitorType() {
9818
9819
  return this.cms.ESP({
@@ -10216,6 +10217,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
10216
10217
  ], providers: [DatePipe], template: "<div nz-row nzGutter=\"32\">\r\n <div nz-col nzSpan=\"24\" style=\"display: flex; justify-content: flex-end; gap: 8px\">\r\n <input type=\"file\" #fileInput style=\"display: none\" (change)=\"onFileSelected($event)\" />\r\n <button nz-button nzType=\"primary\" (click)=\"getListFile()\" nz-tooltip=\"Reload\" nzTooltipPlacement=\"bottom\">\r\n <i nz-icon nzType=\"reload\"></i>\r\n </button>\r\n <button nz-button nzType=\"primary\" (click)=\"fileInput.click()\" nz-tooltip=\"Upload\" nzTooltipPlacement=\"bottom\">\r\n <i nz-icon nzType=\"upload\"></i>\r\n </button>\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n (click)=\"createFolder()\"\r\n nz-tooltip=\"New Folder\"\r\n nzTooltipPlacement=\"bottomRight\"\r\n >\r\n <i nz-icon nzType=\"folder-add\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div nz-row nzGutter=\"32\">\r\n <div nz-col nzSpan=\"24\">\r\n <strong>{{ currentPath }}</strong>\r\n </div>\r\n</div>\r\n\r\n<nz-table #fileTable [nzData]=\"fileList\" [nzLoading]=\"isLoading\" nzSize=\"small\" nzBordered>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"50px\" nzAlign=\"center\">Type</th>\r\n <th>Name</th>\r\n <!-- <th>Path</th> -->\r\n <th nzWidth=\"100px\">Size</th>\r\n <th nzWidth=\"180px\">Modified Date</th>\r\n <th nzWidth=\"100px\" nzAlign=\"right\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngIf=\"canGoUp()\" (dblclick)=\"goUpLevel()\" style=\"cursor: pointer\">\r\n <td nzAlign=\"center\">\r\n <i nz-icon nzType=\"folder\" nzTheme=\"fill\" [style.color]=\"'#faad14'\"></i>\r\n </td>\r\n <td><strong>..</strong></td>\r\n <!-- <td></td> -->\r\n <td></td>\r\n <td></td>\r\n <td nzAlign=\"center\"></td>\r\n </tr>\r\n\r\n @for (item of fileTable.data; track $index) {\r\n <tr\r\n [class.selected]=\"item == selectedRow\"\r\n (click)=\"selectedRow = item\"\r\n (dblclick)=\"openItem(item)\"\r\n style=\"cursor: pointer\"\r\n >\r\n <td nzAlign=\"center\">\r\n <i\r\n nz-icon\r\n [nzType]=\"item.isdir ? 'folder' : 'file'\"\r\n [nzTheme]=\"item.isdir ? 'fill' : 'outline'\"\r\n [style.color]=\"item.isdir ? '#faad14' : '#1890ff'\"\r\n ></i>\r\n </td>\r\n <td>\r\n <strong>{{ item.name }}</strong>\r\n </td>\r\n <!-- <td>{{ item.path }}</td> -->\r\n <td nzAlign=\"right\">{{ item.isdir ? \"-\" : formatBytes(item.additional?.size) }}</td>\r\n <td nzAlign=\"right\">{{ formatDate(item.additional?.time?.mtime) }}</td>\r\n <td nzAlign=\"right\">\r\n <button\r\n *ngIf=\"!item.isdir\"\r\n nz-button\r\n nzType=\"link\"\r\n nzSize=\"small\"\r\n (click)=\"downloadFile(item); $event.stopPropagation()\"\r\n >\r\n <nz-icon nzType=\"download\" nzTheme=\"outline\"></nz-icon>\r\n </button>\r\n <button nz-button nzType=\"link\" nzDanger nzSize=\"small\" (click)=\"deleteItem(item); $event.stopPropagation()\">\r\n <nz-icon nzType=\"delete\" nzTheme=\"outline\"></nz-icon>\r\n </button>\r\n <button nz-button nzType=\"link\" nzSize=\"small\" (click)=\"renameItem(item); $event.stopPropagation()\">\r\n <nz-icon nzType=\"retweet\" nzTheme=\"outline\" />\r\n </button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n</nz-table>\r\n" }]
10217
10218
  }] });
10218
10219
 
10220
+ class RegisterComponent extends BaseComponent {
10221
+ fb = inject(FormBuilder);
10222
+ authService = inject(AuthService);
10223
+ orgService = inject(OrgService);
10224
+ settingService = inject(SettingService$1);
10225
+ vscService = inject(VscService);
10226
+ loadingService = inject(LoadingService);
10227
+ formData;
10228
+ PasswordType = 'password';
10229
+ PasswordVisible = false;
10230
+ ConfirmPasswordType = 'password';
10231
+ ConfirmPasswordVisible = false;
10232
+ lstOrg = [];
10233
+ isOneUserMultiOrgs = false;
10234
+ ngOnInit() {
10235
+ this.formData = this.fb.group({
10236
+ FullName: [null, [Validators.required]],
10237
+ UserName: [null, [Validators.required]],
10238
+ Password: ['', [Validators.required, Validators.minLength(6)]],
10239
+ ConfirmPassword: ['', [Validators.required, this.passwordMatchValidator()]],
10240
+ });
10241
+ }
10242
+ passwordMatchValidator() {
10243
+ return (control) => {
10244
+ const password = this.formData?.get('Password')?.value;
10245
+ const retypePassword = control.value;
10246
+ if (password && retypePassword && password !== retypePassword) {
10247
+ return { passwordMismatch: true };
10248
+ }
10249
+ return null;
10250
+ };
10251
+ }
10252
+ doregister() {
10253
+ if (this.formData.valid) {
10254
+ this.authService.signUp(this.formData.getRawValue());
10255
+ }
10256
+ else {
10257
+ this.touchControls(this.formData);
10258
+ }
10259
+ }
10260
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RegisterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
10261
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: RegisterComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div nz-row nzJustify=\"center\">\r\n <div class=\"form-container\">\r\n <form nz-flex nzVertical=\"true\" nz-form [formGroup]=\"formData\" class=\"login-form\" (ngSubmit)=\"doregister()\">\r\n <nz-form-item>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group nzPrefixIcon=\"user\">\r\n <input type=\"text\" nz-input formControlName=\"FullName\" placeholder=\"H\u1ECD t\u00EAn\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group nzPrefixIcon=\"user\">\r\n <input type=\"text\" nz-input formControlName=\"UserName\" placeholder=\"T\u00EAn \u0111\u0103ng nh\u1EADp\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-control [nzErrorTip]=\"PasswordErrorTpl\">\r\n <nz-input-group\r\n nzPrefixIcon=\"lock\"\r\n [nzSuffix]=\"!PasswordVisible ? suffixTemplateShowPassword : suffixTemplateHiddenPassword\"\r\n >\r\n <input nz-input type=\"{{ PasswordType }}\" formControlName=\"Password\" id=\"Password\" placeholder=\"M\u1EADt kh\u1EA9u\" />\r\n </nz-input-group>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"PasswordVisible = !PasswordVisible; PasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"PasswordVisible = !PasswordVisible; PasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n <ng-template #PasswordErrorTpl let-control>\r\n @if (control.errors?.[\"required\"]) {\r\n {{ \"REQUIRED_FIELD\" | translate }}\r\n }\r\n @if (control.errors?.[\"minlength\"]) {\r\n M\u1EADt kh\u1EA9u d\u00E0i t\u1ED1i thi\u1EC3u 6 k\u00FD t\u1EF1\r\n }\r\n </ng-template>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-control [nzErrorTip]=\"ConfirmPasswordErrorTpl\">\r\n <nz-input-group\r\n nzPrefixIcon=\"lock\"\r\n [nzSuffix]=\"\r\n !ConfirmPasswordVisible ? suffixTemplateShowConfirmPassword : suffixTemplateHiddenConfirmPassword\r\n \"\r\n >\r\n <input\r\n nz-input\r\n type=\"{{ ConfirmPasswordType }}\"\r\n placeholder=\"X\u00E1c nh\u1EADn m\u1EADt kh\u1EA9u\"\r\n formControlName=\"ConfirmPassword\"\r\n id=\"ConfirmPassword\"\r\n />\r\n </nz-input-group>\r\n <ng-template #suffixTemplateShowConfirmPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"ConfirmPasswordVisible = !ConfirmPasswordVisible; ConfirmPasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenConfirmPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"ConfirmPasswordVisible = !ConfirmPasswordVisible; ConfirmPasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n <ng-template #ConfirmPasswordErrorTpl let-control>\r\n @if (control.errors?.[\"required\"]) {\r\n {{ \"REQUIRED_FIELD\" | translate }}\r\n }\r\n @if (control.errors?.[\"passwordMismatch\"]) {\r\n M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\r\n }\r\n </ng-template>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <div nz-flex nzVertical=\"true\" nzGap=\"4px\">\r\n <button nz-button [nzType]=\"'primary'\" nzBlock [nzLoading]=\"loadingService.isLoading\">\u0110\u0103ng k\u00FD</button>\r\n <!-- <nz-form-item nzJustify=\"end\">\r\n <nz-switch formControlName=\"langSwitch\" class=\"nz-switch-both-active-color\" nzCheckedChildren=\"VN\"\r\n nzUnCheckedChildren=\"EN\" (ngModelChange)=\"changeLanguage($event)\"></nz-switch>\r\n </nz-form-item> -->\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex;justify-content:center;align-items:center;height:80vh}.form-container{width:300px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i5.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i5$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i5$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i5$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzSwitchModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzSelectModule }] });
10262
+ }
10263
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RegisterComponent, decorators: [{
10264
+ type: Component,
10265
+ args: [{ imports: [
10266
+ FormsModule,
10267
+ ReactiveFormsModule,
10268
+ TranslateModule,
10269
+ NzFormModule,
10270
+ NzInputModule,
10271
+ NzIconModule,
10272
+ NzToolTipModule,
10273
+ NzButtonModule,
10274
+ NzSwitchModule,
10275
+ NzFlexModule,
10276
+ NzSelectModule,
10277
+ ], template: "<div nz-row nzJustify=\"center\">\r\n <div class=\"form-container\">\r\n <form nz-flex nzVertical=\"true\" nz-form [formGroup]=\"formData\" class=\"login-form\" (ngSubmit)=\"doregister()\">\r\n <nz-form-item>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group nzPrefixIcon=\"user\">\r\n <input type=\"text\" nz-input formControlName=\"FullName\" placeholder=\"H\u1ECD t\u00EAn\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n <nz-form-item>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group nzPrefixIcon=\"user\">\r\n <input type=\"text\" nz-input formControlName=\"UserName\" placeholder=\"T\u00EAn \u0111\u0103ng nh\u1EADp\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-control [nzErrorTip]=\"PasswordErrorTpl\">\r\n <nz-input-group\r\n nzPrefixIcon=\"lock\"\r\n [nzSuffix]=\"!PasswordVisible ? suffixTemplateShowPassword : suffixTemplateHiddenPassword\"\r\n >\r\n <input nz-input type=\"{{ PasswordType }}\" formControlName=\"Password\" id=\"Password\" placeholder=\"M\u1EADt kh\u1EA9u\" />\r\n </nz-input-group>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"PasswordVisible = !PasswordVisible; PasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"PasswordVisible = !PasswordVisible; PasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n <ng-template #PasswordErrorTpl let-control>\r\n @if (control.errors?.[\"required\"]) {\r\n {{ \"REQUIRED_FIELD\" | translate }}\r\n }\r\n @if (control.errors?.[\"minlength\"]) {\r\n M\u1EADt kh\u1EA9u d\u00E0i t\u1ED1i thi\u1EC3u 6 k\u00FD t\u1EF1\r\n }\r\n </ng-template>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-control [nzErrorTip]=\"ConfirmPasswordErrorTpl\">\r\n <nz-input-group\r\n nzPrefixIcon=\"lock\"\r\n [nzSuffix]=\"\r\n !ConfirmPasswordVisible ? suffixTemplateShowConfirmPassword : suffixTemplateHiddenConfirmPassword\r\n \"\r\n >\r\n <input\r\n nz-input\r\n type=\"{{ ConfirmPasswordType }}\"\r\n placeholder=\"X\u00E1c nh\u1EADn m\u1EADt kh\u1EA9u\"\r\n formControlName=\"ConfirmPassword\"\r\n id=\"ConfirmPassword\"\r\n />\r\n </nz-input-group>\r\n <ng-template #suffixTemplateShowConfirmPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"ConfirmPasswordVisible = !ConfirmPasswordVisible; ConfirmPasswordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenConfirmPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"ConfirmPasswordVisible = !ConfirmPasswordVisible; ConfirmPasswordType = 'password'\"\r\n />\r\n </ng-template>\r\n <ng-template #ConfirmPasswordErrorTpl let-control>\r\n @if (control.errors?.[\"required\"]) {\r\n {{ \"REQUIRED_FIELD\" | translate }}\r\n }\r\n @if (control.errors?.[\"passwordMismatch\"]) {\r\n M\u1EADt kh\u1EA9u kh\u00F4ng kh\u1EDBp\r\n }\r\n </ng-template>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <div nz-flex nzVertical=\"true\" nzGap=\"4px\">\r\n <button nz-button [nzType]=\"'primary'\" nzBlock [nzLoading]=\"loadingService.isLoading\">\u0110\u0103ng k\u00FD</button>\r\n <!-- <nz-form-item nzJustify=\"end\">\r\n <nz-switch formControlName=\"langSwitch\" class=\"nz-switch-both-active-color\" nzCheckedChildren=\"VN\"\r\n nzUnCheckedChildren=\"EN\" (ngModelChange)=\"changeLanguage($event)\"></nz-switch>\r\n </nz-form-item> -->\r\n </div>\r\n </form>\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex;justify-content:center;align-items:center;height:80vh}.form-container{width:300px}\n"] }]
10278
+ }] });
10279
+
10219
10280
  class App_Dic_Domain {
10220
10281
  // #region properties
10221
10282
  App_Dic_Domain_Id;
@@ -10297,7 +10358,7 @@ class FileFilter extends GridFilter {
10297
10358
  }
10298
10359
  }
10299
10360
 
10300
- const URLs = {
10361
+ const URLs$1 = {
10301
10362
  getById: '/api/App_MailTemplate/GetById',
10302
10363
  getAll: '/api/App_MailTemplate/GetAll',
10303
10364
  getList: '/api/App_MailTemplate/GetList',
@@ -10311,7 +10372,7 @@ class MailTemplateService extends HTTPService {
10311
10372
  cmservice = inject(CommonService);
10312
10373
  getById(id) {
10313
10374
  const params = new HttpParams().append('id', id);
10314
- return this.postParams(AppGlobals.apiEndpoint + URLs.getById, params);
10375
+ return this.postParams(AppGlobals.apiEndpoint + URLs$1.getById, params);
10315
10376
  }
10316
10377
  getAll() {
10317
10378
  return this.cmservice.ESP({
@@ -10319,7 +10380,7 @@ class MailTemplateService extends HTTPService {
10319
10380
  });
10320
10381
  }
10321
10382
  getList(filter) {
10322
- return this.postData(AppGlobals.apiEndpoint + URLs.getList, filter);
10383
+ return this.postData(AppGlobals.apiEndpoint + URLs$1.getList, filter);
10323
10384
  }
10324
10385
  getPaging(filter) {
10325
10386
  return this.cmservice.ESP({
@@ -10328,11 +10389,11 @@ class MailTemplateService extends HTTPService {
10328
10389
  });
10329
10390
  }
10330
10391
  addOrEdit(obj) {
10331
- return this.postData(AppGlobals.apiEndpoint + URLs.addOrEdit, obj);
10392
+ return this.postData(AppGlobals.apiEndpoint + URLs$1.addOrEdit, obj);
10332
10393
  }
10333
10394
  delete(id) {
10334
10395
  const params = new HttpParams().append('id', id);
10335
- return this.postParams(AppGlobals.apiEndpoint + URLs.delete, params);
10396
+ return this.postParams(AppGlobals.apiEndpoint + URLs$1.delete, params);
10336
10397
  }
10337
10398
  getSettingsByTemplateId(templateId) {
10338
10399
  return this.cmservice.ESP({
@@ -10341,13 +10402,13 @@ class MailTemplateService extends HTTPService {
10341
10402
  });
10342
10403
  }
10343
10404
  sendTestEmail(payload) {
10344
- return this.postData(AppGlobals.apiEndpoint + URLs.sendTestEmail, payload);
10405
+ return this.postData(AppGlobals.apiEndpoint + URLs$1.sendTestEmail, payload);
10345
10406
  }
10346
10407
  testFillData(id) {
10347
10408
  return this.post(AppGlobals.apiEndpoint + '/api/App_MailTemplate/testFillData?id=' + id);
10348
10409
  }
10349
10410
  cronJobScheduler_RefreshJobs() {
10350
- return this.post(AppGlobals.apiEndpoint + URLs.cronJobScheduler_RefreshJobs);
10411
+ return this.post(AppGlobals.apiEndpoint + URLs$1.cronJobScheduler_RefreshJobs);
10351
10412
  }
10352
10413
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: MailTemplateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
10353
10414
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: MailTemplateService, providedIn: 'root' });
@@ -10368,7 +10429,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
10368
10429
  // AutoFocusDirective,
10369
10430
  // } from '@brggroup/share-lib';
10370
10431
  //#region modal
10371
- class WF_Template {
10432
+ let WF_Template$1 = class WF_Template {
10372
10433
  WF_Template_Id;
10373
10434
  App_Org_Id;
10374
10435
  CreatedDate;
@@ -10398,8 +10459,8 @@ class WF_Template {
10398
10459
  this.TemplatePrint = obj.TemplatePrint || '';
10399
10460
  this.ApplyTo = obj.ApplyTo || '';
10400
10461
  }
10401
- }
10402
- class WF_TemplateStage {
10462
+ };
10463
+ let WF_TemplateStage$1 = class WF_TemplateStage {
10403
10464
  WF_TemplateStage_Id;
10404
10465
  App_Org_Id;
10405
10466
  CreatedDate;
@@ -10435,8 +10496,8 @@ class WF_TemplateStage {
10435
10496
  this.IsRequireUser = obj.IsRequireUser || false;
10436
10497
  this.IsTempId = obj.IsTempId || false;
10437
10498
  }
10438
- }
10439
- class WF_TemplateStageAction {
10499
+ };
10500
+ let WF_TemplateStageAction$1 = class WF_TemplateStageAction {
10440
10501
  WF_TemplateStageAction_Id;
10441
10502
  App_Org_Id;
10442
10503
  CreatedDate;
@@ -10497,8 +10558,8 @@ class WF_TemplateStageAction {
10497
10558
  this.IsTempId = obj.IsTempId || false;
10498
10559
  this.actionRule = new ActionRule(obj.actionRule);
10499
10560
  }
10500
- }
10501
- class WF_TemplateActionRef {
10561
+ };
10562
+ let WF_TemplateActionRef$1 = class WF_TemplateActionRef {
10502
10563
  WF_TemplateActionRef_Id;
10503
10564
  App_Org_Id;
10504
10565
  CreatedDate;
@@ -10526,8 +10587,8 @@ class WF_TemplateActionRef {
10526
10587
  this.To_WF_TemplateStageAction_Id = obj.To_WF_TemplateStageAction_Id || null;
10527
10588
  this.TemplateMail = obj.TemplateMail || '';
10528
10589
  }
10529
- }
10530
- class Workflow extends WF_Template {
10590
+ };
10591
+ class Workflow extends WF_Template$1 {
10531
10592
  lstTemplateType;
10532
10593
  lstTemplatePrint;
10533
10594
  lstStageStatus;
@@ -10564,7 +10625,7 @@ class WorkflowEditorOption {
10564
10625
  /**
10565
10626
  * STAGE
10566
10627
  */
10567
- class WorkflowStage extends WF_TemplateStage {
10628
+ class WorkflowStage extends WF_TemplateStage$1 {
10568
10629
  editorOption = new WorkflowStageEditorOption();
10569
10630
  constructor(obj) {
10570
10631
  obj = obj || {};
@@ -10588,7 +10649,7 @@ class WorkflowStageEditorOption {
10588
10649
  /**
10589
10650
  * Action
10590
10651
  */
10591
- class WorkflowAction extends WF_TemplateStageAction {
10652
+ class WorkflowAction extends WF_TemplateStageAction$1 {
10592
10653
  FromSide;
10593
10654
  ToSide;
10594
10655
  allowBack; // true = 2 đầu, false/undefined = 1 đầu
@@ -10627,7 +10688,7 @@ class WorkflowAction extends WF_TemplateStageAction {
10627
10688
  this.editorOption = new WorkflowActionEditorOption(obj.editorOption);
10628
10689
  }
10629
10690
  }
10630
- class WorkflowActionRef extends WF_TemplateActionRef {
10691
+ class WorkflowActionRef extends WF_TemplateActionRef$1 {
10631
10692
  }
10632
10693
  class WorkflowActionEditorOption {
10633
10694
  points;
@@ -10689,6 +10750,8 @@ class WF_TransitionRuleLine {
10689
10750
  WF_TemplateStageAction_Id;
10690
10751
  RuleType;
10691
10752
  StoreToExec;
10753
+ App_MailTemplate_Id;
10754
+ EmailTo;
10692
10755
  constructor(obj) {
10693
10756
  obj = obj || {};
10694
10757
  this.WF_TransitionRuleLine_Id = obj.WF_TransitionRuleLine_Id || null;
@@ -10704,6 +10767,8 @@ class WF_TransitionRuleLine {
10704
10767
  this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;
10705
10768
  this.RuleType = obj.RuleType || '';
10706
10769
  this.StoreToExec = obj.StoreToExec || '';
10770
+ this.App_MailTemplate_Id = obj.App_MailTemplate_Id || '';
10771
+ this.EmailTo = obj.EmailTo || '';
10707
10772
  }
10708
10773
  }
10709
10774
  class ActionRule extends WF_TransitionRule {
@@ -12352,7 +12417,7 @@ class WorkflowEditorComponent extends BaseComponent {
12352
12417
  });
12353
12418
  }
12354
12419
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WorkflowEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
12355
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: WorkflowEditorComponent, isStandalone: true, selector: "app-workflow-editor", inputs: { lstOrg: "lstOrg", lstRole: "lstRole", lstEmailTemplate: "lstEmailTemplate" }, outputs: { onSave: "onSave", onDeleteStage: "onDeleteStage", onDeleteAction: "onDeleteAction", onDeleteRule: "onDeleteRule", onDeleteRuleLine: "onDeleteRuleLine", onCheckRule: "onCheckRule", onCheckAllRule: "onCheckAllRule" }, host: { listeners: { "window:keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "svgRef", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "inputStageStatusElement", first: true, predicate: ["inputStageStatusElement"], descendants: true }, { propertyName: "inputActionTypeElement", first: true, predicate: ["inputActionTypeElement"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n #canvasRef\r\n class=\"workflow-canvas\"\r\n [class.connecting]=\"!!connectingFrom\"\r\n [class.dragging-point]=\"!!draggingPoint\"\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\"\r\n (mousedown)=\"onMouseDownCanvas($event)\"\r\n (mousemove)=\"onMouseMoveCanvas($event)\"\r\n (mouseup)=\"onMouseUpCanvas($event)\"\r\n (click)=\"onClickCanvas($event)\"\r\n>\r\n <!-- \r\n\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\" \r\n\r\n [style.width.px]=\"CANVAS_WIDTH\"\r\n [style.height.px]=\"CANVAS_HEIGHT\"\r\n\r\n style=\"width: 100%; height: calc(100vh - 120px)\"\r\n \r\n -->\r\n\r\n <div class=\"toolbar\" (mousedown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\">\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Editor setting\" (click)=\"settingVisible = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon>\r\n </button>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Infomation\" (click)=\"infoVisible = true\">\r\n <nz-icon nzType=\"info-circle\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Template setting\" (click)=\"drawTemplateVisibel = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon> T\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nzDanger [nzLoading]=\"!ready\" nz-tooltip=\"Save (Ctrl + S)\" (click)=\"save()\">\r\n <nz-icon nzType=\"save\"></nz-icon>\r\n </button>\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Add stage\" (click)=\"addStage()\">\r\n <nz-icon nzType=\"plus\" class=\"color-primary\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Move mode\"\r\n (click)=\"isMoveMode = true\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/hand-palm.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"!isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Select mode\"\r\n (click)=\"isMoveMode = false\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/cursor.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- UNDO / REDO -->\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"undoStack.length === 0\"\r\n nz-tooltip=\"Undo\"\r\n (click)=\"undo()\"\r\n >\r\n <nz-icon nzType=\"undo\"></nz-icon>\r\n </button>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"redoStack.length === 0\"\r\n nz-tooltip=\"Redo\"\r\n (click)=\"redo()\"\r\n >\r\n <nz-icon nzType=\"redo\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- ALIGN -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignLeft()\">\u27F8</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignCenter()\">\u2261</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignRight()\">\u27F9</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignTop()\">\u21D1</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignMiddle()\">\u2550</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignBottom()\">\u21D3</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <!-- DISTRIBUTE -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeHorizontal()\">\r\n \u21C4\r\n </button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeVertical()\">\u21C5</button>\r\n </div>\r\n\r\n <div\r\n class=\"canvas-content\"\r\n [class.panning]=\"isMoveMode\"\r\n [style.transform]=\"'translate(' + template.editorOption.panX + 'px,' + template.editorOption.panY + 'px)'\"\r\n >\r\n <!-- GRID -->\r\n <div *ngIf=\"wfcSetting.ShowGrid\" class=\"grid-layer\"></div>\r\n\r\n <!-- <div class=\"zoom-toolbar\">\r\n <button nz-button nzSize=\"small\" (click)=\"zoomOut()\">\u2212</button>\r\n <span>{{ zoom * 100 | number: \"1.0-0\" }}%</span>\r\n <button nz-button nzSize=\"small\" (click)=\"zoomIn()\">+</button>\r\n </div> -->\r\n\r\n <!-- SVG EDGES -->\r\n <svg #svg class=\"edges-layer\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\r\n <g [attr.transform]=\"svgTransform\">\r\n <!-- DEFS -->\r\n <defs>\r\n <!-- glow effect -->\r\n <filter id=\"edge-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feGaussianBlur stdDeviation=\"2\" result=\"blur\" />\r\n <feMerge>\r\n <feMergeNode in=\"blur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n\r\n <!-- arrow markers -->\r\n <marker\r\n id=\"arrow-blue\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-blue-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n </defs>\r\n\r\n <!-- EDGES B\u00CCNH TH\u01AF\u1EDCNG -->\r\n <ng-container *ngFor=\"let e of normalEdges; let i = index\">\r\n <path\r\n class=\"edge\"\r\n [attr.id]=\"'edge-path-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-blue)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-blue-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseenter)=\"onMouseEnterEdge(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- text b\u00E1m theo line -->\r\n <!-- \r\n <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text> \r\n \r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text>\r\n -->\r\n\r\n <!-- text th\u1EB3ng n\u1EB1m ngang -->\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- EDGE \u0110ANG HOVER (LU\u00D4N TR\u00CAN C\u00D9NG) -->\r\n <ng-container *ngFor=\"let e of hoverEdges; let i = index\">\r\n <path\r\n class=\"edge red\"\r\n [attr.id]=\"'edge-path-hover-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-red)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-red-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text>\r\n\r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text> -->\r\n\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- preview -->\r\n <path\r\n *ngIf=\"connectingFrom\"\r\n class=\"edge\"\r\n [attr.d]=\"buildPreviewPath()\"\r\n stroke-dasharray=\"5,5\"\r\n marker-end=\"url(#arrow-blue)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n\r\n <div\r\n *ngIf=\"isSelecting && selectStart && selectEnd\"\r\n class=\"selection-box\"\r\n [style.left.px]=\"Math.min(selectStart.x, selectEnd.x)\"\r\n [style.top.px]=\"Math.min(selectStart.y, selectEnd.y)\"\r\n [style.width.px]=\"Math.abs(selectEnd.x - selectStart.x)\"\r\n [style.height.px]=\"Math.abs(selectEnd.y - selectStart.y)\"\r\n ></div>\r\n\r\n <!-- lstStage -->\r\n @for (n of lstStage; track $index) {\r\n <!-- START NODE -->\r\n @if (n.StageType === \"_start_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-start\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'green'\"> START </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right connector-start\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-right connector-start reverse\"\r\n (click)=\"onClickConnector($event, n, 'right')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n }\r\n <!-- END NODE -->\r\n @else if (n.StageType === \"_end_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-end\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'red'\"> END </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left connector-end\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-left connector-end reverse\"\r\n (click)=\"onClickConnector($event, n, 'left')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n } @else {\r\n <nz-card\r\n class=\"workflow-node\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <div class=\"title\">{{ n.Code }}</div>\r\n\r\n <div>{{ n.Name }}</div>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div class=\"connector connector-right reverse\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n <div class=\"connector connector-left reverse\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n }\r\n </nz-card>\r\n }\r\n }\r\n\r\n <!-- POINTS -->\r\n @for (p of connectingPoints; track $index) {\r\n @if (p != draggingPoint) {\r\n <div\r\n class=\"waypoint\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n (contextmenu)=\"onRightClickPoint($event, hoverAction!, $index)\"\r\n ></div>\r\n } @else {\r\n <div\r\n class=\"waypoint dragging\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- drawer TEMPLATE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawTemplateTitle\"\r\n nzPlacement=\"right\"\r\n [nzWidth]=\"500\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"drawTemplateVisibel\"\r\n [nzFooter]=\"footerTplTemplate\"\r\n (nzOnClose)=\"drawTemplateVisibel = false\"\r\n>\r\n <ng-template #drawTemplateTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Template </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <extend-select\r\n [label]=\"'Org'\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Name', 'Code']\"\r\n [(_ngModel)]=\"template.App_Org_Id\"\r\n ></extend-select>\r\n <extend-input [label]=\"'Code'\" [(_ngModel)]=\"template.Code\"></extend-input>\r\n <extend-input [label]=\"'Name'\" [(_ngModel)]=\"template.Name\"></extend-input>\r\n <extend-select\r\n [label]=\"'Type'\"\r\n [lstItem]=\"template.lstTemplateType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.DocType\"\r\n ></extend-select>\r\n <extend-textarea [label]=\"'Desscription'\" [(_ngModel)]=\"template.Description\"></extend-textarea>\r\n <extend-select\r\n [label]=\"'Print template'\"\r\n [lstItem]=\"template.lstTemplatePrint\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.TemplatePrint\"\r\n ></extend-select>\r\n <extend-select\r\n [label]=\"'Apply to'\"\r\n [lstItem]=\"template.lstApplyTo\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.ApplyTo\"\r\n ></extend-select>\r\n\r\n <extend-checkbox [label]=\"'Active'\" [(_ngModel)]=\"template.IsActive\"></extend-checkbox>\r\n <extend-checkbox [label]=\"'Use Allow back'\" [(_ngModel)]=\"template.editorOption.AllowbackInUse\"></extend-checkbox>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of getLstStage; track tag) {\r\n <div nz-col>\r\n <nz-tag (click)=\"hoverStage = tag\">\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstStageStatus; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableStageStatus(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseStageStatus(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputStageStatusVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputStageStatus()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputStageStatusElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputStageStatusCode\"\r\n (keydown.enter)=\"inputStageStatusNameElement.select()\"\r\n />\r\n <input\r\n #inputStageStatusNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputStageStatusName\"\r\n (blur)=\"handleInputStageStatusConfirm()\"\r\n (keydown.enter)=\"handleInputStageStatusConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action type</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionType; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionType(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseActionType(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputActionTypeVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputActionType()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputActionTypeElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputActionTypeCode\"\r\n (keydown.enter)=\"inputActionTypeNameElement.select()\"\r\n />\r\n <input\r\n #inputActionTypeNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputActionTypeName\"\r\n (blur)=\"handleInputActionTypeConfirm()\"\r\n (keydown.enter)=\"handleInputActionTypeConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionStatus; track tag) {\r\n <div nz-col>\r\n @if (template.editingActionStatus != tag) {\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionStatus(tag.Code) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleClose(tag.Code)\"\r\n (click)=\"template.editingActionStatus = checkRemoveableActionStatus(tag.Code) ? tag : undefined\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n } @else {\r\n <input\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n [appAutoFocus]=\"true\"\r\n [(ngModel)]=\"tag.Code\"\r\n (blur)=\"template.editingActionStatus = undefined\"\r\n (keydown.enter)=\"template.editingActionStatus = undefined\"\r\n />&nbsp;&nbsp;\r\n }\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInput()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action status\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"+ New Action status\"\r\n [(ngModel)]=\"inputValue\"\r\n (blur)=\"handleInputConfirm()\"\r\n (keydown.enter)=\"handleInputConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #footerTplTemplate>\r\n <div nz-flex [nzGap]=\"6\" [nzJustify]=\"'end'\">\r\n <button nz-button nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"drawTemplateVisibel = false\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer STAGE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleStage\"\r\n [nzPlacement]=\"selectedStage?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzVisible]=\"!!selectedStage\"\r\n [nzWidth]=\"'calc(50vw)'\"\r\n [nzClosable]=\"false\"\r\n [nzFooter]=\"footerTplNode\"\r\n (nzOnClose)=\"selectedStage = undefined\"\r\n>\r\n <ng-template #drawerTitleStage>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedStage && selectedStage.editorOption) {\r\n @if (selectedStage.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n STAGE\r\n } @else {\r\n STAGE\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedStage\">\r\n <nz-radio-group [(ngModel)]=\"selectedStage.StageType\">\r\n <label nz-radio nzValue=\"_start_\">UI start</label>\r\n <label nz-radio nzValue=\"_end_\">UI end</label>\r\n <label nz-radio nzValue=\"start\">START</label>\r\n <label nz-radio nzValue=\"node\">NODE</label>\r\n <label nz-radio nzValue=\"end\">END</label>\r\n </nz-radio-group>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Code'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Code\"\r\n ></extend-input>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Name'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Name\"\r\n ></extend-input>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Sequence'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedStage.SeqValue\"\r\n ></extend-input-number>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Org implement'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedStage.App_Org_Id\"\r\n ></extend-select>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Number of Days'\"\r\n [floatingLabel]=\"true\"\r\n [precision]=\"1\"\r\n [(_ngModel)]=\"selectedStage.NumberDay\"\r\n ></extend-input-number>\r\n </div>\r\n\r\n @if (selectedStage.editorOption) {\r\n @if ([\"start\", \"node\", \"end\"].includes(selectedStage.StageType.toLowerCase())) {\r\n <extend-checkbox\r\n [label]=\"'Reverse'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.editorOption.isReverse\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <extend-checkbox\r\n [label]=\"'Require user action'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.IsRequireUser\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;List Action</h3>\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"addAction()\">\r\n <nz-icon nzType=\"plus\"></nz-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <nz-table nzSize=\"small\" [nzData]=\"lstActionOfCurrentStage\" [nzShowPagination]=\"false\" [nzNoResult]=\"'&nbsp;'\">\r\n <thead>\r\n <tr [hidden]=\"true\">\r\n <th nzWidth=\"40px\"></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (action of lstActionOfCurrentStage; track $index) {\r\n <tr (click)=\"onclickaction(action)\">\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-left': action == hoverAction ? 'solid 4px orange' : '',\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n ({{ $index + 1 }})\r\n <nz-icon\r\n nzType=\"delete\"\r\n nzTheme=\"outline\"\r\n class=\"color-warn cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); deleteAction(action)\"\r\n ></nz-icon>\r\n </td>\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\" class=\"has-floating-label floating-label\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"z-index: 2\">\r\n <label>Action status</label>\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"action.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(action.ActionStatus)\"\r\n (blur)=\"onenterAotu(action.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"action.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(action)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"getlstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(action)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Process status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstProcessStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.DocProcessStatus\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Role</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstRole\"\r\n [valueField]=\"'App_Role_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstRoleId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Email action</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailAction\"\r\n [valueField]=\"'ID'\"\r\n [displayField]=\"'Name'\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstEmailActionId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>Email template</div>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>\r\n <div nz-col nzSpan=\"1\"></div>\r\n <div nz-col nzSpan=\"23\" class=\"form-item-no-bottom\" style=\"font-weight: normal\">\r\n @for (actionRef of lstActionRefOf(action); track $index) {\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [labelSpan]=\"12\"\r\n [size]=\"'small'\"\r\n [label]=\"emailActionText(actionRef.To_WF_TemplateStageAction_Id)\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"actionRef.TemplateMail\"\r\n ></extend-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"8\">\r\n Action rule\r\n <button nz-button nzType=\"text\" nzSize=\"small\" (click)=\"actionRuleModalVisible = true\">\r\n <nz-icon nzType=\"export\" nzTheme=\"outline\" class=\"color-primary\" />\r\n </button>\r\n <button\r\n *ngIf=\"action.WF_TransitionsRule_Id\"\r\n nz-button\r\n nzType=\"text\"\r\n nzSize=\"small\"\r\n (click)=\"deleteActionRule(action)\"\r\n >\r\n <nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn\" />\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n\r\n <box [height]=\"16\"></box>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footerTplNode>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"\r\n selectedStage && selectedStage.editorOption && selectedStage.editorOption.drawerPosition == 'left'\r\n ? 'start'\r\n : 'end'\r\n \"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"selectedStage = undefined\">Close</button>\r\n <button\r\n *ngIf=\"selectedStage && ['START', 'END'].indexOf(selectedStage.StageType) < 0\"\r\n nz-button\r\n nzDanger\r\n (click)=\"deleteStage()\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer ACTION -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleAction\"\r\n nzTitle=\"ACTION\"\r\n [nzPlacement]=\"selectedAction?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzClosable]=\"false\"\r\n [nzWidth]=\"750\"\r\n [nzVisible]=\"!!selectedAction\"\r\n [nzFooter]=\"footerTplAction\"\r\n (nzOnClose)=\"selectedAction = undefined\"\r\n>\r\n <ng-template #drawerTitleAction>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedAction && selectedAction.editorOption) {\r\n @if (selectedAction.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n ACTION\r\n } @else {\r\n ACTION\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedAction\">\r\n <div>\r\n <strong\r\n >{{ selectedAction.getFromStageCode(lstStage) }} -> {{ selectedAction.getToStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getFromStageName(lstStage) }} -> {{ selectedAction.getToStageName(lstStage) }}</div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n\r\n <!-- <box [height]=\"16\"></box> -->\r\n <nz-divider></nz-divider>\r\n\r\n @if (template.editorOption.AllowbackInUse) {\r\n <extend-checkbox\r\n [label]=\"'Allow back'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedAction.allowBack\"\r\n (_ngModelChange)=\"onchangeAllowBack(selectedAction)\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n @if (selectedAction.allowBack) {\r\n <div>\r\n <strong\r\n >{{ selectedAction.getToStageCode(lstStage) }} -> {{ selectedAction.getFromStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getToStageName(lstStage) }} -> {{ selectedAction.getFromStageName(lstStage) }}</div>\r\n\r\n @if (selectedBackAction) {\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedBackAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedBackAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedBackAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedBackAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n }\r\n }\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #footerTplAction>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"selectedAction && selectedAction.editorOption.drawerPosition == 'left' ? 'start' : 'end'\"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button nzDanger (click)=\"deleteAction(selectedAction!)\">Delete</button>\r\n <button nz-button (click)=\"selectedAction = undefined\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- setting editor -->\r\n<nz-drawer\r\n [nzTitle]=\"drawSettingTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"settingVisible\"\r\n (nzOnClose)=\"settingVisible = false\"\r\n>\r\n <ng-template #drawSettingTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Editor </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <div class=\"form-item-no-bottom\">\r\n <extend-checkbox [label]=\"'Show grid'\" [labelSpan]=\"0\" [(_ngModel)]=\"wfcSetting.ShowGrid\"></extend-checkbox>\r\n\r\n <box [height]=\"16\"></box>\r\n </div>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- editor infomation -->\r\n<nz-drawer\r\n [nzTitle]=\"drawInfoTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"infoVisible\"\r\n (nzOnClose)=\"infoVisible = false\"\r\n>\r\n <ng-template #drawInfoTitle> <nz-icon nzType=\"info-circle\"></nz-icon> &nbsp; Infomation </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <p>1. C\u00E1c th\u00E0nh ph\u1EA7n: Stage or Node (stag, node quy tr\u00ECnh), Action or Connector (\u0111\u01B0\u1EDDng n\u1ED1i gi\u1EEFa c\u00E1c stage)</p>\r\n <p>2. Save \u0111\u1EC3 load c\u00E1c th\u00F4ng tin: Stage status, Action type</p>\r\n <p>\r\n 3. N\u1ED1i 2 node (t\u1EA1o connector t\u01B0\u01A1ng \u0111\u01B0\u01A1ng t\u1EA1o action):\r\n <br />- Click ch\u1EA5m cam t\u1EEB Node ngu\u1ED3n \u0111\u1EBFn ch\u1EA5m xanh c\u1EE7a Node \u0111\u00EDch (ho\u1EB7c click v\u00E0o Node \u0111\u00EDch), c\u00F3 th\u1EC3 click th\u00E0nh\r\n nhi\u1EC1u \u0111i\u1EC3m \u0111\u1EC3 t\u1EA1o \u0111\u01B0\u1EDDng n\u1ED1i cong<br />- Khi hover connector chuy\u1EC3n sang m\u1EA7u \u0111\u1ECF c\u00F3 th\u1EC3 click \u0111\u00FAp \u0111\u1EC3 th\u00EAm m\u1ED9t \u0111i\u1EC3m\r\n c\u1EE7a connector<br />- Khi hover l\u00EAn \u0111i\u1EC3m c\u1EE7a connector c\u00F3 th\u1EC3 di chuy\u1EC3n \u0111i\u1EC3m \u0111\u00F3 b\u1EB1ng c\u00E1ch nh\u1EA5n gi\u1EEF chu\u1ED9t v\u00E0 k\u00E9o th\u1EA3\r\n \u0111\u1EBFn v\u1ECB tr\u00ED m\u1EDBi<br />- Chu\u1ED9t ph\u1EA3i v\u00E0o \u0111i\u1EC3m n\u1ED1i connector \u0111\u1EC3 xo\u00E1 \u0111i\u1EC3m \u0111\u00F3\r\n </p>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- action rule modal -->\r\n<nz-modal\r\n [(nzVisible)]=\"actionRuleModalVisible\"\r\n [nzMaskClosable]=\"false\"\r\n [nzClosable]=\"false\"\r\n [nzKeyboard]=\"true\"\r\n [nzWidth]=\"'75vw'\"\r\n>\r\n <ng-container *nzModalTitle>\r\n ACTION RULE: [{{ selectedStage?.Code }}] {{ selectedStage?.Name }} > [{{ hoverAction?.ActionStatus }}]\r\n {{ hoverAction?.ActionText }}\r\n </ng-container>\r\n <ng-container *nzModalContent>\r\n @if (hoverAction && hoverAction.actionRule) {\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Code'\" [(_ngModel)]=\"hoverAction.actionRule.Code\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Name'\" [(_ngModel)]=\"hoverAction.actionRule.Name\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Note'\" [(_ngModel)]=\"hoverAction.actionRule.Note\"></extend-input>\r\n <extend-checkbox\r\n nz-col\r\n nzSpan=\"12\"\r\n [label]=\"'IsActive'\"\r\n [(_ngModel)]=\"hoverAction.actionRule.IsActive\"\r\n ></extend-checkbox>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table nzSize=\"small\" [nzData]=\"hoverAction.actionRule.lstLine\" [nzShowPagination]=\"false\">\r\n <thead>\r\n <tr>\r\n <th [nzWidth]=\"'40px'\"><icon-add (click)=\"addActionRuleLine()\"></icon-add></th>\r\n <th [nzWidth]=\"'250px'\">Rule type</th>\r\n <th>Template</th>\r\n <th>Template stage</th>\r\n <th>Template action</th>\r\n <th>Store to exec</th>\r\n <th [nzWidth]=\"'50px'\">Active</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of hoverAction.actionRule.lstLine; track $index) {\r\n <tr>\r\n <td><icon-delete (click)=\"deleteActionRuleLine(hoverAction.actionRule, item)\"></icon-delete></td>\r\n <td>\r\n <dic-domain-select\r\n [size]=\"'small'\"\r\n [DomainCode]=\"'WF_RuleType'\"\r\n [(_ngModel)]=\"item.RuleType\"\r\n ></dic-domain-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #xxx\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstTemplateForRule(item)\"\r\n [valueField]=\"'WF_Template_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_Template_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStage_Id = 0; item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #yyy\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstStageForRule(xxx._ngModel)\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstActionForRule(yyy._ngModel)\"\r\n [valueField]=\"'WF_TemplateStageAction_Id'\"\r\n [displayFields]=\"['ActionStatus', 'ActionText']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStageAction_Id\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"item.StoreToExec\"></extend-input>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"item.IsActive\"></extend-checkbox>\r\n </td>\r\n <td>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"checkAction(item)\">Check</button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button nzType=\"primary\" (click)=\"checkAllAction()\">OK</button>\r\n </ng-container>\r\n</nz-modal>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .workflow-wrapper{border:solid 1px lightgray;overflow:hidden;width:100%}.workflow-canvas{position:relative;background:#f0f2f5;cursor:default;overflow:hidden;outline:1px dashed rgba(0,0,0,.1)}.workflow-canvas .edges-layer{position:absolute;inset:0;width:100%;height:100%;z-index:1}.workflow-canvas .edges-layer path{stroke-width:2;fill:none}.canvas-content{transform-origin:0 0;width:100%;height:100%}.canvas-content{outline:1px dashed red}.canvas-content.panning{cursor:grab}.canvas-content.panning:active{cursor:grabbing}.workflow-canvas.panning{cursor:grab}.workflow-canvas.panning:active{cursor:grabbing}.workflow-canvas.connecting,.workflow-canvas.connecting .workflow-node{cursor:crosshair}.workflow-node{position:absolute;width:160px;cursor:grab;-webkit-user-select:none;user-select:none;z-index:2}.workflow-node:active{cursor:grabbing}.workflow-node.connecting-source,.workflow-node.selected,.workflow-node:hover:not(.workflow-node-start,.workflow-node-end){outline:2px dashed #1890ff}.workflow-node .title{font-weight:600;margin-bottom:6px}.workflow-node-start{width:0px}.workflow-node-start.connecting-source,.workflow-node-start.selected,.workflow-node-start:hover{outline:unset}.workflow-node-start.connecting-source nz-tag,.workflow-node-start.selected nz-tag,.workflow-node-start:hover nz-tag{outline:2px dashed}.workflow-node-start nz-tag{position:relative;top:45px;right:35px}.workflow-node-end{width:0px}.workflow-node-end.connecting-source,.workflow-node-end.selected,.workflow-node-end:hover{outline:unset}.workflow-node-end.connecting-source nz-tag,.workflow-node-end.selected nz-tag,.workflow-node-end:hover nz-tag{outline:2px dashed}.workflow-node-end nz-tag{position:relative;top:45px;right:32px}.connector{position:absolute;top:39px;width:12px;height:12px;background:#1890ff;border-radius:50%;transform:translateY(-50%);cursor:crosshair;transition:box-shadow .15s ease-out,transform .15s ease-out}.connector:hover{box-shadow:0 0 0 3px #1890ff4d;transform:translateY(-50%) scale(1.15)}.connector-right{right:-8px;background:orange}.connector-right.reverse,.connector-left{left:-8px}.connector-left.reverse{left:unset;right:-8px}.connector-start{width:16px;height:16px;right:-8px;background:green;box-shadow:0 0 0 3px #1890ff4d}.connector-end{width:16px;height:16px;left:-8px;background:#000;box-shadow:0 0 0 3px #1890ff4d}.edge{cursor:pointer;stroke:#1890ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;fill:none;transition:stroke .15s ease}.edge-hit{stroke:transparent;stroke-width:18px!important;fill:none;cursor:pointer}.edge-hit:hover+.edge{stroke:#ff4d4f;stroke-width:2}.workflow-canvas.dragging-point .edge-hit{pointer-events:none}.edge:hover+.edge-label{fill:#1890ff;font-weight:500}.edge-label{font-size:12px;fill:#555;pointer-events:none;-webkit-user-select:none;user-select:none}.blue{stroke:#1890ff!important}.red{stroke:#ff4d4f!important;box-shadow:0 0 0 3px #1890ff4d!important}.workflow-svg{background:transparent;overflow:visible}.waypoint{position:absolute;width:10px;height:10px;background:#ff4d4f;border-radius:50%;transform:translate(-50%,-50%) scale(1);cursor:move;z-index:1;transition:transform .12s ease-out,background-color .12s ease-out,box-shadow .12s ease-out}.waypoint:hover{background:#ff7875;transform:translate(-50%,-50%) scale(1.25);box-shadow:0 0 0 4px #ff787559}.waypoint.dragging{transition:none;transform:translate(-50%,-50%) scale(1.15);pointer-events:none}.workflow-canvas.dragging-point svg{cursor:grabbing}.selection-box{position:absolute;border:1px dashed #1890ff;background:#1890ff1a;pointer-events:none}.toolbar{position:absolute;top:8px;left:8px;display:flex;gap:4px;padding:6px;background:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;z-index:100}.toolbar .divider{width:1px;background:#e5e5e5;margin:0 2px}.zoom-toolbar{position:absolute;top:8px;left:8px;z-index:10;display:flex;align-items:center;gap:6px;background:#fff;padding:4px 6px;border-radius:6px;box-shadow:0 2px 6px #00000026}.zoom-toolbar span{min-width:40px;text-align:center;font-size:12px}nz-tag.selected{outline:2px dashed #1890ff}.grid-layer{position:absolute;inset:0;pointer-events:none;z-index:0;background-image:radial-gradient(rgba(0,0,0,.08) 1px,transparent 1px);background-size:20px 20px}.grid-layer{background-image:linear-gradient(to right,rgba(0,0,0,.06) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.06) 1px,transparent 1px);background-size:20px 20px}.editable-tag{background:#fff;border-style:dashed}::ng-deep .minimap{position:absolute;width:180px;height:125px;top:0;right:0;background-color:#eee;border:1px solid #aaa;opacity:.9;z-index:1}::ng-deep .minimap-node{position:absolute;background-color:#607a86}::ng-deep .minimap-node-round{position:absolute;background-color:#607a86;border-radius:10px}::ng-deep .minimap-node-round-start{background-color:green}::ng-deep .minimap-node-round-end{background-color:#000}::ng-deep .minimap-viewport{position:absolute;box-sizing:border-box;background-color:#4f6f7e66;z-index:1;cursor:move}::ng-deep .has-floating-label.floating-label{position:relative;padding-top:14px}::ng-deep .has-floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:16px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .has-floating-label nz-form-item nz-form-label label{font-size:12px;color:var(--darkgray, #565656);font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .has-floating-label .full-width{width:100%}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 60%,#f5f5f5 50%)}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzCardModule }, { kind: "component", type: i3$5.NzCardComponent, selector: "nz-card", inputs: ["nzBordered", "nzLoading", "nzHoverable", "nzBodyStyle", "nzCover", "nzActions", "nzType", "nzSize", "nzTitle", "nzExtra"], exportAs: ["nzCard"] }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i4$2.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i4$2.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: NzTagModule }, { kind: "component", type: i7.NzTagComponent, selector: "nz-tag", inputs: ["nzMode", "nzColor", "nzChecked", "nzBordered"], outputs: ["nzOnClose", "nzCheckedChange"], exportAs: ["nzTag"] }, { kind: "ngmodule", type: NzRadioModule }, { kind: "component", type: i6$4.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus", "nz-radio-button"], exportAs: ["nzRadio"] }, { kind: "component", type: i6$4.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendSelectComponent, selector: "extend-select", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "dropdownMatchSelectWidth", "labelSpan", "labelFlex", "disabled", "required", "noBottom", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "displayFields", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "itemChange", "onFocus"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "formItemNoButtom", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isTouched", "inputErrorMessage", "errorMessages"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i5$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i5$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzDividerModule }, { kind: "component", type: i8$1.NzDividerComponent, selector: "nz-divider", inputs: ["nzText", "nzType", "nzOrientation", "nzVariant", "nzDashed", "nzPlain"], exportAs: ["nzDivider"] }, { kind: "directive", type: AutoFocusDirective, selector: "[appAutoFocus]", inputs: ["appAutoFocus"] }, { kind: "ngmodule", type: NzAutocompleteModule }, { kind: "component", type: i16$1.NzAutocompleteComponent, selector: "nz-autocomplete", inputs: ["nzWidth", "nzOverlayClassName", "nzOverlayStyle", "nzDefaultActiveFirstOption", "nzBackfill", "compareWith", "nzDataSource"], outputs: ["selectionChange"], exportAs: ["nzAutocomplete"] }, { kind: "component", type: i16$1.NzAutocompleteOptionComponent, selector: "nz-auto-option", inputs: ["nzValue", "nzLabel", "nzDisabled"], outputs: ["selectionChange", "mouseEntered"], exportAs: ["nzAutoOption"] }, { kind: "directive", type: i16$1.NzAutocompleteTriggerDirective, selector: "input[nzAutocomplete], textarea[nzAutocomplete]", inputs: ["nzAutocomplete"], exportAs: ["nzAutocompleteTrigger"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: NzModalTitleDirective, selector: "[nzModalTitle]", exportAs: ["nzModalTitle"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "directive", type: NzModalFooterDirective, selector: "[nzModalFooter]", exportAs: ["nzModalFooter"] }, { kind: "component", type: DicDomainSelectComponent$1, selector: "dic-domain-select", inputs: ["layOutType", "label", "placeHolder", "labelSpan", "labelAlign", "disabled", "required", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "size", "borderBottomOnly", "defaultFirstItem", "floatingLabel", "DomainCode", "ParentItemCode", "_ngModel", "formData", "controlName"], outputs: ["_ngModelChange"] }] });
12420
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: WorkflowEditorComponent, isStandalone: true, selector: "app-workflow-editor", inputs: { lstOrg: "lstOrg", lstRole: "lstRole", lstEmailTemplate: "lstEmailTemplate" }, outputs: { onSave: "onSave", onDeleteStage: "onDeleteStage", onDeleteAction: "onDeleteAction", onDeleteRule: "onDeleteRule", onDeleteRuleLine: "onDeleteRuleLine", onCheckRule: "onCheckRule", onCheckAllRule: "onCheckAllRule" }, host: { listeners: { "window:keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "svgRef", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "inputStageStatusElement", first: true, predicate: ["inputStageStatusElement"], descendants: true }, { propertyName: "inputActionTypeElement", first: true, predicate: ["inputActionTypeElement"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n #canvasRef\r\n class=\"workflow-canvas\"\r\n [class.connecting]=\"!!connectingFrom\"\r\n [class.dragging-point]=\"!!draggingPoint\"\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\"\r\n (mousedown)=\"onMouseDownCanvas($event)\"\r\n (mousemove)=\"onMouseMoveCanvas($event)\"\r\n (mouseup)=\"onMouseUpCanvas($event)\"\r\n (click)=\"onClickCanvas($event)\"\r\n>\r\n <!-- \r\n\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\" \r\n\r\n [style.width.px]=\"CANVAS_WIDTH\"\r\n [style.height.px]=\"CANVAS_HEIGHT\"\r\n\r\n style=\"width: 100%; height: calc(100vh - 120px)\"\r\n \r\n -->\r\n\r\n <div class=\"toolbar\" (mousedown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\">\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Editor setting\" (click)=\"settingVisible = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon>\r\n </button>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Infomation\" (click)=\"infoVisible = true\">\r\n <nz-icon nzType=\"info-circle\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Template setting\" (click)=\"drawTemplateVisibel = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon> T\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nzDanger [nzLoading]=\"!ready\" nz-tooltip=\"Save (Ctrl + S)\" (click)=\"save()\">\r\n <nz-icon nzType=\"save\"></nz-icon>\r\n </button>\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Add stage\" (click)=\"addStage()\">\r\n <nz-icon nzType=\"plus\" class=\"color-primary\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Move mode\"\r\n (click)=\"isMoveMode = true\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/hand-palm.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"!isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Select mode\"\r\n (click)=\"isMoveMode = false\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/cursor.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- UNDO / REDO -->\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"undoStack.length === 0\"\r\n nz-tooltip=\"Undo\"\r\n (click)=\"undo()\"\r\n >\r\n <nz-icon nzType=\"undo\"></nz-icon>\r\n </button>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"redoStack.length === 0\"\r\n nz-tooltip=\"Redo\"\r\n (click)=\"redo()\"\r\n >\r\n <nz-icon nzType=\"redo\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- ALIGN -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignLeft()\">\u27F8</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignCenter()\">\u2261</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignRight()\">\u27F9</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignTop()\">\u21D1</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignMiddle()\">\u2550</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignBottom()\">\u21D3</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <!-- DISTRIBUTE -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeHorizontal()\">\r\n \u21C4\r\n </button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeVertical()\">\u21C5</button>\r\n </div>\r\n\r\n <div\r\n class=\"canvas-content\"\r\n [class.panning]=\"isMoveMode\"\r\n [style.transform]=\"'translate(' + template.editorOption.panX + 'px,' + template.editorOption.panY + 'px)'\"\r\n >\r\n <!-- GRID -->\r\n <div *ngIf=\"wfcSetting.ShowGrid\" class=\"grid-layer\"></div>\r\n\r\n <!-- <div class=\"zoom-toolbar\">\r\n <button nz-button nzSize=\"small\" (click)=\"zoomOut()\">\u2212</button>\r\n <span>{{ zoom * 100 | number: \"1.0-0\" }}%</span>\r\n <button nz-button nzSize=\"small\" (click)=\"zoomIn()\">+</button>\r\n </div> -->\r\n\r\n <!-- SVG EDGES -->\r\n <svg #svg class=\"edges-layer\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\r\n <g [attr.transform]=\"svgTransform\">\r\n <!-- DEFS -->\r\n <defs>\r\n <!-- glow effect -->\r\n <filter id=\"edge-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feGaussianBlur stdDeviation=\"2\" result=\"blur\" />\r\n <feMerge>\r\n <feMergeNode in=\"blur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n\r\n <!-- arrow markers -->\r\n <marker\r\n id=\"arrow-blue\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-blue-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n </defs>\r\n\r\n <!-- EDGES B\u00CCNH TH\u01AF\u1EDCNG -->\r\n <ng-container *ngFor=\"let e of normalEdges; let i = index\">\r\n <path\r\n class=\"edge\"\r\n [attr.id]=\"'edge-path-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-blue)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-blue-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseenter)=\"onMouseEnterEdge(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- text b\u00E1m theo line -->\r\n <!-- \r\n <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text> \r\n \r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text>\r\n -->\r\n\r\n <!-- text th\u1EB3ng n\u1EB1m ngang -->\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- EDGE \u0110ANG HOVER (LU\u00D4N TR\u00CAN C\u00D9NG) -->\r\n <ng-container *ngFor=\"let e of hoverEdges; let i = index\">\r\n <path\r\n class=\"edge red\"\r\n [attr.id]=\"'edge-path-hover-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-red)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-red-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text>\r\n\r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text> -->\r\n\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- preview -->\r\n <path\r\n *ngIf=\"connectingFrom\"\r\n class=\"edge\"\r\n [attr.d]=\"buildPreviewPath()\"\r\n stroke-dasharray=\"5,5\"\r\n marker-end=\"url(#arrow-blue)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n\r\n <div\r\n *ngIf=\"isSelecting && selectStart && selectEnd\"\r\n class=\"selection-box\"\r\n [style.left.px]=\"Math.min(selectStart.x, selectEnd.x)\"\r\n [style.top.px]=\"Math.min(selectStart.y, selectEnd.y)\"\r\n [style.width.px]=\"Math.abs(selectEnd.x - selectStart.x)\"\r\n [style.height.px]=\"Math.abs(selectEnd.y - selectStart.y)\"\r\n ></div>\r\n\r\n <!-- lstStage -->\r\n @for (n of lstStage; track $index) {\r\n <!-- START NODE -->\r\n @if (n.StageType === \"_start_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-start\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'green'\"> START </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right connector-start\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-right connector-start reverse\"\r\n (click)=\"onClickConnector($event, n, 'right')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n }\r\n <!-- END NODE -->\r\n @else if (n.StageType === \"_end_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-end\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'red'\"> END </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left connector-end\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-left connector-end reverse\"\r\n (click)=\"onClickConnector($event, n, 'left')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n } @else {\r\n <nz-card\r\n class=\"workflow-node\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <div class=\"title\">{{ n.Code }}</div>\r\n\r\n <div>{{ n.Name }}</div>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div class=\"connector connector-right reverse\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n <div class=\"connector connector-left reverse\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n }\r\n </nz-card>\r\n }\r\n }\r\n\r\n <!-- POINTS -->\r\n @for (p of connectingPoints; track $index) {\r\n @if (p != draggingPoint) {\r\n <div\r\n class=\"waypoint\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n (contextmenu)=\"onRightClickPoint($event, hoverAction!, $index)\"\r\n ></div>\r\n } @else {\r\n <div\r\n class=\"waypoint dragging\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- drawer TEMPLATE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawTemplateTitle\"\r\n nzPlacement=\"right\"\r\n [nzWidth]=\"500\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"drawTemplateVisibel\"\r\n [nzFooter]=\"footerTplTemplate\"\r\n (nzOnClose)=\"drawTemplateVisibel = false\"\r\n>\r\n <ng-template #drawTemplateTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Template </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <extend-select\r\n [label]=\"'Org'\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Name', 'Code']\"\r\n [(_ngModel)]=\"template.App_Org_Id\"\r\n ></extend-select>\r\n <extend-input [label]=\"'Code'\" [(_ngModel)]=\"template.Code\"></extend-input>\r\n <extend-input [label]=\"'Name'\" [(_ngModel)]=\"template.Name\"></extend-input>\r\n <extend-select\r\n [label]=\"'Type'\"\r\n [lstItem]=\"template.lstTemplateType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.DocType\"\r\n ></extend-select>\r\n <extend-textarea [label]=\"'Desscription'\" [(_ngModel)]=\"template.Description\"></extend-textarea>\r\n <extend-select\r\n [label]=\"'Print template'\"\r\n [lstItem]=\"template.lstTemplatePrint\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.TemplatePrint\"\r\n ></extend-select>\r\n <extend-select\r\n [label]=\"'Apply to'\"\r\n [lstItem]=\"template.lstApplyTo\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.ApplyTo\"\r\n ></extend-select>\r\n\r\n <extend-checkbox [label]=\"'Active'\" [(_ngModel)]=\"template.IsActive\"></extend-checkbox>\r\n <extend-checkbox [label]=\"'Use Allow back'\" [(_ngModel)]=\"template.editorOption.AllowbackInUse\"></extend-checkbox>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of getLstStage; track tag) {\r\n <div nz-col>\r\n <nz-tag (click)=\"hoverStage = tag\">\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstStageStatus; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableStageStatus(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseStageStatus(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputStageStatusVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputStageStatus()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputStageStatusElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputStageStatusCode\"\r\n (keydown.enter)=\"inputStageStatusNameElement.select()\"\r\n />\r\n <input\r\n #inputStageStatusNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputStageStatusName\"\r\n (blur)=\"handleInputStageStatusConfirm()\"\r\n (keydown.enter)=\"handleInputStageStatusConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action type</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionType; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionType(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseActionType(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputActionTypeVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputActionType()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputActionTypeElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputActionTypeCode\"\r\n (keydown.enter)=\"inputActionTypeNameElement.select()\"\r\n />\r\n <input\r\n #inputActionTypeNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputActionTypeName\"\r\n (blur)=\"handleInputActionTypeConfirm()\"\r\n (keydown.enter)=\"handleInputActionTypeConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionStatus; track tag) {\r\n <div nz-col>\r\n @if (template.editingActionStatus != tag) {\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionStatus(tag.Code) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleClose(tag.Code)\"\r\n (click)=\"template.editingActionStatus = checkRemoveableActionStatus(tag.Code) ? tag : undefined\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n } @else {\r\n <input\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n [appAutoFocus]=\"true\"\r\n [(ngModel)]=\"tag.Code\"\r\n (blur)=\"template.editingActionStatus = undefined\"\r\n (keydown.enter)=\"template.editingActionStatus = undefined\"\r\n />&nbsp;&nbsp;\r\n }\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInput()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action status\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"+ New Action status\"\r\n [(ngModel)]=\"inputValue\"\r\n (blur)=\"handleInputConfirm()\"\r\n (keydown.enter)=\"handleInputConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #footerTplTemplate>\r\n <div nz-flex [nzGap]=\"6\" [nzJustify]=\"'end'\">\r\n <button nz-button nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"drawTemplateVisibel = false\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer STAGE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleStage\"\r\n [nzPlacement]=\"selectedStage?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzVisible]=\"!!selectedStage\"\r\n [nzWidth]=\"'calc(50vw)'\"\r\n [nzClosable]=\"false\"\r\n [nzFooter]=\"footerTplNode\"\r\n (nzOnClose)=\"selectedStage = undefined\"\r\n>\r\n <ng-template #drawerTitleStage>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedStage && selectedStage.editorOption) {\r\n @if (selectedStage.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n STAGE\r\n } @else {\r\n STAGE\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedStage\">\r\n <nz-radio-group [(ngModel)]=\"selectedStage.StageType\">\r\n <label nz-radio nzValue=\"_start_\">UI start</label>\r\n <label nz-radio nzValue=\"_end_\">UI end</label>\r\n <label nz-radio nzValue=\"start\">START</label>\r\n <label nz-radio nzValue=\"node\">NODE</label>\r\n <label nz-radio nzValue=\"end\">END</label>\r\n </nz-radio-group>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Code'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Code\"\r\n ></extend-input>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Name'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Name\"\r\n ></extend-input>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Sequence'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedStage.SeqValue\"\r\n ></extend-input-number>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Org implement'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedStage.App_Org_Id\"\r\n ></extend-select>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Number of Days'\"\r\n [floatingLabel]=\"true\"\r\n [precision]=\"1\"\r\n [(_ngModel)]=\"selectedStage.NumberDay\"\r\n ></extend-input-number>\r\n </div>\r\n\r\n @if (selectedStage.editorOption) {\r\n @if ([\"start\", \"node\", \"end\"].includes(selectedStage.StageType.toLowerCase())) {\r\n <extend-checkbox\r\n [label]=\"'Reverse'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.editorOption.isReverse\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <extend-checkbox\r\n [label]=\"'Require user action'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.IsRequireUser\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;List Action</h3>\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"addAction()\">\r\n <nz-icon nzType=\"plus\"></nz-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <nz-table nzSize=\"small\" [nzData]=\"lstActionOfCurrentStage\" [nzShowPagination]=\"false\" [nzNoResult]=\"'&nbsp;'\">\r\n <thead>\r\n <tr [hidden]=\"true\">\r\n <th nzWidth=\"40px\"></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (action of lstActionOfCurrentStage; track $index) {\r\n <tr (click)=\"onclickaction(action)\">\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-left': action == hoverAction ? 'solid 4px orange' : '',\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n ({{ $index + 1 }})\r\n <nz-icon\r\n nzType=\"delete\"\r\n nzTheme=\"outline\"\r\n class=\"color-warn cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); deleteAction(action)\"\r\n ></nz-icon>\r\n </td>\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\" class=\"has-floating-label floating-label\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"z-index: 2\">\r\n <label>Action status</label>\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"action.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(action.ActionStatus)\"\r\n (blur)=\"onenterAotu(action.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"action.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(action)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"getlstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(action)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Process status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstProcessStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.DocProcessStatus\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Role</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstRole\"\r\n [valueField]=\"'App_Role_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstRoleId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Email action</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailAction\"\r\n [valueField]=\"'ID'\"\r\n [displayField]=\"'Name'\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstEmailActionId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>Email template</div>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>\r\n <div nz-col nzSpan=\"1\"></div>\r\n <div nz-col nzSpan=\"23\" class=\"form-item-no-bottom\" style=\"font-weight: normal\">\r\n @for (actionRef of lstActionRefOf(action); track $index) {\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [labelSpan]=\"12\"\r\n [size]=\"'small'\"\r\n [label]=\"emailActionText(actionRef.To_WF_TemplateStageAction_Id)\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"actionRef.TemplateMail\"\r\n ></extend-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"8\">\r\n Action rule\r\n <button nz-button nzType=\"text\" nzSize=\"small\" (click)=\"actionRuleModalVisible = true\">\r\n <nz-icon nzType=\"export\" nzTheme=\"outline\" class=\"color-primary\" />\r\n </button>\r\n <button\r\n *ngIf=\"action.WF_TransitionsRule_Id\"\r\n nz-button\r\n nzType=\"text\"\r\n nzSize=\"small\"\r\n (click)=\"deleteActionRule(action)\"\r\n >\r\n <nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn\" />\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n\r\n <box [height]=\"16\"></box>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footerTplNode>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"\r\n selectedStage && selectedStage.editorOption && selectedStage.editorOption.drawerPosition == 'left'\r\n ? 'start'\r\n : 'end'\r\n \"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"selectedStage = undefined\">Close</button>\r\n <button\r\n *ngIf=\"selectedStage && ['START', 'END'].indexOf(selectedStage.StageType) < 0\"\r\n nz-button\r\n nzDanger\r\n (click)=\"deleteStage()\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer ACTION -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleAction\"\r\n nzTitle=\"ACTION\"\r\n [nzPlacement]=\"selectedAction?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzClosable]=\"false\"\r\n [nzWidth]=\"750\"\r\n [nzVisible]=\"!!selectedAction\"\r\n [nzFooter]=\"footerTplAction\"\r\n (nzOnClose)=\"selectedAction = undefined\"\r\n>\r\n <ng-template #drawerTitleAction>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedAction && selectedAction.editorOption) {\r\n @if (selectedAction.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n ACTION\r\n } @else {\r\n ACTION\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedAction\">\r\n <div>\r\n <strong\r\n >{{ selectedAction.getFromStageCode(lstStage) }} -> {{ selectedAction.getToStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getFromStageName(lstStage) }} -> {{ selectedAction.getToStageName(lstStage) }}</div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n\r\n <!-- <box [height]=\"16\"></box> -->\r\n <nz-divider></nz-divider>\r\n\r\n @if (template.editorOption.AllowbackInUse) {\r\n <extend-checkbox\r\n [label]=\"'Allow back'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedAction.allowBack\"\r\n (_ngModelChange)=\"onchangeAllowBack(selectedAction)\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n @if (selectedAction.allowBack) {\r\n <div>\r\n <strong\r\n >{{ selectedAction.getToStageCode(lstStage) }} -> {{ selectedAction.getFromStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getToStageName(lstStage) }} -> {{ selectedAction.getFromStageName(lstStage) }}</div>\r\n\r\n @if (selectedBackAction) {\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedBackAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedBackAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedBackAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedBackAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n }\r\n }\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #footerTplAction>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"selectedAction && selectedAction.editorOption.drawerPosition == 'left' ? 'start' : 'end'\"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button nzDanger (click)=\"deleteAction(selectedAction!)\">Delete</button>\r\n <button nz-button (click)=\"selectedAction = undefined\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- setting editor -->\r\n<nz-drawer\r\n [nzTitle]=\"drawSettingTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"settingVisible\"\r\n (nzOnClose)=\"settingVisible = false\"\r\n>\r\n <ng-template #drawSettingTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Editor </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <div class=\"form-item-no-bottom\">\r\n <extend-checkbox [label]=\"'Show grid'\" [labelSpan]=\"0\" [(_ngModel)]=\"wfcSetting.ShowGrid\"></extend-checkbox>\r\n\r\n <box [height]=\"16\"></box>\r\n </div>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- editor infomation -->\r\n<nz-drawer\r\n [nzTitle]=\"drawInfoTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"infoVisible\"\r\n (nzOnClose)=\"infoVisible = false\"\r\n>\r\n <ng-template #drawInfoTitle> <nz-icon nzType=\"info-circle\"></nz-icon> &nbsp; Infomation </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <p>1. C\u00E1c th\u00E0nh ph\u1EA7n: Stage or Node (stag, node quy tr\u00ECnh), Action or Connector (\u0111\u01B0\u1EDDng n\u1ED1i gi\u1EEFa c\u00E1c stage)</p>\r\n <p>2. Save \u0111\u1EC3 load c\u00E1c th\u00F4ng tin: Stage status, Action type</p>\r\n <p>\r\n 3. N\u1ED1i 2 node (t\u1EA1o connector t\u01B0\u01A1ng \u0111\u01B0\u01A1ng t\u1EA1o action):\r\n <br />- Click ch\u1EA5m cam t\u1EEB Node ngu\u1ED3n \u0111\u1EBFn ch\u1EA5m xanh c\u1EE7a Node \u0111\u00EDch (ho\u1EB7c click v\u00E0o Node \u0111\u00EDch), c\u00F3 th\u1EC3 click th\u00E0nh\r\n nhi\u1EC1u \u0111i\u1EC3m \u0111\u1EC3 t\u1EA1o \u0111\u01B0\u1EDDng n\u1ED1i cong<br />- Khi hover connector chuy\u1EC3n sang m\u1EA7u \u0111\u1ECF c\u00F3 th\u1EC3 click \u0111\u00FAp \u0111\u1EC3 th\u00EAm m\u1ED9t \u0111i\u1EC3m\r\n c\u1EE7a connector<br />- Khi hover l\u00EAn \u0111i\u1EC3m c\u1EE7a connector c\u00F3 th\u1EC3 di chuy\u1EC3n \u0111i\u1EC3m \u0111\u00F3 b\u1EB1ng c\u00E1ch nh\u1EA5n gi\u1EEF chu\u1ED9t v\u00E0 k\u00E9o th\u1EA3\r\n \u0111\u1EBFn v\u1ECB tr\u00ED m\u1EDBi<br />- Chu\u1ED9t ph\u1EA3i v\u00E0o \u0111i\u1EC3m n\u1ED1i connector \u0111\u1EC3 xo\u00E1 \u0111i\u1EC3m \u0111\u00F3\r\n </p>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- action rule modal -->\r\n<nz-modal\r\n [(nzVisible)]=\"actionRuleModalVisible\"\r\n [nzMaskClosable]=\"false\"\r\n [nzClosable]=\"false\"\r\n [nzKeyboard]=\"true\"\r\n [nzWidth]=\"'90vw'\"\r\n>\r\n <ng-container *nzModalTitle>\r\n ACTION RULE: [{{ selectedStage?.Code }}] {{ selectedStage?.Name }} > [{{ hoverAction?.ActionStatus }}]\r\n {{ hoverAction?.ActionText }}\r\n </ng-container>\r\n <ng-container *nzModalContent>\r\n @if (hoverAction && hoverAction.actionRule) {\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Code'\" [(_ngModel)]=\"hoverAction.actionRule.Code\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Name'\" [(_ngModel)]=\"hoverAction.actionRule.Name\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Note'\" [(_ngModel)]=\"hoverAction.actionRule.Note\"></extend-input>\r\n <extend-checkbox\r\n nz-col\r\n nzSpan=\"12\"\r\n [label]=\"'IsActive'\"\r\n [(_ngModel)]=\"hoverAction.actionRule.IsActive\"\r\n ></extend-checkbox>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table nzSize=\"small\" [nzData]=\"hoverAction.actionRule.lstLine\" [nzShowPagination]=\"false\">\r\n <thead>\r\n <tr>\r\n <th [nzWidth]=\"'40px'\"><icon-add (click)=\"addActionRuleLine()\"></icon-add></th>\r\n <th [nzWidth]=\"'150px'\">Rule type</th>\r\n <th>Template</th>\r\n <th>Template stage</th>\r\n <th>Template action</th>\r\n <th>Store to exec</th>\r\n <th>Email template</th>\r\n <th>Email to</th>\r\n <th [nzWidth]=\"'50px'\">Active</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of hoverAction.actionRule.lstLine; track $index) {\r\n <tr>\r\n <td><icon-delete (click)=\"deleteActionRuleLine(hoverAction.actionRule, item)\"></icon-delete></td>\r\n <td>\r\n <dic-domain-select\r\n [size]=\"'small'\"\r\n [DomainCode]=\"'WF_RuleType'\"\r\n [(_ngModel)]=\"item.RuleType\"\r\n ></dic-domain-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #xxx\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstTemplateForRule(item)\"\r\n [valueField]=\"'WF_Template_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_Template_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStage_Id = 0; item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #yyy\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstStageForRule(xxx._ngModel)\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstActionForRule(yyy._ngModel)\"\r\n [valueField]=\"'WF_TemplateStageAction_Id'\"\r\n [displayFields]=\"['ActionStatus', 'ActionText']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStageAction_Id\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"item.StoreToExec\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'App_MailTemplate_Id'\"\r\n [displayField]=\"'Code'\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.App_MailTemplate_Id\"\r\n ></extend-select>\r\n </td>\r\n <td class=\"form-item-no-bottom\">\r\n <extend-textarea [size]=\"'small'\" [minRows]=\"1\" [(_ngModel)]=\"item.EmailTo\"></extend-textarea>\r\n </td>\r\n <td class=\"text-center form-item-no-bottom\">\r\n <extend-checkbox [(_ngModel)]=\"item.IsActive\"></extend-checkbox>\r\n </td>\r\n <td>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"checkAction(item)\">Check</button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button nzType=\"primary\" (click)=\"checkAllAction()\">OK</button>\r\n </ng-container>\r\n</nz-modal>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .workflow-wrapper{border:solid 1px lightgray;overflow:hidden;width:100%}.workflow-canvas{position:relative;background:#f0f2f5;cursor:default;overflow:hidden;outline:1px dashed rgba(0,0,0,.1)}.workflow-canvas .edges-layer{position:absolute;inset:0;width:100%;height:100%;z-index:1}.workflow-canvas .edges-layer path{stroke-width:2;fill:none}.canvas-content{transform-origin:0 0;width:100%;height:100%}.canvas-content{outline:1px dashed red}.canvas-content.panning{cursor:grab}.canvas-content.panning:active{cursor:grabbing}.workflow-canvas.panning{cursor:grab}.workflow-canvas.panning:active{cursor:grabbing}.workflow-canvas.connecting,.workflow-canvas.connecting .workflow-node{cursor:crosshair}.workflow-node{position:absolute;width:160px;cursor:grab;-webkit-user-select:none;user-select:none;z-index:2}.workflow-node:active{cursor:grabbing}.workflow-node.connecting-source,.workflow-node.selected,.workflow-node:hover:not(.workflow-node-start,.workflow-node-end){outline:2px dashed #1890ff}.workflow-node .title{font-weight:600;margin-bottom:6px}.workflow-node-start{width:0px}.workflow-node-start.connecting-source,.workflow-node-start.selected,.workflow-node-start:hover{outline:unset}.workflow-node-start.connecting-source nz-tag,.workflow-node-start.selected nz-tag,.workflow-node-start:hover nz-tag{outline:2px dashed}.workflow-node-start nz-tag{position:relative;top:45px;right:35px}.workflow-node-end{width:0px}.workflow-node-end.connecting-source,.workflow-node-end.selected,.workflow-node-end:hover{outline:unset}.workflow-node-end.connecting-source nz-tag,.workflow-node-end.selected nz-tag,.workflow-node-end:hover nz-tag{outline:2px dashed}.workflow-node-end nz-tag{position:relative;top:45px;right:32px}.connector{position:absolute;top:39px;width:12px;height:12px;background:#1890ff;border-radius:50%;transform:translateY(-50%);cursor:crosshair;transition:box-shadow .15s ease-out,transform .15s ease-out}.connector:hover{box-shadow:0 0 0 3px #1890ff4d;transform:translateY(-50%) scale(1.15)}.connector-right{right:-8px;background:orange}.connector-right.reverse,.connector-left{left:-8px}.connector-left.reverse{left:unset;right:-8px}.connector-start{width:16px;height:16px;right:-8px;background:green;box-shadow:0 0 0 3px #1890ff4d}.connector-end{width:16px;height:16px;left:-8px;background:#000;box-shadow:0 0 0 3px #1890ff4d}.edge{cursor:pointer;stroke:#1890ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;fill:none;transition:stroke .15s ease}.edge-hit{stroke:transparent;stroke-width:18px!important;fill:none;cursor:pointer}.edge-hit:hover+.edge{stroke:#ff4d4f;stroke-width:2}.workflow-canvas.dragging-point .edge-hit{pointer-events:none}.edge:hover+.edge-label{fill:#1890ff;font-weight:500}.edge-label{font-size:12px;fill:#555;pointer-events:none;-webkit-user-select:none;user-select:none}.blue{stroke:#1890ff!important}.red{stroke:#ff4d4f!important;box-shadow:0 0 0 3px #1890ff4d!important}.workflow-svg{background:transparent;overflow:visible}.waypoint{position:absolute;width:10px;height:10px;background:#ff4d4f;border-radius:50%;transform:translate(-50%,-50%) scale(1);cursor:move;z-index:1;transition:transform .12s ease-out,background-color .12s ease-out,box-shadow .12s ease-out}.waypoint:hover{background:#ff7875;transform:translate(-50%,-50%) scale(1.25);box-shadow:0 0 0 4px #ff787559}.waypoint.dragging{transition:none;transform:translate(-50%,-50%) scale(1.15);pointer-events:none}.workflow-canvas.dragging-point svg{cursor:grabbing}.selection-box{position:absolute;border:1px dashed #1890ff;background:#1890ff1a;pointer-events:none}.toolbar{position:absolute;top:8px;left:8px;display:flex;gap:4px;padding:6px;background:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;z-index:100}.toolbar .divider{width:1px;background:#e5e5e5;margin:0 2px}.zoom-toolbar{position:absolute;top:8px;left:8px;z-index:10;display:flex;align-items:center;gap:6px;background:#fff;padding:4px 6px;border-radius:6px;box-shadow:0 2px 6px #00000026}.zoom-toolbar span{min-width:40px;text-align:center;font-size:12px}nz-tag.selected{outline:2px dashed #1890ff}.grid-layer{position:absolute;inset:0;pointer-events:none;z-index:0;background-image:radial-gradient(rgba(0,0,0,.08) 1px,transparent 1px);background-size:20px 20px}.grid-layer{background-image:linear-gradient(to right,rgba(0,0,0,.06) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.06) 1px,transparent 1px);background-size:20px 20px}.editable-tag{background:#fff;border-style:dashed}::ng-deep .minimap{position:absolute;width:180px;height:125px;top:0;right:0;background-color:#eee;border:1px solid #aaa;opacity:.9;z-index:1}::ng-deep .minimap-node{position:absolute;background-color:#607a86}::ng-deep .minimap-node-round{position:absolute;background-color:#607a86;border-radius:10px}::ng-deep .minimap-node-round-start{background-color:green}::ng-deep .minimap-node-round-end{background-color:#000}::ng-deep .minimap-viewport{position:absolute;box-sizing:border-box;background-color:#4f6f7e66;z-index:1;cursor:move}::ng-deep .has-floating-label.floating-label{position:relative;padding-top:14px}::ng-deep .has-floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:16px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .has-floating-label nz-form-item nz-form-label label{font-size:12px;color:var(--darkgray, #565656);font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .has-floating-label .full-width{width:100%}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 60%,#f5f5f5 50%)}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzCardModule }, { kind: "component", type: i3$5.NzCardComponent, selector: "nz-card", inputs: ["nzBordered", "nzLoading", "nzHoverable", "nzBodyStyle", "nzCover", "nzActions", "nzType", "nzSize", "nzTitle", "nzExtra"], exportAs: ["nzCard"] }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i4$2.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i4$2.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: NzTagModule }, { kind: "component", type: i7.NzTagComponent, selector: "nz-tag", inputs: ["nzMode", "nzColor", "nzChecked", "nzBordered"], outputs: ["nzOnClose", "nzCheckedChange"], exportAs: ["nzTag"] }, { kind: "ngmodule", type: NzRadioModule }, { kind: "component", type: i6$4.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus", "nz-radio-button"], exportAs: ["nzRadio"] }, { kind: "component", type: i6$4.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendSelectComponent, selector: "extend-select", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "dropdownMatchSelectWidth", "labelSpan", "labelFlex", "disabled", "required", "noBottom", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "displayFields", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "itemChange", "onFocus"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "formItemNoButtom", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isTouched", "inputErrorMessage", "errorMessages"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i5$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i5$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzDividerModule }, { kind: "component", type: i8$1.NzDividerComponent, selector: "nz-divider", inputs: ["nzText", "nzType", "nzOrientation", "nzVariant", "nzDashed", "nzPlain"], exportAs: ["nzDivider"] }, { kind: "directive", type: AutoFocusDirective, selector: "[appAutoFocus]", inputs: ["appAutoFocus"] }, { kind: "ngmodule", type: NzAutocompleteModule }, { kind: "component", type: i16$1.NzAutocompleteComponent, selector: "nz-autocomplete", inputs: ["nzWidth", "nzOverlayClassName", "nzOverlayStyle", "nzDefaultActiveFirstOption", "nzBackfill", "compareWith", "nzDataSource"], outputs: ["selectionChange"], exportAs: ["nzAutocomplete"] }, { kind: "component", type: i16$1.NzAutocompleteOptionComponent, selector: "nz-auto-option", inputs: ["nzValue", "nzLabel", "nzDisabled"], outputs: ["selectionChange", "mouseEntered"], exportAs: ["nzAutoOption"] }, { kind: "directive", type: i16$1.NzAutocompleteTriggerDirective, selector: "input[nzAutocomplete], textarea[nzAutocomplete]", inputs: ["nzAutocomplete"], exportAs: ["nzAutocompleteTrigger"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: NzModalTitleDirective, selector: "[nzModalTitle]", exportAs: ["nzModalTitle"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "directive", type: NzModalFooterDirective, selector: "[nzModalFooter]", exportAs: ["nzModalFooter"] }, { kind: "component", type: DicDomainSelectComponent$1, selector: "dic-domain-select", inputs: ["layOutType", "label", "placeHolder", "labelSpan", "labelAlign", "disabled", "required", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "size", "borderBottomOnly", "defaultFirstItem", "floatingLabel", "DomainCode", "ParentItemCode", "_ngModel", "formData", "controlName"], outputs: ["_ngModelChange"] }] });
12356
12421
  }
12357
12422
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WorkflowEditorComponent, decorators: [{
12358
12423
  type: Component,
@@ -12386,7 +12451,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
12386
12451
  IconAdd,
12387
12452
  NzModalFooterDirective,
12388
12453
  DicDomainSelectComponent$1,
12389
- ], template: "<div\r\n #canvasRef\r\n class=\"workflow-canvas\"\r\n [class.connecting]=\"!!connectingFrom\"\r\n [class.dragging-point]=\"!!draggingPoint\"\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\"\r\n (mousedown)=\"onMouseDownCanvas($event)\"\r\n (mousemove)=\"onMouseMoveCanvas($event)\"\r\n (mouseup)=\"onMouseUpCanvas($event)\"\r\n (click)=\"onClickCanvas($event)\"\r\n>\r\n <!-- \r\n\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\" \r\n\r\n [style.width.px]=\"CANVAS_WIDTH\"\r\n [style.height.px]=\"CANVAS_HEIGHT\"\r\n\r\n style=\"width: 100%; height: calc(100vh - 120px)\"\r\n \r\n -->\r\n\r\n <div class=\"toolbar\" (mousedown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\">\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Editor setting\" (click)=\"settingVisible = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon>\r\n </button>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Infomation\" (click)=\"infoVisible = true\">\r\n <nz-icon nzType=\"info-circle\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Template setting\" (click)=\"drawTemplateVisibel = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon> T\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nzDanger [nzLoading]=\"!ready\" nz-tooltip=\"Save (Ctrl + S)\" (click)=\"save()\">\r\n <nz-icon nzType=\"save\"></nz-icon>\r\n </button>\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Add stage\" (click)=\"addStage()\">\r\n <nz-icon nzType=\"plus\" class=\"color-primary\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Move mode\"\r\n (click)=\"isMoveMode = true\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/hand-palm.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"!isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Select mode\"\r\n (click)=\"isMoveMode = false\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/cursor.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- UNDO / REDO -->\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"undoStack.length === 0\"\r\n nz-tooltip=\"Undo\"\r\n (click)=\"undo()\"\r\n >\r\n <nz-icon nzType=\"undo\"></nz-icon>\r\n </button>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"redoStack.length === 0\"\r\n nz-tooltip=\"Redo\"\r\n (click)=\"redo()\"\r\n >\r\n <nz-icon nzType=\"redo\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- ALIGN -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignLeft()\">\u27F8</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignCenter()\">\u2261</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignRight()\">\u27F9</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignTop()\">\u21D1</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignMiddle()\">\u2550</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignBottom()\">\u21D3</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <!-- DISTRIBUTE -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeHorizontal()\">\r\n \u21C4\r\n </button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeVertical()\">\u21C5</button>\r\n </div>\r\n\r\n <div\r\n class=\"canvas-content\"\r\n [class.panning]=\"isMoveMode\"\r\n [style.transform]=\"'translate(' + template.editorOption.panX + 'px,' + template.editorOption.panY + 'px)'\"\r\n >\r\n <!-- GRID -->\r\n <div *ngIf=\"wfcSetting.ShowGrid\" class=\"grid-layer\"></div>\r\n\r\n <!-- <div class=\"zoom-toolbar\">\r\n <button nz-button nzSize=\"small\" (click)=\"zoomOut()\">\u2212</button>\r\n <span>{{ zoom * 100 | number: \"1.0-0\" }}%</span>\r\n <button nz-button nzSize=\"small\" (click)=\"zoomIn()\">+</button>\r\n </div> -->\r\n\r\n <!-- SVG EDGES -->\r\n <svg #svg class=\"edges-layer\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\r\n <g [attr.transform]=\"svgTransform\">\r\n <!-- DEFS -->\r\n <defs>\r\n <!-- glow effect -->\r\n <filter id=\"edge-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feGaussianBlur stdDeviation=\"2\" result=\"blur\" />\r\n <feMerge>\r\n <feMergeNode in=\"blur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n\r\n <!-- arrow markers -->\r\n <marker\r\n id=\"arrow-blue\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-blue-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n </defs>\r\n\r\n <!-- EDGES B\u00CCNH TH\u01AF\u1EDCNG -->\r\n <ng-container *ngFor=\"let e of normalEdges; let i = index\">\r\n <path\r\n class=\"edge\"\r\n [attr.id]=\"'edge-path-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-blue)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-blue-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseenter)=\"onMouseEnterEdge(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- text b\u00E1m theo line -->\r\n <!-- \r\n <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text> \r\n \r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text>\r\n -->\r\n\r\n <!-- text th\u1EB3ng n\u1EB1m ngang -->\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- EDGE \u0110ANG HOVER (LU\u00D4N TR\u00CAN C\u00D9NG) -->\r\n <ng-container *ngFor=\"let e of hoverEdges; let i = index\">\r\n <path\r\n class=\"edge red\"\r\n [attr.id]=\"'edge-path-hover-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-red)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-red-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text>\r\n\r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text> -->\r\n\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- preview -->\r\n <path\r\n *ngIf=\"connectingFrom\"\r\n class=\"edge\"\r\n [attr.d]=\"buildPreviewPath()\"\r\n stroke-dasharray=\"5,5\"\r\n marker-end=\"url(#arrow-blue)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n\r\n <div\r\n *ngIf=\"isSelecting && selectStart && selectEnd\"\r\n class=\"selection-box\"\r\n [style.left.px]=\"Math.min(selectStart.x, selectEnd.x)\"\r\n [style.top.px]=\"Math.min(selectStart.y, selectEnd.y)\"\r\n [style.width.px]=\"Math.abs(selectEnd.x - selectStart.x)\"\r\n [style.height.px]=\"Math.abs(selectEnd.y - selectStart.y)\"\r\n ></div>\r\n\r\n <!-- lstStage -->\r\n @for (n of lstStage; track $index) {\r\n <!-- START NODE -->\r\n @if (n.StageType === \"_start_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-start\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'green'\"> START </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right connector-start\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-right connector-start reverse\"\r\n (click)=\"onClickConnector($event, n, 'right')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n }\r\n <!-- END NODE -->\r\n @else if (n.StageType === \"_end_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-end\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'red'\"> END </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left connector-end\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-left connector-end reverse\"\r\n (click)=\"onClickConnector($event, n, 'left')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n } @else {\r\n <nz-card\r\n class=\"workflow-node\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <div class=\"title\">{{ n.Code }}</div>\r\n\r\n <div>{{ n.Name }}</div>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div class=\"connector connector-right reverse\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n <div class=\"connector connector-left reverse\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n }\r\n </nz-card>\r\n }\r\n }\r\n\r\n <!-- POINTS -->\r\n @for (p of connectingPoints; track $index) {\r\n @if (p != draggingPoint) {\r\n <div\r\n class=\"waypoint\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n (contextmenu)=\"onRightClickPoint($event, hoverAction!, $index)\"\r\n ></div>\r\n } @else {\r\n <div\r\n class=\"waypoint dragging\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- drawer TEMPLATE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawTemplateTitle\"\r\n nzPlacement=\"right\"\r\n [nzWidth]=\"500\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"drawTemplateVisibel\"\r\n [nzFooter]=\"footerTplTemplate\"\r\n (nzOnClose)=\"drawTemplateVisibel = false\"\r\n>\r\n <ng-template #drawTemplateTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Template </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <extend-select\r\n [label]=\"'Org'\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Name', 'Code']\"\r\n [(_ngModel)]=\"template.App_Org_Id\"\r\n ></extend-select>\r\n <extend-input [label]=\"'Code'\" [(_ngModel)]=\"template.Code\"></extend-input>\r\n <extend-input [label]=\"'Name'\" [(_ngModel)]=\"template.Name\"></extend-input>\r\n <extend-select\r\n [label]=\"'Type'\"\r\n [lstItem]=\"template.lstTemplateType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.DocType\"\r\n ></extend-select>\r\n <extend-textarea [label]=\"'Desscription'\" [(_ngModel)]=\"template.Description\"></extend-textarea>\r\n <extend-select\r\n [label]=\"'Print template'\"\r\n [lstItem]=\"template.lstTemplatePrint\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.TemplatePrint\"\r\n ></extend-select>\r\n <extend-select\r\n [label]=\"'Apply to'\"\r\n [lstItem]=\"template.lstApplyTo\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.ApplyTo\"\r\n ></extend-select>\r\n\r\n <extend-checkbox [label]=\"'Active'\" [(_ngModel)]=\"template.IsActive\"></extend-checkbox>\r\n <extend-checkbox [label]=\"'Use Allow back'\" [(_ngModel)]=\"template.editorOption.AllowbackInUse\"></extend-checkbox>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of getLstStage; track tag) {\r\n <div nz-col>\r\n <nz-tag (click)=\"hoverStage = tag\">\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstStageStatus; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableStageStatus(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseStageStatus(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputStageStatusVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputStageStatus()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputStageStatusElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputStageStatusCode\"\r\n (keydown.enter)=\"inputStageStatusNameElement.select()\"\r\n />\r\n <input\r\n #inputStageStatusNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputStageStatusName\"\r\n (blur)=\"handleInputStageStatusConfirm()\"\r\n (keydown.enter)=\"handleInputStageStatusConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action type</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionType; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionType(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseActionType(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputActionTypeVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputActionType()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputActionTypeElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputActionTypeCode\"\r\n (keydown.enter)=\"inputActionTypeNameElement.select()\"\r\n />\r\n <input\r\n #inputActionTypeNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputActionTypeName\"\r\n (blur)=\"handleInputActionTypeConfirm()\"\r\n (keydown.enter)=\"handleInputActionTypeConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionStatus; track tag) {\r\n <div nz-col>\r\n @if (template.editingActionStatus != tag) {\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionStatus(tag.Code) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleClose(tag.Code)\"\r\n (click)=\"template.editingActionStatus = checkRemoveableActionStatus(tag.Code) ? tag : undefined\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n } @else {\r\n <input\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n [appAutoFocus]=\"true\"\r\n [(ngModel)]=\"tag.Code\"\r\n (blur)=\"template.editingActionStatus = undefined\"\r\n (keydown.enter)=\"template.editingActionStatus = undefined\"\r\n />&nbsp;&nbsp;\r\n }\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInput()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action status\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"+ New Action status\"\r\n [(ngModel)]=\"inputValue\"\r\n (blur)=\"handleInputConfirm()\"\r\n (keydown.enter)=\"handleInputConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #footerTplTemplate>\r\n <div nz-flex [nzGap]=\"6\" [nzJustify]=\"'end'\">\r\n <button nz-button nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"drawTemplateVisibel = false\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer STAGE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleStage\"\r\n [nzPlacement]=\"selectedStage?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzVisible]=\"!!selectedStage\"\r\n [nzWidth]=\"'calc(50vw)'\"\r\n [nzClosable]=\"false\"\r\n [nzFooter]=\"footerTplNode\"\r\n (nzOnClose)=\"selectedStage = undefined\"\r\n>\r\n <ng-template #drawerTitleStage>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedStage && selectedStage.editorOption) {\r\n @if (selectedStage.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n STAGE\r\n } @else {\r\n STAGE\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedStage\">\r\n <nz-radio-group [(ngModel)]=\"selectedStage.StageType\">\r\n <label nz-radio nzValue=\"_start_\">UI start</label>\r\n <label nz-radio nzValue=\"_end_\">UI end</label>\r\n <label nz-radio nzValue=\"start\">START</label>\r\n <label nz-radio nzValue=\"node\">NODE</label>\r\n <label nz-radio nzValue=\"end\">END</label>\r\n </nz-radio-group>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Code'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Code\"\r\n ></extend-input>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Name'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Name\"\r\n ></extend-input>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Sequence'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedStage.SeqValue\"\r\n ></extend-input-number>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Org implement'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedStage.App_Org_Id\"\r\n ></extend-select>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Number of Days'\"\r\n [floatingLabel]=\"true\"\r\n [precision]=\"1\"\r\n [(_ngModel)]=\"selectedStage.NumberDay\"\r\n ></extend-input-number>\r\n </div>\r\n\r\n @if (selectedStage.editorOption) {\r\n @if ([\"start\", \"node\", \"end\"].includes(selectedStage.StageType.toLowerCase())) {\r\n <extend-checkbox\r\n [label]=\"'Reverse'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.editorOption.isReverse\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <extend-checkbox\r\n [label]=\"'Require user action'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.IsRequireUser\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;List Action</h3>\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"addAction()\">\r\n <nz-icon nzType=\"plus\"></nz-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <nz-table nzSize=\"small\" [nzData]=\"lstActionOfCurrentStage\" [nzShowPagination]=\"false\" [nzNoResult]=\"'&nbsp;'\">\r\n <thead>\r\n <tr [hidden]=\"true\">\r\n <th nzWidth=\"40px\"></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (action of lstActionOfCurrentStage; track $index) {\r\n <tr (click)=\"onclickaction(action)\">\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-left': action == hoverAction ? 'solid 4px orange' : '',\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n ({{ $index + 1 }})\r\n <nz-icon\r\n nzType=\"delete\"\r\n nzTheme=\"outline\"\r\n class=\"color-warn cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); deleteAction(action)\"\r\n ></nz-icon>\r\n </td>\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\" class=\"has-floating-label floating-label\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"z-index: 2\">\r\n <label>Action status</label>\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"action.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(action.ActionStatus)\"\r\n (blur)=\"onenterAotu(action.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"action.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(action)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"getlstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(action)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Process status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstProcessStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.DocProcessStatus\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Role</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstRole\"\r\n [valueField]=\"'App_Role_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstRoleId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Email action</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailAction\"\r\n [valueField]=\"'ID'\"\r\n [displayField]=\"'Name'\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstEmailActionId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>Email template</div>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>\r\n <div nz-col nzSpan=\"1\"></div>\r\n <div nz-col nzSpan=\"23\" class=\"form-item-no-bottom\" style=\"font-weight: normal\">\r\n @for (actionRef of lstActionRefOf(action); track $index) {\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [labelSpan]=\"12\"\r\n [size]=\"'small'\"\r\n [label]=\"emailActionText(actionRef.To_WF_TemplateStageAction_Id)\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"actionRef.TemplateMail\"\r\n ></extend-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"8\">\r\n Action rule\r\n <button nz-button nzType=\"text\" nzSize=\"small\" (click)=\"actionRuleModalVisible = true\">\r\n <nz-icon nzType=\"export\" nzTheme=\"outline\" class=\"color-primary\" />\r\n </button>\r\n <button\r\n *ngIf=\"action.WF_TransitionsRule_Id\"\r\n nz-button\r\n nzType=\"text\"\r\n nzSize=\"small\"\r\n (click)=\"deleteActionRule(action)\"\r\n >\r\n <nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn\" />\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n\r\n <box [height]=\"16\"></box>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footerTplNode>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"\r\n selectedStage && selectedStage.editorOption && selectedStage.editorOption.drawerPosition == 'left'\r\n ? 'start'\r\n : 'end'\r\n \"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"selectedStage = undefined\">Close</button>\r\n <button\r\n *ngIf=\"selectedStage && ['START', 'END'].indexOf(selectedStage.StageType) < 0\"\r\n nz-button\r\n nzDanger\r\n (click)=\"deleteStage()\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer ACTION -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleAction\"\r\n nzTitle=\"ACTION\"\r\n [nzPlacement]=\"selectedAction?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzClosable]=\"false\"\r\n [nzWidth]=\"750\"\r\n [nzVisible]=\"!!selectedAction\"\r\n [nzFooter]=\"footerTplAction\"\r\n (nzOnClose)=\"selectedAction = undefined\"\r\n>\r\n <ng-template #drawerTitleAction>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedAction && selectedAction.editorOption) {\r\n @if (selectedAction.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n ACTION\r\n } @else {\r\n ACTION\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedAction\">\r\n <div>\r\n <strong\r\n >{{ selectedAction.getFromStageCode(lstStage) }} -> {{ selectedAction.getToStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getFromStageName(lstStage) }} -> {{ selectedAction.getToStageName(lstStage) }}</div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n\r\n <!-- <box [height]=\"16\"></box> -->\r\n <nz-divider></nz-divider>\r\n\r\n @if (template.editorOption.AllowbackInUse) {\r\n <extend-checkbox\r\n [label]=\"'Allow back'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedAction.allowBack\"\r\n (_ngModelChange)=\"onchangeAllowBack(selectedAction)\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n @if (selectedAction.allowBack) {\r\n <div>\r\n <strong\r\n >{{ selectedAction.getToStageCode(lstStage) }} -> {{ selectedAction.getFromStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getToStageName(lstStage) }} -> {{ selectedAction.getFromStageName(lstStage) }}</div>\r\n\r\n @if (selectedBackAction) {\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedBackAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedBackAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedBackAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedBackAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n }\r\n }\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #footerTplAction>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"selectedAction && selectedAction.editorOption.drawerPosition == 'left' ? 'start' : 'end'\"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button nzDanger (click)=\"deleteAction(selectedAction!)\">Delete</button>\r\n <button nz-button (click)=\"selectedAction = undefined\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- setting editor -->\r\n<nz-drawer\r\n [nzTitle]=\"drawSettingTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"settingVisible\"\r\n (nzOnClose)=\"settingVisible = false\"\r\n>\r\n <ng-template #drawSettingTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Editor </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <div class=\"form-item-no-bottom\">\r\n <extend-checkbox [label]=\"'Show grid'\" [labelSpan]=\"0\" [(_ngModel)]=\"wfcSetting.ShowGrid\"></extend-checkbox>\r\n\r\n <box [height]=\"16\"></box>\r\n </div>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- editor infomation -->\r\n<nz-drawer\r\n [nzTitle]=\"drawInfoTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"infoVisible\"\r\n (nzOnClose)=\"infoVisible = false\"\r\n>\r\n <ng-template #drawInfoTitle> <nz-icon nzType=\"info-circle\"></nz-icon> &nbsp; Infomation </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <p>1. C\u00E1c th\u00E0nh ph\u1EA7n: Stage or Node (stag, node quy tr\u00ECnh), Action or Connector (\u0111\u01B0\u1EDDng n\u1ED1i gi\u1EEFa c\u00E1c stage)</p>\r\n <p>2. Save \u0111\u1EC3 load c\u00E1c th\u00F4ng tin: Stage status, Action type</p>\r\n <p>\r\n 3. N\u1ED1i 2 node (t\u1EA1o connector t\u01B0\u01A1ng \u0111\u01B0\u01A1ng t\u1EA1o action):\r\n <br />- Click ch\u1EA5m cam t\u1EEB Node ngu\u1ED3n \u0111\u1EBFn ch\u1EA5m xanh c\u1EE7a Node \u0111\u00EDch (ho\u1EB7c click v\u00E0o Node \u0111\u00EDch), c\u00F3 th\u1EC3 click th\u00E0nh\r\n nhi\u1EC1u \u0111i\u1EC3m \u0111\u1EC3 t\u1EA1o \u0111\u01B0\u1EDDng n\u1ED1i cong<br />- Khi hover connector chuy\u1EC3n sang m\u1EA7u \u0111\u1ECF c\u00F3 th\u1EC3 click \u0111\u00FAp \u0111\u1EC3 th\u00EAm m\u1ED9t \u0111i\u1EC3m\r\n c\u1EE7a connector<br />- Khi hover l\u00EAn \u0111i\u1EC3m c\u1EE7a connector c\u00F3 th\u1EC3 di chuy\u1EC3n \u0111i\u1EC3m \u0111\u00F3 b\u1EB1ng c\u00E1ch nh\u1EA5n gi\u1EEF chu\u1ED9t v\u00E0 k\u00E9o th\u1EA3\r\n \u0111\u1EBFn v\u1ECB tr\u00ED m\u1EDBi<br />- Chu\u1ED9t ph\u1EA3i v\u00E0o \u0111i\u1EC3m n\u1ED1i connector \u0111\u1EC3 xo\u00E1 \u0111i\u1EC3m \u0111\u00F3\r\n </p>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- action rule modal -->\r\n<nz-modal\r\n [(nzVisible)]=\"actionRuleModalVisible\"\r\n [nzMaskClosable]=\"false\"\r\n [nzClosable]=\"false\"\r\n [nzKeyboard]=\"true\"\r\n [nzWidth]=\"'75vw'\"\r\n>\r\n <ng-container *nzModalTitle>\r\n ACTION RULE: [{{ selectedStage?.Code }}] {{ selectedStage?.Name }} > [{{ hoverAction?.ActionStatus }}]\r\n {{ hoverAction?.ActionText }}\r\n </ng-container>\r\n <ng-container *nzModalContent>\r\n @if (hoverAction && hoverAction.actionRule) {\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Code'\" [(_ngModel)]=\"hoverAction.actionRule.Code\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Name'\" [(_ngModel)]=\"hoverAction.actionRule.Name\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Note'\" [(_ngModel)]=\"hoverAction.actionRule.Note\"></extend-input>\r\n <extend-checkbox\r\n nz-col\r\n nzSpan=\"12\"\r\n [label]=\"'IsActive'\"\r\n [(_ngModel)]=\"hoverAction.actionRule.IsActive\"\r\n ></extend-checkbox>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table nzSize=\"small\" [nzData]=\"hoverAction.actionRule.lstLine\" [nzShowPagination]=\"false\">\r\n <thead>\r\n <tr>\r\n <th [nzWidth]=\"'40px'\"><icon-add (click)=\"addActionRuleLine()\"></icon-add></th>\r\n <th [nzWidth]=\"'250px'\">Rule type</th>\r\n <th>Template</th>\r\n <th>Template stage</th>\r\n <th>Template action</th>\r\n <th>Store to exec</th>\r\n <th [nzWidth]=\"'50px'\">Active</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of hoverAction.actionRule.lstLine; track $index) {\r\n <tr>\r\n <td><icon-delete (click)=\"deleteActionRuleLine(hoverAction.actionRule, item)\"></icon-delete></td>\r\n <td>\r\n <dic-domain-select\r\n [size]=\"'small'\"\r\n [DomainCode]=\"'WF_RuleType'\"\r\n [(_ngModel)]=\"item.RuleType\"\r\n ></dic-domain-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #xxx\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstTemplateForRule(item)\"\r\n [valueField]=\"'WF_Template_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_Template_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStage_Id = 0; item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #yyy\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstStageForRule(xxx._ngModel)\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstActionForRule(yyy._ngModel)\"\r\n [valueField]=\"'WF_TemplateStageAction_Id'\"\r\n [displayFields]=\"['ActionStatus', 'ActionText']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStageAction_Id\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"item.StoreToExec\"></extend-input>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"item.IsActive\"></extend-checkbox>\r\n </td>\r\n <td>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"checkAction(item)\">Check</button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button nzType=\"primary\" (click)=\"checkAllAction()\">OK</button>\r\n </ng-container>\r\n</nz-modal>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .workflow-wrapper{border:solid 1px lightgray;overflow:hidden;width:100%}.workflow-canvas{position:relative;background:#f0f2f5;cursor:default;overflow:hidden;outline:1px dashed rgba(0,0,0,.1)}.workflow-canvas .edges-layer{position:absolute;inset:0;width:100%;height:100%;z-index:1}.workflow-canvas .edges-layer path{stroke-width:2;fill:none}.canvas-content{transform-origin:0 0;width:100%;height:100%}.canvas-content{outline:1px dashed red}.canvas-content.panning{cursor:grab}.canvas-content.panning:active{cursor:grabbing}.workflow-canvas.panning{cursor:grab}.workflow-canvas.panning:active{cursor:grabbing}.workflow-canvas.connecting,.workflow-canvas.connecting .workflow-node{cursor:crosshair}.workflow-node{position:absolute;width:160px;cursor:grab;-webkit-user-select:none;user-select:none;z-index:2}.workflow-node:active{cursor:grabbing}.workflow-node.connecting-source,.workflow-node.selected,.workflow-node:hover:not(.workflow-node-start,.workflow-node-end){outline:2px dashed #1890ff}.workflow-node .title{font-weight:600;margin-bottom:6px}.workflow-node-start{width:0px}.workflow-node-start.connecting-source,.workflow-node-start.selected,.workflow-node-start:hover{outline:unset}.workflow-node-start.connecting-source nz-tag,.workflow-node-start.selected nz-tag,.workflow-node-start:hover nz-tag{outline:2px dashed}.workflow-node-start nz-tag{position:relative;top:45px;right:35px}.workflow-node-end{width:0px}.workflow-node-end.connecting-source,.workflow-node-end.selected,.workflow-node-end:hover{outline:unset}.workflow-node-end.connecting-source nz-tag,.workflow-node-end.selected nz-tag,.workflow-node-end:hover nz-tag{outline:2px dashed}.workflow-node-end nz-tag{position:relative;top:45px;right:32px}.connector{position:absolute;top:39px;width:12px;height:12px;background:#1890ff;border-radius:50%;transform:translateY(-50%);cursor:crosshair;transition:box-shadow .15s ease-out,transform .15s ease-out}.connector:hover{box-shadow:0 0 0 3px #1890ff4d;transform:translateY(-50%) scale(1.15)}.connector-right{right:-8px;background:orange}.connector-right.reverse,.connector-left{left:-8px}.connector-left.reverse{left:unset;right:-8px}.connector-start{width:16px;height:16px;right:-8px;background:green;box-shadow:0 0 0 3px #1890ff4d}.connector-end{width:16px;height:16px;left:-8px;background:#000;box-shadow:0 0 0 3px #1890ff4d}.edge{cursor:pointer;stroke:#1890ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;fill:none;transition:stroke .15s ease}.edge-hit{stroke:transparent;stroke-width:18px!important;fill:none;cursor:pointer}.edge-hit:hover+.edge{stroke:#ff4d4f;stroke-width:2}.workflow-canvas.dragging-point .edge-hit{pointer-events:none}.edge:hover+.edge-label{fill:#1890ff;font-weight:500}.edge-label{font-size:12px;fill:#555;pointer-events:none;-webkit-user-select:none;user-select:none}.blue{stroke:#1890ff!important}.red{stroke:#ff4d4f!important;box-shadow:0 0 0 3px #1890ff4d!important}.workflow-svg{background:transparent;overflow:visible}.waypoint{position:absolute;width:10px;height:10px;background:#ff4d4f;border-radius:50%;transform:translate(-50%,-50%) scale(1);cursor:move;z-index:1;transition:transform .12s ease-out,background-color .12s ease-out,box-shadow .12s ease-out}.waypoint:hover{background:#ff7875;transform:translate(-50%,-50%) scale(1.25);box-shadow:0 0 0 4px #ff787559}.waypoint.dragging{transition:none;transform:translate(-50%,-50%) scale(1.15);pointer-events:none}.workflow-canvas.dragging-point svg{cursor:grabbing}.selection-box{position:absolute;border:1px dashed #1890ff;background:#1890ff1a;pointer-events:none}.toolbar{position:absolute;top:8px;left:8px;display:flex;gap:4px;padding:6px;background:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;z-index:100}.toolbar .divider{width:1px;background:#e5e5e5;margin:0 2px}.zoom-toolbar{position:absolute;top:8px;left:8px;z-index:10;display:flex;align-items:center;gap:6px;background:#fff;padding:4px 6px;border-radius:6px;box-shadow:0 2px 6px #00000026}.zoom-toolbar span{min-width:40px;text-align:center;font-size:12px}nz-tag.selected{outline:2px dashed #1890ff}.grid-layer{position:absolute;inset:0;pointer-events:none;z-index:0;background-image:radial-gradient(rgba(0,0,0,.08) 1px,transparent 1px);background-size:20px 20px}.grid-layer{background-image:linear-gradient(to right,rgba(0,0,0,.06) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.06) 1px,transparent 1px);background-size:20px 20px}.editable-tag{background:#fff;border-style:dashed}::ng-deep .minimap{position:absolute;width:180px;height:125px;top:0;right:0;background-color:#eee;border:1px solid #aaa;opacity:.9;z-index:1}::ng-deep .minimap-node{position:absolute;background-color:#607a86}::ng-deep .minimap-node-round{position:absolute;background-color:#607a86;border-radius:10px}::ng-deep .minimap-node-round-start{background-color:green}::ng-deep .minimap-node-round-end{background-color:#000}::ng-deep .minimap-viewport{position:absolute;box-sizing:border-box;background-color:#4f6f7e66;z-index:1;cursor:move}::ng-deep .has-floating-label.floating-label{position:relative;padding-top:14px}::ng-deep .has-floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:16px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .has-floating-label nz-form-item nz-form-label label{font-size:12px;color:var(--darkgray, #565656);font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .has-floating-label .full-width{width:100%}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 60%,#f5f5f5 50%)}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
12454
+ ], template: "<div\r\n #canvasRef\r\n class=\"workflow-canvas\"\r\n [class.connecting]=\"!!connectingFrom\"\r\n [class.dragging-point]=\"!!draggingPoint\"\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\"\r\n (mousedown)=\"onMouseDownCanvas($event)\"\r\n (mousemove)=\"onMouseMoveCanvas($event)\"\r\n (mouseup)=\"onMouseUpCanvas($event)\"\r\n (click)=\"onClickCanvas($event)\"\r\n>\r\n <!-- \r\n\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\" \r\n\r\n [style.width.px]=\"CANVAS_WIDTH\"\r\n [style.height.px]=\"CANVAS_HEIGHT\"\r\n\r\n style=\"width: 100%; height: calc(100vh - 120px)\"\r\n \r\n -->\r\n\r\n <div class=\"toolbar\" (mousedown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\">\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Editor setting\" (click)=\"settingVisible = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon>\r\n </button>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Infomation\" (click)=\"infoVisible = true\">\r\n <nz-icon nzType=\"info-circle\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Template setting\" (click)=\"drawTemplateVisibel = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon> T\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nzDanger [nzLoading]=\"!ready\" nz-tooltip=\"Save (Ctrl + S)\" (click)=\"save()\">\r\n <nz-icon nzType=\"save\"></nz-icon>\r\n </button>\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Add stage\" (click)=\"addStage()\">\r\n <nz-icon nzType=\"plus\" class=\"color-primary\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Move mode\"\r\n (click)=\"isMoveMode = true\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/hand-palm.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"!isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Select mode\"\r\n (click)=\"isMoveMode = false\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/cursor.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- UNDO / REDO -->\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"undoStack.length === 0\"\r\n nz-tooltip=\"Undo\"\r\n (click)=\"undo()\"\r\n >\r\n <nz-icon nzType=\"undo\"></nz-icon>\r\n </button>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"redoStack.length === 0\"\r\n nz-tooltip=\"Redo\"\r\n (click)=\"redo()\"\r\n >\r\n <nz-icon nzType=\"redo\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- ALIGN -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignLeft()\">\u27F8</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignCenter()\">\u2261</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignRight()\">\u27F9</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignTop()\">\u21D1</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignMiddle()\">\u2550</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignBottom()\">\u21D3</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <!-- DISTRIBUTE -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeHorizontal()\">\r\n \u21C4\r\n </button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeVertical()\">\u21C5</button>\r\n </div>\r\n\r\n <div\r\n class=\"canvas-content\"\r\n [class.panning]=\"isMoveMode\"\r\n [style.transform]=\"'translate(' + template.editorOption.panX + 'px,' + template.editorOption.panY + 'px)'\"\r\n >\r\n <!-- GRID -->\r\n <div *ngIf=\"wfcSetting.ShowGrid\" class=\"grid-layer\"></div>\r\n\r\n <!-- <div class=\"zoom-toolbar\">\r\n <button nz-button nzSize=\"small\" (click)=\"zoomOut()\">\u2212</button>\r\n <span>{{ zoom * 100 | number: \"1.0-0\" }}%</span>\r\n <button nz-button nzSize=\"small\" (click)=\"zoomIn()\">+</button>\r\n </div> -->\r\n\r\n <!-- SVG EDGES -->\r\n <svg #svg class=\"edges-layer\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\r\n <g [attr.transform]=\"svgTransform\">\r\n <!-- DEFS -->\r\n <defs>\r\n <!-- glow effect -->\r\n <filter id=\"edge-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feGaussianBlur stdDeviation=\"2\" result=\"blur\" />\r\n <feMerge>\r\n <feMergeNode in=\"blur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n\r\n <!-- arrow markers -->\r\n <marker\r\n id=\"arrow-blue\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-blue-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n </defs>\r\n\r\n <!-- EDGES B\u00CCNH TH\u01AF\u1EDCNG -->\r\n <ng-container *ngFor=\"let e of normalEdges; let i = index\">\r\n <path\r\n class=\"edge\"\r\n [attr.id]=\"'edge-path-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-blue)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-blue-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseenter)=\"onMouseEnterEdge(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- text b\u00E1m theo line -->\r\n <!-- \r\n <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text> \r\n \r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text>\r\n -->\r\n\r\n <!-- text th\u1EB3ng n\u1EB1m ngang -->\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- EDGE \u0110ANG HOVER (LU\u00D4N TR\u00CAN C\u00D9NG) -->\r\n <ng-container *ngFor=\"let e of hoverEdges; let i = index\">\r\n <path\r\n class=\"edge red\"\r\n [attr.id]=\"'edge-path-hover-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-red)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-red-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text>\r\n\r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text> -->\r\n\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- preview -->\r\n <path\r\n *ngIf=\"connectingFrom\"\r\n class=\"edge\"\r\n [attr.d]=\"buildPreviewPath()\"\r\n stroke-dasharray=\"5,5\"\r\n marker-end=\"url(#arrow-blue)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n\r\n <div\r\n *ngIf=\"isSelecting && selectStart && selectEnd\"\r\n class=\"selection-box\"\r\n [style.left.px]=\"Math.min(selectStart.x, selectEnd.x)\"\r\n [style.top.px]=\"Math.min(selectStart.y, selectEnd.y)\"\r\n [style.width.px]=\"Math.abs(selectEnd.x - selectStart.x)\"\r\n [style.height.px]=\"Math.abs(selectEnd.y - selectStart.y)\"\r\n ></div>\r\n\r\n <!-- lstStage -->\r\n @for (n of lstStage; track $index) {\r\n <!-- START NODE -->\r\n @if (n.StageType === \"_start_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-start\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'green'\"> START </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right connector-start\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-right connector-start reverse\"\r\n (click)=\"onClickConnector($event, n, 'right')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n }\r\n <!-- END NODE -->\r\n @else if (n.StageType === \"_end_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-end\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'red'\"> END </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left connector-end\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-left connector-end reverse\"\r\n (click)=\"onClickConnector($event, n, 'left')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n } @else {\r\n <nz-card\r\n class=\"workflow-node\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <div class=\"title\">{{ n.Code }}</div>\r\n\r\n <div>{{ n.Name }}</div>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div class=\"connector connector-right reverse\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n <div class=\"connector connector-left reverse\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n }\r\n </nz-card>\r\n }\r\n }\r\n\r\n <!-- POINTS -->\r\n @for (p of connectingPoints; track $index) {\r\n @if (p != draggingPoint) {\r\n <div\r\n class=\"waypoint\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n (contextmenu)=\"onRightClickPoint($event, hoverAction!, $index)\"\r\n ></div>\r\n } @else {\r\n <div\r\n class=\"waypoint dragging\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- drawer TEMPLATE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawTemplateTitle\"\r\n nzPlacement=\"right\"\r\n [nzWidth]=\"500\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"drawTemplateVisibel\"\r\n [nzFooter]=\"footerTplTemplate\"\r\n (nzOnClose)=\"drawTemplateVisibel = false\"\r\n>\r\n <ng-template #drawTemplateTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Template </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <extend-select\r\n [label]=\"'Org'\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Name', 'Code']\"\r\n [(_ngModel)]=\"template.App_Org_Id\"\r\n ></extend-select>\r\n <extend-input [label]=\"'Code'\" [(_ngModel)]=\"template.Code\"></extend-input>\r\n <extend-input [label]=\"'Name'\" [(_ngModel)]=\"template.Name\"></extend-input>\r\n <extend-select\r\n [label]=\"'Type'\"\r\n [lstItem]=\"template.lstTemplateType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.DocType\"\r\n ></extend-select>\r\n <extend-textarea [label]=\"'Desscription'\" [(_ngModel)]=\"template.Description\"></extend-textarea>\r\n <extend-select\r\n [label]=\"'Print template'\"\r\n [lstItem]=\"template.lstTemplatePrint\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.TemplatePrint\"\r\n ></extend-select>\r\n <extend-select\r\n [label]=\"'Apply to'\"\r\n [lstItem]=\"template.lstApplyTo\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.ApplyTo\"\r\n ></extend-select>\r\n\r\n <extend-checkbox [label]=\"'Active'\" [(_ngModel)]=\"template.IsActive\"></extend-checkbox>\r\n <extend-checkbox [label]=\"'Use Allow back'\" [(_ngModel)]=\"template.editorOption.AllowbackInUse\"></extend-checkbox>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of getLstStage; track tag) {\r\n <div nz-col>\r\n <nz-tag (click)=\"hoverStage = tag\">\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstStageStatus; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableStageStatus(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseStageStatus(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputStageStatusVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputStageStatus()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputStageStatusElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputStageStatusCode\"\r\n (keydown.enter)=\"inputStageStatusNameElement.select()\"\r\n />\r\n <input\r\n #inputStageStatusNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputStageStatusName\"\r\n (blur)=\"handleInputStageStatusConfirm()\"\r\n (keydown.enter)=\"handleInputStageStatusConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action type</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionType; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionType(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseActionType(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputActionTypeVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputActionType()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputActionTypeElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputActionTypeCode\"\r\n (keydown.enter)=\"inputActionTypeNameElement.select()\"\r\n />\r\n <input\r\n #inputActionTypeNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputActionTypeName\"\r\n (blur)=\"handleInputActionTypeConfirm()\"\r\n (keydown.enter)=\"handleInputActionTypeConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionStatus; track tag) {\r\n <div nz-col>\r\n @if (template.editingActionStatus != tag) {\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionStatus(tag.Code) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleClose(tag.Code)\"\r\n (click)=\"template.editingActionStatus = checkRemoveableActionStatus(tag.Code) ? tag : undefined\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n } @else {\r\n <input\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n [appAutoFocus]=\"true\"\r\n [(ngModel)]=\"tag.Code\"\r\n (blur)=\"template.editingActionStatus = undefined\"\r\n (keydown.enter)=\"template.editingActionStatus = undefined\"\r\n />&nbsp;&nbsp;\r\n }\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInput()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action status\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"+ New Action status\"\r\n [(ngModel)]=\"inputValue\"\r\n (blur)=\"handleInputConfirm()\"\r\n (keydown.enter)=\"handleInputConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #footerTplTemplate>\r\n <div nz-flex [nzGap]=\"6\" [nzJustify]=\"'end'\">\r\n <button nz-button nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"drawTemplateVisibel = false\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer STAGE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleStage\"\r\n [nzPlacement]=\"selectedStage?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzVisible]=\"!!selectedStage\"\r\n [nzWidth]=\"'calc(50vw)'\"\r\n [nzClosable]=\"false\"\r\n [nzFooter]=\"footerTplNode\"\r\n (nzOnClose)=\"selectedStage = undefined\"\r\n>\r\n <ng-template #drawerTitleStage>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedStage && selectedStage.editorOption) {\r\n @if (selectedStage.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n STAGE\r\n } @else {\r\n STAGE\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedStage\">\r\n <nz-radio-group [(ngModel)]=\"selectedStage.StageType\">\r\n <label nz-radio nzValue=\"_start_\">UI start</label>\r\n <label nz-radio nzValue=\"_end_\">UI end</label>\r\n <label nz-radio nzValue=\"start\">START</label>\r\n <label nz-radio nzValue=\"node\">NODE</label>\r\n <label nz-radio nzValue=\"end\">END</label>\r\n </nz-radio-group>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Code'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Code\"\r\n ></extend-input>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Name'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Name\"\r\n ></extend-input>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Sequence'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedStage.SeqValue\"\r\n ></extend-input-number>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Org implement'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedStage.App_Org_Id\"\r\n ></extend-select>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Number of Days'\"\r\n [floatingLabel]=\"true\"\r\n [precision]=\"1\"\r\n [(_ngModel)]=\"selectedStage.NumberDay\"\r\n ></extend-input-number>\r\n </div>\r\n\r\n @if (selectedStage.editorOption) {\r\n @if ([\"start\", \"node\", \"end\"].includes(selectedStage.StageType.toLowerCase())) {\r\n <extend-checkbox\r\n [label]=\"'Reverse'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.editorOption.isReverse\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <extend-checkbox\r\n [label]=\"'Require user action'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.IsRequireUser\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;List Action</h3>\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"addAction()\">\r\n <nz-icon nzType=\"plus\"></nz-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <nz-table nzSize=\"small\" [nzData]=\"lstActionOfCurrentStage\" [nzShowPagination]=\"false\" [nzNoResult]=\"'&nbsp;'\">\r\n <thead>\r\n <tr [hidden]=\"true\">\r\n <th nzWidth=\"40px\"></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (action of lstActionOfCurrentStage; track $index) {\r\n <tr (click)=\"onclickaction(action)\">\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-left': action == hoverAction ? 'solid 4px orange' : '',\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n ({{ $index + 1 }})\r\n <nz-icon\r\n nzType=\"delete\"\r\n nzTheme=\"outline\"\r\n class=\"color-warn cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); deleteAction(action)\"\r\n ></nz-icon>\r\n </td>\r\n <td\r\n style=\"border-bottom: solid 1px orange\"\r\n [ngStyle]=\"{\r\n 'border-top': $index == 0 ? 'solid 1px orange' : '',\r\n }\"\r\n >\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\" class=\"has-floating-label floating-label\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"z-index: 2\">\r\n <label>Action status</label>\r\n </nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"action.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(action.ActionStatus)\"\r\n (blur)=\"onenterAotu(action.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"action.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(action)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"getlstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(action)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Process status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstProcessStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.DocProcessStatus\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Role</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstRole\"\r\n [valueField]=\"'App_Role_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstRoleId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Email action</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailAction\"\r\n [valueField]=\"'ID'\"\r\n [displayField]=\"'Name'\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstEmailActionId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>Email template</div>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>\r\n <div nz-col nzSpan=\"1\"></div>\r\n <div nz-col nzSpan=\"23\" class=\"form-item-no-bottom\" style=\"font-weight: normal\">\r\n @for (actionRef of lstActionRefOf(action); track $index) {\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [labelSpan]=\"12\"\r\n [size]=\"'small'\"\r\n [label]=\"emailActionText(actionRef.To_WF_TemplateStageAction_Id)\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"actionRef.TemplateMail\"\r\n ></extend-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"8\">\r\n Action rule\r\n <button nz-button nzType=\"text\" nzSize=\"small\" (click)=\"actionRuleModalVisible = true\">\r\n <nz-icon nzType=\"export\" nzTheme=\"outline\" class=\"color-primary\" />\r\n </button>\r\n <button\r\n *ngIf=\"action.WF_TransitionsRule_Id\"\r\n nz-button\r\n nzType=\"text\"\r\n nzSize=\"small\"\r\n (click)=\"deleteActionRule(action)\"\r\n >\r\n <nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn\" />\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n\r\n <box [height]=\"16\"></box>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footerTplNode>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"\r\n selectedStage && selectedStage.editorOption && selectedStage.editorOption.drawerPosition == 'left'\r\n ? 'start'\r\n : 'end'\r\n \"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"selectedStage = undefined\">Close</button>\r\n <button\r\n *ngIf=\"selectedStage && ['START', 'END'].indexOf(selectedStage.StageType) < 0\"\r\n nz-button\r\n nzDanger\r\n (click)=\"deleteStage()\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer ACTION -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleAction\"\r\n nzTitle=\"ACTION\"\r\n [nzPlacement]=\"selectedAction?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzClosable]=\"false\"\r\n [nzWidth]=\"750\"\r\n [nzVisible]=\"!!selectedAction\"\r\n [nzFooter]=\"footerTplAction\"\r\n (nzOnClose)=\"selectedAction = undefined\"\r\n>\r\n <ng-template #drawerTitleAction>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedAction && selectedAction.editorOption) {\r\n @if (selectedAction.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n ACTION\r\n } @else {\r\n ACTION\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedAction\">\r\n <div>\r\n <strong\r\n >{{ selectedAction.getFromStageCode(lstStage) }} -> {{ selectedAction.getToStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getFromStageName(lstStage) }} -> {{ selectedAction.getToStageName(lstStage) }}</div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n\r\n <!-- <box [height]=\"16\"></box> -->\r\n <nz-divider></nz-divider>\r\n\r\n @if (template.editorOption.AllowbackInUse) {\r\n <extend-checkbox\r\n [label]=\"'Allow back'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedAction.allowBack\"\r\n (_ngModelChange)=\"onchangeAllowBack(selectedAction)\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n @if (selectedAction.allowBack) {\r\n <div>\r\n <strong\r\n >{{ selectedAction.getToStageCode(lstStage) }} -> {{ selectedAction.getFromStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getToStageName(lstStage) }} -> {{ selectedAction.getFromStageName(lstStage) }}</div>\r\n\r\n @if (selectedBackAction) {\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedBackAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedBackAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedBackAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedBackAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n }\r\n }\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #footerTplAction>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"selectedAction && selectedAction.editorOption.drawerPosition == 'left' ? 'start' : 'end'\"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button nzDanger (click)=\"deleteAction(selectedAction!)\">Delete</button>\r\n <button nz-button (click)=\"selectedAction = undefined\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- setting editor -->\r\n<nz-drawer\r\n [nzTitle]=\"drawSettingTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"settingVisible\"\r\n (nzOnClose)=\"settingVisible = false\"\r\n>\r\n <ng-template #drawSettingTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Editor </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <div class=\"form-item-no-bottom\">\r\n <extend-checkbox [label]=\"'Show grid'\" [labelSpan]=\"0\" [(_ngModel)]=\"wfcSetting.ShowGrid\"></extend-checkbox>\r\n\r\n <box [height]=\"16\"></box>\r\n </div>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- editor infomation -->\r\n<nz-drawer\r\n [nzTitle]=\"drawInfoTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"infoVisible\"\r\n (nzOnClose)=\"infoVisible = false\"\r\n>\r\n <ng-template #drawInfoTitle> <nz-icon nzType=\"info-circle\"></nz-icon> &nbsp; Infomation </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <p>1. C\u00E1c th\u00E0nh ph\u1EA7n: Stage or Node (stag, node quy tr\u00ECnh), Action or Connector (\u0111\u01B0\u1EDDng n\u1ED1i gi\u1EEFa c\u00E1c stage)</p>\r\n <p>2. Save \u0111\u1EC3 load c\u00E1c th\u00F4ng tin: Stage status, Action type</p>\r\n <p>\r\n 3. N\u1ED1i 2 node (t\u1EA1o connector t\u01B0\u01A1ng \u0111\u01B0\u01A1ng t\u1EA1o action):\r\n <br />- Click ch\u1EA5m cam t\u1EEB Node ngu\u1ED3n \u0111\u1EBFn ch\u1EA5m xanh c\u1EE7a Node \u0111\u00EDch (ho\u1EB7c click v\u00E0o Node \u0111\u00EDch), c\u00F3 th\u1EC3 click th\u00E0nh\r\n nhi\u1EC1u \u0111i\u1EC3m \u0111\u1EC3 t\u1EA1o \u0111\u01B0\u1EDDng n\u1ED1i cong<br />- Khi hover connector chuy\u1EC3n sang m\u1EA7u \u0111\u1ECF c\u00F3 th\u1EC3 click \u0111\u00FAp \u0111\u1EC3 th\u00EAm m\u1ED9t \u0111i\u1EC3m\r\n c\u1EE7a connector<br />- Khi hover l\u00EAn \u0111i\u1EC3m c\u1EE7a connector c\u00F3 th\u1EC3 di chuy\u1EC3n \u0111i\u1EC3m \u0111\u00F3 b\u1EB1ng c\u00E1ch nh\u1EA5n gi\u1EEF chu\u1ED9t v\u00E0 k\u00E9o th\u1EA3\r\n \u0111\u1EBFn v\u1ECB tr\u00ED m\u1EDBi<br />- Chu\u1ED9t ph\u1EA3i v\u00E0o \u0111i\u1EC3m n\u1ED1i connector \u0111\u1EC3 xo\u00E1 \u0111i\u1EC3m \u0111\u00F3\r\n </p>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- action rule modal -->\r\n<nz-modal\r\n [(nzVisible)]=\"actionRuleModalVisible\"\r\n [nzMaskClosable]=\"false\"\r\n [nzClosable]=\"false\"\r\n [nzKeyboard]=\"true\"\r\n [nzWidth]=\"'90vw'\"\r\n>\r\n <ng-container *nzModalTitle>\r\n ACTION RULE: [{{ selectedStage?.Code }}] {{ selectedStage?.Name }} > [{{ hoverAction?.ActionStatus }}]\r\n {{ hoverAction?.ActionText }}\r\n </ng-container>\r\n <ng-container *nzModalContent>\r\n @if (hoverAction && hoverAction.actionRule) {\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Code'\" [(_ngModel)]=\"hoverAction.actionRule.Code\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Name'\" [(_ngModel)]=\"hoverAction.actionRule.Name\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Note'\" [(_ngModel)]=\"hoverAction.actionRule.Note\"></extend-input>\r\n <extend-checkbox\r\n nz-col\r\n nzSpan=\"12\"\r\n [label]=\"'IsActive'\"\r\n [(_ngModel)]=\"hoverAction.actionRule.IsActive\"\r\n ></extend-checkbox>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table nzSize=\"small\" [nzData]=\"hoverAction.actionRule.lstLine\" [nzShowPagination]=\"false\">\r\n <thead>\r\n <tr>\r\n <th [nzWidth]=\"'40px'\"><icon-add (click)=\"addActionRuleLine()\"></icon-add></th>\r\n <th [nzWidth]=\"'150px'\">Rule type</th>\r\n <th>Template</th>\r\n <th>Template stage</th>\r\n <th>Template action</th>\r\n <th>Store to exec</th>\r\n <th>Email template</th>\r\n <th>Email to</th>\r\n <th [nzWidth]=\"'50px'\">Active</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of hoverAction.actionRule.lstLine; track $index) {\r\n <tr>\r\n <td><icon-delete (click)=\"deleteActionRuleLine(hoverAction.actionRule, item)\"></icon-delete></td>\r\n <td>\r\n <dic-domain-select\r\n [size]=\"'small'\"\r\n [DomainCode]=\"'WF_RuleType'\"\r\n [(_ngModel)]=\"item.RuleType\"\r\n ></dic-domain-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #xxx\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstTemplateForRule(item)\"\r\n [valueField]=\"'WF_Template_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_Template_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStage_Id = 0; item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #yyy\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstStageForRule(xxx._ngModel)\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstActionForRule(yyy._ngModel)\"\r\n [valueField]=\"'WF_TemplateStageAction_Id'\"\r\n [displayFields]=\"['ActionStatus', 'ActionText']\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.WF_TemplateStageAction_Id\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"item.StoreToExec\"></extend-input>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'App_MailTemplate_Id'\"\r\n [displayField]=\"'Code'\"\r\n [dropdownMatchSelectWidth]=\"false\"\r\n [(_ngModel)]=\"item.App_MailTemplate_Id\"\r\n ></extend-select>\r\n </td>\r\n <td class=\"form-item-no-bottom\">\r\n <extend-textarea [size]=\"'small'\" [minRows]=\"1\" [(_ngModel)]=\"item.EmailTo\"></extend-textarea>\r\n </td>\r\n <td class=\"text-center form-item-no-bottom\">\r\n <extend-checkbox [(_ngModel)]=\"item.IsActive\"></extend-checkbox>\r\n </td>\r\n <td>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"checkAction(item)\">Check</button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button nzType=\"primary\" (click)=\"checkAllAction()\">OK</button>\r\n </ng-container>\r\n</nz-modal>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .workflow-wrapper{border:solid 1px lightgray;overflow:hidden;width:100%}.workflow-canvas{position:relative;background:#f0f2f5;cursor:default;overflow:hidden;outline:1px dashed rgba(0,0,0,.1)}.workflow-canvas .edges-layer{position:absolute;inset:0;width:100%;height:100%;z-index:1}.workflow-canvas .edges-layer path{stroke-width:2;fill:none}.canvas-content{transform-origin:0 0;width:100%;height:100%}.canvas-content{outline:1px dashed red}.canvas-content.panning{cursor:grab}.canvas-content.panning:active{cursor:grabbing}.workflow-canvas.panning{cursor:grab}.workflow-canvas.panning:active{cursor:grabbing}.workflow-canvas.connecting,.workflow-canvas.connecting .workflow-node{cursor:crosshair}.workflow-node{position:absolute;width:160px;cursor:grab;-webkit-user-select:none;user-select:none;z-index:2}.workflow-node:active{cursor:grabbing}.workflow-node.connecting-source,.workflow-node.selected,.workflow-node:hover:not(.workflow-node-start,.workflow-node-end){outline:2px dashed #1890ff}.workflow-node .title{font-weight:600;margin-bottom:6px}.workflow-node-start{width:0px}.workflow-node-start.connecting-source,.workflow-node-start.selected,.workflow-node-start:hover{outline:unset}.workflow-node-start.connecting-source nz-tag,.workflow-node-start.selected nz-tag,.workflow-node-start:hover nz-tag{outline:2px dashed}.workflow-node-start nz-tag{position:relative;top:45px;right:35px}.workflow-node-end{width:0px}.workflow-node-end.connecting-source,.workflow-node-end.selected,.workflow-node-end:hover{outline:unset}.workflow-node-end.connecting-source nz-tag,.workflow-node-end.selected nz-tag,.workflow-node-end:hover nz-tag{outline:2px dashed}.workflow-node-end nz-tag{position:relative;top:45px;right:32px}.connector{position:absolute;top:39px;width:12px;height:12px;background:#1890ff;border-radius:50%;transform:translateY(-50%);cursor:crosshair;transition:box-shadow .15s ease-out,transform .15s ease-out}.connector:hover{box-shadow:0 0 0 3px #1890ff4d;transform:translateY(-50%) scale(1.15)}.connector-right{right:-8px;background:orange}.connector-right.reverse,.connector-left{left:-8px}.connector-left.reverse{left:unset;right:-8px}.connector-start{width:16px;height:16px;right:-8px;background:green;box-shadow:0 0 0 3px #1890ff4d}.connector-end{width:16px;height:16px;left:-8px;background:#000;box-shadow:0 0 0 3px #1890ff4d}.edge{cursor:pointer;stroke:#1890ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;fill:none;transition:stroke .15s ease}.edge-hit{stroke:transparent;stroke-width:18px!important;fill:none;cursor:pointer}.edge-hit:hover+.edge{stroke:#ff4d4f;stroke-width:2}.workflow-canvas.dragging-point .edge-hit{pointer-events:none}.edge:hover+.edge-label{fill:#1890ff;font-weight:500}.edge-label{font-size:12px;fill:#555;pointer-events:none;-webkit-user-select:none;user-select:none}.blue{stroke:#1890ff!important}.red{stroke:#ff4d4f!important;box-shadow:0 0 0 3px #1890ff4d!important}.workflow-svg{background:transparent;overflow:visible}.waypoint{position:absolute;width:10px;height:10px;background:#ff4d4f;border-radius:50%;transform:translate(-50%,-50%) scale(1);cursor:move;z-index:1;transition:transform .12s ease-out,background-color .12s ease-out,box-shadow .12s ease-out}.waypoint:hover{background:#ff7875;transform:translate(-50%,-50%) scale(1.25);box-shadow:0 0 0 4px #ff787559}.waypoint.dragging{transition:none;transform:translate(-50%,-50%) scale(1.15);pointer-events:none}.workflow-canvas.dragging-point svg{cursor:grabbing}.selection-box{position:absolute;border:1px dashed #1890ff;background:#1890ff1a;pointer-events:none}.toolbar{position:absolute;top:8px;left:8px;display:flex;gap:4px;padding:6px;background:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;z-index:100}.toolbar .divider{width:1px;background:#e5e5e5;margin:0 2px}.zoom-toolbar{position:absolute;top:8px;left:8px;z-index:10;display:flex;align-items:center;gap:6px;background:#fff;padding:4px 6px;border-radius:6px;box-shadow:0 2px 6px #00000026}.zoom-toolbar span{min-width:40px;text-align:center;font-size:12px}nz-tag.selected{outline:2px dashed #1890ff}.grid-layer{position:absolute;inset:0;pointer-events:none;z-index:0;background-image:radial-gradient(rgba(0,0,0,.08) 1px,transparent 1px);background-size:20px 20px}.grid-layer{background-image:linear-gradient(to right,rgba(0,0,0,.06) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.06) 1px,transparent 1px);background-size:20px 20px}.editable-tag{background:#fff;border-style:dashed}::ng-deep .minimap{position:absolute;width:180px;height:125px;top:0;right:0;background-color:#eee;border:1px solid #aaa;opacity:.9;z-index:1}::ng-deep .minimap-node{position:absolute;background-color:#607a86}::ng-deep .minimap-node-round{position:absolute;background-color:#607a86;border-radius:10px}::ng-deep .minimap-node-round-start{background-color:green}::ng-deep .minimap-node-round-end{background-color:#000}::ng-deep .minimap-viewport{position:absolute;box-sizing:border-box;background-color:#4f6f7e66;z-index:1;cursor:move}::ng-deep .has-floating-label.floating-label{position:relative;padding-top:14px}::ng-deep .has-floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:16px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .has-floating-label nz-form-item nz-form-label label{font-size:12px;color:var(--darkgray, #565656);font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .has-floating-label .full-width{width:100%}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 60%,#f5f5f5 50%)}.has-floating-label.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.has-floating-label.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
12390
12455
  }], propDecorators: { lstOrg: [{
12391
12456
  type: Input
12392
12457
  }], lstRole: [{
@@ -13781,11 +13846,11 @@ class SideMenuComponent extends BaseComponent {
13781
13846
  filteredLstMenu = [];
13782
13847
  currentHeaderId = '';
13783
13848
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SideMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
13784
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SideMenuComponent, isStandalone: true, selector: "side-menu", inputs: { isCollapsed: "isCollapsed", filteredLstMenu: "filteredLstMenu", currentHeaderId: "currentHeaderId" }, usesInheritance: true, ngImport: i0, template: "<ul nz-menu nzTheme=\"light\" nzMode=\"inline\" [nzInlineIndent]=\"12\" [nzInlineCollapsed]=\"isCollapsed\">\r\n @for (menuLv1 of filteredLstMenu; track menuLv1.App_Menu_Id) {\r\n @if (menuLv1.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\r\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\r\n @if (menuLv2.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\r\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\r\n @if (menuLv3.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\r\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\r\n @if (menuLv4.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv4.Open\" [nzTitle]=\"menuLv4.Name\" [nzIcon]=\"menuLv4.Icon\">\r\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv4.Icon\" [nzType]=\"menuLv4.Icon\"></nz-icon>\r\n <box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv4.Url\">\r\n {{ menuLv4.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv3.Icon\" [nzType]=\"menuLv3.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv3.Url\">\r\n {{ menuLv3.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv2.Icon\" [nzType]=\"menuLv2.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv2.Url\">\r\n {{ menuLv2.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv1.Icon\" [nzType]=\"menuLv1.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv1.Url\">\r\n {{ menuLv1.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n</ul>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NzMenuModule }, { kind: "directive", type: i4$1.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$1.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "component", type: i4$1.NzSubMenuComponent, selector: "[nz-submenu]", inputs: ["nzMenuClassName", "nzPaddingLeft", "nzTitle", "nzIcon", "nzTriggerSubMenuAction", "nzOpen", "nzDisabled", "nzPlacement"], outputs: ["nzOpenChange"], exportAs: ["nzSubmenu"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
13849
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SideMenuComponent, isStandalone: true, selector: "side-menu", inputs: { isCollapsed: "isCollapsed", filteredLstMenu: "filteredLstMenu", currentHeaderId: "currentHeaderId" }, usesInheritance: true, ngImport: i0, template: "<ul\r\n class=\"side-menu-wrapper\"\r\n nz-menu\r\n nzTheme=\"light\"\r\n nzMode=\"inline\"\r\n [nzInlineIndent]=\"12\"\r\n [nzInlineCollapsed]=\"isCollapsed\"\r\n>\r\n @for (menuLv1 of filteredLstMenu; track menuLv1.App_Menu_Id) {\r\n @if (menuLv1.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\r\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\r\n @if (menuLv2.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\r\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\r\n @if (menuLv3.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\r\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\r\n @if (menuLv4.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv4.Open\" [nzTitle]=\"menuLv4.Name\" [nzIcon]=\"menuLv4.Icon\">\r\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv4.Icon\" [nzType]=\"menuLv4.Icon\"></nz-icon>\r\n <box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv4.Url\">\r\n {{ menuLv4.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv3.Icon\" [nzType]=\"menuLv3.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv3.Url\">\r\n {{ menuLv3.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv2.Icon\" [nzType]=\"menuLv2.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv2.Url\">\r\n {{ menuLv2.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv1.Icon\" [nzType]=\"menuLv1.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv1.Url\">\r\n {{ menuLv1.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n</ul>\r\n", styles: [".side-menu-wrapper .ant-menu-item{margin:0;font-weight:500}.side-menu-wrapper .ant-menu-item a{color:#474747}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NzMenuModule }, { kind: "directive", type: i4$1.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$1.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "component", type: i4$1.NzSubMenuComponent, selector: "[nz-submenu]", inputs: ["nzMenuClassName", "nzPaddingLeft", "nzTitle", "nzIcon", "nzTriggerSubMenuAction", "nzOpen", "nzDisabled", "nzPlacement"], outputs: ["nzOpenChange"], exportAs: ["nzSubmenu"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
13785
13850
  }
13786
13851
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SideMenuComponent, decorators: [{
13787
13852
  type: Component,
13788
- args: [{ selector: 'side-menu', imports: [CommonModule, NzMenuModule, NzIconModule, Box, RouterModule], template: "<ul nz-menu nzTheme=\"light\" nzMode=\"inline\" [nzInlineIndent]=\"12\" [nzInlineCollapsed]=\"isCollapsed\">\r\n @for (menuLv1 of filteredLstMenu; track menuLv1.App_Menu_Id) {\r\n @if (menuLv1.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\r\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\r\n @if (menuLv2.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\r\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\r\n @if (menuLv3.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\r\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\r\n @if (menuLv4.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv4.Open\" [nzTitle]=\"menuLv4.Name\" [nzIcon]=\"menuLv4.Icon\">\r\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv4.Icon\" [nzType]=\"menuLv4.Icon\"></nz-icon>\r\n <box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv4.Url\">\r\n {{ menuLv4.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv3.Icon\" [nzType]=\"menuLv3.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv3.Url\">\r\n {{ menuLv3.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv2.Icon\" [nzType]=\"menuLv2.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv2.Url\">\r\n {{ menuLv2.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv1.Icon\" [nzType]=\"menuLv1.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv1.Url\">\r\n {{ menuLv1.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n</ul>\r\n" }]
13853
+ args: [{ selector: 'side-menu', imports: [CommonModule, NzMenuModule, NzIconModule, Box, RouterModule], template: "<ul\r\n class=\"side-menu-wrapper\"\r\n nz-menu\r\n nzTheme=\"light\"\r\n nzMode=\"inline\"\r\n [nzInlineIndent]=\"12\"\r\n [nzInlineCollapsed]=\"isCollapsed\"\r\n>\r\n @for (menuLv1 of filteredLstMenu; track menuLv1.App_Menu_Id) {\r\n @if (menuLv1.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\r\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\r\n @if (menuLv2.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\r\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\r\n @if (menuLv3.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\r\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\r\n @if (menuLv4.SubMenu?.length) {\r\n <ul nz-submenu [nzOpen]=\"menuLv4.Open\" [nzTitle]=\"menuLv4.Name\" [nzIcon]=\"menuLv4.Icon\">\r\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv4.Icon\" [nzType]=\"menuLv4.Icon\"></nz-icon>\r\n <box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv4.Url\">\r\n {{ menuLv4.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv3.Icon\" [nzType]=\"menuLv3.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv3.Url\">\r\n {{ menuLv3.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv2.Icon\" [nzType]=\"menuLv2.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv2.Url\">\r\n {{ menuLv2.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n } @else {\r\n <li nz-menu-item nzMatchRouter>\r\n <nz-icon *ngIf=\"menuLv1.Icon\" [nzType]=\"menuLv1.Icon\"></nz-icon><box [width]=\"2\"></box>\r\n <a [routerLink]=\"(currentHeaderId ? '/headermenuid/' + currentHeaderId : '') + menuLv1.Url\">\r\n {{ menuLv1.Name }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n</ul>\r\n", styles: [".side-menu-wrapper .ant-menu-item{margin:0;font-weight:500}.side-menu-wrapper .ant-menu-item a{color:#474747}\n"] }]
13789
13854
  }], propDecorators: { isCollapsed: [{
13790
13855
  type: Input
13791
13856
  }], filteredLstMenu: [{
@@ -14381,9 +14446,791 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
14381
14446
  ], template: "<nz-spin [nzSpinning]=\"isLoading\">\r\n <div nz-row nzJustify=\"center\" class=\"login\">\r\n <div class=\"form-container\">\r\n <form nz-flex nzVertical=\"true\" nz-form [formGroup]=\"loginForm\" class=\"login-form\" (ngSubmit)=\"dologin()\">\r\n <div>\r\n <div style=\"text-align: center\">\r\n <img *ngIf=\"logoUrl$ | async as url\" width=\"150px\" [src]=\"url\" hideIfError />\r\n </div>\r\n <div class=\"form-field\" style=\"text-align: center; margin-bottom: 20px\">\r\n <h3 style=\"font-weight: bold; font-size: 20px\">{{ SYSTEM_NAME_LOGIN }}</h3>\r\n </div>\r\n </div>\r\n\r\n <div nz-row [nzJustify]=\"'center'\">\r\n <div nz-col nzSm=\"24\" nzMd=\"16\">\r\n <div nz-flex nzVertical=\"true\">\r\n <nz-form-item>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group nzPrefixIcon=\"user\">\r\n <input type=\"text\" nz-input formControlName=\"username\" placeholder=\"{{ 'USERNAME' | translate }}\" />\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n\r\n <nz-form-item>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group\r\n nzPrefixIcon=\"lock\"\r\n [nzSuffix]=\"visible ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\"\r\n >\r\n <input\r\n type=\"{{ passwordType }}\"\r\n nz-input\r\n formControlName=\"password\"\r\n placeholder=\"{{ 'PASSWORD' | translate }}\"\r\n />\r\n </nz-input-group>\r\n </nz-form-control>\r\n <ng-template #suffixTemplateShowPassword>\r\n <nz-icon\r\n nzType=\"eye\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visible = !visible; passwordType = 'text'\"\r\n />\r\n </ng-template>\r\n <ng-template #suffixTemplateHiddenPassword>\r\n <nz-icon\r\n nzType=\"eye-invisible\"\r\n nzTheme=\"outline\"\r\n nz-tooltip\r\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\r\n nzTooltipPlacement=\"right\"\r\n (click)=\"visible = !visible; passwordType = 'password'\"\r\n />\r\n </ng-template>\r\n </nz-form-item>\r\n\r\n @if (isOneUserMultiOrgs) {\r\n <nz-form-item>\r\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\r\n <nz-input-group nzPrefixIcon=\"cluster\" nzHasFeedback=\"false\">\r\n <nz-select\r\n nzShowSearch\r\n nzAllowClear\r\n [nzBorderless]=\"true\"\r\n [nzSize]=\"'small'\"\r\n nzPlaceHolder=\"{{ 'ORG' | translate }}\"\r\n formControlName=\"orgid\"\r\n class=\"no-error-border\"\r\n (nzFocus)=\"onFocusOrg()\"\r\n >\r\n @for (item of lstOrg; track $index) {\r\n <nz-option [nzLabel]=\"item.TreeNodeName!\" [nzValue]=\"item.App_Org_Id\"></nz-option>\r\n }\r\n </nz-select>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n }\r\n\r\n <div nz-flex nzVertical=\"true\" nzGap=\"4px\">\r\n <button nz-button [nzType]=\"'primary'\" nzBlock>\r\n {{ \"LOGIN\" | translate }}\r\n </button>\r\n <!-- \r\n <nz-form-item nzJustify=\"end\">\r\n <nz-switch formControlName=\"langSwitch\" class=\"nz-switch-both-active-color\" nzCheckedChildren=\"VN\"\r\n nzUnCheckedChildren=\"EN\" (ngModelChange)=\"changeLanguage($event)\"></nz-switch>\r\n </nz-form-item> \r\n --></div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</nz-spin>\r\n\r\n<img *ngIf=\"bgUrl$ | async as url\" class=\"bg-image\" [src]=\"url\" hideIfError />\r\n", styles: [":host{display:flex;justify-content:center;align-items:center;height:80vh}.form-container{width:clamp(280px,30vw,420px);box-shadow:0 10px 20px 1px #001a2d59;background-color:#fff;padding:16px;border-radius:8px}.bg-image{position:fixed;top:0;left:0;width:100vw;height:100vh;object-fit:cover;object-position:center;z-index:-1;pointer-events:none}::ng-deep .login .ant-select-selector{height:auto!important}::ng-deep .login .ant-input-affix-wrapper,::ng-deep .login .ant-btn{border-radius:8px}\n"] }]
14382
14447
  }] });
14383
14448
 
14449
+ const URLs = {
14450
+ getPaging: '/api/WF/Workflow/getPaging',
14451
+ saveWF: '/api/WF/Workflow/saveWF',
14452
+ getWfData: '/api/WF/Workflow/getWfData',
14453
+ deleteTemplate: '/api/WF/Workflow/deleteTemplate',
14454
+ deleteStage: '/api/WF/Workflow/deleteStage',
14455
+ deleteAction: '/api/WF/Workflow/deleteAction',
14456
+ getByIdEx: '/api/WF/Workflow/getByIdEx',
14457
+ getAll: '/api/WF/Workflow/getAll',
14458
+ getList: '/api/WF/Workflow/getList',
14459
+ };
14460
+ class WFService extends HTTPService {
14461
+ cms = inject(CommonService);
14462
+ getPaging(filter) {
14463
+ return this.postData(AppGlobals.apiEndpoint + URLs.getPaging, filter);
14464
+ }
14465
+ saveWF(data) {
14466
+ return this.postData(AppGlobals.apiEndpoint + URLs.saveWF, data);
14467
+ }
14468
+ getWfData(templateId) {
14469
+ const params = new HttpParams().append('templateId', templateId);
14470
+ return this.getParams(AppGlobals.apiEndpoint + URLs.getWfData, params);
14471
+ }
14472
+ getDataForRule(templateId) {
14473
+ return this.cms.ESP({
14474
+ SPN: 'WF_Template_getDataForRule',
14475
+ Params: [templateId],
14476
+ });
14477
+ }
14478
+ checkRule(ruleLine, sourceActionId) {
14479
+ const params = new HttpParams().append('sourceActionId', sourceActionId);
14480
+ return this.postDataWithParams(AppGlobals.apiEndpoint + '/api/WF/Workflow/checkRule', ruleLine, params);
14481
+ }
14482
+ deleteTemplate(WF_Template_Id) {
14483
+ const params = new HttpParams().append('WF_Template_Id', WF_Template_Id);
14484
+ return this.postParams(AppGlobals.apiEndpoint + URLs.deleteTemplate, params);
14485
+ }
14486
+ deleteStage(WF_TemplateStage_Id) {
14487
+ const params = new HttpParams().append('WF_TemplateStage_Id', WF_TemplateStage_Id);
14488
+ return this.postParams(AppGlobals.apiEndpoint + URLs.deleteStage, params);
14489
+ }
14490
+ deleteAction(WF_TemplateStageAction_Id) {
14491
+ const params = new HttpParams().append('WF_TemplateStageAction_Id', WF_TemplateStageAction_Id);
14492
+ return this.postParams(AppGlobals.apiEndpoint + URLs.deleteAction, params);
14493
+ }
14494
+ deleteRule(WF_TemplateStageAction_Id, WF_TransitionsRule_Id) {
14495
+ return this.post(AppGlobals.apiEndpoint +
14496
+ `/api/WF/Workflow/deleteRule?WF_TemplateStageAction_Id=${WF_TemplateStageAction_Id}&WF_TransitionsRule_Id=${WF_TransitionsRule_Id}`);
14497
+ }
14498
+ deleteRuleLine(ruleLineId) {
14499
+ return this.post(AppGlobals.apiEndpoint + '/api/WF/Workflow/deleteRuleLine?ruleLineId=' + ruleLineId);
14500
+ }
14501
+ getByIdEx(id) {
14502
+ const params = new HttpParams().append('id', id);
14503
+ return this.getParams(AppGlobals.apiEndpoint + URLs.getByIdEx, params);
14504
+ }
14505
+ getAll() {
14506
+ return this.get(AppGlobals.apiEndpoint + URLs.getAll);
14507
+ }
14508
+ getList(filter) {
14509
+ return this.postData(AppGlobals.apiEndpoint + URLs.getList, filter);
14510
+ }
14511
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WFService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
14512
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WFService, providedIn: 'root' });
14513
+ }
14514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WFService, decorators: [{
14515
+ type: Injectable,
14516
+ args: [{ providedIn: 'root' }]
14517
+ }] });
14518
+
14519
+ class WF_TemplateActionRef {
14520
+ // #region properties
14521
+ WF_TemplateActionRef_Id;
14522
+ App_Org_Id;
14523
+ CreatedDate;
14524
+ CreatedUser;
14525
+ UpdatedDate;
14526
+ UpdatedUser;
14527
+ IsActive;
14528
+ WF_Template;
14529
+ WF_TemplateStage;
14530
+ WF_TemplateStageAction_Id;
14531
+ To_WF_TemplateStageAction_Id;
14532
+ TemplateMail;
14533
+ // #endregion properties
14534
+ ToAction_ActionStatus;
14535
+ ToAction_ActionText;
14536
+ ToAction_StageCode;
14537
+ ToAction_StageName;
14538
+ IsChange;
14539
+ IsSelected;
14540
+ TempId;
14541
+ ToAction_TempId;
14542
+ constructor(obj) {
14543
+ obj = obj || {};
14544
+ this.WF_TemplateActionRef_Id = obj.WF_TemplateActionRef_Id || null;
14545
+ this.App_Org_Id = obj.App_Org_Id || '';
14546
+ this.CreatedDate = obj.CreatedDate || null;
14547
+ this.CreatedUser = obj.CreatedUser || '';
14548
+ this.UpdatedDate = obj.UpdatedDate || null;
14549
+ this.UpdatedUser = obj.UpdatedUser || '';
14550
+ this.IsActive = obj.IsActive || false;
14551
+ this.WF_Template = obj.WF_Template || null;
14552
+ this.WF_TemplateStage = obj.WF_TemplateStage || null;
14553
+ this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;
14554
+ this.To_WF_TemplateStageAction_Id = obj.To_WF_TemplateStageAction_Id || null;
14555
+ this.TemplateMail = obj.TemplateMail || '';
14556
+ this.IsChange = obj.IsChange || false;
14557
+ this.IsSelected = obj.IsSelected || false;
14558
+ this.TempId = obj.TempId || null;
14559
+ this.ToAction_TempId = obj.ToAction_TempId || null;
14560
+ this.ToAction_ActionStatus = obj.ToAction_ActionStatus || null;
14561
+ this.ToAction_ActionText = obj.ToAction_ActionText || null;
14562
+ this.ToAction_StageCode = obj.ToAction_StageCode || null;
14563
+ this.ToAction_StageName = obj.ToAction_StageName || null;
14564
+ }
14565
+ }
14566
+ class WF_TemplateActionRefFilter extends GridFilter {
14567
+ WF_TemplateActionRef_Id;
14568
+ App_Org_Id;
14569
+ CreatedDate;
14570
+ CreatedUser;
14571
+ UpdatedDate;
14572
+ UpdatedUser;
14573
+ IsActive;
14574
+ WF_Template;
14575
+ WF_TemplateStage;
14576
+ WF_TemplateStageAction_Id;
14577
+ To_WF_TemplateStageAction_Id;
14578
+ TemplateMail;
14579
+ constructor(obj) {
14580
+ super();
14581
+ obj = obj || {};
14582
+ this.WF_TemplateActionRef_Id = obj.WF_TemplateActionRef_Id || null;
14583
+ this.App_Org_Id = obj.App_Org_Id || null;
14584
+ this.CreatedDate = obj.CreatedDate || null;
14585
+ this.CreatedUser = obj.CreatedUser || null;
14586
+ this.UpdatedDate = obj.UpdatedDate || null;
14587
+ this.UpdatedUser = obj.UpdatedUser || null;
14588
+ this.IsActive = obj.IsActive || false;
14589
+ this.WF_Template = obj.WF_Template || null;
14590
+ this.WF_TemplateStage = obj.WF_TemplateStage || null;
14591
+ this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;
14592
+ this.To_WF_TemplateStageAction_Id = obj.To_WF_TemplateStageAction_Id || null;
14593
+ this.TemplateMail = obj.TemplateMail || null;
14594
+ }
14595
+ }
14596
+
14597
+ class WF_TemplateStageActionRole {
14598
+ // #region properties
14599
+ WF_TemplateStageActionRole_Id;
14600
+ App_Org_Id;
14601
+ CreatedDate;
14602
+ CreatedUser;
14603
+ UpdatedDate;
14604
+ UpdatedUser;
14605
+ IsActive;
14606
+ WF_TemplateStage_Id;
14607
+ WF_TemplateStageAction_Id;
14608
+ App_Role_Id;
14609
+ // #endregion properties
14610
+ RoleCode;
14611
+ RoleName;
14612
+ IsChange;
14613
+ TempId;
14614
+ Stage_TempId;
14615
+ constructor(obj) {
14616
+ obj = obj || {};
14617
+ this.WF_TemplateStageActionRole_Id = obj.WF_TemplateStageActionRole_Id || null;
14618
+ this.App_Org_Id = obj.App_Org_Id || '';
14619
+ this.CreatedDate = obj.CreatedDate || null;
14620
+ this.CreatedUser = obj.CreatedUser || '';
14621
+ this.UpdatedDate = obj.UpdatedDate || null;
14622
+ this.UpdatedUser = obj.UpdatedUser || '';
14623
+ this.IsActive = obj.IsActive || null;
14624
+ this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;
14625
+ this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;
14626
+ this.App_Role_Id = obj.App_Role_Id || '';
14627
+ this.RoleCode = obj.RoleCode || null;
14628
+ this.RoleName = obj.RoleName || null;
14629
+ this.IsChange = obj.IsChange || false;
14630
+ this.TempId = obj.TempId || null;
14631
+ this.Stage_TempId = obj.Stage_TempId || null;
14632
+ }
14633
+ }
14634
+ class WF_TemplateStageActionRoleFilter extends GridFilter {
14635
+ WF_TemplateStageActionRole_Id;
14636
+ App_Org_Id;
14637
+ CreatedDate;
14638
+ CreatedUser;
14639
+ UpdatedDate;
14640
+ UpdatedUser;
14641
+ IsActive;
14642
+ WF_TemplateStage_Id;
14643
+ WF_TemplateStageAction_Id;
14644
+ App_Role_Id;
14645
+ constructor(obj) {
14646
+ super();
14647
+ obj = obj || {};
14648
+ this.WF_TemplateStageActionRole_Id = obj.WF_TemplateStageActionRole_Id || null;
14649
+ this.App_Org_Id = obj.App_Org_Id || null;
14650
+ this.CreatedDate = obj.CreatedDate || null;
14651
+ this.CreatedUser = obj.CreatedUser || null;
14652
+ this.UpdatedDate = obj.UpdatedDate || null;
14653
+ this.UpdatedUser = obj.UpdatedUser || null;
14654
+ this.IsActive = obj.IsActive || null;
14655
+ this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;
14656
+ this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;
14657
+ this.App_Role_Id = obj.App_Role_Id || null;
14658
+ }
14659
+ }
14660
+
14661
+ class WF_TemplateStageAction {
14662
+ // #region properties
14663
+ WF_TemplateStageAction_Id;
14664
+ App_Org_Id;
14665
+ CreatedDate;
14666
+ CreatedUser;
14667
+ UpdatedDate;
14668
+ UpdatedUser;
14669
+ IsActive;
14670
+ WF_Template_Id;
14671
+ WF_TemplateStage_Id;
14672
+ ActionType;
14673
+ ActionStatus;
14674
+ ActionText;
14675
+ StageStatus;
14676
+ AllowNote;
14677
+ AllowEmail;
14678
+ WF_EmailTemplate;
14679
+ To_WF_TemplateStage_Id;
14680
+ To_StageStatus;
14681
+ WF_TransitionsRule_Id;
14682
+ // #endregion properties
14683
+ ListUserRole;
14684
+ ListUserRoleSelect;
14685
+ ListUserRoleSelect_Delete;
14686
+ UserCtrl = new FormControl();
14687
+ FilteredUsers;
14688
+ ListUserString;
14689
+ ProjectName;
14690
+ TaskName;
14691
+ ListEmailUserString;
14692
+ ListEmail;
14693
+ TempId;
14694
+ IsChange;
14695
+ ListActionRef;
14696
+ ListActionRef_Delete;
14697
+ ToStage_TempId;
14698
+ ListRole;
14699
+ ListRole_Delete;
14700
+ StageCode;
14701
+ StageName;
14702
+ IsSelected;
14703
+ _prevListUserRoleSelectStr;
14704
+ ListUserRoleSelectStr;
14705
+ constructor(obj) {
14706
+ obj = obj || {};
14707
+ this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;
14708
+ this.App_Org_Id = obj.App_Org_Id || '';
14709
+ this.CreatedDate = obj.CreatedDate || null;
14710
+ this.CreatedUser = obj.CreatedUser || '';
14711
+ this.UpdatedDate = obj.UpdatedDate || null;
14712
+ this.UpdatedUser = obj.UpdatedUser || '';
14713
+ this.IsActive = obj.IsActive || null;
14714
+ this.WF_Template_Id = obj.WF_Template_Id || null;
14715
+ this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;
14716
+ this.ActionType = obj.ActionType || '';
14717
+ this.ActionStatus = obj.ActionStatus || '';
14718
+ this.ActionText = obj.ActionText || '';
14719
+ this.StageStatus = obj.StageStatus || '';
14720
+ this.AllowNote = obj.AllowNote || null;
14721
+ this.AllowEmail = obj.AllowEmail || null;
14722
+ this.WF_EmailTemplate = obj.WF_EmailTemplate || null;
14723
+ this.To_WF_TemplateStage_Id = obj.To_WF_TemplateStage_Id || null;
14724
+ this.To_StageStatus = obj.To_StageStatus || '';
14725
+ this.WF_TransitionsRule_Id = obj.WF_TransitionsRule_Id || null;
14726
+ this.ListUserRole = obj.ListUserRole || [];
14727
+ this.ListUserRoleSelect = obj.ListUserRoleSelect || [];
14728
+ this.ListUserRoleSelect_Delete = obj.ListUserRoleSelect_Delete || [];
14729
+ this.ListUserString = obj.ListUserString || '';
14730
+ this.ProjectName = obj.ProjectName || '';
14731
+ this.TaskName = obj.TaskName || '';
14732
+ this.ListEmailUserString = obj.ListEmailUserString || '';
14733
+ this.ListEmail = obj.ListEmail || [];
14734
+ this.TempId = obj.TempId || null;
14735
+ this.IsChange = obj.IsChange || false;
14736
+ // this.ListActionRef = obj.ListActionRef || [];
14737
+ this.ListActionRef_Delete = obj.ListActionRef_Delete || [];
14738
+ // this.ListRole = obj.ListRole || [];
14739
+ this.ListRole_Delete = obj.ListRole_Delete || [];
14740
+ this.ToStage_TempId = obj.ToStage_TempId || null;
14741
+ this.StageCode = obj.StageCode || null;
14742
+ this.StageName = obj.StageName || null;
14743
+ this.IsSelected = obj.IsSelected || false;
14744
+ this.ListRole = (obj.ListRole || []).map((s) => new WF_TemplateStageActionRole(s));
14745
+ this.ListActionRef = (obj.ListActionRef || []).map((s) => new WF_TemplateActionRef(s));
14746
+ this.UserCtrl = new FormControl();
14747
+ this.FilteredUsers = this.UserCtrl.valueChanges.pipe(startWith$1(null), map$1((user) => (user ? this._filter(user) : this.ListUserRole.slice())));
14748
+ this.ListUserRoleSelectStr = obj.ListUserRoleSelectStr || [];
14749
+ }
14750
+ // private _filter(value: string | UserRoleModel): UserRoleModel[] {
14751
+ // const filterValue = typeof value === 'string'
14752
+ // ? value.toLowerCase()
14753
+ // : value?.FullName.toLowerCase();
14754
+ // return this.ListUserRole.filter(user =>
14755
+ // user.FullName.toLowerCase().includes(filterValue)
14756
+ // );
14757
+ // }
14758
+ _filter(value) {
14759
+ let filterValue = '';
14760
+ if (typeof value === 'string') {
14761
+ filterValue = value.toLowerCase();
14762
+ }
14763
+ else if (value && value.FullName) {
14764
+ filterValue = value.FullName.toLowerCase();
14765
+ }
14766
+ return this.ListUserRole.filter((user) => user.FullName?.toLowerCase().includes(filterValue));
14767
+ }
14768
+ toJSON() {
14769
+ // eslint-disable-next-line no-unused-vars
14770
+ const { UserCtrl, FilteredUsers, ...plain } = this;
14771
+ return plain;
14772
+ }
14773
+ }
14774
+ class WF_TemplateStageActionFilter extends GridFilter {
14775
+ WF_TemplateStageAction_Id;
14776
+ App_Org_Id;
14777
+ CreatedDate;
14778
+ CreatedUser;
14779
+ UpdatedDate;
14780
+ UpdatedUser;
14781
+ IsActive;
14782
+ WF_Template_Id;
14783
+ WF_TemplateStage_Id;
14784
+ ActionType;
14785
+ ActionStatus;
14786
+ ActionText;
14787
+ StageStatus;
14788
+ AllowNote;
14789
+ AllowEmail;
14790
+ WF_EmailTemplate;
14791
+ To_WF_TemplateStage_Id;
14792
+ To_StageStatus;
14793
+ WF_TransitionsRule_Id;
14794
+ constructor(obj) {
14795
+ super();
14796
+ obj = obj || {};
14797
+ this.WF_TemplateStageAction_Id = obj.WF_TemplateStageAction_Id || null;
14798
+ this.App_Org_Id = obj.App_Org_Id || null;
14799
+ this.CreatedDate = obj.CreatedDate || null;
14800
+ this.CreatedUser = obj.CreatedUser || null;
14801
+ this.UpdatedDate = obj.UpdatedDate || null;
14802
+ this.UpdatedUser = obj.UpdatedUser || null;
14803
+ this.IsActive = obj.IsActive || null;
14804
+ this.WF_Template_Id = obj.WF_Template_Id || null;
14805
+ this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;
14806
+ this.ActionType = obj.ActionType || null;
14807
+ this.ActionStatus = obj.ActionStatus || null;
14808
+ this.ActionText = obj.ActionText || null;
14809
+ this.StageStatus = obj.StageStatus || null;
14810
+ this.AllowNote = obj.AllowNote || null;
14811
+ this.AllowEmail = obj.AllowEmail || null;
14812
+ this.WF_EmailTemplate = obj.WF_EmailTemplate || null;
14813
+ this.To_WF_TemplateStage_Id = obj.To_WF_TemplateStage_Id || null;
14814
+ this.To_StageStatus = obj.To_StageStatus || null;
14815
+ this.WF_TransitionsRule_Id = obj.WF_TransitionsRule_Id || null;
14816
+ }
14817
+ }
14818
+ class UserRoleModel {
14819
+ App_Role_Id = '';
14820
+ RoleName = '';
14821
+ App_User_Id = '';
14822
+ FullName = '';
14823
+ }
14824
+
14825
+ class WF_TemplateStage {
14826
+ // #region properties
14827
+ WF_TemplateStage_Id;
14828
+ App_Org_Id;
14829
+ CreatedDate;
14830
+ CreatedUser;
14831
+ UpdatedDate;
14832
+ UpdatedUser;
14833
+ IsActive;
14834
+ WF_Template_Id;
14835
+ Code;
14836
+ Name;
14837
+ StageType;
14838
+ SeqValue;
14839
+ LimitValue;
14840
+ IsRequireUser;
14841
+ NumberDay;
14842
+ // #endregion properties
14843
+ ListAction;
14844
+ ListAction_Delete;
14845
+ OrgName;
14846
+ Status;
14847
+ CurrentActionId;
14848
+ CurrentActionText;
14849
+ DocId;
14850
+ ListActionByRole;
14851
+ IsEdit;
14852
+ IsEditUser;
14853
+ IsDone;
14854
+ TempId;
14855
+ IsChange;
14856
+ StartDate;
14857
+ EndDate;
14858
+ ListEmailNoti;
14859
+ constructor(obj) {
14860
+ obj = obj || {};
14861
+ this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;
14862
+ this.App_Org_Id = obj.App_Org_Id || '';
14863
+ this.CreatedDate = obj.CreatedDate || null;
14864
+ this.CreatedUser = obj.CreatedUser || '';
14865
+ this.UpdatedDate = obj.UpdatedDate || null;
14866
+ this.UpdatedUser = obj.UpdatedUser || '';
14867
+ this.IsActive = obj.IsActive || null;
14868
+ this.WF_Template_Id = obj.WF_Template_Id || null;
14869
+ this.Code = obj.Code || '';
14870
+ this.Name = obj.Name || '';
14871
+ this.StageType = obj.StageType || '';
14872
+ this.SeqValue = obj.SeqValue || null;
14873
+ this.LimitValue = obj.LimitValue || null;
14874
+ this.OrgName = obj.OrgName || '';
14875
+ this.Status = obj.Status || 'pending';
14876
+ this.CurrentActionId = obj.CurrentActionId || '';
14877
+ this.CurrentActionText = obj.CurrentActionText || '';
14878
+ this.DocId = obj.DocId || '';
14879
+ this.IsEdit = obj.IsEdit || false;
14880
+ this.IsEditUser = obj.IsEditUser || false;
14881
+ this.IsRequireUser = obj.IsRequireUser || false;
14882
+ this.IsDone = obj.IsDone || false;
14883
+ this.TempId = obj.TempId || null;
14884
+ this.IsChange = obj.IsChange || false;
14885
+ this.NumberDay = obj.NumberDay || null;
14886
+ this.ListAction_Delete = obj.ListAction_Delete || [];
14887
+ this.StartDate = obj.StartDate || null;
14888
+ this.EndDate = obj.EndDate || null;
14889
+ this.ListEmailNoti = obj.ListEmailNoti || [];
14890
+ this.ListAction = (obj.ListAction || []).map((s) => new WF_TemplateStageAction(s));
14891
+ this.ListActionByRole = (obj.ListActionByRole || []).map((s) => new WF_TemplateStageAction(s));
14892
+ }
14893
+ }
14894
+ class WF_TemplateStageFilter extends GridFilter {
14895
+ WF_TemplateStage_Id;
14896
+ App_Org_Id;
14897
+ CreatedDate;
14898
+ CreatedUser;
14899
+ UpdatedDate;
14900
+ UpdatedUser;
14901
+ IsActive;
14902
+ WF_Template_Id;
14903
+ Code;
14904
+ Name;
14905
+ StageType;
14906
+ SeqValue;
14907
+ LimitValue;
14908
+ IsRequireUser;
14909
+ NumberDay;
14910
+ constructor(obj) {
14911
+ super();
14912
+ obj = obj || {};
14913
+ this.WF_TemplateStage_Id = obj.WF_TemplateStage_Id || null;
14914
+ this.App_Org_Id = obj.App_Org_Id || null;
14915
+ this.CreatedDate = obj.CreatedDate || null;
14916
+ this.CreatedUser = obj.CreatedUser || null;
14917
+ this.UpdatedDate = obj.UpdatedDate || null;
14918
+ this.UpdatedUser = obj.UpdatedUser || null;
14919
+ this.IsActive = obj.IsActive || null;
14920
+ this.WF_Template_Id = obj.WF_Template_Id || null;
14921
+ this.Code = obj.Code || null;
14922
+ this.Name = obj.Name || null;
14923
+ this.StageType = obj.StageType || null;
14924
+ this.SeqValue = obj.SeqValue || null;
14925
+ this.LimitValue = obj.LimitValue || null;
14926
+ this.IsRequireUser = obj.IsRequireUser || false;
14927
+ this.NumberDay = obj.NumberDay || null;
14928
+ }
14929
+ }
14930
+
14931
+ class WF_Template {
14932
+ // #region properties
14933
+ WF_Template_Id;
14934
+ App_Org_Id;
14935
+ CreatedDate;
14936
+ CreatedUser;
14937
+ UpdatedDate;
14938
+ UpdatedUser;
14939
+ IsActive;
14940
+ Code;
14941
+ Name;
14942
+ DocType;
14943
+ Description;
14944
+ TemplatePrint;
14945
+ // #endregion properties
14946
+ ListStage;
14947
+ ListStage_Delete;
14948
+ IsUsed;
14949
+ DocTypeName;
14950
+ NumberStage;
14951
+ constructor(obj) {
14952
+ obj = obj || {};
14953
+ this.WF_Template_Id = obj.WF_Template_Id || 0;
14954
+ this.App_Org_Id = obj.App_Org_Id || '';
14955
+ this.CreatedDate = obj.CreatedDate || null;
14956
+ this.CreatedUser = obj.CreatedUser || '';
14957
+ this.UpdatedDate = obj.UpdatedDate || null;
14958
+ this.UpdatedUser = obj.UpdatedUser || '';
14959
+ this.IsActive = obj.IsActive || null;
14960
+ this.Code = obj.Code || '';
14961
+ this.Name = obj.Name || '';
14962
+ this.DocType = obj.DocType || '';
14963
+ this.Description = obj.Description || '';
14964
+ this.TemplatePrint = obj.TemplatePrint || null;
14965
+ this.ListStage_Delete = obj.ListStage_Delete || [];
14966
+ this.IsUsed = obj.IsUsed || false;
14967
+ this.DocTypeName = obj.DocTypeName || null;
14968
+ this.NumberStage = obj.NumberStage || 0;
14969
+ this.ListStage = (obj.ListStage || []).map((s) => new WF_TemplateStage(s));
14970
+ }
14971
+ }
14972
+ class WF_TemplateFilter extends GridFilter {
14973
+ WF_Template_Id;
14974
+ App_Org_Id;
14975
+ CreatedDate;
14976
+ CreatedUser;
14977
+ UpdatedDate;
14978
+ UpdatedUser;
14979
+ IsActive;
14980
+ Code;
14981
+ Name;
14982
+ DocType;
14983
+ Description;
14984
+ TemplatePrint;
14985
+ constructor(obj) {
14986
+ super();
14987
+ obj = obj || {};
14988
+ this.WF_Template_Id = obj.WF_Template_Id || null;
14989
+ this.App_Org_Id = obj.App_Org_Id || null;
14990
+ this.CreatedDate = obj.CreatedDate || null;
14991
+ this.CreatedUser = obj.CreatedUser || null;
14992
+ this.UpdatedDate = obj.UpdatedDate || null;
14993
+ this.UpdatedUser = obj.UpdatedUser || null;
14994
+ this.IsActive = obj.IsActive || null;
14995
+ this.Code = obj.Code || null;
14996
+ this.Name = obj.Name || null;
14997
+ this.DocType = obj.DocType || null;
14998
+ this.Description = obj.Description || null;
14999
+ this.TemplatePrint = obj.TemplatePrint || null;
15000
+ }
15001
+ }
15002
+
15003
+ class WF_TemplateList extends BaseComponent {
15004
+ _wfService = inject(WFService);
15005
+ filter = new WF_TemplateFilter();
15006
+ pagingData = new PagingData();
15007
+ ngOnInit() {
15008
+ this.getData();
15009
+ Breadcrumb.lstBreadcrumb = [
15010
+ {
15011
+ Name: 'Workflow tempalate',
15012
+ Click: () => this.getData(),
15013
+ },
15014
+ ];
15015
+ }
15016
+ getData() {
15017
+ this._wfService.getPaging(this.filter).then((res) => {
15018
+ this.pagingData = res.Data || new PagingData();
15019
+ }, (err) => this.handleError(err));
15020
+ }
15021
+ onQueryParamsChange(pageIndex, pageSize) {
15022
+ this.filter.PageIndex = pageIndex;
15023
+ this.filter.PageSize = pageSize;
15024
+ this.getData();
15025
+ }
15026
+ detail(template) {
15027
+ if (template) {
15028
+ this.goto('/workflow/template/' + template.WF_Template_Id);
15029
+ }
15030
+ else {
15031
+ this.goto('NEW');
15032
+ }
15033
+ }
15034
+ async delete(row) {
15035
+ if (row.WF_Template_Id && (await this.confirm('Xóa template??'))) {
15036
+ this._wfService.deleteTemplate(row.WF_Template_Id).then((res) => {
15037
+ this.notiService.success();
15038
+ this.getData();
15039
+ }, (err) => this.handleError(err));
15040
+ }
15041
+ }
15042
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WF_TemplateList, deps: null, target: i0.ɵɵFactoryTarget.Component });
15043
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: WF_TemplateList, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row [nzGutter]=\"[32, 0]\">\r\n <div nz-col [nzSpan]=\"12\">\r\n <div nz-flex nzGap=\"small\">\r\n <button nz-button nzType=\"primary\" (click)=\"detail()\">{{ TranslateKey.ADD | translate }}</button>\r\n <button nz-button nzType=\"primary\" (click)=\"getData()\">{{ TranslateKey.SEARCH | translate }}</button>\r\n </div>\r\n </div>\r\n\r\n <div nz-col [nzSpan]=\"12\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"pagingData.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"pagingData.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"75px\">#</th>\r\n <th nzWidth=\"50px\">#</th>\r\n <th>Code</th>\r\n <th>Name</th>\r\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td class=\"text-center\">\r\n <nz-icon\r\n nzType=\"edit\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"detail(row)\"\r\n ></nz-icon>\r\n <box [width]=\"5\"></box>\r\n <a (click)=\"delete(row)\">\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <span class=\"link-detail\" (click)=\"goto('/workflow/template/' + row.WF_Template_Id)\">{{ row.Code }}</span>\r\n </td>\r\n <td>{{ row.Name }}</td>\r\n <td class=\"text-center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n } @else {\r\n <nz-icon nzType=\"close\" nzTheme=\"outline\" class=\"color-warn\" />\r\n }\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n</div>\r\n<!-- \r\n<nz-dropdown-menu #searchNameMenu=\"nzDropdownMenu\">\r\n <div class=\"ant-table-filter-dropdown\">\r\n <div class=\"search-box\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"filter.Name\"\r\n [appAutoFocus]=\"isDropdownVisible\"\r\n (keyup.enter)=\"search()\"\r\n />\r\n <button nz-button nzSize=\"small\" nzType=\"primary\" (click)=\"search()\" class=\"search-button\">\r\n {{ \"SEARCH\" | translate }}\r\n </button>\r\n <button nz-button nzSize=\"small\" (click)=\"filter.Name = ''; search()\">{{ \"RESET\" | translate }}</button>\r\n </div>\r\n </div>\r\n</nz-dropdown-menu>\r\n<nz-dropdown-menu #searchParentNameMenu=\"nzDropdownMenu\">\r\n <div class=\"ant-table-filter-dropdown\">\r\n <div class=\"search-box\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"filter.ParentName\"\r\n [appAutoFocus]=\"isDropdownVisible\"\r\n (keyup.enter)=\"search()\"\r\n />\r\n <button nz-button nzSize=\"small\" nzType=\"primary\" (click)=\"search()\" class=\"search-button\">\r\n {{ \"SEARCH\" | translate }}\r\n </button>\r\n <button nz-button nzSize=\"small\" (click)=\"filter.ParentName = ''; search()\">{{ \"RESET\" | translate }}</button>\r\n </div>\r\n </div>\r\n</nz-dropdown-menu> -->\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$3.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i6$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i6$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i6$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i6$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i6$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i6$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$3.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }] });
15044
+ }
15045
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WF_TemplateList, decorators: [{
15046
+ type: Component,
15047
+ args: [{ imports: [
15048
+ CommonModule,
15049
+ NzGridModule,
15050
+ NzFlexModule,
15051
+ NzTableModule,
15052
+ NzPaginationModule,
15053
+ TranslateModule,
15054
+ NzIconModule,
15055
+ Box,
15056
+ RouterModule,
15057
+ NzButtonModule,
15058
+ ], template: "<div nz-row [nzGutter]=\"[0, 8]\">\r\n <div nz-col nzSpan=\"24\">\r\n <div nz-row [nzGutter]=\"[32, 0]\">\r\n <div nz-col [nzSpan]=\"12\">\r\n <div nz-flex nzGap=\"small\">\r\n <button nz-button nzType=\"primary\" (click)=\"detail()\">{{ TranslateKey.ADD | translate }}</button>\r\n <button nz-button nzType=\"primary\" (click)=\"getData()\">{{ TranslateKey.SEARCH | translate }}</button>\r\n </div>\r\n </div>\r\n\r\n <div nz-col [nzSpan]=\"12\">\r\n <div nz-flex nzJustify=\"end\">\r\n <nz-pagination\r\n [nzSize]=\"'small'\"\r\n [nzPageIndex]=\"filter.PageIndex + 1\"\r\n [nzPageSize]=\"filter.PageSize\"\r\n [nzTotal]=\"pagingData.TotalCount || 0\"\r\n [nzShowSizeChanger]=\"true\"\r\n [nzShowTotal]=\"showTotalTpl\"\r\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\r\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\r\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\r\n >\r\n </nz-pagination>\r\n\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table\r\n #table\r\n [nzData]=\"pagingData.LstItem || []\"\r\n [nzBordered]=\"true\"\r\n [nzSize]=\"'small'\"\r\n [nzFrontPagination]=\"false\"\r\n >\r\n <ng-template #showTotalTpl let-total let-range=\"range\">\r\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\r\n </ng-template>\r\n <thead>\r\n <tr>\r\n <th nzWidth=\"75px\">#</th>\r\n <th nzWidth=\"50px\">#</th>\r\n <th>Code</th>\r\n <th>Name</th>\r\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of table.data; track $index; let i = $index) {\r\n <tr>\r\n <td class=\"text-center\">\r\n <nz-icon\r\n nzType=\"edit\"\r\n nzTheme=\"outline\"\r\n class=\"color-primary cursor-pointer icon-size-16\"\r\n (click)=\"detail(row)\"\r\n ></nz-icon>\r\n <box [width]=\"5\"></box>\r\n <a (click)=\"delete(row)\">\r\n <i nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn cursor-pointer icon-size-16\"></i>\r\n </a>\r\n </td>\r\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\r\n <td>\r\n <span class=\"link-detail\" (click)=\"goto('/workflow/template/' + row.WF_Template_Id)\">{{ row.Code }}</span>\r\n </td>\r\n <td>{{ row.Name }}</td>\r\n <td class=\"text-center\">\r\n @if (row.IsActive) {\r\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\r\n } @else {\r\n <nz-icon nzType=\"close\" nzTheme=\"outline\" class=\"color-warn\" />\r\n }\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n</div>\r\n<!-- \r\n<nz-dropdown-menu #searchNameMenu=\"nzDropdownMenu\">\r\n <div class=\"ant-table-filter-dropdown\">\r\n <div class=\"search-box\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"filter.Name\"\r\n [appAutoFocus]=\"isDropdownVisible\"\r\n (keyup.enter)=\"search()\"\r\n />\r\n <button nz-button nzSize=\"small\" nzType=\"primary\" (click)=\"search()\" class=\"search-button\">\r\n {{ \"SEARCH\" | translate }}\r\n </button>\r\n <button nz-button nzSize=\"small\" (click)=\"filter.Name = ''; search()\">{{ \"RESET\" | translate }}</button>\r\n </div>\r\n </div>\r\n</nz-dropdown-menu>\r\n<nz-dropdown-menu #searchParentNameMenu=\"nzDropdownMenu\">\r\n <div class=\"ant-table-filter-dropdown\">\r\n <div class=\"search-box\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"filter.ParentName\"\r\n [appAutoFocus]=\"isDropdownVisible\"\r\n (keyup.enter)=\"search()\"\r\n />\r\n <button nz-button nzSize=\"small\" nzType=\"primary\" (click)=\"search()\" class=\"search-button\">\r\n {{ \"SEARCH\" | translate }}\r\n </button>\r\n <button nz-button nzSize=\"small\" (click)=\"filter.ParentName = ''; search()\">{{ \"RESET\" | translate }}</button>\r\n </div>\r\n </div>\r\n</nz-dropdown-menu> -->\r\n" }]
15059
+ }] });
15060
+
15061
+ class WF_TemplateDetail extends BaseComponent {
15062
+ _orgService = inject(OrgService);
15063
+ _roleService = inject(RoleService);
15064
+ _wfService = inject(WFService);
15065
+ _mailTemplateService = inject(MailTemplateService);
15066
+ lstOrg = [];
15067
+ lstRole = [];
15068
+ lstEmailTemplate = [];
15069
+ lstAllTemplate = [];
15070
+ lstAllStage = [];
15071
+ lstAllAction = [];
15072
+ template = new Workflow();
15073
+ lstStage = [];
15074
+ lstAction = [];
15075
+ lstActionRef = [];
15076
+ wfeditor;
15077
+ ngOnInit() {
15078
+ this.getData();
15079
+ this.getMasterData();
15080
+ this.updateBreadcrumb();
15081
+ }
15082
+ ngOnDestroy() { }
15083
+ updateBreadcrumb() {
15084
+ Breadcrumb.lstBreadcrumb = [
15085
+ {
15086
+ Name: 'Workflow tempalate',
15087
+ URL: '/workflow/template',
15088
+ },
15089
+ {
15090
+ Name: this.template.WF_Template_Id ? `${this.template.Code} - ${this.template.Name}` : 'NEW',
15091
+ },
15092
+ ];
15093
+ }
15094
+ async getData(id) {
15095
+ const templateId = id || this.getUrlParam('id');
15096
+ this._wfService.getDataForRule(templateId).then((res) => {
15097
+ this.lstAllTemplate = res.Data.LstAllTemplate || [];
15098
+ this.lstAllStage = res.Data.LstAllStage || [];
15099
+ this.lstAllAction = res.Data.LstAllAction || [];
15100
+ this.wfeditor.lstAllTemplate = this.lstAllTemplate;
15101
+ this.wfeditor.lstAllStage = this.lstAllStage;
15102
+ this.wfeditor.lstAllAction = this.lstAllAction;
15103
+ }, (err) => this.handleError(err));
15104
+ if (templateId && templateId != 'NEW') {
15105
+ this._wfService.getWfData(templateId).then((res) => {
15106
+ if (res.Data) {
15107
+ this.template = res.Data.Template || {};
15108
+ this.lstStage = res.Data.LstStage || [];
15109
+ this.lstAction = res.Data.LstAction || [];
15110
+ this.lstActionRef = res.Data.LstActionRef || [];
15111
+ this.wfeditor.template = this.template;
15112
+ this.wfeditor.lstStage = this.lstStage;
15113
+ this.wfeditor.lstAction = this.lstAction;
15114
+ this.wfeditor.lstActionRef = this.lstActionRef;
15115
+ this.wfeditor.afterInput();
15116
+ this.updateBreadcrumb();
15117
+ }
15118
+ }, (err) => this.handleError(err));
15119
+ }
15120
+ else {
15121
+ setTimeout(() => {
15122
+ this.template = new Workflow();
15123
+ this.lstStage = [];
15124
+ this.lstAction = [];
15125
+ this.lstActionRef = [];
15126
+ this.wfeditor.template = this.template;
15127
+ this.wfeditor.lstStage = this.lstStage;
15128
+ this.wfeditor.lstAction = this.lstAction;
15129
+ this.wfeditor.lstActionRef = this.lstActionRef;
15130
+ this.wfeditor.afterInput();
15131
+ }, 0);
15132
+ }
15133
+ }
15134
+ getMasterData() {
15135
+ this._orgService.getAll().then((res) => {
15136
+ let lstOrg = res.Data;
15137
+ this.lstOrg = lstOrg.map((x) => {
15138
+ return { App_Org_Id: x.App_Org_Id || '', Code: x.Code || '', Name: x.TreeNodeName || '' };
15139
+ });
15140
+ });
15141
+ this._roleService.getAll().then((res) => (this.lstRole = res.Data || []));
15142
+ this._mailTemplateService.getAll().then((res) => (this.lstEmailTemplate = res.Data || []));
15143
+ }
15144
+ save(data) {
15145
+ console.log('save', data);
15146
+ // return;
15147
+ this._wfService
15148
+ .saveWF({
15149
+ Template: data.template,
15150
+ LstStage: data.lstStage,
15151
+ LstAction: data.lstAction,
15152
+ LstActionRef: data.lstActionRef,
15153
+ })
15154
+ .then((res) => {
15155
+ this.notiService.success();
15156
+ this.goto('/workflow/template/' + res.Data);
15157
+ this.getData(res.Data);
15158
+ }, (err) => {
15159
+ this.handleError(err);
15160
+ this.wfeditor.ready = true;
15161
+ });
15162
+ }
15163
+ deleteStage(stage) {
15164
+ if (stage.IsTempId)
15165
+ return;
15166
+ this._wfService.deleteStage(stage.WF_TemplateStage_Id).then((res) => {
15167
+ this.notiService.success();
15168
+ this.getData();
15169
+ }, (err) => this.handleError(err));
15170
+ }
15171
+ deleteAction(action) {
15172
+ if (!action.WF_TemplateStageAction_Id)
15173
+ return;
15174
+ this._wfService.deleteAction(action.WF_TemplateStageAction_Id).then((res) => {
15175
+ this.notiService.success();
15176
+ this.getData();
15177
+ }, (err) => this.handleError(err));
15178
+ }
15179
+ deleteRule(obj) {
15180
+ this._wfService.deleteRule(obj.WF_TemplateStageAction_Id, obj.WF_TransitionsRule_Id).then((res) => {
15181
+ this.notiService.success();
15182
+ this.getData();
15183
+ }, (err) => {
15184
+ this.handleError(err);
15185
+ this.getData();
15186
+ });
15187
+ }
15188
+ deleteRuleLine(ruleLineId) {
15189
+ this._wfService.deleteRuleLine(ruleLineId).then((res) => {
15190
+ this.notiService.success();
15191
+ // this.getData();
15192
+ }, (err) => {
15193
+ this.handleError(err);
15194
+ this.getData();
15195
+ });
15196
+ }
15197
+ onCheckRule(data) {
15198
+ this._wfService.checkRule(data.ruleline, data.sourceActionId).then((res) => {
15199
+ if (res.IsSuccess) {
15200
+ this.success('Rule OK', res.Data, { showPopup: true, popupWidth: '30vw' });
15201
+ }
15202
+ else {
15203
+ this.error('Rule NOT OK', res.ErrorMessage, { showPopup: true, popupWidth: '30vw' });
15204
+ }
15205
+ }, (err) => this.handleError(err));
15206
+ }
15207
+ async onCheckAllRule(data) {
15208
+ const lstruleline = data.lstruleline;
15209
+ const sourceActionId = data.sourceActionId;
15210
+ for (let i = 0; i < lstruleline.length; i++) {
15211
+ const ruleline = lstruleline[i];
15212
+ const res = await this._wfService.checkRule(ruleline, sourceActionId);
15213
+ if (!res.IsSuccess) {
15214
+ this.error('Rule NOT OK', res.ErrorMessage, { showPopup: true });
15215
+ return;
15216
+ }
15217
+ }
15218
+ this.wfeditor.actionRuleModalVisible = false;
15219
+ }
15220
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WF_TemplateDetail, deps: null, target: i0.ɵɵFactoryTarget.Component });
15221
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: WF_TemplateDetail, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "wfeditor", first: true, predicate: ["wfeditor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"workflow-wrapper\" style=\"height: calc(100vh - 110px)\">\r\n <app-workflow-editor\r\n #wfeditor\r\n [lstOrg]=\"lstOrg\"\r\n [lstRole]=\"lstRole\"\r\n [lstEmailTemplate]=\"lstEmailTemplate\"\r\n (onSave)=\"save($event)\"\r\n (onDeleteStage)=\"deleteStage($event)\"\r\n (onDeleteAction)=\"deleteAction($event)\"\r\n (onDeleteRule)=\"deleteRule($event)\"\r\n (onDeleteRuleLine)=\"deleteRuleLine($event)\"\r\n (onCheckRule)=\"onCheckRule($event)\"\r\n (onCheckAllRule)=\"onCheckAllRule($event)\"\r\n ></app-workflow-editor>\r\n</div>\r\n", styles: [".workflow-wrapper{position:relative}\n"], dependencies: [{ kind: "component", type: WorkflowEditorComponent, selector: "app-workflow-editor", inputs: ["lstOrg", "lstRole", "lstEmailTemplate"], outputs: ["onSave", "onDeleteStage", "onDeleteAction", "onDeleteRule", "onDeleteRuleLine", "onCheckRule", "onCheckAllRule"] }] });
15222
+ }
15223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WF_TemplateDetail, decorators: [{
15224
+ type: Component,
15225
+ args: [{ imports: [WorkflowEditorComponent], template: "<div class=\"workflow-wrapper\" style=\"height: calc(100vh - 110px)\">\r\n <app-workflow-editor\r\n #wfeditor\r\n [lstOrg]=\"lstOrg\"\r\n [lstRole]=\"lstRole\"\r\n [lstEmailTemplate]=\"lstEmailTemplate\"\r\n (onSave)=\"save($event)\"\r\n (onDeleteStage)=\"deleteStage($event)\"\r\n (onDeleteAction)=\"deleteAction($event)\"\r\n (onDeleteRule)=\"deleteRule($event)\"\r\n (onDeleteRuleLine)=\"deleteRuleLine($event)\"\r\n (onCheckRule)=\"onCheckRule($event)\"\r\n (onCheckAllRule)=\"onCheckAllRule($event)\"\r\n ></app-workflow-editor>\r\n</div>\r\n", styles: [".workflow-wrapper{position:relative}\n"] }]
15226
+ }], propDecorators: { wfeditor: [{
15227
+ type: ViewChild,
15228
+ args: ['wfeditor']
15229
+ }] } });
15230
+
14384
15231
  /**
14385
15232
  * Generated bundle index. Do not edit.
14386
15233
  */
14387
15234
 
14388
- export { ABAC_RULES_TOKEN, ActionRule, ActionRuleLine, AnimatedDigitComponent, AppGlobals, AppStorage, App_Dic_Domain, App_Dic_DomainFilter, App_File, App_Menu$1 as App_Menu, App_Org, App_Role, App_Role_Menu_Ref, App_Setting, App_SettingFilter, App_User, AuthGuard, AuthService, AutoFocusDirective, BarGraphComponent, BaseComponent, BaseGuardChangeComponent, BaseOverlayComponent, Box, Breadcrumb, CacheListComponent, CheckModel, CommonService, ConfigComponent, CustomNotiComponent, CustomNotiService, DashcardComponent, DateInputParserDirective, DateTimeHelper, DicDomainListComponent, DicDomainPipe, DicDomainSelectComponent$1 as DicDomainSelectComponent, DicDomainService, DocTemplate, DoughnutGraphComponent, DownloadHelper, DurationFormatPipe, DynamicBuildFormComponent, ENUM_ResponseType, ExpandableSearchComponent, ExtendCheckbox, ExtendCheckbox3Value, ExtendDatePicker, ExtendDateRangePicker, ExtendInput, ExtendInputNumber, ExtendPaginationComponent, ExtendSelectComponent, ExtendTableComponent, ExtendTextArea, FileFilter, FileListComponent, FileService, FormatBytesPipe, GlobalSpinnerComponent, GridFilter, H3Icon, HTTPService, HasPermissionDirective, HasPermissionPipe, HideIfErrorDirective, HighlightPipe, IconAdd, IconCheck, IconClose, IconDelete, IconEdit, IconSave, IconSearch, IconView, LayoutComponent, LimitLettersPipe, LimitWordsPipe, LineGraphComponent, LoadingService, LogAppComponent, LogServerComponent, LogServerDetailComponent, LoginComponent, MailTemplateService, MenuDetailComponent, MenuFilter, MenuListComponent, MenuService, MonitorComponent, NoPermission, Nodata, NotiService, NullIfEmptyDirective, NumberOnlyDirective, OrderOption, OrgDetailComponent, OrgFilter, OrgListComponent, OrgService, PagingData, PagingModel, PdfViewerComponent, PermissionComponent, PermissionService$1 as PermissionService, ReadMoreProComponent, RoleDetailComponent, RoleFilter, RoleListComponent, RoleService, RouteMonitorService, SequenceDetailComponent, SequenceListComponent, SessionManagerService, SettingListComponent, SettingService$1 as SettingService, SynologyComponent, TableHeader, ThemeService, TokenStorage, TranslateKey, URLs$e as URLs, UnsavedChangesGuard, UpperCaseFirsLetterEachWordDirective, UppercaseDirective, UppercaseFirstLetterDirective, UserDetailComponent, UserFilter, UserListComponent, UserProfileComponent, UserProfileService, UserService, VersionComponent, VscService, WF_TemplateActionRef, WF_TransitionRule, WF_TransitionRuleLine, Workflow, WorkflowAction, WorkflowActionEditorOption, WorkflowActionRef, WorkflowEditorComponent, WorkflowEditorOption, WorkflowStage, WorkflowStageEditorOption, XLSXHelper, authInterceptor };
15235
+ export { ABAC_RULES_TOKEN, ActionRule, ActionRuleLine, AnimatedDigitComponent, AppGlobals, AppStorage, App_Dic_Domain, App_Dic_DomainFilter, App_File, App_Menu$1 as App_Menu, App_Org, App_Role, App_Role_Menu_Ref, App_Setting, App_SettingFilter, App_User, AuthGuard, AuthService, AutoFocusDirective, BarGraphComponent, BaseComponent, BaseGuardChangeComponent, BaseOverlayComponent, Box, Breadcrumb, CacheListComponent, CheckModel, CommonService, ConfigComponent, CustomNotiComponent, CustomNotiService, DashcardComponent, DateInputParserDirective, DateTimeHelper, DicDomainListComponent, DicDomainPipe, DicDomainSelectComponent$1 as DicDomainSelectComponent, DicDomainService, DocTemplate, DoughnutGraphComponent, DownloadHelper, DurationFormatPipe, DynamicBuildFormComponent, ENUM_ResponseType, ExpandableSearchComponent, ExtendCheckbox, ExtendCheckbox3Value, ExtendDatePicker, ExtendDateRangePicker, ExtendInput, ExtendInputNumber, ExtendPaginationComponent, ExtendSelectComponent, ExtendTableComponent, ExtendTextArea, FileFilter, FileListComponent, FileService, FormatBytesPipe, GlobalSpinnerComponent, GridFilter, H3Icon, HTTPService, HasPermissionDirective, HasPermissionPipe, HideIfErrorDirective, HighlightPipe, IconAdd, IconCheck, IconClose, IconDelete, IconEdit, IconSave, IconSearch, IconView, LayoutComponent, LimitLettersPipe, LimitWordsPipe, LineGraphComponent, LoadingService, LogAppComponent, LogServerComponent, LogServerDetailComponent, LoginComponent, MailTemplateService, MenuDetailComponent, MenuFilter, MenuListComponent, MenuService, MonitorComponent, NoPermission, Nodata, NotiService, NullIfEmptyDirective, NumberOnlyDirective, OrderOption, OrgDetailComponent, OrgFilter, OrgListComponent, OrgService, PagingData, PagingModel, PdfViewerComponent, PermissionComponent, PermissionService$1 as PermissionService, ReadMoreProComponent, RegisterComponent, RoleDetailComponent, RoleFilter, RoleListComponent, RoleService, RouteMonitorService, SequenceDetailComponent, SequenceListComponent, SessionManagerService, SettingListComponent, SettingService$1 as SettingService, SynologyComponent, TableHeader, ThemeService, TokenStorage, TranslateKey, URLs$f as URLs, UnsavedChangesGuard, UpperCaseFirsLetterEachWordDirective, UppercaseDirective, UppercaseFirstLetterDirective, UserDetailComponent, UserFilter, UserListComponent, UserProfileComponent, UserProfileService, UserService, VersionComponent, VscService, WF_TemplateActionRef$1 as WF_TemplateActionRef, WF_TemplateDetail, WF_TemplateList, WF_TransitionRule, WF_TransitionRuleLine, Workflow, WorkflowAction, WorkflowActionEditorOption, WorkflowActionRef, WorkflowEditorComponent, WorkflowEditorOption, WorkflowStage, WorkflowStageEditorOption, XLSXHelper, authInterceptor };
14389
15236
  //# sourceMappingURL=brggroup-share-lib.mjs.map