[web-app] ng-alain模版工程初始化
This commit is contained in:
127
web-app/src/app/core/startup/startup.service.ts
Normal file
127
web-app/src/app/core/startup/startup.service.ts
Normal file
@@ -0,0 +1,127 @@
|
||||
import { Injectable, Inject } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { DA_SERVICE_TOKEN, ITokenService } from '@delon/auth';
|
||||
import { ALAIN_I18N_TOKEN, MenuService, SettingsService, TitleService } from '@delon/theme';
|
||||
import { ACLService } from '@delon/acl';
|
||||
import { I18NService } from '../i18n/i18n.service';
|
||||
import { Observable, zip, of } from 'rxjs';
|
||||
import { catchError, map } from 'rxjs/operators';
|
||||
import type { NzSafeAny } from 'ng-zorro-antd/core/types';
|
||||
import { NzIconService } from 'ng-zorro-antd/icon';
|
||||
|
||||
import { ICONS } from '../../../style-icons';
|
||||
import { ICONS_AUTO } from '../../../style-icons-auto';
|
||||
|
||||
/**
|
||||
* Used for application startup
|
||||
* Generally used to get the basic data of the application, like: Menu Data, User Data, etc.
|
||||
*/
|
||||
@Injectable()
|
||||
export class StartupService {
|
||||
constructor(
|
||||
iconSrv: NzIconService,
|
||||
private menuService: MenuService,
|
||||
@Inject(ALAIN_I18N_TOKEN) private i18n: I18NService,
|
||||
private settingService: SettingsService,
|
||||
private aclService: ACLService,
|
||||
private titleService: TitleService,
|
||||
@Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService,
|
||||
private httpClient: HttpClient,
|
||||
private router: Router
|
||||
) {
|
||||
iconSrv.addIcon(...ICONS_AUTO, ...ICONS);
|
||||
}
|
||||
|
||||
|
||||
private viaHttp(): Observable<void> {
|
||||
const defaultLang = this.i18n.defaultLang;
|
||||
return zip(this.i18n.loadLangData(defaultLang), this.httpClient.get('assets/tmp/app-data.json')).pipe(
|
||||
catchError((res: NzSafeAny) => {
|
||||
console.warn(`StartupService.load: Network request failed`, res);
|
||||
setTimeout(() => this.router.navigateByUrl(`/exception/500`));
|
||||
return [];
|
||||
}),
|
||||
map(([langData, appData]: [Record<string, string>, NzSafeAny]) => {
|
||||
// setting language data
|
||||
this.i18n.use(defaultLang, langData);
|
||||
|
||||
// Application data
|
||||
// Application information: including site name, description, year
|
||||
this.settingService.setApp(appData.app);
|
||||
// User information: including name, avatar, email address
|
||||
this.settingService.setUser(appData.user);
|
||||
// ACL: Set the permissions to full, https://ng-alain.com/acl/getting-started
|
||||
this.aclService.setFull(true);
|
||||
// Menu data, https://ng-alain.com/theme/menu
|
||||
this.menuService.add(appData.menu);
|
||||
// Can be set page suffix title, https://ng-alain.com/theme/title
|
||||
this.titleService.suffix = appData.app.name;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private viaMockI18n(): Observable<void> {
|
||||
const defaultLang = this.i18n.defaultLang;
|
||||
return this.i18n.loadLangData(defaultLang).pipe(
|
||||
map((langData: NzSafeAny) => {
|
||||
this.i18n.use(defaultLang, langData);
|
||||
|
||||
this.viaMock();
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
private viaMock(): Observable<void> {
|
||||
// const tokenData = this.tokenService.get();
|
||||
// if (!tokenData.token) {
|
||||
// this.router.navigateByUrl(this.tokenService.login_url!);
|
||||
// return;
|
||||
// }
|
||||
// mock
|
||||
const app: any = {
|
||||
name: `HertzBeat`,
|
||||
description: `面向开发者,易用友好的高性能监控云服务`
|
||||
};
|
||||
const user: any = {
|
||||
name: 'Admin',
|
||||
avatar: './assets/tmp/img/avatar.svg',
|
||||
email: 'tomsun28@outlook.com',
|
||||
token: '123456789'
|
||||
};
|
||||
// Application information: including site name, description, year
|
||||
this.settingService.setApp(app);
|
||||
// User information: including name, avatar, email address
|
||||
this.settingService.setUser(user);
|
||||
// ACL: Set the permissions to full, https://ng-alain.com/acl/getting-started
|
||||
this.aclService.setFull(true);
|
||||
// Menu data, https://ng-alain.com/theme/menu
|
||||
this.menuService.add([
|
||||
{
|
||||
text: 'Main',
|
||||
group: true,
|
||||
children: [
|
||||
{
|
||||
text: 'Dashboard',
|
||||
link: '/dashboard',
|
||||
icon: { type: 'icon', value: 'appstore' }
|
||||
}
|
||||
]
|
||||
}
|
||||
]);
|
||||
// Can be set page suffix title, https://ng-alain.com/theme/title
|
||||
this.titleService.suffix = app.name;
|
||||
|
||||
return of();
|
||||
}
|
||||
|
||||
load(): Observable<void> {
|
||||
// http
|
||||
// return this.viaHttp();
|
||||
// mock: Don’t use it in a production environment. ViaMock is just to simulate some data to make the scaffolding work normally
|
||||
// mock:请勿在生产环境中这么使用,viaMock 单纯只是为了模拟一些数据使脚手架一开始能正常运行
|
||||
return this.viaMockI18n();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user