Commit d3eb0833 authored by fangw's avatar fangw

update:init update

parent d19083c6
......@@ -69,16 +69,16 @@ const CONFIG = [
},
changeOrigin: true
},
{
context: ["/ws"],
target: websocketLink,
secure: false,
pathRewrite: {
"^/ws": ""
},
"ws": true,
changeOrigin: true
},
// {
// context: ["/ws"],
// target: websocketLink,
// secure: false,
// pathRewrite: {
// "^/ws": ""
// },
// "ws": true,
// changeOrigin: true
// },
{
context: ["/p"],
target: 'http://localhost:4200/#/p',
......
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor,
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { Router } from '@angular/router';
import { AuthService } from 'src/app/service/auth.service';
import { CookieService } from 'src/app/service/cookie.service';
import { NzMessageService } from 'ng-zorro-antd/message';
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(
private authenticationService:AuthService,
private router:Router,
private cookieService:CookieService,
private message:NzMessageService
) {}
intercept(
request:HttpRequest<any>,
next:HttpHandler,
):Observable<HttpEvent<any>> {
return next.handle(request).pipe(
catchError((err) => {
let printError = false;
if (err.status == 401) {
let message = 'Invalid Authentication Credentials';
if (err && err.error && err.error.msg) {
message = err.error.msg;
}
this.message.error(message, {
nzDuration: 3000
});
if (!err.url.includes('logout_handler')) {
this.authenticationService.logout();
}
} else if (err.status == 403) {
let message = 'You are either not having right permission for accessing this module or your organization\'s license has expired. Please re-login or contact your administrator';
if (err && err.error && err.error.msg) {
message = err.error.msg;
}
const loginMethod = this.cookieService.get('login_method');
if (loginMethod === 'mobile') {
message = 'Failed to logging due to verficiation code not matched.';
}
this.message.error(message, {
nzDuration: 3000
});
} else if (err.status == 409) {
this.message.error('Your account was login in another location or login timeout', {
nzDuration: 3000
});
this.authenticationService.logout();
} else if (err.status == 400) {
let reasonText = (err.error && err.error.reason) || 'Got Invalid Inputs Error';
reasonText += ' (Please Make Sure Inputs Are Valid)';
this.message.error(reasonText, {
nzDuration: 3000
});
} else if (err.status == 413) {
let reasonText = (err.error && err.error.reason) || 'The attachment file is too large';
reasonText += ' (Confirm that the attachment is less than 2M)';
this.message.error(reasonText, {
nzDuration: 3000
});
} else if (err.status == 500) {
printError = true;
let reasonText = 'Got Unexpected Error';
reasonText += ' (Please Contact Your Administrator)';
this.message.error(reasonText, {
nzDuration: 3000
});
} else {
printError = true;
let reasonText = 'Got Unexpected Error';
reasonText += ' (Please Contact Your Administrator)';
this.message.error(reasonText, {
nzDuration: 3000
});
}
let error;
if (err.error) {
if (printError) {
console.error(`Error Status Code: ${err.status}`);
if (err.error.reason) {
console.error(`Error Reason: ${err.error.reason}`);
}
if (err.error.traceback) {
console.error(`Error Backend Traceback: ${err.error.traceback}`);
}
}
error = err.error.reason;
} else {
error = err.statusText;
}
return throwError(error);
}),
);
}
}
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './page/home/home.component';
import { LoginComponent } from './page/login/login.component';
const routes:Routes = [
{ path: 'login', component: LoginComponent },
{
path: 'home',
component: HomeComponent
}
];
@NgModule({
......
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpClientModule } from '@angular/common/http';
import { HttpClientModule, HTTP_INTERCEPTORS, HttpClient } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NzFormModule } from 'ng-zorro-antd/form';
......@@ -9,15 +9,25 @@ import { NzInputModule } from 'ng-zorro-antd/input';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
import { NzButtonModule } from 'ng-zorro-antd/button';
import { NzSelectModule } from 'ng-zorro-antd/select';
import { NzMessageModule } from 'ng-zorro-antd/message';
import { NzLayoutModule } from 'ng-zorro-antd/layout';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzToolTipModule } from 'ng-zorro-antd/tooltip';
import { NzBadgeModule } from 'ng-zorro-antd/badge';
import { ReactiveFormsModule } from '@angular/forms';
import { ErrorInterceptor } from 'src/app/_helpers/error-interceptor';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { LoginComponent } from './page/login/login.component';
import { HomeComponent } from './page/home/home.component';
@NgModule({
declarations: [
AppComponent,
LoginComponent],
LoginComponent,
HomeComponent],
imports: [
BrowserModule,
HttpClientModule,
......@@ -27,10 +37,18 @@ import { LoginComponent } from './page/login/login.component';
NzCheckboxModule,
NzButtonModule,
NzSelectModule,
NzMessageModule,
NzLayoutModule,
NzDropDownModule,
NzToolTipModule,
NzBadgeModule,
AppRoutingModule,
BrowserAnimationsModule
BrowserAnimationsModule,
ReactiveFormsModule
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
<nz-layout>
<nz-header class="header">
<div class="logo">
<i nz-icon nzType="icons:logo" class="icon"></i>
<!-- <img class="ilogo" src="../../../assets/images/logo.svg" alt=""> -->
<img class="ititle" src="../../../assets/images/nav-title.svg">
</div>
<div></div>
<div class="header-right">
<i nz-icon nzType="icons:language" class="icon"></i>
<nz-badge [nzDot]="true" class="badge-style">
<i nz-icon nzType="icons:notifications" class="icon"></i>
</nz-badge>
<!-- <nz-badge [nzDot]="true" style="margin: 0 10px;">
<a class="head-example">
<button nz-button nzShape="circle" style="color: #013527;">
<i nz-icon nzType="icons:notifications" ></i>
</button>
</a>
</nz-badge> -->
<!-- <button nz-button nz-tooltip nzTooltipTitle="Change Language" *ngIf="currLanguage%2==0"
style="color: #013527;">
<i nz-icon nzType="icons:EN"></i>
</button>
<button nz-button nzShape="circle" nz-tooltip nzTooltipTitle="Change Language" *ngIf="currLanguage%2==1"
style="color: #013527;">
<i nz-icon nzType="icons:CN"></i>
</button> -->
<i nz-dropdown nzTrigger="click" class="icon" [nzDropdownMenu]="menu" nz-icon nzType="icons:Robot-Avatars"></i>
<nz-dropdown-menu #menu="nzDropdownMenu">
<ul nz-menu>
<li nz-menu-item nzDisabled class="user-menu-disabled">
<i nz-icon nzType="icons:manual"></i>
<span>quick_start_guide</span>
</li>
<li nz-menu-item nzDisabled class="user-menu-disabled">
<i nz-icon nzType="icons:manual"></i>
<span>quick_start_guide</span>
</li>
<li nz-menu-item nzDisabled class="user-menu-disabled">
<i nz-icon nzType="icons:video"></i>
<span>introduction_videos</span>
</li>
<li nz-menu-divider></li>
<li nz-menu-item nzDisabled class="user-menu-disabled">
<i nz-icon nzType="icons:new4"></i>
<span>whats_new</span>
</li>
<li nz-menu-item class="user-menu">
<i nz-icon nzType="icons:terms"></i>
<span>terms_conditions</span>
</li>
<li nz-menu-divider></li>
<li nz-menu-item class="user-menu">
<i nz-icon nzType="icons:email"></i>
<span>chg_email_user</span>
</li>
<li nz-menu-item class="user-menu">
<i nz-icon nzType="icons:pwd"></i>
<span>change_password</span>
</li>
<li nz-menu-item class="user-menu">
<i nz-icon nzType="icons:phone"></i>
<span>change_mobile</span>
</li>
<li nz-menu-divider></li>
<li nz-menu-item class="user-menu">
<i nz-icon nzType="icons:signout"></i>
<span>sign_out</span>
</li>
</ul>
</nz-dropdown-menu>
</div>
</nz-header>
<nz-content>
<!-- <nz-breadcrumb>
<nz-breadcrumb-item>Home</nz-breadcrumb-item>
<nz-breadcrumb-item>List</nz-breadcrumb-item>
<nz-breadcrumb-item>App</nz-breadcrumb-item>
</nz-breadcrumb> -->
<div class="inner-content">Content</div>
</nz-content>
<!-- <nz-footer>Ant Design ©2020 Implement By Angular</nz-footer> -->
</nz-layout>
.logo {
width: 14rem;
margin: 1.6rem 2.4rem 1.6rem 0;
display: flex;
.icon {
font-size: 4rem;
}
.ititle {
width: 12rem;
margin-left: 1.5rem;
}
}
.inner-content {
font-size: 2rem;
background: #fff;
padding: 2.4rem;
min-height: 28rem;
box-shadow: inset 0px 1.5rem 1rem -1.6rem #8c8989;
}
.header {
padding-right: 0;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
background: #fff;
height: 5.5rem;
line-height: 5.5rem;
padding-left: 3rem;
.header-right {
display: flex;
align-items: center;
.icon {
font-size: 4rem;
&:last-child {
margin-right: 1.5rem;
}
}
.badge-style {
margin: 0 1rem;
}
}
}
::ng-deep .ant-badge-dot {
top: .7rem;
right: .6rem;
width: 1.3rem;
height: 1.3rem;
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
currLanguage = 0;
constructor() { }
ngOnInit():void {
}
}
......@@ -4,7 +4,7 @@
<div class="con-left">
<div class="welcome">
<p class="text-welcome">Welcome back<label style="font-weight:lighter;">!</label></p>
<p style="font-size: 25px;font-weight:lighter;">Bring Your Research into a New<br> Era of Pharmaceutical
<p style="font-size: 25px;font-weight:lighter;line-height: 30px;">Bring Your Research into a New<br> Era of Pharmaceutical
World</p>
</div>
<div class="text-box">
......@@ -16,11 +16,11 @@
<div class="con-right">
<img class="con-right-bg" src="assets/images/con-right-bg.png">
<div class="con-right-content" *ngIf="step === 1">
<div style="margin: 170px 70px 0 70px;">
<div style="margin: 140px 50px 0 50px;">
<img class="sign-in-text" src="assets/images/sign-in-text.png">
<div class="tip-label red_color">Version: v3.0.0</div>
<div class="tip-label gray_color">Sign in to continue access system</div>
<div *ngIf="loginMethod === 'username'">
<div *ngIf="loginMethod === 'username'" class="mt15">
<form nz-form class="loom-form" [formGroup]="loginFormGroup">
<nz-form-item class="margin-top-35px">
<nz-form-control [nzErrorTip]="errorUser">
......@@ -31,15 +31,15 @@
<ng-template #prefixTemplateUser>
<i nz-icon nzType="icons:user" class="prefixIcon"></i>
</ng-template>
<ng-template #errorUser let-control>
<!-- <ng-template #errorUser let-control>
<ng-container *ngIf="!usernameFormControl.hasError('required')">
Please enter a valid username
</ng-container>
<ng-container *ngIf="usernameFormControl.hasError('required')">
Username is <strong>required</strong>
</ng-container>
</ng-template>
</nz-form-control>
</ng-template> -->
</nz-form-control>
</nz-form-item>
<nz-form-item class="margin-bottom-0px">
......@@ -51,7 +51,7 @@
<ng-template #prefixTemplatePwd>
<i nz-icon nzType="icons:password" class="prefixIcon"></i>
</ng-template>
<ng-template #errorPwd let-control>
<!-- <ng-template #errorPwd let-control>
<ng-container
*ngIf="passwordFormControl.hasError('password') && !passwordFormControl.hasError('required')">
Please enter a valid password
......@@ -59,7 +59,7 @@
<ng-container *ngIf="passwordFormControl.hasError('required')">
Password is <strong>required</strong>
</ng-container>
</ng-template>
</ng-template> -->
</nz-form-control>
</nz-form-item>
......@@ -71,7 +71,7 @@
<div class="loom-buttom-view margin-top-35px">
<div class="loom-flex-row ">
<!-- [disabled]="usernameFormControl.hasError('required') || passwordFormControl.hasError('required')" -->
<button nz-button nzBlock nzType="primary" [nzSize]="size" nzShape="round" class="login-btn" (click)="nextStep()">
<button nz-button nzBlock nzType="primary" [nzSize]="size" nzShape="round" class="login-btn" (click)="onLogin()">
CONTINUE
<i nz-icon nzType="right" class="right-icon"></i>
</button>
......@@ -80,12 +80,12 @@
</form>
</div>
<div *ngIf="loginMethod === 'mobile'">
<form nz-form class="loom-form" [formGroup]="mobileLoginForm">
<div *ngIf="loginMethod === 'mobile'" class="mt15">
<form nz-form class="loom-form">
<nz-form-item class="margin-top-35px">
<nz-form-control [nzErrorTip]="errorPhone">
<nz-input-group [nzSuffix]="suffixTemplateSend" [nzPrefix]="prefixTemplatePhone" class="login-input">
<input nz-input placeholder="Mobile number" formControlName="mobileFormControl"
<input nz-input placeholder="Mobile number"
id="mobile" />
</nz-input-group>
<ng-template #prefixTemplatePhone><i nz-icon nzType="icons:phone" class="prefixIcon"></i></ng-template>
......@@ -108,8 +108,8 @@
<nz-form-item class="margin-bottom-0px">
<nz-form-control [nzErrorTip]="errorValidation">
<nz-input-group [nzPrefix]="prefixTemplateValidation" class="login-input">
<input nz-input type="number" placeholder="Verification Code"
formControlName="codeFormControl" id="code" />
<input nz-input placeholder="Verification Code"
id="code" />
</nz-input-group>
<ng-template #prefixTemplateValidation><i nz-icon nzType="icons:validation" class="prefixIcon"></i></ng-template>
<ng-template #errorValidation let-control>
......@@ -151,7 +151,7 @@
</div>
</div>
<div class="con-right-content step-two" *ngIf="step === 2">
<div style="margin: 100px 70px 0 70px;">
<div style="margin: 140px 50px 0 50px;">
<div class="user-Avatars">
<div >
<i nz-icon nzType="icons:Robot-Avatars"></i>
......
......@@ -7,8 +7,6 @@
background-size: cover;
background-repeat: no-repeat;
position: relative;
min-height: 768px;
.login-content {
position: absolute;
left: 50%;
......@@ -19,7 +17,7 @@
overflow: hidden;
.content-bg {
width: 75vw;
width: 1000px;
display: block;
}
......@@ -32,8 +30,8 @@
.welcome {
color: #fff;
position: absolute;
top: 44%;
left: 135px;
top: 38%;
left: 100px;
&>p {
margin: 0;
......@@ -42,7 +40,6 @@
.text-welcome {
font-size: 35px;
font-weight: bolder;
margin-bottom: 10px;
}
}
......@@ -102,6 +99,10 @@
width: 100%;
}
.mt15 {
margin-top: 15px;
}
.tip-label {
font-family: Helvetica;
font-weight: 100;
......@@ -249,6 +250,7 @@
justify-content: space-between;
align-items: center;
font-weight: lighter;
padding: 0 8px;
.example-margin {
color: #8d8d8d;
font-size: 15px;
......@@ -268,9 +270,9 @@
.login-input {
border: 0;
height: 50px;
height: 40px;
background: #f0f0f0;
border-radius: 50px;
border-radius: 40px;
box-shadow: none !important;
&>input {
background: #f0f0f0;
......@@ -280,7 +282,7 @@
.login-btn {
font-size: 16px;
height: 50px;
height: 40px;
border-radius: 50px;
background: linear-gradient(to right, #83d0ea, #9eeeac);
border: 0;
......@@ -335,6 +337,7 @@
background: #83d0ea;
border-radius: 50px;
cursor: pointer;
padding: 0 20px;
}
.tip {
......
import { Component, OnInit } from '@angular/core';
import {
FormControl, FormGroup, FormBuilder, FormGroupDirective, NgForm, Validators,
} from '@angular/forms';
import { AuthService } from 'src/app/service/auth.service';
import { CookieService } from 'src/app/service/cookie.service';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'app-login',
......@@ -8,13 +14,40 @@ import { Component, OnInit } from '@angular/core';
export class LoginComponent implements OnInit {
loginMethod = 'username';
loading = false;
loginFormGroup:FormGroup;
step = 1;
constructor() { }
usernameFormControl;
ngOnInit():void {
passwordFormControl;
returnUrl:string;
constructor(
private authService:AuthService,
private formBuilder:FormBuilder,
private cookieService:CookieService,
private route:ActivatedRoute,
private router:Router,
) { }
ngOnInit():void {
this.loginFormGroup = this.formBuilder.group({
usernameFormControl: new FormControl('', [
Validators.required,
]),
passwordFormControl: new FormControl('', [
Validators.required,
]),
rememberFormControl: new FormControl('', [
]),
});
this.usernameFormControl = this.loginFormGroup.controls.usernameFormControl;
this.passwordFormControl = this.loginFormGroup.controls.passwordFormControl;
this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';
}
nextStep() {
......@@ -24,4 +57,30 @@ export class LoginComponent implements OnInit {
previousStep() {
this.step = 1;
}
loginSuccess(data:any) {
this.cookieService.delete('loginAuth');
// if (this.checked) {
// this.cookieService.set('loginAuth', escape(JSON.stringify({
// name: this.usernameFormControl.value,
// pwd: this.passwordFormControl.value,
// })));
// }
this.loading = false;
this.router.navigate([this.returnUrl]);
}
onLogin() {
// this.loading = true;
const login = this.authService.login(this.usernameFormControl.value, this.passwordFormControl.value, 'username');
login.subscribe(
(data:any) => {
this.loginSuccess(data);
}, (error) => {
this.loading = false;
throw error;
},
);
}
}
import { Injectable } from '@angular/core';
import { Observable, throwError } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { CookieService } from 'src/app/service/cookie.service';
import { ContextPathService } from 'src/app/service/context-path.service';
import { Router } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthService {
isLoggedIn = false;
locationUrl = '';
logoutCallbacks = [];
constructor(
private http:HttpClient,
private cookieService:CookieService,
private contextPathService:ContextPathService,
private router:Router,
) {
if (!window.performance.navigation.type) {
this.isLoggedIn = false;
} else {
this.isLoggedIn = !!localStorage.getItem('currentUser') && !!this.cookieService.get('authtkt');
}
}
login(username:string, password:string, loginMethod:string = 'username'):Observable<boolean> {
this.cookieService.set('login_method', loginMethod);
const form = new FormData();
form.append('login', username);
form.append('password', password);
form.append('method', loginMethod);
const requestOptions:Record<string, unknown> = {
/* other options here */
responseType: 'json', // not a json
};
return this.http
.post<any>(
this.contextPathService.resolvePath('login_handler'),
form,
requestOptions,
)
.pipe(
map((resp:any) => {
const user = resp;
// login successful if there's a jwt token in the response
if (user) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', escape(JSON.stringify(user)));
this.isLoggedIn = true;
return user;
}
throw new Error('Fail Auth');
}),
catchError((err:HttpErrorResponse) => {
// TODO wrong code
this.isLoggedIn = false;
return throwError(err);
}),
);
}
logout():void {
// remove user from local storage to log user out
if (localStorage.getItem('currentUser')) {
localStorage.removeItem('currentUser');
this.cookieService.set('authtkt', 'reset');
(this.logoutCallbacks || []).forEach(fn => {
fn();
});
this.http.get('/api/logout_handler', {}).subscribe(
(res) => {
this.router.navigate(['/login']);
},
(err) => {
this.router.navigate(['/login']);
},
);
} else {
this.router.navigate(['/login']);
}
this.isLoggedIn = false;
}
}
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ContextPathService {
constructor() { }
public resolvePath(path:string) {
if (window.location.href.indexOf('localhost:4200')) {
return `/api/${path}`;
}
// for future deployment on apache
return path;
}
}
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class CookieService {
constructor() { }
set(key:string, value:string, expires?:Date):void {
let cookieValue = `${key}=${value}`;
if (expires) cookieValue += `;expires='${expires.toUTCString()}';path=/`;
document.cookie = cookieValue;
}
delete(key:string) {
const date = new Date();
date.setTime(date.getTime() - 10000);
document.cookie = `${key}=a; expires=${date.toUTCString()}`;
}
get(key:string):string {
const decodedCookie:string = decodeURIComponent(document.cookie);
const pairs:string[] = decodedCookie.split(/;\s*/);
const prefix = `${key}=`;
for (const pair of pairs) {
if (pair.indexOf(prefix) == 0) {
return pair.substring(prefix.length);
}
}
return '';
}
}
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<g>
<path d="M915.765,480.681H639.977V104.319c0-22.091-17.909-40-40-40H103.792c-21.846,0-39.556,17.71-39.556,39.556v496.185
c0,22.091,17.909,40,40,40h376.529v275.62c0,24.262,19.738,44,44,44h391c24.262,0,44-19.738,44-44v-391
C959.765,500.419,940.026,480.681,915.765,480.681z M386.198,440.756v129.698c0,2.251-1.825,4.076-4.076,4.076h-56.573
c-2.251,0-4.076-1.825-4.076-4.076V440.756c0-2.251-1.825-4.076-4.076-4.076H163.981c-2.251,0-4.076-1.825-4.076-4.076V214.463
c0-2.251,1.825-4.076,4.076-4.076h153.415c2.251,0,4.076-1.825,4.076-4.076v-72.226c0-2.312,1.921-4.162,4.232-4.073l56.573,2.159
c2.189,0.084,3.921,1.883,3.921,4.073v70.067c0,2.251,1.825,4.076,4.076,4.076h149.956c2.251,0,4.076,1.825,4.076,4.076v218.141
c0,2.251-1.825,4.076-4.076,4.076H390.275C388.023,436.68,386.198,438.505,386.198,440.756z M895.765,895.681h-351v-255.62h55.212
c22.091,0,40-17.909,40-40v-55.38h255.788V895.681z"/>
<path d="M315.979,273.136h-84.867c-3.034,0-5.493,2.459-5.493,5.493v90.302c0,3.034,2.459,5.493,5.493,5.493h84.867
c3.034,0,5.493-2.459,5.493-5.493v-90.302C321.472,275.595,319.013,273.136,315.979,273.136z"/>
<path d="M473.594,273.136h-81.902c-3.034,0-5.493,2.459-5.493,5.493v90.302c0,3.034,2.459,5.493,5.493,5.493h81.902
c3.034,0,5.493-2.459,5.493-5.493v-90.302C479.087,275.595,476.628,273.136,473.594,273.136z"/>
<polygon points="649.3,730.631 697.181,730.631 697.181,706.5 649.3,706.5 649.3,679.33 700.981,679.33 700.981,654.25
620.419,654.25 620.419,786.111 703.641,786.111 703.641,761.031 649.3,761.031 "/>
<path d="M753.99,718.091c3.04-10.45,10.45-14.061,21.85-14.061c13.49,0,16.721,5.32,16.721,19.19v62.891h27.55V716
c0-22.61-8.55-34.39-34.01-34.39c-14.82,0-26.601,4.56-32.11,14.25V683.51h-27.551v102.602h27.551V718.091z"/>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<g>
<path d="M912.203,480.814H637.637V104.223c0-22.091-17.909-40-40-40H101.54c-22.091,0-40,17.909-40,40v496.096
c0,22.091,17.909,40,40,40h375.818v275.339c0,24.348,19.808,44.155,44.155,44.155h390.689c24.348,0,44.155-19.808,44.155-44.155
V524.97C956.358,500.622,936.551,480.814,912.203,480.814z M312.49,499.398H126.779V205.144h179.774v55.968H191.226v60.631h106.848
v53.848H191.226v67.839H312.49V499.398z M424.848,347.607v151.791H363.37V270.44h61.479V298c12.296-21.624,38.584-31.8,71.656-31.8
c56.816,0,75.894,26.288,75.894,76.743v156.455H510.92V359.055c0-30.952-7.208-42.824-37.312-42.824
C448.168,316.231,431.632,324.288,424.848,347.607z M892.358,895.813h-351V640.319h56.278c22.091,0,40-17.909,40-40v-55.505
h254.722V895.813z"/>
<path d="M705.078,752.804v53.01h24.89v-53.01h60.8v-87.021h-60.8v-30.02l-24.89-0.95v30.97h-62.13v87.021H705.078z
M729.968,689.913h35.72v38.95h-35.72V689.913z M668.218,689.913h36.86v38.95h-36.86V689.913z"/>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<g>
<path d="M863.247,855.721H160.753c-48.937,0-88.749-39.812-88.749-88.749s39.812-88.749,88.749-88.749h702.494
c48.936,0,88.748,39.812,88.748,88.749S912.183,855.721,863.247,855.721z M160.753,728.223c-21.366,0-38.749,17.383-38.749,38.749
s17.383,38.749,38.749,38.749h702.494c21.366,0,38.748-17.383,38.748-38.749s-17.382-38.749-38.748-38.749H160.753z"/>
<path d="M826.542,702.884h-50V478.199c0-71.107-27.69-137.958-77.971-188.238c-50.279-50.28-117.131-77.971-188.237-77.971
c-71.107,0-137.958,27.69-188.239,77.971s-77.971,117.131-77.971,188.238v224.685h-50V478.199
c0-84.462,32.892-163.869,92.615-223.593c59.724-59.724,139.131-92.615,223.593-92.615c84.463,0,163.87,32.892,223.594,92.615
s92.615,139.131,92.615,223.593V702.884z"/>
<path d="M695.206,639.55h-50V494.865c0-29.946-4.928-59.328-14.647-87.329l47.236-16.396
c11.553,33.286,17.411,68.184,17.411,103.724V639.55z"/>
<path d="M510.333,959.335c-28.938,0-56.445-8.293-77.455-23.352c-23.188-16.62-36.486-40.456-36.486-65.396v-21.206h50v21.206
c0,20.642,29.879,38.748,63.941,38.748c34.062,0,63.941-18.106,63.941-38.748v-21.206h50v21.206
c0,24.94-13.299,48.776-36.486,65.396C566.778,951.042,539.271,959.335,510.333,959.335z"/>
<path d="M599.082,174.002h-50v-21.206c0-21.366-17.383-38.749-38.749-38.749s-38.749,17.382-38.749,38.749v21.206h-50v-21.206
c0-48.936,39.812-88.749,88.749-88.749c48.937,0,88.749,39.812,88.749,88.749V174.002z"/>
</g>
</svg>
<?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="1647918920550" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9337" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M768 554.666667a42.666667 42.666667 0 0 1-42.666667-42.666667 213.333333 213.333333 0 1 0-28.586666 106.666667A126.08 126.08 0 0 0 768 640a128 128 0 0 0 128-128 384 384 0 1 0-112.426667 271.573333l-60.586666-60.586666A298.666667 298.666667 0 1 1 810.666667 512a42.666667 42.666667 0 0 1-42.666667 42.666667z m-256 85.333333a128 128 0 1 1 128-128 128 128 0 0 1-128 128z" p-id="9338"></path></svg>
\ No newline at end of file
<?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="1649483663903" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="29669" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M846.04 866.77c-17.08 2.03-32.57-10.18-34.59-27.26-0.22-1.9-0.27-3.81-0.15-5.71v-123c0-33.73-22.17-33.73-30.53-33.73-21.28-0.46-38.91 16.43-39.36 37.72-0.01 0.46-0.01 0.92 0 1.37v117.66c-0.76 18.9-16.71 33.61-35.61 32.84-17.83-0.72-32.12-15.01-32.84-32.84V647.68c-1.23-17.23 11.74-32.19 28.97-33.41 1.69-0.12 3.39-0.1 5.08 0.05a31.953 31.953 0 0 1 31.33 17.76 89.435 89.435 0 0 1 54.99-17.76c54.11 0 86.45 33.59 86.45 90.03V833.8a32.25 32.25 0 0 1-8.88 23.72 34.026 34.026 0 0 1-24.82 9.33l-0.04-0.08z m-233.12-7.46h-134.7c-42.77 0-61.85-18.96-61.85-61.57V608.07c0-42.52 19.09-61.57 61.85-61.57h128.74c17.92 0 32.45 14.53 32.45 32.45s-14.53 32.45-32.45 32.45H490.73c-1.22-0.08-2.45 0.09-3.6 0.5 0.13 0-0.15 0.8-0.15 2.89v52.58h106c16.33-1.66 30.91 10.24 32.57 26.57 0.17 1.68 0.2 3.37 0.08 5.06 0.98 16.66-11.73 30.97-28.4 31.95-1.41 0.08-2.83 0.07-4.24-0.05H486.9V791c-0.04 1.06 0.08 2.13 0.35 3.15 1.12 0.15 2.25 0.23 3.38 0.24h122.31c16.96-1.07 31.58 11.81 32.65 28.76 0.07 1.16 0.08 2.33 0.02 3.5 1.35 16.68-11.07 31.3-27.75 32.65-1.64 0.13-3.28 0.13-4.92 0h-0.02zM327.54 482.85c-17.36 2.36-33.34-9.8-35.7-27.16-0.3-2.21-0.37-4.44-0.2-6.67V370.5h-85.27c-45.86 0-66.31-20.52-66.31-66.31v-93.87c0-45.58 20.52-65.9 66.31-65.9h85.27v-31.53c-1.38-17.11 11.37-32.11 28.48-33.49 1.92-0.15 3.84-0.13 5.76 0.07 30.26 0 36.63 18.17 36.63 33.42v31.59h86.09c45.86 0 66.33 20.34 66.33 65.88v93.89c0 45.86-20.52 66.29-66.33 66.29h-86.05v78.52c1.25 17.47-11.9 32.65-29.37 33.91-1.88 0.13-3.76 0.1-5.63-0.1v-0.02zM217.21 211.27c-6.47 0-7.07 0.6-7.07 7.07v78.2c0 6.53 0.6 7.15 7.07 7.15h74.43v-92.42h-74.43z m145.35 92.38h75.29c6.29 0 7.09-0.8 7.09-7.07v-78.25c0-6.29-0.8-7.09-7.09-7.09h-75.31v92.42h0.02z m151.42 655.91C266.43 958.82 66.36 757.55 67.1 510c0.1-35 4.31-69.86 12.52-103.88 4.81-19 23.92-30.68 43.03-26.29 19.1 4.61 30.86 23.81 26.29 42.91-48.93 202.33 75.42 406.01 277.75 454.94a376.924 376.924 0 0 0 87.29 10.56c19.69 0.02 35.64 15.99 35.63 35.69-0.02 19.67-15.96 35.61-35.63 35.63z m398.49-310.05c-19.69 0-35.66-15.96-35.66-35.65 0-2.95 0.37-5.9 1.09-8.76 51.31-201.82-70.7-407.02-272.52-458.33-29.89-7.6-60.59-11.5-91.43-11.62-19.68 0-35.64-15.95-35.64-35.63 0-19.68 15.95-35.64 35.63-35.64h0.01c247.57 0.76 447.65 202.08 446.89 449.65-0.11 36.8-4.76 73.44-13.83 109.1-4 15.8-18.23 26.88-34.54 26.88z" fill="#707070" p-id="29670"></path></svg>
\ No newline at end of file
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 105.79 111.42"><defs><style>.cls-logo{fill:url(#linear-gradient);}</style><linearGradient id="linear-gradient" x1="367.98" y1="297.92" x2="473.77" y2="297.92" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6dbe45"/><stop offset="0.75" stop-color="#306a4b"/><stop offset="1" stop-color="#1e5138"/></linearGradient></defs><title>logo</title><path class="cls-logo" d="M472.47,274a9.76,9.76,0,1,0-17.7-1.84l-22.66,13.08a14.23,14.23,0,0,0-18.37-3.57,13.9,13.9,0,0,0-4.1,3.57l-13.43-7.76,20.75-12a6,6,0,0,0,7.82,0l17.77,10.26,4-2.3L426.77,262a5.6,5.6,0,0,0,.1-1.09,6,6,0,1,0-12,0A5.6,5.6,0,0,0,415,262l-22.76,13.14-5.21-3a9.79,9.79,0,0,0-2.09-9.66,48,48,0,0,1,12.05-9.9,47.87,47.87,0,0,1,57.94,7.81,9.82,9.82,0,0,1,2.73-2.36l.37-.18a51.88,51.88,0,0,0-63-8.72,52,52,0,0,0-13.31,11A9.76,9.76,0,1,0,385,275.63l22.63,13.07a14.25,14.25,0,0,0,11.23,19.46v15.5l-20.76-12a6,6,0,0,0-3.91-6.76V284.39l-4-2.3v22.82a5.72,5.72,0,0,0-1,.46,6,6,0,1,0,6,10.4,5.44,5.44,0,0,0,.9-.65l22.76,13.14v6.06a9.78,9.78,0,0,0-6.46,4.67,9.14,9.14,0,0,0-.83,1.93c-1-.2-2.07-.44-3.09-.71a47.79,47.79,0,0,1-33.71-58.85,9.63,9.63,0,0,1-3.42-1.19L371,280a52,52,0,0,0,5,40,51.4,51.4,0,0,0,31.45,24.14c1.23.33,2.46.6,3.7.84a9.75,9.75,0,0,0,9.7,8.73,9.76,9.76,0,0,0,2-19.32V308.16a14.26,14.26,0,0,0,11.23-19.47l13.43-7.75v24a6,6,0,0,0-3.91,6.78l-17.76,10.25v4.61l19.76-11.41a6.45,6.45,0,0,0,.89.63,6,6,0,1,0,6-10.4,6.28,6.28,0,0,0-1-.45V278.63l5.22-3a9.8,9.8,0,0,0,9.39,3,47.76,47.76,0,0,1-21.35,56.78,48.57,48.57,0,0,1-11.84,4.87,9.61,9.61,0,0,1,.68,3.57c0,.12,0,.25,0,.37A51.77,51.77,0,0,0,469.77,277,9.78,9.78,0,0,0,472.47,274Zm-89.73-2a5.77,5.77,0,1,1-2.11-7.89A5.78,5.78,0,0,1,382.74,272Zm43.91,71.86a5.77,5.77,0,0,1-5.78,5.77,5.77,5.77,0,0,1-5.77-5.77,5.67,5.67,0,0,1,.77-2.88,5.77,5.77,0,0,1,10.78,2.88ZM426,302.93a10.28,10.28,0,1,1,3.76-14.05A10.24,10.24,0,0,1,426,302.93Zm40.88-28.81A5.77,5.77,0,0,1,459,272a5.79,5.79,0,0,1,0-5.78,5.67,5.67,0,0,1,2.11-2.1A5.78,5.78,0,0,1,469,272,5.87,5.87,0,0,1,466.9,274.12Z" transform="translate(-367.98 -242.21)"/></svg>
\ No newline at end of file
<?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="1647874996886" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3090" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M184.1 257.1c-13.8 0-25 11.2-25 25v490c0 13.8 11.2 25 25 25s25-11.2 25-25v-490c0-13.8-11.2-25-25-25zM787.9 178.6H340.3c-42.5 0-77 34.5-77 77v512.8c0 42.5 34.5 77 77 77h447.6c42.5 0 77-34.5 77-77V255.6c0-42.5-34.6-77-77-77z m-221.6 52.6v203.6l-40.9-26.1c-8.7-5.6-18.7-8.4-28.6-8.4-10.4 0-20.8 3-29.8 9.1l-35.3 23.9V231.2h134.6z m248.6 537.2c0 14.9-12.1 27-27 27H340.3c-14.9 0-27-12.1-27-27V255.6c0-14.9 12.1-27 27-27h41.4v225.8c0 14.4 7.9 27.5 20.6 34.3 12.7 6.8 28 5.9 40-2.1l52.8-35.7c1-0.7 2.4-0.7 3.4 0l59.1 37.8c6.2 4 13.4 6 20.5 6 6.3 0 12.6-1.6 18.3-4.7a38.17 38.17 0 0 0 19.8-33.5V228.6h171.6c14.9 0 27 12.1 27 27v512.8z" p-id="3091"></path></svg>
This diff is collapsed.
<?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="1649483385067" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25303" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M718.8 680.8H305.2c-25 0-38-31.6-23.6-48.6 34.4-40.8 58.8-58 58.8-170.4 0-103 54.2-139.6 99.2-157.6 3.2-1.4 5.8-3.2 8.2-5.6 2.4-2.4 4-5.2 5.2-8.4 7.8-25.8 29.8-48.2 59-48.2s51.2 22.4 59 48.2c1.2 3.2 2.8 6 5.2 8.4 2.4 2.4 5 4.4 8.2 5.6 44.8 17.8 99.2 54.4 99.2 157.6 0 112.4 24.4 129.6 58.8 170.4 14.2 17 1.2 48.6-23.6 48.6zM512 782c-44 0-79.2-18.6-83.8-58.2v-1.8c0-0.6 0.2-1.2 0.4-1.8 0.2-0.6 0.4-1.2 0.8-1.6 0.2-0.6 0.6-1 1-1.4s0.8-0.8 1.4-1.2c0.4-0.4 1-0.6 1.6-0.8 0.6-0.2 1.2-0.4 1.6-0.6 0.6-0.2 1.2-0.2 1.8-0.2h150.8c0.6 0 1.2 0 1.8 0.2l1.8 0.6c0.6 0.2 1 0.6 1.6 0.8 0.4 0.4 1 0.8 1.4 1.2 0.4 0.4 0.8 1 1 1.4 0.2 0.6 0.6 1 0.8 1.6 0.2 0.6 0.2 1.2 0.4 1.8v1.8c-6 38.8-40.8 58.2-84.4 58.2z m0-708.8C270 73.2 73.2 270 73.2 512S270 950.8 512 950.8 950.8 754 950.8 512 754 73.2 512 73.2z" p-id="25304" fill="#707070"></path></svg>
\ No newline at end of file
<?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="1647918288894" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6295" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M368.992 830.304l0 1.184c-6.496 0-11.264 0.512-14.048 0.512l-3.296 0c-69.248 0-124.992-55.36-126.944-124.512-1.056-33.952 11.2-66.816 34.464-91.488 23.264-24.672 54.72-39.136 88.64-40.096 0.32 0 3.744-0.192 4.032-0.192 26.592 0 52.064 8.32 73.984 24.288 30.752 10.848 61.824-4.32 92.192-45.024 30.208-40.416 36.576-72.448 18.88-95.232-6.304-4.544-12.352-9.92-18.368-16.32-1.056-1.024-2.048-2.144-2.976-3.296-19.872-22.432-31.264-50.816-32.16-80.064-1.92-70.176 53.376-128.8 123.232-130.784 0.32 0 3.584-0.064 3.904-0.064 58.784 0 110.752 41.664 123.552 99.072 10.336 31.872 36.704 158.176-90.176 327.84C526.528 813.312 412.576 830.304 368.992 830.304zM364.896 766.208c18.976 0.416 118.592-2.24 227.616-148.416 111.36-148.928 86.016-253.376 79.776-272.832-7.104-31.168-32.8-51.776-61.888-51.776-36.704 1.024-64.096 30.144-63.168 64.992 0.576 18.496 9.312 31.968 16.544 39.968 0.224 0.256 0.48 0.544 0.672 0.8 4.032 4.352 7.808 7.648 11.552 10.08 2.368 1.568 4.576 3.424 6.432 5.568 19.616 22.112 57.6 83.84-13.28 178.624-45.792 61.28-92.704 74.112-124 74.144-16.096 0-32.096-3.296-47.52-9.728-2.656-1.12-5.184-2.592-7.456-4.384-7.968-6.272-21.088-13.76-38.432-13.76-18.976 0.544-34.56 7.52-46.048 19.712-11.52 12.256-17.6 28.288-17.088 45.12 0.96 34.4 28.64 61.248 62.976 61.248 0.16 0 0.192 0.032 0.064 0.064 1.184-0.192 2.496-0.352 3.264-0.416C358.336 765.184 361.696 765.44 364.896 766.208z" p-id="6296"></path><path d="M512 963.328c-60.224 0-118.624-11.744-173.6-34.88-16.288-6.88-23.936-25.632-17.056-41.92 6.848-16.32 25.632-23.904 41.92-17.088 47.072 19.808 97.12 29.888 148.768 29.888 211.744 0 384-172.256 384-384 0-211.744-172.256-384-384-384-211.744 0-384 172.256-384 384 0 72.384 20.256 142.88 58.56 203.904 9.376 14.976 4.864 34.72-10.08 44.096-14.976 9.408-34.72 4.896-44.128-10.08C87.616 681.984 64 599.712 64 515.328c0-247.008 200.96-448 448-448s448 200.96 448 448C960 762.336 759.04 963.328 512 963.328z" p-id="6297"></path></svg>
\ No newline at end of file
<?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="1647918223592" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5491" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M327.04 85.333333h369.92C841.472 85.333333 938.666667 186.794667 938.666667 337.749333v348.501334C938.666667 837.205333 841.472 938.666667 696.874667 938.666667h-229.546667a32 32 0 0 1 0-64h229.546667c107.989333 0 177.792-73.941333 177.792-188.416V337.749333c0-114.474667-69.802667-188.416-177.749334-188.416H327.04C219.093333 149.333333 149.333333 223.274667 149.333333 337.749333v348.501334c0 114.474667 69.76 188.416 177.706667 188.416a32 32 0 0 1 0 64C182.442667 938.666667 85.333333 837.205333 85.333333 686.250667V337.749333C85.333333 186.794667 182.442667 85.333333 327.04 85.333333z m-51.114667 381.098667a31.914667 31.914667 0 0 1 42.325334-16.042667 31.914667 31.914667 0 0 1 16.042666 42.282667A47.061333 47.061333 0 1 0 424.192 512c0-25.898667-21.077333-46.933333-47.018667-46.933333a32 32 0 0 1 0-64c50.048 0 91.904 33.408 105.728 78.933333h242.858667a32 32 0 0 1 32 32v79.018667a32 32 0 0 1-64 0V544h-56.704v47.018667a32 32 0 0 1-64 0V544h-90.154667a110.72 110.72 0 0 1-105.728 79.018667 111.104 111.104 0 0 1-101.248-156.544z" p-id="5492"></path></svg>
<?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="1647918689305" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7789" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M423.952 832.176 263.864 832.176c-79.543 0-144.079-64.535-144.079-144.079L119.785 335.903c0-79.544 64.536-144.079 144.079-144.079l160.088 0c8.505 0 16.009 7.504 16.009 16.009 0 14.008 6.503 48.026-16.009 48.026L263.864 255.859c-44.024 0-80.044 36.02-80.044 80.044l0 352.193c0 44.024 36.02 80.044 80.044 80.044l144.079 0c12.507 0 32.018-2.501 32.018 16.009C439.96 798.157 446.464 832.176 423.952 832.176zM894.711 534.513l-272.15 272.149c-6.004 6.003-14.008 9.505-22.512 9.505-17.51 0-32.018-14.508-32.018-32.018L568.031 640.07 343.908 640.07c-17.51 0-32.018-14.508-32.018-32.018L311.89 415.947c0-17.51 14.508-32.018 32.018-32.018l224.124 0L568.032 239.851c0-17.51 14.508-32.018 32.018-32.018 8.504 0 16.508 3.502 22.512 9.505l272.15 272.149c6.002 6.003 9.504 14.007 9.504 22.512S900.713 528.509 894.711 534.513z" p-id="7790"></path></svg>
\ No newline at end of file
<?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="1647917958625" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2416" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M543.16 894.15H188.58a42.92 42.92 0 0 1-42.87-42.87V244.79H780.2a34.12 34.12 0 0 1 34.08 34.08v208.36a24 24 0 0 0 48 0V278.87a82.17 82.17 0 0 0-82.08-82.08h-54.13v-24.07a91 91 0 0 0-90.87-90.87H188.58a91 91 0 0 0-90.87 90.87v678.56a91 91 0 0 0 90.87 90.87h354.58a24 24 0 0 0 0-48zM145.71 172.72a42.92 42.92 0 0 1 42.87-42.87H635.2a42.92 42.92 0 0 1 42.87 42.87v24.07H145.71z" fill="#677787" p-id="2417"></path><path d="M652.41 410.34a25.06 25.06 0 0 0-25.07-25.07H263.73a25.07 25.07 0 0 0-25.08 25.07 25.08 25.08 0 0 0 25.08 25.08h363.61a25.07 25.07 0 0 0 25.07-25.08zM263.73 511.47a25.08 25.08 0 0 0-25.08 25.08 25.08 25.08 0 0 0 25.08 25.08h237.32a25.08 25.08 0 0 0 25.08-25.08 25.08 25.08 0 0 0-25.08-25.08zM883.94 791.9c18.87-26 30.19-57.44 32.29-91.83 4.19-68.76-32.29-131.23-88.47-163.52a175.06 175.06 0 0 1 17.61 217.19l-109-108.17 42.35-41.93-42.35-41.93-22.22 22.22-60.8 18.45-64.57 64.15 63.32 62.9 42.34-41.93 110.7 109.43A180.88 180.88 0 0 1 685.62 833a164.78 164.78 0 0 1-38.62-6.72c-7.54-2.09-12.16 8-5.45 12.16a180.76 180.76 0 0 0 89.31 27.68A178.4 178.4 0 0 0 842 833.41l42.34 41.93 41.93-41.51zM649.93 882a28.87 28.87 0 1 0 28.86 28.86A28.58 28.58 0 0 0 649.93 882z" fill="#677787" p-id="2418"></path></svg>
\ No newline at end of file
<?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="1647916552273" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4906" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M864 643.296l-77.504-53.056v-125.376L864 412.32v230.976zM192 735.968V288.032L191.968 288 512 288.032h210.496v158.432c-0.032 0.512-0.192 1.024-0.192 1.536v256c0 0.384 0.224 0.704 0.224 1.088V736L192 735.968z m719.008-412.224a31.968 31.968 0 0 0-32.96 1.76l-91.552 62.048v-99.52A64.064 64.064 0 0 0 722.528 224H191.968A64.064 64.064 0 0 0 128 288.032V735.968C128 771.296 156.704 800 191.968 800h530.56a64.064 64.064 0 0 0 63.968-64.032v-42.592l0.384-25.312 91.04 62.336A32 32 0 0 0 928 704V352a32 32 0 0 0-16.992-28.256z" p-id="4907"></path><path d="M304 352a48 48 0 1 0 0.032 96.032A48 48 0 0 0 304 352" p-id="4908"></path></svg>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 105.79 111.42"><defs><style>.cls-1{fill:url(#linear-gradient);}</style><linearGradient id="linear-gradient" x1="367.98" y1="297.92" x2="473.77" y2="297.92" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6dbe45"/><stop offset="0.75" stop-color="#306a4b"/><stop offset="1" stop-color="#1e5138"/></linearGradient></defs><title>logo</title><path class="cls-1" d="M472.47,274a9.76,9.76,0,1,0-17.7-1.84l-22.66,13.08a14.23,14.23,0,0,0-18.37-3.57,13.9,13.9,0,0,0-4.1,3.57l-13.43-7.76,20.75-12a6,6,0,0,0,7.82,0l17.77,10.26,4-2.3L426.77,262a5.6,5.6,0,0,0,.1-1.09,6,6,0,1,0-12,0A5.6,5.6,0,0,0,415,262l-22.76,13.14-5.21-3a9.79,9.79,0,0,0-2.09-9.66,48,48,0,0,1,12.05-9.9,47.87,47.87,0,0,1,57.94,7.81,9.82,9.82,0,0,1,2.73-2.36l.37-.18a51.88,51.88,0,0,0-63-8.72,52,52,0,0,0-13.31,11A9.76,9.76,0,1,0,385,275.63l22.63,13.07a14.25,14.25,0,0,0,11.23,19.46v15.5l-20.76-12a6,6,0,0,0-3.91-6.76V284.39l-4-2.3v22.82a5.72,5.72,0,0,0-1,.46,6,6,0,1,0,6,10.4,5.44,5.44,0,0,0,.9-.65l22.76,13.14v6.06a9.78,9.78,0,0,0-6.46,4.67,9.14,9.14,0,0,0-.83,1.93c-1-.2-2.07-.44-3.09-.71a47.79,47.79,0,0,1-33.71-58.85,9.63,9.63,0,0,1-3.42-1.19L371,280a52,52,0,0,0,5,40,51.4,51.4,0,0,0,31.45,24.14c1.23.33,2.46.6,3.7.84a9.75,9.75,0,0,0,9.7,8.73,9.76,9.76,0,0,0,2-19.32V308.16a14.26,14.26,0,0,0,11.23-19.47l13.43-7.75v24a6,6,0,0,0-3.91,6.78l-17.76,10.25v4.61l19.76-11.41a6.45,6.45,0,0,0,.89.63,6,6,0,1,0,6-10.4,6.28,6.28,0,0,0-1-.45V278.63l5.22-3a9.8,9.8,0,0,0,9.39,3,47.76,47.76,0,0,1-21.35,56.78,48.57,48.57,0,0,1-11.84,4.87,9.61,9.61,0,0,1,.68,3.57c0,.12,0,.25,0,.37A51.77,51.77,0,0,0,469.77,277,9.78,9.78,0,0,0,472.47,274Zm-89.73-2a5.77,5.77,0,1,1-2.11-7.89A5.78,5.78,0,0,1,382.74,272Zm43.91,71.86a5.77,5.77,0,0,1-5.78,5.77,5.77,5.77,0,0,1-5.77-5.77,5.67,5.67,0,0,1,.77-2.88,5.77,5.77,0,0,1,10.78,2.88ZM426,302.93a10.28,10.28,0,1,1,3.76-14.05A10.24,10.24,0,0,1,426,302.93Zm40.88-28.81A5.77,5.77,0,0,1,459,272a5.79,5.79,0,0,1,0-5.78,5.67,5.67,0,0,1,2.11-2.1A5.78,5.78,0,0,1,469,272,5.87,5.87,0,0,1,466.9,274.12Z" transform="translate(-367.98 -242.21)"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 170.25 12.58"><defs><style>.a{fill:none;}.b{clip-path:url(#a);}.c{fill:url(#b);}</style><clipPath id="a" transform="translate(-12.26 -1.96)"><path class="a" d="M18.56,2A6.11,6.11,0,0,0,14.12,3.8a6,6,0,0,0-1.86,4.46,6,6,0,0,0,1.86,4.43,6,6,0,0,0,4.44,1.84H33.23V12.44H18.56a4,4,0,0,1-3-1.23,4,4,0,0,1-1.23-3,4,4,0,0,1,1.23-3,4.08,4.08,0,0,1,3-1.24H33.23V2ZM54.4,2l-7.35,5.5L39.72,2h-3.5L46,9.3v5.23H48.1V9.3L57.88,2ZM63,9.3h15.2a1.57,1.57,0,0,1,1.11.46,1.51,1.51,0,0,1,.47,1.1A1.47,1.47,0,0,1,79.3,12a1.5,1.5,0,0,1-1.11.47H63Zm0-5.25h15.2a1.61,1.61,0,0,1,1.58,1.58,1.57,1.57,0,0,1-1.58,1.56H63ZM60.89,2V14.53h17.3a3.67,3.67,0,0,0,3.67-3.67,3.46,3.46,0,0,0-1.11-2.6,3.54,3.54,0,0,0,1.11-2.63A3.54,3.54,0,0,0,80.78,3,3.54,3.54,0,0,0,78.19,2Zm24,0V14.53h21V12.44H87V9.3h18.87V7.19H87V4.05h18.87V2Zm26.06,2.09h15.2a1.54,1.54,0,0,1,1.11.47,1.5,1.5,0,0,1,.47,1.11,1.47,1.47,0,0,1-.47,1.11,1.52,1.52,0,0,1-1.11.45h-15.2ZM108.82,2V14.53h2.09V9.3h12.58a4.18,4.18,0,0,1,4.2,4.19v1h2.09v-1a6.06,6.06,0,0,0-2-4.59,3.88,3.88,0,0,0,1.46-1.33,3.66,3.66,0,0,0,.54-1.94A3.57,3.57,0,0,0,128.71,3,3.57,3.57,0,0,0,126.11,2Zm24,12.57h2.09V2h-2.09ZM137.58,2V14.53h21V12.44H139.67V9.3h18.88V7.19H139.67V4.05h18.88V2Zm24,0V14.53h21V12.44H163.63V9.3h18.88V7.19H163.63V4.05h18.88V2Z"/></clipPath><linearGradient id="b" y1="15.98" x2="1" y2="15.98" gradientTransform="translate(203.95 3672.83) rotate(180) scale(229.48)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76be71"/><stop offset="1" stop-color="#28a495"/></linearGradient></defs><title>222</title><g class="b"><rect class="c" width="170.25" height="12.58"/></g></svg>
\ No newline at end of file
......@@ -6,6 +6,24 @@
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<script TYPE="text/javascript">
var docEl = document.documentElement;
function setRemUnit () {
var rem = docEl.clientWidth * 10 / 1920; // 可根据不同电脑分辨率进行手动修改(如1920*1080
docEl.style.fontSize = rem + 'px'
}
setRemUnit()
window.addEventListener('resize', setRemUnit)
window.addEventListener('pageshow', function (e) {
if (e.persisted) {
setRemUnit()
}
})
</script>
</head>
<body>
<app-root></app-root>
......
......@@ -6,6 +6,9 @@
@import "~ng-zorro-antd/checkbox/style/index.min.css";
@import "~ng-zorro-antd/button/style/index.min.css";
@import "~ng-zorro-antd/select/style/index.min.css";
@import "~ng-zorro-antd/dropdown/style/index.min.css";
@import "~ng-zorro-antd/tooltip/style/index.min.css";
@import "~ng-zorro-antd/badge/style/index.min.css";
html,
body {
......@@ -89,3 +92,12 @@ body {
padding-bottom: 5px;
}
}
nz-header {
padding: 0 25px;
}
nz-content {
height: calc(100% - 64px);
background: #fff;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment