@yelon/bis 17.2.2 → 17.3.1

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 (31) hide show
  1. package/README.md +1 -0
  2. package/esm2022/layout/layout-basic.component.mjs +202 -70
  3. package/esm2022/layout/layout-nav-application.component.mjs +48 -44
  4. package/esm2022/layout/layout-nav-group.component.mjs +13 -10
  5. package/esm2022/layout/layout-nav-tile.component.mjs +3 -3
  6. package/esm2022/layout/layout.module.mjs +4 -4
  7. package/esm2022/src/bis.module.mjs +4 -4
  8. package/esm2022/src/helper.mjs +2 -2
  9. package/esm2022/src/startup.service.mjs +11 -9
  10. package/esm2022/src/yunzai-act.guard.mjs +3 -3
  11. package/esm2022/src/yunzai-analysis-addon.guard.mjs +3 -3
  12. package/esm2022/yunzai-widgets/yunzai-clear-storage.component.mjs +3 -3
  13. package/esm2022/yunzai-widgets/yunzai-fullscreen.component.mjs +3 -3
  14. package/esm2022/yunzai-widgets/yunzai-i18n.component.mjs +3 -3
  15. package/esm2022/yunzai-widgets/yunzai-notify.component.mjs +6 -5
  16. package/esm2022/yunzai-widgets/yunzai-user.component.mjs +7 -6
  17. package/esm2022/yunzai-widgets/yunzai-widget.module.mjs +4 -4
  18. package/fesm2022/bis.mjs +23 -21
  19. package/fesm2022/bis.mjs.map +1 -1
  20. package/fesm2022/layout.mjs +267 -128
  21. package/fesm2022/layout.mjs.map +1 -1
  22. package/fesm2022/yunzai-widgets.mjs +24 -22
  23. package/fesm2022/yunzai-widgets.mjs.map +1 -1
  24. package/layout/layout-basic.component.d.ts +23 -2
  25. package/layout/layout-nav-group.component.d.ts +1 -0
  26. package/layout/style/index.less +58 -30
  27. package/package.json +12 -12
  28. package/src/startup.service.d.ts +10 -8
  29. package/theme-default.less +11 -9
  30. package/yunzai-widgets/yunzai-notify.component.d.ts +1 -0
  31. package/yunzai-widgets/yunzai-user.component.d.ts +1 -0
@@ -16,20 +16,27 @@ import * as i3 from 'ng-zorro-antd/input';
16
16
  import { NzInputModule } from 'ng-zorro-antd/input';
17
17
  import * as i4$1 from 'ng-zorro-antd/tabs';
18
18
  import { NzTabsModule } from 'ng-zorro-antd/tabs';
19
+ import { HttpClient } from '@angular/common/http';
19
20
  import * as i2$2 from '@angular/router';
20
21
  import { RouterModule } from '@angular/router';
21
22
  import * as i3$2 from '@yelon/abc/reuse-tab';
22
23
  import { ReuseTabModule } from '@yelon/abc/reuse-tab';
23
- import * as i10 from '@yelon/bis/yunzai-widgets';
24
+ import * as i13 from '@yelon/bis/yunzai-widgets';
24
25
  import { YunzaiWidgetsModule } from '@yelon/bis/yunzai-widgets';
25
26
  import { StompService } from '@yelon/socket';
26
27
  import * as i1$2 from '@yelon/theme/layout-default';
27
28
  import { LayoutDisplayService, LayoutDefaultModule } from '@yelon/theme/layout-default';
28
- import * as i9 from '@yelon/theme/theme-btn';
29
+ import * as i12 from '@yelon/theme/theme-btn';
29
30
  import { ThemeBtnModule } from '@yelon/theme/theme-btn';
30
- import { YunzaiConfigService, WINDOW, useLocalStorageHeader, NavType, useLocalStorageProjectInfo, hasFavicon, setFavicon, useLocalStorageCurrent, useLocalStorageHeaderType, useLocalStorageDefaultRoute, log } from '@yelon/util';
31
+ import { YunzaiConfigService, WINDOW, useLocalStorageHeader, YUNZAI_CONFIG, NavType, useLocalStorageProjectInfo, hasFavicon, setFavicon, useLocalStorageCurrent, useLocalStorageHeaderType, useLocalStorageDefaultRoute, log } from '@yelon/util';
31
32
  import * as i7 from 'ng-zorro-antd/avatar';
32
33
  import { NzAvatarModule } from 'ng-zorro-antd/avatar';
34
+ import * as i11 from 'ng-zorro-antd/descriptions';
35
+ import { NzDescriptionsModule } from 'ng-zorro-antd/descriptions';
36
+ import * as i9 from 'ng-zorro-antd/modal';
37
+ import { NzModalModule } from 'ng-zorro-antd/modal';
38
+ import * as i10 from 'ng-zorro-antd/skeleton';
39
+ import { NzSkeletonModule } from 'ng-zorro-antd/skeleton';
33
40
  import { Subject, takeUntil } from 'rxjs';
34
41
  import { mergeBisConfig } from '@yelon/bis/config';
35
42
  import * as i2$1 from 'ng-zorro-antd/menu';
@@ -176,8 +183,8 @@ class YunzaiNavApplicationComponent {
176
183
  ngOnDestroy() {
177
184
  this.destroy$.complete();
178
185
  }
179
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiNavApplicationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
180
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: YunzaiNavApplicationComponent, isStandalone: true, selector: "yunzai-layout-nav-application", ngImport: i0, template: `
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiNavApplicationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: YunzaiNavApplicationComponent, isStandalone: true, selector: "yunzai-layout-nav-application", ngImport: i0, template: `
181
188
  <ng-template #search>
182
189
  <div nz-row class="yz-application-list-search">
183
190
  <nz-input-group [nzPrefix]="prefixTemplate">
@@ -223,25 +230,27 @@ class YunzaiNavApplicationComponent {
223
230
 
224
231
  <div class="yz-application" id="navDropdown" nz-row *ngIf="state.active">
225
232
  <div nz-col [nzSpan]="3" class="yz-application-topic">
226
- @if (showAllMenu) {
227
- <div data-event-id="_nav_topic" data-name="全部应用" class="yz-application-text" (click)="attachNav('all')"
228
- >{{ 'mode.nav.all' | i18n }}
229
- </div>
230
- }
231
- @if (showMineMenu) {
232
- <div data-event-id="_nav_topic" data-name="我的应用" class="yz-application-text" (click)="attachNav('mine')"
233
- >{{ 'mode.nav.mine' | i18n }}
234
- </div>
235
- }
236
- @for (nav of state.topics; track nav) {
237
- <div
238
- data-event-id="_nav_topic"
239
- [attr.data-name]="nav.name | i18n"
240
- class="yz-application-text"
241
- (click)="attachNav('other', nav)"
242
- >{{ nav.name | i18n }}
243
- </div>
244
- }
233
+ <div class="yz-application-topic-list">
234
+ @if (showAllMenu) {
235
+ <div data-event-id="_nav_topic" data-name="全部应用" class="yz-application-text" (click)="attachNav('all')"
236
+ >{{ 'mode.nav.all' | i18n }}
237
+ </div>
238
+ }
239
+ @if (showMineMenu) {
240
+ <div data-event-id="_nav_topic" data-name="我的应用" class="yz-application-text" (click)="attachNav('mine')"
241
+ >{{ 'mode.nav.mine' | i18n }}
242
+ </div>
243
+ }
244
+ @for (nav of state.topics; track nav) {
245
+ <div
246
+ data-event-id="_nav_topic"
247
+ [attr.data-name]="nav.name | i18n"
248
+ class="yz-application-text"
249
+ (click)="attachNav('other', nav)"
250
+ >{{ nav.name | i18n }}
251
+ </div>
252
+ }
253
+ </div>
245
254
  </div>
246
255
  <div nz-col [nzSpan]="21" class="yz-application-container">
247
256
  @switch (state.type) {
@@ -258,7 +267,7 @@ class YunzaiNavApplicationComponent {
258
267
  </div>
259
268
  }
260
269
  @case ('other') {
261
- <div class="yz-application-list">
270
+ <div class="yz-application-list yz-application-list-other">
262
271
  <div class="yz-application-list-item">
263
272
  <ul>
264
273
  @for (nav of state.list; track nav) {
@@ -278,7 +287,7 @@ class YunzaiNavApplicationComponent {
278
287
  </div>
279
288
  `, isInline: true, dependencies: [{ kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i2.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.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i3.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i3.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i3.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: NzGridModule }] }); }
280
289
  }
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiNavApplicationComponent, decorators: [{
290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiNavApplicationComponent, decorators: [{
282
291
  type: Component,
283
292
  args: [{
284
293
  selector: `yunzai-layout-nav-application`,
@@ -328,25 +337,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
328
337
 
329
338
  <div class="yz-application" id="navDropdown" nz-row *ngIf="state.active">
330
339
  <div nz-col [nzSpan]="3" class="yz-application-topic">
331
- @if (showAllMenu) {
332
- <div data-event-id="_nav_topic" data-name="全部应用" class="yz-application-text" (click)="attachNav('all')"
333
- >{{ 'mode.nav.all' | i18n }}
334
- </div>
335
- }
336
- @if (showMineMenu) {
337
- <div data-event-id="_nav_topic" data-name="我的应用" class="yz-application-text" (click)="attachNav('mine')"
338
- >{{ 'mode.nav.mine' | i18n }}
339
- </div>
340
- }
341
- @for (nav of state.topics; track nav) {
342
- <div
343
- data-event-id="_nav_topic"
344
- [attr.data-name]="nav.name | i18n"
345
- class="yz-application-text"
346
- (click)="attachNav('other', nav)"
347
- >{{ nav.name | i18n }}
348
- </div>
349
- }
340
+ <div class="yz-application-topic-list">
341
+ @if (showAllMenu) {
342
+ <div data-event-id="_nav_topic" data-name="全部应用" class="yz-application-text" (click)="attachNav('all')"
343
+ >{{ 'mode.nav.all' | i18n }}
344
+ </div>
345
+ }
346
+ @if (showMineMenu) {
347
+ <div data-event-id="_nav_topic" data-name="我的应用" class="yz-application-text" (click)="attachNav('mine')"
348
+ >{{ 'mode.nav.mine' | i18n }}
349
+ </div>
350
+ }
351
+ @for (nav of state.topics; track nav) {
352
+ <div
353
+ data-event-id="_nav_topic"
354
+ [attr.data-name]="nav.name | i18n"
355
+ class="yz-application-text"
356
+ (click)="attachNav('other', nav)"
357
+ >{{ nav.name | i18n }}
358
+ </div>
359
+ }
360
+ </div>
350
361
  </div>
351
362
  <div nz-col [nzSpan]="21" class="yz-application-container">
352
363
  @switch (state.type) {
@@ -363,7 +374,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
363
374
  </div>
364
375
  }
365
376
  @case ('other') {
366
- <div class="yz-application-list">
377
+ <div class="yz-application-list yz-application-list-other">
367
378
  <div class="yz-application-list-item">
368
379
  <ul>
369
380
  @for (nav of state.list; track nav) {
@@ -391,6 +402,7 @@ class YunzaiLayoutNavGroupComponent {
391
402
  constructor() {
392
403
  this.http = inject(_HttpClient);
393
404
  this.destroy$ = new Subject();
405
+ this.win = inject(WINDOW);
394
406
  this.state = {
395
407
  topics: []
396
408
  };
@@ -411,24 +423,24 @@ class YunzaiLayoutNavGroupComponent {
411
423
  }
412
424
  switch (topic.target) {
413
425
  case 'href':
414
- inject(WINDOW).location.href = topic.url;
426
+ this.win.location.href = topic.url;
415
427
  break;
416
428
  case 'blank':
417
- inject(WINDOW).location.href = topic.url;
429
+ this.win.location.href = topic.url;
418
430
  break;
419
431
  case 'target':
420
- inject(WINDOW).location.href = topic.url;
432
+ this.win.location.href = topic.url;
421
433
  break;
422
434
  default:
423
- inject(WINDOW).location.href = topic.url;
435
+ this.win.location.href = topic.url;
424
436
  break;
425
437
  }
426
438
  }
427
439
  ngOnDestroy() {
428
440
  this.destroy$.complete();
429
441
  }
430
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutNavGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
431
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: YunzaiLayoutNavGroupComponent, isStandalone: true, selector: "yunzai-layout-nav-group", ngImport: i0, template: `
442
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutNavGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
443
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: YunzaiLayoutNavGroupComponent, isStandalone: true, selector: "yunzai-layout-nav-group", ngImport: i0, template: `
432
444
  <div class="yz-application-group">
433
445
  <nz-tabset>
434
446
  @for (menu of state.topics; track menu) {
@@ -462,8 +474,9 @@ class YunzaiLayoutNavGroupComponent {
462
474
  (click)="open(item)"
463
475
  >
464
476
  @if (item.icon) {
465
- <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>{{ item.name | i18n }}
477
+ <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>
466
478
  }
479
+ {{ item.name | i18n }}
467
480
  </li>
468
481
  </ng-container>
469
482
  }
@@ -477,7 +490,7 @@ class YunzaiLayoutNavGroupComponent {
477
490
  </div>
478
491
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i2$1.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i2$1.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i3$1.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "directive", type: i3$1.NzDropDownADirective, selector: "a[nz-dropdown]" }, { kind: "component", type: i3$1.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: NzTabsModule }, { kind: "component", type: i4$1.NzTabSetComponent, selector: "nz-tabset", inputs: ["nzSelectedIndex", "nzTabPosition", "nzTabBarExtraContent", "nzCanDeactivate", "nzAddIcon", "nzTabBarStyle", "nzType", "nzSize", "nzAnimated", "nzTabBarGutter", "nzHideAdd", "nzCentered", "nzHideAll", "nzLinkRouter", "nzLinkExact"], outputs: ["nzSelectChange", "nzSelectedIndexChange", "nzTabListScroll", "nzClose", "nzAdd"], exportAs: ["nzTabset"] }, { kind: "component", type: i4$1.NzTabComponent, selector: "nz-tab", inputs: ["nzTitle", "nzClosable", "nzCloseIcon", "nzDisabled", "nzForceRender"], outputs: ["nzSelect", "nzDeselect", "nzClick", "nzContextmenu"], exportAs: ["nzTab"] }] }); }
479
492
  }
480
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutNavGroupComponent, decorators: [{
493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutNavGroupComponent, decorators: [{
481
494
  type: Component,
482
495
  args: [{
483
496
  selector: `yunzai-layout-nav-group`,
@@ -515,8 +528,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
515
528
  (click)="open(item)"
516
529
  >
517
530
  @if (item.icon) {
518
- <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>{{ item.name | i18n }}
531
+ <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>
519
532
  }
533
+ {{ item.name | i18n }}
520
534
  </li>
521
535
  </ng-container>
522
536
  }
@@ -535,10 +549,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
535
549
  }] });
536
550
 
537
551
  class YunzaiLayoutNavTileComponent {
538
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutNavTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
539
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: YunzaiLayoutNavTileComponent, isStandalone: true, selector: "yunzai-layout-nav-tile", ngImport: i0, template: `<ng-template />`, isInline: true }); }
552
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutNavTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
553
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: YunzaiLayoutNavTileComponent, isStandalone: true, selector: "yunzai-layout-nav-tile", ngImport: i0, template: `<ng-template />`, isInline: true }); }
540
554
  }
541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutNavTileComponent, decorators: [{
555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutNavTileComponent, decorators: [{
542
556
  type: Component,
543
557
  args: [{
544
558
  selector: `yunzai-layout-nav-tile`,
@@ -552,6 +566,7 @@ class YunzaiLayoutBasicComponent {
552
566
  this.stomp = inject(StompService);
553
567
  this.win = inject(WINDOW);
554
568
  this.layoutDisplayService = inject(LayoutDisplayService);
569
+ this.conf = inject(YUNZAI_CONFIG);
555
570
  this.NavType = NavType;
556
571
  this.state = {
557
572
  options: {
@@ -570,6 +585,12 @@ class YunzaiLayoutBasicComponent {
570
585
  },
571
586
  navType: NavType.APPLICATION
572
587
  };
588
+ this.headerStyleList = [];
589
+ this.applicationModal = {
590
+ isVisible: false,
591
+ loading: false
592
+ };
593
+ this.httpClient = inject(HttpClient);
573
594
  }
574
595
  get options() {
575
596
  return this.state.options;
@@ -600,6 +621,7 @@ class YunzaiLayoutBasicComponent {
600
621
  return cascadingStyleSheet;
601
622
  }
602
623
  ngOnInit() {
624
+ this.config = this.conf.bis;
603
625
  this.initLogo();
604
626
  this.initFavicon();
605
627
  this.initNavType();
@@ -640,17 +662,19 @@ class YunzaiLayoutBasicComponent {
640
662
  const projectInfo = getProjectInfo();
641
663
  if (navType !== null) {
642
664
  this.state.navType = navType;
643
- return;
644
665
  }
645
- let fetchedNavType;
646
- if (projectInfo.headerStyle && projectInfo.headerStyle.length > 0) {
647
- fetchedNavType = projectInfo.headerStyle.pop()?.value;
666
+ else {
667
+ this.state.navType = NavType.APPLICATION;
648
668
  }
649
- // default value
650
- if (!fetchedNavType) {
651
- fetchedNavType = NavType.APPLICATION;
669
+ if (projectInfo.headerStyle && projectInfo.headerStyle.length > 0) {
670
+ this.headerStyleList = projectInfo.headerStyle;
671
+ const hasThis = this.headerStyleList.some(item => item.value === this.state.navType);
672
+ if (!hasThis) {
673
+ this.state.navType = projectInfo.headerStyle[0].value;
674
+ const [setHeaderType] = useLocalStorageHeaderType();
675
+ setHeaderType(this.state.navType);
676
+ }
652
677
  }
653
- this.state.navType = fetchedNavType;
654
678
  }
655
679
  toIndex() {
656
680
  const [, getDefaultRoute] = useLocalStorageDefaultRoute();
@@ -673,8 +697,30 @@ class YunzaiLayoutBasicComponent {
673
697
  this.state.display.aside = display;
674
698
  });
675
699
  }
676
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutBasicComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
677
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: YunzaiLayoutBasicComponent, isStandalone: true, selector: "yunzai-layout-basic", ngImport: i0, template: `
700
+ // 关于本应用
701
+ aboutApplication() {
702
+ const urlArr = window.location.pathname.split(`${this.config.baseUrl}/`);
703
+ if (urlArr.length > 1) {
704
+ // 应用标识,截取路径中 /backstage/后第一个字符串
705
+ // 例: http://222.30.194.61/backstage/auth/page/oafportal/#/base/menu 中 auth
706
+ const name = urlArr[1].split('/')[0];
707
+ this.applicationModal.isVisible = true;
708
+ this.applicationModal.loading = true;
709
+ // eslint-disable-next-line deprecation/deprecation
710
+ this.httpClient.get(`/basic/api/app/aboutApp?name=${name}`).subscribe(
711
+ // @ts-ignore
712
+ (response) => {
713
+ this.applicationModal.loading = false;
714
+ if (response.data) {
715
+ this.applicationInfo = response.data;
716
+ }
717
+ }, () => {
718
+ this.applicationModal.loading = false;
719
+ });
720
+ }
721
+ }
722
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutBasicComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
723
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: YunzaiLayoutBasicComponent, isStandalone: true, selector: "yunzai-layout-basic", ngImport: i0, template: `
678
724
  <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="displayReusetab ? contentTpl : noneTpl">
679
725
  <layout-default-header-item direction="left">
680
726
  <ng-container [ngSwitch]="navType">
@@ -687,6 +733,8 @@ class YunzaiLayoutBasicComponent {
687
733
  <ng-container *ngSwitchCase="NavType.TILE">
688
734
  <yunzai-layout-nav-tile />
689
735
  </ng-container>
736
+ <ng-container *ngSwitchCase="NavType.BLANK" />
737
+ <ng-container *ngSwitchCase="NavType.TABS" />
690
738
  <ng-container *ngSwitchDefault>
691
739
  <yunzai-layout-nav-application />
692
740
  </ng-container>
@@ -714,23 +762,40 @@ class YunzaiLayoutBasicComponent {
714
762
  <div data-event-id="_nav_mode" nz-menu-item>
715
763
  {{ 'mode.nav' | i18n }}
716
764
  </div>
717
- <div
718
- data-event-id="_nav_mode"
719
- data-type="application"
720
- nz-menu-item
721
- (click)="onNavTypeChange(NavType.APPLICATION)"
722
- >
723
- <i nz-icon nzType="appstore" class="mr-sm"></i>
724
- {{ 'mode.nav.application' | i18n }}
725
- </div>
726
- <div data-event-id="_nav_mode" data-type="group" nz-menu-item (click)="onNavTypeChange(NavType.GROUP)">
727
- <i nz-icon nzType="group" class="mr-sm"></i>
728
- {{ 'mode.nav.group' | i18n }}
729
- </div>
730
- <div data-event-id="_nav_mode" data-type="tile" nz-menu-item (click)="onNavTypeChange(NavType.TILE)">
731
- <i nz-icon nzType="appstore" class="mr-sm"></i>
732
- {{ 'mode.nav.tile' | i18n }}
733
- </div>
765
+
766
+ @if (headerStyleList.length > 1) {
767
+ @for (i of headerStyleList; track $index) {
768
+ <div
769
+ data-event-id="_nav_mode"
770
+ nz-menu-item
771
+ [attr.data-type]="i.value"
772
+ (click)="onNavTypeChange(i.value)"
773
+ >
774
+ <ng-container [ngSwitch]="i.value">
775
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
776
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
777
+ </ng-container>
778
+ <ng-container *ngSwitchCase="NavType.GROUP">
779
+ <i nz-icon nzType="group" class="mr-sm"></i>
780
+ </ng-container>
781
+ <ng-container *ngSwitchCase="NavType.TILE">
782
+ <i nz-icon nzType="dash" class="mr-sm"></i>
783
+ </ng-container>
784
+ <ng-container *ngSwitchCase="NavType.BLANK">
785
+ <i nz-icon nzType="border" class="mr-sm"></i>
786
+ </ng-container>
787
+ <ng-container *ngSwitchCase="NavType.TABS">
788
+ <i nz-icon nzType="insert-row-above" class="mr-sm"></i>
789
+ </ng-container>
790
+ <ng-container *ngSwitchDefault>
791
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
792
+ </ng-container>
793
+ {{ 'mode.nav.' + i.value | i18n }}
794
+ </ng-container>
795
+ </div>
796
+ }
797
+ }
798
+
734
799
  <div data-event-id="_nav_fullscreen" nz-menu-item>
735
800
  <yunzai-header-fullscreen />
736
801
  </div>
@@ -748,15 +813,9 @@ class YunzaiLayoutBasicComponent {
748
813
  </layout-default-header-item>
749
814
  </layout-default>
750
815
  <ng-template #asideUserTpl>
751
- <div
752
- data-event-id="_route_user"
753
- nz-dropdown
754
- nzTrigger="click"
755
- [nzDropdownMenu]="userMenu"
756
- class="yunzai-default__aside-user"
757
- >
758
- <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="aside.icon" />
759
- <div class="yunzai-default__aside-user-info">
816
+ <div data-event-id="_route_user" class="yunzai-default__aside-user">
817
+ <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="aside.icon" (click)="aboutApplication()" />
818
+ <div class="yunzai-default__aside-user-info" nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu">
760
819
  <strong>{{ aside.name | i18n }}</strong>
761
820
  <p class="mb0">{{ aside.intro | i18n }}</p>
762
821
  </div>
@@ -771,10 +830,42 @@ class YunzaiLayoutBasicComponent {
771
830
  <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
772
831
  <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
773
832
  </ng-template>
774
- <ng-template #noneTpl> <router-outlet /> </ng-template>
775
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: LayoutDefaultModule }, { kind: "component", type: i1$2.LayoutDefaultComponent, selector: "layout-default", inputs: ["options", "asideUser", "asideBottom", "nav", "content", "customError", "fetchingStrictly", "fetching"], exportAs: ["layoutDefault"] }, { kind: "component", type: i1$2.LayoutDefaultHeaderItemComponent, selector: "layout-default-header-item", inputs: ["hidden", "direction"] }, { kind: "directive", type: i1$2.LayoutDefaultHeaderItemTriggerDirective, selector: "[layout-default-header-item-trigger]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReuseTabModule }, { kind: "component", type: i3$2.ReuseTabComponent, selector: "reuse-tab, [reuse-tab]", inputs: ["mode", "i18n", "debug", "max", "tabMaxWidth", "excludes", "allowClose", "keepingScroll", "storageState", "keepingScrollContainer", "customContextMenu", "tabBarExtraContent", "tabBarGutter", "tabBarStyle", "tabType", "routeParamMatchMode", "disabled", "titleRender", "canClose"], outputs: ["change", "close"], exportAs: ["reuseTab"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i2$1.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i2$1.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i3$1.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i3$1.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "ngmodule", type: NzAvatarModule }, { kind: "component", type: i7.NzAvatarComponent, selector: "nz-avatar", inputs: ["nzShape", "nzSize", "nzGap", "nzText", "nzSrc", "nzSrcSet", "nzAlt", "nzIcon"], outputs: ["nzError"], exportAs: ["nzAvatar"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: ThemeBtnModule }, { kind: "component", type: i9.ThemeBtnComponent, selector: "theme-btn", inputs: ["types", "devTips", "deployUrl"], outputs: ["themeChange"] }, { kind: "ngmodule", type: YunzaiWidgetsModule }, { kind: "component", type: i10.YunzaiHeaderClearStorageComponent, selector: "yunzai-header-clear-storage" }, { kind: "component", type: i10.YunzaiHeaderFullScreenComponent, selector: "yunzai-header-fullscreen" }, { kind: "component", type: i10.YunzaiHeaderNotifyComponent, selector: "yunzai-header-notify" }, { kind: "component", type: i10.YunzaiHeaderI18nComponent, selector: "yunzai-header-i18n", inputs: ["showLangText"] }, { kind: "component", type: i10.YunzaiHeaderUserComponent, selector: "yunzai-header-user" }, { kind: "component", type: YunzaiNavApplicationComponent, selector: "yunzai-layout-nav-application" }, { kind: "component", type: YunzaiLayoutNavGroupComponent, selector: "yunzai-layout-nav-group" }, { kind: "component", type: YunzaiLayoutNavTileComponent, selector: "yunzai-layout-nav-tile" }] }); }
833
+ <ng-template #noneTpl>
834
+ <router-outlet />
835
+ </ng-template>
836
+
837
+ <nz-modal
838
+ nzTitle="关于本应用"
839
+ [(nzVisible)]="applicationModal.isVisible"
840
+ [nzOkText]="null"
841
+ [nzCancelText]="'关闭'"
842
+ [nzWidth]="700"
843
+ (nzOnCancel)="applicationModal.isVisible = false"
844
+ >
845
+ <ng-container *nzModalContent>
846
+ <nz-skeleton [nzLoading]="applicationModal.loading" [nzActive]="true">
847
+ <nz-descriptions nzBordered [nzSize]="'middle'" [nzColumn]="{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 2, xs: 1 }">
848
+ <nz-descriptions-item nzTitle="应用名称">{{ applicationInfo?.showName }}</nz-descriptions-item>
849
+ <nz-descriptions-item nzTitle="应用标识">{{ applicationInfo?.name }}</nz-descriptions-item>
850
+ <nz-descriptions-item nzTitle="版本总数">{{ applicationInfo?.versionNum }}</nz-descriptions-item>
851
+ <nz-descriptions-item nzTitle="应用首次部署时间">{{
852
+ applicationInfo?.firstDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
853
+ }}</nz-descriptions-item>
854
+ <nz-descriptions-item nzTitle="当前版本">{{ applicationInfo?.currentVersion }}</nz-descriptions-item>
855
+ <nz-descriptions-item nzTitle="当前版本部署时间">{{
856
+ applicationInfo?.currentDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
857
+ }}</nz-descriptions-item>
858
+ <nz-descriptions-item nzTitle="最新版本">{{ applicationInfo?.lastVersion }}</nz-descriptions-item>
859
+ <nz-descriptions-item nzTitle="最新版本发布时间">{{
860
+ applicationInfo?.lastPushDate | date: 'yyyy-MM-dd HH:mm:ss'
861
+ }}</nz-descriptions-item>
862
+ </nz-descriptions>
863
+ </nz-skeleton>
864
+ </ng-container>
865
+ </nz-modal>
866
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: LayoutDefaultModule }, { kind: "component", type: i1$2.LayoutDefaultComponent, selector: "layout-default", inputs: ["options", "asideUser", "asideBottom", "nav", "content", "customError", "fetchingStrictly", "fetching"], exportAs: ["layoutDefault"] }, { kind: "component", type: i1$2.LayoutDefaultHeaderItemComponent, selector: "layout-default-header-item", inputs: ["hidden", "direction"] }, { kind: "directive", type: i1$2.LayoutDefaultHeaderItemTriggerDirective, selector: "[layout-default-header-item-trigger]" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReuseTabModule }, { kind: "component", type: i3$2.ReuseTabComponent, selector: "reuse-tab, [reuse-tab]", inputs: ["mode", "i18n", "debug", "max", "tabMaxWidth", "excludes", "allowClose", "keepingScroll", "storageState", "keepingScrollContainer", "customContextMenu", "tabBarExtraContent", "tabBarGutter", "tabBarStyle", "tabType", "routeParamMatchMode", "disabled", "titleRender", "canClose"], outputs: ["change", "close"], exportAs: ["reuseTab"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i2$1.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i2$1.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i3$1.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i3$1.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "ngmodule", type: NzAvatarModule }, { kind: "component", type: i7.NzAvatarComponent, selector: "nz-avatar", inputs: ["nzShape", "nzSize", "nzGap", "nzText", "nzSrc", "nzSrcSet", "nzAlt", "nzIcon"], outputs: ["nzError"], exportAs: ["nzAvatar"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzModalModule }, { kind: "component", type: i9.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: i9.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "ngmodule", type: NzSkeletonModule }, { kind: "component", type: i10.NzSkeletonComponent, selector: "nz-skeleton", inputs: ["nzActive", "nzLoading", "nzRound", "nzTitle", "nzAvatar", "nzParagraph"], exportAs: ["nzSkeleton"] }, { kind: "ngmodule", type: NzDescriptionsModule }, { kind: "component", type: i11.NzDescriptionsComponent, selector: "nz-descriptions", inputs: ["nzBordered", "nzLayout", "nzColumn", "nzSize", "nzTitle", "nzExtra", "nzColon"], exportAs: ["nzDescriptions"] }, { kind: "component", type: i11.NzDescriptionsItemComponent, selector: "nz-descriptions-item", inputs: ["nzSpan", "nzTitle"], exportAs: ["nzDescriptionsItem"] }, { kind: "ngmodule", type: ThemeBtnModule }, { kind: "component", type: i12.ThemeBtnComponent, selector: "theme-btn", inputs: ["types", "devTips", "deployUrl"], outputs: ["themeChange"] }, { kind: "ngmodule", type: YunzaiWidgetsModule }, { kind: "component", type: i13.YunzaiHeaderClearStorageComponent, selector: "yunzai-header-clear-storage" }, { kind: "component", type: i13.YunzaiHeaderFullScreenComponent, selector: "yunzai-header-fullscreen" }, { kind: "component", type: i13.YunzaiHeaderNotifyComponent, selector: "yunzai-header-notify" }, { kind: "component", type: i13.YunzaiHeaderI18nComponent, selector: "yunzai-header-i18n", inputs: ["showLangText"] }, { kind: "component", type: i13.YunzaiHeaderUserComponent, selector: "yunzai-header-user" }, { kind: "component", type: YunzaiNavApplicationComponent, selector: "yunzai-layout-nav-application" }, { kind: "component", type: YunzaiLayoutNavGroupComponent, selector: "yunzai-layout-nav-group" }, { kind: "component", type: YunzaiLayoutNavTileComponent, selector: "yunzai-layout-nav-tile" }] }); }
776
867
  }
777
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutBasicComponent, decorators: [{
868
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutBasicComponent, decorators: [{
778
869
  type: Component,
779
870
  args: [{
780
871
  selector: `yunzai-layout-basic`,
@@ -791,6 +882,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
791
882
  <ng-container *ngSwitchCase="NavType.TILE">
792
883
  <yunzai-layout-nav-tile />
793
884
  </ng-container>
885
+ <ng-container *ngSwitchCase="NavType.BLANK" />
886
+ <ng-container *ngSwitchCase="NavType.TABS" />
794
887
  <ng-container *ngSwitchDefault>
795
888
  <yunzai-layout-nav-application />
796
889
  </ng-container>
@@ -818,23 +911,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
818
911
  <div data-event-id="_nav_mode" nz-menu-item>
819
912
  {{ 'mode.nav' | i18n }}
820
913
  </div>
821
- <div
822
- data-event-id="_nav_mode"
823
- data-type="application"
824
- nz-menu-item
825
- (click)="onNavTypeChange(NavType.APPLICATION)"
826
- >
827
- <i nz-icon nzType="appstore" class="mr-sm"></i>
828
- {{ 'mode.nav.application' | i18n }}
829
- </div>
830
- <div data-event-id="_nav_mode" data-type="group" nz-menu-item (click)="onNavTypeChange(NavType.GROUP)">
831
- <i nz-icon nzType="group" class="mr-sm"></i>
832
- {{ 'mode.nav.group' | i18n }}
833
- </div>
834
- <div data-event-id="_nav_mode" data-type="tile" nz-menu-item (click)="onNavTypeChange(NavType.TILE)">
835
- <i nz-icon nzType="appstore" class="mr-sm"></i>
836
- {{ 'mode.nav.tile' | i18n }}
837
- </div>
914
+
915
+ @if (headerStyleList.length > 1) {
916
+ @for (i of headerStyleList; track $index) {
917
+ <div
918
+ data-event-id="_nav_mode"
919
+ nz-menu-item
920
+ [attr.data-type]="i.value"
921
+ (click)="onNavTypeChange(i.value)"
922
+ >
923
+ <ng-container [ngSwitch]="i.value">
924
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
925
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
926
+ </ng-container>
927
+ <ng-container *ngSwitchCase="NavType.GROUP">
928
+ <i nz-icon nzType="group" class="mr-sm"></i>
929
+ </ng-container>
930
+ <ng-container *ngSwitchCase="NavType.TILE">
931
+ <i nz-icon nzType="dash" class="mr-sm"></i>
932
+ </ng-container>
933
+ <ng-container *ngSwitchCase="NavType.BLANK">
934
+ <i nz-icon nzType="border" class="mr-sm"></i>
935
+ </ng-container>
936
+ <ng-container *ngSwitchCase="NavType.TABS">
937
+ <i nz-icon nzType="insert-row-above" class="mr-sm"></i>
938
+ </ng-container>
939
+ <ng-container *ngSwitchDefault>
940
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
941
+ </ng-container>
942
+ {{ 'mode.nav.' + i.value | i18n }}
943
+ </ng-container>
944
+ </div>
945
+ }
946
+ }
947
+
838
948
  <div data-event-id="_nav_fullscreen" nz-menu-item>
839
949
  <yunzai-header-fullscreen />
840
950
  </div>
@@ -852,15 +962,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
852
962
  </layout-default-header-item>
853
963
  </layout-default>
854
964
  <ng-template #asideUserTpl>
855
- <div
856
- data-event-id="_route_user"
857
- nz-dropdown
858
- nzTrigger="click"
859
- [nzDropdownMenu]="userMenu"
860
- class="yunzai-default__aside-user"
861
- >
862
- <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="aside.icon" />
863
- <div class="yunzai-default__aside-user-info">
965
+ <div data-event-id="_route_user" class="yunzai-default__aside-user">
966
+ <nz-avatar class="yunzai-default__aside-user-avatar" [nzSrc]="aside.icon" (click)="aboutApplication()" />
967
+ <div class="yunzai-default__aside-user-info" nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu">
864
968
  <strong>{{ aside.name | i18n }}</strong>
865
969
  <p class="mb0">{{ aside.intro | i18n }}</p>
866
970
  </div>
@@ -875,7 +979,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
875
979
  <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
876
980
  <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
877
981
  </ng-template>
878
- <ng-template #noneTpl> <router-outlet /> </ng-template>
982
+ <ng-template #noneTpl>
983
+ <router-outlet />
984
+ </ng-template>
985
+
986
+ <nz-modal
987
+ nzTitle="关于本应用"
988
+ [(nzVisible)]="applicationModal.isVisible"
989
+ [nzOkText]="null"
990
+ [nzCancelText]="'关闭'"
991
+ [nzWidth]="700"
992
+ (nzOnCancel)="applicationModal.isVisible = false"
993
+ >
994
+ <ng-container *nzModalContent>
995
+ <nz-skeleton [nzLoading]="applicationModal.loading" [nzActive]="true">
996
+ <nz-descriptions nzBordered [nzSize]="'middle'" [nzColumn]="{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 2, xs: 1 }">
997
+ <nz-descriptions-item nzTitle="应用名称">{{ applicationInfo?.showName }}</nz-descriptions-item>
998
+ <nz-descriptions-item nzTitle="应用标识">{{ applicationInfo?.name }}</nz-descriptions-item>
999
+ <nz-descriptions-item nzTitle="版本总数">{{ applicationInfo?.versionNum }}</nz-descriptions-item>
1000
+ <nz-descriptions-item nzTitle="应用首次部署时间">{{
1001
+ applicationInfo?.firstDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
1002
+ }}</nz-descriptions-item>
1003
+ <nz-descriptions-item nzTitle="当前版本">{{ applicationInfo?.currentVersion }}</nz-descriptions-item>
1004
+ <nz-descriptions-item nzTitle="当前版本部署时间">{{
1005
+ applicationInfo?.currentDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
1006
+ }}</nz-descriptions-item>
1007
+ <nz-descriptions-item nzTitle="最新版本">{{ applicationInfo?.lastVersion }}</nz-descriptions-item>
1008
+ <nz-descriptions-item nzTitle="最新版本发布时间">{{
1009
+ applicationInfo?.lastPushDate | date: 'yyyy-MM-dd HH:mm:ss'
1010
+ }}</nz-descriptions-item>
1011
+ </nz-descriptions>
1012
+ </nz-skeleton>
1013
+ </ng-container>
1014
+ </nz-modal>
879
1015
  `,
880
1016
  standalone: true,
881
1017
  imports: [
@@ -887,6 +1023,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
887
1023
  NzDropDownModule,
888
1024
  NzAvatarModule,
889
1025
  NzIconModule,
1026
+ NzModalModule,
1027
+ NzSkeletonModule,
1028
+ NzDescriptionsModule,
890
1029
  ThemeBtnModule,
891
1030
  YunzaiWidgetsModule,
892
1031
  YunzaiNavApplicationComponent,
@@ -898,8 +1037,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
898
1037
 
899
1038
  const COMPONENTS = [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent];
900
1039
  class YunzaiLayoutModule {
901
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
902
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutModule, imports: [I18nPipe,
1040
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1041
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutModule, imports: [I18nPipe,
903
1042
  FormsModule,
904
1043
  NzFormModule,
905
1044
  NzInputModule,
@@ -908,7 +1047,7 @@ class YunzaiLayoutModule {
908
1047
  NzIconModule,
909
1048
  NzDropDownModule,
910
1049
  NzTabsModule, YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent], exports: [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
911
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutModule, imports: [FormsModule,
1050
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutModule, imports: [FormsModule,
912
1051
  NzFormModule,
913
1052
  NzInputModule,
914
1053
  CommonModule,
@@ -917,7 +1056,7 @@ class YunzaiLayoutModule {
917
1056
  NzDropDownModule,
918
1057
  NzTabsModule, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
919
1058
  }
920
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiLayoutModule, decorators: [{
1059
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutModule, decorators: [{
921
1060
  type: NgModule,
922
1061
  args: [{
923
1062
  imports: [