refactor: remove obsolete template marketplace (#4207)

This commit is contained in:
Logic
2026-07-14 21:39:54 +08:00
committed by GitHub
parent 0d3f142849
commit 34940db118
244 changed files with 0 additions and 25973 deletions
-1
View File
@@ -17,7 +17,6 @@
/home export-ignore
/hip export-ignore
/template-marketplace export-ignore
/.github export-ignore
/.idea export-ignore
/.devcontainer export-ignore
-152
View File
@@ -1,152 +0,0 @@
---
id: template_marketplace
title: Template Marketplace
sidebar_label: Template Marketplace
---
> HertzBeat official template marketplace: users can freely upload, download, view, search and share monitoring template files.
## Basic Functions
### Search
💡 Guest availability
> Display template name, brief description, favorites, downloads, views and other information
1. **No filter: displayed in order of upload**
![search.png](/img/template-marketplace/search.png)
2. **Filtering by category: currently divided into six categories**
> **📋Todo:** develop tag function, subdivided within the category, such as database monitoring template can be divided into MySQL, Oracle, etc.
![search-category.png](/img/template-marketplace/search-category.png)
3. **Fuzzy search by Title**
![search-name.png](/img/template-marketplace/search-name.png)
4. **Hover window function: download the latest version, view details, favorite/un-favorite**
> Show if the user has favorites after logging in
![img.png](/img/template-marketplace/hover-window-guest.png)![img_1.png](/img/template-marketplace/hover-window-user.png)
5. **Sort: Eight Sorting Methods**
> **📋Todo:** Waiting for the actual installation
### Template Detail
💡 Guest availability
> Display basic information about the template, such as name, author, update time, version information, etc.
1. **Info: Summary information, detailed information and other information**
> **📋Todo:** Upgrade to MarkDown format
![img.png](/img/template-marketplace/detail-info.png)
2. **Version: Historical version download, sharing and basic information display**
> **📋Todo:** Set up a view function for each historical version to display information such as the version description.
![img.png](/img/template-marketplace/detail-version.png)
3. **FAQ**
> **📋Todo:** Discussion or issue Q&A section
![img.png](/img/template-marketplace/detail-faq.png)
4. **Download**
> The latest version can be downloaded directly from the list hover window.
> The latest version can also be downloaded directly from the template detail page.
> The historical version can be downloaded from the version page.
![img.png](/img/template-marketplace/download.png)
5. **Share**
> Template details page to share the latest version.
> Version page to share historical versions.
> Sharing will automatically copy the sharing URL to the clipboard, and the person being shared can download the file via that URL
>
> **📋Todo:** Shared template detail page is accessed through the URL of the shared template, and the shared person is free to choose whether to download or not.
![img.png](/img/template-marketplace/share.png)
### User Center
💡 User availability
> Provide asset management, collection management and upload function
>
> **📋Todo:** Overview page, notification page, user settings page
1. **Asset: Manage all templates uploaded by user themselves**
> Provides the ability to download the latest version and view details
>
> **📋Todo:** Function to update template information
![img_1.png](/img/template-marketplace/user-center-asset.png)
![img.png](/img/template-marketplace/asset-detail.png)
2. **Version Upgrade**
> The user defines the new version number under this template family, updates the version information, and uploads the latest version of the file
![img.png](/img/template-marketplace/asset-upgrade.png)
3. **Star**
![img.png](/img/template-marketplace/user-center-star.png)
![img.png](/img/template-marketplace/user-center-star-detail.png)
4. **Upload**
> Create a new template series and upload the first version of the file
>
> Fill in the template name, select the template category, fill in the description information and version information, and upload files
![img.png](/img/template-marketplace/user-center-upload.png)
### Sign Up & Login
💡 Guest availability
1. **Sign up**
> Usernames can be duplicated, but email addresses are unique
>
> **📋Todo:** Captcha function, email verification function
![img.png](/img/template-marketplace/sign-up.png)
2. **Login**
> **📋Todo:** Captcha function and forgot password function
![img.png](/img/template-marketplace/email-login.png)
## Development Steps
> Download `template-marketplace/hertzbeat-template-hub` and `template-marketplace/hertzbeat-template-hub-web-app` projects respectively
The front-end project in accordance with README.md directly start
The back-end project steps:
1. Run the `sql` script in the `template-marketplace/hertzbeat-template-hub/sql` to create database tables
2. Install MinIO
3. Config `MySQL` and `MinIO` in the `application.yml`
4. Start the back-end project
Other issues can be fed back through the communication group ISSUE!
@@ -1,16 +0,0 @@
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = single
[*.md]
max_line_length = off
trim_trailing_whitespace = false
@@ -1,42 +0,0 @@
# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
# Compiled output
/dist
/tmp
/out-tsc
/bazel-out
# Node
/node_modules
npm-debug.log
yarn-error.log
# IDEs and editors
.idea/
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# Miscellaneous
/.angular/cache
.sass-cache/
/connect.lock
/coverage
/libpeerconnection.log
testem.log
/typings
# System files
.DS_Store
Thumbs.db
@@ -1,31 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
module.exports = {
singleQuote: true,
useTabs: false,
printWidth: 140,
tabWidth: 2,
semi: true,
htmlWhitespaceSensitivity: 'strict',
arrowParens: 'avoid',
bracketSpacing: true,
proseWrap: 'preserve',
trailingComma: 'none',
endOfLine: 'lf'
};
@@ -1,27 +0,0 @@
# HertzBeat Template Hub Web App
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.5.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -1,186 +0,0 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"hertzbeat-template-hub-web-app": {
"projectType": "application",
"root": "",
"sourceRoot": "src",
"prefix": "app",
"schematics": {
"@schematics/angular:component": {
"style": "css"
},
"@schematics/angular:application": {
"strict": true
}
},
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"preserveSymlinks": true,
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "tsconfig.app.json",
"polyfills": [
"zone.js"
],
"assets": [
"src/assets",
"src/favicon.ico",
{
"glob": "**/*",
"input": "./node_modules/@ant-design/icons-angular/src/inline-svg/",
"output": "/assets/"
},
{
"glob": "**/*",
"input": "node_modules/monaco-editor/min/vs",
"output": "/assets/vs/"
}
],
"styles": [
"src/styles.css",
"node_modules/ng-zorro-antd/ng-zorro-antd.min.css",
"node_modules/slick-carousel/slick/slick.scss",
"node_modules/slick-carousel/slick/slick-theme.scss"
],
"scripts": [
"node_modules/jquery/dist/jquery.min.js",
"node_modules/slick-carousel/slick/slick.min.js"
],
"allowedCommonJsDependencies": [
"ajv",
"ajv-formats",
"mockjs",
"date-fns",
"file-saver",
"extend"
],
"stylePreprocessorOptions": {
"includePaths": [
"node_modules/"
]
}
},
"configurations": {
"production": {
"extractLicenses": false,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"outputHashing": "all",
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "6mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
},
"development": {
"buildOptimizer": false,
"optimization": false,
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
"namedChunks": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"proxyConfig": "proxy.conf.json",
"buildTarget": "hertzbeat-template-hub-web-app:build"
},
"configurations": {
"production": {
"buildTarget": "hertzbeat-template-hub-web-app:build:production"
},
"development": {
"buildTarget": "hertzbeat-template-hub-web-app:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"buildTarget": "hertzbeat-template-hub-web-app:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": [
"zone.js",
"zone.js/testing"
],
"tsConfig": "tsconfig.spec.json",
"assets": [
"src/assets",
{
"glob": "**/*",
"input": "public"
}
],
"styles": [
"src/styles.css"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-eslint/builder:lint",
"options": {
"lintFilePatterns": [
"src/**/*.ts",
"src/**/*.html"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "hertzbeat-template-hub-web-app:serve"
},
"configurations": {
"production": {
"devServerTarget": "hertzbeat-template-hub-web-app:serve:production"
}
}
}
}
}
},
"cli": {
"packageManager": "yarn",
"schematicCollections": [
"@schematics/angular",
"hertzbeat-template-hub-web-app"
],
"analytics": false
},
"schematics": {
"@angular-eslint/schematics:application": {
"setParserOptionsProject": true
},
"@angular-eslint/schematics:library": {
"setParserOptionsProject": true
}
}
}
@@ -1,13 +0,0 @@
{
"$schema": "./node_modules/ng-alain/schema.json",
"theme": {
"list": [
{
"theme": "dark"
},
{
"theme": "compact"
}
]
}
}
@@ -1,66 +0,0 @@
{
"name": "hertzbeat-template-hub-web-app",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test"
},
"private": true,
"dependencies": {
"@angular/animations": "^18.2.5",
"@angular/common": "^18.2.0",
"@angular/compiler": "^18.2.0",
"@angular/core": "^18.2.5",
"@angular/forms": "^18.2.0",
"@angular/platform-browser": "^18.2.0",
"@angular/platform-browser-dynamic": "^18.2.0",
"@angular/router": "^18.2.0",
"@delon/abc": "^18.1.0",
"@delon/cache": "^18.1.0",
"@delon/form": "^18.1.0",
"@delon/theme": "^18.1.0",
"@delon/util": "^18.1.0",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"angular-tag-cloud-module": "^17.0.1",
"echarts": "^5.5.1",
"file-saver": "^2.0.5",
"jquery": "^3.7.1",
"ng-zorro-antd": "^18.1.1",
"ngx-color-picker": "^17.0.0",
"ngx-echarts": "^18.0.0",
"rxjs": "~7.8.0",
"screenfull": "^6.0.2",
"slick-carousel": "^1.8.1",
"tslib": "^2.7.0",
"zone.js": "~0.14.10"
},
"devDependencies": {
"@angular-devkit/build-angular": "^18.2.5",
"@angular/cli": "^18.2.5",
"@angular/compiler-cli": "^18.2.0",
"@types/file-saver": "^2.0.7",
"@types/jasmine": "~5.1.0",
"@types/node": "^22.7.7",
"jasmine-core": "~5.2.0",
"jasmine-spec-reporter": "^7.0.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0",
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"ng-alain": "^18.1.0",
"node-fetch": "^3.3.2",
"prettier": "^3.3.3",
"purgecss": "^6.0.0",
"ts-node": "^10.9.2",
"typescript": "~5.5.2"
},
"description": "This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.5.",
"main": "index.js",
"author": "",
"license": "ISC"
}
@@ -1,8 +0,0 @@
{
"/api/*": {
"target": "http://localhost:8080/api",
"secure": false,
"changeOrigin": true,
"logLevel": "debug"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

@@ -1,20 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<router-outlet></router-outlet>
@@ -1,40 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnInit} from '@angular/core';
import {RouterOutlet} from "@angular/router";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
standalone: true,
imports: [
RouterOutlet
]
})
export class AppComponent implements OnInit {
title = 'hertzbeat-template-hub-web-app';
constructor() {
}
ngOnInit() {
}
}
@@ -1,46 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {ApplicationConfig, importProvidersFrom, provideZoneChangeDetection} from '@angular/core';
import {provideRouter} from '@angular/router';
import {routes} from './routes/routes-routing.module';
import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http";
import {DefaultInterceptor} from "@core";
import {provideAnimations} from "@angular/platform-browser/animations";
import {TemplateService} from "./service/template.service";
import {LocalStorageService} from "./service/local-storage.service";
import {DataService} from "./service/data.service";
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({eventCoalescing: true}),
provideRouter(routes),
provideAnimations(),
importProvidersFrom(HttpClientModule),
{
provide: HTTP_INTERCEPTORS,
useClass: DefaultInterceptor,
multi: true,
},
TemplateService,
LocalStorageService,
DataService
]
};
@@ -1,55 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {NgModule} from '@angular/core';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {NzMessageModule} from 'ng-zorro-antd/message';
import {NzNotificationModule} from 'ng-zorro-antd/notification';
import {AppComponent} from "./app.component";
import {RouterOutlet} from "@angular/router";
import {NgxEchartsModule} from "ngx-echarts";
import {GlobalConfigModule} from "./global-config.module";
import {CoreModule} from "./core/core.module";
import {NzIconModule} from "ng-zorro-antd/icon";
// const INTERCEPTOR_PROVIDES = [{ provide: HTTP_INTERCEPTORS, useClass: DefaultInterceptor, multi: true }];
@NgModule({
declarations: [],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
NzMessageModule,
NzNotificationModule,
RouterOutlet,
AppComponent,
ReactiveFormsModule,
CoreModule,
NzIconModule,
GlobalConfigModule.forRoot(),
NgxEchartsModule.forRoot({
echarts: () => import((`echarts`))
}),
],
})
export class AppModule {
}
@@ -1,31 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { NgModule, Optional, SkipSelf } from '@angular/core';
import { throwIfAlreadyLoaded } from './module-import-guard';
@NgModule({
providers: []
})
export class CoreModule {
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
throwIfAlreadyLoaded(parentModule, 'CoreModule');
}
}
@@ -1,50 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree} from '@angular/router';
import {NzNotificationService} from 'ng-zorro-antd/notification';
import {Observable} from 'rxjs';
import {LocalStorageService} from '../../service/local-storage.service';
@Injectable({
providedIn: 'root'
})
export class DetectAuthGuard implements CanActivate {
constructor(
private localStorageSvc: LocalStorageService,
private notifySvc: NzNotificationService,
private router: Router
) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
let activate = this.localStorageSvc.hasAuthorizationToken();
if (!activate) {
setTimeout(() => {
this.notifySvc.warning('登录', '');
this.router.navigateByUrl('/passport/login');
});
}
return activate;
}
}
@@ -1,21 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
export * from './module-import-guard';
export * from './interceptor/default.interceptor';
@@ -1,223 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {
HttpErrorResponse,
HttpEvent,
HttpHandler,
HttpHeaders,
HttpInterceptor,
HttpRequest,
HttpResponse,
HttpResponseBase
} from '@angular/common/http';
import { Injectable, Injector } from '@angular/core';
import { Router } from '@angular/router';
import { ALAIN_I18N_TOKEN, _HttpClient } from '@delon/theme';
import { environment } from '@env/environment';
import { NzNotificationService } from 'ng-zorro-antd/notification';
import { BehaviorSubject, Observable, of, throwError } from 'rxjs';
import { catchError, filter, mergeMap, switchMap, take } from 'rxjs/operators';
import {Message} from "../../pojo/Message";
import {AuthService} from '../../service/auth.service';
import {LocalStorageService} from '../../service/local-storage.service';
const CODE_MESSAGE: { [key: number]: string } = {
400: 'Request Illegal Content, No Response.',
401: 'Auth Error.',
403: 'No Permission For This Request.',
404: 'Not Found.',
406: 'Request Illegal Content.',
409: 'Request Conflict.',
410: 'Request Resource Already Deleted.',
422: 'Validate Error.',
500: 'Server Error Happen.',
502: 'Gateway Error.',
503: 'Service Not Available, Try After.',
504: 'Gateway Timeout.'
};
@Injectable()
export class DefaultInterceptor implements HttpInterceptor {
private notified = false;
// Whether token is refreshing
private refreshToking = false;
private refreshToken$: BehaviorSubject<any> = new BehaviorSubject<any>(null);
constructor(private injector: Injector, private authSvc: AuthService, private storageSvc: LocalStorageService) {}
private get notification(): NzNotificationService {
return this.injector.get(NzNotificationService);
}
private get http(): _HttpClient {
return this.injector.get(_HttpClient);
}
private goTo(url: string): void {
setTimeout(() => {
this.injector.get(Router).navigateByUrl(url);
this.notified = false;
});
}
private checkStatus(ev: HttpResponseBase): void {
const errorText = CODE_MESSAGE[ev.status] || ev.statusText;
console.warn(` ${ev.status}: ${ev.url}`, errorText);
if (ev.status == 403) {
this.notification.error(` ${ev.status}: ${errorText}`, '');
} else {
this.notification.error(` ${ev.status}: ${ev.url}`, errorText);
}
}
/**
* refresh Token request
*/
private refreshTokenRequest(): Observable<Message<any>> {
const refreshToken = this.storageSvc.getRefreshToken();
if (refreshToken == null) {
return throwError('refreshToken is null.');
}
return this.authSvc.refreshToken(refreshToken);
}
private tryRefreshToken(ev: HttpResponseBase, req: HttpRequest<any>, next: HttpHandler): Observable<any> {
// 1, redirect to login page if this request is used for refreshing token
if ([`/api/auth/refresh`].some(url => req.url.includes(url))) {
this.toLogin();
return throwError(ev);
}
// 2, if `refreshToking` is true, means that the refreshing token request is in progress
// All requests will be suspended and wait for the refreshing token request to complete
if (this.refreshToking) {
return this.refreshToken$.pipe(
filter(v => !!v),
take(1),
switchMap(() => next.handle(this.reAttachToken(req)))
);
}
// 3、try refreshing Token
this.refreshToking = true;
this.refreshToken$.next(null);
return this.refreshTokenRequest().pipe(
switchMap(res => {
// Check whether the TOKEN is correct
this.refreshToking = false;
if (res.code === 0 && res.data != undefined) {
let token = res.data.token;
let refreshToken = res.data.refreshToken;
if (token != undefined) {
this.storageSvc.storageAuthorizationToken(token);
this.storageSvc.storageRefreshToken(refreshToken);
// notifies subsequent requests to continue
this.refreshToken$.next(token);
return next.handle(this.reAttachToken(req));
} else {
console.warn(`flush new token failed. ${res.msg}`);
return throwError('flush new token failed.');
}
} else {
console.warn(`flush new token failed. ${res.msg}`);
return throwError('flush new token failed.');
}
}),
catchError(err => {
// refreshing token is failed, redirect to login page
console.warn(`flush new token failed. ${err.msg}`);
this.refreshToking = false;
this.toLogin();
return throwError(err);
})
);
}
private reAttachToken(req: HttpRequest<any>): HttpRequest<any> {
let token = this.storageSvc.getAuthorizationToken();
return req.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
}
private toLogin(): void {
if (!this.notified) {
this.notified = true;
this.goTo('/login');
}
}
private fillHeaders(headers?: HttpHeaders): { [name: string]: string } {
const res: { [name: string]: string } = {};
const lang = this.injector.get(ALAIN_I18N_TOKEN).currentLang;
if (!headers?.has('Accept-Language') && lang) {
res['Accept-Language'] = lang;
}
let token = this.storageSvc.getAuthorizationToken();
if (token !== null) {
res['Authorization'] = `Bearer ${token}`;
}
return res;
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let url = req.url;
if (!url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('.')) {
const { baseUrl } = environment.api;
url = baseUrl + (baseUrl?.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);
}
const newReq = req.clone({ url, setHeaders: this.fillHeaders(req.headers) });
return next.handle(newReq).pipe(
mergeMap(httpEvent => {
if (httpEvent instanceof HttpResponseBase) {
return of(httpEvent);
} else {
return of(httpEvent);
}
}),
catchError((err: any) => {
console.error("err:",err);
// handle failed response and token expired
switch (err.status) {
case 401:
console.log('检测到401了')
return this.tryRefreshToken(err, newReq, next);
case 404:
case 500:
this.goTo(`/exception/${err.status}?url=${req.urlWithParams}`);
break;
case 400:
let resp = new HttpResponse({
body: err.error,
headers: err.headers,
status: err.status,
statusText: err.statusText
});
return of(resp);
default:
break;
}
this.checkStatus(err);
return throwError(err.error);
})
);
}
}
@@ -1,24 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
export function throwIfAlreadyLoaded(parentModule: any, moduleName: string): void {
if (parentModule) {
throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`);
}
}
@@ -1,49 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
import { DelonACLModule } from '@delon/acl';
import { AlainThemeModule } from '@delon/theme';
import { throwIfAlreadyLoaded } from '@core';
import { environment } from '@env/environment';
const alainModules: any[] = [AlainThemeModule.forRoot(), DelonACLModule];
import { NzConfig, NZ_CONFIG } from 'ng-zorro-antd/core/config';
const ngZorroConfig: NzConfig = {};
const zorroProvides = [{ provide: NZ_CONFIG, useValue: ngZorroConfig }];
@NgModule({
imports: [...alainModules, ...(environment.modules || [])]
})
export class GlobalConfigModule {
constructor(@Optional() @SkipSelf() parentModule: GlobalConfigModule) {
throwIfAlreadyLoaded(parentModule, 'GlobalConfigModule');
}
static forRoot(): ModuleWithProviders<GlobalConfigModule> {
return {
ngModule: GlobalConfigModule,
providers: [...zorroProvides]
};
}
}
@@ -1,29 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Component } from '@angular/core';
@Component({
selector: 'layout-blank',
template: `<router-outlet></router-outlet> `,
host: {
'[class.alain-blank]': 'true'
}
})
export class LayoutBlankComponent {}
@@ -1,80 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';
import { GlobalFooterModule } from '@delon/abc/global-footer';
import { NoticeIconModule } from '@delon/abc/notice-icon';
import { AlainThemeModule } from '@delon/theme';
import { LayoutDefaultModule } from '@delon/theme/layout-default';
import { SettingDrawerModule } from '@delon/theme/setting-drawer';
import { ThemeBtnModule } from '@delon/theme/theme-btn';
import { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';
import { NzAvatarModule } from 'ng-zorro-antd/avatar';
import { NzBadgeModule } from 'ng-zorro-antd/badge';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzFormModule } from 'ng-zorro-antd/form';
import { NzGridModule } from 'ng-zorro-antd/grid';
import { NzIconModule } from 'ng-zorro-antd/icon';
import { NzInputModule } from 'ng-zorro-antd/input';
import { NzSpinModule } from 'ng-zorro-antd/spin';
import { LayoutMarketComponent } from './market/market.component';
import { LayoutBlankComponent } from './blank/blank.component';
const COMPONENTS = [LayoutBlankComponent];
const MARKET = [LayoutMarketComponent];
import { NzModalModule } from 'ng-zorro-antd/modal';
import { NzTagModule } from 'ng-zorro-antd/tag';
import { NzDividerModule } from 'ng-zorro-antd/divider';
@NgModule({
imports: [
CommonModule,
FormsModule,
RouterModule,
AlainThemeModule.forChild(),
ThemeBtnModule,
SettingDrawerModule,
LayoutDefaultModule,
NoticeIconModule,
GlobalFooterModule,
NzDropDownModule,
NzInputModule,
NzAutocompleteModule,
NzGridModule,
NzFormModule,
NzSpinModule,
NzBadgeModule,
NzAvatarModule,
NzIconModule,
NzModalModule,
NzTagModule,
NzDividerModule,
RouterModule,
MARKET
],
declarations: [...COMPONENTS],
exports: [...COMPONENTS, ...MARKET,RouterModule]
})
export class LayoutModule {}
@@ -1,227 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<header class="tp-header-height" style="height: 151px;">
<div class="tp-header-top__area theme-bg tp-header-top__space">
<div class="container container-large">
<div class="row align-items-center">
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-6">
<div class="tp-header-top__left-box text-center text-md-start">
<img src="assets/svg/hand.svg" alt="">
<span>Welcome to HertzBeat 监控模版市场!</span>
</div>
</div>
<div class="col-xxl-4 col-xl-5 d-xl-block">
<div class="tp-header-top__shop-box text-xl-start text-end">
<span>目前共有{{ count }}个模版</span>
<a href="#">搜索!</a>
</div>
</div>
</div>
</div>
</div>
<div id="header-sticky" class="tp-header__area">
<div class="container container-large">
<div class="row align-items-center">
<!--logo-->
<div class="col-xl-3 col-lg-6 col-md-6 col-sm-6 col-6">
<div class="tp-header__left-box d-flex align-items-center">
<div class="tp-header__logo">
<a href="/home-page">
<img src="../../../assets/svg/brand.svg" alt="">
</a>
</div>
</div>
</div>
<div class="col-xl-7 d-none d-xl-block">
<div class="tp-header__main-menu">
<nav class="tp-main-menu-content">
<ul>
<li class="has-dropdown">
<a href="/home-page">主页</a>
</li>
<li class="has-dropdown">
<a href="market/list">市场</a>
</li>
<li class="has-dropdown">
<a href="https://hertzbeat.apache.org/zh-cn/" target="_blank">社区</a>
</li>
<li>
<a href="javascript:">about</a>
</li>
<li class="has-dropdown">
<a href="javascript:" target="_blank">其他</a>
<ul class="submenu tp-submenu">
<li><a href="javascript:" target="_blank">博客</a></li>
<li><a href="javascript:" target="_blank">xxx</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
<div class="col-xl-2 col-lg-6 col-md-6 col-sm-6 col-6">
<div class="tp-header__right-box d-flex align-items-center justify-content-end">
<ul class="d-none d-sm-block">
<li>
<div class="tp-header__icon-box">
<a href="user-center/assets" *ngIf="isLogin">
<span class="p-relative">
<span class="material-symbols-outlined" style="color: #000000">person</span>
</span>
</a>
<a href="user-center/star" *ngIf="isLogin">
<span class="p-relative">
<span class="material-symbols-outlined" style="color: #000000">star</span>
</span>
</a>
<a href="javascript:">
<span class="p-relative">
<span class="material-symbols-outlined" style="color: #000000">translate</span>
</span>
</a>
<a href="/home-page" *ngIf="isLogin" (click)="logout()">
<span class="p-relative">
<span class="material-symbols-outlined" style="color: #000000">logout</span>
</span>
</a>
<a href="/login" *ngIf="!isLogin">
<span class="p-relative">
<span class="material-symbols-outlined" style="color: #000000">login</span>
</span>
</a>
<a href="/sign-up" *ngIf="!isLogin">
<span class="p-relative">
<span class="material-symbols-outlined" style="color: #000000">person_add</span>
</span>
</a>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</header>
<router-outlet></router-outlet>
<footer>
<div class="tp-footer__area p-relative grey-bg pb-5" style="padding-top: 45px;">
<div class="container">
<div class="row" style="width: 1400px;">
<div class="col-xl-4 col-lg-6 col-md-6 mb-5 wow tpfadeUp" data-wow-duration=".9s" data-wow-delay=".3s">
<div class="tp-footer__widget z-index footer-col-1">
<div class="tp-footer__logo">
<a href="home-page">
<img src="../../../assets/svg/brand.svg" alt="">
</a>
</div>
<div class="tp-footer__text">
<p>开源实时观测系统</p>
</div>
<div class="tp-footer__contact-list">
<div class="tp-footer__contact-item pb-5 d-flex about-items-center">
<div class="tp-footer__icon">
<img src="assets/svg/github.svg" alt="">
</div>
<div class="tp-footer__text">
<a href="https://github.com/apache/hertzbeat"> Github </a>
</div>
</div>
<div class="tp-footer__contact-item d-flex about-items-center">
<div class="tp-footer__icon">
<span>
<img src="assets/svg/email.svg" alt="">
</span>
</div>
<div class="tp-footer__text">
<a href="邮箱地址"> 邮箱&#64;163.com </a>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-4 col-lg-6 col-md-6 mb-5 wow tpfadeUp" data-wow-duration=".9s" data-wow-delay=".5s">
<div class="tp-footer__widget footer-col-2">
<h4 class="tp-footer__widget-title">导航</h4>
<div class="tp-footer__list">
<ul>
<li><a href="page-home">首页</a></li>
<li><a href="#">社区</a></li>
<li><a href="#">市场</a></li>
<li><a href="#">About</a></li>
<li><a href="#">其他</a></li>
</ul>
</div>
</div>
</div>
<div class="col-xl-4 col-lg-6 col-md-6 mb-5 wow tpfadeUp" data-wow-duration=".9s" data-wow-delay=".7s">
<div class="tp-footer__widget footer-col-3">
<h4 class="tp-footer__widget-title">相关资源</h4>
<div class="tp-footer__list">
<ul>
<li><a href="#">GitHub 仓库</a></li>
<li><a href="#">团队</a></li>
<li><a href="#">博客</a></li>
<li><a href="#">其他资源</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tp-copyright__area grey-bg tp-copyright__border">
<div class="container">
<div class="row" style="width: 1350px;">
<div class="col-xl-12 wow tpfadeUp" data-wow-duration=".9s" data-wow-delay=".3s">
<div
class="tp-copyright__wrapper d-flex align-items-center justify-content-sm-between justify-content-center">
<div class="tp-copyright__text text-center">
<span
>Apache HertzBeat is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache
Incubator. Incubation is required of all newly accepted projects until a further review indicates that the
infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful
ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it
does indicate that the project has yet to be fully endorsed by the ASF.</span
>
<br/>
<HR style="FILTER: alpha(opacity=100,finishopacity=0,style=3)" width="100%" color="#987cb9"
SIZE="3">
<span
>Copyright © 2026 The Apache Software Foundation. Apache HertzBeat, HertzBeat, and its feather logo are trademarks of
The Apache Software Foundation.</span
>
</div>
</div>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>
@@ -1,76 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnInit} from '@angular/core';
import {LayoutDefaultOptions} from '@delon/theme/layout-default';
import {RouterOutlet} from "@angular/router";
import {NzImageDirective} from "ng-zorro-antd/image";
import {TemplateService} from "../../service/template.service";
import {NzMessageService} from "ng-zorro-antd/message";
import {NgIf} from "@angular/common";
import {LocalStorageService} from "../../service/local-storage.service";
import {DataService} from "../../service/data.service";
@Component({
selector: 'app-market',
templateUrl: 'market.component.html',
standalone: true,
imports: [
RouterOutlet,
NzImageDirective,
NgIf
]
})
export class LayoutMarketComponent implements OnInit{
options: LayoutDefaultOptions = {
logoExpanded: `./assets/brand_white.svg`,
logoCollapsed: `./assets/logo.svg`
};
constructor(private templateService: TemplateService,
private msg: NzMessageService,
private localStorageService: LocalStorageService,
private dataService: DataService
) {}
count=0;
isLogin:boolean = false;
ngOnInit(): void {
this.dataService.isLoginMsg.subscribe(isLogin => this.isLogin = isLogin)
const userInfo = this.localStorageService.getData('userInfo');
if(userInfo!=null){
this.isLogin=true
}
this.templateService.getTemplateCount(0,0).subscribe(message=>{
if (message.code == 0) {
this.count=message.data;
}else{
this.msg.error(message.error)
}
})
}
logout():void{
this.localStorageService.removeData('userInfo');
this.localStorageService.removeData('userId');
this.localStorageService.removeData('Authorization');
this.localStorageService.removeData('refresh-token');
}
}
@@ -1,24 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
export class Message<T> {
data!: T;
msg!: string;
code: number = 0;
}
@@ -1,125 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<main>
<div class="tp-hero__area z-index">
<div class="tp-hero__bg tp-hero__height p-relative fix"
style="background-image: url('../../../assets/svg/home-page-bg.svg')">
<div class="container">
<div class="row align-items-center">
<div class="col-xl-6 col-lg-6">
<div class="tp-hero__left-box z-index">
<div class="tp-hero__section-box">
<span class="tp-hero-subtitle wow" data-wow-duration=".9s" data-wow-delay=".3s">HertzBeat</span>
<h3 class="tp-hero-title wow" data-wow-duration=".9s" data-wow-delay=".5s">
<span class="p-relative"
>监控模版市场
<span class="tp-slider-title-shape">
<img src="assets/svg/title-line.svg" alt="">
</span>
</span>
</h3>
</div>
<div class="tp-hero__left-text wow tpfadeUp" data-wow-duration=".9s" data-wow-delay=".7s">
<p>开源实时观测系统 <br />快来上传、浏览、下载模版吧!</p>
<a class="tp-main-btn" href="market/list"
>开始浏览
<i>
<svg width="18" height="17" viewBox="0 0 18 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M17.6742 4.74002C17.3484 4.25133 16.8597 3.92554 16.2896 3.76264C15.0679 3.5183 13.9276 4.25133 13.6018 5.3916L12.8688 7.99794L5.78281 1.07486C4.96833 0.260384 3.66516 0.260384 2.93213 1.07486L2.85068 1.15631C2.60633 1.40065 2.52489 1.645 2.44344 1.97079C1.8733 1.88934 1.22172 2.13369 0.81448 2.54093C-0.081448 3.27396 -0.162896 4.57712 0.570136 5.3916L0.651584 5.47305L1.14027 6.04319C0.977376 6.12463 0.81448 6.20608 0.651584 6.36898C0.244344 6.77622 0 7.26491 0 7.83504C0 8.40518 0.244344 8.89386 0.570136 9.38255C5.04977 13.9436 6.67873 15.4097 7.08597 15.7355C7.9819 16.4685 9.36652 16.9572 10.6697 16.9572C11.4842 16.9572 12.2172 16.7943 12.9502 16.3056C14.3348 15.3282 15.4751 14.0251 16.0452 12.8034C16.2896 12.3961 16.6968 11.1744 17.9186 6.36898C18.0814 5.79884 18 5.22871 17.6742 4.74002ZM14.4163 12.2332C14.0091 13.2106 13.0317 14.2694 11.8914 15.0025C11.0769 15.5726 9.12217 15.2468 8.1448 14.4323C7.819 14.1065 6.19005 12.7219 1.79186 8.16083C1.71041 8.07938 1.62896 7.99794 1.62896 7.83504C1.62896 7.75359 1.71041 7.5907 1.79186 7.50925C1.95475 7.26491 2.28054 7.26491 2.52489 7.50925L5.04977 10.0341C5.21267 10.197 5.45701 10.2785 5.61991 10.2785H5.70136C5.86425 10.2785 6.1086 10.197 6.27149 9.95269C6.59728 9.62689 6.59728 9.13821 6.27149 8.81242L1.79186 4.25133C1.62896 4.08844 1.62896 3.84409 1.79186 3.76264C2.0362 3.5183 2.36199 3.5183 2.60633 3.76264L4.80543 5.88029L7.00453 8.07938C7.16742 8.24228 7.41176 8.32373 7.65611 8.32373C7.90045 8.32373 8.06335 8.24228 8.22624 8.07938C8.55204 7.75359 8.55204 7.26491 8.22624 6.93911L4.0724 2.86672C3.9095 2.70382 3.9095 2.37803 4.0724 2.13369C4.23529 1.97079 4.47964 1.97079 4.64253 2.13369L12.7059 10.0341C12.8688 10.197 13.0317 10.2785 13.276 10.2785C13.5204 10.2785 13.7647 10.197 13.8462 10.1156C14.0091 9.95269 14.009 9.87124 14.0905 9.70834V9.62689L15.1493 5.79884C15.2308 5.47305 15.5566 5.31016 15.8824 5.3916C16.0452 5.3916 16.1267 5.47305 16.2081 5.63595C16.2896 5.79884 16.2896 5.88029 16.2896 6.04319C15.1493 10.3599 14.6606 11.826 14.4163 12.2332ZM8.06335 1.56355C8.30769 1.645 8.47059 1.80789 8.71493 1.88934C8.95928 1.97079 9.12217 2.13369 9.36652 2.29658C9.69231 2.54093 10.0995 2.86672 10.4253 3.19251C10.7511 3.5183 11.0769 3.84409 11.3213 4.25133C11.4842 4.41423 11.7285 4.57712 11.9729 4.57712C12.1357 4.57712 12.2986 4.49568 12.3801 4.41423C12.7873 4.16988 12.8688 3.6812 12.6244 3.27396C12.2986 2.78527 11.9729 2.37803 11.5656 1.97079C11.1584 1.56355 10.7511 1.23776 10.2624 0.911967C10.0181 0.749072 9.77376 0.667624 9.52941 0.504728C9.20362 0.341832 8.95928 0.178936 8.71493 0.0974882C8.30769 -0.146856 7.819 0.0974882 7.65611 0.504728C7.41176 0.911967 7.65611 1.40065 8.06335 1.56355ZM4.96833 14.7581C4.72398 14.6767 4.47964 14.5138 4.31674 14.4323C4.0724 14.2694 3.9095 14.188 3.66516 14.0251C3.25792 13.6993 2.93213 13.3735 2.60633 13.0477C2.28054 12.7219 2.0362 12.3147 1.79186 11.9074C1.54751 11.5816 1.05882 11.4187 0.651584 11.6631C0.325792 11.9074 0.162896 12.3961 0.40724 12.8034C0.733032 13.2921 1.05882 13.7807 1.46606 14.188C1.8733 14.5952 2.28054 15.0025 2.76923 15.3282L3.50226 15.8169C3.50226 15.8169 3.99095 16.0613 4.23529 16.2242C4.31674 16.3056 4.47964 16.3056 4.56109 16.3056C4.88688 16.3056 5.13122 16.1427 5.37557 15.8169C5.53846 15.4097 5.37557 14.921 4.96833 14.7581Z"
fill="url(#paint0_linear_106_218)"
/>
<defs>
<linearGradient id="paint0_linear_106_2188" x1="0" y1="8.47848" x2="18" y2="8.47848" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#EE0979" />
<stop offset="1" stop-color="#FF6A00" />
</linearGradient>
</defs>
</svg>
</i>
</a>
</div>
</div>
</div>
<div class="col-xl-6 col-lg-6">
<div class="tp-hero__thumb-box p-relative text-center text-lg-end">
<div class="image-container">
<img class="img1" src="../../../assets/svg/brand.svg" alt="">
<img class="img2" src="../../../assets/svg/circle.svg" alt="" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tp-feature__area p-relative">
<div class="container">
<div class="tp-feature__border">
<div class="row">
<div class="col-xl-4 col-lg-6 col-md-6 mb-30" data-wow-duration=".9s" data-wow-delay=".3s">
<div class="tp-feature__item feature-col-1 d-flex align-items-center">
<div class="tp-feature__icon">
<span>
<img src="assets/svg/home-1.svg" alt="">
</span>
</div>
<div class="tp-feature__content">
<h4 class="tp-feature__title">开箱即用</h4>
<p
>集监控-告警-通知为一体,支持应用服务,Web,数据库,缓存,操作系统,中间件,大数据,云原生,网络等监控阈值告警;
易用友好,无需Agent,全WEB页面操作</p
>
</div>
</div>
</div>
<div class="col-xl-4 col-lg-6 col-md-6 mb-30 wow tpfadeUp" data-wow-duration=".9s" data-wow-delay=".5s">
<div class="tp-feature__item feature-col-2 d-flex align-items-center">
<div class="tp-feature__icon">
<span>
<img src="assets/svg/home-2.svg" alt="">
</span>
</div>
<div class="tp-feature__content">
<h4 class="tp-feature__title">高性能与自定义</h4>
<p
>将 Http,Jmx,Ssh,Snmp,Jdbc 等协议规范可配置模版化,只需在线配置YML就可自定义监控指标; 灵活的告警阈值规则,消息及时送达</p
>
</div>
</div>
</div>
<div class="col-xl-4 col-lg-6 col-md-6 mb-30 wow tpfadeUp" data-wow-duration=".9s" data-wow-delay=".7s">
<div class="tp-feature__item feature-col-3 border-none d-flex align-items-center">
<div class="tp-feature__icon">
<span>
<img src="assets/svg/home-3.svg" alt="">
</span>
</div>
<div class="tp-feature__content">
<h4 class="tp-feature__title">拥抱开源</h4>
<p>Apache HertzBeat 的单机集群版全开源,基于 Apache2.0 License; 欢迎任何对此有兴趣的同学参与其中</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
@@ -1,40 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
.image-container {
display: flex;
justify-content: center;
align-items: center;
position: relative;
width: 300px;
height: 300px;
margin: auto;
}
.img1, .img2 {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.img2 {
opacity: 0.7;
}
@@ -1,64 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {window} from "rxjs";
@Component({
selector: 'home-page',
templateUrl: './home-page.component.html',
styleUrls: ['./home-page.component.less'],
standalone: true,
providers: [],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class HomePageComponent implements OnInit,OnDestroy {
constructor(
fb: FormBuilder,
) {
this.form = fb.group({
userName: [null, [Validators.required]],
password: [null, [Validators.required]],
mobile: [null, [Validators.required, Validators.pattern(/^1\d{10}$/)]],
captcha: [null, [Validators.required]],
remember: [true]
});
}
count=0;
form: FormGroup;
error = '';
type = 0;
loading = false;
interval$: any;
ngOnInit(): void {
}
ngOnDestroy(): void {
if (this.interval$) {
clearInterval(this.interval$);
}
}
protected readonly window = window;
}
@@ -1,66 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<main>
<div class="tp-register__area pt-xxl-4 pb-xxl-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-xl-6">
<div class="tp-register__form-box">
<div class="tp-register__form-title text-center mb-5">
<h6>邮箱登录</h6>
<!-- <span>邮箱登录 <br>-->
<!-- & become our partner</span>-->
</div>
<form>
<div class="row">
<div class="col-xl-12">
<div class="tp-register__input-box">
<label for="email">Email 地址</label>
<input id="email" type="email" placeholder="邮箱地址" name="identifier" [(ngModel)]="loginForm.identifier">
</div>
</div>
<div class="col-xl-12">
<div class="tp-register__input-box">
<label for="password">密码</label>
<input id="password" type="password" placeholder="密码" name="credential" [(ngModel)]="loginForm.credential">
<a href="" class="tp-register__input-text">忘记密码?</a>
</div>
</div>
<div class="col-xl-12">
<div class="tp-contact-4__comment-agree label-2 pt-5 pb-5">
<div class="form-check-box">
<input class="form-check-input" type="checkbox" value="" id="flexCheckDefault">
<label class="form-check-label text-theme" for="flexCheckDefault">
我同意 xxx & <span class="red">xxx</span> 和 xxx
</label>
</div>
</div>
<div class="tp-contact-4__btn">
<button type="button" class="btn-no-icon w-100" (click)="submitLogin()">登录</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</main>
@@ -1,18 +0,0 @@
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
@@ -1,80 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, Injector, OnDestroy, OnInit} from '@angular/core';
import {FormBuilder, FormsModule} from '@angular/forms';
import {AuthService, LoginDTO} from "../../service/auth.service";
import {LocalStorageService} from "../../service/local-storage.service";
import {NzMessageService} from "ng-zorro-antd/message";
import {Router} from "@angular/router";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {DataService} from "../../service/data.service";
@Component({
selector: 'login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.less'],
standalone: true,
providers: [],
imports: [
NzButtonComponent,
FormsModule
],
// changeDetection: ChangeDetectionStrategy.OnPush
})
export class LoginComponent implements OnInit,OnDestroy {
constructor(
fb: FormBuilder,
private authService: AuthService,
private localStorageService: LocalStorageService,
private msg: NzMessageService,
private injector: Injector,
private dataService: DataService,
) {}
loginForm: LoginDTO={
type:1,
identifier:'',
credential:'',
};
submitLogin():void{
console.log(this.loginForm)
this.authService.tryLogin(this.loginForm).subscribe(response => {
if(response.code == 0) {
console.log(response);
this.localStorageService.storageAuthorizationToken(response.data.token);
this.localStorageService.storageRefreshToken(response.data.refreshToken);
this.msg.success('登录成功');
this.localStorageService.putData('userInfo',this.loginForm.identifier);
this.localStorageService.putData('userId',response.data.id);
this.dataService.sendLoginMsg(true);
window.history.back();
}else{
this.msg.error('登录失败:'+response.msg)
}
})
}
ngOnInit(): void {
}
ngOnDestroy(): void {
}
}
@@ -1,37 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TemplateDetailComponent } from './template-detail/template-detail.component';
import { TemplateListComponent } from './template-list/template-list.component';
const routes: Routes = [
{ path: '', component: TemplateListComponent },
{ path: 'list', component: TemplateListComponent },
{ path: 'detail', component: TemplateDetailComponent },
{ path: '**', component: TemplateListComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MarketRoutingModule {}
@@ -1,74 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {ClipboardModule} from '@angular/cdk/clipboard';
import {NgModule, Type} from '@angular/core';
import {NzBreadCrumbModule} from 'ng-zorro-antd/breadcrumb';
import {NzLayoutModule} from 'ng-zorro-antd/layout';
import {NzRadioModule} from 'ng-zorro-antd/radio';
import {NzSpaceModule} from 'ng-zorro-antd/space';
import {NzSwitchModule} from 'ng-zorro-antd/switch';
import {MarketRoutingModule} from './market-routing.module';
import {TemplateDetailComponent} from './template-detail/template-detail.component';
import {TemplateListComponent} from './template-list/template-list.component';
import {NzInputDirective, NzInputGroupComponent} from "ng-zorro-antd/input";
import {NzOptionComponent, NzSelectModule} from "ng-zorro-antd/select";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {RouterModule} from "@angular/router";
import {CommonModule} from "@angular/common";
import {FormsModule} from "@angular/forms";
import {NzPaginationComponent} from "ng-zorro-antd/pagination";
import {NzCheckboxComponent, NzCheckboxGroupComponent} from "ng-zorro-antd/checkbox";
import {NzIconDirective} from "ng-zorro-antd/icon";
import {NzTooltipDirective} from "ng-zorro-antd/tooltip";
import {NzCardComponent, NzCardMetaComponent} from "ng-zorro-antd/card";
import {NzAvatarComponent} from "ng-zorro-antd/avatar";
const COMPONENTS: Array<Type<void>> = [TemplateListComponent, TemplateDetailComponent, TemplateListComponent];
@NgModule({
imports: [
MarketRoutingModule,
NzBreadCrumbModule,
NzSwitchModule,
NzRadioModule,
NzLayoutModule,
NzSpaceModule,
ClipboardModule,
NzInputGroupComponent,
NzOptionComponent,
NzButtonComponent,
NzInputDirective,
CommonModule,
FormsModule,
NzSelectModule,
NzPaginationComponent,
NzCheckboxComponent,
NzCheckboxGroupComponent,
NzIconDirective,
NzTooltipDirective,
NzCardComponent,
NzCardMetaComponent,
NzAvatarComponent
],
declarations: COMPONENTS,
exports:[RouterModule]
})
export class MarketModule {}
@@ -1,277 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<main>
<div
class="tp-breadcrumb__area fix tp-breadcrumb-height"
style="background-image: url('../../../../assets/svg/breadcrumb.svg');height: 250px"
>
<div class="container">
<div class="row">
<div class="col-12">
<div class="tp-breadcrumb__content text-center z-index-5">
<div class="tp-breadcrumb__list">
<span><a href="index.html">Apache </a></span>
<span class="dvdr">.</span>
<span>HertzBeat</span>
</div>
<h3 class="tp-breadcrumb__title"
><span class="p-relative z-index-5">
模版
<span class="tp-title-shape">
<img src="assets/svg/title-line.svg" alt="">
</span>
</span>
详情
</h3>
</div>
</div>
</div>
</div>
</div>
<div class="tp-product-details-area pt-xxl-4">
<div class="container">
<div class="row">
<div class="col-xl-6 col-lg-6" style="display: grid; place-items: center;height: 400px">
<div class="tp-shop-details__wrapper">
<div class="tp-shop-details__tab-content-box">
<div class="tab-content" id="nav-tabContent" style="display: grid; place-items: center;height: 400px">
<img src="assets/svg/{{templateInfo.categoryId}}-img.svg" alt="">
</div>
</div>
</div>
</div>
<div class="col-xl-6 col-lg-6" style="height: 400px">
<div class="tp-shop-details__right-warp">
<h3 class="tp-shop-details__title-sm">{{ (templateInfo!=null)?templateInfo.name:'xxx' }}</h3>
<div class="tp-fea-product__star">
<div class="row">
<div class="col-3">
<span nz-icon nzType="star" nzTheme="outline"></span>
<span class="review-text">&emsp;{{ templateInfo.star }}</span>
</div> <div class="col-3">
<span nz-icon nzType="eye" nzTheme="outline"></span>
<span class="review-text">&emsp;200</span>
</div>
<div class="col-3">
<span nz-icon nzType="download" nzTheme="outline"></span>
<span class="review-text">&emsp;{{ templateInfo.download>=1000?((templateInfo.download/1000).toFixed(2)+'k'):templateInfo.download }}</span>
</div>
</div>
</div>
<div class="tp-shop-details__product-info">
<ul>
<li><span>类别 : </span>&emsp;{{ categoryStr }}</li>
<li><span>标签 : </span>&emsp;MySQL</li>
<li><span>最新版本 : </span>&emsp;{{ latestVersion?latestVersion.version:'xxx' }}</li>
<li><span>最后更新时间 : </span>&emsp;{{ templateInfo.updateTime }}</li>
</ul></div>
<div class="tp-shop-details__quantity-wrap d-flex align-items-center">
<div class="tp-shop-details__btn me-4">
<a class="btn-icon" href="javascript:" (click)="downloadTemplateNow()">
<span class="material-symbols-outlined">download</span>下载
</a>
</div>
<div class="tp-shop-details__btn me-4">
<a class="btn-icon" href="javascript:" (click)="starTemplate(templateInfo.id)" *ngIf="!isStarNow">
<span class="material-symbols-outlined">star</span>
收藏</a>
<a class="btn-icon" href="javascript:" (click)="cancelStarTemplate(templateInfo.id)" *ngIf="isStarNow">
<span class="material-symbols-outlined">star</span>取消收藏</a>
</div>
<div class="tp-shop-details__btn me-4">
<a class="btn-icon" href="javascript:" (click)="shareVersionNow(latestVersion.id)">
<span class="material-symbols-outlined">share</span>分享</a>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="productdetails-tabs mb-5">
<div class="row">
<div class="col-xl-12 col-lg-12 col-12">
<div class="product-additional-tab">
<div class="pro-details-nav mb-4">
<ul class="nav nav-tabs pro-details-nav-btn" id="myTabs" role="tablist">
<li class="nav-item" role="presentation">
<button
class="nav-links"
[ngClass]="showPage==1?'active':''"
id="home-tab-1"
data-bs-toggle="tab"
data-bs-target="#home-1"
type="button"
role="tab"
aria-controls="home-1"
aria-selected="true"
(click)="showPage = 1"
><span>详情</span></button
>
</li>
<li class="nav-item" role="presentation">
<button
[ngClass]="showPage==2?'active':''"
class="nav-links"
id="information-tab"
data-bs-toggle="tab"
data-bs-target="#additional-information"
type="button"
role="tab"
aria-controls="additional-information"
aria-selected="false"
(click)="showPage = 2"
><span>历史版本</span></button
>
</li>
<li class="nav-item" role="presentation">
<button
[ngClass]="showPage==3?'active':''"
class="nav-links"
id="size-chart-tab"
data-bs-toggle="tab"
data-bs-target="#chart"
type="button"
role="tab"
aria-controls="chart"
aria-selected="false"
(click)="showPage = 3"
><span>FAQ</span></button
>
</li>
</ul>
</div>
<div class="tab-content tp-content-tab" id="myTabContent-2">
<div [hidden]="!(showPage == 1)" id="home-1" role="tabpanel" aria-labelledby="home-tab-1">
<div class="product-details-list-box">
<span> 概要信息 : </span>
<p class="mb-30">{{ templateInfo.description }}</p>
<!-- <p class="pb-55">。。。。。</p>-->
</div>
<div class="product-details-list-box">
<span> 详细信息 : </span>
<!-- <p class="mb-30">{{ templateInfo.description }}</p>-->
<p class="pb-5">。。。。。</p>
</div>
<div class="product-details-list-box" style="width: 100%;">
<span> 其他信息 : </span>
<ul style="width: 100%;">
<li>
<span>
<svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.794 2.17595C14.426 3.42395 13.094 4.87595 11.798 6.53195C10.67 7.95995 9.656 9.42395 8.756 10.924C7.94 12.268 7.346 13.42 6.974 14.38C6.962 14.416 6.938 14.446 6.902 14.47C6.866 14.506 6.824 14.524 6.776 14.524C6.764 14.536 6.752 14.542 6.74 14.542C6.656 14.542 6.596 14.518 6.56 14.47L0.134 7.93595C0.122 7.92395 0.278 7.76795 0.602 7.46795C0.926 7.15595 1.244 6.87395 1.556 6.62195C1.904 6.33395 2.09 6.20195 2.114 6.22595L5.642 8.99795C6.674 7.78595 7.832 6.58595 9.116 5.39795C11.048 3.62195 13.04 2.10995 15.092 0.861953C15.128 0.861953 15.266 1.02995 15.506 1.36595L15.866 1.88795C15.878 1.93595 15.878 1.98995 15.866 2.04995C15.854 2.09795 15.83 2.13995 15.794 2.17595Z"
fill="currentColor"
></path>
</svg>
</span>
<p class="mb-30">{{ templateInfo.description }}</p>
</li>
<li>
<span>
<svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.794 2.17595C14.426 3.42395 13.094 4.87595 11.798 6.53195C10.67 7.95995 9.656 9.42395 8.756 10.924C7.94 12.268 7.346 13.42 6.974 14.38C6.962 14.416 6.938 14.446 6.902 14.47C6.866 14.506 6.824 14.524 6.776 14.524C6.764 14.536 6.752 14.542 6.74 14.542C6.656 14.542 6.596 14.518 6.56 14.47L0.134 7.93595C0.122 7.92395 0.278 7.76795 0.602 7.46795C0.926 7.15595 1.244 6.87395 1.556 6.62195C1.904 6.33395 2.09 6.20195 2.114 6.22595L5.642 8.99795C6.674 7.78595 7.832 6.58595 9.116 5.39795C11.048 3.62195 13.04 2.10995 15.092 0.861953C15.128 0.861953 15.266 1.02995 15.506 1.36595L15.866 1.88795C15.878 1.93595 15.878 1.98995 15.866 2.04995C15.854 2.09795 15.83 2.13995 15.794 2.17595Z"
fill="currentColor"
></path>
</svg>
</span>
<p class="mb-30">{{ templateInfo.description }}</p>
</li>
</ul>
</div>
</div>
<div [hidden]="!(showPage == 2)" id="additional-information" role="tabpanel" aria-labelledby="information-tab">
<div class="container">
<div class="product__details-info table-responsive">
<table class="table table-striped">
<tbody>
<tr>
<td class="add-info">版本号</td>
<td class="add-info-list">概要</td>
<td class="add-info-list">更新时间</td>
<td class="add-info-list">下载量</td>
<td class="add-info-list">下载</td>
<td class="add-info-list">分享链接</td>
</tr>
<tr *ngFor="let item of versionList; let i = index">
<td class="add-info">{{ item.version }}</td>
<td class="add-info-list"> {{ item.description }}</td>
<td class="add-info-list"> {{ item.createTime }}</td>
<td class="add-info-list"> {{ item.download>=1000?((item.download/1000).toFixed(2)+'k'):item.download }}</td>
<td class="add-info-list">
<a href="javascript:" (click)="downloadVersion(item.version,item.id)"> <span class="material-symbols-outlined">download</span></a
></td>
<td class="add-info-list">
<a href="javascript:" (click)="shareVersionNow(item.id)"> <span class="material-symbols-outlined">share</span></a
></td>
</tr>
</tbody>
</table>
</div>
<div class="d-flex justify-content-center">
<nz-pagination [nzPageIndex]="pageIndex+1" [nzTotal]="totalElements" nzShowSizeChanger
[(nzPageSize)]="pageSize" (nzPageSizeChange)="pageSizeChange($event)" (nzPageIndexChange)="pageIndexChange($event)"
[nzPageSizeOptions]=pageSizeOptions ></nz-pagination>
</div>
</div>
</div>
<div [hidden]="!(showPage == 3)" id="chart" role="tabpanel" aria-labelledby="size-chart-tab">
<div class="tp-service-details-faq tp-faq-inner__customize">
<div class="tp-custom-accordion">
<div class="accordion" id="accordionExample">
<div class="accordion-items tp-faq-active">
<h2 class="accordion-header" id="headingOne">
<button
class="accordion-buttons"
type="button"
data-bs-toggle="collapse"
data-bs-target="#collapseOne"
aria-expanded="true"
aria-controls="collapseOne"
>
这个模版怎么用?
</button>
</h2>
<div
id="collapseOne"
class="accordion-collapse collapse show"
aria-labelledby="headingOne"
data-bs-parent="#accordionExample"
>
<div class="accordion-body"> 就这么用 </div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
@@ -1,18 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -1,210 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnDestroy, OnInit} from '@angular/core';
import {saveAs} from 'file-saver';
import {NzMessageService} from 'ng-zorro-antd/message';
import {TemplateService} from '../../../service/template.service';
import {window} from "rxjs";
import {LocalStorageService} from "../../../service/local-storage.service";
import {StarService} from "../../../service/star.service";
import {VersionService} from "../../../service/version.service";
@Component({
selector: 'market',
templateUrl: './template-detail.component.html',
styleUrls: ['./template-detail.component.less']
})
export class TemplateDetailComponent implements OnInit, OnDestroy {
constructor(private templateService: TemplateService,
private msg: NzMessageService,
private localStorageService: LocalStorageService,
private starService: StarService,
private versionService: VersionService,) {}
userId:number = 0;
templateInfo :any = null;
categoryList: any[] = [];
latestVersion :any = null;
versionList: any[] = [];
totalElements = 10;
totalPages = 1;
pageIndex=0;
pageSize = 2;
numberOfPages = 1;
newPageIndex=this.pageIndex;
newPageSize = this.pageSize;
pageSizeOptions:number[]=[2,5,10,20];
categoryStr='';
isStarNow:boolean = false;
showPage = 1;
downloadTemplateNow(): void {
this.templateService.downloadLatestTemplate(this.templateInfo.user, this.templateInfo.id, this.templateInfo.latest).subscribe(blob => {
saveAs(blob, `${this.templateInfo.name}-${this.latestVersion.version}.yml`);
this.localStorageService.removeData('nowTemplate');
this.templateInfo.download++;
for (let item of this.versionList) {
if(item.id==this.templateInfo.latest) {
item.download++;
break;
}
}
this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo));
});
}
downloadVersion(version:string, versionId:number): void {
this.templateService.downloadTemplate(this.templateInfo.user, this.templateInfo.id,version, versionId).subscribe(blob => {
saveAs(blob, `${this.templateInfo.name}-${version}.yml`);
for (let item of this.versionList) {
if(item.id==versionId) {
item.download++;
break;
}
}
this.localStorageService.removeData('nowTemplate');
this.templateInfo.download++;
this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo));
});
}
shareVersionNow(versionId:number): void {
this.versionService.shareVersion(versionId).subscribe(message=>{
if(message.code==0){
this.msg.success('已复制分享链接,快去发送给对方吧!');
const selBox = document.createElement('textarea');
selBox.style.position = 'fixed';
selBox.style.left = '0';
selBox.style.top = '0';
selBox.style.opacity = '0';
selBox.value = message.msg;
document.body.appendChild(selBox);
selBox.focus();
selBox.select();
document.execCommand('copy');
document.body.removeChild(selBox);
}else{
this.msg.error(message.msg);
}
})
}
ngOnInit(): void {
const user=this.localStorageService.getData("userId");
if(user==null) this.userId=0;
else this.userId=parseInt(user);
this.templateInfo=JSON.parse(<string>this.localStorageService.getData('nowTemplate'));
if(this.userId!=0){
this.starService.assertTemplateStarByUser(this.userId,this.templateInfo.id).subscribe(response => {
if(response.code == 0) {
this.isStarNow=response.data
}else{
this.msg.error('是否收藏判断失败'+response.msg)
}
})
}
this.versionService.getVersion(this.templateInfo.latest).subscribe(response => {
if(response.code == 0) {
this.latestVersion=response.data;
console.log(this.latestVersion);
}else {
this.msg.error('版本信息获取失败'+response.msg)
}
})
this.categoryList=JSON.parse(<string>this.localStorageService.getData('categoryList'));
console.log(this.templateInfo);
console.log(this.categoryList);
for (const item of this.categoryList) {
if(item.value==this.templateInfo.categoryId){
this.categoryStr=item.label;
}
}
this.getVersions();
}
pageIndexChange(newIndex:number){
this.newPageIndex=newIndex-1;
console.log("newPageIndex",this.newPageIndex,"newPageSize",this.newPageSize);
this.getVersions()
}
pageSizeChange(newSize:number){
this.newPageSize=newSize;
console.log("newSize",newSize,"newPageIndex",this.newPageIndex);
this.getVersions()
}
getVersions(){
this.versionService.getVersionPage(this.templateInfo.id,0,this.newPageIndex,this.newPageSize).subscribe(response => {
if(response.code == 0) {
this.versionList=response.data.content;
this.totalElements=response.data.totalElements;
this.totalPages=response.data.totalPages;
this.pageIndex=response.data.pageable.pageNumber;
this.pageSize=response.data.pageable.pageSize;
this.numberOfPages=response.data.numberOfElements;
}
})
}
starTemplate(id:number){
const formData = new FormData();
formData.append('user', this.userId.toString());
formData.append('template', id.toString());
this.starService.starTemplate(formData)
.subscribe(message=>{
if (message.code == 0) {
this.msg.success(message.msg);
this.isStarNow=true;
this.templateInfo.star++;
}else{
this.msg.error(message.msg);
}
})
}
cancelStarTemplate(id:number){
const formData = new FormData();
formData.append('templateId', id.toString());
this.starService.cancelStarTemplate(this.userId,formData)
.subscribe(message=>{
if (message.code == 0) {
this.msg.success(message.msg);
this.isStarNow=false;
this.templateInfo.star--;
}else{
this.msg.error(message.msg);
}
})
}
ngOnDestroy(): void {
this.localStorageService.removeData('nowTemplate');
}
protected readonly window = window;
}
@@ -1,229 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<main>
<div
class="tp-breadcrumb__area fix tp-breadcrumb-height"
style="background-image: url('../../../../assets/svg/breadcrumb.svg');height: 250px"
>
<div class="container">
<div class="row">
<div class="col-12">
<div class="tp-breadcrumb__content text-center z-index-5">
<div class="tp-breadcrumb__list">
<span><a href="../../../../index.html">Apache </a></span>
<span class="dvdr">.</span>
<span> HertzBeat</span>
</div>
<h3 class="tp-breadcrumb__title"
><span class="p-relative z-index-5">
监 控 模 版
<span class="tp-title-shape">
<img src="assets/svg/title-line.svg">
</span>
</span>
市 场
</h3>
</div>
</div>
</div>
</div>
</div>
<div class="tp-product__area pt-xxl-4 pb-xxl-5">
<div class="container">
<div class="tp-product__top-area pb-5">
<div class="row d-flex justify-content-end">
<div class="col-xl-4 col-lg-4 mb-5">
<div class="tp-product__filter">
<nz-select nzShowSearch nzAllowClear nzPlaceHolder="选择排序方法" nzSize="large"
[(ngModel)]="orderOption" (ngModelChange)="orderOptionChange($event)">
<nz-option nzLabel="最早创建" nzValue=1></nz-option>
<nz-option nzLabel="最近创建" nzValue=2></nz-option>
<nz-option nzLabel="最早更新" nzValue=3></nz-option>
<nz-option nzLabel="最近更新" nzValue=4></nz-option>
<nz-option nzLabel="最少下载" nzValue=5></nz-option>
<nz-option nzLabel="最多下载" nzValue=6></nz-option>
<nz-option nzLabel="最少收藏" nzValue=7></nz-option>
<nz-option nzLabel="最多收藏" nzValue=8></nz-option>
</nz-select>
</div>
</div>
<div class="col-xl-4 col-lg-4 mb-5">
<div class="tp-product__input">
<nz-input-group nzSearch nzSize="large" [nzAddOnAfter]="suffixButton">
<input type="text" nz-input placeholder="关键字搜索" [(ngModel)]="nameLike"/>
</nz-input-group>
<ng-template #suffixButton>
<button nz-button nzType="primary" nzSize="large" nzSearch (click)="getTemplatePageByOption()">
<span class="material-symbols-outlined">search</span>
</button>
</ng-template>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xl-3 col-lg-4">
<div class="tp-shop-sidebar me-4">
<!-- categories -->
<div class="tp-shop-widget mb-3">
<h3 class="tp-shop-widget-title">
模版类别
</h3>
<div style="border-bottom: 1px solid rgb(233, 233, 233);"></div>
<div class="tp-shop-widget-content mt-4">
<div class="tp-shop-widget-categories">
<label
nz-checkbox
[(ngModel)]="allChecked"
(ngModelChange)="updateAllChecked()"
[nzIndeterminate]="indeterminate">
全选
</label>
<nz-checkbox-group [(ngModel)]="categoryList" (ngModelChange)="updateSingleChecked()"></nz-checkbox-group>
</div>
</div>
</div>
<div class="tp-shop-widget mb-4">
<h3 class="tp-shop-widget-title">标签</h3>
<div style="border-bottom: 1px solid rgb(233, 233, 233);"></div>
<div class="tp-shop-widget-tag-box mt-4">
<div class="tp-shop-widget-tag" (click)="tagChange()">
<span>Docker</span>
<span>Linux</span>
<span>K8S</span>
<span>SpringBoot2</span>
<span>SpringBoot3</span>
<span>Web</span>
<span>Windows</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-9 col-lg-8" style="position: relative;">
<div class="container">
<div class="row gy-0 gx-3">
<div class="col-xl-4 col-md-6 mb-0" *ngFor="let item of templateList; let i = index">
<div class="tp-fea-product__item tp-fea-product__item-2">
<nz-card style="width: 300px;margin-top: 16px" [nzLoading]="loading" [nzActions]="[actionSetting, actionEdit, actionEllipsis]">
<nz-card-meta
[nzAvatar]="avatarTemplate"
[nzTitle]=item.name
[nzDescription]=item.description
></nz-card-meta>
</nz-card>
<ng-template #avatarTemplate>
<nz-avatar nzSrc="assets/svg/{{item.categoryId}}-img.svg"></nz-avatar>
</ng-template>
<ng-template #actionSetting>
<div style=" display:inline-flex;align-items: center; color: rgba(18,8,24,0.92)">
<span nz-icon nzType="star" nzTheme="outline" style="color: #b02a37"></span>&emsp;{{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }}
</div>
</ng-template>
<ng-template #actionEdit>
<div style=" display:inline-flex;align-items: center; color: rgba(18,8,24,0.92)">
<span nz-icon nzType="eye" nzTheme="outline" style="color: #b02a37"></span>&emsp;{{ item.star>=1000?((item.star/1000).toFixed(2)+'k'):item.star }}
</div>
</ng-template>
<ng-template #actionEllipsis>
<div style=" display:inline-flex;align-items: center; color: rgba(18,8,24,0.92)">
<span nz-icon nzType="download" nzTheme="outline" style="color: #b02a37"></span>&emsp;{{ item.download>=1000?((item.download/1000).toFixed(2)+'k'):item.download }}
</div>
</ng-template>
<div class="template_card__icon-box">
<a href="market/detail" onclick="event.preventDefault()" (click)="downloadLatestTemplate(item.id,item.user,item.latest,item.name)"
nzTooltipTitle="下载最新版本" nzTooltipPlacement="bottom" nz-tooltip>
<svg
t="1720551677718"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="1510"
width="18"
height="18"
>
<path
d="M511.985404 988.20397L354.645856 830.863205l31.692198-31.692197 125.64735 125.646134 125.647351-125.646134 31.693414 31.692197z"
fill="currentcolor"
p-id="1511"
></path>
<path d="M489.574876 549.16438h44.821057v390.984362h-44.821057z" fill="currentcolor" p-id="1512"></path>
<path
d="M802.862512 498.506247a292.347627 292.347627 0 0 0 3.606362-45.781943c0-160.264776-129.920251-290.18381-290.183811-290.183811-156.325145 0-283.755607 123.617328-289.927168 278.428166-98.420231 18.360213-172.926572 104.690313-172.926573 208.435553 0 117.112497 94.937933 212.051646 212.051646 212.051646l0.254209-0.002433v0.002433h50.690974v-44.821058H265.760287v-0.003649c-0.09244 0-0.184879 0.003649-0.278535 0.003649-44.669019 0-86.664586-17.394462-118.249748-48.98084-31.585162-31.585162-48.980841-73.580729-48.980841-118.249748s17.394462-86.664586 48.980841-118.249748c22.566216-22.566216 50.447712-37.88322 80.820212-44.794298a168.56853 168.56853 0 0 1 37.429536-4.186542c2.410728 0 4.811726 0.060816 7.205426 0.161769a249.539565 249.539565 0 0 1-1.764867-29.609873c0-5.121885 0.173932-10.217012 0.484091-15.286596 3.651365-59.787763 28.659934-115.491154 71.381639-158.211643 46.342662-46.342662 107.959757-71.865731 173.498239-71.86573 65.539698 0 127.155576 25.521852 173.498238 71.86573 46.342662 46.342662 71.865731 107.959757 71.865731 173.498239 0 16.313162-1.583637 32.383062-4.674283 48.035767a242.757415 242.757415 0 0 1-12.339474 42.018677h43.569473v0.029192c0.211638-0.001216 0.420844-0.013379 0.632482-0.01338 1.11779 0 2.233147 0.014596 3.346071 0.041355 35.320453 0.841687 68.400461 14.992248 93.471062 40.062849 25.861203 25.861203 40.102987 60.24388 40.102987 96.817133 0 36.573253-14.241785 70.95593-40.102987 96.817133-25.861203 25.861203-60.245096 40.102987-96.817133 40.102987l-0.063248-0.001216v0.001216h-72.483617v44.821057h76.492577v-0.049868c98.550376-2.099353 177.796681-82.63738 177.796682-181.691309-0.002433-95.656772-73.899403-174.050444-167.718329-181.210866z"
fill="currentcolor"
p-id="1513"
></path>
</svg>
</a>
<a href="market/detail" (click)="pickTemplate(item.id)" nzTooltipTitle="详情" nzTooltipPlacement="bottom" nz-tooltip>
<svg width="14" height="12" viewBox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8.79673 4.85355L12.0361 1.70712V3C12.0361 3.27614 12.2666 3.49999 12.5509 3.49999C12.8352 3.49999 13.0656 3.27614 13.0656 3V0.500039C13.0656 0.483562 13.0648 0.467086 13.0631 0.450656C13.0623 0.44325 13.0609 0.436078 13.0598 0.428789C13.0585 0.419953 13.0575 0.411094 13.0557 0.402305C13.054 0.393914 13.0516 0.385781 13.0495 0.377555C13.0475 0.369984 13.0458 0.362367 13.0434 0.354867C13.0409 0.346781 13.0378 0.338977 13.0349 0.331078C13.0321 0.323602 13.0296 0.316055 13.0264 0.308672C13.0233 0.301289 13.0196 0.294234 13.0161 0.287039C13.0124 0.279445 13.0089 0.271781 13.0048 0.264328C13.001 0.257437 12.9967 0.250875 12.9926 0.244172C12.9881 0.236883 12.9838 0.2295 12.9789 0.222375C12.9739 0.214969 12.9682 0.208008 12.9627 0.200883C12.9581 0.194953 12.9539 0.188859 12.949 0.18307C12.9383 0.170437 12.927 0.158273 12.9151 0.146719C12.9151 0.146625 12.915 0.146531 12.9149 0.146437C12.9148 0.146344 12.9147 0.146297 12.9146 0.146203C12.9027 0.134648 12.8902 0.123703 12.8772 0.11332C12.8712 0.108562 12.8649 0.104437 12.8588 0.0999844C12.8515 0.0946641 12.8443 0.0891562 12.8367 0.0842109C12.8294 0.0794531 12.8218 0.0753281 12.8142 0.0709688C12.8073 0.0669609 12.8006 0.0627656 12.7935 0.0590625C12.7858 0.0550781 12.778 0.0517031 12.7701 0.0481172C12.7627 0.0447187 12.7554 0.0411328 12.7479 0.0380625C12.7403 0.0350156 12.7325 0.0325313 12.7248 0.0298594C12.7166 0.0270234 12.7086 0.024 12.7003 0.0215625C12.6926 0.0192891 12.6847 0.017625 12.6769 0.0157266C12.6685 0.0136406 12.6601 0.0113438 12.6515 0.00967969C12.6424 0.00794531 12.6333 0.00689062 12.6242 0.005625C12.6167 0.00459375 12.6093 0.0031875 12.6017 0.00246094C12.5848 0.000867187 12.5678 0 12.5509 0H9.97704C9.69274 0 9.46228 0.223852 9.46228 0.499992C9.46228 0.776133 9.69274 0.999984 9.97704 0.999984H11.3081L8.06874 4.14645C7.86771 4.3417 7.86771 4.6583 8.06874 4.85355C8.26976 5.04881 8.59571 5.04881 8.79673 4.85355Z"
fill="currentcolor"
/>
<path
d="M4.97985 7.14644L1.74048 10.2929V9C1.74048 8.72386 1.51002 8.50001 1.22572 8.50001C0.941401 8.50001 0.710938 8.72386 0.710938 9V11.5C0.710938 11.5165 0.71183 11.5329 0.713495 11.5493C0.714243 11.5567 0.715667 11.5639 0.716753 11.5712C0.718056 11.58 0.719117 11.5889 0.720927 11.5977C0.72264 11.6061 0.725005 11.6142 0.727153 11.6224C0.729107 11.63 0.73082 11.6376 0.733161 11.6451C0.73567 11.6532 0.738783 11.661 0.741703 11.6689C0.744478 11.6764 0.747011 11.6839 0.750148 11.6913C0.753285 11.6987 0.757001 11.7057 0.7605 11.7129C0.764192 11.7205 0.767667 11.7282 0.771769 11.7356C0.775581 11.7425 0.7799 11.7491 0.784027 11.7558C0.788515 11.7631 0.792761 11.7705 0.79766 11.7776C0.802751 11.785 0.808422 11.7919 0.813899 11.7991C0.818484 11.805 0.822731 11.8111 0.827629 11.8169C0.838318 11.8296 0.849587 11.8417 0.861483 11.8533C0.86158 11.8534 0.861628 11.8535 0.861724 11.8535C0.861821 11.8536 0.861917 11.8537 0.862014 11.8538C0.87391 11.8653 0.886433 11.8763 0.899439 11.8867C0.905399 11.8914 0.911673 11.8955 0.917778 11.9C0.925113 11.9053 0.93228 11.9108 0.939905 11.9158C0.947216 11.9205 0.954817 11.9246 0.962345 11.929C0.969246 11.933 0.975979 11.9372 0.983097 11.9409C0.99077 11.9449 0.998661 11.9483 1.00648 11.9519C1.01389 11.9553 1.02117 11.9588 1.02875 11.9619C1.03635 11.9649 1.0441 11.9674 1.05182 11.9701C1.05995 11.9729 1.06799 11.976 1.07631 11.9784C1.08403 11.9807 1.09187 11.9823 1.09967 11.9842C1.10814 11.9863 1.11651 11.9886 1.12515 11.9903C1.1342 11.992 1.14332 11.9931 1.15242 11.9943C1.15992 11.9954 1.16733 11.9968 1.17493 11.9975C1.19182 11.9991 1.20876 12 1.2257 12H1.22572H3.79955C4.08384 12 4.3143 11.7761 4.3143 11.5C4.3143 11.2238 4.08384 11 3.79955 11H2.46848L5.70785 7.85355C5.90887 7.65829 5.90887 7.3417 5.70785 7.14644C5.50682 6.95119 5.18088 6.95119 4.97985 7.14644Z"
fill="currentcolor"
/>
<path
d="M12.9628 11.799C12.9682 11.7919 12.9739 11.785 12.9789 11.7776C12.9839 11.7705 12.9881 11.7631 12.9926 11.7558C12.9967 11.7491 13.001 11.7426 13.0048 11.7357C13.0089 11.7282 13.0124 11.7206 13.0161 11.7129C13.0196 11.7058 13.0233 11.6987 13.0264 11.6913C13.0296 11.684 13.0321 11.6764 13.0349 11.6689C13.0378 11.661 13.0409 11.6532 13.0434 11.6452C13.0458 11.6377 13.0475 11.63 13.0494 11.6225C13.0516 11.6142 13.0539 11.6061 13.0557 11.5977C13.0574 11.589 13.0585 11.5801 13.0598 11.5713C13.0609 11.564 13.0623 11.5568 13.0631 11.5494C13.0648 11.533 13.0656 11.5165 13.0656 11.5V9C13.0656 8.72386 12.8352 8.50001 12.5509 8.50001C12.2666 8.50001 12.0361 8.72386 12.0361 9V10.2929L8.79673 7.14644C8.59571 6.95119 8.26976 6.95119 8.06874 7.14644C7.86771 7.3417 7.86771 7.65829 8.06874 7.85355L11.3081 11H9.97704C9.69274 11 9.46228 11.2238 9.46228 11.5C9.46228 11.7761 9.69274 12 9.97704 12H12.5509C12.5678 12 12.5848 11.9991 12.6017 11.9975C12.6093 11.9968 12.6167 11.9954 12.6242 11.9943C12.6333 11.9931 12.6424 11.9921 12.6515 11.9903C12.6601 11.9886 12.6684 11.9863 12.6769 11.9842C12.6847 11.9823 12.6926 11.9807 12.7003 11.9784C12.7086 11.976 12.7166 11.973 12.7247 11.9701C12.7325 11.9674 12.7402 11.965 12.7478 11.9619C12.7554 11.9589 12.7627 11.9553 12.7701 11.9519C12.7779 11.9483 12.7858 11.9449 12.7935 11.9409C12.8006 11.9372 12.8073 11.933 12.8142 11.9291C12.8217 11.9247 12.8293 11.9205 12.8367 11.9158C12.8443 11.9108 12.8514 11.9054 12.8587 11.9001C12.8648 11.8956 12.8711 11.8914 12.8771 11.8867C12.89 11.8764 12.9025 11.8655 12.9143 11.8541C12.9145 11.8539 12.9147 11.8537 12.9148 11.8536C12.915 11.8534 12.9152 11.8532 12.9153 11.853C12.9271 11.8415 12.9383 11.8295 12.9489 11.8169C12.9539 11.8111 12.9581 11.805 12.9628 11.799Z"
fill="currentcolor"
/>
<path
d="M2.46848 1.00001H3.79954C4.08384 1.00001 4.3143 0.776156 4.3143 0.500016C4.3143 0.223852 4.08384 0 3.79954 0H1.2257H1.22567C1.20873 0 1.19177 0.000867188 1.1749 0.00248437C1.16728 0.00321094 1.1599 0.00459375 1.15239 0.00564844C1.14329 0.00691406 1.13417 0.00794531 1.12512 0.00967969C1.11649 0.0113438 1.10811 0.0136406 1.09964 0.0157266C1.09185 0.017625 1.08401 0.0192891 1.07629 0.0215625C1.06796 0.024 1.05993 0.0270469 1.05179 0.0298828C1.0441 0.0325781 1.03633 0.0350391 1.02873 0.0380859C1.02113 0.0411563 1.01381 0.0447422 1.00641 0.0481641C0.998612 0.0517266 0.990722 0.0551016 0.983073 0.0590859C0.975954 0.0627891 0.969198 0.0670078 0.962273 0.0710156C0.954793 0.0753516 0.947192 0.0794531 0.939881 0.0842109C0.932231 0.0891797 0.925041 0.0947109 0.917681 0.100055C0.9116 0.104484 0.905351 0.108586 0.899439 0.11332C0.87321 0.134227 0.849129 0.157617 0.827605 0.183094C0.822731 0.188836 0.818508 0.194906 0.813947 0.200836C0.808446 0.207984 0.802751 0.214969 0.797636 0.222398C0.792737 0.2295 0.788515 0.236859 0.784026 0.244148C0.7799 0.250852 0.775557 0.257437 0.771744 0.264352C0.767642 0.271781 0.764192 0.279422 0.7605 0.287016C0.757001 0.294211 0.753285 0.301312 0.750124 0.308695C0.746987 0.316078 0.744454 0.323602 0.741679 0.331102C0.738759 0.339 0.735646 0.346805 0.733113 0.354891C0.730772 0.362391 0.729059 0.370008 0.727104 0.377578C0.724957 0.385805 0.722592 0.393937 0.720879 0.402328C0.719093 0.411117 0.718032 0.419977 0.716729 0.428813C0.715667 0.436102 0.714219 0.443297 0.713471 0.45068C0.71183 0.467063 0.710938 0.483516 0.710938 0.499992V3C0.710938 3.27614 0.941401 3.49999 1.2257 3.49999C1.50999 3.49999 1.74046 3.27614 1.74046 3V1.70712L4.97983 4.85355C5.18085 5.04881 5.5068 5.04881 5.70782 4.85355C5.90885 4.6583 5.90885 4.3417 5.70782 4.14645L2.46848 1.00001Z"
fill="currentcolor"
/>
</svg>
</a>
<a href="javascript:" (click)="starTemplate(item.id)" *ngIf="!item.starByNowUser" nzTooltipTitle="收藏" nzTooltipPlacement="bottom" nz-tooltip>
<svg width="16" height="13" viewBox="0 0 16 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M13.6048 1.52734C12.0189 0.1875 9.5853 0.378906 8.0814 1.9375C6.55015 0.378906 4.11655 0.1875 2.53062 1.52734C0.479836 3.25 0.780617 6.06641 2.25718 7.57031L7.04234 12.4648C7.31577 12.7383 7.67124 12.9023 8.0814 12.9023C8.46421 12.9023 8.81968 12.7383 9.09312 12.4648L13.9056 7.57031C15.3548 6.06641 15.6556 3.25 13.6048 1.52734ZM12.9486 6.64062L8.16343 11.5352C8.10874 11.5898 8.05405 11.5898 7.97202 11.5352L3.18687 6.64062C2.17515 5.62891 1.98374 3.71484 3.37827 2.53906C4.44468 1.63672 6.0853 1.77344 7.12437 2.8125L8.0814 3.79688L9.03843 2.8125C10.0501 1.77344 11.6908 1.63672 12.7572 2.51172C14.1517 3.71484 13.9603 5.62891 12.9486 6.64062Z"
fill="currentcolor"
/>
</svg>
</a>
<a href="javascript:" (click)="cancelStarTemplate(item.id)" *ngIf="item.starByNowUser" nzTooltipTitle="取消收藏" nzTooltipPlacement="bottom" nz-tooltip>
<svg width="16" height="13" viewBox="0 0 16 13" style="fill: #b02a37" xmlns="http://www.w3.org/2000/svg">
<path
d="M13.6048 1.52734C12.0189 0.1875 9.5853 0.378906 8.0814 1.9375C6.55015 0.378906 4.11655 0.1875 2.53062 1.52734C0.479836 3.25 0.780617 6.06641 2.25718 7.57031L7.04234 12.4648C7.31577 12.7383 7.67124 12.9023 8.0814 12.9023C8.46421 12.9023 8.81968 12.7383 9.09312 12.4648L13.9056 7.57031C15.3548 6.06641 15.6556 3.25 13.6048 1.52734ZM12.9486 6.64062L8.16343 11.5352C8.10874 11.5898 8.05405 11.5898 7.97202 11.5352L3.18687 6.64062C2.17515 5.62891 1.98374 3.71484 3.37827 2.53906C4.44468 1.63672 6.0853 1.77344 7.12437 2.8125L8.0814 3.79688L9.03843 2.8125C10.0501 1.77344 11.6908 1.63672 12.7572 2.51172C14.1517 3.71484 13.9603 5.62891 12.9486 6.64062Z"
style="fill: #b02a37"
/>
</svg>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="container bottom-0">
<div class="d-flex justify-content-center">
<nz-pagination [nzPageIndex]="pageIndex+1" [nzTotal]="totalElements" nzShowSizeChanger
[(nzPageSize)]="pageSize" (nzPageIndexChange)="pageIndexChange($event)"
(nzPageSizeChange)="pageSizeChange($event)" [nzPageSizeOptions]=pageSizeOptions></nz-pagination>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
@@ -1,60 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
nz-select {
width: 352px;
//height: 60px;
}
.material-symbols-outlined {
font-variation-settings:
'FILL' 0,
'wght' 400,
'GRAD' 0,
'opsz' 18
}
second-container {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 10px;
}
/deep/ .ant-checkbox-group, .ant-collapse {
padding: 0;
line-height: 1.5715;
font-size: 17px;
color: rgba(0, 0, 0, .85);
box-sizing: border-box;
font-variant: tabular-nums;
font-feature-settings: 'tnum';
list-style: none;
}
/deep/ .ant-checkbox-wrapper {
display: inline-flex;
align-items: baseline;
line-height: unset;
cursor: pointer;
font-size: 17px;
font-family: "Gill Sans", sans-serif;
padding-bottom: 1rem;
}
@@ -1,270 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnDestroy, OnInit} from '@angular/core';
import {NzMessageService} from 'ng-zorro-antd/message';
import {TemplateService, TemplateVO} from '../../../service/template.service';
import {CategoryService} from "../../../service/category.service";
import {StarService} from "../../../service/star.service";
import {LocalStorageService} from "../../../service/local-storage.service";
import {saveAs} from "file-saver";
declare global {
interface Window { URL: any; }
}
window.URL = window.URL || {};
@Component({
selector: 'market',
templateUrl: './template-list.component.html',
styleUrls: ['./template-list.component.less']
})
export class TemplateListComponent implements OnInit, OnDestroy {
constructor(private templateService: TemplateService,
private msg: NzMessageService,
private categoryService: CategoryService,
private starService: StarService,
private localStorageService: LocalStorageService,) {}
templateList: TemplateVO[] = [];
userId:number=0;
totalElements = 1;
totalPages = 1;
pageIndex=0;
pageSize = 9;
numberOfPages = 1;
newPageIndex= this.pageIndex;
newPageSize = this.pageSize;
pageSizeOptions:number[]=[9,18,27];
nameLike='';
type = 0;
allChecked = false;
indeterminate = true;
checkCategory:number[] = [1];
categoryList = [
{ label: '数据库监控模版', value: 1, checked: true },
{ label: '应用服务监控模版', value: 2, checked: false },
];
orderOption = 1;
loading = false;
ngOnInit(): void {
this.templateList=[];
this.categoryService.clearCategoryList();
this.categoryService.getAllCategoryByIsDel(0).subscribe(message => {
// console.log('返回结果',message);
if (message.code == 0) {
this.categoryService.addCategoryList(message.data)
this.categoryList=[];
this.allChecked=true;
this.indeterminate=false;
this.categoryService.getCategoryList().forEach(item=>{
this.checkCategory.push(item.id);
this.categoryList.push({label: item.description, value: item.id, checked:true});
})
this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList));
}else{
this.msg.error('类别请求失败:'+message.msg);
}
})
const user=this.localStorageService.getData("userId");
if(user==null) this.userId=0;
else this.userId=parseInt(user);
this.templateService.getTemplatePage(0, this.userId,0,9).subscribe(message => {
if (message.code == 0) {
this.templateList.push(...message.data.content);
console.log(this.templateList);
this.totalElements=message.data.totalElements;
this.totalPages=message.data.totalPages;
this.pageIndex=message.data.pageable.pageNumber;
this.pageSize=message.data.pageable.pageSize;
this.numberOfPages=message.data.numberOfElements;
// this.msg.success('查询成功');
this.templateService.setTemplateSubject(this.templateList);
} else {
this.msg.error(message.msg);
}
});
}
orderOptionChange(orderValue:number) {
this.msg.warning('排序功能开发中!');
console.log(orderValue);
}
tagChange(){
this.msg.warning('标签功能开发中!');
}
pageIndexChange(newIndex:number){
this.newPageIndex=newIndex-1;
// console.log("newPageIndex",this.newPageIndex,"newPageSize",this.newPageSize);
this.getTemplatePageByOption()
}
pageSizeChange(newSize:number){
this.newPageSize=newSize;
// console.log("newSize",newSize,"newPageIndex",this.newPageIndex);
this.getTemplatePageByOption()
}
getTemplatePageByOption(){
this.templateService.getTemplatePageByOption(this.userId,this.allChecked,this.checkCategory,this.nameLike,this.orderOption,0,this.newPageIndex,this.newPageSize)
.subscribe(message => {
if (message.code == 0) {
this.templateList=[];
this.templateList.push(...message.data.content);
this.totalElements=message.data.totalElements;
this.totalPages=message.data.totalPages;
this.pageIndex=message.data.pageable.pageNumber;
this.pageSize=message.data.pageable.pageSize;
this.numberOfPages=message.data.numberOfElements;
// this.msg.success('查询成功');
this.templateService.setTemplateSubject(this.templateList);
console.log(this.templateList)
console.log(message)
} else {
this.msg.error(message.msg);
}
})
}
updateAllChecked(): void {
this.checkCategory=[];
this.indeterminate = false;
if (this.allChecked) {
this.categoryList = this.categoryList.map(item => ({
...item,
checked: true
}));
} else {
this.categoryList = this.categoryList.map(item => ({
...item,
checked: false
}));
}
this.categoryList.forEach(item => {
if (item.checked) {
this.checkCategory.push(item.value);
}
})
if(this.checkCategory.length!=0) this.getTemplatePageByOption();
}
updateSingleChecked(): void {
this.checkCategory=[];
if (this.categoryList.every(item => !item.checked)) {
this.allChecked = false;
this.indeterminate = false;
} else if (this.categoryList.every(item => item.checked)) {
this.allChecked = true;
this.indeterminate = false;
} else {
this.allChecked = false;
this.indeterminate = true;
}
this.categoryList.forEach(item => {
if (item.checked) {
this.checkCategory.push(item.value);
}
})
this.getTemplatePageByOption();
}
downloadLatestTemplate(id:number,user:number,latest:number,name:string){
this.templateService.downloadLatestTemplate(user,id,latest)
.subscribe((blob:Blob)=>{
saveAs(blob, `${name}-latest.yml`);
for (let templateVO of this.templateList) {
if(templateVO.id==id) {
templateVO.download++;
break;
}
}
},
error => {
console.error('下载文件时发生错误:', error);
});
}
pickTemplate(id:number){
this.templateService.setNowTemplate(id);
let nowTemplate = this.templateService.getNowTemplate();
localStorage.setItem('nowTemplate', JSON.stringify(nowTemplate));
// console.log(this.templateService.getNowTemplate());
}
starTemplate(id:number){
const formData = new FormData();
formData.append('user', this.userId.toString());
formData.append('template', id.toString());
this.starService.starTemplate(formData)
.subscribe(message=>{
if (message.code == 0) {
for (let templateVO of this.templateList) {
if(templateVO.id==id) {
templateVO.starByNowUser=true;
templateVO.star++;
break;
}
}
this.msg.success(message.msg);
}else{
this.msg.error(message.msg);
}
})
}
cancelStarTemplate(id:number){
const formData = new FormData();
formData.append('templateId', id.toString());
this.starService.cancelStarTemplate(this.userId,formData)
.subscribe(message=>{
if (message.code == 0) {
this.msg.success(message.msg);
for (let templateVO of this.templateList) {
if(templateVO.id==id) {
templateVO.starByNowUser=false;
templateVO.star--;
break;
}
}
}else{
this.msg.error(message.msg);
}
})
}
ngOnDestroy(): void {
this.templateList=[];
this.categoryList=[];
this.templateService.clearTemplateSubject();
this.categoryService.clearCategoryList();
}
protected readonly event = event;
}
@@ -1,40 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Routes} from '@angular/router';
import {LayoutMarketComponent} from '../layout/market/market.component';
import {HomePageComponent} from './home-page/home-page.component';
import {LoginComponent} from './login/login.component';
import {SignUpComponent} from "./sign-up/sign-up.component";
export const routes: Routes = [
{
path: '',
component: LayoutMarketComponent,
children: [
{ path: '', redirectTo: 'home-page', pathMatch: 'full' },
{ path: 'login', component: LoginComponent },
{ path: 'sign-up', component: SignUpComponent },
{ path: 'home-page', component: HomePageComponent },
{ path: 'market', loadChildren: () => import('./market/market.module').then(m => m.MarketModule) },
{ path: 'user-center', loadChildren: () => import('./user-center/user-center.module').then(m => m.UserCenterModule) }
]
},
{ path: '**', redirectTo: 'exception/404' }
];
@@ -1,58 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {NgModule, Type} from '@angular/core';
import {NzCollapseModule} from 'ng-zorro-antd/collapse';
import {NzDividerModule} from 'ng-zorro-antd/divider';
import {NzListModule} from 'ng-zorro-antd/list';
import {NzTagModule} from 'ng-zorro-antd/tag';
import {NzTimelineModule} from 'ng-zorro-antd/timeline';
import {LayoutModule} from '../layout/layout.module';
import {HomePageComponent} from './home-page/home-page.component';
import {LoginComponent} from './login/login.component';
import {RouterModule} from "@angular/router";
import {NzMessageModule} from "ng-zorro-antd/message";
import {BrowserModule} from "@angular/platform-browser";
import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
import {FormsModule} from "@angular/forms";
import {SignUpComponent} from "./sign-up/sign-up.component";
const COMPONENTS: Array<Type<void>> = [
HomePageComponent,LoginComponent,SignUpComponent
];
@NgModule({
imports: [
NzTagModule,
NzTimelineModule,
NzDividerModule,
LayoutModule,
NzCollapseModule,
NzListModule,
RouterModule,
COMPONENTS,
NzMessageModule,
BrowserModule,
BrowserAnimationsModule,
FormsModule
],
exports:[RouterModule]
})
export class RoutesModule {}
@@ -1,75 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<main>
<div class="tp-register__area pt-xxl-4 pb-xxl-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-xl-6">
<div class="tp-register__form-box">
<div class="tp-register__form-title text-center mb-5">
<h6>注册</h6>
</div>
<form>
<div class="row">
<div class="col-xl-12">
<div class="tp-register__input-box">
<label for="sign-up-name">用户名</label>
<input id="sign-up-name" type="text" placeholder="用户名" autocomplete="off" name="name" [(ngModel)]="SignUpForm.name">
</div>
</div>
<div class="col-xl-12">
<div class="tp-register__input-box">
<label for="sign-up-email">Email 地址</label>
<input id="sign-up-email" type="email" placeholder="邮箱地址" autocomplete="off" name="email" [(ngModel)]="SignUpForm.email">
</div>
</div>
<div class="col-xl-12">
<div class="tp-register__input-box">
<label for="sign-up-password">密码</label>
<input id="sign-up-password" type="password" placeholder="密码" autocomplete="off" name="password" [(ngModel)]="SignUpForm.password">
</div>
</div>
<div class="col-xl-12">
<div class="tp-register__input-box">
<label for="sign-up-passwordOk">确认密码</label>
<input id="sign-up-passwordOk" type="password" placeholder="密码" autocomplete="off" name="passwordOk" [(ngModel)]="passwordOk">
</div>
</div>
<div class="col-xl-12">
<div class="tp-contact-4__comment-agree label-2 pt-5 pb-5">
<div class="form-check-box">
<input class="form-check-input" type="checkbox" value="" id="flexCheckDefault">
<label class="form-check-label text-theme" for="flexCheckDefault">
我同意 xxx & <span class="red">xxx</span> 和 xxx
</label>
</div>
</div>
<div class="tp-contact-4__btn">
<button type="button" class="btn-no-icon w-100" (click)="submitSignUp()">去注册</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</main>
@@ -1,18 +0,0 @@
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
@@ -1,79 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, Injector, OnDestroy, OnInit} from '@angular/core';
import {FormBuilder, FormsModule} from '@angular/forms';
import {AuthService, LoginDTO, SignUpDTO} from "../../service/auth.service";
import {LocalStorageService} from "../../service/local-storage.service";
import {NzMessageService} from "ng-zorro-antd/message";
import {Router} from "@angular/router";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {DataService} from "../../service/data.service";
@Component({
selector: 'login',
templateUrl: './sign-up.component.html',
styleUrls: ['./sign-up.component.less'],
standalone: true,
providers: [],
imports: [
NzButtonComponent,
FormsModule
],
// changeDetection: ChangeDetectionStrategy.OnPush
})
export class SignUpComponent implements OnInit,OnDestroy {
constructor(
fb: FormBuilder,
private authService: AuthService,
private localStorageService: LocalStorageService,
private msg: NzMessageService,
private injector: Injector,
private dataService: DataService,
) {}
SignUpForm: SignUpDTO={
name:'',
email:'',
password:'',
};
passwordOk:string='';
submitSignUp():void{
// console.log(this.SignUpForm)
if(this.passwordOk!=this.SignUpForm.password) this.msg.error('密码不一致');
if(this.SignUpForm.email==null||this.SignUpForm.name==null||this.SignUpForm.password==null) this.msg.error('信息不全');
this.authService.register(this.SignUpForm).subscribe(response => {
console.log(response);
if(response.code == 0) {
this.msg.success('注册成功');
// window.history.back();
}else{
this.msg.error('注册失败:'+response.msg)
}
})
}
ngOnInit(): void {
}
ngOnDestroy(): void {
}
}
@@ -1,18 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -1,302 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnDestroy, OnInit} from '@angular/core';
import {saveAs} from 'file-saver';
import {NzMessageService} from 'ng-zorro-antd/message';
import {TemplateService} from '../../../service/template.service';
import {finalize, Observable, Subscription, window} from "rxjs";
import {LocalStorageService} from "../../../service/local-storage.service";
import {CategoryService} from "../../../service/category.service";
import {VersionService} from "../../../service/version.service";
import {NzUploadChangeParam, NzUploadFile} from "ng-zorro-antd/upload";
interface TemplateInfo {
id: number;
name: string;
description: string;
descriptionVersion: string;
latest: number;
versions: string[];
currentVersion: string;
user: string;
userId: number;
category: string;
categoryId: number;
download: number;
star:number;
create_time: string;
update_time: string;
off_shelf: number;
is_del: number;
}
@Component({
selector: 'market',
templateUrl: './assets-detail.component.html',
styleUrls: ['./assets-detail.component.less']
})
export class AssetsDetailComponent implements OnInit, OnDestroy {
constructor(private templateService: TemplateService,
private msg: NzMessageService,
private localStorageService: LocalStorageService,
private categoryService: CategoryService,
private versionService: VersionService,) {}
userId:number=0;
templateInfo :any = null;
categoryList: any[] = [];
latestVersion :any = null;
versionList: any[] = [];
totalElements = 10;
totalPages = 1;
pageIndex=0;
pageSize = 2;
numberOfPages = 1;
newPageIndex=this.pageIndex;
newPageSize = this.pageSize;
pageSizeOptions:number[]=[2,5,10,20];
categoryStr='';
showPage = 1;
visible = false;
error = 'success';
type = 0;
loading = false;
count = 0;
interval$: any;
fileList: NzUploadFile[] = [];
file: any[] = [];
newTemplateInfo = {
id: 0,
name: '',
description: '模版描述',
descriptionVersion: '版本描述',
latest: 0,
currentVersion: 'v1.0.0',
user: 'user',
userId: 1,
category: '',
categoryId: 0,
download: 0,
star:0,
create_time: '2024',
update_time: '2024',
off_shelf: 0,
is_del: 0
} as TemplateInfo;
open(): void {
this.visible = true;
}
close(): void {
this.visible = false;
}
handleChange(info: NzUploadChangeParam) {
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
const isLt4M = info.file.size! / 1024 / 1024 < 4;
if (!isLt4M) {
// this.message.error('Message.File.SizeFile');
console.log('error:文件超过4M');
}
// this.file = this.file.concat(info.file);
}
if (info.file.status === 'done') {
this.file.pop();
// this.msg.success(`${info.file.name} file uploaded successfully`);
} else if (info.file.status === 'error') {
// this.msg.error(`${info.file.name} file upload failed.`);
}
}
beforeUpload = (file: any) => {
while (this.file.length > 0) {
this.file.pop();
}
console.log('beforeUpload', file);
this.file.push(file);
console.log('afterUpload', this.file);
return false;
};
getCategoryStr(value:number):string{
for (const item of this.categoryList) {
if(item.value==value){
return item.label;
}
}
return ' '
}
updateTemplate(): void {
if(this.file.length==0){
this.msg.error("文件为空");
return;
}
const formData = new FormData();
if (this.file.length > 0) {
formData.append('file', this.file[0]);
this.newTemplateInfo.id=this.templateInfo.id;
this.newTemplateInfo.name=this.templateInfo.name;
this.newTemplateInfo.description=this.templateInfo.description;
this.newTemplateInfo.userId=this.templateInfo.user;
this.newTemplateInfo.categoryId=this.templateInfo.categoryId;
this.newTemplateInfo.category=this.getCategoryStr(this.newTemplateInfo.categoryId)
formData.append('templateDto', JSON.stringify(this.newTemplateInfo));
const uploadTemplateRes$ = this.templateService
.upload(formData)
.pipe(
finalize(() => {
uploadTemplateRes$.unsubscribe();
// this.tableLoading = false;
})
)
.subscribe(
message => {
console.log('message', message);
if (message.code === 0) {
// this.notifySvc.success(this.i18nSvc.fanyi('common.notify.edit-success'), '');
this.msg.success(`模版文件上传成功`);
this.getVersions();
this.close();
} else {
this.msg.error(`模版上传失败:${message.msg}`);
// this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), message.msg);
}
// this.loadAlertConvergeTable();
// this.tableLoading = false;
},
error => {
console.log('err', error);
// this.tableLoading = false;
// this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), error.msg);
this.msg.error(`模版上传失败`, error.msg);
}
);
}
}
downloadTemplateNow(): void {
this.templateService.downloadLatestTemplate(this.templateInfo.user, this.templateInfo.id, this.templateInfo.latest).subscribe(blob => {
saveAs(blob, `${this.templateInfo.name}-${this.latestVersion.version}.yml`);
this.localStorageService.removeData('nowTemplate');
this.templateInfo.download++;
this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo));
});
}
downloadVersion(version:string, versionId:number): void {
this.templateService.downloadTemplate(this.templateInfo.user, this.templateInfo.id,version, versionId).subscribe(blob => {
saveAs(blob, `${this.templateInfo.name}-${version}.yml`);
this.localStorageService.removeData('nowTemplate');
this.templateInfo.download++;
this.localStorageService.putData('nowTemplate', JSON.stringify(this.templateInfo));
});
}
shareVersionNow(versionId:number): void {
this.versionService.shareVersion(versionId).subscribe(message=>{
if(message.code==0){
this.msg.success('已复制分享链接,快去发送给对方吧!');
const selBox = document.createElement('textarea');
selBox.style.position = 'fixed';
selBox.style.left = '0';
selBox.style.top = '0';
selBox.style.opacity = '0';
selBox.value = message.msg;
document.body.appendChild(selBox);
selBox.focus();
selBox.select();
document.execCommand('copy');
document.body.removeChild(selBox);
}else{
this.msg.error(message.msg);
}
})
}
ngOnInit(): void {
const user=this.localStorageService.getData("userId");
if(user==null) this.userId=0;
else this.userId=parseInt(user);
this.templateInfo=JSON.parse(<string>this.localStorageService.getData('nowTemplate'));
this.versionService.getVersion(this.templateInfo.latest).subscribe(response => {
if(response.code == 0) {
this.latestVersion=response.data;
console.log(this.latestVersion);
}else {
this.msg.error('版本信息获取失败'+response.msg)
}
})
this.categoryList=JSON.parse(<string>this.localStorageService.getData('categoryList'));
// console.log(this.templateInfo);
// console.log(this.categoryList);
for (const item of this.categoryList) {
if(item.value==this.templateInfo.categoryId){
this.categoryStr=item.label;
}
}
this.getVersions();
}
pageIndexChange(newIndex:number){
this.newPageIndex=newIndex-1;
console.log("newPageIndex",this.newPageIndex,"newPageSize",this.newPageSize);
this.getVersions()
}
pageSizeChange(newSize:number){
this.newPageSize=newSize;
console.log("newSize",newSize,"newPageIndex",this.newPageIndex);
this.getVersions()
}
getVersions(){
this.versionService.getVersionPage(this.templateInfo.id,0,this.newPageIndex,this.newPageSize).subscribe(response => {
if(response.code == 0) {
this.versionList=response.data.content;
this.totalElements=response.data.totalElements;
this.totalPages=response.data.totalPages;
this.pageIndex=response.data.pageable.pageNumber;
this.pageSize=response.data.pageable.pageSize;
this.numberOfPages=response.data.numberOfElements;
}
})
}
ngOnDestroy(): void {
this.localStorageService.removeData('nowTemplate');
}
protected readonly window = window;
}
@@ -1,18 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -1,231 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnDestroy, OnInit} from '@angular/core';
import {FormBuilder} from '@angular/forms';
import {NzMessageService} from 'ng-zorro-antd/message';
import {NzUploadChangeParam, NzUploadFile} from 'ng-zorro-antd/upload';
import {finalize, window} from 'rxjs';
import {TemplateService} from '../../../service/template.service';
import {CategoryService} from "../../../service/category.service";
import {LocalStorageService} from "../../../service/local-storage.service";
import {saveAs} from "file-saver";
interface TemplateInfo {
id: number;
name: string;
description: string;
descriptionVersion: string;
latest: number;
versions: string[];
currentVersion: string;
user: string;
userId: number;
category: string;
categoryId: number;
download: number;
star:number,
create_time: string;
update_time: string;
off_shelf: number;
is_del: number;
}
@Component({
selector: 'user-upload',
templateUrl: './user-assets.component.html',
styleUrls: ['./user-assets.component.less'],
})
export class UserAssetsComponent implements OnInit,OnDestroy {
constructor(fb: FormBuilder,
private templateService: TemplateService,
private msg: NzMessageService,
private categoryService: CategoryService,
private localStorageService: LocalStorageService,) {}
userId:number=0;
templateList: any[] = [];
totalElements = 1;
totalPages = 1;
pageIndex=0;
pageSize = 9;
numberOfPages = 1;
newPageIndex=this.pageIndex;
newPageSize = this.pageSize;
pageSizeOptions:number[]=[9,18,27];
nameLike='';
type = 0;
allChecked = false;
indeterminate = true;
checkCategory:number[] = [1];
categoryList = [
{ label: '数据库监控模版', value: 1, checked: true },
{ label: '应用服务监控模版', value: 2, checked: false },
];
orderOption = 1;
loading = false;
ngOnInit(): void {
const user=this.localStorageService.getData("userId");
if(user==null) this.userId=0;
else this.userId=parseInt(user);
// this.templateList=[];
this.categoryService.clearCategoryList();
this.categoryService.getAllCategoryByIsDel(0).subscribe(message => {
console.log('返回结果',message);
if (message.code == 0) {
this.categoryService.addCategoryList(message.data)
this.categoryList=[];
this.allChecked=true;
this.indeterminate=false;
this.categoryService.getCategoryList().forEach(item=>{
this.checkCategory.push(item.id);
this.categoryList.push({label: item.description, value: item.id, checked:true});
})
this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList));
}else{
this.msg.error('类别请求失败:'+message.msg);
}
})
this.templateService.getTemplatePageByUser(this.userId,0,this.pageSize).subscribe(message => {
if (message.code == 0) {
this.templateList.push(...message.data.content);
this.totalElements=message.data.totalElements;
this.totalPages=message.data.totalPages;
this.pageIndex=message.data.pageable.pageNumber;
this.pageSize=message.data.pageable.pageSize;
this.numberOfPages=message.data.numberOfElements;
this.msg.success('查询成功');
this.templateService.setTemplateSubject(this.templateList);
} else {
this.msg.error(message.msg);
}
});
}
orderOptionChange(orderValue:number) {
//
console.log(orderValue);
}
pageIndexChange(newIndex:number){
this.newPageIndex=newIndex-1;
this.getTemplatePageByOption()
}
pageSizeChange(newSize:number){
this.newPageSize=newSize;
this.getTemplatePageByOption()
}
getTemplatePageByOption(){
this.templateService.getTemplatePageByOption(this.userId,this.allChecked,this.checkCategory,this.nameLike,this.orderOption,0,this.newPageIndex,this.newPageSize)
.subscribe(message => {
if (message.code == 0) {
this.templateList=[];
this.templateList.push(...message.data.content);
this.totalElements=message.data.totalElements;
this.totalPages=message.data.totalPages;
this.pageIndex=message.data.pageable.pageNumber;
this.pageSize=message.data.pageable.pageSize;
this.numberOfPages=message.data.numberOfElements;
this.msg.success('查询成功');
this.templateService.setTemplateSubject(this.templateList);
} else {
this.msg.error(message.msg);
}
})
}
updateAllChecked(): void {
this.checkCategory=[];
this.indeterminate = false;
if (this.allChecked) {
this.categoryList = this.categoryList.map(item => ({
...item,
checked: true
}));
} else {
this.categoryList = this.categoryList.map(item => ({
...item,
checked: false
}));
}
this.categoryList.forEach(item => {
if (item.checked) {
this.checkCategory.push(item.value);
}
})
}
updateSingleChecked(): void {
this.checkCategory=[];
if (this.categoryList.every(item => !item.checked)) {
this.allChecked = false;
this.indeterminate = false;
} else if (this.categoryList.every(item => item.checked)) {
this.allChecked = true;
this.indeterminate = false;
} else {
this.allChecked = false;
this.indeterminate = true;
}
this.categoryList.forEach(item => {
if (item.checked) {
this.checkCategory.push(item.value);
}
})
}
downloadLatestTemplate(id:number,user:number,latest:number,name:string){
this.templateService.downloadLatestTemplate(user,id,latest)
.subscribe((blob:Blob)=>{
saveAs(blob, `${name}-latest.yml`);
},
error => {
console.error('下载文件时发生错误:', error);
});
}
pickTemplate(id:number){
this.templateService.setNowTemplate(id);
let nowTemplate = this.templateService.getNowTemplate();
localStorage.setItem('nowTemplate', JSON.stringify(nowTemplate));
// console.log(this.templateService.getNowTemplate());
}
ngOnDestroy(): void {
this.templateList=[];
this.categoryList=[];
this.templateService.clearTemplateSubject();
this.categoryService.clearCategoryList();
}
protected readonly window = window;
}
@@ -1,41 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { UserUploadComponent } from './user-upload/user-upload.component';
import {UserAssetsComponent} from "./user-assets/user-assets.component";
import {AssetsDetailComponent} from "./assets-detail/assets-detail.component";
import {UserStarComponent} from "./user-star/user-star.component";
const routes: Routes = [
{ path: '', component: UserUploadComponent },
{ path: 'upload', component: UserUploadComponent },
{ path: 'assets', component: UserAssetsComponent },
{ path: 'detail', component: AssetsDetailComponent },
{ path: 'star', component: UserStarComponent },
{ path: '**', component: UserUploadComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class UserCenterRoutingModule {}
@@ -1,82 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {NgModule, Type} from '@angular/core';
import {NzDividerModule} from 'ng-zorro-antd/divider';
import {NzUploadModule} from 'ng-zorro-antd/upload';
import {UserCenterRoutingModule} from './user-center-routing.module';
import {UserUploadComponent} from './user-upload/user-upload.component';
import {FormsModule} from "@angular/forms";
import {CommonModule} from "@angular/common";
import {NzOptionComponent, NzSelectComponent} from "ng-zorro-antd/select";
import {NzAutosizeDirective, NzInputDirective, NzInputGroupComponent} from "ng-zorro-antd/input";
import {NzFormControlComponent, NzFormDirective, NzFormItemComponent, NzFormLabelComponent} from "ng-zorro-antd/form";
import {NzColDirective, NzRowDirective} from "ng-zorro-antd/grid";
import {NzDatePickerComponent} from "ng-zorro-antd/date-picker";
import {NzTimePickerComponent} from "ng-zorro-antd/time-picker";
import {NzInputNumberComponent} from "ng-zorro-antd/input-number";
import {NzIconDirective} from "ng-zorro-antd/icon";
import {UserAssetsComponent} from "./user-assets/user-assets.component";
import {NzPaginationComponent} from "ng-zorro-antd/pagination";
import {AssetsDetailComponent} from "./assets-detail/assets-detail.component";
import {NzDrawerComponent, NzDrawerContentDirective} from "ng-zorro-antd/drawer";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {UserStarComponent} from "./user-star/user-star.component";
import {NzTooltipDirective} from "ng-zorro-antd/tooltip";
import {NzAvatarComponent} from "ng-zorro-antd/avatar";
import {NzCardComponent, NzCardMetaComponent} from "ng-zorro-antd/card";
const COMPONENTS: Array<Type<void>> = [UserUploadComponent, UserAssetsComponent,AssetsDetailComponent,UserStarComponent];
@NgModule({
imports: [
UserCenterRoutingModule,
NzDividerModule,
NzUploadModule,
FormsModule,
CommonModule,
NzOptionComponent,
NzSelectComponent,
NzAutosizeDirective,
NzInputDirective,
NzFormItemComponent,
NzFormLabelComponent,
NzFormControlComponent,
NzColDirective,
NzDatePickerComponent,
NzTimePickerComponent,
NzInputNumberComponent,
NzFormDirective,
NzIconDirective,
NzPaginationComponent,
NzDrawerComponent,
NzButtonComponent,
NzInputGroupComponent,
NzRowDirective,
NzDrawerContentDirective,
NzTooltipDirective,
NzAvatarComponent,
NzCardComponent,
NzCardMetaComponent,
],
declarations: COMPONENTS,
providers:[...COMPONENTS],
})
export class UserCenterModule {}
@@ -1,18 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -1,226 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnDestroy, OnInit} from '@angular/core';
import {FormBuilder} from '@angular/forms';
import {NzMessageService} from 'ng-zorro-antd/message';
import {TemplateService, TemplateVO} from '../../../service/template.service';
import {CategoryService} from "../../../service/category.service";
import {StarService} from "../../../service/star.service";
import {LocalStorageService} from "../../../service/local-storage.service";
import {saveAs} from "file-saver";
// interface TemplateInfo {
// id: number;
// name: string;
// description: string;
// descriptionVersion: string;
// latest: number;
// versions: string[];
// currentVersion: string;
// user: string;
// userId: number;
// category: string;
// categoryId: number;
// download: number;
// star:number,
// create_time: string;
// update_time: string;
// off_shelf: number;
// is_del: number;
// }
@Component({
selector: 'user-upload',
templateUrl: './user-star.component.html',
styleUrls: ['./user-star.component.less'],
})
export class UserStarComponent implements OnInit,OnDestroy {
constructor(fb: FormBuilder,
private templateService: TemplateService,
private msg: NzMessageService,
private categoryService: CategoryService,
private starService: StarService,
private localStorageService: LocalStorageService,) {}
userId:number=0;
templateList: TemplateVO[] = [];
totalElements = 1;
totalPages = 1;
pageIndex=0;
pageSize = 9;
numberOfPages = 1;
newPageIndex=this.pageIndex;
newPageSize = this.pageSize;
pageSizeOptions:number[]=[9,18,27];
nameLike='';
type = 0;
allChecked = false;
indeterminate = true;
checkCategory:number[] = [1];
categoryList = [
{ label: '数据库监控模版', value: 1, checked: true },
{ label: '应用服务监控模版', value: 2, checked: false },
];
orderOption = 1;
loading = false;
ngOnInit(): void {
this.templateList=[]
const user=this.localStorageService.getData("userId");
if(user==null) this.userId=0;
else this.userId=parseInt(user);
this.categoryService.clearCategoryList();
this.categoryService.getAllCategoryByIsDel(0).subscribe(message => {
console.log('返回结果',message);
if (message.code == 0) {
this.categoryService.addCategoryList(message.data)
this.categoryList=[];
this.allChecked=true;
this.indeterminate=false;
this.categoryService.getCategoryList().forEach(item=>{
this.checkCategory.push(item.id);
this.categoryList.push({label: item.description, value: item.id, checked:true});
})
this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList));
}else{
this.msg.error('类别请求失败:'+message.msg);
}
})
this.starService.getTemplatePageByUserStar(this.userId,0,9).subscribe(message => {
if (message.code == 0) {
this.templateList=message.data.content;
// this.templateList.push(...message.data.content);
this.totalElements=message.data.totalElements;
this.totalPages=message.data.totalPages;
this.pageIndex=message.data.pageable.pageNumber;
this.pageSize=message.data.pageable.pageSize;
this.numberOfPages=message.data.numberOfElements;
this.msg.success('查询成功');
this.templateService.setTemplateSubject(this.templateList);
} else {
this.msg.error(message.msg);
}
});
}
pageIndexChange(newIndex:number){
this.newPageIndex=newIndex-1;
this.getTemplatePageByOption()
}
pageSizeChange(newSize:number){
this.newPageSize=newSize;
this.getTemplatePageByOption()
}
getTemplatePageByOption(){
this.templateService.getTemplatePageByOption(this.userId,this.allChecked,this.checkCategory,this.nameLike,this.orderOption,0,this.newPageIndex,this.newPageSize)
.subscribe(message => {
if (message.code == 0) {
this.templateList=[];
this.templateList.push(...message.data.content);
this.totalElements=message.data.totalElements;
this.totalPages=message.data.totalPages;
this.pageIndex=message.data.pageable.pageNumber;
this.pageSize=message.data.pageable.pageSize;
this.numberOfPages=message.data.numberOfElements;
this.msg.success('查询成功');
this.templateService.setTemplateSubject(this.templateList);
} else {
this.msg.error(message.msg);
}
})
}
downloadLatestTemplate(id:number,user:number,latest:number,name:string){
this.templateService.downloadLatestTemplate(user,id,latest)
.subscribe((blob:Blob)=>{
saveAs(blob, `${name}-latest.yml`);
},
error => {
console.error('下载文件时发生错误:', error);
});
}
pickTemplate(id:number){
this.templateService.setNowTemplate(id);
let nowTemplate = this.templateService.getNowTemplate();
localStorage.setItem('nowTemplate', JSON.stringify(nowTemplate));
// console.log(this.templateService.getNowTemplate());
}
starTemplate(id:number){
const formData = new FormData();
formData.append('user', this.userId.toString());
formData.append('template', id.toString());
this.starService.starTemplate(formData)
.subscribe(message=>{
if (message.code == 0) {
for (let templateVO of this.templateList) {
if(templateVO.id==id) {
templateVO.starByNowUser=true;
templateVO.star++;
break;
}
}
this.msg.success(message.msg);
}else{
this.msg.error(message.msg);
}
})
}
cancelStarTemplate(id:number){
const formData = new FormData();
formData.append('templateId', id.toString());
this.starService.cancelStarTemplate(1,formData)
.subscribe(message=>{
if (message.code == 0) {
this.msg.success(message.msg);
for (let templateVO of this.templateList) {
if(templateVO.id==id) {
templateVO.starByNowUser=false;
templateVO.star--;
break;
}
}
}else{
this.msg.error(message.msg);
}
})
}
ngOnDestroy(): void {
this.templateList=[];
this.categoryList=[];
this.templateService.clearTemplateSubject();
this.categoryService.clearCategoryList();
}
}
@@ -1,169 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<main>
<div
class="tp-breadcrumb__area fix tp-breadcrumb-height"
style="background-image: url('../../../../assets/svg/breadcrumb.svg');height: 250px"
>
<div class="container">
<div class="row">
<div class="col-12">
<div class="tp-breadcrumb__content text-center z-index-5">
<div class="tp-breadcrumb__list">
<span><a href="#">Apache </a></span>
<span class="dvdr">.</span>
<span>HertzBeat</span>
</div>
<h3 class="tp-breadcrumb__title"
><span class="p-relative z-index-5">
个人
<span class="tp-title-shape">
<img src="assets/svg/title-line.svg">
</span>
</span>
中心
</h3>
</div>
</div>
</div>
</div>
</div>
<div class="tp-service-details-area pt-xxl-4 pb-xxl-5">
<div class="container">
<div class="row">
<div class="col-lg-2">
<div class="tp-service-widget">
<div class="tp-service-widget-item mb-4">
<div class="tp-service-widget-tab">
<ul>
<li
><a href="javascript:">总览 <i class="fa-regular fa-arrow-right-long"></i></a
></li>
<li
><a href="/user-center/assets">资产 <i class="fa-regular fa-arrow-right-long"></i></a
></li>
<li
><a href="/user-center/star">收藏 <i class="fa-regular fa-arrow-right-long"></i></a
></li>
<li
><a class="active" href="javascript:">上传 <i class="fa-regular fa-arrow-right-long"></i></a
></li>
<li
><a href="javascript:">通知 <i class="fa-regular fa-arrow-right-long"></i></a
></li>
<li
><a href="javascript:">设置 <i class="fa-regular fa-arrow-right-long"></i></a
></li>
</ul>
</div>
</div>
</div>
</div>
<div class="col-lg-10">
<div class="tp-service-contact-form"
style="background-image: url('../../../../assets/svg/upload-bg.svg')">
<h6>新建模版</h6>
<span>按照规定格式上传自定义模版吧!</span>
<form nz-form>
<nz-form-item>
<nz-form-label [nzSpan]="2">模版名称</nz-form-label>
<nz-form-control
[nzValidateStatus]="error"
[nzSpan]="24"
nzErrorTip="不能具备特殊字符"
>
<input nz-input [(ngModel)]="templateInfo.name" name="name" />
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="2">模版类别</nz-form-label>
<nz-form-control [nzValidateStatus]="error" [nzSpan]="24">
<nz-select nzShowSearch nzAllowClear nzPlaceHolder="请选择模版类别"
nzSize="large" [(ngModel)]="templateInfo.categoryId" name="categorySelect">
<nz-option *ngFor="let temp of categoryList" [nzLabel]="temp.label" [nzValue]=temp.value></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="2">模版标签</nz-form-label>
<nz-form-control
[nzSpan]="24"
[nzValidateStatus]="error"
>
<input nz-input disabled [ngModel]="'该功能开发中'" name="tag" />
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="2">首版版本号</nz-form-label>
<nz-form-control [nzSpan]="24" [nzValidateStatus]="error">
<input nz-input [(ngModel)]="templateInfo.currentVersion" name="currentVersion" />
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="2">模版描述</nz-form-label>
<nz-form-control
[nzSpan]="24"
>
<textarea nz-input placeholder="请对该模版进行简单描述" [nzAutosize]="{ minRows: 3, maxRows: 5 }"
[(ngModel)]="templateInfo.description" name="description"></textarea>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="2">首版描述</nz-form-label>
<nz-form-control
[nzSpan]="24"
>
<textarea nz-input placeholder="请对该模版进行简单描述" [nzAutosize]="{ minRows: 3, maxRows: 5 }"
[(ngModel)]="templateInfo.descriptionVersion" name="descriptionVersion"></textarea>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="2">首版文件</nz-form-label>
<nz-form-control [nzSpan]="48">
<nz-upload
nzType="drag"
nzAccept=".yml"
[nzAction]="'template/localFileUpload'"
[nzLimit]="1"
[nzMultiple]="true"
[(nzFileList)]="fileList"
(nzChange)="handleChange($event)"
[nzBeforeUpload]="beforeUpload"
[nzShowUploadList]="true"
>
<p class="ant-upload-drag-icon">
<span nz-icon nzType="inbox"></span>
</p>
<p class="ant-upload-text">点击该区域上传文件</p>
</nz-upload>
</nz-form-control>
</nz-form-item>
<div class="tp-service-contact-btn mt-4 z-index-5">
<button type="button" class="tp-main-btn w-100" (click)="uploadTemplate()">上传</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</main>
@@ -1,18 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -1,211 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Component, OnDestroy, OnInit} from '@angular/core';
import {FormBuilder} from '@angular/forms';
import {NzMessageService} from 'ng-zorro-antd/message';
import {NzUploadChangeParam, NzUploadFile} from 'ng-zorro-antd/upload';
import {finalize, window} from 'rxjs';
import {TemplateService} from '../../../service/template.service';
import {CategoryService} from "../../../service/category.service";
import {LocalStorageService} from "../../../service/local-storage.service";
interface TemplateInfo {
id: number;
name: string;
description: string;
descriptionVersion: string;
latest: number;
versions: string[];
currentVersion: string;
user: string;
userId: number;
category: string;
categoryId: number;
download: number;
star:number,
create_time: string;
update_time: string;
off_shelf: number;
is_del: number;
}
@Component({
selector: 'user-upload',
templateUrl: './user-upload.component.html',
styleUrls: ['./user-upload.component.less'],
})
export class UserUploadComponent implements OnInit,OnDestroy {
constructor(fb: FormBuilder,
private templateService: TemplateService,
private msg: NzMessageService,
private categoryService: CategoryService,
private localStorageService: LocalStorageService,) {}
userId:number=0;
error = 'success';
type = 0;
loading = false;
count = 0;
interval$: any;
fileList: NzUploadFile[] = [];
file: any[] = [];
uniqueFile:any=null;
templateInfo = {
id: 0,
name: '',
description: '模版描述',
descriptionVersion: '首版描述',
latest: 0,
currentVersion: 'v1.0.0',
user: 'user',
userId: 1,
category: '',
categoryId: 0,
download: 0,
star:0,
create_time: '2024',
update_time: '2024',
off_shelf: 0,
is_del: 0
} as TemplateInfo;
categoryList = [
{ label: '数据库监控模版', value: 1, checked: true },
{ label: '应用服务监控模版', value: 2, checked: false },
];
ngOnInit(): void {
const user=this.localStorageService.getData("userId");
const userName=this.localStorageService.getData("userInfo");
if(user==null) this.userId=0;
else this.userId=parseInt(user);
this.templateInfo.userId=this.userId;
this.templateInfo.user=userName==null?'user':userName;
this.categoryList=[];
this.categoryService.clearCategoryList();
this.categoryService.getAllCategoryByIsDel(0).subscribe(message => {
if (message.code == 0) {
for (const item of message.data) {
this.categoryList.push({label: item.description, value: item.id, checked:true});
}
this.localStorageService.putData('categoryList',JSON.stringify(this.categoryList));
}else{
this.msg.error('类别请求失败:'+message.msg);
}
})
}
getCategoryStr(value:number):string{
for (const item of this.categoryList) {
if(item.value==value){
return item.label;
}
}
return ' '
}
ngOnDestroy(): void {
if (this.interval$) {
clearInterval(this.interval$);
}
}
handleChange(info: NzUploadChangeParam) {
if (info.file.status !== 'uploading') {
const isLt4M = info.file.size! / 1024 / 1024 < 4;
if (!isLt4M) {
// this.message.error('Message.File.SizeFile');
console.log('error:文件超过4M');
}
// this.file = this.file.concat(info.file);
}
if (info.file.status === 'done') {
this.file.pop();
this.fileList.reverse()
if(this.fileList.length > 1) {
this.fileList.pop()
}
// this.msg.success(`${info.file.name} file uploaded successfully`);
} else if (info.file.status === 'error') {
this.fileList=[];
// this.msg.error(`${info.file.name} file upload failed.`);
}
}
beforeUpload = (file: any) => {
this.file.push(file);
this.uniqueFile=file;
this.fileList=[]
return true;
};
uploadTemplate(): void {
console.log('ss',this.file, this.fileList);
console.log(this.uniqueFile)
if(this.uniqueFile==null){
this.msg.error("文件为空");
return;
}
const formData = new FormData();
if (this.uniqueFile != null) {
formData.append('file', this.uniqueFile);
this.templateInfo.category=this.getCategoryStr(this.templateInfo.categoryId)
formData.append('templateDto', JSON.stringify(this.templateInfo));
const uploadTemplateRes$ = this.templateService
.upload(formData)
.pipe(
finalize(() => {
uploadTemplateRes$.unsubscribe();
// this.tableLoading = false;
})
)
.subscribe(
message => {
console.log('message', message);
if (message.code === 0) {
// this.notifySvc.success(this.i18nSvc.fanyi('common.notify.edit-success'), '');
this.msg.success(`模版文件上传成功`);
this.fileList=[]
} else {
this.msg.error(`模版上传失败:${message.msg}`);
// this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), message.msg);
}
// this.loadAlertConvergeTable();
// this.tableLoading = false;
},
error => {
console.log('err', error);
// this.tableLoading = false;
// this.notifySvc.error(this.i18nSvc.fanyi('common.notify.edit-fail'), error.msg);
this.msg.error(`模版上传失败`, error.msg);
}
);
}
}
protected readonly window = window;
}
@@ -1,60 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {HttpClient} from '@angular/common/http';
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs';
import {Message} from '../pojo/Message';
const auth_login_uri = '/auth/login';
const auth_refresh_uri = '/auth/refresh';
const auth_register_uri = '/auth/register';
export interface LoginDTO {
type:number,
identifier:string,
credential:string,
}
export interface SignUpDTO {
name:string,
email:string,
password:string,
}
@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor(private http: HttpClient) {}
public tryLogin(data: LoginDTO): Observable<Message<any>> {
return this.http.post<Message<any>>(auth_login_uri,data);
}
public register(data:SignUpDTO): Observable<Message<any>> {
return this.http.post<Message<any>>(auth_register_uri,data);
}
public refreshToken(refreshToken: string): Observable<Message<any>> {
return this.http.post<Message<any>>(auth_refresh_uri, {"token":refreshToken});
}
}
@@ -1,57 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Injectable, Optional} from '@angular/core';
import {BehaviorSubject, Observable} from 'rxjs';
import {Message} from '../pojo/Message';
const category_uri = '/category/all';
@Injectable({
providedIn: 'root'
})
export class CategoryService {
constructor(@Optional() private http: HttpClient) {}
private categorySubject = new BehaviorSubject<any[]>([]);
addCategoryList(arr: any[]) {
const currentData = this.categorySubject.getValue();
this.categorySubject.next([...currentData, ...arr]);
}
clearCategoryList() {
this.categorySubject.next([]);
}
getCategoryList() {
return this.categorySubject.getValue();
}
public getAllCategoryByIsDel(isDel: number): Observable<Message<any>> {
if(this.http==null){
console.log('http注册失败,为null')
}
return this.http.get<Message<any>>(category_uri+'/'+isDel,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
}
@@ -1,35 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class DataService {
private isLoginMessageSource = new BehaviorSubject(false);
isLoginMsg = this.isLoginMessageSource.asObservable();
constructor() { }
sendLoginMsg(message: boolean) {
this.isLoginMessageSource.next(message)
}
}
@@ -1,63 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Injectable } from '@angular/core';
const AuthorizationConst = 'Authorization';
const RefreshTokenConst = 'refresh-token';
@Injectable({
providedIn: 'root'
})
export class LocalStorageService {
constructor() {}
public putData(key: string, value: string) {
localStorage.setItem(key, value);
}
public removeData(key: string) {
localStorage.removeItem(key);
}
public getData(key: string): string | null {
const data = localStorage.getItem(key);
return data === null ? null : data;
}
public getAuthorizationToken(): string | null {
return this.getData(AuthorizationConst);
}
public getRefreshToken(): string | null {
return this.getData(RefreshTokenConst);
}
public storageRefreshToken(token: string) {
return this.putData(RefreshTokenConst, token);
}
public storageAuthorizationToken(token: string) {
return this.putData(AuthorizationConst, token);
}
public hasAuthorizationToken() {
return localStorage.getItem(AuthorizationConst) != null;
}
}
@@ -1,58 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Injectable, Optional} from '@angular/core';
import {BehaviorSubject, Observable} from 'rxjs';
import {Message} from '../pojo/Message';
const template_star_uri = '/template/star';
const star_page_user_uri='/star/page/user';
const star_user_uri='/star';
const star_isStar_uri='/star/isStar';
const star_cancel_uri='/star/cancel';
@Injectable({
providedIn: 'root'
})
export class StarService {
constructor(@Optional() private http: HttpClient) {}
public getTemplatePageByUserStar(userId: number, page:number, size:number): Observable<Message<any>> {
return this.http.get<Message<any>>(star_page_user_uri+'/'+userId+'?page='+page+'&size='+size);
}
public getTemplateIdsByUser(userId: number): Observable<Message<any>> {
return this.http.get<Message<any>>(star_user_uri+'/'+userId);
}
public assertTemplateStarByUser(userId: number,template:number): Observable<Message<any>> {
return this.http.get<Message<any>>(star_isStar_uri+'/'+userId+'/'+template);
}
public cancelStarTemplate(userId: number, data:FormData): Observable<Message<any>> {
return this.http.post<Message<any>>(star_cancel_uri+'/'+userId,data);
}
public starTemplate(data:FormData): Observable<Message<any>> {
return this.http.post<Message<any>>(template_star_uri,data);
}
}
@@ -1,166 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Injectable, Optional} from '@angular/core';
import {BehaviorSubject, Observable} from 'rxjs';
import {Message} from '../pojo/Message';
export interface TemplateVO {
id: number;
name: string;
description: string;
latest: number;
user: number;
categoryId: number;
tag:number;
download: number;
star:number,
create_time: string;
update_time: string;
off_shelf: number;
isDel: number;
starByNowUser:boolean;
}
const template_count_uri = '/template/count';
const template_upload_uri = '/template/upload';
const template_page_uri = '/template/page';
const template_page_name_uri='/template/page/name';
const template_page_option_uri='/template/page/option';
const template_page_order_uri='/template/page/order';
const template_page_user_uri='/template/page/user';
const template_download_uri = '/template/download/';
const template_download_latest_uri = '/template/download/latest/';
const template_page_category_uri = '/template/page/category';
@Injectable({
providedIn: 'root'
})
export class TemplateService {
constructor(@Optional() private http: HttpClient) {}
private templateSubject = new BehaviorSubject<any[]>([]);
private nowTemplateSubject=new BehaviorSubject<any>('');
setNowTemplate(id:number){
console.log(this.getTemplateById(id));
this.nowTemplateSubject.next(this.getTemplateById(id));
}
getNowTemplate(){
return this.nowTemplateSubject.value;
}
setTemplateSubject(item: any[]) {
this.clearTemplateSubject();
this.templateSubject.next([...item]);
}
clearTemplateSubject(){
this.templateSubject.next([]);
}
getTemplateById(id:number) {
for (const item of this.templateSubject.getValue()) {
if (item.id === id) {
return item;
}
}
return null;
}
public upload(data: FormData): Observable<Message<any>> {
return this.http.post<Message<any>>(template_upload_uri, data);
}
public getTemplatePage(isDel: number, userId:number, page:number, size:number): Observable<Message<any>> {
return this.http.get<Message<any>>(template_page_uri+'/'+isDel+'/'+userId+'?page='+page+'&size='+size,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
public getTemplatePageByUser(userId: number, page:number, size:number): Observable<Message<any>> {
return this.http.get<Message<any>>(template_page_user_uri+'/'+userId+'?page='+page+'&size='+size,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
public getTemplatePageByOption(userId:number, allCategory:boolean,category: number[],nameLike:string,orderOption:number,
isDel: number, page:number, size:number): Observable<Message<any>> {
var categoryStr='';
for (const id of category) {
categoryStr+=id+'_';
}
categoryStr=categoryStr.substring(0,categoryStr.length-1);
if(page<0){
page=0;
}
if(nameLike!=''){
if(allCategory){
return this.http.get<Message<any>>(template_page_name_uri+'/'+nameLike+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'&category='+category,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
else if(!allCategory){
return this.http.get<Message<any>>(template_page_option_uri+'/'+nameLike+'/'+categoryStr+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'&category='+category,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
else{
return this.http.get<Message<any>>(template_page_option_uri+'/'+nameLike+'/'+categoryStr+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'&category='+category,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
}
else{
if(allCategory){
return this.http.get<Message<any>>(
template_page_order_uri+'/'+orderOption+'/'+isDel+'/'+userId+'?page='+page+'&size='+size+'',
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
else if(!allCategory&&category.length>0){
return this.http.get<Message<any>>(
template_page_category_uri+'/'+categoryStr+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'',
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
else{
return this.http.get<Message<any>>(
template_page_category_uri+'/'+'_'+'/'+isDel+'/'+orderOption+'/'+userId+'?page='+page+'&size='+size+'',
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
}
}
public getTemplateCount(isDel:number, offshelf:number): Observable<any> {
return this.http.get<Message<number>>(`${template_count_uri}/${isDel}/${offshelf}`);
}
public downloadTemplate(ownerId: number, templateId: number, version: string, versionId:number): Observable<any> {
const httpOptions: Object = {
responseType: 'blob'
};
return this.http.get<Blob>(`${template_download_uri + ownerId}/${templateId}/${version}/${versionId}`,
httpOptions);
}
public downloadLatestTemplate(user: number, templateId: number, latest: number): Observable<any> {
const httpOptions: Object = {
responseType: 'blob'
};
return this.http.get<Blob>(`${template_download_latest_uri + user}/${templateId}/${latest}`, httpOptions);
}
}
@@ -1,55 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {Injectable, Optional} from '@angular/core';
import {Observable} from 'rxjs';
import {Message} from '../pojo/Message';
const template_upload_uri = '/template/upload';
const version_page_uri = '/version/page';
const version_get_uri = '/version/get';
const share_uri='/share/getShareURL';
@Injectable({
providedIn: 'root'
})
export class VersionService {
constructor(@Optional() private http: HttpClient) {}
public upload(data: FormData): Observable<Message<any>> {
return this.http.post<Message<any>>(template_upload_uri, data);
}
public getVersion(id: number): Observable<Message<any>> {
return this.http.get<Message<any>>(version_get_uri+'/'+id);
}
public getVersionPage(templateId :number, isDel: number, page:number, size:number): Observable<Message<any>> {
return this.http.get<Message<any>>(version_page_uri+'/'+templateId+'/'+isDel+'?page='+page+'&size='+size,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
public shareVersion(versionId:number): Observable<Message<any>> {
return this.http.get<Message<any>>(share_uri+'/'+versionId,
{headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json'});
}
}
@@ -1,22 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
export const CONSTANTS = {
VERSION: 'v1.6.0'
};
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.1 KiB

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1730129285495" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15074" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M614.318657 0H411.286337L309.924677 176.10441l101.36166 176.10341H614.319657L715.679318 176.10441z m-34.811883 292.312021H445.688222L378.830446 176.10441l66.857776-116.208611h133.819552l66.856776 116.208611z m340.023861 207.537305H716.704314l-101.25966 175.899411 101.25966 176.308409h200.26733l76.174744-127.879572 27.746907-48.429837z m22.422925 193.714351l-58.769803 98.49467H751.209199l-66.755777-116.30961 66.755777-116.209611h133.819551l67.164776 116.209611z m-564.148111 30.715897l27.542908-48.531837-101.259661-176.001411H101.261376L0.001715 675.747737l101.259661 176.10441h200.267329z m-242.039189 67.779773L69.008484 675.747737l66.755776-116.207611H269.380813l66.857776 116.207611-10.238966 17.71294-58.666803 98.49567zM615.136655 802.297313a18.121939 18.121939 0 0 0-21.296929-8.599972 282.790053 282.790053 0 0 1-84.263718 12.592958 287.295038 287.295038 0 0 1-83.034722-12.081959 18.121939 18.121939 0 0 0-10.238965 34.709883 322.720919 322.720919 0 0 0 93.683686 13.821954 317.396937 317.396937 0 0 0 95.116681-14.436951 18.224939 18.224939 0 0 0 10.033967-26.517912z m106.788642 149.1765a18.429938 18.429938 0 0 0-24.469918-6.654978 435.550541 435.550541 0 0 1-376.576739 0 17.81494 17.81494 0 0 0-24.981916 6.347979v0.716998a17.81494 17.81494 0 0 0 6.347979 24.059919l6.449978 3.173989a472.921416 472.921416 0 0 0 399.305662 1.330996l7.780974-3.582988a18.633938 18.633938 0 0 0 6.14398-25.391915z m-0.921997-672.061749a18.224939 18.224939 0 0 0 2.96999 22.421925 289.957029 289.957029 0 0 1 81.089728 146.821508 18.121939 18.121939 0 1 0 35.424882-7.371975 324.256914 324.256914 0 0 0-33.06989-88.972702 320.365927 320.365927 0 0 0-58.462804-76.687743 18.121939 18.121939 0 0 0-27.951906 3.788987z m79.144735-165.968444a18.429938 18.429938 0 0 0 5.93798 24.572918 437.700534 437.700534 0 0 1 181.223393 331.013891 18.01994 18.01994 0 0 0 17.712941 18.941936h0.819997a17.91794 17.91794 0 0 0 18.019939-16.995943v-7.167976a476.095405 476.095405 0 0 0-192.077356-352.20782c-2.251992-1.739994-4.504985-3.275989-6.859977-4.913983a18.224939 18.224939 0 0 0-24.776917 6.756977zM199.245048 460.738457a18.224939 18.224939 0 0 0 15.766947-15.971947 289.44503 289.44503 0 0 1 66.653777-153.579485 18.326939 18.326939 0 0 0 1.023996-22.319926 18.01994 18.01994 0 0 0-28.360905-1.330995 327.635903 327.635903 0 0 0-49.554834 80.57773 321.389923 321.389923 0 0 0-24.879917 93.170688 17.91794 17.91794 0 0 0 19.350936 19.453935zM22.42464 499.028328a18.633938 18.633938 0 0 0 15.869947-19.657934 437.598534 437.598534 0 0 1 151.223493-346.26884 18.01994 18.01994 0 0 0 4.197986-25.596914v-0.716998a17.81494 17.81494 0 0 0-24.572918-3.787987l-5.527981 4.606985A476.300405 476.300405 0 0 0 1.844709 474.76441v8.599971a17.91794 17.91794 0 0 0 20.579931 15.664947z" fill="#0091FF" p-id="15075"></path></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1730129120871" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="26355" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M734.55 958.642c-8.92 7.075-17.596 9.65-26.331 11.97-29.26 7.77-59.262 11.006-89.31 12.8-36.894 2.206-73.877 3.857-110.828 3.979-52.548 0.17-105.076-2.068-157.183-9.542-14.54-2.086-28.854-5.96-43.121-9.608-4.68-1.197-8.879-4.263-13.297-6.475l0.039-1.995c3.269-1.666 6.37-3.934 9.835-4.896 16.514-4.584 33.14-8.764 49.7-13.183 7.797-2.081 15.703-3.917 23.272-6.657 25.706-9.31 39.178-28.68 42.117-55.065 2.053-18.432 2.273-37.082 2.939-55.647 0.411-11.5 0.098-11.51-11.558-11.51-90.01 0.001-180.022 0.052-270.033-0.041-18.044-0.02-35.893-1.801-53.185-7.532-29.098-9.648-45.89-30.241-51.496-59.69-2.778-14.601-4.365-29.664-4.388-44.522-0.286-187.912-0.218-375.824-0.137-563.736 0.008-18.217 1.314-36.326 7.147-53.849 9.396-28.227 29.064-45.242 57.587-51.658 12.126-2.726 24.786-3.095 37.214-4.443 2.199-0.24 4.446-0.03 6.671-0.035 214.147-0.446 428.294-0.992 642.441-1.25 40.394-0.05 80.81 0.43 121.176 1.863 23.697 0.84 45.85 7.633 63.176 25.38 14.369 14.717 21.044 33.029 23.097 52.888 1.697 16.415 2.284 33.009 2.297 49.525 0.153 174.359 0.161 348.718 0.006 523.077-0.02 20.964 0.83 41.966-3.716 62.8-8.5 38.966-33.794 63.296-73.402 68.702-11.179 1.525-22.541 2.39-33.82 2.414-89.202 0.191-178.404 0.169-267.607-0.034-6.032-0.016-8.468 1.756-9.785 7.641-3.78 16.865-6.653 33.743-4.377 51.067 3.798 28.888 20.722 47.906 45.959 60.541 20.776 10.405 43.144 15.928 65.582 21.219l23.32 5.502zM903.574 636.58v-6.17c0-169.508-0.033-339.016 0.136-508.523 0.006-6.19-2.18-7.162-7.686-7.16-255.679 0.124-511.356 0.108-767.034 0.11-8.224 0-8.23 0.007-8.23 8.19l-0.002 506.703v6.85h782.816z" p-id="26356" fill="#1296db"></path><path d="M265.493 387.607c0.792-32.67 8.11-63.154 27.95-89.562 24.382-32.451 57.926-47.38 97.853-49.024 26.832-1.106 52.396 3.726 75.453 18.203 29.132 18.291 45.493 45.49 52.192 78.518 7.359 36.294 5.524 72.107-10.345 106.174-17.094 36.695-45.623 59.478-85.428 67.648-31.731 6.51-62.44 3.522-91.246-11.82-35.49-18.903-55.009-49.605-62.67-88.307-2.066-10.45-2.548-21.212-3.76-31.83z m198.846-1.825c0.346-16.533-1.834-32.656-8.117-48.05-9.59-23.498-26.106-38.864-51.97-41.687-27.17-2.966-49.449 6.956-63.405 30.469-21.474 36.18-21.773 74.334-4.228 112.011 11.557 24.814 33.178 35.697 60.083 35.383 27.186-0.32 47.046-12.97 58.422-37.905 7.259-15.904 9.636-32.84 9.215-50.221z m152.31-70.271c12.084 22.908 27.609 41.113 51.98 51.006 13.38 5.433 26.174 12.685 38.442 20.378 10.524 6.6 18.518 16.18 24.053 27.564 6.253 12.863 7.644 26.488 2.277 39.455-13.172 31.815-34.913 55.935-69.363 64.046-16.035 3.776-33.31 2.902-50.026 2.964-11.23 0.041-22.724-0.835-33.644-3.309-19.672-4.449-28.233-18.613-25.024-38.58 2.26-14.065 2.33-13.767 16.273-11.287 20.268 3.605 40.586 7.066 61.002 9.652 16.137 2.045 28.356-5.98 38.17-18.087 4.694-5.79 3.007-11.746-0.115-17.563-8.191-15.263-20.959-25.334-36.455-32.465-13.568-6.244-27.41-12.067-40.371-19.414-17.24-9.776-30.599-23.801-35.318-43.601-9.413-39.495 4.868-80.21 56.205-90.848 14.941-3.097 30.414-4.097 45.705-4.903 13.47-0.707 27.12-0.728 40.517 0.63 16.615 1.683 25.14 12.239 24.663 28.85-0.178 6.187-0.032 13.702-3.342 18.15-4.127 5.548-11.303 0.123-17.097-0.602-10.013-1.254-19.918-3.349-29.92-4.728-11.81-1.63-22.964 0.737-33.187 6.873-8.626 5.18-17.095 10.621-25.426 15.819z" p-id="26357" fill="#1296db"></path></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1730128991635" class="icon" viewBox="0 0 1042 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="19230" xmlns:xlink="http://www.w3.org/1999/xlink" width="203.515625" height="200"><path d="M271.725714 0L18.285714 146.322286v292.662857l253.44 146.322286 253.44-146.322286V146.322286z" fill="#FFA552" p-id="19231"></path><path d="M778.605714 0L525.165714 146.322286v292.662857l253.44 146.322286 253.476572-146.322286V146.322286z" fill="#C3C5C6" p-id="19232"></path><path d="M271.725714 584.905143v292.662857l253.44 146.322286 253.44-146.322286V584.905143l-253.44-146.340572z" fill="#FA6400" p-id="19233"></path><path d="M778.276571 584.685714L525.165714 730.806857 272.091429 584.685714V292.461714l253.074285-146.139428 253.110857 146.139428z" fill="#181818" p-id="19234"></path><path d="M488.594286 501.924571a73.142857 73.142857 0 1 0 73.142857-126.72 73.142857 73.142857 0 0 0-73.142857 126.72M235.154286 229.302857a73.142857 73.142857 0 0 1 73.142857 126.665143 73.142857 73.142857 0 0 1-73.142857-126.665143m616.612571 63.323429a73.142857 73.142857 0 1 1-146.285714 0 73.142857 73.142857 0 0 1 146.285714 0m-363.154286 501.906285a73.142857 73.142857 0 0 0 73.142858-126.646857 73.142857 73.142857 0 0 0-73.142858 126.646857" fill="#FFFFFF" p-id="19235"></path></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1730128825641" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9495" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M622.250667 128c9.258667 0 12.629333 0.981333 16 2.773333 3.413333 1.792 6.016 4.437333 7.850666 7.850667 1.792 3.370667 2.773333 6.698667 2.773334 15.957333v160.170667c0 2.048-0.085333 3.797333-0.170667 5.290667l79.914667-0.042667c9.258667 0 12.586667 0.981333 15.957333 2.773333 3.413333 1.792 6.058667 4.437333 7.850667 7.850667 1.792 3.370667 2.773333 6.698667 2.773333 15.957333v74.837334c0 9.258667-0.981333 12.586667-2.773333 15.957333a18.858667 18.858667 0 0 1-7.850667 7.850667c-3.370667 1.792-6.698667 2.773333-15.957333 2.773333H227.114667c-9.258667 0-12.586667-0.981333-15.957334-2.773333a18.858667 18.858667 0 0 1-7.850666-7.850667c-1.792-3.370667-2.773333-6.698667-2.773334-15.957333V346.581333c0-9.258667 0.981333-12.586667 2.773334-15.957333a18.858667 18.858667 0 0 1 7.850666-7.850667c3.370667-1.792 6.698667-2.773333 15.957334-2.773333H307.2V231.381333c0-9.258667 0.981333-12.586667 2.773333-15.957333a18.858667 18.858667 0 0 1 7.850667-7.850667c3.370667-1.792 6.698667-2.773333 15.957333-2.773333h187.050667V154.581333c0-9.258667 0.981333-12.586667 2.773333-15.957333a18.858667 18.858667 0 0 1 7.850667-7.850667c3.413333-1.792 6.741333-2.773333 16-2.773333h74.794667z" fill="#496AAC" p-id="9496"></path><path d="M800 320a106.666667 106.666667 0 0 1 85.333333 170.709333l117.333334-0.042666a106.666667 106.666667 0 0 1-160.512 92.117333A384.042667 384.042667 0 0 1 85.333333 490.666667h714.666667z" fill="#4B95F9" p-id="9497"></path><path d="M85.376 494.592l1.28 0.341333c166.997333 44.757333 274.602667 198.741333 262.058667 360.32A384 384 0 0 1 85.333333 490.666667l0.042667 3.925333z" fill="#C2DBFC" p-id="9498"></path></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

@@ -1,226 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1920px" height="378px" viewBox="0 0 1920 378" enable-background="new 0 0 1920 378" xml:space="preserve"> <image id="image0" width="1920" height="378" x="0" y="0"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB4AAAAF6CAMAAADPpbWxAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo
AAB1MAAA6mAAADqYAAAXcJy6UTwAAAEIUExURf33+/z2+vz1/fv0/Prz+/zy+/zz+Prx9vvy9/30
+f71+v/2+//3/Pny+vjx+ffw+Pbv9/nw9fvu9fvu+Prt9Pns8/nq8fjp8Pvs8/zv9vr0+P32/vrw
+fjv9Pnv+Pju9/ft9vvx+v3z/Pfu8/70/fzv+f3w+v7x+//y/P/z/frt9/ns9vjr9fbs9fXr9Pv1
+fnt9/rq9fnp9Pvr9vru+Pvv+fzs9/zw+v3t+Pfq8fjr8vjn7/fq9P3w9/Xo8vfo7/bp8//y+f/z
+vno8P7x+Pbp8Prr8vzt9P7v9v/x+Pnu9Pvq8vrp8fzo8f3u9f/w9/rv9fvn8Pjs9v74/Pr4+//5
/f/6/v///01wsegAAAABYktHRFd9CtkfAAAAB3RJTUUH6AoYCA4WjZqd+QAAK3dJREFUeNrt3X1j
HFd1gHESkGM5JWC9pFKi2JZBkpFMaaCl1RIXQhIFKIW2afj+H6U7uzs4utqr+3bOPWdGz/NHqaPd
2dl7Z8/Psr2r732vsneMenfT9zP7QWM7lT0Keu9Ojx/tPnn/H37wwx9+8MGPfvTj8b8+3bQXtB8U
fv2gskPhPlTuH53U+jyONoX/XXo/xmqvj71IqesxvNqPN4X//VGk0tfbR0Glr/PU/Ih9fZxHVvNw
rHaO00QDYBGA31+e4EDwBwAMwAAMwABMWQGwAMC7T568uzlHAAZgAAZgAKasALgZ4EHg3fH5ADAA
AzAAAzBlBcCNAD9etvzvw3P5eBkAAzAAAzAAU1YA3Abw402r1zAAAzAAAzAAU24A3A7w8L+r1/aS
YAAGYAAGYACmrAC4GeDV//7wh2uBARiAARiAAZiysr7gxlIgewU4bHgGwzuSNv6+Fxt03gDWBtcb
vFoQ94K3FOi9ysLr+2TTcdCjRKUAj6/bUohzf0PfCnEr2NJzW9sDW6VmnDW8cwP447XAPwi/AwZg
AAZgAAZgupU1vLMD+OMVwd8f/xwagAEYgAEYgGlr1vDOEOCPh+ex/qthAAZgAAZgAKZI1vDODeDx
eTx6NBAMwAAMwAAMwBTJGt65AbwZAu/u7g4CAzAAAzAAAzBFsoZ3bgB/8MEHq3ckPXmyFBiAARiA
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
gg==" />
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

@@ -1,24 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="16" height="13" viewBox="0 0 16 13" style="fill: #b02a37" xmlns="http://www.w3.org/2000/svg">
<path
d="M13.6048 1.52734C12.0189 0.1875 9.5853 0.378906 8.0814 1.9375C6.55015 0.378906 4.11655 0.1875 2.53062 1.52734C0.479836 3.25 0.780617 6.06641 2.25718 7.57031L7.04234 12.4648C7.31577 12.7383 7.67124 12.9023 8.0814 12.9023C8.46421 12.9023 8.81968 12.7383 9.09312 12.4648L13.9056 7.57031C15.3548 6.06641 15.6556 3.25 13.6048 1.52734ZM12.9486 6.64062L8.16343 11.5352C8.10874 11.5898 8.05405 11.5898 7.97202 11.5352L3.18687 6.64062C2.17515 5.62891 1.98374 3.71484 3.37827 2.53906C4.44468 1.63672 6.0853 1.77344 7.12437 2.8125L8.0814 3.79688L9.03843 2.8125C10.0501 1.77344 11.6908 1.63672 12.7572 2.51172C14.1517 3.71484 13.9603 5.62891 12.9486 6.64062Z"
style="fill: #b02a37"
/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 110 KiB

@@ -1,36 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="14" height="12" viewBox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8.79673 4.85355L12.0361 1.70712V3C12.0361 3.27614 12.2666 3.49999 12.5509 3.49999C12.8352 3.49999 13.0656 3.27614 13.0656 3V0.500039C13.0656 0.483562 13.0648 0.467086 13.0631 0.450656C13.0623 0.44325 13.0609 0.436078 13.0598 0.428789C13.0585 0.419953 13.0575 0.411094 13.0557 0.402305C13.054 0.393914 13.0516 0.385781 13.0495 0.377555C13.0475 0.369984 13.0458 0.362367 13.0434 0.354867C13.0409 0.346781 13.0378 0.338977 13.0349 0.331078C13.0321 0.323602 13.0296 0.316055 13.0264 0.308672C13.0233 0.301289 13.0196 0.294234 13.0161 0.287039C13.0124 0.279445 13.0089 0.271781 13.0048 0.264328C13.001 0.257437 12.9967 0.250875 12.9926 0.244172C12.9881 0.236883 12.9838 0.2295 12.9789 0.222375C12.9739 0.214969 12.9682 0.208008 12.9627 0.200883C12.9581 0.194953 12.9539 0.188859 12.949 0.18307C12.9383 0.170437 12.927 0.158273 12.9151 0.146719C12.9151 0.146625 12.915 0.146531 12.9149 0.146437C12.9148 0.146344 12.9147 0.146297 12.9146 0.146203C12.9027 0.134648 12.8902 0.123703 12.8772 0.11332C12.8712 0.108562 12.8649 0.104437 12.8588 0.0999844C12.8515 0.0946641 12.8443 0.0891562 12.8367 0.0842109C12.8294 0.0794531 12.8218 0.0753281 12.8142 0.0709688C12.8073 0.0669609 12.8006 0.0627656 12.7935 0.0590625C12.7858 0.0550781 12.778 0.0517031 12.7701 0.0481172C12.7627 0.0447187 12.7554 0.0411328 12.7479 0.0380625C12.7403 0.0350156 12.7325 0.0325313 12.7248 0.0298594C12.7166 0.0270234 12.7086 0.024 12.7003 0.0215625C12.6926 0.0192891 12.6847 0.017625 12.6769 0.0157266C12.6685 0.0136406 12.6601 0.0113438 12.6515 0.00967969C12.6424 0.00794531 12.6333 0.00689062 12.6242 0.005625C12.6167 0.00459375 12.6093 0.0031875 12.6017 0.00246094C12.5848 0.000867187 12.5678 0 12.5509 0H9.97704C9.69274 0 9.46228 0.223852 9.46228 0.499992C9.46228 0.776133 9.69274 0.999984 9.97704 0.999984H11.3081L8.06874 4.14645C7.86771 4.3417 7.86771 4.6583 8.06874 4.85355C8.26976 5.04881 8.59571 5.04881 8.79673 4.85355Z"
fill="currentcolor"
/>
<path
d="M4.97985 7.14644L1.74048 10.2929V9C1.74048 8.72386 1.51002 8.50001 1.22572 8.50001C0.941401 8.50001 0.710938 8.72386 0.710938 9V11.5C0.710938 11.5165 0.71183 11.5329 0.713495 11.5493C0.714243 11.5567 0.715667 11.5639 0.716753 11.5712C0.718056 11.58 0.719117 11.5889 0.720927 11.5977C0.72264 11.6061 0.725005 11.6142 0.727153 11.6224C0.729107 11.63 0.73082 11.6376 0.733161 11.6451C0.73567 11.6532 0.738783 11.661 0.741703 11.6689C0.744478 11.6764 0.747011 11.6839 0.750148 11.6913C0.753285 11.6987 0.757001 11.7057 0.7605 11.7129C0.764192 11.7205 0.767667 11.7282 0.771769 11.7356C0.775581 11.7425 0.7799 11.7491 0.784027 11.7558C0.788515 11.7631 0.792761 11.7705 0.79766 11.7776C0.802751 11.785 0.808422 11.7919 0.813899 11.7991C0.818484 11.805 0.822731 11.8111 0.827629 11.8169C0.838318 11.8296 0.849587 11.8417 0.861483 11.8533C0.86158 11.8534 0.861628 11.8535 0.861724 11.8535C0.861821 11.8536 0.861917 11.8537 0.862014 11.8538C0.87391 11.8653 0.886433 11.8763 0.899439 11.8867C0.905399 11.8914 0.911673 11.8955 0.917778 11.9C0.925113 11.9053 0.93228 11.9108 0.939905 11.9158C0.947216 11.9205 0.954817 11.9246 0.962345 11.929C0.969246 11.933 0.975979 11.9372 0.983097 11.9409C0.99077 11.9449 0.998661 11.9483 1.00648 11.9519C1.01389 11.9553 1.02117 11.9588 1.02875 11.9619C1.03635 11.9649 1.0441 11.9674 1.05182 11.9701C1.05995 11.9729 1.06799 11.976 1.07631 11.9784C1.08403 11.9807 1.09187 11.9823 1.09967 11.9842C1.10814 11.9863 1.11651 11.9886 1.12515 11.9903C1.1342 11.992 1.14332 11.9931 1.15242 11.9943C1.15992 11.9954 1.16733 11.9968 1.17493 11.9975C1.19182 11.9991 1.20876 12 1.2257 12H1.22572H3.79955C4.08384 12 4.3143 11.7761 4.3143 11.5C4.3143 11.2238 4.08384 11 3.79955 11H2.46848L5.70785 7.85355C5.90887 7.65829 5.90887 7.3417 5.70785 7.14644C5.50682 6.95119 5.18088 6.95119 4.97985 7.14644Z"
fill="currentcolor"
/>
<path
d="M12.9628 11.799C12.9682 11.7919 12.9739 11.785 12.9789 11.7776C12.9839 11.7705 12.9881 11.7631 12.9926 11.7558C12.9967 11.7491 13.001 11.7426 13.0048 11.7357C13.0089 11.7282 13.0124 11.7206 13.0161 11.7129C13.0196 11.7058 13.0233 11.6987 13.0264 11.6913C13.0296 11.684 13.0321 11.6764 13.0349 11.6689C13.0378 11.661 13.0409 11.6532 13.0434 11.6452C13.0458 11.6377 13.0475 11.63 13.0494 11.6225C13.0516 11.6142 13.0539 11.6061 13.0557 11.5977C13.0574 11.589 13.0585 11.5801 13.0598 11.5713C13.0609 11.564 13.0623 11.5568 13.0631 11.5494C13.0648 11.533 13.0656 11.5165 13.0656 11.5V9C13.0656 8.72386 12.8352 8.50001 12.5509 8.50001C12.2666 8.50001 12.0361 8.72386 12.0361 9V10.2929L8.79673 7.14644C8.59571 6.95119 8.26976 6.95119 8.06874 7.14644C7.86771 7.3417 7.86771 7.65829 8.06874 7.85355L11.3081 11H9.97704C9.69274 11 9.46228 11.2238 9.46228 11.5C9.46228 11.7761 9.69274 12 9.97704 12H12.5509C12.5678 12 12.5848 11.9991 12.6017 11.9975C12.6093 11.9968 12.6167 11.9954 12.6242 11.9943C12.6333 11.9931 12.6424 11.9921 12.6515 11.9903C12.6601 11.9886 12.6684 11.9863 12.6769 11.9842C12.6847 11.9823 12.6926 11.9807 12.7003 11.9784C12.7086 11.976 12.7166 11.973 12.7247 11.9701C12.7325 11.9674 12.7402 11.965 12.7478 11.9619C12.7554 11.9589 12.7627 11.9553 12.7701 11.9519C12.7779 11.9483 12.7858 11.9449 12.7935 11.9409C12.8006 11.9372 12.8073 11.933 12.8142 11.9291C12.8217 11.9247 12.8293 11.9205 12.8367 11.9158C12.8443 11.9108 12.8514 11.9054 12.8587 11.9001C12.8648 11.8956 12.8711 11.8914 12.8771 11.8867C12.89 11.8764 12.9025 11.8655 12.9143 11.8541C12.9145 11.8539 12.9147 11.8537 12.9148 11.8536C12.915 11.8534 12.9152 11.8532 12.9153 11.853C12.9271 11.8415 12.9383 11.8295 12.9489 11.8169C12.9539 11.8111 12.9581 11.805 12.9628 11.799Z"
fill="currentcolor"
/>
<path
d="M2.46848 1.00001H3.79954C4.08384 1.00001 4.3143 0.776156 4.3143 0.500016C4.3143 0.223852 4.08384 0 3.79954 0H1.2257H1.22567C1.20873 0 1.19177 0.000867188 1.1749 0.00248437C1.16728 0.00321094 1.1599 0.00459375 1.15239 0.00564844C1.14329 0.00691406 1.13417 0.00794531 1.12512 0.00967969C1.11649 0.0113438 1.10811 0.0136406 1.09964 0.0157266C1.09185 0.017625 1.08401 0.0192891 1.07629 0.0215625C1.06796 0.024 1.05993 0.0270469 1.05179 0.0298828C1.0441 0.0325781 1.03633 0.0350391 1.02873 0.0380859C1.02113 0.0411563 1.01381 0.0447422 1.00641 0.0481641C0.998612 0.0517266 0.990722 0.0551016 0.983073 0.0590859C0.975954 0.0627891 0.969198 0.0670078 0.962273 0.0710156C0.954793 0.0753516 0.947192 0.0794531 0.939881 0.0842109C0.932231 0.0891797 0.925041 0.0947109 0.917681 0.100055C0.9116 0.104484 0.905351 0.108586 0.899439 0.11332C0.87321 0.134227 0.849129 0.157617 0.827605 0.183094C0.822731 0.188836 0.818508 0.194906 0.813947 0.200836C0.808446 0.207984 0.802751 0.214969 0.797636 0.222398C0.792737 0.2295 0.788515 0.236859 0.784026 0.244148C0.7799 0.250852 0.775557 0.257437 0.771744 0.264352C0.767642 0.271781 0.764192 0.279422 0.7605 0.287016C0.757001 0.294211 0.753285 0.301312 0.750124 0.308695C0.746987 0.316078 0.744454 0.323602 0.741679 0.331102C0.738759 0.339 0.735646 0.346805 0.733113 0.354891C0.730772 0.362391 0.729059 0.370008 0.727104 0.377578C0.724957 0.385805 0.722592 0.393937 0.720879 0.402328C0.719093 0.411117 0.718032 0.419977 0.716729 0.428813C0.715667 0.436102 0.714219 0.443297 0.713471 0.45068C0.71183 0.467063 0.710938 0.483516 0.710938 0.499992V3C0.710938 3.27614 0.941401 3.49999 1.2257 3.49999C1.50999 3.49999 1.74046 3.27614 1.74046 3V1.70712L4.97983 4.85355C5.18085 5.04881 5.5068 5.04881 5.70782 4.85355C5.90885 4.6583 5.90885 4.3417 5.70782 4.14645L2.46848 1.00001Z"
fill="currentcolor"
/>
</svg>

Before

Width:  |  Height:  |  Size: 8.2 KiB

@@ -1,40 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg
t="1720551677718"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="1510"
width="18"
height="18"
>
<path
d="M511.985404 988.20397L354.645856 830.863205l31.692198-31.692197 125.64735 125.646134 125.647351-125.646134 31.693414 31.692197z"
fill="currentcolor"
p-id="1511"
></path>
<path d="M489.574876 549.16438h44.821057v390.984362h-44.821057z" fill="currentcolor" p-id="1512"></path>
<path
d="M802.862512 498.506247a292.347627 292.347627 0 0 0 3.606362-45.781943c0-160.264776-129.920251-290.18381-290.183811-290.183811-156.325145 0-283.755607 123.617328-289.927168 278.428166-98.420231 18.360213-172.926572 104.690313-172.926573 208.435553 0 117.112497 94.937933 212.051646 212.051646 212.051646l0.254209-0.002433v0.002433h50.690974v-44.821058H265.760287v-0.003649c-0.09244 0-0.184879 0.003649-0.278535 0.003649-44.669019 0-86.664586-17.394462-118.249748-48.98084-31.585162-31.585162-48.980841-73.580729-48.980841-118.249748s17.394462-86.664586 48.980841-118.249748c22.566216-22.566216 50.447712-37.88322 80.820212-44.794298a168.56853 168.56853 0 0 1 37.429536-4.186542c2.410728 0 4.811726 0.060816 7.205426 0.161769a249.539565 249.539565 0 0 1-1.764867-29.609873c0-5.121885 0.173932-10.217012 0.484091-15.286596 3.651365-59.787763 28.659934-115.491154 71.381639-158.211643 46.342662-46.342662 107.959757-71.865731 173.498239-71.86573 65.539698 0 127.155576 25.521852 173.498238 71.86573 46.342662 46.342662 71.865731 107.959757 71.865731 173.498239 0 16.313162-1.583637 32.383062-4.674283 48.035767a242.757415 242.757415 0 0 1-12.339474 42.018677h43.569473v0.029192c0.211638-0.001216 0.420844-0.013379 0.632482-0.01338 1.11779 0 2.233147 0.014596 3.346071 0.041355 35.320453 0.841687 68.400461 14.992248 93.471062 40.062849 25.861203 25.861203 40.102987 60.24388 40.102987 96.817133 0 36.573253-14.241785 70.95593-40.102987 96.817133-25.861203 25.861203-60.245096 40.102987-96.817133 40.102987l-0.063248-0.001216v0.001216h-72.483617v44.821057h76.492577v-0.049868c98.550376-2.099353 177.796681-82.63738 177.796682-181.691309-0.002433-95.656772-73.899403-174.050444-167.718329-181.210866z"
fill="currentcolor"
p-id="1513"
></path>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

@@ -1,34 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M11 21C16.5228 21 21 16.5228 21 11C21 5.47715 16.5228 1 11 1C5.47715 1 1 5.47715 1 11C1 12.5997 1.37562 14.1116 2.04346 15.4525C2.22094 15.8088 2.28001 16.2161 2.17712 16.6006L1.58151 18.8267C1.32295 19.793 2.20701 20.677 3.17335 20.4185L5.39939 19.8229C5.78393 19.72 6.19121 19.7791 6.54753 19.9565C7.88836 20.6244 9.40032 21 11 21Z"
stroke="#735CFC"
stroke-width="1.5"
stroke-linecap="round"
/>
<path
d="M6.825 11.8495C6.36937 11.8495 6 12.2189 6 12.6745C6 13.1301 6.36937 13.4995 6.825 13.4995H12.875C13.3306 13.4995 13.7 13.1301 13.7 12.6745C13.7 12.2189 13.3306 11.8495 12.875 11.8495H6.825Z"
fill="#735CFC"
/>
<path
d="M6.825 7.99951C6.36937 7.99951 6 8.36888 6 8.82451C6 9.28015 6.36937 9.64951 6.825 9.64951H15.625C16.0806 9.64951 16.45 9.28015 16.45 8.82451C16.45 8.36888 16.0806 7.99951 15.625 7.99951H6.825Z"
fill="#735CFC"
/>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

@@ -1,34 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg
t="1720470046453"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="1451"
width="24"
height="24"
>
<path
d="M64 512c0 195.2 124.8 361.6 300.8 422.4 22.4 6.4 19.2-9.6 19.2-22.4v-76.8c-134.4 16-140.8-73.6-150.4-89.6-19.2-32-60.8-38.4-48-54.4 32-16 64 3.2 99.2 57.6 25.6 38.4 76.8 32 105.6 25.6 6.4-22.4 19.2-44.8 35.2-60.8-144-22.4-201.6-108.8-201.6-211.2 0-48 16-96 48-131.2-22.4-60.8 0-115.2 3.2-121.6 57.6-6.4 118.4 41.6 124.8 44.8 32-9.6 70.4-12.8 112-12.8 41.6 0 80 6.4 112 12.8 12.8-9.6 67.2-48 121.6-44.8 3.2 6.4 25.6 57.6 6.4 118.4 32 38.4 48 83.2 48 131.2 0 102.4-57.6 188.8-201.6 214.4 22.4 22.4 38.4 54.4 38.4 92.8v112c0 9.6 0 19.2 16 19.2C832 876.8 960 710.4 960 512c0-246.4-201.6-448-448-448S64 265.6 64 512z"
fill="#735CFC"
p-id="1452"
></path>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,68 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="17" height="18" viewBox="0 0 17 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M1.5247 9.13256L5.7097 11.2701C5.83345 11.3319 6.10345 11.4838 6.25532 11.2363C6.39595 11.0057 6.1597 10.8201 6.0472 10.7357L1.17595 7.00631C0.821572 6.72506 0.742822 6.17944 1.01282 5.80819C1.28282 5.42006 1.84532 5.30756 2.22782 5.57194L7.17782 9.12131C7.26782 9.18881 7.51532 9.36881 7.69532 9.16068C7.87532 8.96381 7.67845 8.73881 7.5997 8.65443L3.00407 3.80569C2.6722 3.44006 2.6947 2.83256 3.13907 2.42194C3.49345 2.09569 4.11782 2.08444 4.45532 2.43319L8.9722 7.13568C9.0397 7.20318 9.24782 7.41693 9.46157 7.25943C9.68095 7.09068 9.52344 6.84318 9.48407 6.74756L6.6772 2.09006C6.48595 1.79194 6.48032 1.17881 6.99782 0.869437C7.5322 0.554437 8.04407 0.869437 8.24095 1.20131L11.3628 6.21881C11.8072 6.96131 12.5047 7.58568 13.1234 7.87818C13.6016 8.10318 13.9728 7.81631 14.0347 7.31568C14.1303 6.53944 14.2822 5.57756 14.5522 4.76756C14.8334 3.91819 15.8234 3.49631 16.6672 3.92381L16.3803 5.05444C16.0934 6.20193 16.0597 7.40568 16.2566 8.57568C16.4253 9.55443 16.5941 10.8144 16.5716 11.9338C16.5434 13.6213 15.4072 14.3582 14.3891 15.2751C9.99595 19.2632 6.80095 13.8407 5.24282 13.0701L0.714697 10.5557C0.332197 10.3363 0.247822 9.82443 0.472822 9.45318C0.692197 9.09318 1.1422 8.93568 1.5247 9.13256Z"
fill="#FFC41C"
/>
<path
d="M15.3509 3.9013C15.4859 3.92943 15.6153 3.9688 15.7447 4.03068L15.4578 5.1613C15.1709 6.3088 15.1372 7.51255 15.3341 8.68255C15.5028 9.6613 15.6716 10.9213 15.6491 12.0407C15.6209 13.7282 14.4847 14.4651 13.4666 15.3819C12.6341 16.1357 11.8466 16.5519 11.1041 16.7263C12.1053 16.7432 13.2022 16.3551 14.3834 15.2807C15.4016 14.3638 16.5322 13.6269 16.5659 11.9394C16.5884 10.8144 16.4197 9.55443 16.2509 8.5813C16.0484 7.4113 16.0878 6.20755 16.3747 5.06005L16.6616 3.92943C16.2284 3.71005 15.7503 3.7213 15.3509 3.9013Z"
fill="#F2C34E"
/>
<path
d="M15.3397 8.12567C15.5085 9.10442 15.6772 10.3644 15.6547 11.4838C15.6266 13.1713 14.4903 13.9082 13.4722 14.825C11.7172 16.4169 10.1535 16.5069 8.80908 15.995C10.3391 16.9232 12.2178 17.255 14.3891 15.2807C15.4072 14.3638 16.5378 13.6269 16.5716 11.9394C16.5941 10.8144 16.4253 9.55442 16.2566 8.5813C16.0597 7.4113 15.1372 6.95567 15.3397 8.12567Z"
fill="#F2C34E"
/>
<path
d="M3.53285 2.53444L8.5391 7.69256C8.6066 7.76006 8.81472 7.97381 9.02847 7.81631C9.24785 7.64756 9.09035 7.40006 9.05097 7.30444L8.8316 6.93881L4.45535 2.43881C4.14597 2.11819 3.60597 2.10131 3.24597 2.34319C3.35285 2.38819 3.44847 2.45006 3.53285 2.53444Z"
fill="#F2C34E"
/>
<path
d="M1.26033 5.70693L6.75033 9.63881C6.85158 9.71193 7.1272 9.90881 7.32408 9.67818C7.49845 9.49256 7.35783 9.27881 7.2622 9.16631L2.27845 5.59443C1.94658 5.36381 1.47408 5.39756 1.14783 5.64506C1.1872 5.66756 1.22658 5.68443 1.26033 5.70693Z"
fill="#F2C34E"
/>
<path
d="M7.31845 1.30256L10.4403 6.32006C10.8847 7.06256 11.5822 7.68694 12.201 7.97944C12.5328 8.13694 12.8141 8.03569 12.9772 7.79381C12.3978 7.47881 11.7791 6.90506 11.3628 6.21881L8.24095 1.20131C8.04408 0.869437 7.5322 0.554437 6.99783 0.869437C6.96408 0.886312 6.94158 0.908812 6.91345 0.931312C7.08783 1.02694 7.23408 1.16194 7.31845 1.30256Z"
fill="#F2C34E"
/>
<path
d="M5.3947 11.7932C5.53533 11.8663 5.85595 12.0407 6.03032 11.7538C6.09783 11.6413 6.08095 11.5457 6.04157 11.4613L1.57532 9.17758C1.22095 8.99758 0.8272 9.07633 0.551575 9.3182L5.3947 11.7932Z"
fill="#F2C34E"
/>
<path
d="M11.1828 17.0132C9.15784 17.0132 7.50972 15.4494 6.36222 14.3638C5.86722 13.8913 5.43409 13.4863 5.11909 13.3288L0.579721 10.8088C0.343471 10.6738 0.174721 10.4544 0.107221 10.1844C0.0284707 9.89193 0.0790957 9.57694 0.230971 9.31256C0.529096 8.80631 1.1366 8.62068 1.64847 8.87943L5.83347 11.0169C5.87847 11.0394 5.98534 11.0901 6.01909 11.0901C6.00222 11.0732 5.95722 11.0282 5.87284 10.9607L1.0016 7.23131C0.523471 6.84881 0.427846 6.14006 0.776596 5.64506C0.950971 5.39756 1.2266 5.21756 1.5416 5.16693C1.84535 5.11068 2.14347 5.17818 2.37972 5.34693L7.33534 8.89631C7.43659 8.97506 7.47597 8.98068 7.48722 8.98068C7.48159 8.97506 7.47034 8.93006 7.39722 8.85131L2.79597 4.00256C2.34597 3.49631 2.40785 2.71443 2.94222 2.21943C3.42035 1.78631 4.2191 1.79756 4.65222 2.24193L9.16909 6.94443C9.24784 7.02318 9.28159 7.03443 9.29847 7.04006C9.29284 7.01193 9.25347 6.93318 9.24222 6.90506L6.42972 2.24193C6.27784 2.01131 6.22722 1.67381 6.30034 1.37006C6.37347 1.06068 6.56472 0.807559 6.84597 0.638809C7.48159 0.261934 8.17347 0.560059 8.47722 1.06631L11.5935 6.08381C11.9872 6.74193 12.6341 7.34943 13.236 7.64193C13.3203 7.68131 13.4497 7.71506 13.551 7.65881C13.6522 7.60256 13.7253 7.47318 13.7478 7.29318C13.8378 6.59568 13.9841 5.56068 14.2766 4.69443C14.4341 4.21068 14.7997 3.82256 15.2778 3.62568C15.7616 3.42881 16.3128 3.45131 16.791 3.68756C16.9091 3.74943 16.971 3.87881 16.9372 4.00818L16.6503 5.13881C16.3747 6.24131 16.3353 7.38881 16.5322 8.54193C16.7628 9.86381 16.8697 11.0113 16.8528 11.9563C16.8247 13.5482 15.8853 14.3638 14.9741 15.1569C14.8447 15.2694 14.7097 15.3876 14.5803 15.5057C13.3653 16.5969 12.2235 17.0132 11.1828 17.0132ZM1.17035 9.32943C0.990346 9.32943 0.821596 9.42506 0.720346 9.59944V9.60506C0.641596 9.73444 0.619096 9.89756 0.652846 10.0438C0.675346 10.1282 0.731596 10.2463 0.855346 10.3194L5.37784 12.8338C5.76034 13.0194 6.21597 13.4526 6.74472 13.9588C8.53909 15.6576 10.9916 17.9863 14.1978 15.0782C14.3328 14.9544 14.4678 14.8419 14.6028 14.7238C15.4916 13.9476 16.2622 13.2838 16.2903 11.9394C16.3072 11.0338 16.2003 9.92006 15.981 8.63193C15.7672 7.40006 15.8122 6.17381 16.1047 4.99256L16.3297 4.09818C16.0541 4.01381 15.7616 4.02506 15.4916 4.13756C15.1653 4.27256 14.9178 4.53693 14.811 4.86318C14.5353 5.69006 14.3891 6.68006 14.3047 7.35506C14.2597 7.70943 14.0853 7.99631 13.8266 8.14256C13.5847 8.27756 13.2866 8.27756 12.9997 8.14256C12.291 7.80506 11.571 7.12443 11.121 6.37068L7.99909 1.35318C7.90909 1.20693 7.56597 0.858184 7.13847 1.11693C6.98659 1.20693 6.89097 1.33631 6.85159 1.49381C6.80659 1.67381 6.85159 1.84818 6.90784 1.93818L9.72034 6.60131C9.96784 7.09068 9.80472 7.34381 9.63034 7.47881C9.47847 7.59131 9.16909 7.72631 8.77534 7.33818L4.25285 2.63006C4.02785 2.40506 3.57785 2.40506 3.33035 2.63006C2.98722 2.95068 2.99847 3.38381 3.21222 3.62006L7.80222 8.45756C8.14534 8.81756 8.07784 9.15506 7.89784 9.35193C7.81909 9.44193 7.50972 9.72881 7.00347 9.34631L2.05347 5.80256C1.94097 5.72381 1.79472 5.69006 1.63722 5.71818C1.4741 5.74631 1.32785 5.83631 1.23785 5.96568C1.05785 6.21881 1.10847 6.59568 1.34472 6.78693L6.21034 10.5107C6.66034 10.8651 6.60972 11.1801 6.48597 11.3769C6.35659 11.5907 6.09222 11.7876 5.58034 11.5176L1.38972 9.37443C1.32222 9.34631 1.2491 9.32943 1.17035 9.32943Z"
fill="#04212F"
/>
<path
d="M3.93785 15.9726C2.29535 15.9726 0.77097 15.0388 0.0284694 13.5594C-0.0390306 13.4244 0.0172194 13.2557 0.157844 13.1826C0.298469 13.1151 0.46722 13.1713 0.53472 13.3063C1.19847 14.6226 2.5766 15.4494 4.05035 15.4044C4.20785 15.4101 4.33722 15.5226 4.33722 15.6801C4.34285 15.8376 4.2191 15.9669 4.0616 15.9669C4.02222 15.9726 3.98285 15.9726 3.93785 15.9726Z"
fill="#04212F"
/>
<path
d="M3.9097 14.5776C3.89845 14.5776 3.89282 14.5776 3.88157 14.5776C2.80157 14.4707 1.8397 13.8407 1.31657 12.8901C1.24345 12.7551 1.28845 12.5807 1.42907 12.5076C1.56407 12.4345 1.73845 12.4795 1.81157 12.6201C2.2447 13.4076 3.04345 13.9307 3.93782 14.0207C4.0897 14.0376 4.20782 14.1726 4.19095 14.3301C4.17407 14.4707 4.05032 14.5776 3.9097 14.5776Z"
fill="#04212F"
/>
<path
d="M13.3653 4.34007C13.2247 4.34007 13.1009 4.23319 13.0841 4.08694C12.9266 2.62445 11.9197 1.37007 10.5247 0.891946C10.3784 0.841321 10.2997 0.683821 10.3503 0.537571C10.4009 0.391321 10.5584 0.312571 10.7047 0.363196C12.3022 0.908821 13.4553 2.34882 13.6409 4.03069C13.6578 4.18257 13.5453 4.32319 13.3934 4.34007C13.3878 4.34007 13.3766 4.34007 13.3653 4.34007Z"
fill="#04212F"
/>
<path
d="M11.9985 4.62131C11.8635 4.62131 11.7397 4.52006 11.7228 4.37944C11.5878 3.49069 11.0253 2.72006 10.2153 2.32631C10.0747 2.25881 10.0185 2.09006 10.086 1.94944C10.1535 1.80881 10.3222 1.75256 10.4628 1.82006C11.436 2.29819 12.1166 3.22069 12.2797 4.29506C12.3022 4.44694 12.1953 4.59319 12.0435 4.61569C12.0266 4.61569 12.0153 4.62131 11.9985 4.62131Z"
fill="#04212F"
/>
</svg>

Before

Width:  |  Height:  |  Size: 9.0 KiB

@@ -1,83 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="83" height="83" viewBox="0 0 83 83" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_69_290)">
<path
d="M60.5294 63.9455H52.6272V19.0545H60.5294C61.2109 19.0545 61.7632 18.5022 61.7632 17.8207C61.7632 17.1392 61.2109 16.5869 60.5294 16.5869H52.6272V10.2829C52.6272 9.60144 52.0749 9.04913 51.3932 9.04913C50.7115 9.04913 50.1594 9.60144 50.1594 10.2829V16.5867H11.604V10.2829C11.604 9.60144 11.0515 9.04913 10.3701 9.04913C9.68879 9.04913 9.13632 9.60144 9.13632 10.2829V16.5867H1.23381C0.552307 16.5867 0 17.139 0 17.8205C0 18.5021 0.552469 19.0544 1.23381 19.0544H9.13616V63.9454H1.23381C0.552307 63.9454 0 64.4977 0 65.1793C0 65.861 0.552469 66.4133 1.23381 66.4133H9.13616V72.7171C9.13616 73.3986 9.68863 73.9509 10.37 73.9509C11.0513 73.9509 11.6038 73.3986 11.6038 72.7171V66.4133H50.1591V72.7171C50.1591 73.3986 50.7114 73.9509 51.3929 73.9509C52.0744 73.9509 52.6269 73.3986 52.6269 72.7171V66.4133H60.529C61.2105 66.4133 61.7629 65.861 61.7629 65.1793C61.7629 64.4977 61.2109 63.9455 60.5294 63.9455ZM11.604 63.9455V19.0545H50.1592V63.9455H11.604Z"
fill="#B3DAFE"
/>
<path
d="M50.125 27.5103L33.3934 17.8416C31.8499 16.9498 29.9319 16.9492 28.3878 17.8397L11.6488 27.4957C10.1048 28.3863 9.14133 30.047 9.14069 31.8295V51.1538C9.14004 52.9362 10.0947 54.5976 11.6381 55.4897L28.3696 65.1583C29.1421 65.6044 30.0081 65.8276 30.8742 65.8276C31.7389 65.8276 32.6037 65.605 33.3752 65.1602L50.1143 55.5043C51.6584 54.6135 52.6218 52.9529 52.6225 51.1705V31.8464C52.6231 30.0638 51.6685 28.4024 50.125 27.5103ZM42.2505 36.4056V46.6031C42.2502 47.507 41.7616 48.349 40.9788 48.8004L32.1458 53.8957C31.3628 54.3475 30.3903 54.3469 29.608 53.8947L20.7788 48.7927C19.9962 48.3404 19.5123 47.4981 19.5128 46.5943V36.3968C19.5131 35.4931 20.0017 34.6511 20.7845 34.1996L29.6175 29.1043C30.0087 28.8787 30.4472 28.7658 30.8857 28.7658C31.3247 28.7658 31.7639 28.8792 32.1554 29.1053L40.9846 34.2074C41.767 34.6595 42.2509 35.5018 42.2505 36.4056Z"
fill="#01C0FA"
/>
<path
d="M50.125 27.5103L33.3934 17.8416C32.0351 17.0569 30.3871 16.9628 28.9587 17.5584C29.1545 17.6401 29.3465 17.734 29.5326 17.8416L46.2642 27.5103C47.8077 28.4022 48.7623 30.0639 48.7615 31.8464V51.1705C48.7609 52.9529 47.7976 54.6137 46.2534 55.5043L29.5143 65.1602C29.329 65.2671 29.1382 65.3603 28.9435 65.4415C29.5598 65.6984 30.2169 65.8276 30.874 65.8276C31.7387 65.8276 32.6036 65.6051 33.3751 65.1602L50.1142 55.5043C51.6582 54.6136 52.6217 52.9529 52.6223 51.1705V31.8464C52.6231 30.0639 51.6685 28.4024 50.125 27.5103Z"
fill="#0290CF"
/>
<path
d="M81.0521 20.2446C83.6494 22.8419 83.6494 27.0528 81.0521 29.6501L79.0769 31.6253L69.6713 22.2197L71.6465 20.2446C74.2438 17.6474 78.4547 17.6474 81.0521 20.2446Z"
fill="#FE7AB6"
/>
<path
d="M81.0521 20.2446C80.7974 19.9899 80.5269 19.7611 80.2443 19.5564C81.5123 21.5413 80.8133 24.7261 78.4707 27.0685L76.4955 29.0437L79.077 31.6251L81.0521 29.65C83.6493 27.0528 83.6493 22.8419 81.0521 20.2446Z"
fill="#FE3D97"
/>
<path
d="M66.6028 25.2885L45.0017 46.8895L40.9881 58.154C40.5108 59.4934 41.8035 60.786 43.1428 60.3088L54.4073 56.2951L76.0084 34.694L66.6028 25.2885Z"
fill="#FFDFCF"
/>
<path
d="M73.1966 31.9338L51.5955 53.5349L41.3949 58.6124C41.1989 58.71 41.012 58.7642 40.8368 58.7877C40.8757 59.8623 41.9667 60.7093 43.0912 60.3088L54.3557 56.2951L75.9568 34.694L73.1966 31.9338Z"
fill="#FFCEBF"
/>
<path
d="M45.0017 46.8893C48.8187 46.2075 50.3863 47.7751 49.7045 51.5921C53.5215 50.9103 55.0891 52.4779 54.4073 56.2949L76.0084 34.6939L66.6028 25.2883L45.0017 46.8893Z"
fill="#FE9738"
/>
<path
d="M54.4174 56.2332L75.9567 34.6939L73.1966 31.9338L53.2505 51.8799C54.4144 52.5559 54.803 54.0074 54.4174 56.2332Z"
fill="#FE7701"
/>
<path
d="M42.3851 54.233L40.9881 58.1538C40.5108 59.4932 41.8035 60.7858 43.1428 60.3086L47.0636 58.9115L42.3851 54.233Z"
fill="#596C76"
/>
<path
d="M40.8879 58.7786C40.9146 59.6504 41.6341 60.3739 42.5043 60.4079C42.6952 60.4094 42.8925 60.3794 43.0911 60.3086L47.05 58.8979L44.9798 56.8278L41.3948 58.6123C41.2176 58.7006 41.0484 58.752 40.8879 58.7786Z"
fill="#465A61"
/>
<path
d="M66.6028 25.2885L45.0017 46.8895C48.8187 46.2077 50.3863 47.7753 49.7045 51.5923L71.3056 29.9912L66.6028 25.2885Z"
fill="#FDB97E"
/>
<path
d="M80.5471 30.2311L71.0657 20.7497C69.8228 19.5068 67.8078 19.5068 66.5649 20.7497C65.322 21.9926 65.322 24.0076 66.5649 25.2505L76.0463 34.7319C77.2892 35.9748 79.3042 35.9748 80.5471 34.7319C81.79 33.489 81.79 31.4739 80.5471 30.2311Z"
fill="#D8ECFE"
/>
<path
d="M80.5471 30.2311L77.8638 27.5479C78.8224 28.5066 78.592 30.2911 77.3491 31.534C76.1063 32.7769 74.3216 33.0073 73.363 32.0487L76.0463 34.732C77.2892 35.9748 79.3042 35.9748 80.5471 34.732C81.79 33.4891 81.79 31.4739 80.5471 30.2311Z"
fill="#B3DAFE"
/>
</g>
<defs>
<clipPath id="clip0_69_290">
<rect width="83" height="83" fill="white" />
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

@@ -1,102 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="63" height="63" viewBox="0 0 63 63" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_69_376)">
<path
d="M51.6549 59.1972V62.3662C51.6549 62.7161 51.371 63 51.0211 63H13.8803L12.3565 62.6669C12.0067 62.6669 11.7227 62.3829 11.7227 62.0331L11.3451 59.1972L31.5 57.9984L51.6549 59.1972Z"
fill="#F9F8F9"
/>
<path
d="M39.7394 0C41.0879 4.58087 36.0507 8.73976 31.5 8.73976C26.9493 8.73976 21.8796 3.96596 23.2605 0C25.7869 1.55408 28.6428 2.33239 31.5 2.33239C34.3571 2.33239 37.2131 1.55408 39.7394 0Z"
fill="#FF5F7A"
/>
<path
d="M43.5423 0C45.8563 6.76547 38.1511 12.6775 31.5 12.6775C24.8489 12.6775 17.9366 6.33866 19.4578 0H23.2606C23.2606 4.55071 26.9493 8.23944 31.5 8.23944C36.0507 8.23944 39.7395 4.55071 39.7395 0H43.5423Z"
fill="#F9F8F9"
/>
<path
d="M61.7149 21.0663L51.9786 25.3588L51.6549 26.3662V59.1972H12.0894L12.1217 25.6987L1.40921 21.4327C1.12146 21.3034 0.971884 20.9827 1.05808 20.6797L4.55883 8.27582C5.29784 5.69624 7.34122 3.69723 9.93601 3.01399L19.2451 0.697183C19.2451 1.59845 19.7444 2.6242 19.7444 2.6242C20.942 8.01317 25.7501 12.0423 31.5 12.0423C38.1511 12.0423 43.5423 6.65113 43.5423 0L53.8073 2.70127C56.4021 3.38451 58.4455 5.38352 59.1845 7.9631L61.8914 17.4206L62.066 20.3134C62.1522 20.6163 62.0027 20.937 61.7149 21.0663Z"
fill="#FF7E92"
/>
<path
d="M46.9649 31.1831C46.9649 35.0544 45.5223 38.7621 42.9022 41.6219L42.8274 41.703L42.8173 41.7119C39.8967 44.8504 35.7782 46.6479 31.5001 46.6479C22.9729 46.6479 16.0353 39.7103 16.0353 31.1831C16.0353 26.3827 18.213 21.9347 22.0108 18.9786C24.7488 16.8465 28.0294 15.7183 31.5001 15.7183C40.0273 15.7183 46.9649 22.6559 46.9649 31.1831Z"
fill="#FF5F7A"
/>
<path
d="M13.8803 59.1972V63H11.9789C11.629 63 11.3451 62.716 11.3451 62.3662V59.1972L12.6127 58.5485L13.8803 59.1972Z"
fill="#E8E8E8"
/>
<path
d="M11.3451 14.2606H10.3944C9.86964 14.2606 9.44373 14.6865 9.44373 15.2113V23.7461H11.3451L12.6127 19.8624L11.3451 14.2606Z"
fill="#EF4B72"
/>
<path
d="M40.0801 36.3445C38.2072 39.1678 35.0008 41.0337 31.3667 41.0337C29.2403 41.0337 27.2601 40.394 25.6074 39.2974L31.4768 33.428C33.8818 35.2312 36.8583 36.3112 40.0801 36.3445Z"
fill="#75CFF9"
/>
<path
d="M29.4491 31.2763L23.2802 37.4451C22.1275 35.7081 21.4553 33.6269 21.4553 31.3919C21.4553 27.5722 23.4164 24.2022 26.3836 22.2338C26.4189 25.62 27.5539 28.7483 29.4491 31.2763Z"
fill="#B2E5FB"
/>
<path
d="M41.5217 31.5623C41.5217 32.0615 41.4844 32.5525 41.4164 33.0324C40.9296 33.1017 40.4387 33.1377 39.9464 33.1377C34.2106 33.1377 29.5454 28.4725 29.5454 22.7368C29.5454 22.2348 29.5801 21.7466 29.6481 21.2681C30.1293 21.1988 30.6202 21.1614 31.1209 21.1614C36.8552 21.1614 41.5217 25.8279 41.5217 31.5623Z"
fill="#91DAFA"
/>
<path
d="M36.5704 50.5141H26.4296C25.9045 50.5141 25.4789 50.0884 25.4789 49.5634C25.4789 49.0383 25.9045 48.6127 26.4296 48.6127H36.5704C37.0955 48.6127 37.5211 49.0383 37.5211 49.5634C37.5211 50.0884 37.0955 50.5141 36.5704 50.5141Z"
fill="#FF5F7A"
/>
<path
d="M39.1057 54.3169H23.8944C23.3694 54.3169 22.9437 53.8912 22.9437 53.3662C22.9437 52.8411 23.3694 52.4155 23.8944 52.4155H39.1057C39.6307 52.4155 40.0564 52.8411 40.0564 53.3662C40.0564 53.8912 39.6307 54.3169 39.1057 54.3169Z"
fill="#FF5F7A"
/>
<path
d="M62.4981 21.5202L53.5563 25.5165L51.7845 25.9172L51.9869 22.3086L53.5564 21.1613L61.891 17.4208L62.8494 20.7673C62.9354 21.0701 62.7858 21.3909 62.4981 21.5202Z"
fill="#F9F8F9"
/>
<path
d="M11.0646 22.1602L10.9567 26.0763L9.44381 25.5165L2.64932 22.4799L0.940458 21.0553C0.652711 20.926 0.503134 20.6053 0.589331 20.3024L1.10918 17.4207L9.44381 21.1612L11.0646 22.1602Z"
fill="#F9F8F9"
/>
<path d="M11.3451 22.0145L11.9601 24.3502L11.3451 26.3662L9.44373 25.5169V21.1614L11.3451 22.0145Z" fill="#E8E8E8" />
<path
d="M44.8099 31.1831C44.8099 23.844 38.8391 17.8732 31.5 17.8732C28.4253 17.8732 25.5907 18.9213 23.3348 20.6788C20.205 23.1152 18.1902 26.9189 18.1902 31.1831C18.1902 38.5225 24.1606 44.493 31.5 44.493C35.3766 44.493 38.8722 42.8266 41.3057 40.1727C41.3099 40.169 41.3132 40.166 41.3132 40.166C43.4837 37.7967 44.8099 34.6419 44.8099 31.1831ZM30.1286 21.9672C30.1424 21.8526 30.2337 21.7614 30.3482 21.7474C30.7259 21.7011 31.11 21.676 31.5 21.676C36.7422 21.676 41.0071 25.9409 41.0071 31.1831C41.0071 31.5724 40.9821 31.9558 40.936 32.3329C40.922 32.4474 40.8306 32.5385 40.7162 32.5526C40.3351 32.5991 39.9514 32.6232 39.567 32.6232C34.3248 32.6232 30.0599 28.3584 30.0599 23.1162C30.06 22.7242 30.0831 22.3429 30.1286 21.9672ZM26.4845 38.8876L31.4468 33.9253C31.5352 33.8369 31.6737 33.8273 31.7749 33.9006C33.8132 35.3775 36.285 36.2905 38.9597 36.4112C39.1617 36.4203 39.2739 36.651 39.1538 36.8138C37.4214 39.1628 34.6362 40.6901 31.5 40.6901C29.6803 40.6901 27.979 40.175 26.5324 39.2844C26.3922 39.198 26.368 39.0041 26.4845 38.8876ZM25.8693 23.5292C26.0321 23.4091 26.2628 23.5214 26.2719 23.7234C26.3926 26.398 27.3057 28.8698 28.7826 30.9081C28.8558 31.0093 28.8462 31.148 28.7578 31.2362L23.7955 36.1985C23.679 36.315 23.4851 36.2908 23.3988 36.1506C22.5083 34.704 21.993 33.0027 21.993 31.183C21.993 28.0469 23.5203 25.2617 25.8693 23.5292Z"
fill="#F9F8F9"
/>
<path d="M13.8803 16.7958V59.1972H11.3451V14.2606C12.7453 14.2606 13.8803 15.3956 13.8803 16.7958Z" fill="#FF5F7A" />
<path
d="M19.7455 2.62395L11.6011 4.72944C9.00633 5.41268 6.96295 7.41169 6.22394 9.99127L3.75705 18.6097L1.81381 18.9184L1.10876 17.4206L3.81548 7.9631C4.5545 5.38352 6.59788 3.38451 9.19267 2.70127L19.4577 0C19.4577 0.901268 19.5566 1.77972 19.7455 2.62395Z"
fill="#FF5F7A"
/>
<path
d="M3.75719 18.6097L2.64931 22.4797L0.501981 21.5202C0.214235 21.3909 0.0646573 21.0702 0.150854 20.7672L1.10916 17.4207L3.75719 18.6097Z"
fill="#E8E8E8"
/>
<path
d="M53.5563 15.2113V21.1614L52.6056 23.0448L51.6549 22.0145V15.2113C51.6549 14.6865 52.0808 14.2606 52.6056 14.2606C53.1304 14.2606 53.5563 14.6865 53.5563 15.2113Z"
fill="#FF5F7A"
/>
<path d="M53.5563 21.1614V25.5169L51.6549 26.3662V22.0145L53.5563 21.1614Z" fill="#E8E8E8" />
</g>
<defs>
<clipPath id="clip0_69_376">
<rect width="63" height="63" fill="white" />
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

@@ -1,72 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M21.3258 45.7698L32.1297 50.1523L23.6195 68.4316C23.5533 68.5736 23.4229 68.6611 23.2662 68.6682C23.1097 68.6754 22.9717 68.6002 22.893 68.4647L19.7222 63.0082L13.5055 64.0945C13.3511 64.1214 13.2047 64.0644 13.1094 63.94C13.0141 63.8156 12.9969 63.6594 13.063 63.5174L21.3258 45.7698Z"
fill="#FE646F"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M30.0274 49.2994L32.1297 50.1523L27.8633 59.3161L27.6939 59.6799L27.5245 60.0438L27.3551 60.4076L27.1857 60.7714L27.0163 61.1352L26.8469 61.499L26.6775 61.8628L26.5081 62.2266L26.3387 62.5904L26.1693 62.9542L25.9999 63.318L25.8305 63.6818L25.6611 64.0456L25.4917 64.4095L25.3224 64.7733L25.153 65.1371L24.9836 65.5009L24.8142 65.8647L24.6448 66.2285L24.4754 66.5923L24.306 66.9561L24.1366 67.3199L23.9672 67.6837L23.7978 68.0475L23.6284 68.4114L23.6195 68.4305L23.6164 68.4372C23.5492 68.5754 23.4205 68.6602 23.2662 68.6672C23.1097 68.6743 22.9717 68.5991 22.893 68.4636L21.9001 66.755L28.4855 52.6102L30.0274 49.2994Z"
fill="#FD4755"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M48.833 45.7698L38.0291 50.1523L46.5392 68.4316C46.6054 68.5736 46.736 68.6611 46.8925 68.6682C47.0491 68.6754 47.187 68.6002 47.2658 68.4645L50.4364 63.0081L56.6532 64.0943C56.8075 64.1213 56.9539 64.0642 57.0492 63.9398C57.1445 63.8154 57.1618 63.6593 57.0956 63.5172L48.833 45.7698Z"
fill="#FE646F"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M48.833 45.7698L46.7307 46.6226L54.7066 63.7543L56.6532 64.0945C56.8076 64.1214 56.954 64.0644 57.0493 63.94C57.1446 63.8156 57.1618 63.6594 57.0956 63.5174L48.833 45.7698Z"
fill="#FD4755"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M38.5679 2.53724L42.155 5.22226C43.1361 5.95657 44.1687 6.33241 45.3922 6.4005L49.8659 6.64933C52.5448 6.79835 54.7204 8.62395 55.3324 11.2362L56.3543 15.5988C56.6338 16.7919 57.1833 17.7436 58.0767 18.5821L61.3439 21.6486C63.3002 23.4846 63.7933 26.2816 62.583 28.6761L60.5616 32.675C60.0088 33.7686 59.818 34.8509 59.9634 36.0675L60.4953 40.5166C60.8137 43.1806 59.3936 45.6401 56.9273 46.6964L52.8084 48.4604C51.6818 48.9429 50.8401 49.6491 50.1693 50.6748L47.7169 54.4247C46.2485 56.6701 43.5796 57.6415 41.0113 56.8653L36.7222 55.5691C35.5492 55.2146 34.4503 55.2146 33.2773 55.5691L28.9882 56.8653C26.4199 57.6415 23.7511 56.6701 22.2827 54.4247L19.8302 50.6748C19.1594 49.6491 18.3177 48.9429 17.1911 48.4605L13.0726 46.6963C10.6063 45.6401 9.18623 43.1804 9.50464 40.5165L10.0365 36.0674C10.1818 34.8506 9.99109 33.7684 9.4382 32.6748L7.41681 28.6759C6.20644 26.2816 6.69959 23.4846 8.65589 21.6485L11.9231 18.582C12.8165 17.7434 13.366 16.7918 13.6454 15.5987L14.6674 11.2361C15.2794 8.62382 17.455 6.79821 20.1338 6.64919L24.6076 6.40036C25.8312 6.33228 26.8638 5.95644 27.8448 5.22212L31.4319 2.5371C33.5799 0.929424 36.4201 0.929424 38.5679 2.53724Z"
fill="#FFE177"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M38.5679 2.53724L42.1549 5.22225C43.136 5.95657 44.1687 6.33241 45.3922 6.4005L49.8659 6.64932C52.5448 6.79835 54.7204 8.62382 55.3323 11.2361L56.3543 15.5987C56.6337 16.7918 57.1832 17.7435 58.0767 18.5821L61.3438 21.6486C63.3001 23.4846 63.7933 26.2816 62.5829 28.6759L60.5615 32.6748C60.0086 33.7686 59.8179 34.8507 59.9632 36.0674L60.4951 40.5165C60.8135 43.1804 59.3935 45.64 56.9271 46.6963L52.8082 48.4602C51.6818 48.9427 50.84 49.649 50.1693 50.6747L47.7168 54.4246C46.3593 56.5003 43.9762 57.487 41.5949 57.0113C43.1034 56.7043 44.4604 55.8055 45.3635 54.4246L47.8159 50.6747C48.4867 49.649 49.3284 48.9427 50.4549 48.4602L54.5738 46.6963C57.0401 45.6401 58.4602 43.1804 58.1417 40.5165L57.6099 36.0674C57.4644 34.8506 57.6553 33.7684 58.2082 32.6748L60.2296 28.6759C61.4399 26.2816 60.9468 23.4846 58.9905 21.6486L55.7233 18.5821C54.8299 17.7435 54.2804 16.7918 54.0009 15.5987L52.979 11.2361C52.367 8.62382 50.1914 6.79821 47.5125 6.64932L43.0388 6.4005C41.8152 6.33241 40.7826 5.95657 39.8016 5.22225L36.2145 2.53724C35.4799 1.98735 34.6644 1.62573 33.8233 1.45196C35.4415 1.11755 37.1545 1.47931 38.5679 2.53724ZM33.8232 55.4287C33.6427 55.4668 33.461 55.5136 33.2774 55.5691L28.9882 56.8653C27.9994 57.1642 26.9957 57.2037 26.0514 57.0115C26.2461 56.9725 26.4408 56.9241 26.6349 56.8653L30.924 55.5691C31.9136 55.2699 32.8503 55.2232 33.8232 55.4287Z"
fill="#FFD064"
/>
<path
d="M47.9327 42.1706C55.0791 35.0243 55.0791 23.4378 47.9327 16.2914C40.7864 9.14507 29.1998 9.14507 22.0535 16.2914C14.9072 23.4378 14.9072 35.0243 22.0535 42.1706C29.1998 49.317 40.7864 49.317 47.9327 42.1706Z"
fill="#FFD064"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M35 10.9282C35.3954 10.9282 35.7875 10.9422 36.1766 10.9669C26.6171 11.5737 19.0512 19.5177 19.0512 29.2304C19.0512 38.9429 26.6172 46.887 36.1766 47.4938C35.7875 47.5185 35.3954 47.5325 35 47.5325C24.892 47.5325 16.6979 39.3384 16.6979 29.2305C16.6979 19.1223 24.892 10.9282 35 10.9282Z"
fill="#FFC338"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M32.7119 30.7671L41.1832 22.2112C42.1861 21.1984 43.822 21.1955 44.8318 22.1999C45.8415 23.2039 45.8446 24.8353 44.843 25.8462C41.4078 29.3132 37.9959 32.8031 34.5448 36.2543C33.536 37.2631 31.8993 37.2631 30.8905 36.2543L25.1648 30.5288C24.156 29.5199 24.156 27.8833 25.1648 26.8744C26.1737 25.8656 27.8103 25.8656 28.8193 26.8744L32.7119 30.7671Z"
fill="#ECEFF1"
/>
</svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 124 KiB

@@ -1,51 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg
t="1720472979590"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3688"
width="23"
height="23"
>
<path
d="M848.805886 805.572222c70.998007-81.260745 109.779266-184.217628 109.779266-293.14448
0-119.204939-46.421262-231.277434-130.713041-315.569212C744.876861 113.862257 634.94103
67.61598 517.788843 66.213028c-1.924839-0.599657-10.290367-0.592494-12.227486 0.01535C388.878868
67.945485 279.434224 114.159016 196.73471 196.85853 113.863281 279.730982 67.630307 389.460106
66.095347 506.415818c-0.428765 1.64957-0.436952 8.601912-0.021489 10.226922 1.082658 117.628024
47.364751 228.058113 130.660852 311.354214 84.291778 84.291778 196.36325 130.713041 315.569212
130.713041 119.204939 0 231.277434-46.421262 315.569212-130.713041 6.139837-6.139837
12.054547-12.444427 17.789155-18.871813 0.50756-0.453325 1.001817-0.928139 1.471514-1.440815C847.750857
807.012014 848.295256 806.299793 848.805886 805.572222zM107.447151 532.043499l187.501418
0c1.322112 65.678862 9.253758 127.264499 22.505573 182.112688-61.690014 16.687054-100.819197
38.371936-121.076566 51.906184C144.30971 701.336206 111.676475 620.35687 107.447151
532.043499zM195.881272 259.408121c20.090571 13.556761 59.242266 35.461653 121.340579
52.260248-12.998035 54.127781-20.827351 114.778116-22.243607 179.432649L107.525945
491.101018C112.076588 403.731134 144.437623 323.612399 195.881272 259.408121zM917.081898
491.099994 729.628576 491.099994c-1.415232-64.630996-9.240455-125.260865-22.229281-179.37432
61.95505-16.693194 101.235682-38.444591 121.56673-52.020794C880.270505 323.860039 912.537396
403.866211 917.081898 491.099994zM688.677908 491.099994 532.167319 491.099994 532.167319
335.061149c52.209082-1.094938 97.103572-6.453992 135.272893-14.033621C680.000272 373.163955 687.286212 430.896844 688.677908 491.099994zM532.167319 294.115598 532.167319 109.918435c36.84107 10.398838 72.779583 49.205679 100.926644 110.015649 8.810666 19.035542 16.645099 39.641859 23.464411 61.521169C621.531626 288.227494 580.261687 293.062616 532.167319 294.115598zM491.223814 110.273523l0 183.805236c-47.504944-1.12666-88.378863-6.001691-123.120109-12.802584 6.807033-21.812795 14.623046-42.35976 23.409153-61.344137C419.351903 159.792333 454.809463 121.175827 491.223814 110.273523zM491.223814 335.040682l0 156.059312L335.928912 491.099994c1.391696-60.213383 8.679683-117.955482 21.243837-170.099073C395.008472 328.536548 439.487499 333.887416 491.223814 335.040682zM335.893096 532.043499l155.330718 0 0 158.667719c-51.609425 1.194198-96.019891 6.563486-133.821845 14.103206C344.576873 651.927913 337.193719 593.243349 335.893096 532.043499zM491.223814 731.672118l0 182.909843c-36.415374-10.902304-71.871911-49.51881-99.709933-109.659539-8.679683-18.752086-16.409738-39.034015-23.157419-60.551074C402.9964 737.645157 443.773106 732.820268 491.223814 731.672118zM532.167319 914.937049 532.167319 731.608673c47.904033 1.025353 89.103364 5.862521 124.116809 12.656251-6.755868 21.555945-14.497179 41.87369-23.190165 60.656475C604.946902 865.73137 569.008388 904.538211 532.167319 914.937049zM532.167319 690.660052 532.167319 532.043499l156.546406 0c-1.298576 61.096497-8.66024 119.68487-21.445428 172.502819C629.154233 697.013761 584.319096 691.710988 532.167319 690.660052zM729.659275 532.043499l187.501418 0c-4.221138 88.138386-36.732599 168.973436-88.620363 233.635131-20.469194-13.668301-59.635215-35.298947-121.30374-51.868321C720.43724 659.049101 728.33921 597.585237 729.659275 532.043499zM801.518906 228.742704c-18.329461 11.570523-52.309366 29.355585-104.858186 43.493583-19.295462-63.056128-46.110177-115.004267-78.06189-150.97655C689.00025 140.410913 751.833297 178.097234 801.518906 228.742704zM406.007991 121.259738c-31.905664 35.920094-58.690704 87.768973-77.979002 150.702304-52.40351-14.241352-86.370113-32.099069-104.581893-43.587728C273.076422 177.914062 335.777463 140.364865 406.007991 121.259738zM223.917816 796.963147c18.284435-11.535731 52.098565-29.230742 104.332207-43.335994 19.271926 62.60485 45.976124 114.186645 77.757968 149.968593C335.99952 884.550994 273.472442 847.181899 223.917816 796.963147zM618.59883 903.595746c31.801287-35.803437 58.517765-87.426165 77.792761-150.08218 51.984978 14.023388 85.972047 31.631418 104.533798 43.208081C751.3329 847.061149 688.718841 884.521319 618.59883 903.595746z"
fill="#272636"
p-id="3689"
></path>
</svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

@@ -1,22 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="53" height="51" viewBox="0 0 53 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="53" height="51" rx="12" fill="#B421CC"/>
<path d="M10.5457 9.64371L7.40261 38.088C7.18024 40.1003 8.62618 41.9535 10.6322 42.2272C12.6382 42.5009 14.4447 41.0914 14.6671 39.0791L15.5923 30.7061C15.6884 29.8363 16.4692 29.2271 17.3363 29.3453C17.9196 29.4249 18.4907 29.1735 18.8193 28.6925L19.0397 28.3697C20.3441 26.4597 23.363 27.6512 23.1063 29.9747L22.6783 33.8475C22.337 36.9365 26.1433 38.7502 28.2174 36.487L32.2265 32.1123C32.6026 31.7019 33.1566 31.5038 33.7149 31.5799C34.6727 31.7106 35.3631 32.5955 35.2569 33.5563L34.335 41.899C34.1209 43.8371 35.5134 45.6219 37.4454 45.8854C39.3774 46.149 41.1171 44.7916 41.3313 42.8535L44.5041 14.1402C44.7183 12.2021 43.3257 10.4174 41.3938 10.1538C39.4618 9.89019 37.722 11.2476 37.5079 13.1857L36.6549 20.9053C36.5489 21.8646 35.6877 22.5364 34.7315 22.406C34.1717 22.3296 33.6164 22.5294 33.241 22.9424L32.7735 23.4567C30.7601 25.6714 27.0433 23.909 27.3761 20.8975L27.4603 20.1356C27.8314 16.7768 23.5818 14.923 21.5007 17.5358L19.8583 19.5979C19.5104 20.0347 18.9583 20.254 18.3985 20.1776C17.5047 20.0557 16.8604 19.2299 16.9595 18.3333L17.8102 10.6348C18.0326 8.62246 16.5866 6.76925 14.5806 6.49556C12.5746 6.22187 10.7681 7.63135 10.5457 9.64371Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

@@ -1,22 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="53" height="51" viewBox="0 0 53 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="53" height="51" rx="12" fill="white"/>
<path d="M10.5457 9.64371L7.40261 38.088C7.18024 40.1003 8.62618 41.9535 10.6322 42.2272C12.6382 42.5009 14.4447 41.0914 14.6671 39.0791L15.5923 30.7061C15.6884 29.8363 16.4692 29.2271 17.3363 29.3453C17.9196 29.4249 18.4907 29.1735 18.8193 28.6925L19.0397 28.3697C20.3441 26.4597 23.363 27.6512 23.1063 29.9747L22.6783 33.8475C22.337 36.9365 26.1433 38.7502 28.2174 36.487L32.2265 32.1123C32.6026 31.7019 33.1566 31.5038 33.7149 31.5799C34.6727 31.7106 35.3631 32.5955 35.2569 33.5563L34.335 41.899C34.1209 43.8371 35.5134 45.6219 37.4454 45.8854C39.3774 46.149 41.1171 44.7916 41.3313 42.8535L44.5041 14.1402C44.7183 12.2021 43.3257 10.4174 41.3938 10.1538C39.4618 9.89019 37.722 11.2476 37.5079 13.1857L36.6549 20.9053C36.5489 21.8646 35.6877 22.5364 34.7315 22.406C34.1717 22.3296 33.6164 22.5294 33.241 22.9424L32.7735 23.4567C30.7601 25.6714 27.0433 23.909 27.3761 20.8975L27.4603 20.1356C27.8314 16.7768 23.5818 14.923 21.5007 17.5358L19.8583 19.5979C19.5104 20.0347 18.9583 20.254 18.3985 20.1776C17.5047 20.0557 16.8604 19.2299 16.9595 18.3333L17.8102 10.6348C18.0326 8.62246 16.5866 6.76925 14.5806 6.49556C12.5746 6.22187 10.7681 7.63135 10.5457 9.64371Z" fill="#B421CC"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

@@ -1,68 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 388.12 264.29"
width="234"
height="235"
preserveAspectRatio="xMinYMin meet"
>
<g display="inline" transform="matrix(1.8189257,0,0,1.8237746,-82.14211,-64.843651)">
<g transform="matrix(1.2699241,0,0,-1.2699241,3.3662307,208.12494)">
<g transform="scale(0.1,0.1)">
<path
fill-rule="nonzero"
fill="#00758F"
d="m733.07,319.32-64.832,0c-2.28,109.43-8.6,212.33-18.93,308.72h-0.57104l-98.711-308.72h-49.363l-98.113,308.72h-0.578c-7.28-92.57-11.86-195.47-13.77-308.72h-59.113c3.82,137.73,13.38,266.84,28.68,387.36h80.356l93.535-284.62h0.57397l94.109,284.62h76.887c16.836-141.15,26.778-270.3,29.832-387.36"
/>
<path
fill-rule="nonzero"
fill="#00758F"
d="m1014.3,605.11c-26.401-143.25-61.225-247.35-104.45-312.29-33.679-50.039-70.574-75.058-110.75-75.058-10.71,0-23.917,3.226-39.589,9.636v34.532c7.656-1.121,16.64-1.719,26.972-1.719,18.743,0,33.848,5.18,45.34,15.519,13.762,12.598,20.649,26.758,20.649,42.45,0,10.718-5.372,32.711-16.067,65.98l-71.152,220.95h63.691l51.067-165.25c11.472-37.519,16.257-63.711,14.343-78.64,27.93,74.601,47.442,155.9,58.543,243.89h61.401"
/>
<path
fill-rule="nonzero"
fill="#F29111"
d="m1298.3,426.69c0-32.851-12.07-59.82-36.13-80.921-24.08-21.008-56.43-31.54-96.94-31.54-37.89,0-74.61,12.122-110.18,36.168l16.64,33.274c30.61-15.301,58.31-22.942,83.18-22.942,23.33,0,41.59,5.192,54.8,15.45,13.18,10.332,21.08,24.742,21.08,43.019,0,23-16.04,42.66-45.47,59.153-27.17,14.91-81.47,46.039-81.47,46.039-29.42,21.461-44.17,44.488-44.17,82.429,0,31.379,11,56.742,32.97,76.039,22.02,19.336,50.43,29.004,85.22,29.004,35.96,0,68.66-9.597,98.11-28.722l-14.96-33.243c-25.2,10.684-50.05,16.047-74.55,16.047-19.88,0-35.2-4.773-45.88-14.375-10.74-9.519-17.38-21.769-17.38-36.699,0-22.941,16.39-42.84,46.65-59.652,27.51-14.918,83.14-46.649,83.14-46.649,30.26-21.422,45.34-44.261,45.34-81.879"
/>
<path
fill-rule="evenodd"
fill="#F29111"
d="m1414.2,396.81c-15.69,25.25-23.55,65.769-23.55,121.64,0,97.539,29.66,146.34,88.95,146.34,31,0,53.75-11.672,68.3-34.992,15.67-25.262,23.53-65.43,23.53-120.52,0-98.32-29.66-147.5-88.95-147.5-30.99,0-53.75,11.66-68.28,35.028m230.68-86.829-71.2,35.11c6.3401,5.199,12.36,10.808,17.81,17.301,30.23,35.539,45.36,88.14,45.36,157.78,0,128.15-50.31,192.26-150.92,192.26-49.35,0-87.81-16.25-115.35-48.797-30.24-35.582-45.34-87.985-45.34-157.23,0-68.089,13.38-118.04,40.16-149.77,24.4-28.68,61.3-43.04,110.7-43.04,18.43,0,35.34,2.269,50.71,6.808l92.72-53.957,25.28,43.539"
/>
<path fill-rule="nonzero" fill="#F29111" d="m1877.3,319.32-184.19,0,0,387.36,61.98,0,0-339.71,122.21,0,0-47.649" />
<path
fill-rule="nonzero"
fill="#F29111"
d="m1921.5,319.36,10.27,0,0,39.411,13.44,0,0,8.05-37.67,0,0-8.05,13.96,0,0-39.411zm78.15,0,9.6801,0,0,47.461-14.56,0-11.85-32.351-12.9,32.351-14.03,0,0-47.461,9.1599,0,0,36.121,0.5201,0,13.51-36.121,6.9799,0,13.49,36.121,0-36.121"
/>
<path
fill-rule="evenodd"
fill="#00758F"
d="m1955.1,836.43c-37.46,0.93695-66.47-2.801-90.8-13.106-7.02-2.805-18.24-2.805-19.2-11.699,3.77-3.738,4.2201-9.817,7.52-14.988,5.6-9.36,15.41-21.977,24.32-28.547,9.8299-7.492,19.66-14.953,29.97-21.504,18.24-11.281,38.84-17.805,56.6-29.043,10.33-6.543,20.59-14.961,30.92-22,5.13-3.742,8.38-9.836,14.96-12.152v1.417c-3.3001,4.2-4.22,10.286-7.48,14.993-4.67,4.644-9.36,8.883-14.05,13.543-13.58,18.25-30.45,34.148-48.66,47.254-14.99,10.324-47.77,24.367-53.83,41.632,0,0-0.49,0.49597-0.95,0.95697,10.3,0.95001,22.49,4.7,32.31,7.539,15.89,4.2,30.4,3.25,46.78,7.45,7.5,1.886,14.99,4.242,22.51,6.543v4.242c-8.47,8.4059-14.53,19.656-23.42,27.605-23.85,20.586-50.09,40.696-77.23,57.571-14.53,9.363-33.25,15.418-48.7,23.394-5.5899,2.813-14.94,4.199-18.23,8.906-8.4301,10.293-13.13,23.848-19.2,36.036-13.56,25.713-26.69,54.253-38.37,81.443-8.4199,18.24-13.57,36.48-23.87,53.34-48.23,79.58-100.63,127.76-181.13,175.04-17.32,9.84-37.91,14.05-59.89,19.2-11.72,0.49-23.41,1.4-35.11,1.86-7.5,3.29-15,12.19-21.54,16.4-26.69,16.84-95.46,53.34-115.13,5.14-12.64-30.44,18.72-60.38,29.49-75.83,7.9499-10.75,18.26-22.94,23.85-35.09,3.2801-7.96,4.22-16.4,7.51-24.81,7.48-20.59,14.49-43.53,24.34-62.73,5.13-9.8299,10.74-20.14,17.29-28.99,3.7799-5.1799,10.31-7.49,11.72-15.94-6.53-9.35-7.04-23.39-10.78-35.1-16.84-52.89-10.3-118.41,13.58-157.25,7.47-11.699,25.28-37.449,49.15-27.597,21.06,8.4098,16.38,35.089,22.46,58.476,1.3999,5.6562,0.4599,9.3668,3.26,13.106v-0.94592c6.5499-13.086,13.12-25.691,19.2-38.84,14.53-22.91,39.78-46.785,60.86-62.683,11.2-8.457,20.1-22.942,34.14-28.106v1.414h-0.92c-2.82,4.1998-7.0199,6.086-10.77,9.3478-8.4201,8.4299-17.76,18.731-24.34,28.086-19.65,26.199-36.99,55.234-52.4,85.184-7.5099,14.543-14.05,30.441-20.14,44.941-2.8001,5.5901-2.8001,14.039-7.4901,16.84-7.0399-10.285-17.31-19.191-22.45-31.789-8.9-20.149-9.8299-44.949-13.13-70.703-1.86-0.48895-0.92,0-1.86-0.92999-14.96,3.7419-20.11,19.184-25.74,32.246-14.04,33.274-16.4,86.627-4.2099,125.01,3.26,9.8101,17.34,40.7,11.7,50.06-2.8299,8.9299-12.18,14.03-17.32,21.08-6.0701,8.89-12.66,20.1-16.83,29.95-11.24,26.2-16.89,55.23-29.02,81.43-5.62,12.19-15.47,24.83-23.4,36.04-8.91,12.64-18.73,21.53-25.76,36.49-2.3201,5.16-5.6001,13.59-1.87,19.19,0.9199,3.75,2.8199,5.1601,6.5699,6.1001,6.0501,5.1499,23.39-1.39,29.46-4.2,17.33-7,31.84-13.59,46.33-23.4,6.5599-4.6899,13.58-13.58,21.99-15.94h9.8499c14.97-3.25,31.83-0.91,45.88-5.14,24.79-7.95,47.25-19.65,67.39-32.29,61.29-38.85,111.84-94.09,145.99-160.07,5.63-10.75,7.99-20.59,13.13-31.8,9.83-22.98,22.01-46.38,31.82-68.823,9.8201-22,19.2-44.446,33.26-62.727,7-9.812,35.09-14.961,47.73-20.113,9.3401-4.199,23.87-7.949,32.3-13.09,15.91-9.812,31.79-21.062,46.79-31.844,7.4699-5.617,30.88-17.304,32.29-26.679"
/>
<path
fill-rule="evenodd"
fill="#00758F"
d="m1477.7,1243.2c-7.9399,0-13.54-0.96-19.19-2.3501v-0.9399h0.91c3.7799-7.47,10.34-12.66,14.98-19.2,3.77-7.4902,7.0499-14.95,10.79-22.45,0.4599,0.4599,0.9099,0.9501,0.9099,0.9501,6.5999,4.6599,9.87,12.14,9.87,23.39-2.83,3.3001-3.2701,6.5501-5.63,9.8401-2.8,4.6699-8.89,7.01-12.64,10.76"
/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

@@ -1,24 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<svg width="16" height="13" viewBox="0 0 16 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M13.6048 1.52734C12.0189 0.1875 9.5853 0.378906 8.0814 1.9375C6.55015 0.378906 4.11655 0.1875 2.53062 1.52734C0.479836 3.25 0.780617 6.06641 2.25718 7.57031L7.04234 12.4648C7.31577 12.7383 7.67124 12.9023 8.0814 12.9023C8.46421 12.9023 8.81968 12.7383 9.09312 12.4648L13.9056 7.57031C15.3548 6.06641 15.6556 3.25 13.6048 1.52734ZM12.9486 6.64062L8.16343 11.5352C8.10874 11.5898 8.05405 11.5898 7.97202 11.5352L3.18687 6.64062C2.17515 5.62891 1.98374 3.71484 3.37827 2.53906C4.44468 1.63672 6.0853 1.77344 7.12437 2.8125L8.0814 3.79688L9.03843 2.8125C10.0501 1.77344 11.6908 1.63672 12.7572 2.51172C14.1517 3.71484 13.9603 5.62891 12.9486 6.64062Z"
fill="currentcolor"
/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.8 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 120 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 22 KiB

@@ -1,29 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { Environment } from '@delon/theme';
export const environment = {
production: true,
useHash: false,
api: {
baseUrl: 'http://localhost:8081/api/',
refreshTokenEnabled: true
}
} as Environment;
@@ -1,42 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// This file can be replaced during build by using the `fileReplacements` array.
// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.
import { Environment } from '@delon/theme';
export const environment = {
production: false,
useHash: false,
api: {
// baseUrl: 'http://localhost:1157/api/',
baseUrl: 'http://localhost:8080/api/',
refreshTokenEnabled: true
}
} as Environment;
/*
* In development mode, to ignore zone related error stack frames such as
* `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can
* import the following file, but please comment it out in production mode
* because it will have performance impact when throw error
*/
// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

@@ -1,42 +0,0 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>HertzBeatTemplateHubWebApp</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<style type="text/css">.preloader{position:fixed;top:0;left:0;width:100%;height:100%;overflow:hidden;background:#c192c7;z-index:9999;transition:opacity .65s} .preloader-hidden-add{opacity:1;display:block}.preloader-hidden-add-active{opacity:0} .preloader-hidden{display:none}.cs-loader{position:absolute;top:0;left:0;height:100%;width:100%} .cs-loader-inner{transform:translateY(-50%);top:50%;position:absolute;width:100%;color:#fff;text-align:center} .cs-loader-inner label{font-size:20px;opacity:0;display:inline-block}@keyframes lol{0%{opacity:0;transform:translateX(-300px)}33%{opacity:1;transform:translateX(0)}66%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(300px)}}.cs-loader-inner label:nth-child(6){animation:lol 3s infinite ease-in-out}.cs-loader-inner label:nth-child(5){animation:lol 3s .1s infinite ease-in-out}.cs-loader-inner label:nth-child(4){animation:lol 3s .2s infinite ease-in-out}.cs-loader-inner label:nth-child(3){animation:lol 3s .3s infinite ease-in-out}.cs-loader-inner label:nth-child(2){animation:lol 3s .4s infinite ease-in-out}.cs-loader-inner label:nth-child(1){animation:lol 3s .5s infinite ease-in-out}</style>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" />
</head>
<body>
<app-root></app-root>
<div class="preloader"><div class="cs-loader"><div class="cs-loader-inner"><label></label><label></label><label></label><label></label><label></label><label></label></div></div></div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More