fmode-ng 0.0.37 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +1 -1
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +1 -1
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +1 -1
- package/esm2022/lib/user/account/account.service.mjs +10 -0
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -0
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +1 -1
- package/esm2022/lib/user/index.mjs +1 -1
- package/esm2022/lib/user/login/auth.guard.mjs +10 -0
- package/esm2022/lib/user/login/auth.service.mjs +10 -0
- package/esm2022/lib/user/login/login.component.mjs +10 -0
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -0
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -0
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -0
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -0
- package/esm2022/lib/user/profile/profile.module.mjs +10 -0
- package/esm2022/lib/user/staff/index.mjs +10 -0
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -0
- package/esm2022/lib/user/staff/staff.module.mjs +10 -0
- package/esm2022/lib/user/staff/staff.service.mjs +10 -0
- package/esm2022/lib/user/user-name.pipe.mjs +10 -0
- package/esm2022/lib/user/user.module.mjs +10 -0
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/fmode-ng.mjs +1 -1
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/social/wechat/wechat-jssdk.service.d.ts +1 -1
- package/lib/user/{account.service.d.ts → account/account.service.d.ts} +2 -2
- package/lib/user/captcha/captcha.component.d.ts +21 -0
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +1 -1
- package/lib/user/index.d.ts +15 -2
- package/lib/user/login/auth.guard.d.ts +13 -0
- package/lib/user/{auth.service.d.ts → login/auth.service.d.ts} +2 -1
- package/lib/user/login/login.component.d.ts +159 -0
- package/lib/user/modal-user-login/modal-user-login.component.d.ts +40 -0
- package/lib/user/profile/auth-profile.guard.d.ts +13 -0
- package/lib/user/profile/auth-profile.service.d.ts +36 -0
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +32 -0
- package/lib/user/profile/profile.module.d.ts +17 -0
- package/lib/user/staff/index.d.ts +3 -0
- package/lib/user/staff/staff.guard.d.ts +16 -0
- package/lib/user/staff/staff.module.d.ts +7 -0
- package/lib/user/staff/staff.service.d.ts +18 -0
- package/lib/user/user-name.pipe.d.ts +8 -0
- package/lib/user/user.module.d.ts +24 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2022/lib/user/account.service.mjs +0 -10
- package/esm2022/lib/user/auth.service.mjs +0 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { NovaCloudService } from "
|
|
1
|
+
import { NovaCloudService } from "../../nova-cloud/nova-cloud.service";
|
|
2
2
|
import Parse from "parse";
|
|
3
|
-
import { AuthService } from "
|
|
3
|
+
import { AuthService } from "../login/auth.service";
|
|
4
4
|
import { HttpClient } from "@angular/common/http";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class AccountService {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnInit, EventEmitter, ElementRef } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class CaptchaComponent implements OnInit {
|
|
4
|
+
canvasDom: ElementRef;
|
|
5
|
+
type: string;
|
|
6
|
+
canvas_id: string;
|
|
7
|
+
drawCode: Array<string>;
|
|
8
|
+
vCode: string;
|
|
9
|
+
changeVal: EventEmitter<any>;
|
|
10
|
+
onEnter: EventEmitter<any>;
|
|
11
|
+
code: string;
|
|
12
|
+
constructor();
|
|
13
|
+
ngOnInit(): void;
|
|
14
|
+
ngAfterViewInit(): void;
|
|
15
|
+
updateDrawCode(): void;
|
|
16
|
+
randomColor(): string;
|
|
17
|
+
enter(e: any): void;
|
|
18
|
+
onChange(): void;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CaptchaComponent, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CaptchaComponent, "fm-captcha", never, { "type": { "alias": "type"; "required": false; }; "canvas_id": { "alias": "canvas_id"; "required": false; }; "drawCode": { "alias": "drawCode"; "required": false; }; "vCode": { "alias": "vCode"; "required": false; }; }, { "changeVal": "changeVal"; "onEnter": "onEnter"; }, never, never, true, never>;
|
|
21
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OnInit } from "@angular/core";
|
|
2
2
|
import Parse from "parse";
|
|
3
|
-
import { AccountService } from "../account.service";
|
|
3
|
+
import { AccountService } from "../account/account.service";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class CompUserAvatarComponent implements OnInit {
|
|
6
6
|
private novaAccount;
|
package/lib/user/index.d.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
export * from "./comp-user-avatar/comp-user-avatar.component";
|
|
2
|
-
export * from "./auth.service";
|
|
3
|
-
export * from "./account.service";
|
|
2
|
+
export * from "./login/auth.service";
|
|
3
|
+
export * from "./account/account.service";
|
|
4
|
+
export * from "./user.module";
|
|
5
|
+
export * from "./user-name.pipe";
|
|
6
|
+
export * from "./staff";
|
|
7
|
+
export * from "./profile/auth-profile.guard";
|
|
8
|
+
export * from "./profile/auth-profile.service";
|
|
9
|
+
export * from "./profile/profile-bind/profile-bind.component";
|
|
10
|
+
export * from "./profile/profile.module";
|
|
11
|
+
export * from "./modal-user-login/modal-user-login.component";
|
|
12
|
+
export * from "./login/auth.guard";
|
|
13
|
+
export * from "./login/auth.service";
|
|
14
|
+
export * from "./login/login.component";
|
|
15
|
+
export * from "./account/account.service";
|
|
16
|
+
export * from "./captcha/captcha.component";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { AuthService } from './auth.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class AuthPcuserGuard {
|
|
7
|
+
authService: AuthService;
|
|
8
|
+
router: Router;
|
|
9
|
+
constructor(authService: AuthService, router: Router);
|
|
10
|
+
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AuthPcuserGuard, never>;
|
|
12
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AuthPcuserGuard>;
|
|
13
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Parse from "parse";
|
|
2
2
|
import { Router } from '@angular/router';
|
|
3
|
-
import { NovaCloudService } from '
|
|
3
|
+
import { NovaCloudService } from '../../nova-cloud';
|
|
4
4
|
import { HttpClient } from '@angular/common/http';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class AuthService {
|
|
@@ -23,6 +23,7 @@ export declare class AuthService {
|
|
|
23
23
|
set logoUrl(v: string);
|
|
24
24
|
company: string;
|
|
25
25
|
getCompanyId(): string;
|
|
26
|
+
wechatUrl: string;
|
|
26
27
|
/**
|
|
27
28
|
* 资金账户:user自动创建唯一资金账户
|
|
28
29
|
*/
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { FormBuilder, FormControl, FormGroup, ValidationErrors } from '@angular/forms';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { NzMessageService } from 'ng-zorro-antd/message';
|
|
5
|
+
import { AuthService } from './auth.service';
|
|
6
|
+
import Parse from "parse";
|
|
7
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
8
|
+
import { HttpClient } from "@angular/common/http";
|
|
9
|
+
import { NovaCloudService } from '../../nova-cloud/nova-cloud.service';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export declare class LoginComponent implements OnInit {
|
|
12
|
+
authServ: AuthService;
|
|
13
|
+
private novaCloud;
|
|
14
|
+
private fb;
|
|
15
|
+
private message;
|
|
16
|
+
router: Router;
|
|
17
|
+
private route;
|
|
18
|
+
private activatedRoute;
|
|
19
|
+
private http;
|
|
20
|
+
nums: string[];
|
|
21
|
+
str: string;
|
|
22
|
+
canvas: any;
|
|
23
|
+
image: any;
|
|
24
|
+
tabIndex: number;
|
|
25
|
+
drawCode(str: any): any;
|
|
26
|
+
drawline(canvas: any, context: any): void;
|
|
27
|
+
drawDot(canvas: any, context: any): void;
|
|
28
|
+
convertCanvasToImage(canvas: any): any;
|
|
29
|
+
vCode: string;
|
|
30
|
+
validateForm: FormGroup;
|
|
31
|
+
validateUserForm: FormGroup;
|
|
32
|
+
validateSMSForm: FormGroup;
|
|
33
|
+
smsCodeErrorTip: string;
|
|
34
|
+
userErrorTip: any;
|
|
35
|
+
passwordErrorTip: any;
|
|
36
|
+
forgetphoneCodesErrorTip: any;
|
|
37
|
+
phoneErrorTip: any;
|
|
38
|
+
codeVerified: boolean;
|
|
39
|
+
codeErrorTip: any;
|
|
40
|
+
username: any;
|
|
41
|
+
forgetusername: string;
|
|
42
|
+
forgetPassword: string;
|
|
43
|
+
forgetConfirmpassword: string;
|
|
44
|
+
forgerphoneCode: string;
|
|
45
|
+
smsCode: string;
|
|
46
|
+
phoneCode: any;
|
|
47
|
+
registForm: FormGroup;
|
|
48
|
+
forgetForm: FormGroup;
|
|
49
|
+
registNameErrorTip: any;
|
|
50
|
+
registIdcardErrorTip: any;
|
|
51
|
+
registName: any;
|
|
52
|
+
phoneCodes: any;
|
|
53
|
+
registPhone: any;
|
|
54
|
+
registIdcard: any;
|
|
55
|
+
passwordVisible: boolean;
|
|
56
|
+
passwordVisible2: boolean;
|
|
57
|
+
passwordVisible3: boolean;
|
|
58
|
+
iseducation: boolean;
|
|
59
|
+
selectEducation: any;
|
|
60
|
+
redirectUrl: any;
|
|
61
|
+
isSended: boolean;
|
|
62
|
+
isSending: boolean;
|
|
63
|
+
smsTimeCount: number;
|
|
64
|
+
sendSMSCode(): void;
|
|
65
|
+
countDownSMS(): void;
|
|
66
|
+
submitFormMobileSMS(value: {
|
|
67
|
+
mobile: string;
|
|
68
|
+
smsCode: string;
|
|
69
|
+
checkCode: string;
|
|
70
|
+
}): void;
|
|
71
|
+
submitFormMobilePassword(value: {
|
|
72
|
+
mobile: string;
|
|
73
|
+
username?: string;
|
|
74
|
+
password: string;
|
|
75
|
+
checkCode: string;
|
|
76
|
+
}): void;
|
|
77
|
+
submitFormUserPassword(value: {
|
|
78
|
+
mobile: string;
|
|
79
|
+
username?: string;
|
|
80
|
+
password: string;
|
|
81
|
+
checkCode: string;
|
|
82
|
+
}): void;
|
|
83
|
+
forgetFormFun(value: {
|
|
84
|
+
forgetusername: string;
|
|
85
|
+
forgetPassword: string;
|
|
86
|
+
forgetConfirmpassword: string;
|
|
87
|
+
forgerphoneCode: string;
|
|
88
|
+
}): Promise<void>;
|
|
89
|
+
regpassword: any;
|
|
90
|
+
confirmPassword: any;
|
|
91
|
+
registSubmitForm(value: {
|
|
92
|
+
registName: string;
|
|
93
|
+
registIdcard: string;
|
|
94
|
+
regpassword: string;
|
|
95
|
+
confirmPassword: string;
|
|
96
|
+
phoneCode: string;
|
|
97
|
+
registPhone: string;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
getSelectEducation(): void;
|
|
100
|
+
loginSMS(): void;
|
|
101
|
+
loginMobilePassword(): Promise<void>;
|
|
102
|
+
loading: boolean;
|
|
103
|
+
loading2: boolean;
|
|
104
|
+
Profile: any;
|
|
105
|
+
Lesson: any;
|
|
106
|
+
myDate: Date;
|
|
107
|
+
isVisible: boolean;
|
|
108
|
+
profile: any;
|
|
109
|
+
queryUser(): Promise<void>;
|
|
110
|
+
type: string;
|
|
111
|
+
mobileUserMap: {};
|
|
112
|
+
getMobileUser(mobile: any): Promise<any>;
|
|
113
|
+
forget(): void;
|
|
114
|
+
backLogin(): void;
|
|
115
|
+
handleCancel(): void;
|
|
116
|
+
password: any;
|
|
117
|
+
handleOk(): void;
|
|
118
|
+
isOkLoading: boolean;
|
|
119
|
+
getCode(): Promise<void>;
|
|
120
|
+
getCode2(): Promise<void>;
|
|
121
|
+
verifyCode(mobile: any, code: any): Promise<unknown>;
|
|
122
|
+
countDown: number;
|
|
123
|
+
isCountDown: boolean;
|
|
124
|
+
countDownFun(): void;
|
|
125
|
+
mobileLogin: boolean;
|
|
126
|
+
rootPage: string;
|
|
127
|
+
logo: string;
|
|
128
|
+
qrcode: string;
|
|
129
|
+
company: Parse.Object;
|
|
130
|
+
companyId: string;
|
|
131
|
+
app: Parse.Object;
|
|
132
|
+
appId: string;
|
|
133
|
+
constructor(authServ: AuthService, novaCloud: NovaCloudService, fb: FormBuilder, message: NzMessageService, router: Router, route: ActivatedRoute, activatedRoute: ActivatedRoute, http: HttpClient);
|
|
134
|
+
initCompanyConfig(): Promise<void>;
|
|
135
|
+
initAppConfig(): Promise<boolean>;
|
|
136
|
+
initLoginForm(): void;
|
|
137
|
+
userNameAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
138
|
+
smsAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
139
|
+
passwordAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
140
|
+
codeAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
141
|
+
confirmPasswordErrorTip: any;
|
|
142
|
+
regpasswordErrorTip: any;
|
|
143
|
+
phoneCodesErrorTip: any;
|
|
144
|
+
registIdcardAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
145
|
+
forgetNameAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
146
|
+
forgetPasswordAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
147
|
+
forgetConfirmPasswordAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
148
|
+
forgetCodeAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
149
|
+
registNameAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
150
|
+
registPhoneAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
151
|
+
registCodeAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
152
|
+
regpasswordAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
153
|
+
confirmPasswordAsyncValidator: (control: FormControl) => Observable<ValidationErrors>;
|
|
154
|
+
code: any;
|
|
155
|
+
ngOnInit(): void;
|
|
156
|
+
creatCode(): void;
|
|
157
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LoginComponent, never>;
|
|
158
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LoginComponent, "app-pcuser-login", never, {}, {}, never, never, false, never>;
|
|
159
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { OnInit, ElementRef } from "@angular/core";
|
|
2
|
+
import { Router } from "@angular/router";
|
|
3
|
+
import { AuthService } from "../login/auth.service";
|
|
4
|
+
import { NzMessageService } from "ng-zorro-antd/message";
|
|
5
|
+
import { HttpClient } from '@angular/common/http';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class ModalUserLoginComponent implements OnInit {
|
|
8
|
+
private msg;
|
|
9
|
+
authServ: AuthService;
|
|
10
|
+
private router;
|
|
11
|
+
private http;
|
|
12
|
+
mobile: string;
|
|
13
|
+
password: string;
|
|
14
|
+
password2: string;
|
|
15
|
+
isUserRuleChecked: boolean;
|
|
16
|
+
canvasDom: ElementRef;
|
|
17
|
+
loginInfo: any;
|
|
18
|
+
localCodeNum: string;
|
|
19
|
+
constructor(msg: NzMessageService, authServ: AuthService, router: Router, http: HttpClient);
|
|
20
|
+
ngOnInit(): void;
|
|
21
|
+
ngAfterViewInit(): void;
|
|
22
|
+
signMobilePassword(): void;
|
|
23
|
+
loginMobilePassword(): void;
|
|
24
|
+
close(): void;
|
|
25
|
+
goHome(): void;
|
|
26
|
+
handleEscapeKey(event: KeyboardEvent): void;
|
|
27
|
+
activeButton: string;
|
|
28
|
+
setActiveButton(buttonName: string): void;
|
|
29
|
+
countdown: number;
|
|
30
|
+
buttonText: string;
|
|
31
|
+
isCountingdown: boolean;
|
|
32
|
+
startCountdown(): void;
|
|
33
|
+
time(): void;
|
|
34
|
+
login(): Promise<void>;
|
|
35
|
+
drawCode: Array<string>;
|
|
36
|
+
updateDrawCode(): void;
|
|
37
|
+
randomColor(): string;
|
|
38
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ModalUserLoginComponent, never>;
|
|
39
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModalUserLoginComponent, "fm-modal-user-login", never, {}, {}, never, never, true, never>;
|
|
40
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { AuthProfileService } from './auth-profile.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class AuthProfileGuard {
|
|
7
|
+
authProfileServ: AuthProfileService;
|
|
8
|
+
router: Router;
|
|
9
|
+
constructor(authProfileServ: AuthProfileService, router: Router);
|
|
10
|
+
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AuthProfileGuard, never>;
|
|
12
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AuthProfileGuard>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import Parse from "parse";
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class AuthProfileService {
|
|
5
|
+
router: Router;
|
|
6
|
+
profile: Parse.Object;
|
|
7
|
+
_profileId: string;
|
|
8
|
+
_companyId: string;
|
|
9
|
+
isLeader: boolean;
|
|
10
|
+
isManager: boolean;
|
|
11
|
+
get profileId(): string;
|
|
12
|
+
set profileId(v: string);
|
|
13
|
+
get profilePointer(): {
|
|
14
|
+
__type: string;
|
|
15
|
+
className: string;
|
|
16
|
+
objectId: string;
|
|
17
|
+
};
|
|
18
|
+
get companyId(): string;
|
|
19
|
+
set companyId(v: string);
|
|
20
|
+
get companyPointer(): {
|
|
21
|
+
__type: string;
|
|
22
|
+
className: string;
|
|
23
|
+
objectId: string;
|
|
24
|
+
};
|
|
25
|
+
redirectUrl: string;
|
|
26
|
+
_user: Parse.User;
|
|
27
|
+
get user(): Parse.User<Parse.Attributes>;
|
|
28
|
+
set user(v: Parse.User<Parse.Attributes>);
|
|
29
|
+
constructor(router: Router);
|
|
30
|
+
getProfile(): Promise<Parse.Object<Parse.Attributes>>;
|
|
31
|
+
bindProfile(profile: Parse.Object): Promise<void>;
|
|
32
|
+
checkProfile(url: string): Promise<boolean>;
|
|
33
|
+
setCurrentProfileLocalStorage(profile: Parse.Object): Promise<void>;
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AuthProfileService, never>;
|
|
35
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AuthProfileService>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AuthProfileService } from "../auth-profile.service";
|
|
2
|
+
import Parse from "parse";
|
|
3
|
+
import { Router } from "@angular/router";
|
|
4
|
+
import { NzModalService } from "ng-zorro-antd/modal";
|
|
5
|
+
import { NzMessageService } from "ng-zorro-antd/message";
|
|
6
|
+
import { CrossService } from "../../../platform/cross.service";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare class ProfileBindComponent {
|
|
9
|
+
private authProfile;
|
|
10
|
+
private router;
|
|
11
|
+
private modal;
|
|
12
|
+
private message;
|
|
13
|
+
cross: CrossService;
|
|
14
|
+
profile: Parse.Object;
|
|
15
|
+
user: Parse.User;
|
|
16
|
+
profileList: Array<Parse.Object>;
|
|
17
|
+
pdata: any;
|
|
18
|
+
now: Date;
|
|
19
|
+
currentProfile: string;
|
|
20
|
+
onResize(): void;
|
|
21
|
+
constructor(authProfile: AuthProfileService, router: Router, modal: NzModalService, message: NzMessageService, cross: CrossService);
|
|
22
|
+
loadProfiles(): Promise<void>;
|
|
23
|
+
isVisible: boolean;
|
|
24
|
+
bindProfile(p?: any): void;
|
|
25
|
+
profileSearched: Parse.Object;
|
|
26
|
+
searchProfile(): Promise<void>;
|
|
27
|
+
selectProfile(p: any): void;
|
|
28
|
+
goProfileManage(): void;
|
|
29
|
+
onShowModal(): void;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ProfileBindComponent, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ProfileBindComponent, "fm-profile-bind", never, {}, {}, never, never, false, never>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Routes } from '@angular/router';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./profile-bind/profile-bind.component";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
import * as i4 from "@angular/router";
|
|
7
|
+
import * as i5 from "ng-zorro-antd/input";
|
|
8
|
+
import * as i6 from "ng-zorro-antd/button";
|
|
9
|
+
import * as i7 from "ng-zorro-antd/modal";
|
|
10
|
+
import * as i8 from "ng-zorro-antd/message";
|
|
11
|
+
import * as i9 from "ng-zorro-antd/icon";
|
|
12
|
+
export declare const ProfileRoutes: Routes;
|
|
13
|
+
export declare class ProfileModule {
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ProfileModule, never>;
|
|
15
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ProfileModule, [typeof i1.ProfileBindComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i4.RouterModule, typeof i5.NzInputModule, typeof i6.NzButtonModule, typeof i7.NzModalModule, typeof i8.NzMessageModule, typeof i9.NzIconModule], never>;
|
|
16
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<ProfileModule>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { StaffService } from './staff.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Staff员工身份检测
|
|
7
|
+
* @example
|
|
8
|
+
canActivate:[],
|
|
9
|
+
*/
|
|
10
|
+
export declare class AuthStaffGuard {
|
|
11
|
+
private staffServ;
|
|
12
|
+
constructor(staffServ: StaffService);
|
|
13
|
+
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AuthStaffGuard, never>;
|
|
15
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AuthStaffGuard>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@angular/common";
|
|
3
|
+
export declare class StaffModule {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StaffModule, never>;
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<StaffModule, never, [typeof i1.CommonModule], never>;
|
|
6
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<StaffModule>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Router } from '@angular/router';
|
|
2
|
+
import Parse from "parse";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class StaffService {
|
|
5
|
+
private router;
|
|
6
|
+
redirectURL: string;
|
|
7
|
+
staff: Parse.Object;
|
|
8
|
+
realStaff: Parse.Object;
|
|
9
|
+
isSuperAdmin: boolean;
|
|
10
|
+
constructor(router: Router);
|
|
11
|
+
checkStaff(): Promise<boolean>;
|
|
12
|
+
loadStaffByUser(isRefresh?: boolean): Promise<any>;
|
|
13
|
+
isPeiZhu: boolean;
|
|
14
|
+
checkIsPeiZhu(): Promise<void>;
|
|
15
|
+
peizhuJob(route: any): boolean;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StaffService, never>;
|
|
17
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<StaffService>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import Parse from "parse";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class UserNamePipe implements PipeTransform {
|
|
5
|
+
transform(user: Parse.User, ...args: unknown[]): unknown;
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UserNamePipe, never>;
|
|
7
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<UserNamePipe, "userName", false>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Routes } from '@angular/router';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./login/login.component";
|
|
4
|
+
import * as i2 from "./user-name.pipe";
|
|
5
|
+
import * as i3 from "@angular/common";
|
|
6
|
+
import * as i4 from "@angular/forms";
|
|
7
|
+
import * as i5 from "@angular/common/http";
|
|
8
|
+
import * as i6 from "@angular/router";
|
|
9
|
+
import * as i7 from "ng-zorro-antd/input";
|
|
10
|
+
import * as i8 from "ng-zorro-antd/button";
|
|
11
|
+
import * as i9 from "ng-zorro-antd/modal";
|
|
12
|
+
import * as i10 from "ng-zorro-antd/radio";
|
|
13
|
+
import * as i11 from "ng-zorro-antd/spin";
|
|
14
|
+
import * as i12 from "ng-zorro-antd/tabs";
|
|
15
|
+
import * as i13 from "ng-zorro-antd/form";
|
|
16
|
+
import * as i14 from "ng-zorro-antd/message";
|
|
17
|
+
import * as i15 from "./modal-user-login/modal-user-login.component";
|
|
18
|
+
import * as i16 from "./captcha/captcha.component";
|
|
19
|
+
export declare const UserRoutes: Routes;
|
|
20
|
+
export declare class UserModule {
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UserModule, never>;
|
|
22
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<UserModule, [typeof i1.LoginComponent, typeof i2.UserNamePipe], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.HttpClientModule, typeof i4.ReactiveFormsModule, typeof i6.RouterModule, typeof i7.NzInputModule, typeof i8.NzButtonModule, typeof i9.NzModalModule, typeof i10.NzRadioModule, typeof i11.NzSpinModule, typeof i12.NzTabsModule, typeof i13.NzFormModule, typeof i14.NzMessageModule, typeof i15.ModalUserLoginComponent, typeof i16.CaptchaComponent], [typeof i1.LoginComponent, typeof i15.ModalUserLoginComponent, typeof i2.UserNamePipe, typeof i16.CaptchaComponent]>;
|
|
23
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<UserModule>;
|
|
24
|
+
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export * from './lib/aigc';
|
|
|
2
2
|
export * from './lib/map';
|
|
3
3
|
export * from './lib/storage';
|
|
4
4
|
export * from './lib/platform';
|
|
5
|
-
export * from './lib/user';
|
|
6
5
|
export * from './lib/social';
|
|
7
6
|
export * from './lib/video';
|
|
8
7
|
export * from "./lib/nova-cloud";
|
|
8
|
+
export * from './lib/user';
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
-
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
-
* 保留所有权利 All Rights Reserved.
|
|
6
|
-
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/user/account.service.mjs
|
|
7
|
-
*/
|
|
8
|
-
import{Injectable}from"@angular/core";import{NovaCloudService}from"../nova-cloud/nova-cloud.service";import Parse from"parse";import{AuthService}from"./auth.service";import{HttpClient}from"@angular/common/http";import*as i0 from"@angular/core";import*as i1 from"../nova-cloud/nova-cloud.service";import*as i2 from"./auth.service";import*as i3 from"@angular/common/http";export class AccountService{constructor(e,t,o){this.ncloud=e,this.authServ=t,this.http=o,this.company="",this.billing={credit:{usedDetail:{}}},this.wxAppId="",this.wxpayEnabled=!1,this.appid="wxb4193c93ae9aa696",this.company=this.authServ.company||localStorage.getItem("company"),this.getBilling(),this.getProfile(),this.getUserOpenid()}async getProfile(){let e=Parse.User.current()?.id;if(!e)return;let t=new Parse.Query("Profile");t.equalTo("user",e),t.equalTo("company",this.company),t.notEqualTo("isDeleted",!0);let o=await t.first();o?.id&&(this.profile=o)}async getBilling(){let e;try{e=await this.ncloud.apig("aigc/account",null,"get")}catch(e){}return e?.credit&&(this.billing=e),e}async getUserOpenid(){let e=-1!=navigator.userAgent.toLowerCase().indexOf("micromessenger"),t=this.getQueryStringByName("code"),o=localStorage.getItem("openid");if(!o){if(!Parse.User.current())return;let i=Parse.User.current().get("wechat");o=i?.[this.appid]?.openid,e&&(t?await this.getwechat(t):this.authWechat())}}authWechat(e="/account/billing"){if(!localStorage.getItem("openid")){let t="https://ai.fmode.cn"+e;return t=encodeURIComponent(t),void(window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+this.appid+"&redirect_uri="+t+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect")}}getQueryStringByName(e){let t=location.search.match(new RegExp("[?&]"+e+"=([^&]+)","i"));return null==t||t.length<1?"":t[1]}async getwechat(e,t="/account/billing"){return new Promise((async(o,i)=>{this.http.post("https://server.fmode.cn/api/wechat/get_wx",{company:this.company,code:e}).subscribe((async e=>{if(console.log(e),e&&200==e.code&&e.data.openid){let t=e.data.openid;localStorage.setItem("openid",t),localStorage.removeItem("code");let i={};i[this.appid]={openid:t},Parse.User.current().set("wechat",i),await Parse.User.current().save(),o(!0)}}),(async e=>{console.log("Error updating items",e),this.authWechat(t),i(!1)}))}))}getWXSignPackageInWechat(){let e={company:this.company,href:encodeURIComponent(location.href.split("?")[0])};this.http.post("https://server.fmode.cn/api/wechat/getconfig",e).subscribe((e=>{const t=e.data;this.wxAppId=t.appid,this.wxpayEnabled=!0,wx.config({debug:!1,appId:t.appid,timestamp:t.timestamp,nonceStr:t.nonceStr,signature:t.signature,jsApiList:["chooseWXPay","onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareQZone","updateAppMessageShareData","updateTimelineShareData"]});let o="https://ai.fmode.cn";location.pathname;Parse.User.current()?.id;let i=this.shareInfo||{title:"飞码AI",desc:"解放创意引领未来|国际前沿的AIGC平台",link:o,type:"link",imgUrl:"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png",success:function(){console.log("分享成功")},error:function(){console.log("分享失败")},cancel:function(){console.log("取消分享")}};wx.ready((()=>{wx.updateAppMessageShareData(i),wx.updateTimelineShareData(i)})),wx.error((()=>{}))}))}async saveAccountLog(e,t,o,i){return new Promise(((a,r)=>{this.http.post("https://test.fmode.cn/api/apig/saveAccountLog",{company:o,uid:Parse.User.current().id,orderid:t,info:e}).subscribe((e=>{console.log(e),a(!0)}),(e=>{console.warn(e),i&&i.error("请求超时,请稍后再试"),r()}))}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,deps:[{token:i1.NovaCloudService},{token:i2.AuthService},{token:i3.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.NovaCloudService},{type:i2.AuthService},{type:i3.HttpClient}]});
|
|
9
|
-
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL2FjY291bnQuc2VydmljZS5tanM=`
|
|
10
|
-
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
-
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
-
* 保留所有权利 All Rights Reserved.
|
|
6
|
-
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/user/auth.service.mjs
|
|
7
|
-
*/
|
|
8
|
-
import{Injectable}from"@angular/core";import Parse from"parse";import{Router}from"@angular/router";import{NovaCloudService}from"../nova-cloud/";import{HttpClient}from"@angular/common/http";import{catchError}from"rxjs/operators";import*as i0 from"@angular/core";import*as i1 from"@angular/router";import*as i2 from"../nova-cloud/";import*as i3 from"@angular/common/http";Parse.applicationId||(Parse.initialize("ncloudmaster"),Parse.serverURL=(Parse.serverURL?.split("parse")?.[0]||"https://server.fmode.cn/")+"parse");export class AuthService{isGuardLock(e){let t=!0,r=Parse.User.current();return t=!r?.id&&this.guardMap[e],t}get logoUrl(){return localStorage.getItem("LOGO_URL")||this._logoUrl||"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png"}set logoUrl(e){localStorage.setItem("LOGO_URL",e),this._logoUrl=this._logoUrl}getCompanyId(){let e=localStorage.getItem("company");return e=this.company||e,e}constructor(e,t,r){this.router=e,this.novaCloud=t,this.http=r,this.guardMap={},this.isModalShow=!1,this._logoUrl="https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png",this.isLoggedIn=!1,this.LoginPage="/pcuser/login",this.mobileUserMap={}}init(e){this.company=e.company,this.guardType=e.guardType,this.saveParamsInvite()}checkLoginLock(){let e=Parse.User.current();return!!e?.id||(this.isModalShow=!0,this.isLoggedIn=!1,!1)}checkLogin(e){this.guardMap[e]=!0;let t=Parse.User.current();return console.log("currentUser",t),t&&t.id?(this.setAccount(t),this.isLoggedIn=!0,!0):this.guardType&&"page"!=this.guardType?"modal"==this.guardType?(this.isModalShow=!0,this.isLoggedIn=!1,!0):void 0:(this.redirectUrl=e,this.router.navigate([this.LoginPage]),!1)}async setAccount(e){if(this.account?.id)return;let t=Parse.Object.extend("Account"),r=e?.get("company")||{__type:"Pointer",className:"Company",objectId:this.getCompanyId()}||null,o=new Parse.Query("Account");o.equalTo("user",e.toPointer());let i=await o.first();return i?.id||(i=new t,i.set({user:e.toPointer(),company:r}),i=await i.save()),this.account=i,i}login(e,t){return new Promise(((r,o)=>{Parse.User.logIn(e,t).then((async e=>{if(this.bindInvite(e),this.setCurrentUserLocalStorage(e),"modal"==this.guardType)return await this.refreshPage(),void r(!0);let t=new Parse.Query("Company");t.select("rootPage"),t.equalTo("objectId",e?.get("company")?.id);let o=await t.first(),i=o?.get("rootPage");this.redirectUrl=this.redirectUrl||i||"/project/dashboard";let a=this.redirectUrl;a=decodeURIComponent(a),this.router.navigate([a])})).catch((e=>{console.error(e),o({message:"无此用户信息,请先在小程序登录"})}))}))}refreshPage(){return new Promise((e=>{let t=this.router.url;Parse.User.current()?.id&&(this.isModalShow=!1),this.router.navigateByUrl("/",{skipLocationChange:!0}).then((()=>{this.router.navigateByUrl(t).then((()=>{e(!0)}))}))}))}setCurrentUserLocalStorage(e){e.get("company")?.id&&localStorage.setItem("company",e.get("company")?.id)}logout(e,t){let r=localStorage.getItem("company");localStorage.clear(),localStorage.setItem("company",r),Parse.User.logOut().then((e=>{this.router.navigate([t||"/pcuser/login"])}))}async loginMobilePassword(e,t,r){let o=await this.getMobileUser(e);o?this.login(o,t).then((async e=>{this.isModalShow=!1})).catch((e=>{console.log(e),r.create("error","错误的用户名或密码")})):r.create("error","用户不存在,请尝试其他登录方式")}signMobilePassword(e,t){return new Promise(((r,o)=>{Parse.User.signUp(this.getCompanyId()+"-"+e,t,"").then((async t=>{t.id&&(console.log(t),t.set("company",{__type:"Pointer",className:"Company",objectId:this.getCompanyId()}),t.set("mobile",e),t.set("type","user"),this.bindInvite(t),t=await t.save(),r(t))})).catch((e=>{o(e)}))}))}async getMobileUser(e){let t=this.getCompanyId(),r=t+e;if(this.mobileUserMap[r])return this.mobileUserMap[r];let o=await this.novaCloud.api("/auth/getusername",{company:t,mobile:e});return o?.username&&(this.mobileUserMap[r]=o?.username),this.mobileUserMap[r]}async loginCode(e,t,r){return new Promise(((o,i)=>{if(!t)return r?.create("error","请填写有效验证码"),void i();let a=Parse.serverURL?.split("parse")?.[0]||"https://server.fmode.cn/";this.http.get(a+`api/auth/mobile?company=${this.company}&mobile=${e}&code=${t}`,{}).pipe(catchError((async e=>{console.log(e),r?.create("error","登录失败:"+e.error.mess),i()}))).subscribe((e=>{200==e.code?Parse.User.become(e.data.token).then((async e=>{if(console.log(e),e.id)return this.bindInvite(e),void o(!0);r?.create("error","登录失败"),i()})):(r?.create("error","登录失败"),i())}))}))}saveParamsInvite(){let e=this.novaCloud.searchParse();console.log("saveParamsInvite",e);let t=e?.invite;console.log(t),t&&localStorage.setItem("invite",e?.invite)}bindInvite(e){if(!(e=e||Parse.User.current()))return;if(e?.get("invite")?.id)return;let t=localStorage.getItem("invite");t&&this.novaCloud.api("/auth/invite",{current:e?.id,invite:t,type:"code"})}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthService,deps:[{token:i1.Router},{token:i2.NovaCloudService},{token:i3.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.Router},{type:i2.NovaCloudService},{type:i3.HttpClient}]});
|
|
9
|
-
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL2F1dGguc2VydmljZS5tanM=`
|
|
10
|
-
|