fmode-ng 0.0.41 → 0.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/LICENSE.md +8 -0
  2. package/esm2022/fmode-ng.mjs +10 -5
  3. package/esm2022/lib/aigc/agent/agent.prompt.mjs +10 -122
  4. package/esm2022/lib/aigc/agent/index.mjs +10 -2
  5. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  6. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  10. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -97
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -104
  12. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -111
  13. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  14. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  15. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -166
  16. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -36
  17. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  18. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -141
  19. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  20. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  21. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  22. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -92
  23. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -2
  24. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -2
  25. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -207
  26. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -236
  27. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +10 -137
  28. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -69
  29. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  30. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  31. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  32. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -269
  33. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  35. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -94
  36. package/esm2022/lib/aigc/index.mjs +10 -13
  37. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  38. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +8 -736
  39. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -181
  40. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  41. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  42. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  43. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  44. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  45. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -229
  46. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -2
  47. package/esm2022/lib/aigc/voice/audio.player.mjs +10 -52
  48. package/esm2022/lib/aigc/voice/class-asr.mjs +8 -79
  49. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +8 -501
  50. package/esm2022/lib/aigc/voice/index.mjs +10 -3
  51. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  52. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  53. package/esm2022/lib/aigc/voice/stream.player.mjs +10 -0
  54. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +8 -233
  55. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -2
  56. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -190
  57. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  58. package/esm2022/lib/map/index.mjs +10 -4
  59. package/esm2022/lib/map/map.module.mjs +10 -61
  60. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -110
  61. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -98
  62. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -100
  63. package/esm2022/lib/nova-cloud/index.mjs +10 -2
  64. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -148
  65. package/esm2022/lib/platform/cross.service.mjs +10 -63
  66. package/esm2022/lib/platform/index.mjs +10 -2
  67. package/esm2022/lib/social/index.mjs +10 -2
  68. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -236
  69. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  70. package/esm2022/lib/storage/index.mjs +10 -5
  71. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -130
  72. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  73. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -462
  74. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  75. package/esm2022/lib/storage/storage.module.mjs +10 -41
  76. package/esm2022/lib/user/account/account.service.mjs +10 -221
  77. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  78. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -62
  79. package/esm2022/lib/user/index.mjs +10 -17
  80. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  81. package/esm2022/lib/user/login/auth.service.mjs +8 -373
  82. package/esm2022/lib/user/login/login.component.mjs +10 -913
  83. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -273
  84. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  85. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  86. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -115
  87. package/esm2022/lib/user/profile/profile.module.mjs +10 -57
  88. package/esm2022/lib/user/staff/index.mjs +10 -4
  89. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  90. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  91. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  92. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  93. package/esm2022/lib/user/user.module.mjs +10 -106
  94. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  95. package/esm2022/lib/video/index.mjs +10 -2
  96. package/esm2022/public-api.mjs +10 -13
  97. package/fesm2022/fmode-ng.mjs +7 -8895
  98. package/fesm2022/fmode-ng.mjs.map +1 -1
  99. package/lib/aigc/voice/stream.player.d.ts +10 -0
  100. package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
  101. package/package.json +1 -1
@@ -1,273 +1,10 @@
1
- import { Component, HostListener, ViewChild, 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 { CommonModule } from "@angular/common";
7
- import { FormsModule, ReactiveFormsModule } from "@angular/forms";
8
- import Parse from "parse";
9
- import { IonCheckbox, ToastController } from "@ionic/angular/standalone";
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "ng-zorro-antd/message";
12
- import * as i2 from "../login/auth.service";
13
- import * as i3 from "@angular/router";
14
- import * as i4 from "@angular/common/http";
15
- import * as i5 from "@ionic/angular/standalone";
16
- import * as i6 from "@angular/common";
17
- import * as i7 from "@angular/forms";
18
- export class ModalUserLoginComponent {
19
- constructor(msg, authServ, router, http, toastCtrl) {
20
- this.msg = msg;
21
- this.authServ = authServ;
22
- this.router = router;
23
- this.http = http;
24
- this.toastCtrl = toastCtrl;
25
- // 用户协议
26
- this.isUserRuleChecked = false;
27
- this.loginInfo = {
28
- mobile: "",
29
- code: "",
30
- };
31
- // enabledLocalCode:boolean = false; // 开启验证码
32
- this.localCodeNum = ''; //输入校验码
33
- //发送验证码倒计时
34
- this.countdown = 60;
35
- this.buttonText = "获取验证码";
36
- //添加倒计时开始和结束的判断
37
- this.isCountingdown = false;
38
- this.drawCode = [];
39
- // document.body.classList.add("dark");
40
- }
41
- ngOnInit() {
42
- this.close();
43
- }
44
- ngAfterViewInit() {
45
- // this.updateDrawCode()
46
- this.setActiveButton(this.authServ.activeButton);
47
- }
48
- // 手机+密码注册
49
- signMobilePassword() {
50
- if (!this.mobile || !this.password) {
51
- this.msg.error("请输入完整手机号和密码");
52
- return;
53
- }
54
- if (this.password != this.password2) {
55
- this.msg.error("两次输入密码不同,请检查");
56
- return;
57
- }
58
- this.authServ
59
- .signMobilePassword(this.mobile, this.password)
60
- .then((res) => {
61
- if (res?.id) {
62
- this.setActiveButton("账号密码");
63
- }
64
- })
65
- .catch((error) => {
66
- this.msg.error("注册失败,请更换手机号注册");
67
- });
68
- }
69
- // 手机+密码登录
70
- loginMobilePassword() {
71
- if (!this.mobile || !this.password) {
72
- this.msg.error("请输入完整手机号和密码");
73
- return;
74
- }
75
- this.authServ.loginMobilePassword(this.mobile, this.password, this.msg);
76
- }
77
- close() {
78
- let lock = this.authServ.isGuardLock(this.router.url);
79
- this.authServ.isModalShow = lock;
80
- }
81
- goHome() {
82
- let url = this.router.url;
83
- if (url?.indexOf("yuban")) {
84
- this.router.navigateByUrl("/app/home");
85
- }
86
- if (url.indexOf("chat") > -1) {
87
- this.router.navigateByUrl("/chat/home");
88
- this.authServ.isModalShow = false;
89
- return;
90
- }
91
- if (url.indexOf("imagine") > -1) {
92
- this.router.navigateByUrl("/imagine/home");
93
- this.authServ.isModalShow = false;
94
- return;
95
- }
96
- this.router.navigateByUrl("/");
97
- this.authServ.isModalShow = false;
98
- return;
99
- }
100
- //添加监听Esc按键关闭弹窗
101
- handleEscapeKey(event) {
102
- // this.closePopup();
103
- this.close();
104
- }
105
- setActiveButton(buttonName) {
106
- this.authServ.activeButton = buttonName;
107
- console.log(this.authServ.activeButton);
108
- this.updateDrawCode();
109
- }
110
- /* 获取验证码 */
111
- startCountdown() {
112
- let a = /^1[3456789]\d{9}$/;
113
- if (!String(this.loginInfo.mobile).match(a)) {
114
- this.msg.error("请填写正确手机号");
115
- return;
116
- }
117
- let str = this.drawCode.join('');
118
- if (this.authServ.enabledLocalCode) {
119
- if (this.localCodeNum.toLowerCase() != str.toLowerCase()) {
120
- this.msg.error("校验码不正确");
121
- return;
122
- }
123
- }
124
- let host = Parse.serverURL?.split("parse")?.[0] || "https://server.fmode.cn/";
125
- this.http
126
- .post(host + "api/apig/message", {
127
- company: this.authServ.company,
128
- mobile: this.loginInfo.mobile,
129
- })
130
- .subscribe((res) => {
131
- console.log(res);
132
- this.msg.success('发送成功');
133
- this.isCountingdown = true;
134
- this.time();
135
- this.updateDrawCode();
136
- });
137
- }
138
- /* 倒计时 */
139
- time() {
140
- this.isCountingdown = true;
141
- this.buttonText = `${this.countdown}秒`;
142
- let timer = setInterval(() => {
143
- this.countdown--;
144
- this.buttonText = `${this.countdown}秒`;
145
- if (this.countdown === 0 || this.countdown < 0) {
146
- clearInterval(timer);
147
- this.buttonText = "重新发送";
148
- this.isCountingdown = false;
149
- this.countdown = 0;
150
- }
151
- }, 1000);
152
- }
153
- /* 验证码登录 */
154
- async login() {
155
- let a = /^1[3456789]\d{9}$/;
156
- if (!String(this.loginInfo.mobile).match(a)) {
157
- this.msg.error("请填写正确手机号");
158
- return;
159
- }
160
- // let str = this.drawCode.join();
161
- // if (this.localCodeNum != str) {
162
- // this.msg.error("校验码不正确");
163
- // return;
164
- // }
165
- if (!this.loginInfo.code) {
166
- this.msg.error("请输入短信验证码");
167
- return;
168
- }
169
- let res;
170
- try {
171
- res = await this.authServ.loginCode(this.loginInfo.mobile, this.loginInfo.code, this.msg);
172
- }
173
- catch (err) { }
174
- let user = Parse.User.current();
175
- if (res || user?.id) {
176
- console.log(res, user?.id, "close");
177
- this.close();
178
- this.loginInfo = {
179
- mobile: "",
180
- code: "",
181
- };
182
- this.localCodeNum = '';
183
- this.toast({ color: "success", message: "登录成功" });
184
- }
185
- }
186
- async toast(options) {
187
- options.position = options?.position || "top";
188
- options.duration = options?.duration || 1500;
189
- options.color = options?.color || "primary";
190
- let toast = await this.toastCtrl.create(options);
191
- toast.present();
192
- }
193
- updateDrawCode() {
194
- if (!this.authServ.enabledLocalCode)
195
- return;
196
- let canvas_width = 100;
197
- let canvas_height = 44;
198
- let canv = document.getElementById("canvas");
199
- if (canv)
200
- this.canvasDom.nativeElement.removeChild(canv);
201
- this.canvasDom.nativeElement;
202
- let canvas = document.createElement("canvas");
203
- canvas.width = 100;
204
- canvas.height = 44;
205
- canvas.className = "canvas";
206
- canvas.setAttribute("id", "canvas");
207
- canvas.addEventListener("click", () => {
208
- this.updateDrawCode();
209
- });
210
- let context = canvas.getContext("2d"); //获取到canvas画图的环境,演员表演的舞台
211
- canvas.width = canvas_width;
212
- canvas.height = canvas_height;
213
- let sCode = "A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m";
214
- let aCode = sCode.split(",");
215
- let aLength = aCode.length; //获取到数组的长度
216
- for (let i = 0; i <= 3; i++) {
217
- let j = Math.floor(Math.random() * aLength); //获取到随机的索引值
218
- let deg = (Math.random() * 30 * Math.PI) / 180; //产生0~30之间的随机弧度
219
- let txt = aCode[j]; //得到随机的一个内容
220
- this.drawCode[i] = txt;
221
- let x = 10 + i * 20; //文字在canvas上的x坐标
222
- let y = 20 + Math.random() * 8; //文字在canvas上的y坐标
223
- context.font = "bold 23px 微软雅黑";
224
- context.translate(x, y);
225
- context.rotate(deg);
226
- context.fillStyle = this.randomColor();
227
- context.fillText(txt, 0, 0);
228
- context.rotate(-deg);
229
- context.translate(-x, -y);
230
- }
231
- for (let i = 0; i <= 5; i++) {
232
- //验证码上显示线条
233
- context.strokeStyle = this.randomColor();
234
- context.beginPath();
235
- context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
236
- context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
237
- context.stroke();
238
- }
239
- for (let i = 0; i <= 30; i++) {
240
- //验证码上显示小点
241
- context.strokeStyle = this.randomColor();
242
- context.beginPath();
243
- let x = Math.random() * canvas_width;
244
- let y = Math.random() * canvas_height;
245
- context.moveTo(x, y);
246
- context.lineTo(x + 1, y + 1);
247
- context.stroke();
248
- }
249
- this.canvasDom.nativeElement.appendChild(canvas);
250
- }
251
- /* 得到随机的颜色值 */
252
- randomColor() {
253
- let r = Math.floor(Math.random() * 256);
254
- let g = Math.floor(Math.random() * 256);
255
- let b = Math.floor(Math.random() * 256);
256
- return "rgb(" + r + "," + g + "," + b + ")";
257
- }
258
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalUserLoginComponent, deps: [{ token: i1.NzMessageService }, { token: i2.AuthService }, { token: i3.Router }, { token: i4.HttpClient }, { token: i5.ToastController }], target: i0.ɵɵFactoryTarget.Component }); }
259
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ModalUserLoginComponent, isStandalone: true, selector: "fm-modal-user-login", host: { listeners: { "document:keydown.escape": "handleEscapeKey($event)" } }, viewQueries: [{ propertyName: "canvasDom", first: true, predicate: ["canvasDom"], descendants: true }], ngImport: i0, template: "<!--\u767B\u5F55\u5F39\u51FA\u6846\u8BBE\u7F6E-->\n<!--\u80CC\u666F\u7070\u8272\u8499\u7248-->\n<div\n class=\"popup\"\n [style.display]=\"authServ.isModalShow ? 'block' : 'none'\"\n (click)=\"close()\"\n>\n <div class=\"popup-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"popup-box\">\n <!--\u5F39\u6846\u5185\u8BBE\u7F6Eposition:absolute,\u89C4\u8303\u6392\u7248\uFF0C\u540E\u7EED\u53EA\u9700position:relative\u589E\u51CF\u5185\u5BB9-->\n <div class=\"popup-box-content\">\n <div class=\"logo-img-login\">\n <img\n [src]=\"authServ.logoUrl\"\n alt=\"fmode\"\n />\n </div>\n\n <!--\u5173\u95ED\u56FE\u6807\u6309\u94AE-->\n <div class=\"close-icon-box\">\n <div class=\"iconfont icon-shanchu2\" (click)=\"close()\"></div>\n </div>\n\n <!--\u6309\u94AE\u5207\u6362\u767B\u5F55\u65B9\u5F0F-->\n <div class=\"button-box\" *ngIf=\"authServ?.loginTypeCount>1\">\n <div class=\"button-group\">\n <button *ngIf=\"authServ?.loginOptions?.userpwd\"\n class=\"login-select-button\"\n [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\"\n (click)=\"setActiveButton('\u8D26\u53F7\u5BC6\u7801')\"\n >\n \u8D26\u53F7\u5BC6\u7801\n </button>\n <button *ngIf=\"authServ?.loginOptions?.mobilecode\"\n class=\"login-select-button\"\n [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\"\n (click)=\"setActiveButton('\u77ED\u4FE1\u9A8C\u8BC1')\"\n >\n \u77ED\u4FE1\u9A8C\u8BC1\n </button>\n <button *ngIf=\"authServ?.loginOptions?.wechat\"\n class=\"login-select-button\"\n [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\"\n (click)=\"setActiveButton('\u5FAE\u4FE1\u626B\u7801')\"\n >\n \u5FAE\u4FE1\u626B\u7801\n </button>\n </div>\n </div>\n\n <!--\u624B\u673A\u9A8C\u8BC1\u7801-->\n <form class=\"message-form\" [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\" *ngIf=\"authServ?.loginOptions?.mobilecode\">\n <div class=\"login-input-box\">\n <div class=\"popup-input-frontnumber\">+86</div>\n <input\n class=\"popup-input-itemone\"\n type=\"text\"\n required=\"required\"\n [(ngModel)]=\"loginInfo.mobile\"\n [ngModelOptions]=\"{ standalone: true }\"\n maxlength=\"12\"\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\n />\n </div>\n <div *ngIf=\"authServ?.enabledLocalCode\"\n class=\"login-input-box local-code\" #canvasDom>\n <input\n class=\"popup-input-itemtwo\"\n type=\"text\"\n required=\"required\"\n [(ngModel)]=\"localCodeNum\"\n [ngModelOptions]=\"{ standalone: true }\"\n maxlength=\"4\"\n placeholder=\"\u8BF7\u8F93\u5165\u6821\u9A8C\u7801\"\n />\n <!-- <canvas\n #canvas\n width=\"100\"\n height=\"44\"\n (click)=\"updateDrawCode()\"\n class=\"canvas\"\n ></canvas> -->\n </div>\n <div class=\"login-input-box\">\n <input\n class=\"popup-input-itemtwo\"\n type=\"text\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u77ED\u4FE1\u9A8C\u8BC1\u7801\"\n [(ngModel)]=\"loginInfo.code\"\n [ngModelOptions]=\"{ standalone: true }\"\n maxlength=\"8\"\n />\n <button\n class=\"checknumber-button\"\n type=\"submit\"\n [value]=\"buttonText\"\n [disabled]=\"isCountingdown\"\n (click)=\"startCountdown()\"\n [class.active]=\"isCountingdown\"\n >\n {{buttonText}}\n </button>\n </div>\n\n <!-- \u7528\u6237\u534F\u8BAE -->\n <div class=\"rule-box\">\n <span>\u672A\u6CE8\u518C\u7684\u624B\u673A\u53F7\uFF0C\u5C06\u81EA\u52A8\u521B\u5EFA\u5E10\u53F7\u5E76\u767B\u5F55\u3002</span>\n </div>\n\n <div class=\"login-submit-box\">\n <button class=\"login-submit-button\" type=\"submit\" (click)=\"login()\">\n \u767B\u5F55\n </button>\n </div>\n </form>\n\n <!--\u8D26\u53F7\u5BC6\u7801\u767B\u5F55-->\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\" *ngIf=\"authServ?.loginOptions?.userpwd\">\n <div class=\"login-input-box\">\n <input\n maxlength=\"12\"\n [(ngModel)]=\"mobile\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"text\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\n />\n </div>\n\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"password\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"password\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\n />\n </div>\n\n <!-- \u8BB0\u4F4F\u5BC6\u7801 -->\n <div class=\"passwprd-box\">\n <div class=\"remember-password-box\">\n <input type=\"checkbox\" id=\"remember-password\" />\n \u8BB0\u4F4F\u5BC6\u7801\n </div>\n\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\n <div class=\"password-forget\" (click)=\"setActiveButton('\u6CE8\u518C\u5E10\u53F7')\">\n \u6CE8\u518C\u5E10\u53F7\n </div>\n </div>\n\n <!-- \u7528\u6237\u534F\u8BAE -->\n <div class=\"rule-box\">\n <span>\n <input type=\"checkbox\" [(ngModel)]=\"isUserRuleChecked\" [ngModelOptions]=\"{ standalone: true }\" style=\"margin-right:5px\"/>\n <span (click)=\"isUserRuleChecked=true\">\u540C\u610F</span></span>\n <span (click)=\"isUserRuleChecked=true\">\u300A\u7528\u6237\u534F\u8BAE\u53CA\u9690\u79C1\u6761\u6B3E\u300B</span>\n </div>\n\n\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\n <!-- <div class=\"password-forget\">\u5FD8\u8BB0\u5BC6\u7801?</div>\n </div> -->\n\n <div class=\"login-submit-box\">\n <button\n class=\"login-submit-button\"\n type=\"submit\"\n (click)=\"loginMobilePassword()\"\n >\n \u767B\u5F55\n </button>\n </div>\n </form>\n\n <!-- \u5E10\u53F7\u5BC6\u7801\u6CE8\u518C -->\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u6CE8\u518C\u5E10\u53F7'\">\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"mobile\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"text\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\n />\n </div>\n\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"password\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"password\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\n />\n </div>\n\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"password2\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"password\"\n required=\"required\"\n placeholder=\"\u8BF7\u518D\u6B21\u8F93\u5165\u5BC6\u7801\"\n />\n </div>\n\n <div class=\"login-submit-box\">\n <button\n class=\"login-submit-button\"\n type=\"submit\"\n (click)=\"signMobilePassword()\"\n >\n \u6CE8\u518C\n </button>\n </div>\n </form>\n\n <!--\u5FAE\u4FE1\u626B\u7801\u767B\u9646-->\n <form class=\"wechat-form\" [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\" *ngIf=\"authServ?.loginOptions?.wechat\">\n <div class=\"wechat-login-box\">\n <img\n class=\"login-erweima-img\"\n [src]=\"authServ.wechatUrl\"\n alt=\"\u5FAE\u4FE1\u626B\u7801\u767B\u9646\u4E8C\u7EF4\u7801\"\n />\n </div>\n <div class=\"wechat-explain\">\u4F7F\u7528\u5FAE\u4FE1\u626B\u4E00\u626B,\u626B\u7801\u767B\u5F55 \"\u98DE\u7801AI\"</div>\n </form>\n\n <!--\u8FD4\u56DE\u9996\u9875-->\n <div class=\"back-home-box\" *ngIf=\"authServ.showBackHome\">\n <button class=\"back-homepage-button\" (click)=\"goHome()\">\n \u8FD4\u56DE\u9996\u9875\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--fmode-color-primary: #0199f9;--fmode-background-primary: #FFF}:host-context(body.dark) .popup{--fmode-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:10000}@media screen and (max-width: 800px){.popup-content .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:#1e90ff;overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;padding-top:32px;padding-right:59px;padding-left:59px;border-radius:10px;width:100%;height:72px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--fmode-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#f902ff,#f902ff);transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#00dbde,#00dbde);transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--fmode-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--fmode-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .mobile-form .rule-box span,.popup-content .mobile-form .rule-box ion-checkbox{font-size:15px;color:var(--fmode-color-primary)}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--fmode-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
260
- }
261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalUserLoginComponent, decorators: [{
262
- type: Component,
263
- args: [{ standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule,
264
- IonCheckbox
265
- ], selector: "fm-modal-user-login", template: "<!--\u767B\u5F55\u5F39\u51FA\u6846\u8BBE\u7F6E-->\n<!--\u80CC\u666F\u7070\u8272\u8499\u7248-->\n<div\n class=\"popup\"\n [style.display]=\"authServ.isModalShow ? 'block' : 'none'\"\n (click)=\"close()\"\n>\n <div class=\"popup-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"popup-box\">\n <!--\u5F39\u6846\u5185\u8BBE\u7F6Eposition:absolute,\u89C4\u8303\u6392\u7248\uFF0C\u540E\u7EED\u53EA\u9700position:relative\u589E\u51CF\u5185\u5BB9-->\n <div class=\"popup-box-content\">\n <div class=\"logo-img-login\">\n <img\n [src]=\"authServ.logoUrl\"\n alt=\"fmode\"\n />\n </div>\n\n <!--\u5173\u95ED\u56FE\u6807\u6309\u94AE-->\n <div class=\"close-icon-box\">\n <div class=\"iconfont icon-shanchu2\" (click)=\"close()\"></div>\n </div>\n\n <!--\u6309\u94AE\u5207\u6362\u767B\u5F55\u65B9\u5F0F-->\n <div class=\"button-box\" *ngIf=\"authServ?.loginTypeCount>1\">\n <div class=\"button-group\">\n <button *ngIf=\"authServ?.loginOptions?.userpwd\"\n class=\"login-select-button\"\n [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\"\n (click)=\"setActiveButton('\u8D26\u53F7\u5BC6\u7801')\"\n >\n \u8D26\u53F7\u5BC6\u7801\n </button>\n <button *ngIf=\"authServ?.loginOptions?.mobilecode\"\n class=\"login-select-button\"\n [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\"\n (click)=\"setActiveButton('\u77ED\u4FE1\u9A8C\u8BC1')\"\n >\n \u77ED\u4FE1\u9A8C\u8BC1\n </button>\n <button *ngIf=\"authServ?.loginOptions?.wechat\"\n class=\"login-select-button\"\n [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\"\n (click)=\"setActiveButton('\u5FAE\u4FE1\u626B\u7801')\"\n >\n \u5FAE\u4FE1\u626B\u7801\n </button>\n </div>\n </div>\n\n <!--\u624B\u673A\u9A8C\u8BC1\u7801-->\n <form class=\"message-form\" [class.active]=\"authServ.activeButton === '\u77ED\u4FE1\u9A8C\u8BC1'\" *ngIf=\"authServ?.loginOptions?.mobilecode\">\n <div class=\"login-input-box\">\n <div class=\"popup-input-frontnumber\">+86</div>\n <input\n class=\"popup-input-itemone\"\n type=\"text\"\n required=\"required\"\n [(ngModel)]=\"loginInfo.mobile\"\n [ngModelOptions]=\"{ standalone: true }\"\n maxlength=\"12\"\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\n />\n </div>\n <div *ngIf=\"authServ?.enabledLocalCode\"\n class=\"login-input-box local-code\" #canvasDom>\n <input\n class=\"popup-input-itemtwo\"\n type=\"text\"\n required=\"required\"\n [(ngModel)]=\"localCodeNum\"\n [ngModelOptions]=\"{ standalone: true }\"\n maxlength=\"4\"\n placeholder=\"\u8BF7\u8F93\u5165\u6821\u9A8C\u7801\"\n />\n <!-- <canvas\n #canvas\n width=\"100\"\n height=\"44\"\n (click)=\"updateDrawCode()\"\n class=\"canvas\"\n ></canvas> -->\n </div>\n <div class=\"login-input-box\">\n <input\n class=\"popup-input-itemtwo\"\n type=\"text\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u77ED\u4FE1\u9A8C\u8BC1\u7801\"\n [(ngModel)]=\"loginInfo.code\"\n [ngModelOptions]=\"{ standalone: true }\"\n maxlength=\"8\"\n />\n <button\n class=\"checknumber-button\"\n type=\"submit\"\n [value]=\"buttonText\"\n [disabled]=\"isCountingdown\"\n (click)=\"startCountdown()\"\n [class.active]=\"isCountingdown\"\n >\n {{buttonText}}\n </button>\n </div>\n\n <!-- \u7528\u6237\u534F\u8BAE -->\n <div class=\"rule-box\">\n <span>\u672A\u6CE8\u518C\u7684\u624B\u673A\u53F7\uFF0C\u5C06\u81EA\u52A8\u521B\u5EFA\u5E10\u53F7\u5E76\u767B\u5F55\u3002</span>\n </div>\n\n <div class=\"login-submit-box\">\n <button class=\"login-submit-button\" type=\"submit\" (click)=\"login()\">\n \u767B\u5F55\n </button>\n </div>\n </form>\n\n <!--\u8D26\u53F7\u5BC6\u7801\u767B\u5F55-->\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u8D26\u53F7\u5BC6\u7801'\" *ngIf=\"authServ?.loginOptions?.userpwd\">\n <div class=\"login-input-box\">\n <input\n maxlength=\"12\"\n [(ngModel)]=\"mobile\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"text\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\n />\n </div>\n\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"password\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"password\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\n />\n </div>\n\n <!-- \u8BB0\u4F4F\u5BC6\u7801 -->\n <div class=\"passwprd-box\">\n <div class=\"remember-password-box\">\n <input type=\"checkbox\" id=\"remember-password\" />\n \u8BB0\u4F4F\u5BC6\u7801\n </div>\n\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\n <div class=\"password-forget\" (click)=\"setActiveButton('\u6CE8\u518C\u5E10\u53F7')\">\n \u6CE8\u518C\u5E10\u53F7\n </div>\n </div>\n\n <!-- \u7528\u6237\u534F\u8BAE -->\n <div class=\"rule-box\">\n <span>\n <input type=\"checkbox\" [(ngModel)]=\"isUserRuleChecked\" [ngModelOptions]=\"{ standalone: true }\" style=\"margin-right:5px\"/>\n <span (click)=\"isUserRuleChecked=true\">\u540C\u610F</span></span>\n <span (click)=\"isUserRuleChecked=true\">\u300A\u7528\u6237\u534F\u8BAE\u53CA\u9690\u79C1\u6761\u6B3E\u300B</span>\n </div>\n\n\n <!-- \u5FD8\u8BB0\u5BC6\u7801 -->\n <!-- <div class=\"password-forget\">\u5FD8\u8BB0\u5BC6\u7801?</div>\n </div> -->\n\n <div class=\"login-submit-box\">\n <button\n class=\"login-submit-button\"\n type=\"submit\"\n (click)=\"loginMobilePassword()\"\n >\n \u767B\u5F55\n </button>\n </div>\n </form>\n\n <!-- \u5E10\u53F7\u5BC6\u7801\u6CE8\u518C -->\n <form class=\"mobile-form\" [class.active]=\"authServ.activeButton === '\u6CE8\u518C\u5E10\u53F7'\">\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"mobile\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"text\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u53F7\"\n />\n </div>\n\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"password\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"password\"\n required=\"required\"\n placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\"\n />\n </div>\n\n <div class=\"login-input-box\">\n <input\n [(ngModel)]=\"password2\"\n [ngModelOptions]=\"{ standalone: true }\"\n class=\"popup-input-itemnomal\"\n type=\"password\"\n required=\"required\"\n placeholder=\"\u8BF7\u518D\u6B21\u8F93\u5165\u5BC6\u7801\"\n />\n </div>\n\n <div class=\"login-submit-box\">\n <button\n class=\"login-submit-button\"\n type=\"submit\"\n (click)=\"signMobilePassword()\"\n >\n \u6CE8\u518C\n </button>\n </div>\n </form>\n\n <!--\u5FAE\u4FE1\u626B\u7801\u767B\u9646-->\n <form class=\"wechat-form\" [class.active]=\"authServ.activeButton === '\u5FAE\u4FE1\u626B\u7801'\" *ngIf=\"authServ?.loginOptions?.wechat\">\n <div class=\"wechat-login-box\">\n <img\n class=\"login-erweima-img\"\n [src]=\"authServ.wechatUrl\"\n alt=\"\u5FAE\u4FE1\u626B\u7801\u767B\u9646\u4E8C\u7EF4\u7801\"\n />\n </div>\n <div class=\"wechat-explain\">\u4F7F\u7528\u5FAE\u4FE1\u626B\u4E00\u626B,\u626B\u7801\u767B\u5F55 \"\u98DE\u7801AI\"</div>\n </form>\n\n <!--\u8FD4\u56DE\u9996\u9875-->\n <div class=\"back-home-box\" *ngIf=\"authServ.showBackHome\">\n <button class=\"back-homepage-button\" (click)=\"goHome()\">\n \u8FD4\u56DE\u9996\u9875\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--fmode-color-primary: #0199f9;--fmode-background-primary: #FFF}:host-context(body.dark) .popup{--fmode-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:10000}@media screen and (max-width: 800px){.popup-content .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:#1e90ff;overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;padding-top:32px;padding-right:59px;padding-left:59px;border-radius:10px;width:100%;height:72px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--fmode-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#f902ff,#f902ff);transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:\"\";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#00dbde,#00dbde);transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--fmode-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--fmode-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .mobile-form .rule-box span,.popup-content .mobile-form .rule-box ion-checkbox{font-size:15px;color:var(--fmode-color-primary)}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:\"\";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--fmode-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n"] }]
266
- }], ctorParameters: () => [{ type: i1.NzMessageService }, { type: i2.AuthService }, { type: i3.Router }, { type: i4.HttpClient }, { type: i5.ToastController }], propDecorators: { canvasDom: [{
267
- type: ViewChild,
268
- args: ["canvasDom"]
269
- }], handleEscapeKey: [{
270
- type: HostListener,
271
- args: ["document:keydown.escape", ["$event"]]
272
- }] } });
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtdXNlci1sb2dpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3VzZXIvbW9kYWwtdXNlci1sb2dpbi9tb2RhbC11c2VyLWxvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdXNlci9tb2RhbC11c2VyLWxvZ2luL21vZGFsLXVzZXItbG9naW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBSVosU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFXekUsTUFBTSxPQUFPLHVCQUF1QjtJQWtCbEMsWUFDVSxHQUFxQixFQUN0QixRQUFxQixFQUNwQixNQUFjLEVBQ2QsSUFBaUIsRUFDakIsU0FBeUI7UUFKekIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFR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QUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzlDLENBQUM7K0dBblJVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHNRQzVCcEMseTRTQXVQQSx5OVFEbE9XLFlBQVksa0lBQUMsV0FBVyx3bERBQUMsbUJBQW1COzs0RkFPMUMsdUJBQXVCO2tCQVRuQyxTQUFTO2lDQUNHLElBQUksV0FDUCxDQUFDLFlBQVksRUFBQyxXQUFXLEVBQUMsbUJBQW1CO3dCQUNyRCxXQUFXO3FCQUNWLFlBQ1MscUJBQXFCOzJMQVlQLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFvRnRCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vbG9naW4vYXV0aC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvbWVzc2FnZVwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgUGFyc2UgZnJvbSBcInBhcnNlXCI7XG5pbXBvcnQgeyBJb25DaGVja2JveCwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmVcIjtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6dHJ1ZSxcbiAgaW1wb3J0czpbQ29tbW9uTW9kdWxlLEZvcm1zTW9kdWxlLFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIElvbkNoZWNrYm94XG4gIF0sXG4gIHNlbGVjdG9yOiBcImZtLW1vZGFsLXVzZXItbG9naW5cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9tb2RhbC11c2VyLWxvZ2luLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9tb2RhbC11c2VyLWxvZ2luLmNvbXBvbmVudC5zY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFVzZXJMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG1vYmlsZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBwYXNzd29yZDI6IHN0cmluZztcbiAgLy8g55So5oi35Y2P6K6uXG4gIGlzVXNlclJ1bGVDaGVja2VkOmJvb2xlYW4gPSBmYWxzZTtcbiAgLyog55+t5L+h6aqM6K+B56CB55m75b2V55u45YWz5Y+C5pWwICovXG4gIC8vIEBWaWV3Q2hpbGQoXCJjYW52YXNcIikgY2FudmFzOiBFbGVtZW50UmVmOyAvL+acrOWcsOagoemqjOeggee7mOeUu1xuICBAVmlld0NoaWxkKFwiY2FudmFzRG9tXCIpIGNhbnZhc0RvbTogRWxlbWVudFJlZjsgLy/mnKzlnLDmoKHpqoznoIHnu5jnlLtcbiAgbG9naW5JbmZvOiBhbnkgPSB7XG4gICAgbW9iaWxlOiBcIlwiLFxuICAgIGNvZGU6IFwiXCIsXG4gIH07XG5cbiAgLy8gZW5hYmxlZExvY2FsQ29kZTpib29sZWFuID0gZmFsc2U7IC8vIOW8gOWQr+mqjOivgeeggVxuICBsb2NhbENvZGVOdW06IHN0cmluZyA9ICcnOyAvL+i+k+WFpeagoemqjOeggVxuXG4gXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbXNnOiBOek1lc3NhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBhdXRoU2VydjogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGh0dHAgOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgdG9hc3RDdHJsOlRvYXN0Q29udHJvbGxlclxuICApIHtcbiAgICAvLyBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJkYXJrXCIpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgXG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLnVwZGF0ZURyYXdDb2RlKClcbiAgICB0aGlzLnNldEFjdGl2ZUJ1dHRvbih0aGlzLmF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbilcbiAgfVxuICAvLyDmiYvmnLor5a+G56CB5rOo5YaMXG4gIHNpZ25Nb2JpbGVQYXNzd29yZCgpIHtcbiAgICBpZiAoIXRoaXMubW9iaWxlIHx8ICF0aGlzLnBhc3N3b3JkKSB7XG4gICAgICB0aGlzLm1zZy5lcnJvcihcIuivt+i+k+WFpeWujOaVtOaJi+acuuWPt+WSjOWvhueggVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFzc3dvcmQgIT0gdGhpcy5wYXNzd29yZDIpIHtcbiAgICAgIHRoaXMubXNnLmVycm9yKFwi5Lik5qyh6L6T5YWl5a+G56CB5LiN5ZCM77yM6K+35qOA5p+lXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXV0aFNlcnZcbiAgICAgIC5zaWduTW9iaWxlUGFzc3dvcmQodGhpcy5tb2JpbGUsIHRoaXMucGFzc3dvcmQpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcz8uaWQpIHtcbiAgICAgICAgICB0aGlzLnNldEFjdGl2ZUJ1dHRvbihcIui0puWPt+WvhueggVwiKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5tc2cuZXJyb3IoXCLms6jlhozlpLHotKXvvIzor7fmm7TmjaLmiYvmnLrlj7fms6jlhoxcIik7XG4gICAgICB9KTtcbiAgfVxuICAvLyDmiYvmnLor5a+G56CB55m75b2VXG4gIGxvZ2luTW9iaWxlUGFzc3dvcmQoKSB7XG4gICAgaWYgKCF0aGlzLm1vYmlsZSB8fCAhdGhpcy5wYXNzd29yZCkge1xuICAgICAgdGhpcy5tc2cuZXJyb3IoXCLor7fovpPlhaXlrozmlbTmiYvmnLrlj7flkozlr4bnoIFcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXV0aFNlcnYubG9naW5Nb2JpbGVQYXNzd29yZCh0aGlzLm1vYmlsZSwgdGhpcy5wYXNzd29yZCwgdGhpcy5tc2cpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgbGV0IGxvY2sgPSB0aGlzLmF1dGhTZXJ2LmlzR3VhcmRMb2NrKHRoaXMucm91dGVyLnVybCk7XG4gICAgdGhpcy5hdXRoU2Vydi5pc01vZGFsU2hvdyA9IGxvY2s7XG4gIH1cbiAgZ29Ib21lKCkge1xuICAgIGxldCB1cmwgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgaWYodXJsPy5pbmRleE9mKFwieXViYW5cIikpe1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9hcHAvaG9tZVwiKTtcbiAgICB9XG4gICAgaWYgKHVybC5pbmRleE9mKFwiY2hhdFwiKSA+IC0xKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiL2NoYXQvaG9tZVwiKTtcbiAgICAgIHRoaXMuYXV0aFNlcnYuaXNNb2RhbFNob3cgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHVybC5pbmRleE9mKFwiaW1hZ2luZVwiKSA+IC0xKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFwiL2ltYWdpbmUvaG9tZVwiKTtcbiAgICAgIHRoaXMuYXV0aFNlcnYuaXNNb2RhbFNob3cgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9cIik7XG4gICAgdGhpcy5hdXRoU2Vydi5pc01vZGFsU2hvdyA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuICAvL+a3u+WKoOebkeWQrEVzY+aMiemUruWFs+mXreW8ueeql1xuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGVcIiwgW1wiJGV2ZW50XCJdKVxuICBoYW5kbGVFc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuIFxuICBzZXRBY3RpdmVCdXR0b24oYnV0dG9uTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5hdXRoU2Vydi5hY3RpdmVCdXR0b24gPSBidXR0b25OYW1lO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuYXV0aFNlcnYuYWN0aXZlQnV0dG9uKTtcbiAgICB0aGlzLnVwZGF0ZURyYXdDb2RlKCk7XG4gIH1cblxuICAvL+WPkemAgemqjOivgeeggeWAkuiuoeaXtlxuICBjb3VudGRvd24gPSA2MDtcbiAgYnV0dG9uVGV4dCA9IFwi6I635Y+W6aqM6K+B56CBXCI7XG4gIC8v5re75Yqg5YCS6K6h5pe25byA5aeL5ZKM57uT5p2f55qE5Yik5patXG4gIGlzQ291bnRpbmdkb3duID0gZmFsc2U7XG4gIC8qIOiOt+WPlumqjOivgeeggSAqL1xuICBzdGFydENvdW50ZG93bigpIHtcbiAgICBsZXQgYSA9IC9eMVszNDU2Nzg5XVxcZHs5fSQvO1xuICAgIGlmICghU3RyaW5nKHRoaXMubG9naW5JbmZvLm1vYmlsZSkubWF0Y2goYSkpIHtcbiAgICAgIHRoaXMubXNnLmVycm9yKFwi6K+35aGr5YaZ5q2j56Gu5omL5py65Y+3XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgc3RyID0gdGhpcy5kcmF3Q29kZS5qb2luKCcnKTtcbiAgICBpZih0aGlzLmF1dGhTZXJ2LmVuYWJsZWRMb2NhbENvZGUpe1xuICAgICAgaWYgKHRoaXMubG9jYWxDb2RlTnVtLnRvTG93ZXJDYXNlKCkgIT0gc3RyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgdGhpcy5tc2cuZXJyb3IoXCLmoKHpqoznoIHkuI3mraPnoa5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGhvc3QgPSAoUGFyc2UgYXMgYW55KS5zZXJ2ZXJVUkw/LnNwbGl0KFwicGFyc2VcIik/LlswXSB8fCBcImh0dHBzOi8vc2VydmVyLmZtb2RlLmNuL1wiXG5cbiAgICB0aGlzLmh0dHBcbiAgICAucG9zdChob3N0K1wiYXBpL2FwaWcvbWVzc2FnZVwiLCB7XG4gICAgICBjb21wYW55OiB0aGlzLmF1dGhTZXJ2LmNvbXBhbnksXG4gICAgICBtb2JpbGU6IHRoaXMubG9naW5JbmZvLm1vYmlsZSxcbiAgICB9KVxuICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgdGhpcy5tc2cuc3VjY2Vzcygn5Y+R6YCB5oiQ5YqfJylcbiAgICAgIHRoaXMuaXNDb3VudGluZ2Rvd24gPSB0cnVlO1xuICAgICAgdGhpcy50aW1lKCk7XG4gICAgICB0aGlzLnVwZGF0ZURyYXdDb2RlKClcbiAgICB9KVxuICB9XG4gIC8qIOWAkuiuoeaXtiAqL1xuICB0aW1lKCkge1xuICAgIHRoaXMuaXNDb3VudGluZ2Rvd24gPSB0cnVlO1xuICAgIHRoaXMuYnV0dG9uVGV4dCA9IGAke3RoaXMuY291bnRkb3dufeenkmA7XG4gICAgbGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5jb3VudGRvd24tLTtcbiAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IGAke3RoaXMuY291bnRkb3dufeenkmA7XG4gICAgICBpZiAodGhpcy5jb3VudGRvd24gPT09IDAgfHwgdGhpcy5jb3VudGRvd24gPCAwKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICB0aGlzLmJ1dHRvblRleHQgPSBcIumHjeaWsOWPkemAgVwiO1xuICAgICAgICB0aGlzLmlzQ291bnRpbmdkb3duID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY291bnRkb3duID0gMDtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIC8qIOmqjOivgeeggeeZu+W9lSAqL1xuICBhc3luYyBsb2dpbigpIHtcbiAgICBsZXQgYSA9IC9eMVszNDU2Nzg5XVxcZHs5fSQvO1xuICAgIGlmICghU3RyaW5nKHRoaXMubG9naW5JbmZvLm1vYmlsZSkubWF0Y2goYSkpIHtcbiAgICAgIHRoaXMubXNnLmVycm9yKFwi6K+35aGr5YaZ5q2j56Gu5omL5py65Y+3XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBsZXQgc3RyID0gdGhpcy5kcmF3Q29kZS5qb2luKCk7XG4gICAgLy8gaWYgKHRoaXMubG9jYWxDb2RlTnVtICE9IHN0cikge1xuICAgIC8vICAgdGhpcy5tc2cuZXJyb3IoXCLmoKHpqoznoIHkuI3mraPnoa5cIik7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIGlmICghdGhpcy5sb2dpbkluZm8uY29kZSkge1xuICAgICAgdGhpcy5tc2cuZXJyb3IoXCLor7fovpPlhaXnn63kv6Hpqozor4HnoIFcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByZXNcbiAgICB0cnl7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmF1dGhTZXJ2LmxvZ2luQ29kZShcbiAgICAgICAgdGhpcy5sb2dpbkluZm8ubW9iaWxlLFxuICAgICAgICB0aGlzLmxvZ2luSW5mby5jb2RlLFxuICAgICAgICB0aGlzLm1zZ1xuICAgICAgKVxuXG4gICAgfWNhdGNoKGVycil7fVxuICAgIFxuICAgIFxuICAgIGxldCB1c2VyID0gUGFyc2UuVXNlci5jdXJyZW50KCk7XG4gICAgaWYocmVzIHx8IHVzZXI/LmlkKXtcbiAgICAgIGNvbnNvbGUubG9nKHJlcyx1c2VyPy5pZCxcImNsb3NlXCIpXG4gICAgICB0aGlzLmNsb3NlKClcbiAgICAgIHRoaXMubG9naW5JbmZvID0ge1xuICAgICAgICBtb2JpbGU6IFwiXCIsXG4gICAgICAgIGNvZGU6IFwiXCIsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2NhbENvZGVOdW0gPSAnJ1xuICAgICAgdGhpcy50b2FzdCh7Y29sb3I6XCJzdWNjZXNzXCIsbWVzc2FnZTpcIueZu+W9leaIkOWKn1wifSlcbiAgICB9XG5cbiAgfVxuICBhc3luYyB0b2FzdChvcHRpb25zOmFueSl7XG4gICAgb3B0aW9ucy5wb3NpdGlvbiA9IG9wdGlvbnM/LnBvc2l0aW9uIHx8IFwidG9wXCJcbiAgICBvcHRpb25zLmR1cmF0aW9uID0gb3B0aW9ucz8uZHVyYXRpb24gfHwgMTUwMFxuICAgIG9wdGlvbnMuY29sb3IgPSBvcHRpb25zPy5jb2xvciB8fCBcInByaW1hcnlcIlxuICAgIGxldCB0b2FzdCA9IGF3YWl0IHRoaXMudG9hc3RDdHJsLmNyZWF0ZShvcHRpb25zKVxuICAgIHRvYXN0LnByZXNlbnQoKVxuICB9XG5cbiAgZHJhd0NvZGU6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgdXBkYXRlRHJhd0NvZGUoKSB7XG4gICAgaWYoIXRoaXMuYXV0aFNlcnYuZW5hYmxlZExvY2FsQ29kZSkgcmV0dXJuO1xuICAgIGxldCBjYW52YXNfd2lkdGggPSAxMDA7XG4gICAgbGV0IGNhbnZhc19oZWlnaHQgPSA0NDtcbiAgICBsZXQgY2FudiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2FudmFzXCIpO1xuICAgIGlmIChjYW52KSB0aGlzLmNhbnZhc0RvbS5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKGNhbnYpO1xuICAgIHRoaXMuY2FudmFzRG9tLm5hdGl2ZUVsZW1lbnQ7XG4gICAgbGV0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgY2FudmFzLndpZHRoID0gMTAwO1xuICAgIGNhbnZhcy5oZWlnaHQgPSA0NDtcbiAgICBjYW52YXMuY2xhc3NOYW1lID0gXCJjYW52YXNcIjtcbiAgICBjYW52YXMuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJjYW52YXNcIik7XG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZURyYXdDb2RlKCk7XG4gICAgfSk7XG4gICAgbGV0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpOyAvL+iOt+WPluWIsGNhbnZhc+eUu+WbvueahOeOr+Wig++8jOa8lOWRmOihqOa8lOeahOiInuWPsFxuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhc193aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzX2hlaWdodDtcbiAgICBsZXQgc0NvZGUgPVxuICAgICAgXCJBLEIsQyxFLEYsRyxILEosSyxMLE0sTixQLFEsUixTLFQsVyxYLFksWiwxLDIsMyw0LDUsNiw3LDgsOSwwLHEsdyxlLHIsdCx5LHUsaSxvLHAsYSxzLGQsZixnLGgsaixrLGwseix4LGMsdixiLG4sbVwiO1xuICAgIGxldCBhQ29kZSA9IHNDb2RlLnNwbGl0KFwiLFwiKTtcbiAgICBsZXQgYUxlbmd0aCA9IGFDb2RlLmxlbmd0aDsgLy/ojrflj5bliLDmlbDnu4TnmoTplb/luqZcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAzOyBpKyspIHtcbiAgICAgIGxldCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYUxlbmd0aCk7IC8v6I635Y+W5Yiw6ZqP5py655qE57Si5byV5YC8XG4gICAgICBsZXQgZGVnID0gKE1hdGgucmFuZG9tKCkgKiAzMCAqIE1hdGguUEkpIC8gMTgwOyAvL+S6p+eUnzB+MzDkuYvpl7TnmoTpmo/mnLrlvKfluqZcbiAgICAgIGxldCB0eHQgPSBhQ29kZVtqXTsgLy/lvpfliLDpmo/mnLrnmoTkuIDkuKrlhoXlrrlcbiAgICAgIHRoaXMuZHJhd0NvZGVbaV0gPSB0eHQ7XG4gICAgICBsZXQgeCA9IDEwICsgaSAqIDIwOyAvL+aWh+Wtl+WcqGNhbnZhc+S4iueahHjlnZDmoIdcbiAgICAgIGxldCB5ID0gMjAgKyBNYXRoLnJhbmRvbSgpICogODsgLy/mloflrZflnKhjYW52YXPkuIrnmoR55Z2Q5qCHXG4gICAgICBjb250ZXh0LmZvbnQgPSBcImJvbGQgMjNweCDlvq7ova/pm4Xpu5FcIjtcblxuICAgICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICBjb250ZXh0LnJvdGF0ZShkZWcpO1xuXG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IHRoaXMucmFuZG9tQ29sb3IoKTtcbiAgICAgIGNvbnRleHQuZmlsbFRleHQodHh0LCAwLCAwKTtcblxuICAgICAgY29udGV4dC5yb3RhdGUoLWRlZyk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSgteCwgLXkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSA1OyBpKyspIHtcbiAgICAgIC8v6aqM6K+B56CB5LiK5pi+56S657q/5p2hXG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5yYW5kb21Db2xvcigpO1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgIGNvbnRleHQubW92ZVRvKFxuICAgICAgICBNYXRoLnJhbmRvbSgpICogY2FudmFzX3dpZHRoLFxuICAgICAgICBNYXRoLnJhbmRvbSgpICogY2FudmFzX2hlaWdodFxuICAgICAgKTtcbiAgICAgIGNvbnRleHQubGluZVRvKFxuICAgICAgICBNYXRoLnJhbmRvbSgpICogY2FudmFzX3dpZHRoLFxuICAgICAgICBNYXRoLnJhbmRvbSgpICogY2FudmFzX2hlaWdodFxuICAgICAgKTtcbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDMwOyBpKyspIHtcbiAgICAgIC8v6aqM6K+B56CB5LiK5pi+56S65bCP54K5XG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5yYW5kb21Db2xvcigpO1xuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgIGxldCB4ID0gTWF0aC5yYW5kb20oKSAqIGNhbnZhc193aWR0aDtcbiAgICAgIGxldCB5ID0gTWF0aC5yYW5kb20oKSAqIGNhbnZhc19oZWlnaHQ7XG4gICAgICBjb250ZXh0Lm1vdmVUbyh4LCB5KTtcbiAgICAgIGNvbnRleHQubGluZVRvKHggKyAxLCB5ICsgMSk7XG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIH1cbiAgICB0aGlzLmNhbnZhc0RvbS5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gIH1cbiAgLyog5b6X5Yiw6ZqP5py655qE6aKc6Imy5YC8ICovXG4gIHJhbmRvbUNvbG9yKCkge1xuICAgIGxldCByID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU2KTtcbiAgICBsZXQgZyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgbGV0IGIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpO1xuICAgIHJldHVybiBcInJnYihcIiArIHIgKyBcIixcIiArIGcgKyBcIixcIiArIGIgKyBcIilcIjtcbiAgfVxufVxuIiwiPCEtLeeZu+W9leW8ueWHuuahhuiuvue9ri0tPlxuPCEtLeiDjOaZr+eBsOiJsuiSmeeJiC0tPlxuPGRpdlxuICBjbGFzcz1cInBvcHVwXCJcbiAgW3N0eWxlLmRpc3BsYXldPVwiYXV0aFNlcnYuaXNNb2RhbFNob3cgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgKGNsaWNrKT1cImNsb3NlKClcIlxuPlxuICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtYm94XCI+XG4gICAgICA8IS0t5by55qGG5YaF6K6+572ucG9zaXRpb246YWJzb2x1dGUs6KeE6IyD5o6S54mI77yM5ZCO57ut5Y+q6ZyAcG9zaXRpb246cmVsYXRpdmXlop7lh4/lhoXlrrktLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ib3gtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1pbWctbG9naW5cIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgW3NyY109XCJhdXRoU2Vydi5sb2dvVXJsXCJcbiAgICAgICAgICBhbHQ9XCJmbW9kZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLeWFs+mXreWbvuagh+aMiemSri0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi1ib3hcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbmZvbnQgaWNvbi1zaGFuY2h1MlwiIChjbGljayk9XCJjbG9zZSgpXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS3mjInpkq7liIfmjaLnmbvlvZXmlrnlvI8tLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ib3hcIiAqbmdJZj1cImF1dGhTZXJ2Py5sb2dpblR5cGVDb3VudD4xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImF1dGhTZXJ2Py5sb2dpbk9wdGlvbnM/LnVzZXJwd2RcIlxuICAgICAgICAgICAgICBjbGFzcz1cImxvZ2luLXNlbGVjdC1idXR0b25cIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+i0puWPt+WvhueggSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlQnV0dG9uKCfotKblj7flr4bnoIEnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOi0puWPt+WvhueggVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYXV0aFNlcnY/LmxvZ2luT3B0aW9ucz8ubW9iaWxlY29kZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibG9naW4tc2VsZWN0LWJ1dHRvblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYXV0aFNlcnYuYWN0aXZlQnV0dG9uID09PSAn55+t5L+h6aqM6K+BJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVCdXR0b24oJ+efreS/oemqjOivgScpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg55+t5L+h6aqM6K+BXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhdXRoU2Vydj8ubG9naW5PcHRpb25zPy53ZWNoYXRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImxvZ2luLXNlbGVjdC1idXR0b25cIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+W+ruS/oeaJq+eggSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlQnV0dG9uKCflvq7kv6HmiavnoIEnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOW+ruS/oeaJq+eggVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS3miYvmnLrpqozor4HnoIEtLT5cbiAgICAgICAgPGZvcm0gY2xhc3M9XCJtZXNzYWdlLWZvcm1cIiBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+efreS/oemqjOivgSdcIiAqbmdJZj1cImF1dGhTZXJ2Py5sb2dpbk9wdGlvbnM/Lm1vYmlsZWNvZGVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4taW5wdXQtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaW5wdXQtZnJvbnRudW1iZXJcIj4rODY8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cInBvcHVwLWlucHV0LWl0ZW1vbmVcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvZ2luSW5mby5tb2JpbGVcIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMlwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+36L6T5YWl5omL5py65Y+3XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImF1dGhTZXJ2Py5lbmFibGVkTG9jYWxDb2RlXCJcbiAgICAgICAgICBjbGFzcz1cImxvZ2luLWlucHV0LWJveCBsb2NhbC1jb2RlXCIgI2NhbnZhc0RvbT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cInBvcHVwLWlucHV0LWl0ZW10d29cIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvY2FsQ29kZU51bVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeagoemqjOeggVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPCEtLSA8Y2FudmFzXG4gICAgICAgICAgICAgICNjYW52YXNcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDBcIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCI0NFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVEcmF3Q29kZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjYW52YXNcIlxuICAgICAgICAgICAgPjwvY2FudmFzPiAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4taW5wdXQtYm94XCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJwb3B1cC1pbnB1dC1pdGVtdHdvXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICByZXF1aXJlZD1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXnn63kv6Hpqozor4HnoIFcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvZ2luSW5mby5jb2RlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiOFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrbnVtYmVyLWJ1dHRvblwiXG4gICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiYnV0dG9uVGV4dFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0NvdW50aW5nZG93blwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzdGFydENvdW50ZG93bigpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0NvdW50aW5nZG93blwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7YnV0dG9uVGV4dH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0g55So5oi35Y2P6K6uIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWJveFwiPlxuICAgICAgICAgICAgPHNwYW4+5pyq5rOo5YaM55qE5omL5py65Y+377yM5bCG6Ieq5Yqo5Yib5bu65biQ5Y+35bm255m75b2V44CCPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLXN1Ym1pdC1ib3hcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJsb2dpbi1zdWJtaXQtYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJsb2dpbigpXCI+XG4gICAgICAgICAgICAgIOeZu+W9lVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cblxuICAgICAgICA8IS0t6LSm5Y+35a+G56CB55m75b2VLS0+XG4gICAgICAgIDxmb3JtIGNsYXNzPVwibW9iaWxlLWZvcm1cIiBbY2xhc3MuYWN0aXZlXT1cImF1dGhTZXJ2LmFjdGl2ZUJ1dHRvbiA9PT0gJ+i0puWPt+WvhueggSdcIiAqbmdJZj1cImF1dGhTZXJ2Py5sb2dpbk9wdGlvbnM/LnVzZXJwd2RcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4taW5wdXQtYm94XCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTJcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicG9wdXAtaW5wdXQtaXRlbW5vbWFsXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICByZXF1aXJlZD1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmiYvmnLrlj7dcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1ib3hcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwb3B1cC1pbnB1dC1pdGVtbm9tYWxcIlxuICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICByZXF1aXJlZD1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXlr4bnoIFcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0g6K6w5L2P5a+G56CBIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd3ByZC1ib3hcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1lbWJlci1wYXNzd29yZC1ib3hcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwicmVtZW1iZXItcGFzc3dvcmRcIiAvPlxuICAgICAgICAgICAgICDorrDkvY/lr4bnoIFcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIOW/mOiusOWvhueggSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1mb3JnZXRcIiAoY2xpY2spPVwic2V0QWN0aXZlQnV0dG9uKCfms6jlhozluJDlj7cnKVwiPlxuICAgICAgICAgICAgICDms6jlhozluJDlj7dcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSDnlKjmiLfljY/orq4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJ1bGUtYm94XCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaXNVc2VyUnVsZUNoZWNrZWRcIiAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6NXB4XCIvPlxuICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiaXNVc2VyUnVsZUNoZWNrZWQ9dHJ1ZVwiPuWQjOaEjzwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiaXNVc2VyUnVsZUNoZWNrZWQ9dHJ1ZVwiPuOAiueUqOaIt+WNj+iuruWPiumakOengeadoeasvuOAizwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgPCEtLSDlv5jorrDlr4bnoIEgLS0+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtZm9yZ2V0XCI+5b+Y6K6w5a+G56CBPzwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1zdWJtaXQtYm94XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwibG9naW4tc3VibWl0LWJ1dHRvblwiXG4gICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9naW5Nb2JpbGVQYXNzd29yZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg55m75b2VXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuXG4gICAgICAgIDwhLS0g5biQ5Y+35a+G56CB5rOo5YaMIC0tPlxuICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vYmlsZS1mb3JtXCIgW2NsYXNzLmFjdGl2ZV09XCJhdXRoU2Vydi5hY3RpdmVCdXR0b24gPT09ICfms6jlhozluJDlj7cnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LWJveFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwb3B1cC1pbnB1dC1pdGVtbm9tYWxcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeaJi+acuuWPt1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LWJveFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBjbGFzcz1cInBvcHVwLWlucHV0LWl0ZW1ub21hbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+i+k+WFpeWvhueggVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LWJveFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFzc3dvcmQyXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwb3B1cC1pbnB1dC1pdGVtbm9tYWxcIlxuICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICByZXF1aXJlZD1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7flho3mrKHovpPlhaXlr4bnoIFcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1zdWJtaXQtYm94XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwibG9naW4tc3VibWl0LWJ1dHRvblwiXG4gICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2lnbk1vYmlsZVBhc3N3b3JkKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDms6jlhoxcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG5cbiAgICAgICAgPCEtLeW+ruS/oeaJq+eggeeZu+mZhi0tPlxuICAgICAgICA8Zm9ybSBjbGFzcz1cIndlY2hhdC1mb3JtXCIgW2NsYXNzLmFjdGl2ZV09XCJhdXRoU2Vydi5hY3RpdmVCdXR0b24gPT09ICflvq7kv6HmiavnoIEnXCIgKm5nSWY9XCJhdXRoU2Vydj8ubG9naW5PcHRpb25zPy53ZWNoYXRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2VjaGF0LWxvZ2luLWJveFwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBjbGFzcz1cImxvZ2luLWVyd2VpbWEtaW1nXCJcbiAgICAgICAgICAgICAgW3NyY109XCJhdXRoU2Vydi53ZWNoYXRVcmxcIlxuICAgICAgICAgICAgICBhbHQ9XCLlvq7kv6HmiavnoIHnmbvpmYbkuoznu7TnoIFcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2VjaGF0LWV4cGxhaW5cIj7kvb/nlKjlvq7kv6HmiavkuIDmiass5omr56CB55m75b2VIFwi6aOe56CBQUlcIjwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG5cbiAgICAgICAgPCEtLei/lOWbnummlumhtS0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFjay1ob21lLWJveFwiICpuZ0lmPVwiYXV0aFNlcnYuc2hvd0JhY2tIb21lXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhY2staG9tZXBhZ2UtYnV0dG9uXCIgKGNsaWNrKT1cImdvSG9tZSgpXCI+XG4gICAgICAgICAgICDov5Tlm57pppbpobVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
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/modal-user-login/modal-user-login.component.mjs
7
+ */
8
+ import{Component,HostListener,ViewChild,ElementRef}from"@angular/core";import{Router}from"@angular/router";import{AuthService}from"../login/auth.service";import{NzMessageService}from"ng-zorro-antd/message";import{HttpClient}from"@angular/common/http";import{CommonModule}from"@angular/common";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import Parse from"parse";import{IonCheckbox,ToastController}from"@ionic/angular/standalone";import*as i0 from"@angular/core";import*as i1 from"ng-zorro-antd/message";import*as i2 from"../login/auth.service";import*as i3 from"@angular/router";import*as i4 from"@angular/common/http";import*as i5 from"@ionic/angular/standalone";import*as i6 from"@angular/common";import*as i7 from"@angular/forms";export class ModalUserLoginComponent{constructor(o,n,t,e,i){this.msg=o,this.authServ=n,this.router=t,this.http=e,this.toastCtrl=i,this.isUserRuleChecked=!1,this.loginInfo={mobile:"",code:""},this.localCodeNum="",this.countdown=60,this.buttonText="获取验证码",this.isCountingdown=!1,this.drawCode=[]}ngOnInit(){this.close()}ngAfterViewInit(){this.setActiveButton(this.authServ.activeButton)}signMobilePassword(){this.mobile&&this.password?this.password==this.password2?this.authServ.signMobilePassword(this.mobile,this.password).then((o=>{o?.id&&this.setActiveButton("账号密码")})).catch((o=>{this.msg.error("注册失败,请更换手机号注册")})):this.msg.error("两次输入密码不同,请检查"):this.msg.error("请输入完整手机号和密码")}loginMobilePassword(){this.mobile&&this.password?this.authServ.loginMobilePassword(this.mobile,this.password,this.msg):this.msg.error("请输入完整手机号和密码")}close(){let o=this.authServ.isGuardLock(this.router.url);this.authServ.isModalShow=o}goHome(){let o=this.router.url;return o?.indexOf("yuban")&&this.router.navigateByUrl("/app/home"),o.indexOf("chat")>-1?(this.router.navigateByUrl("/chat/home"),void(this.authServ.isModalShow=!1)):o.indexOf("imagine")>-1?(this.router.navigateByUrl("/imagine/home"),void(this.authServ.isModalShow=!1)):(this.router.navigateByUrl("/"),void(this.authServ.isModalShow=!1))}handleEscapeKey(o){this.close()}setActiveButton(o){this.authServ.activeButton=o,console.log(this.authServ.activeButton),this.updateDrawCode()}startCountdown(){if(!String(this.loginInfo.mobile).match(/^1[3456789]\d{9}$/))return void this.msg.error("请填写正确手机号");let o=this.drawCode.join("");if(this.authServ.enabledLocalCode&&this.localCodeNum.toLowerCase()!=o.toLowerCase())return void this.msg.error("校验码不正确");let n=Parse.serverURL?.split("parse")?.[0]||"https://server.fmode.cn/";this.http.post(n+"api/apig/message",{company:this.authServ.company,mobile:this.loginInfo.mobile}).subscribe((o=>{console.log(o),this.msg.success("发送成功"),this.isCountingdown=!0,this.time(),this.updateDrawCode()}))}time(){this.isCountingdown=!0,this.buttonText=`${this.countdown}秒`;let o=setInterval((()=>{this.countdown--,this.buttonText=`${this.countdown}秒`,(0===this.countdown||this.countdown<0)&&(clearInterval(o),this.buttonText="重新发送",this.isCountingdown=!1,this.countdown=0)}),1e3)}async login(){let o;if(!String(this.loginInfo.mobile).match(/^1[3456789]\d{9}$/))return void this.msg.error("请填写正确手机号");if(!this.loginInfo.code)return void this.msg.error("请输入短信验证码");try{o=await this.authServ.loginCode(this.loginInfo.mobile,this.loginInfo.code,this.msg)}catch(o){}let n=Parse.User.current();(o||n?.id)&&(console.log(o,n?.id,"close"),this.close(),this.loginInfo={mobile:"",code:""},this.localCodeNum="",this.toast({color:"success",message:"登录成功"}))}async toast(o){o.position=o?.position||"top",o.duration=o?.duration||1500,o.color=o?.color||"primary",(await this.toastCtrl.create(o)).present()}updateDrawCode(){if(!this.authServ.enabledLocalCode)return;let o=100,n=document.getElementById("canvas");n&&this.canvasDom.nativeElement.removeChild(n),this.canvasDom.nativeElement;let t=document.createElement("canvas");t.width=100,t.height=44,t.className="canvas",t.setAttribute("id","canvas"),t.addEventListener("click",(()=>{this.updateDrawCode()}));let e=t.getContext("2d");t.width=o,t.height=44;let i="A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m".split(","),p=i.length;for(let o=0;o<=3;o++){let n=Math.floor(Math.random()*p),t=30*Math.random()*Math.PI/180,r=i[n];this.drawCode[o]=r;let a=10+20*o,s=20+8*Math.random();e.font="bold 23px 微软雅黑",e.translate(a,s),e.rotate(t),e.fillStyle=this.randomColor(),e.fillText(r,0,0),e.rotate(-t),e.translate(-a,-s)}for(let n=0;n<=5;n++)e.strokeStyle=this.randomColor(),e.beginPath(),e.moveTo(Math.random()*o,44*Math.random()),e.lineTo(Math.random()*o,44*Math.random()),e.stroke();for(let n=0;n<=30;n++){e.strokeStyle=this.randomColor(),e.beginPath();let n=Math.random()*o,t=44*Math.random();e.moveTo(n,t),e.lineTo(n+1,t+1),e.stroke()}this.canvasDom.nativeElement.appendChild(t)}randomColor(){return"rgb("+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+")"}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserLoginComponent,deps:[{token:i1.NzMessageService},{token:i2.AuthService},{token:i3.Router},{token:i4.HttpClient},{token:i5.ToastController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ModalUserLoginComponent,isStandalone:!0,selector:"fm-modal-user-login",host:{listeners:{"document:keydown.escape":"handleEscapeKey($event)"}},viewQueries:[{propertyName:"canvasDom",first:!0,predicate:["canvasDom"],descendants:!0}],ngImport:i0,template:'\x3c!--登录弹出框设置--\x3e\n\x3c!--背景灰色蒙版--\x3e\n<div\n class="popup"\n [style.display]="authServ.isModalShow ? \'block\' : \'none\'"\n (click)="close()"\n>\n <div class="popup-content" (click)="$event.stopPropagation()">\n <div class="popup-box">\n \x3c!--弹框内设置position:absolute,规范排版,后续只需position:relative增减内容--\x3e\n <div class="popup-box-content">\n <div class="logo-img-login">\n <img\n [src]="authServ.logoUrl"\n alt="fmode"\n />\n </div>\n\n \x3c!--关闭图标按钮--\x3e\n <div class="close-icon-box">\n <div class="iconfont icon-shanchu2" (click)="close()"></div>\n </div>\n\n \x3c!--按钮切换登录方式--\x3e\n <div class="button-box" *ngIf="authServ?.loginTypeCount>1">\n <div class="button-group">\n <button *ngIf="authServ?.loginOptions?.userpwd"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'账号密码\'"\n (click)="setActiveButton(\'账号密码\')"\n >\n 账号密码\n </button>\n <button *ngIf="authServ?.loginOptions?.mobilecode"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'短信验证\'"\n (click)="setActiveButton(\'短信验证\')"\n >\n 短信验证\n </button>\n <button *ngIf="authServ?.loginOptions?.wechat"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'微信扫码\'"\n (click)="setActiveButton(\'微信扫码\')"\n >\n 微信扫码\n </button>\n </div>\n </div>\n\n \x3c!--手机验证码--\x3e\n <form class="message-form" [class.active]="authServ.activeButton === \'短信验证\'" *ngIf="authServ?.loginOptions?.mobilecode">\n <div class="login-input-box">\n <div class="popup-input-frontnumber">+86</div>\n <input\n class="popup-input-itemone"\n type="text"\n required="required"\n [(ngModel)]="loginInfo.mobile"\n [ngModelOptions]="{ standalone: true }"\n maxlength="12"\n placeholder="请输入手机号"\n />\n </div>\n <div *ngIf="authServ?.enabledLocalCode"\n class="login-input-box local-code" #canvasDom>\n <input\n class="popup-input-itemtwo"\n type="text"\n required="required"\n [(ngModel)]="localCodeNum"\n [ngModelOptions]="{ standalone: true }"\n maxlength="4"\n placeholder="请输入校验码"\n />\n \x3c!-- <canvas\n #canvas\n width="100"\n height="44"\n (click)="updateDrawCode()"\n class="canvas"\n ></canvas> --\x3e\n </div>\n <div class="login-input-box">\n <input\n class="popup-input-itemtwo"\n type="text"\n required="required"\n placeholder="请输入短信验证码"\n [(ngModel)]="loginInfo.code"\n [ngModelOptions]="{ standalone: true }"\n maxlength="8"\n />\n <button\n class="checknumber-button"\n type="submit"\n [value]="buttonText"\n [disabled]="isCountingdown"\n (click)="startCountdown()"\n [class.active]="isCountingdown"\n >\n {{buttonText}}\n </button>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>未注册的手机号,将自动创建帐号并登录。</span>\n </div>\n\n <div class="login-submit-box">\n <button class="login-submit-button" type="submit" (click)="login()">\n 登录\n </button>\n </div>\n </form>\n\n \x3c!--账号密码登录--\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'账号密码\'" *ngIf="authServ?.loginOptions?.userpwd">\n <div class="login-input-box">\n <input\n maxlength="12"\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n \x3c!-- 记住密码 --\x3e\n <div class="passwprd-box">\n <div class="remember-password-box">\n <input type="checkbox" id="remember-password" />\n 记住密码\n </div>\n\n \x3c!-- 忘记密码 --\x3e\n <div class="password-forget" (click)="setActiveButton(\'注册帐号\')">\n 注册帐号\n </div>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>\n <input type="checkbox" [(ngModel)]="isUserRuleChecked" [ngModelOptions]="{ standalone: true }" style="margin-right:5px"/>\n <span (click)="isUserRuleChecked=true">同意</span></span>\n <span (click)="isUserRuleChecked=true">《用户协议及隐私条款》</span>\n </div>\n\n\n \x3c!-- 忘记密码 --\x3e\n \x3c!-- <div class="password-forget">忘记密码?</div>\n </div> --\x3e\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="loginMobilePassword()"\n >\n 登录\n </button>\n </div>\n </form>\n\n \x3c!-- 帐号密码注册 --\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'注册帐号\'">\n <div class="login-input-box">\n <input\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password2"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请再次输入密码"\n />\n </div>\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="signMobilePassword()"\n >\n 注册\n </button>\n </div>\n </form>\n\n \x3c!--微信扫码登陆--\x3e\n <form class="wechat-form" [class.active]="authServ.activeButton === \'微信扫码\'" *ngIf="authServ?.loginOptions?.wechat">\n <div class="wechat-login-box">\n <img\n class="login-erweima-img"\n [src]="authServ.wechatUrl"\n alt="微信扫码登陆二维码"\n />\n </div>\n <div class="wechat-explain">使用微信扫一扫,扫码登录 "飞码AI"</div>\n </form>\n\n \x3c!--返回首页--\x3e\n <div class="back-home-box" *ngIf="authServ.showBackHome">\n <button class="back-homepage-button" (click)="goHome()">\n 返回首页\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n',styles:['@charset "UTF-8";:host{--fmode-color-primary: #0199f9;--fmode-background-primary: #FFF}:host-context(body.dark) .popup{--fmode-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:10000}@media screen and (max-width: 800px){.popup-content .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:#1e90ff;overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;padding-top:32px;padding-right:59px;padding-left:59px;border-radius:10px;width:100%;height:72px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--fmode-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#f902ff,#f902ff);transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#00dbde,#00dbde);transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--fmode-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--fmode-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .mobile-form .rule-box span,.popup-content .mobile-form .rule-box ion-checkbox{font-size:15px;color:var(--fmode-color-primary)}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--fmode-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n'],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i6.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule},{kind:"directive",type:i7.ɵNgNoValidate,selector:"form:not([ngNoForm]):not([ngNativeValidate])"},{kind:"directive",type:i7.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i7.CheckboxControlValueAccessor,selector:"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]"},{kind:"directive",type:i7.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i7.NgControlStatusGroup,selector:"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]"},{kind:"directive",type:i7.RequiredValidator,selector:":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]",inputs:["required"]},{kind:"directive",type:i7.MaxLengthValidator,selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",inputs:["maxlength"]},{kind:"directive",type:i7.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"directive",type:i7.NgForm,selector:"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]",inputs:["ngFormOptions"],outputs:["ngSubmit"],exportAs:["ngForm"]},{kind:"ngmodule",type:ReactiveFormsModule}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserLoginComponent,decorators:[{type:Component,args:[{standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonCheckbox],selector:"fm-modal-user-login",template:'\x3c!--登录弹出框设置--\x3e\n\x3c!--背景灰色蒙版--\x3e\n<div\n class="popup"\n [style.display]="authServ.isModalShow ? \'block\' : \'none\'"\n (click)="close()"\n>\n <div class="popup-content" (click)="$event.stopPropagation()">\n <div class="popup-box">\n \x3c!--弹框内设置position:absolute,规范排版,后续只需position:relative增减内容--\x3e\n <div class="popup-box-content">\n <div class="logo-img-login">\n <img\n [src]="authServ.logoUrl"\n alt="fmode"\n />\n </div>\n\n \x3c!--关闭图标按钮--\x3e\n <div class="close-icon-box">\n <div class="iconfont icon-shanchu2" (click)="close()"></div>\n </div>\n\n \x3c!--按钮切换登录方式--\x3e\n <div class="button-box" *ngIf="authServ?.loginTypeCount>1">\n <div class="button-group">\n <button *ngIf="authServ?.loginOptions?.userpwd"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'账号密码\'"\n (click)="setActiveButton(\'账号密码\')"\n >\n 账号密码\n </button>\n <button *ngIf="authServ?.loginOptions?.mobilecode"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'短信验证\'"\n (click)="setActiveButton(\'短信验证\')"\n >\n 短信验证\n </button>\n <button *ngIf="authServ?.loginOptions?.wechat"\n class="login-select-button"\n [class.active]="authServ.activeButton === \'微信扫码\'"\n (click)="setActiveButton(\'微信扫码\')"\n >\n 微信扫码\n </button>\n </div>\n </div>\n\n \x3c!--手机验证码--\x3e\n <form class="message-form" [class.active]="authServ.activeButton === \'短信验证\'" *ngIf="authServ?.loginOptions?.mobilecode">\n <div class="login-input-box">\n <div class="popup-input-frontnumber">+86</div>\n <input\n class="popup-input-itemone"\n type="text"\n required="required"\n [(ngModel)]="loginInfo.mobile"\n [ngModelOptions]="{ standalone: true }"\n maxlength="12"\n placeholder="请输入手机号"\n />\n </div>\n <div *ngIf="authServ?.enabledLocalCode"\n class="login-input-box local-code" #canvasDom>\n <input\n class="popup-input-itemtwo"\n type="text"\n required="required"\n [(ngModel)]="localCodeNum"\n [ngModelOptions]="{ standalone: true }"\n maxlength="4"\n placeholder="请输入校验码"\n />\n \x3c!-- <canvas\n #canvas\n width="100"\n height="44"\n (click)="updateDrawCode()"\n class="canvas"\n ></canvas> --\x3e\n </div>\n <div class="login-input-box">\n <input\n class="popup-input-itemtwo"\n type="text"\n required="required"\n placeholder="请输入短信验证码"\n [(ngModel)]="loginInfo.code"\n [ngModelOptions]="{ standalone: true }"\n maxlength="8"\n />\n <button\n class="checknumber-button"\n type="submit"\n [value]="buttonText"\n [disabled]="isCountingdown"\n (click)="startCountdown()"\n [class.active]="isCountingdown"\n >\n {{buttonText}}\n </button>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>未注册的手机号,将自动创建帐号并登录。</span>\n </div>\n\n <div class="login-submit-box">\n <button class="login-submit-button" type="submit" (click)="login()">\n 登录\n </button>\n </div>\n </form>\n\n \x3c!--账号密码登录--\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'账号密码\'" *ngIf="authServ?.loginOptions?.userpwd">\n <div class="login-input-box">\n <input\n maxlength="12"\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n \x3c!-- 记住密码 --\x3e\n <div class="passwprd-box">\n <div class="remember-password-box">\n <input type="checkbox" id="remember-password" />\n 记住密码\n </div>\n\n \x3c!-- 忘记密码 --\x3e\n <div class="password-forget" (click)="setActiveButton(\'注册帐号\')">\n 注册帐号\n </div>\n </div>\n\n \x3c!-- 用户协议 --\x3e\n <div class="rule-box">\n <span>\n <input type="checkbox" [(ngModel)]="isUserRuleChecked" [ngModelOptions]="{ standalone: true }" style="margin-right:5px"/>\n <span (click)="isUserRuleChecked=true">同意</span></span>\n <span (click)="isUserRuleChecked=true">《用户协议及隐私条款》</span>\n </div>\n\n\n \x3c!-- 忘记密码 --\x3e\n \x3c!-- <div class="password-forget">忘记密码?</div>\n </div> --\x3e\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="loginMobilePassword()"\n >\n 登录\n </button>\n </div>\n </form>\n\n \x3c!-- 帐号密码注册 --\x3e\n <form class="mobile-form" [class.active]="authServ.activeButton === \'注册帐号\'">\n <div class="login-input-box">\n <input\n [(ngModel)]="mobile"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="text"\n required="required"\n placeholder="请输入手机号"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请输入密码"\n />\n </div>\n\n <div class="login-input-box">\n <input\n [(ngModel)]="password2"\n [ngModelOptions]="{ standalone: true }"\n class="popup-input-itemnomal"\n type="password"\n required="required"\n placeholder="请再次输入密码"\n />\n </div>\n\n <div class="login-submit-box">\n <button\n class="login-submit-button"\n type="submit"\n (click)="signMobilePassword()"\n >\n 注册\n </button>\n </div>\n </form>\n\n \x3c!--微信扫码登陆--\x3e\n <form class="wechat-form" [class.active]="authServ.activeButton === \'微信扫码\'" *ngIf="authServ?.loginOptions?.wechat">\n <div class="wechat-login-box">\n <img\n class="login-erweima-img"\n [src]="authServ.wechatUrl"\n alt="微信扫码登陆二维码"\n />\n </div>\n <div class="wechat-explain">使用微信扫一扫,扫码登录 "飞码AI"</div>\n </form>\n\n \x3c!--返回首页--\x3e\n <div class="back-home-box" *ngIf="authServ.showBackHome">\n <button class="back-homepage-button" (click)="goHome()">\n 返回首页\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n',styles:['@charset "UTF-8";:host{--fmode-color-primary: #0199f9;--fmode-background-primary: #FFF}:host-context(body.dark) .popup{--fmode-color-primary: #7974ff;--fmode-background-primary: #000000}:host-context(body.dark) .popup .remember-password-box{color:#fff}.popup{display:flex;position:fixed;left:0;top:0;width:100%;height:100%;background-color:#0006;z-index:10000}@media screen and (max-width: 800px){.popup-content .popup-box{position:fixed!important;left:0!important;top:0!important;height:100vh!important;width:100vw!important;border-radius:0!important}.popup-content .popup-box .popup-box-content{border-radius:50px!important}}.popup-content{margin:7% auto;display:flex;width:500px;height:600px;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .popup-box{width:500px;height:600px;position:relative;border-radius:50px 5px;background-color:#1e90ff;overflow:hidden}.popup-content .popup-box .popup-box-content{position:absolute;border-radius:50px 5px;inset:4px;background-color:var(--fmode-background-primary);z-index:1}.popup-content .popup-box .popup-box-content .logo-img-login{margin-top:35px;position:relative;width:100%;display:flex;justify-content:center;z-index:2}.popup-content .popup-box .popup-box-content .logo-img-login img{height:auto;max-width:150px}.popup-content .popup-box .popup-box-content .close-icon-box{position:relative;top:20px;right:20px;float:right;font-size:20px;cursor:pointer;z-index:2}.popup-content .popup-box .popup-box-content .button-box{display:flex;justify-content:center;padding-top:32px;padding-right:59px;padding-left:59px;border-radius:10px;width:100%;height:72px}.popup-content .popup-box .popup-box-content .button-box .button-group{position:relative;display:flex;width:100%;line-height:40px;border-radius:10px;background-color:plum;z-index:2}.popup-content .popup-box .popup-box-content .button-box .login-select-button{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#fff;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button:hover{flex:1;outline:none;border:none;border-radius:10px;font-size:16px;cursor:pointer;color:#000;background-color:inherit;transition:background-color .3s}.popup-content .popup-box .popup-box-content .button-box .login-select-button.active{background-color:var(--fmode-color-primary);border-radius:10px}.popup-content .popup-box .popup-box-content input{color:#000}.popup-content .popup-box .popup-box-content .message-form,.popup-content .popup-box .popup-box-content .mobile-form,.popup-content .popup-box .popup-box-content .wechat-form{display:none}.popup-content .popup-box .popup-box-content .message-form.active,.popup-content .popup-box .popup-box-content .mobile-form.active,.popup-content .popup-box .popup-box-content .wechat-form.active{display:block}.popup-content .popup-box:before{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#f902ff,#f902ff);transform-origin:bottom right;animation:animate 6s linear infinite}.popup-content .popup-box:after{content:"";position:absolute;top:-50%;left:-50%;width:500px;height:600px;background:linear-gradient(0deg,transparent,#00dbde,#00dbde);transform-origin:bottom right;animation:animate 6s linear infinite;animation-delay:-3s}@keyframes animate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.popup-content .login-submit-box{position:relative}.popup-content .login-submit-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .login-submit-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .login-submit-button:hover{color:var(--fmode-color-primary)}.popup-content .login-submit-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .login-submit-button:active{transform:scale(.9)}.popup-content .message-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .message-form .login-input-box{display:flex;align-items:center;padding-top:10px}.popup-content .message-form .login-input-box .popup-input-frontnumber{padding:6px 12px;position:relative;border-radius:10px 0 0 10px;line-height:40px;font-size:18px;color:#4d4d4d;background-color:#ededed}.popup-content .message-form .popup-input-itemone{padding:6px 12px;position:relative;line-height:40px;border-radius:0 10px 10px 0;border:0;width:93%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .popup-input-itemtwo{padding:6px 12px 6px 16px;position:relative;line-height:40px;border-radius:10px;border:0;width:55%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .message-form .checknumber-button{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;color:#fff;background:var(--fmode-color-primary)}.popup-content .message-form .checknumber-button:hover{margin-left:46px;padding:6px;border-radius:10px;line-height:40px;font-size:18px;width:124px;border:none;outline:none;cursor:pointer;background:#4bace9}.popup-content .message-form .checknumber-button.active{background:#c7c7c7}.popup-content .mobile-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .mobile-form .login-input-box{padding-top:10px}.popup-content .mobile-form .login-input-box .popup-input-itemnomal{margin-top:20px;padding:6px 12px 6px 14px;position:relative;line-height:40px;border-radius:10px;border:0;width:100%;outline:none;box-shadow:none;font-size:18px;letter-spacing:.03em;background-color:#ededed;transition:.5s}.popup-content .mobile-form .rule-box{display:flex;padding-top:4px;padding-left:15px;padding-right:10px;justify-content:space-between;font-size:15px}.popup-content .mobile-form .rule-box span,.popup-content .mobile-form .rule-box ion-checkbox{font-size:15px;color:var(--fmode-color-primary)}.popup-content .mobile-form .passwprd-box{display:flex;padding-top:4px;justify-content:space-between}.popup-content .mobile-form .passwprd-box .remember-password-box{margin:10px 0 0 15px;font-size:15px}.popup-content .mobile-form .passwprd-box .password-forget{margin-top:10px;margin-right:15px;font-size:15px;color:gray;cursor:pointer}.popup-content .mobile-form .passwprd-box .password-forget:hover{margin-top:10px;margin-right:15px;font-size:15px;color:#000;cursor:pointer}.popup-content .wechat-form{padding:6px 55px;display:flex;position:relative;border-radius:50px 5px;background-color:var(--fmode-background-primary)}.popup-content .wechat-form .wechat-login-box{display:flex;justify-content:center}.popup-content .wechat-form .wechat-login-box .login-erweima-img{margin-top:30px;width:210px}.popup-content .wechat-form .wechat-explain{padding-top:20px;font-size:16px;text-align:center}.popup-content .back-home-box{display:flex;justify-content:center;padding:6px 55px}.popup-content .back-homepage-button{margin-top:15px;padding:6px;width:100%;line-height:40px;border-radius:10px;border:0;position:relative;box-shadow:0 2px 10px #00000029,0 3px 6px #0000001a;text-decoration:none;font-size:18px;font-weight:700;letter-spacing:2px;text-align:center;color:#fff;background-color:var(--fmode-color-primary);transition:.3s ease all;cursor:pointer;z-index:1}.popup-content .back-homepage-button:before{transition:.5s all ease;position:absolute;inset:0 50%;opacity:0;content:"";background-color:var(--fmode-background-primary);z-index:-1}.popup-content .back-homepage-button:hover{color:var(--fmode-color-primary)}.popup-content .back-homepage-button:hover:before{border-radius:10px;border:3px solid var(--fmode-color-primary);box-sizing:border-box;transition:.5s all ease;left:0;right:0;opacity:1}.popup-content .local-code{justify-content:space-between}.popup-content .local-code .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:44px}\n']}]}],ctorParameters:()=>[{type:i1.NzMessageService},{type:i2.AuthService},{type:i3.Router},{type:i4.HttpClient},{type:i5.ToastController}],propDecorators:{canvasDom:[{type:ViewChild,args:["canvasDom"]}],handleEscapeKey:[{type:HostListener,args:["document:keydown.escape",["$event"]]}]}});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL21vZGFsLXVzZXItbG9naW4vbW9kYWwtdXNlci1sb2dpbi5jb21wb25lbnQubWpz`
10
+
@@ -1,27 +1,10 @@
1
- import { Injectable } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { AuthProfileService } from './auth-profile.service';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./auth-profile.service";
6
- import * as i2 from "@angular/router";
7
- export class AuthProfileGuard {
8
- constructor(authProfileServ, router) {
9
- this.authProfileServ = authProfileServ;
10
- this.router = router;
11
- }
12
- canActivate(route, state) {
13
- // 当前路由url
14
- let url = state.url;
15
- // 调用checkLogin检查是否登录
16
- return this.authProfileServ.checkProfile(url);
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileGuard, deps: [{ token: i1.AuthProfileService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
19
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileGuard, providedIn: 'root' }); }
20
- }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileGuard, decorators: [{
22
- type: Injectable,
23
- args: [{
24
- providedIn: 'root'
25
- }]
26
- }], ctorParameters: () => [{ type: i1.AuthProfileService }, { type: i2.Router }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wcm9maWxlLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi91c2VyL3Byb2ZpbGUvYXV0aC1wcm9maWxlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBOzs7O0FBTTNELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBbUIsZUFBbUMsRUFBUyxNQUFjO1FBQTFELG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBQ2pGLFdBQVcsQ0FDVCxLQUE2QixFQUM3QixLQUEwQjtRQUN4QixVQUFVO1FBQ1YsSUFBSSxHQUFHLEdBQVcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUM1QixxQkFBcUI7UUFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDOytHQVRVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3QsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXV0aFByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLXByb2ZpbGUuc2VydmljZSdcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFByb2ZpbGVHdWFyZCAge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgYXV0aFByb2ZpbGVTZXJ2OiBBdXRoUHJvZmlsZVNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlcikge31cbiAgY2FuQWN0aXZhdGUoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xuICAgICAgLy8g5b2T5YmN6Lev55SxdXJsXG4gICAgICBsZXQgdXJsOiBzdHJpbmcgPSBzdGF0ZS51cmw7XG4gICAgICAvLyDosIPnlKhjaGVja0xvZ2lu5qOA5p+l5piv5ZCm55m75b2VXG4gICAgICByZXR1cm4gdGhpcy5hdXRoUHJvZmlsZVNlcnYuY2hlY2tQcm9maWxlKHVybCk7XG4gIH1cblxufVxuIl19
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/profile/auth-profile.guard.mjs
7
+ */
8
+ import{Injectable}from"@angular/core";import{Router}from"@angular/router";import{AuthProfileService}from"./auth-profile.service";import*as i0 from"@angular/core";import*as i1 from"./auth-profile.service";import*as i2 from"@angular/router";export class AuthProfileGuard{constructor(r,e){this.authProfileServ=r,this.router=e}canActivate(r,e){let t=e.url;return this.authProfileServ.checkProfile(t)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileGuard,deps:[{token:i1.AuthProfileService},{token:i2.Router}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileGuard,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileGuard,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.AuthProfileService},{type:i2.Router}]});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL3Byb2ZpbGUvYXV0aC1wcm9maWxlLmd1YXJkLm1qcw==`
10
+