@yelon/bis 17.3.1 → 18.0.0

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 (70) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1 -1
  3. package/config/bis.config.d.ts +3 -3
  4. package/config/index.d.ts +5 -5
  5. package/config/public_api.d.ts +1 -1
  6. package/esm2022/bis.mjs +4 -4
  7. package/esm2022/config/bis.config.mjs +14 -14
  8. package/esm2022/config/config.mjs +4 -4
  9. package/esm2022/config/public_api.mjs +1 -1
  10. package/esm2022/layout/layout-basic.component.mjs +518 -508
  11. package/esm2022/layout/layout-nav-application.component.mjs +372 -372
  12. package/esm2022/layout/layout-nav-group.component.mjs +166 -162
  13. package/esm2022/layout/layout-nav-tile.component.mjs +14 -14
  14. package/esm2022/layout/layout.mjs +4 -4
  15. package/esm2022/layout/layout.module.mjs +53 -53
  16. package/esm2022/layout/public_api.mjs +5 -5
  17. package/esm2022/public_api.mjs +8 -8
  18. package/esm2022/src/bis.module.mjs +16 -16
  19. package/esm2022/src/helper.mjs +44 -44
  20. package/esm2022/src/provide.mjs +7 -7
  21. package/esm2022/src/refresh-token.mjs +78 -78
  22. package/esm2022/src/startup.service.mjs +183 -183
  23. package/esm2022/src/yunzai-act.guard.mjs +87 -87
  24. package/esm2022/src/yunzai-analysis-addon.guard.mjs +98 -98
  25. package/esm2022/src/yunzai-default.interceptor.mjs +62 -62
  26. package/esm2022/yunzai-widgets/public_api.mjs +6 -6
  27. package/esm2022/yunzai-widgets/yunzai-clear-storage.component.mjs +46 -46
  28. package/esm2022/yunzai-widgets/yunzai-fullscreen.component.mjs +46 -46
  29. package/esm2022/yunzai-widgets/yunzai-i18n.component.mjs +138 -138
  30. package/esm2022/yunzai-widgets/yunzai-notify.component.mjs +179 -179
  31. package/esm2022/yunzai-widgets/yunzai-user.component.mjs +119 -119
  32. package/esm2022/yunzai-widgets/yunzai-widget.module.mjs +61 -61
  33. package/esm2022/yunzai-widgets/yunzai-widgets.mjs +4 -4
  34. package/fesm2022/bis.mjs +559 -559
  35. package/fesm2022/config.mjs +21 -21
  36. package/fesm2022/layout.mjs +1097 -1083
  37. package/fesm2022/layout.mjs.map +1 -1
  38. package/fesm2022/yunzai-widgets.mjs +563 -563
  39. package/index.d.ts +5 -5
  40. package/index.less +1 -1
  41. package/layout/index.d.ts +5 -5
  42. package/layout/layout-basic.component.d.ts +54 -54
  43. package/layout/layout-nav-application.component.d.ts +26 -26
  44. package/layout/layout-nav-group.component.d.ts +14 -14
  45. package/layout/layout-nav-tile.component.d.ts +5 -5
  46. package/layout/layout.module.d.ts +18 -18
  47. package/layout/public_api.d.ts +5 -5
  48. package/layout/style/index.less +181 -182
  49. package/package.json +68 -68
  50. package/public_api.d.ts +8 -8
  51. package/src/bis.module.d.ts +8 -8
  52. package/src/helper.d.ts +16 -16
  53. package/src/provide.d.ts +2 -2
  54. package/src/refresh-token.d.ts +6 -6
  55. package/src/startup.service.d.ts +24 -24
  56. package/src/yunzai-act.guard.d.ts +20 -20
  57. package/src/yunzai-analysis-addon.guard.d.ts +26 -26
  58. package/src/yunzai-default.interceptor.d.ts +2 -2
  59. package/theme-compact.less +3 -3
  60. package/theme-dark.less +46 -46
  61. package/theme-default.less +48 -48
  62. package/theme-variable.less +1 -0
  63. package/yunzai-widgets/index.d.ts +5 -5
  64. package/yunzai-widgets/public_api.d.ts +6 -6
  65. package/yunzai-widgets/yunzai-clear-storage.component.d.ts +8 -8
  66. package/yunzai-widgets/yunzai-fullscreen.component.d.ts +8 -8
  67. package/yunzai-widgets/yunzai-i18n.component.d.ts +19 -19
  68. package/yunzai-widgets/yunzai-notify.component.d.ts +25 -25
  69. package/yunzai-widgets/yunzai-user.component.d.ts +22 -22
  70. package/yunzai-widgets/yunzai-widget.module.d.ts +18 -18
@@ -1,1083 +1,1097 @@
1
- import * as i4 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
- import * as i0 from '@angular/core';
4
- import { inject, Component, NgModule } from '@angular/core';
5
- import * as i1 from '@angular/forms';
6
- import { FormsModule } from '@angular/forms';
7
- import { _HttpClient, YunzaiHttpI18NService, I18nPipe } from '@yelon/theme';
8
- import * as i3$1 from 'ng-zorro-antd/dropdown';
9
- import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
10
- import { NzFormModule } from 'ng-zorro-antd/form';
11
- import * as i2 from 'ng-zorro-antd/grid';
12
- import { NzGridModule } from 'ng-zorro-antd/grid';
13
- import * as i1$1 from 'ng-zorro-antd/icon';
14
- import { NzIconModule } from 'ng-zorro-antd/icon';
15
- import * as i3 from 'ng-zorro-antd/input';
16
- import { NzInputModule } from 'ng-zorro-antd/input';
17
- import * as i4$1 from 'ng-zorro-antd/tabs';
18
- import { NzTabsModule } from 'ng-zorro-antd/tabs';
19
- import { HttpClient } from '@angular/common/http';
20
- import * as i2$2 from '@angular/router';
21
- import { RouterModule } from '@angular/router';
22
- import * as i3$2 from '@yelon/abc/reuse-tab';
23
- import { ReuseTabModule } from '@yelon/abc/reuse-tab';
24
- import * as i13 from '@yelon/bis/yunzai-widgets';
25
- import { YunzaiWidgetsModule } from '@yelon/bis/yunzai-widgets';
26
- import { StompService } from '@yelon/socket';
27
- import * as i1$2 from '@yelon/theme/layout-default';
28
- import { LayoutDisplayService, LayoutDefaultModule } from '@yelon/theme/layout-default';
29
- import * as i12 from '@yelon/theme/theme-btn';
30
- import { ThemeBtnModule } from '@yelon/theme/theme-btn';
31
- import { YunzaiConfigService, WINDOW, useLocalStorageHeader, YUNZAI_CONFIG, NavType, useLocalStorageProjectInfo, hasFavicon, setFavicon, useLocalStorageCurrent, useLocalStorageHeaderType, useLocalStorageDefaultRoute, log } from '@yelon/util';
32
- import * as i7 from 'ng-zorro-antd/avatar';
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';
40
- import { Subject, takeUntil } from 'rxjs';
41
- import { mergeBisConfig } from '@yelon/bis/config';
42
- import * as i2$1 from 'ng-zorro-antd/menu';
43
-
44
- class YunzaiNavApplicationComponent {
45
- constructor() {
46
- this.config = mergeBisConfig(inject(YunzaiConfigService));
47
- this.http = inject(_HttpClient);
48
- this.win = inject(WINDOW);
49
- this.i18n = inject(YunzaiHttpI18NService);
50
- this.destroy$ = new Subject();
51
- this.state = {
52
- active: false,
53
- type: 'all',
54
- topic: undefined,
55
- topics: [],
56
- list: [],
57
- search: null
58
- };
59
- }
60
- get showAllMenu() {
61
- if (this.config.nav)
62
- return this.config.nav.all;
63
- return true;
64
- }
65
- get showMineMenu() {
66
- if (this.config.nav)
67
- return this.config.nav.mine;
68
- return true;
69
- }
70
- ngOnInit() {
71
- this.fetchAllTopic();
72
- this.attachNav('all');
73
- this.win.addEventListener('click', (event) => {
74
- const { target } = event;
75
- const btn = this.win.document.getElementById('navBtn');
76
- const dropdown = this.win.document.getElementById('navDropdown');
77
- if (btn && dropdown && !dropdown.contains(target) && !btn.contains(target)) {
78
- this.state.active = false;
79
- }
80
- });
81
- }
82
- fetchAllTopic() {
83
- const [, getTopics] = useLocalStorageHeader();
84
- this.state.topics = getTopics();
85
- }
86
- attachNav(type, topic) {
87
- this.state.type = type;
88
- this.clearSearch();
89
- if (type === 'all') {
90
- this.displayAllNav();
91
- }
92
- if (type === 'mine') {
93
- this.displayMineNav();
94
- }
95
- if (type === 'other' && topic) {
96
- this.displayOtherNav(topic);
97
- }
98
- }
99
- clearSearch() {
100
- this.state.search = null;
101
- }
102
- displayAllNav() {
103
- const [, getTopics] = useLocalStorageHeader();
104
- this.state.list = getTopics();
105
- }
106
- displayMineNav() {
107
- const [, getTopics] = useLocalStorageHeader();
108
- this.state.list = getTopics()
109
- .filter((topic) => {
110
- topic.children = topic.children.filter((child) => {
111
- return child.auth;
112
- });
113
- return topic;
114
- })
115
- .filter((topic) => {
116
- return topic.children.length > 0;
117
- });
118
- }
119
- displayOtherNav(topic) {
120
- const [, getTopics] = useLocalStorageHeader();
121
- this.state.topic = topic;
122
- const temp = getTopics();
123
- this.state.list = temp.filter(t => t.key === topic.key)[0].children;
124
- }
125
- diffChange(flag) {
126
- if (flag) {
127
- this.state.active = flag;
128
- }
129
- else {
130
- this.state.active = !this.state.active;
131
- }
132
- }
133
- open(topic) {
134
- if (topic.key) {
135
- this.http
136
- .post(`/app-manager/web-scan/save`, {
137
- appId: topic.key,
138
- createDate: new Date()
139
- })
140
- .pipe(takeUntil(this.destroy$))
141
- .subscribe();
142
- }
143
- switch (topic.target) {
144
- case 'href':
145
- this.win.location.href = topic.url;
146
- break;
147
- case 'blank':
148
- this.win.location.href = topic.url;
149
- break;
150
- case 'target':
151
- this.win.location.href = topic.url;
152
- break;
153
- default:
154
- this.win.location.href = topic.url;
155
- break;
156
- }
157
- }
158
- onSearch() {
159
- const [, getTopics] = useLocalStorageHeader();
160
- const temp = getTopics();
161
- if (this.state.search) {
162
- this.state.list = temp
163
- .filter((topic) => {
164
- if (this.i18n.fanyi(topic.name).includes(this.state.search)) {
165
- return topic;
166
- }
167
- else {
168
- topic.children = topic.children.filter((child) => {
169
- return this.i18n.fanyi(child.name).includes(this.state.search);
170
- });
171
- return topic;
172
- }
173
- })
174
- .filter((topic) => {
175
- return topic.children.length > 0;
176
- });
177
- }
178
- else {
179
- const [, getTopics] = useLocalStorageHeader();
180
- this.state.list = getTopics();
181
- }
182
- }
183
- ngOnDestroy() {
184
- this.destroy$.complete();
185
- }
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: `
188
- <ng-template #search>
189
- <div nz-row class="yz-application-list-search">
190
- <nz-input-group [nzPrefix]="prefixTemplate">
191
- <input
192
- data-event-id="_nav_search"
193
- type="text"
194
- nz-input
195
- placeholder="{{ 'application.search' | i18n }}"
196
- [(ngModel)]="state.search"
197
- (ngModelChange)="onSearch()"
198
- />
199
- <ng-template #prefixTemplate>
200
- <i nz-icon nzType="search" nzTheme="outline"></i>
201
- </ng-template>
202
- </nz-input-group>
203
- </div>
204
- </ng-template>
205
-
206
- <ng-template #ld>
207
- <div class="yz-application-list">
208
- <ul>
209
- @for (topic of state.list; track topic) {
210
- <li>
211
- <h5>{{ topic.name | i18n }}</h5>
212
- @for (nav of topic.children; track nav) {
213
- <a
214
- data-event-id="_nav_item"
215
- [attr.data-name]="nav.name | i18n"
216
- href="javascript:;"
217
- (click)="open(nav)"
218
- >{{ nav.name | i18n }}</a
219
- >
220
- }
221
- </li>
222
- }
223
- </ul>
224
- </div>
225
- </ng-template>
226
-
227
- <div data-event-id="_nav_app" id="navBtn" class="yunzai-default__nav-item" (click)="diffChange()"
228
- >{{ 'mode.nav' | i18n }}
229
- </div>
230
-
231
- <div class="yz-application" id="navDropdown" nz-row *ngIf="state.active">
232
- <div nz-col [nzSpan]="3" class="yz-application-topic">
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>
254
- </div>
255
- <div nz-col [nzSpan]="21" class="yz-application-container">
256
- @switch (state.type) {
257
- @case ('all') {
258
- <div>
259
- <ng-template [ngTemplateOutlet]="search" />
260
- <ng-template [ngTemplateOutlet]="ld" />
261
- </div>
262
- }
263
- @case ('mine') {
264
- <div>
265
- <ng-template [ngTemplateOutlet]="search" />
266
- <ng-template [ngTemplateOutlet]="ld" />
267
- </div>
268
- }
269
- @case ('other') {
270
- <div class="yz-application-list yz-application-list-other">
271
- <div class="yz-application-list-item">
272
- <ul>
273
- @for (nav of state.list; track nav) {
274
- <li data-event-id="_nav_item" [attr.data-name]="nav.name | i18n" (click)="open(nav)">
275
- <a href="javascript:;">
276
- <h4>{{ nav.name | i18n }}</h4>
277
- <p>{{ nav.intro | i18n }}</p>
278
- </a>
279
- </li>
280
- }
281
- </ul>
282
- </div>
283
- </div>
284
- }
285
- }
286
- </div>
287
- </div>
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 }] }); }
289
- }
290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiNavApplicationComponent, decorators: [{
291
- type: Component,
292
- args: [{
293
- selector: `yunzai-layout-nav-application`,
294
- template: `
295
- <ng-template #search>
296
- <div nz-row class="yz-application-list-search">
297
- <nz-input-group [nzPrefix]="prefixTemplate">
298
- <input
299
- data-event-id="_nav_search"
300
- type="text"
301
- nz-input
302
- placeholder="{{ 'application.search' | i18n }}"
303
- [(ngModel)]="state.search"
304
- (ngModelChange)="onSearch()"
305
- />
306
- <ng-template #prefixTemplate>
307
- <i nz-icon nzType="search" nzTheme="outline"></i>
308
- </ng-template>
309
- </nz-input-group>
310
- </div>
311
- </ng-template>
312
-
313
- <ng-template #ld>
314
- <div class="yz-application-list">
315
- <ul>
316
- @for (topic of state.list; track topic) {
317
- <li>
318
- <h5>{{ topic.name | i18n }}</h5>
319
- @for (nav of topic.children; track nav) {
320
- <a
321
- data-event-id="_nav_item"
322
- [attr.data-name]="nav.name | i18n"
323
- href="javascript:;"
324
- (click)="open(nav)"
325
- >{{ nav.name | i18n }}</a
326
- >
327
- }
328
- </li>
329
- }
330
- </ul>
331
- </div>
332
- </ng-template>
333
-
334
- <div data-event-id="_nav_app" id="navBtn" class="yunzai-default__nav-item" (click)="diffChange()"
335
- >{{ 'mode.nav' | i18n }}
336
- </div>
337
-
338
- <div class="yz-application" id="navDropdown" nz-row *ngIf="state.active">
339
- <div nz-col [nzSpan]="3" class="yz-application-topic">
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>
361
- </div>
362
- <div nz-col [nzSpan]="21" class="yz-application-container">
363
- @switch (state.type) {
364
- @case ('all') {
365
- <div>
366
- <ng-template [ngTemplateOutlet]="search" />
367
- <ng-template [ngTemplateOutlet]="ld" />
368
- </div>
369
- }
370
- @case ('mine') {
371
- <div>
372
- <ng-template [ngTemplateOutlet]="search" />
373
- <ng-template [ngTemplateOutlet]="ld" />
374
- </div>
375
- }
376
- @case ('other') {
377
- <div class="yz-application-list yz-application-list-other">
378
- <div class="yz-application-list-item">
379
- <ul>
380
- @for (nav of state.list; track nav) {
381
- <li data-event-id="_nav_item" [attr.data-name]="nav.name | i18n" (click)="open(nav)">
382
- <a href="javascript:;">
383
- <h4>{{ nav.name | i18n }}</h4>
384
- <p>{{ nav.intro | i18n }}</p>
385
- </a>
386
- </li>
387
- }
388
- </ul>
389
- </div>
390
- </div>
391
- }
392
- }
393
- </div>
394
- </div>
395
- `,
396
- standalone: true,
397
- imports: [I18nPipe, FormsModule, NzFormModule, NzInputModule, CommonModule, NzGridModule]
398
- }]
399
- }] });
400
-
401
- class YunzaiLayoutNavGroupComponent {
402
- constructor() {
403
- this.http = inject(_HttpClient);
404
- this.destroy$ = new Subject();
405
- this.win = inject(WINDOW);
406
- this.state = {
407
- topics: []
408
- };
409
- }
410
- ngOnInit() {
411
- const [, getTopics] = useLocalStorageHeader();
412
- this.state.topics = getTopics() || [];
413
- }
414
- open(topic) {
415
- if (topic.key) {
416
- this.http
417
- .post(`/app-manager/web-scan/save`, {
418
- appId: topic.key,
419
- createDate: new Date()
420
- })
421
- .pipe(takeUntil(this.destroy$))
422
- .subscribe();
423
- }
424
- switch (topic.target) {
425
- case 'href':
426
- this.win.location.href = topic.url;
427
- break;
428
- case 'blank':
429
- this.win.location.href = topic.url;
430
- break;
431
- case 'target':
432
- this.win.location.href = topic.url;
433
- break;
434
- default:
435
- this.win.location.href = topic.url;
436
- break;
437
- }
438
- }
439
- ngOnDestroy() {
440
- this.destroy$.complete();
441
- }
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: `
444
- <div class="yz-application-group">
445
- <nz-tabset>
446
- @for (menu of state.topics; track menu) {
447
- <nz-tab [nzTitle]="groupTitleTpl">
448
- <ng-template #groupTitleTpl>
449
- <a
450
- data-event-id="_nav_topic"
451
- [attr.data-name]="menu.name | i18n"
452
- nz-dropdown
453
- [nzDropdownMenu]="menuTpl"
454
- [nzTrigger]="'click'"
455
- [nzOverlayClassName]="'yz-application-dropdown'"
456
- >
457
- @if (menu.icon) {
458
- <i nz-icon [nzType]="menu.icon" nzTheme="outline"></i>
459
- }
460
- {{ menu.name | i18n }}
461
- @if (menu.children && menu.children.length > 0) {
462
- <i nz-icon nzType="down" nzTheme="outline"></i>
463
- }
464
- </a>
465
- <nz-dropdown-menu #menuTpl="nzDropdownMenu">
466
- @if (menu.children && menu.children.length > 0) {
467
- <ul nz-menu nzSelectable>
468
- @for (item of menu.children; track item) {
469
- <ng-container>
470
- <li
471
- data-event-id="_nav_item"
472
- [attr.data-name]="item.name | i18n"
473
- nz-menu-item
474
- (click)="open(item)"
475
- >
476
- @if (item.icon) {
477
- <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>
478
- }
479
- {{ item.name | i18n }}
480
- </li>
481
- </ng-container>
482
- }
483
- </ul>
484
- }
485
- </nz-dropdown-menu>
486
- </ng-template>
487
- </nz-tab>
488
- }
489
- </nz-tabset>
490
- </div>
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"] }] }); }
492
- }
493
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutNavGroupComponent, decorators: [{
494
- type: Component,
495
- args: [{
496
- selector: `yunzai-layout-nav-group`,
497
- template: `
498
- <div class="yz-application-group">
499
- <nz-tabset>
500
- @for (menu of state.topics; track menu) {
501
- <nz-tab [nzTitle]="groupTitleTpl">
502
- <ng-template #groupTitleTpl>
503
- <a
504
- data-event-id="_nav_topic"
505
- [attr.data-name]="menu.name | i18n"
506
- nz-dropdown
507
- [nzDropdownMenu]="menuTpl"
508
- [nzTrigger]="'click'"
509
- [nzOverlayClassName]="'yz-application-dropdown'"
510
- >
511
- @if (menu.icon) {
512
- <i nz-icon [nzType]="menu.icon" nzTheme="outline"></i>
513
- }
514
- {{ menu.name | i18n }}
515
- @if (menu.children && menu.children.length > 0) {
516
- <i nz-icon nzType="down" nzTheme="outline"></i>
517
- }
518
- </a>
519
- <nz-dropdown-menu #menuTpl="nzDropdownMenu">
520
- @if (menu.children && menu.children.length > 0) {
521
- <ul nz-menu nzSelectable>
522
- @for (item of menu.children; track item) {
523
- <ng-container>
524
- <li
525
- data-event-id="_nav_item"
526
- [attr.data-name]="item.name | i18n"
527
- nz-menu-item
528
- (click)="open(item)"
529
- >
530
- @if (item.icon) {
531
- <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>
532
- }
533
- {{ item.name | i18n }}
534
- </li>
535
- </ng-container>
536
- }
537
- </ul>
538
- }
539
- </nz-dropdown-menu>
540
- </ng-template>
541
- </nz-tab>
542
- }
543
- </nz-tabset>
544
- </div>
545
- `,
546
- standalone: true,
547
- imports: [NzIconModule, NzDropDownModule, I18nPipe, NzTabsModule]
548
- }]
549
- }] });
550
-
551
- class YunzaiLayoutNavTileComponent {
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 }); }
554
- }
555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutNavTileComponent, decorators: [{
556
- type: Component,
557
- args: [{
558
- selector: `yunzai-layout-nav-tile`,
559
- template: `<ng-template />`,
560
- standalone: true
561
- }]
562
- }] });
563
-
564
- class YunzaiLayoutBasicComponent {
565
- constructor() {
566
- this.stomp = inject(StompService);
567
- this.win = inject(WINDOW);
568
- this.layoutDisplayService = inject(LayoutDisplayService);
569
- this.conf = inject(YUNZAI_CONFIG);
570
- this.NavType = NavType;
571
- this.state = {
572
- options: {
573
- logoExpanded: `./assets/logo-full.svg`,
574
- logoCollapsed: `./assets/logo.svg`
575
- },
576
- aside: {
577
- name: '',
578
- intro: '',
579
- icon: ''
580
- },
581
- display: {
582
- nav: true,
583
- aside: true,
584
- reusetab: true
585
- },
586
- navType: NavType.APPLICATION
587
- };
588
- this.headerStyleList = [];
589
- this.applicationModal = {
590
- isVisible: false,
591
- loading: false
592
- };
593
- this.httpClient = inject(HttpClient);
594
- }
595
- get options() {
596
- return this.state.options;
597
- }
598
- get navType() {
599
- return this.state.navType;
600
- }
601
- get aside() {
602
- return this.state.aside;
603
- }
604
- get displayReusetab() {
605
- return this.state.display.reusetab;
606
- }
607
- get reusetabCSS() {
608
- let cascadingStyleSheet = {};
609
- if (!this.state.display.nav) {
610
- cascadingStyleSheet = {
611
- ...cascadingStyleSheet,
612
- top: '0px'
613
- };
614
- }
615
- if (!this.state.display.aside) {
616
- cascadingStyleSheet = {
617
- ...cascadingStyleSheet,
618
- left: '24px'
619
- };
620
- }
621
- return cascadingStyleSheet;
622
- }
623
- ngOnInit() {
624
- this.config = this.conf.bis;
625
- this.initLogo();
626
- this.initFavicon();
627
- this.initNavType();
628
- this.initAside();
629
- this.addLayoutDisplayListener();
630
- this.stomp.listen();
631
- this.toIndex();
632
- }
633
- initFavicon() {
634
- const [, getProjectInfo] = useLocalStorageProjectInfo();
635
- const projectInfo = getProjectInfo();
636
- if (projectInfo.faviconUrl) {
637
- hasFavicon(projectInfo.faviconUrl).then((has) => {
638
- if (has) {
639
- setFavicon(projectInfo.faviconUrl);
640
- }
641
- else {
642
- setFavicon('./assets/favicon.ico');
643
- }
644
- });
645
- }
646
- }
647
- initAside() {
648
- const [, getCurrent] = useLocalStorageCurrent();
649
- const aside = getCurrent();
650
- this.state.aside = { ...aside };
651
- }
652
- initLogo() {
653
- const [, getProjectInfo] = useLocalStorageProjectInfo();
654
- const projectInfo = getProjectInfo();
655
- this.state.options.logoExpanded = projectInfo.maxLogoUrl ? projectInfo.maxLogoUrl : `./assets/logo-full.svg`;
656
- this.state.options.logoCollapsed = projectInfo.miniLogoUrl ? projectInfo.miniLogoUrl : `./assets/logo.svg`;
657
- }
658
- initNavType() {
659
- const [, getHeaderType] = useLocalStorageHeaderType();
660
- const [, getProjectInfo] = useLocalStorageProjectInfo();
661
- const navType = getHeaderType();
662
- const projectInfo = getProjectInfo();
663
- if (navType !== null) {
664
- this.state.navType = navType;
665
- }
666
- else {
667
- this.state.navType = NavType.APPLICATION;
668
- }
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
- }
677
- }
678
- }
679
- toIndex() {
680
- const [, getDefaultRoute] = useLocalStorageDefaultRoute();
681
- const defaultRoute = getDefaultRoute();
682
- log('YunzaiLayoutBasicComponent: ', `todo: the default route was ${defaultRoute}, 但是还没想好如何实现.`);
683
- }
684
- onNavTypeChange(type) {
685
- const [setHeaderType] = useLocalStorageHeaderType();
686
- setHeaderType(type);
687
- this.win.location.reload();
688
- }
689
- addLayoutDisplayListener() {
690
- this.layoutDisplayService.listen('reuseTab', (display) => {
691
- this.state.display.reusetab = display;
692
- });
693
- this.layoutDisplayService.listen('nav', (display) => {
694
- this.state.display.nav = display;
695
- });
696
- this.layoutDisplayService.listen('aside', (display) => {
697
- this.state.display.aside = display;
698
- });
699
- }
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: `
724
- <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="displayReusetab ? contentTpl : noneTpl">
725
- <layout-default-header-item direction="left">
726
- <ng-container [ngSwitch]="navType">
727
- <ng-container *ngSwitchCase="NavType.APPLICATION">
728
- <yunzai-layout-nav-application />
729
- </ng-container>
730
- <ng-container *ngSwitchCase="NavType.GROUP">
731
- <yunzai-layout-nav-group />
732
- </ng-container>
733
- <ng-container *ngSwitchCase="NavType.TILE">
734
- <yunzai-layout-nav-tile />
735
- </ng-container>
736
- <ng-container *ngSwitchCase="NavType.BLANK" />
737
- <ng-container *ngSwitchCase="NavType.TABS" />
738
- <ng-container *ngSwitchDefault>
739
- <yunzai-layout-nav-application />
740
- </ng-container>
741
- </ng-container>
742
- </layout-default-header-item>
743
- <layout-default-header-item direction="right" hidden="mobile">
744
- <yunzai-header-notify />
745
- </layout-default-header-item>
746
- <layout-default-header-item direction="right" hidden="mobile">
747
- <theme-btn />
748
- </layout-default-header-item>
749
- <layout-default-header-item direction="right" hidden="mobile">
750
- <div
751
- data-event-id="_nav_settings"
752
- layout-default-header-item-trigger
753
- nz-dropdown
754
- [nzDropdownMenu]="settingsMenu"
755
- nzTrigger="click"
756
- nzPlacement="bottomRight"
757
- >
758
- <i nz-icon nzType="setting"></i>
759
- </div>
760
- <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
761
- <div nz-menu style="width: 200px;">
762
- <div data-event-id="_nav_mode" nz-menu-item>
763
- {{ 'mode.nav' | i18n }}
764
- </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
-
799
- <div data-event-id="_nav_fullscreen" nz-menu-item>
800
- <yunzai-header-fullscreen />
801
- </div>
802
- <div data-event-id="_nav_clearstorage" nz-menu-item>
803
- <yunzai-header-clear-storage />
804
- </div>
805
- <div data-event-id="_nav_i18n" nz-menu-item>
806
- <yunzai-header-i18n />
807
- </div>
808
- </div>
809
- </nz-dropdown-menu>
810
- </layout-default-header-item>
811
- <layout-default-header-item direction="right">
812
- <yunzai-header-user />
813
- </layout-default-header-item>
814
- </layout-default>
815
- <ng-template #asideUserTpl>
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">
819
- <strong>{{ aside.name | i18n }}</strong>
820
- <p class="mb0">{{ aside.intro | i18n }}</p>
821
- </div>
822
- </div>
823
- <nz-dropdown-menu #userMenu="nzDropdownMenu">
824
- <ul nz-menu>
825
- <li data-event-id="_route_backhome" nz-menu-item routerLink="/">{{ 'back.home' | i18n }}</li>
826
- </ul>
827
- </nz-dropdown-menu>
828
- </ng-template>
829
- <ng-template #contentTpl>
830
- <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
831
- <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
832
- </ng-template>
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" }] }); }
867
- }
868
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutBasicComponent, decorators: [{
869
- type: Component,
870
- args: [{
871
- selector: `yunzai-layout-basic`,
872
- template: `
873
- <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="displayReusetab ? contentTpl : noneTpl">
874
- <layout-default-header-item direction="left">
875
- <ng-container [ngSwitch]="navType">
876
- <ng-container *ngSwitchCase="NavType.APPLICATION">
877
- <yunzai-layout-nav-application />
878
- </ng-container>
879
- <ng-container *ngSwitchCase="NavType.GROUP">
880
- <yunzai-layout-nav-group />
881
- </ng-container>
882
- <ng-container *ngSwitchCase="NavType.TILE">
883
- <yunzai-layout-nav-tile />
884
- </ng-container>
885
- <ng-container *ngSwitchCase="NavType.BLANK" />
886
- <ng-container *ngSwitchCase="NavType.TABS" />
887
- <ng-container *ngSwitchDefault>
888
- <yunzai-layout-nav-application />
889
- </ng-container>
890
- </ng-container>
891
- </layout-default-header-item>
892
- <layout-default-header-item direction="right" hidden="mobile">
893
- <yunzai-header-notify />
894
- </layout-default-header-item>
895
- <layout-default-header-item direction="right" hidden="mobile">
896
- <theme-btn />
897
- </layout-default-header-item>
898
- <layout-default-header-item direction="right" hidden="mobile">
899
- <div
900
- data-event-id="_nav_settings"
901
- layout-default-header-item-trigger
902
- nz-dropdown
903
- [nzDropdownMenu]="settingsMenu"
904
- nzTrigger="click"
905
- nzPlacement="bottomRight"
906
- >
907
- <i nz-icon nzType="setting"></i>
908
- </div>
909
- <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
910
- <div nz-menu style="width: 200px;">
911
- <div data-event-id="_nav_mode" nz-menu-item>
912
- {{ 'mode.nav' | i18n }}
913
- </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
-
948
- <div data-event-id="_nav_fullscreen" nz-menu-item>
949
- <yunzai-header-fullscreen />
950
- </div>
951
- <div data-event-id="_nav_clearstorage" nz-menu-item>
952
- <yunzai-header-clear-storage />
953
- </div>
954
- <div data-event-id="_nav_i18n" nz-menu-item>
955
- <yunzai-header-i18n />
956
- </div>
957
- </div>
958
- </nz-dropdown-menu>
959
- </layout-default-header-item>
960
- <layout-default-header-item direction="right">
961
- <yunzai-header-user />
962
- </layout-default-header-item>
963
- </layout-default>
964
- <ng-template #asideUserTpl>
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">
968
- <strong>{{ aside.name | i18n }}</strong>
969
- <p class="mb0">{{ aside.intro | i18n }}</p>
970
- </div>
971
- </div>
972
- <nz-dropdown-menu #userMenu="nzDropdownMenu">
973
- <ul nz-menu>
974
- <li data-event-id="_route_backhome" nz-menu-item routerLink="/">{{ 'back.home' | i18n }}</li>
975
- </ul>
976
- </nz-dropdown-menu>
977
- </ng-template>
978
- <ng-template #contentTpl>
979
- <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
980
- <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
981
- </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>
1015
- `,
1016
- standalone: true,
1017
- imports: [
1018
- LayoutDefaultModule,
1019
- RouterModule,
1020
- ReuseTabModule,
1021
- CommonModule,
1022
- I18nPipe,
1023
- NzDropDownModule,
1024
- NzAvatarModule,
1025
- NzIconModule,
1026
- NzModalModule,
1027
- NzSkeletonModule,
1028
- NzDescriptionsModule,
1029
- ThemeBtnModule,
1030
- YunzaiWidgetsModule,
1031
- YunzaiNavApplicationComponent,
1032
- YunzaiLayoutNavGroupComponent,
1033
- YunzaiLayoutNavTileComponent
1034
- ]
1035
- }]
1036
- }] });
1037
-
1038
- const COMPONENTS = [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent];
1039
- class YunzaiLayoutModule {
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,
1042
- FormsModule,
1043
- NzFormModule,
1044
- NzInputModule,
1045
- CommonModule,
1046
- NzGridModule,
1047
- NzIconModule,
1048
- NzDropDownModule,
1049
- NzTabsModule, YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent], exports: [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
1050
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutModule, imports: [FormsModule,
1051
- NzFormModule,
1052
- NzInputModule,
1053
- CommonModule,
1054
- NzGridModule,
1055
- NzIconModule,
1056
- NzDropDownModule,
1057
- NzTabsModule, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
1058
- }
1059
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: YunzaiLayoutModule, decorators: [{
1060
- type: NgModule,
1061
- args: [{
1062
- imports: [
1063
- I18nPipe,
1064
- FormsModule,
1065
- NzFormModule,
1066
- NzInputModule,
1067
- CommonModule,
1068
- NzGridModule,
1069
- NzIconModule,
1070
- NzDropDownModule,
1071
- NzTabsModule,
1072
- ...COMPONENTS
1073
- ],
1074
- exports: COMPONENTS
1075
- }]
1076
- }] });
1077
-
1078
- /**
1079
- * Generated bundle index. Do not edit.
1080
- */
1081
-
1082
- export { YunzaiLayoutBasicComponent, YunzaiLayoutModule, YunzaiLayoutNavGroupComponent, YunzaiLayoutNavTileComponent, YunzaiNavApplicationComponent };
1083
- //# sourceMappingURL=layout.mjs.map
1
+ import * as i4 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, Component, NgModule } from '@angular/core';
5
+ import * as i1 from '@angular/forms';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { _HttpClient, YunzaiHttpI18NService, I18nPipe } from '@yelon/theme';
8
+ import * as i3$1 from 'ng-zorro-antd/dropdown';
9
+ import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
10
+ import { NzFormModule } from 'ng-zorro-antd/form';
11
+ import * as i2 from 'ng-zorro-antd/grid';
12
+ import { NzGridModule } from 'ng-zorro-antd/grid';
13
+ import * as i1$1 from 'ng-zorro-antd/icon';
14
+ import { NzIconModule } from 'ng-zorro-antd/icon';
15
+ import * as i3 from 'ng-zorro-antd/input';
16
+ import { NzInputModule } from 'ng-zorro-antd/input';
17
+ import * as i4$1 from 'ng-zorro-antd/tabs';
18
+ import { NzTabsModule } from 'ng-zorro-antd/tabs';
19
+ import { HttpClient } from '@angular/common/http';
20
+ import * as i2$2 from '@angular/router';
21
+ import { RouterModule } from '@angular/router';
22
+ import * as i3$2 from '@yelon/abc/reuse-tab';
23
+ import { ReuseTabModule } from '@yelon/abc/reuse-tab';
24
+ import * as i13 from '@yelon/bis/yunzai-widgets';
25
+ import { YunzaiWidgetsModule } from '@yelon/bis/yunzai-widgets';
26
+ import { StompService } from '@yelon/socket';
27
+ import * as i1$2 from '@yelon/theme/layout-default';
28
+ import { LayoutDisplayService, LayoutDefaultModule } from '@yelon/theme/layout-default';
29
+ import * as i12 from '@yelon/theme/theme-btn';
30
+ import { ThemeBtnModule } from '@yelon/theme/theme-btn';
31
+ import { YunzaiConfigService, WINDOW, useLocalStorageHeader, YUNZAI_CONFIG, NavType, useLocalStorageProjectInfo, hasFavicon, setFavicon, useLocalStorageCurrent, useLocalStorageHeaderType, useLocalStorageDefaultRoute, log } from '@yelon/util';
32
+ import * as i7 from 'ng-zorro-antd/avatar';
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';
40
+ import { Subject, takeUntil } from 'rxjs';
41
+ import { mergeBisConfig } from '@yelon/bis/config';
42
+ import * as i2$1 from 'ng-zorro-antd/menu';
43
+
44
+ class YunzaiNavApplicationComponent {
45
+ constructor() {
46
+ this.config = mergeBisConfig(inject(YunzaiConfigService));
47
+ this.http = inject(_HttpClient);
48
+ this.win = inject(WINDOW);
49
+ this.i18n = inject(YunzaiHttpI18NService);
50
+ this.destroy$ = new Subject();
51
+ this.state = {
52
+ active: false,
53
+ type: 'all',
54
+ topic: undefined,
55
+ topics: [],
56
+ list: [],
57
+ search: null
58
+ };
59
+ }
60
+ get showAllMenu() {
61
+ if (this.config.nav)
62
+ return this.config.nav.all;
63
+ return true;
64
+ }
65
+ get showMineMenu() {
66
+ if (this.config.nav)
67
+ return this.config.nav.mine;
68
+ return true;
69
+ }
70
+ ngOnInit() {
71
+ this.fetchAllTopic();
72
+ this.attachNav('all');
73
+ this.win.addEventListener('click', (event) => {
74
+ const { target } = event;
75
+ const btn = this.win.document.getElementById('navBtn');
76
+ const dropdown = this.win.document.getElementById('navDropdown');
77
+ if (btn && dropdown && !dropdown.contains(target) && !btn.contains(target)) {
78
+ this.state.active = false;
79
+ }
80
+ });
81
+ }
82
+ fetchAllTopic() {
83
+ const [, getTopics] = useLocalStorageHeader();
84
+ this.state.topics = getTopics();
85
+ }
86
+ attachNav(type, topic) {
87
+ this.state.type = type;
88
+ this.clearSearch();
89
+ if (type === 'all') {
90
+ this.displayAllNav();
91
+ }
92
+ if (type === 'mine') {
93
+ this.displayMineNav();
94
+ }
95
+ if (type === 'other' && topic) {
96
+ this.displayOtherNav(topic);
97
+ }
98
+ }
99
+ clearSearch() {
100
+ this.state.search = null;
101
+ }
102
+ displayAllNav() {
103
+ const [, getTopics] = useLocalStorageHeader();
104
+ this.state.list = getTopics();
105
+ }
106
+ displayMineNav() {
107
+ const [, getTopics] = useLocalStorageHeader();
108
+ this.state.list = getTopics()
109
+ .filter((topic) => {
110
+ topic.children = topic.children.filter((child) => {
111
+ return child.auth;
112
+ });
113
+ return topic;
114
+ })
115
+ .filter((topic) => {
116
+ return topic.children.length > 0;
117
+ });
118
+ }
119
+ displayOtherNav(topic) {
120
+ const [, getTopics] = useLocalStorageHeader();
121
+ this.state.topic = topic;
122
+ const temp = getTopics();
123
+ this.state.list = temp.filter(t => t.key === topic.key)[0].children;
124
+ }
125
+ diffChange(flag) {
126
+ if (flag) {
127
+ this.state.active = flag;
128
+ }
129
+ else {
130
+ this.state.active = !this.state.active;
131
+ }
132
+ }
133
+ open(topic) {
134
+ if (topic.key) {
135
+ this.http
136
+ .post(`/app-manager/web-scan/save`, {
137
+ appId: topic.key,
138
+ createDate: new Date()
139
+ })
140
+ .pipe(takeUntil(this.destroy$))
141
+ .subscribe();
142
+ }
143
+ switch (topic.target) {
144
+ case 'href':
145
+ this.win.location.href = topic.url;
146
+ break;
147
+ case 'blank':
148
+ this.win.open(topic.url);
149
+ break;
150
+ case 'target':
151
+ this.win.open(topic.url);
152
+ break;
153
+ default:
154
+ this.win.location.href = topic.url;
155
+ break;
156
+ }
157
+ }
158
+ onSearch() {
159
+ const [, getTopics] = useLocalStorageHeader();
160
+ const temp = getTopics();
161
+ if (this.state.search) {
162
+ this.state.list = temp
163
+ .filter((topic) => {
164
+ if (this.i18n.fanyi(topic.name).includes(this.state.search)) {
165
+ return topic;
166
+ }
167
+ else {
168
+ topic.children = topic.children.filter((child) => {
169
+ return this.i18n.fanyi(child.name).includes(this.state.search);
170
+ });
171
+ return topic;
172
+ }
173
+ })
174
+ .filter((topic) => {
175
+ return topic.children.length > 0;
176
+ });
177
+ }
178
+ else {
179
+ const [, getTopics] = useLocalStorageHeader();
180
+ this.state.list = getTopics();
181
+ }
182
+ }
183
+ ngOnDestroy() {
184
+ this.destroy$.complete();
185
+ }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiNavApplicationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: YunzaiNavApplicationComponent, isStandalone: true, selector: "yunzai-layout-nav-application", ngImport: i0, template: `
188
+ <ng-template #search>
189
+ <div nz-row class="yz-application-list-search">
190
+ <nz-input-group [nzPrefix]="prefixTemplate">
191
+ <input
192
+ data-event-id="_nav_search"
193
+ type="text"
194
+ nz-input
195
+ placeholder="{{ 'application.search' | i18n }}"
196
+ [(ngModel)]="state.search"
197
+ (ngModelChange)="onSearch()"
198
+ />
199
+ <ng-template #prefixTemplate>
200
+ <i nz-icon nzType="search" nzTheme="outline"></i>
201
+ </ng-template>
202
+ </nz-input-group>
203
+ </div>
204
+ </ng-template>
205
+
206
+ <ng-template #ld>
207
+ <div class="yz-application-list">
208
+ <ul>
209
+ @for (topic of state.list; track topic) {
210
+ <li>
211
+ <h5>{{ topic.name | i18n }}</h5>
212
+ @for (nav of topic.children; track nav) {
213
+ <a
214
+ data-event-id="_nav_item"
215
+ [attr.data-name]="nav.name | i18n"
216
+ href="javascript:;"
217
+ (click)="open(nav)"
218
+ >{{ nav.name | i18n }}</a
219
+ >
220
+ }
221
+ </li>
222
+ }
223
+ </ul>
224
+ </div>
225
+ </ng-template>
226
+
227
+ <div data-event-id="_nav_app" id="navBtn" class="yunzai-default__nav-item" (click)="diffChange()"
228
+ >{{ 'mode.nav' | i18n }}
229
+ </div>
230
+
231
+ <div class="yz-application" id="navDropdown" nz-row *ngIf="state.active">
232
+ <div nz-col [nzSpan]="3" class="yz-application-topic">
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>
254
+ </div>
255
+ <div nz-col [nzSpan]="21" class="yz-application-container">
256
+ @switch (state.type) {
257
+ @case ('all') {
258
+ <div>
259
+ <ng-template [ngTemplateOutlet]="search" />
260
+ <ng-template [ngTemplateOutlet]="ld" />
261
+ </div>
262
+ }
263
+ @case ('mine') {
264
+ <div>
265
+ <ng-template [ngTemplateOutlet]="search" />
266
+ <ng-template [ngTemplateOutlet]="ld" />
267
+ </div>
268
+ }
269
+ @case ('other') {
270
+ <div class="yz-application-list yz-application-list-other">
271
+ <div class="yz-application-list-item">
272
+ <ul>
273
+ @for (nav of state.list; track nav) {
274
+ <li data-event-id="_nav_item" [attr.data-name]="nav.name | i18n" (click)="open(nav)">
275
+ <a href="javascript:;">
276
+ <h4>{{ nav.name | i18n }}</h4>
277
+ <p>{{ nav.intro | i18n }}</p>
278
+ </a>
279
+ </li>
280
+ }
281
+ </ul>
282
+ </div>
283
+ </div>
284
+ }
285
+ }
286
+ </div>
287
+ </div>
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 }] }); }
289
+ }
290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiNavApplicationComponent, decorators: [{
291
+ type: Component,
292
+ args: [{
293
+ selector: `yunzai-layout-nav-application`,
294
+ template: `
295
+ <ng-template #search>
296
+ <div nz-row class="yz-application-list-search">
297
+ <nz-input-group [nzPrefix]="prefixTemplate">
298
+ <input
299
+ data-event-id="_nav_search"
300
+ type="text"
301
+ nz-input
302
+ placeholder="{{ 'application.search' | i18n }}"
303
+ [(ngModel)]="state.search"
304
+ (ngModelChange)="onSearch()"
305
+ />
306
+ <ng-template #prefixTemplate>
307
+ <i nz-icon nzType="search" nzTheme="outline"></i>
308
+ </ng-template>
309
+ </nz-input-group>
310
+ </div>
311
+ </ng-template>
312
+
313
+ <ng-template #ld>
314
+ <div class="yz-application-list">
315
+ <ul>
316
+ @for (topic of state.list; track topic) {
317
+ <li>
318
+ <h5>{{ topic.name | i18n }}</h5>
319
+ @for (nav of topic.children; track nav) {
320
+ <a
321
+ data-event-id="_nav_item"
322
+ [attr.data-name]="nav.name | i18n"
323
+ href="javascript:;"
324
+ (click)="open(nav)"
325
+ >{{ nav.name | i18n }}</a
326
+ >
327
+ }
328
+ </li>
329
+ }
330
+ </ul>
331
+ </div>
332
+ </ng-template>
333
+
334
+ <div data-event-id="_nav_app" id="navBtn" class="yunzai-default__nav-item" (click)="diffChange()"
335
+ >{{ 'mode.nav' | i18n }}
336
+ </div>
337
+
338
+ <div class="yz-application" id="navDropdown" nz-row *ngIf="state.active">
339
+ <div nz-col [nzSpan]="3" class="yz-application-topic">
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>
361
+ </div>
362
+ <div nz-col [nzSpan]="21" class="yz-application-container">
363
+ @switch (state.type) {
364
+ @case ('all') {
365
+ <div>
366
+ <ng-template [ngTemplateOutlet]="search" />
367
+ <ng-template [ngTemplateOutlet]="ld" />
368
+ </div>
369
+ }
370
+ @case ('mine') {
371
+ <div>
372
+ <ng-template [ngTemplateOutlet]="search" />
373
+ <ng-template [ngTemplateOutlet]="ld" />
374
+ </div>
375
+ }
376
+ @case ('other') {
377
+ <div class="yz-application-list yz-application-list-other">
378
+ <div class="yz-application-list-item">
379
+ <ul>
380
+ @for (nav of state.list; track nav) {
381
+ <li data-event-id="_nav_item" [attr.data-name]="nav.name | i18n" (click)="open(nav)">
382
+ <a href="javascript:;">
383
+ <h4>{{ nav.name | i18n }}</h4>
384
+ <p>{{ nav.intro | i18n }}</p>
385
+ </a>
386
+ </li>
387
+ }
388
+ </ul>
389
+ </div>
390
+ </div>
391
+ }
392
+ }
393
+ </div>
394
+ </div>
395
+ `,
396
+ standalone: true,
397
+ imports: [I18nPipe, FormsModule, NzFormModule, NzInputModule, CommonModule, NzGridModule]
398
+ }]
399
+ }] });
400
+
401
+ class YunzaiLayoutNavGroupComponent {
402
+ constructor() {
403
+ this.http = inject(_HttpClient);
404
+ this.destroy$ = new Subject();
405
+ this.win = inject(WINDOW);
406
+ this.state = {
407
+ topics: []
408
+ };
409
+ }
410
+ ngOnInit() {
411
+ const [, getTopics] = useLocalStorageHeader();
412
+ this.state.topics = getTopics() || [];
413
+ }
414
+ open(topic) {
415
+ if (topic.key) {
416
+ this.http
417
+ .post(`/app-manager/web-scan/save`, {
418
+ appId: topic.key,
419
+ createDate: new Date()
420
+ })
421
+ .pipe(takeUntil(this.destroy$))
422
+ .subscribe();
423
+ }
424
+ switch (topic.target) {
425
+ case 'href':
426
+ this.win.location.href = topic.url;
427
+ break;
428
+ case 'blank':
429
+ this.win.open(topic.url);
430
+ break;
431
+ case 'target':
432
+ this.win.open(topic.url);
433
+ break;
434
+ default:
435
+ this.win.location.href = topic.url;
436
+ break;
437
+ }
438
+ }
439
+ ngOnDestroy() {
440
+ this.destroy$.complete();
441
+ }
442
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutNavGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
443
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: YunzaiLayoutNavGroupComponent, isStandalone: true, selector: "yunzai-layout-nav-group", ngImport: i0, template: `
444
+ <div class="yz-application-group">
445
+ <nz-tabset>
446
+ @for (menu of state.topics; track menu) {
447
+ <nz-tab [nzTitle]="groupTitleTpl">
448
+ <ng-template #groupTitleTpl>
449
+ <a
450
+ data-event-id="_nav_topic"
451
+ [attr.data-name]="menu.name | i18n"
452
+ nz-dropdown
453
+ [nzDropdownMenu]="menuTpl"
454
+ [nzTrigger]="'click'"
455
+ [nzOverlayClassName]="'yz-application-dropdown'"
456
+ >
457
+ @if (menu.icon) {
458
+ <i nz-icon [nzType]="menu.icon" nzTheme="outline"></i>
459
+ }
460
+ {{ menu.name | i18n }}
461
+ @if (menu.children && menu.children.length > 0) {
462
+ <i nz-icon nzType="down" nzTheme="outline"></i>
463
+ }
464
+ </a>
465
+ <nz-dropdown-menu #menuTpl="nzDropdownMenu">
466
+ @if (menu.children && menu.children.length > 0) {
467
+ <ul nz-menu nzSelectable>
468
+ @for (item of menu.children; track item) {
469
+ <ng-container>
470
+ @if (item.auth) {
471
+ <li
472
+ data-event-id="_nav_item"
473
+ [attr.data-name]="item.name | i18n"
474
+ nz-menu-item
475
+ (click)="open(item)"
476
+ >
477
+ @if (item.icon) {
478
+ <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>
479
+ }
480
+ {{ item.name | i18n }}
481
+ </li>
482
+ }
483
+ </ng-container>
484
+ }
485
+ </ul>
486
+ }
487
+ </nz-dropdown-menu>
488
+ </ng-template>
489
+ </nz-tab>
490
+ }
491
+ </nz-tabset>
492
+ </div>
493
+ `, 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"] }] }); }
494
+ }
495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutNavGroupComponent, decorators: [{
496
+ type: Component,
497
+ args: [{
498
+ selector: `yunzai-layout-nav-group`,
499
+ template: `
500
+ <div class="yz-application-group">
501
+ <nz-tabset>
502
+ @for (menu of state.topics; track menu) {
503
+ <nz-tab [nzTitle]="groupTitleTpl">
504
+ <ng-template #groupTitleTpl>
505
+ <a
506
+ data-event-id="_nav_topic"
507
+ [attr.data-name]="menu.name | i18n"
508
+ nz-dropdown
509
+ [nzDropdownMenu]="menuTpl"
510
+ [nzTrigger]="'click'"
511
+ [nzOverlayClassName]="'yz-application-dropdown'"
512
+ >
513
+ @if (menu.icon) {
514
+ <i nz-icon [nzType]="menu.icon" nzTheme="outline"></i>
515
+ }
516
+ {{ menu.name | i18n }}
517
+ @if (menu.children && menu.children.length > 0) {
518
+ <i nz-icon nzType="down" nzTheme="outline"></i>
519
+ }
520
+ </a>
521
+ <nz-dropdown-menu #menuTpl="nzDropdownMenu">
522
+ @if (menu.children && menu.children.length > 0) {
523
+ <ul nz-menu nzSelectable>
524
+ @for (item of menu.children; track item) {
525
+ <ng-container>
526
+ @if (item.auth) {
527
+ <li
528
+ data-event-id="_nav_item"
529
+ [attr.data-name]="item.name | i18n"
530
+ nz-menu-item
531
+ (click)="open(item)"
532
+ >
533
+ @if (item.icon) {
534
+ <i nz-icon [nzType]="item.icon" nzTheme="outline"></i>
535
+ }
536
+ {{ item.name | i18n }}
537
+ </li>
538
+ }
539
+ </ng-container>
540
+ }
541
+ </ul>
542
+ }
543
+ </nz-dropdown-menu>
544
+ </ng-template>
545
+ </nz-tab>
546
+ }
547
+ </nz-tabset>
548
+ </div>
549
+ `,
550
+ standalone: true,
551
+ imports: [NzIconModule, NzDropDownModule, I18nPipe, NzTabsModule]
552
+ }]
553
+ }] });
554
+
555
+ class YunzaiLayoutNavTileComponent {
556
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutNavTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
557
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.6", type: YunzaiLayoutNavTileComponent, isStandalone: true, selector: "yunzai-layout-nav-tile", ngImport: i0, template: `<ng-template />`, isInline: true }); }
558
+ }
559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutNavTileComponent, decorators: [{
560
+ type: Component,
561
+ args: [{
562
+ selector: `yunzai-layout-nav-tile`,
563
+ template: `<ng-template />`,
564
+ standalone: true
565
+ }]
566
+ }] });
567
+
568
+ class YunzaiLayoutBasicComponent {
569
+ constructor() {
570
+ this.stomp = inject(StompService);
571
+ this.win = inject(WINDOW);
572
+ this.layoutDisplayService = inject(LayoutDisplayService);
573
+ this.conf = inject(YUNZAI_CONFIG);
574
+ this.NavType = NavType;
575
+ this.state = {
576
+ options: {
577
+ logoExpanded: `./assets/logo-full.svg`,
578
+ logoCollapsed: `./assets/logo.svg`
579
+ },
580
+ aside: {
581
+ name: '',
582
+ intro: '',
583
+ icon: ''
584
+ },
585
+ display: {
586
+ nav: true,
587
+ aside: true,
588
+ reusetab: true
589
+ },
590
+ navType: NavType.APPLICATION
591
+ };
592
+ this.headerStyleList = [];
593
+ this.applicationModal = {
594
+ isVisible: false,
595
+ loading: false
596
+ };
597
+ this.httpClient = inject(HttpClient);
598
+ }
599
+ get options() {
600
+ return this.state.options;
601
+ }
602
+ get navType() {
603
+ return this.state.navType;
604
+ }
605
+ get aside() {
606
+ return this.state.aside;
607
+ }
608
+ get displayReusetab() {
609
+ return this.state.display.reusetab;
610
+ }
611
+ get reusetabCSS() {
612
+ let cascadingStyleSheet = {};
613
+ if (!this.state.display.nav) {
614
+ cascadingStyleSheet = {
615
+ ...cascadingStyleSheet,
616
+ top: '0px'
617
+ };
618
+ }
619
+ if (!this.state.display.aside) {
620
+ cascadingStyleSheet = {
621
+ ...cascadingStyleSheet,
622
+ left: '0px'
623
+ };
624
+ }
625
+ return cascadingStyleSheet;
626
+ }
627
+ ngOnInit() {
628
+ this.config = this.conf.bis;
629
+ this.initLogo();
630
+ this.initFavicon();
631
+ this.initNavType();
632
+ this.initAside();
633
+ this.addLayoutDisplayListener();
634
+ this.stomp.listen();
635
+ this.toIndex();
636
+ }
637
+ initFavicon() {
638
+ const [, getProjectInfo] = useLocalStorageProjectInfo();
639
+ const projectInfo = getProjectInfo();
640
+ if (projectInfo.faviconUrl) {
641
+ hasFavicon(projectInfo.faviconUrl).then((has) => {
642
+ if (has) {
643
+ setFavicon(projectInfo.faviconUrl);
644
+ }
645
+ else {
646
+ setFavicon('./assets/favicon.ico');
647
+ }
648
+ });
649
+ }
650
+ }
651
+ initAside() {
652
+ const [, getCurrent] = useLocalStorageCurrent();
653
+ const aside = getCurrent();
654
+ this.state.aside = { ...aside };
655
+ }
656
+ initLogo() {
657
+ const [, getProjectInfo] = useLocalStorageProjectInfo();
658
+ const projectInfo = getProjectInfo();
659
+ this.state.options.logoExpanded = projectInfo.maxLogoUrl ? projectInfo.maxLogoUrl : `./assets/logo-full.svg`;
660
+ this.state.options.logoCollapsed = projectInfo.miniLogoUrl ? projectInfo.miniLogoUrl : `./assets/logo.svg`;
661
+ }
662
+ initNavType() {
663
+ const [, getHeaderType] = useLocalStorageHeaderType();
664
+ const [, getProjectInfo] = useLocalStorageProjectInfo();
665
+ const navType = getHeaderType();
666
+ const projectInfo = getProjectInfo();
667
+ if (navType !== null) {
668
+ this.state.navType = navType;
669
+ }
670
+ else {
671
+ this.state.navType = NavType.APPLICATION;
672
+ }
673
+ if (projectInfo.headerStyle && projectInfo.headerStyle.length > 0) {
674
+ this.headerStyleList = projectInfo.headerStyle;
675
+ const hasThis = this.headerStyleList.some(item => item.value === this.state.navType);
676
+ if (!hasThis) {
677
+ this.state.navType = projectInfo.headerStyle[0].value;
678
+ const [setHeaderType] = useLocalStorageHeaderType();
679
+ setHeaderType(this.state.navType);
680
+ }
681
+ }
682
+ }
683
+ toIndex() {
684
+ const [, getDefaultRoute] = useLocalStorageDefaultRoute();
685
+ const defaultRoute = getDefaultRoute();
686
+ log('YunzaiLayoutBasicComponent: ', `todo: the default route was ${defaultRoute}, 但是还没想好如何实现.`);
687
+ }
688
+ onNavTypeChange(type) {
689
+ const [setHeaderType] = useLocalStorageHeaderType();
690
+ setHeaderType(type);
691
+ this.win.location.reload();
692
+ }
693
+ addLayoutDisplayListener() {
694
+ this.layoutDisplayService.listen('reuseTab', (display) => {
695
+ this.state.display.reusetab = display;
696
+ });
697
+ this.layoutDisplayService.listen('nav', (display) => {
698
+ this.state.display.nav = display;
699
+ });
700
+ this.layoutDisplayService.listen('aside', (display) => {
701
+ this.state.display.aside = display;
702
+ });
703
+ }
704
+ // 关于本应用
705
+ aboutApplication() {
706
+ const urlArr = window.location.pathname.split(`${this.config.baseUrl}/`);
707
+ if (urlArr.length > 1) {
708
+ // 应用标识,截取路径中 /backstage/后第一个字符串
709
+ // 例: http://222.30.194.61/backstage/auth/page/oafportal/#/base/menu 中 auth
710
+ const name = urlArr[1].split('/')[0];
711
+ this.applicationModal.isVisible = true;
712
+ this.applicationModal.loading = true;
713
+ // eslint-disable-next-line deprecation/deprecation
714
+ this.httpClient.get(`/basic/api/app/aboutApp?name=${name}`).subscribe(
715
+ // @ts-ignore
716
+ (response) => {
717
+ this.applicationModal.loading = false;
718
+ if (response.data) {
719
+ this.applicationInfo = response.data;
720
+ }
721
+ }, () => {
722
+ this.applicationModal.loading = false;
723
+ });
724
+ }
725
+ }
726
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutBasicComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
727
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: YunzaiLayoutBasicComponent, isStandalone: true, selector: "yunzai-layout-basic", ngImport: i0, template: `
728
+ <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="displayReusetab ? contentTpl : noneTpl">
729
+ <layout-default-header-item direction="left">
730
+ <ng-container [ngSwitch]="navType">
731
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
732
+ <yunzai-layout-nav-application />
733
+ </ng-container>
734
+ <ng-container *ngSwitchCase="NavType.GROUP">
735
+ <yunzai-layout-nav-group />
736
+ </ng-container>
737
+ <ng-container *ngSwitchCase="NavType.TILE">
738
+ <yunzai-layout-nav-tile />
739
+ </ng-container>
740
+ <ng-container *ngSwitchCase="NavType.BLANK" />
741
+ <ng-container *ngSwitchCase="NavType.TABS" />
742
+ <ng-container *ngSwitchDefault>
743
+ <yunzai-layout-nav-application />
744
+ </ng-container>
745
+ </ng-container>
746
+ </layout-default-header-item>
747
+ <layout-default-header-item direction="right" hidden="mobile">
748
+ <yunzai-header-notify />
749
+ </layout-default-header-item>
750
+ <layout-default-header-item direction="right" hidden="mobile">
751
+ <theme-btn />
752
+ </layout-default-header-item>
753
+ <layout-default-header-item direction="right" hidden="mobile">
754
+ <div
755
+ data-event-id="_nav_settings"
756
+ layout-default-header-item-trigger
757
+ nz-dropdown
758
+ [nzDropdownMenu]="settingsMenu"
759
+ nzTrigger="click"
760
+ nzPlacement="bottomRight"
761
+ >
762
+ <i nz-icon nzType="setting"></i>
763
+ </div>
764
+ <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
765
+ <div nz-menu style="width: 200px;">
766
+ <div data-event-id="_nav_mode" nz-menu-item>
767
+ {{ 'mode.nav' | i18n }}
768
+ </div>
769
+
770
+ @if (headerStyleList.length > 1) {
771
+ @for (i of headerStyleList; track $index) {
772
+ <div
773
+ data-event-id="_nav_mode"
774
+ nz-menu-item
775
+ [attr.data-type]="i.value"
776
+ (click)="onNavTypeChange(i.value)"
777
+ >
778
+ <ng-container [ngSwitch]="i.value">
779
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
780
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
781
+ </ng-container>
782
+ <ng-container *ngSwitchCase="NavType.GROUP">
783
+ <i nz-icon nzType="group" class="mr-sm"></i>
784
+ </ng-container>
785
+ <ng-container *ngSwitchCase="NavType.TILE">
786
+ <i nz-icon nzType="dash" class="mr-sm"></i>
787
+ </ng-container>
788
+ <ng-container *ngSwitchCase="NavType.BLANK">
789
+ <i nz-icon nzType="border" class="mr-sm"></i>
790
+ </ng-container>
791
+ <ng-container *ngSwitchCase="NavType.TABS">
792
+ <i nz-icon nzType="insert-row-above" class="mr-sm"></i>
793
+ </ng-container>
794
+ <ng-container *ngSwitchDefault>
795
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
796
+ </ng-container>
797
+ {{ 'mode.nav.' + i.value | i18n }}
798
+ </ng-container>
799
+ </div>
800
+ }
801
+ }
802
+
803
+ <div data-event-id="_nav_fullscreen" nz-menu-item>
804
+ <yunzai-header-fullscreen />
805
+ </div>
806
+ <div data-event-id="_nav_clearstorage" nz-menu-item>
807
+ <yunzai-header-clear-storage />
808
+ </div>
809
+ <div data-event-id="_nav_i18n" nz-menu-item>
810
+ <yunzai-header-i18n />
811
+ </div>
812
+ </div>
813
+ </nz-dropdown-menu>
814
+ </layout-default-header-item>
815
+ <layout-default-header-item direction="right">
816
+ <yunzai-header-user />
817
+ </layout-default-header-item>
818
+ </layout-default>
819
+ <ng-template #asideUserTpl>
820
+ <div data-event-id="_route_user" class="yunzai-default__aside-user">
821
+ <nz-avatar
822
+ class="yunzai-default__aside-user-avatar"
823
+ [nzSize]="40"
824
+ [nzSrc]="aside.icon"
825
+ (click)="aboutApplication()"
826
+ />
827
+ <div class="yunzai-default__aside-user-info" nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu">
828
+ <strong>{{ aside.name | i18n }}</strong>
829
+ <p>{{ aside.intro | i18n }}</p>
830
+ </div>
831
+ </div>
832
+ <nz-dropdown-menu #userMenu="nzDropdownMenu">
833
+ <ul nz-menu>
834
+ <li data-event-id="_route_backhome" nz-menu-item routerLink="/">{{ 'back.home' | i18n }}</li>
835
+ </ul>
836
+ </nz-dropdown-menu>
837
+ </ng-template>
838
+ <ng-template #contentTpl>
839
+ <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
840
+ <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
841
+ </ng-template>
842
+ <ng-template #noneTpl>
843
+ <router-outlet />
844
+ </ng-template>
845
+
846
+ <nz-modal
847
+ nzTitle="关于本应用"
848
+ [(nzVisible)]="applicationModal.isVisible"
849
+ [nzOkText]="null"
850
+ [nzCancelText]="'关闭'"
851
+ [nzWidth]="700"
852
+ (nzOnCancel)="applicationModal.isVisible = false"
853
+ >
854
+ <ng-container *nzModalContent>
855
+ <nz-skeleton [nzLoading]="applicationModal.loading" [nzActive]="true">
856
+ <nz-descriptions nzBordered [nzSize]="'middle'" [nzColumn]="{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 2, xs: 1 }">
857
+ <nz-descriptions-item nzTitle="应用名称">{{ applicationInfo?.showName }}</nz-descriptions-item>
858
+ <nz-descriptions-item nzTitle="应用标识">{{ applicationInfo?.name }}</nz-descriptions-item>
859
+ <nz-descriptions-item nzTitle="版本总数">{{ applicationInfo?.versionNum }}</nz-descriptions-item>
860
+ <nz-descriptions-item nzTitle="应用首次部署时间">{{
861
+ applicationInfo?.firstDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
862
+ }}</nz-descriptions-item>
863
+ <nz-descriptions-item nzTitle="当前版本">{{ applicationInfo?.currentVersion }}</nz-descriptions-item>
864
+ <nz-descriptions-item nzTitle="当前版本部署时间">{{
865
+ applicationInfo?.currentDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
866
+ }}</nz-descriptions-item>
867
+ <nz-descriptions-item nzTitle="最新版本">{{ applicationInfo?.lastVersion }}</nz-descriptions-item>
868
+ <nz-descriptions-item nzTitle="最新版本发布时间">{{
869
+ applicationInfo?.lastPushDate | date: 'yyyy-MM-dd HH:mm:ss'
870
+ }}</nz-descriptions-item>
871
+ </nz-descriptions>
872
+ </nz-skeleton>
873
+ </ng-container>
874
+ </nz-modal>
875
+ `, 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" }] }); }
876
+ }
877
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutBasicComponent, decorators: [{
878
+ type: Component,
879
+ args: [{
880
+ selector: `yunzai-layout-basic`,
881
+ template: `
882
+ <layout-default [options]="options" [asideUser]="asideUserTpl" [content]="displayReusetab ? contentTpl : noneTpl">
883
+ <layout-default-header-item direction="left">
884
+ <ng-container [ngSwitch]="navType">
885
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
886
+ <yunzai-layout-nav-application />
887
+ </ng-container>
888
+ <ng-container *ngSwitchCase="NavType.GROUP">
889
+ <yunzai-layout-nav-group />
890
+ </ng-container>
891
+ <ng-container *ngSwitchCase="NavType.TILE">
892
+ <yunzai-layout-nav-tile />
893
+ </ng-container>
894
+ <ng-container *ngSwitchCase="NavType.BLANK" />
895
+ <ng-container *ngSwitchCase="NavType.TABS" />
896
+ <ng-container *ngSwitchDefault>
897
+ <yunzai-layout-nav-application />
898
+ </ng-container>
899
+ </ng-container>
900
+ </layout-default-header-item>
901
+ <layout-default-header-item direction="right" hidden="mobile">
902
+ <yunzai-header-notify />
903
+ </layout-default-header-item>
904
+ <layout-default-header-item direction="right" hidden="mobile">
905
+ <theme-btn />
906
+ </layout-default-header-item>
907
+ <layout-default-header-item direction="right" hidden="mobile">
908
+ <div
909
+ data-event-id="_nav_settings"
910
+ layout-default-header-item-trigger
911
+ nz-dropdown
912
+ [nzDropdownMenu]="settingsMenu"
913
+ nzTrigger="click"
914
+ nzPlacement="bottomRight"
915
+ >
916
+ <i nz-icon nzType="setting"></i>
917
+ </div>
918
+ <nz-dropdown-menu #settingsMenu="nzDropdownMenu">
919
+ <div nz-menu style="width: 200px;">
920
+ <div data-event-id="_nav_mode" nz-menu-item>
921
+ {{ 'mode.nav' | i18n }}
922
+ </div>
923
+
924
+ @if (headerStyleList.length > 1) {
925
+ @for (i of headerStyleList; track $index) {
926
+ <div
927
+ data-event-id="_nav_mode"
928
+ nz-menu-item
929
+ [attr.data-type]="i.value"
930
+ (click)="onNavTypeChange(i.value)"
931
+ >
932
+ <ng-container [ngSwitch]="i.value">
933
+ <ng-container *ngSwitchCase="NavType.APPLICATION">
934
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
935
+ </ng-container>
936
+ <ng-container *ngSwitchCase="NavType.GROUP">
937
+ <i nz-icon nzType="group" class="mr-sm"></i>
938
+ </ng-container>
939
+ <ng-container *ngSwitchCase="NavType.TILE">
940
+ <i nz-icon nzType="dash" class="mr-sm"></i>
941
+ </ng-container>
942
+ <ng-container *ngSwitchCase="NavType.BLANK">
943
+ <i nz-icon nzType="border" class="mr-sm"></i>
944
+ </ng-container>
945
+ <ng-container *ngSwitchCase="NavType.TABS">
946
+ <i nz-icon nzType="insert-row-above" class="mr-sm"></i>
947
+ </ng-container>
948
+ <ng-container *ngSwitchDefault>
949
+ <i nz-icon nzType="appstore" class="mr-sm"></i>
950
+ </ng-container>
951
+ {{ 'mode.nav.' + i.value | i18n }}
952
+ </ng-container>
953
+ </div>
954
+ }
955
+ }
956
+
957
+ <div data-event-id="_nav_fullscreen" nz-menu-item>
958
+ <yunzai-header-fullscreen />
959
+ </div>
960
+ <div data-event-id="_nav_clearstorage" nz-menu-item>
961
+ <yunzai-header-clear-storage />
962
+ </div>
963
+ <div data-event-id="_nav_i18n" nz-menu-item>
964
+ <yunzai-header-i18n />
965
+ </div>
966
+ </div>
967
+ </nz-dropdown-menu>
968
+ </layout-default-header-item>
969
+ <layout-default-header-item direction="right">
970
+ <yunzai-header-user />
971
+ </layout-default-header-item>
972
+ </layout-default>
973
+ <ng-template #asideUserTpl>
974
+ <div data-event-id="_route_user" class="yunzai-default__aside-user">
975
+ <nz-avatar
976
+ class="yunzai-default__aside-user-avatar"
977
+ [nzSize]="40"
978
+ [nzSrc]="aside.icon"
979
+ (click)="aboutApplication()"
980
+ />
981
+ <div class="yunzai-default__aside-user-info" nz-dropdown nzTrigger="click" [nzDropdownMenu]="userMenu">
982
+ <strong>{{ aside.name | i18n }}</strong>
983
+ <p>{{ aside.intro | i18n }}</p>
984
+ </div>
985
+ </div>
986
+ <nz-dropdown-menu #userMenu="nzDropdownMenu">
987
+ <ul nz-menu>
988
+ <li data-event-id="_route_backhome" nz-menu-item routerLink="/">{{ 'back.home' | i18n }}</li>
989
+ </ul>
990
+ </nz-dropdown-menu>
991
+ </ng-template>
992
+ <ng-template #contentTpl>
993
+ <reuse-tab #reuseTab [ngStyle]="reusetabCSS" />
994
+ <router-outlet (activate)="reuseTab.activate($event)" (attach)="reuseTab.activate($event)" />
995
+ </ng-template>
996
+ <ng-template #noneTpl>
997
+ <router-outlet />
998
+ </ng-template>
999
+
1000
+ <nz-modal
1001
+ nzTitle="关于本应用"
1002
+ [(nzVisible)]="applicationModal.isVisible"
1003
+ [nzOkText]="null"
1004
+ [nzCancelText]="'关闭'"
1005
+ [nzWidth]="700"
1006
+ (nzOnCancel)="applicationModal.isVisible = false"
1007
+ >
1008
+ <ng-container *nzModalContent>
1009
+ <nz-skeleton [nzLoading]="applicationModal.loading" [nzActive]="true">
1010
+ <nz-descriptions nzBordered [nzSize]="'middle'" [nzColumn]="{ xxl: 2, xl: 2, lg: 2, md: 2, sm: 2, xs: 1 }">
1011
+ <nz-descriptions-item nzTitle="应用名称">{{ applicationInfo?.showName }}</nz-descriptions-item>
1012
+ <nz-descriptions-item nzTitle="应用标识">{{ applicationInfo?.name }}</nz-descriptions-item>
1013
+ <nz-descriptions-item nzTitle="版本总数">{{ applicationInfo?.versionNum }}</nz-descriptions-item>
1014
+ <nz-descriptions-item nzTitle="应用首次部署时间">{{
1015
+ applicationInfo?.firstDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
1016
+ }}</nz-descriptions-item>
1017
+ <nz-descriptions-item nzTitle="当前版本">{{ applicationInfo?.currentVersion }}</nz-descriptions-item>
1018
+ <nz-descriptions-item nzTitle="当前版本部署时间">{{
1019
+ applicationInfo?.currentDeploymentDate | date: 'yyyy-MM-dd HH:mm:ss'
1020
+ }}</nz-descriptions-item>
1021
+ <nz-descriptions-item nzTitle="最新版本">{{ applicationInfo?.lastVersion }}</nz-descriptions-item>
1022
+ <nz-descriptions-item nzTitle="最新版本发布时间">{{
1023
+ applicationInfo?.lastPushDate | date: 'yyyy-MM-dd HH:mm:ss'
1024
+ }}</nz-descriptions-item>
1025
+ </nz-descriptions>
1026
+ </nz-skeleton>
1027
+ </ng-container>
1028
+ </nz-modal>
1029
+ `,
1030
+ standalone: true,
1031
+ imports: [
1032
+ LayoutDefaultModule,
1033
+ RouterModule,
1034
+ ReuseTabModule,
1035
+ CommonModule,
1036
+ I18nPipe,
1037
+ NzDropDownModule,
1038
+ NzAvatarModule,
1039
+ NzIconModule,
1040
+ NzModalModule,
1041
+ NzSkeletonModule,
1042
+ NzDescriptionsModule,
1043
+ ThemeBtnModule,
1044
+ YunzaiWidgetsModule,
1045
+ YunzaiNavApplicationComponent,
1046
+ YunzaiLayoutNavGroupComponent,
1047
+ YunzaiLayoutNavTileComponent
1048
+ ]
1049
+ }]
1050
+ }] });
1051
+
1052
+ const COMPONENTS = [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent];
1053
+ class YunzaiLayoutModule {
1054
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1055
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutModule, imports: [I18nPipe,
1056
+ FormsModule,
1057
+ NzFormModule,
1058
+ NzInputModule,
1059
+ CommonModule,
1060
+ NzGridModule,
1061
+ NzIconModule,
1062
+ NzDropDownModule,
1063
+ NzTabsModule, YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent], exports: [YunzaiLayoutNavTileComponent, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
1064
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutModule, imports: [FormsModule,
1065
+ NzFormModule,
1066
+ NzInputModule,
1067
+ CommonModule,
1068
+ NzGridModule,
1069
+ NzIconModule,
1070
+ NzDropDownModule,
1071
+ NzTabsModule, YunzaiLayoutNavGroupComponent, YunzaiLayoutBasicComponent] }); }
1072
+ }
1073
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: YunzaiLayoutModule, decorators: [{
1074
+ type: NgModule,
1075
+ args: [{
1076
+ imports: [
1077
+ I18nPipe,
1078
+ FormsModule,
1079
+ NzFormModule,
1080
+ NzInputModule,
1081
+ CommonModule,
1082
+ NzGridModule,
1083
+ NzIconModule,
1084
+ NzDropDownModule,
1085
+ NzTabsModule,
1086
+ ...COMPONENTS
1087
+ ],
1088
+ exports: COMPONENTS
1089
+ }]
1090
+ }] });
1091
+
1092
+ /**
1093
+ * Generated bundle index. Do not edit.
1094
+ */
1095
+
1096
+ export { YunzaiLayoutBasicComponent, YunzaiLayoutModule, YunzaiLayoutNavGroupComponent, YunzaiLayoutNavTileComponent, YunzaiNavApplicationComponent };
1097
+ //# sourceMappingURL=layout.mjs.map