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.
- package/LICENSE.md +8 -0
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/agent.prompt.mjs +10 -122
- package/esm2022/lib/aigc/agent/index.mjs +10 -2
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -97
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -104
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -111
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -166
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -36
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -141
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -92
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -207
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -236
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +10 -137
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -69
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -269
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -94
- package/esm2022/lib/aigc/index.mjs +10 -13
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +8 -736
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -181
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -229
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -2
- package/esm2022/lib/aigc/voice/audio.player.mjs +10 -52
- package/esm2022/lib/aigc/voice/class-asr.mjs +8 -79
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +8 -501
- package/esm2022/lib/aigc/voice/index.mjs +10 -3
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/stream.player.mjs +10 -0
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +8 -233
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -190
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -110
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -98
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -100
- package/esm2022/lib/nova-cloud/index.mjs +10 -2
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -148
- package/esm2022/lib/platform/cross.service.mjs +10 -63
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -236
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -130
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -462
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/storage.module.mjs +10 -41
- package/esm2022/lib/user/account/account.service.mjs +10 -221
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -62
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -373
- package/esm2022/lib/user/login/login.component.mjs +10 -913
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -273
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -115
- package/esm2022/lib/user/profile/profile.module.mjs +10 -57
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -106
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -13
- package/fesm2022/fmode-ng.mjs +7 -8895
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/voice/stream.player.d.ts +10 -0
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,41 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import *
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, imports: [CommonModule, i1.IonicModule,
|
|
12
|
-
// 独立组件
|
|
13
|
-
HwobsManagerComponent], exports: [HwobsManagerComponent] }); }
|
|
14
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, providers: [
|
|
15
|
-
Diagnostic,
|
|
16
|
-
NovaUploadService
|
|
17
|
-
], imports: [CommonModule,
|
|
18
|
-
IonicModule.forRoot({ mode: "ios" }),
|
|
19
|
-
// 独立组件
|
|
20
|
-
HwobsManagerComponent] }); }
|
|
21
|
-
}
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, decorators: [{
|
|
23
|
-
type: NgModule,
|
|
24
|
-
args: [{
|
|
25
|
-
declarations: [],
|
|
26
|
-
imports: [
|
|
27
|
-
CommonModule,
|
|
28
|
-
IonicModule.forRoot({ mode: "ios" }),
|
|
29
|
-
// 独立组件
|
|
30
|
-
HwobsManagerComponent,
|
|
31
|
-
],
|
|
32
|
-
exports: [
|
|
33
|
-
HwobsManagerComponent
|
|
34
|
-
],
|
|
35
|
-
providers: [
|
|
36
|
-
Diagnostic,
|
|
37
|
-
NovaUploadService
|
|
38
|
-
]
|
|
39
|
-
}]
|
|
40
|
-
}] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3N0b3JhZ2Uvc3RvcmFnZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDckYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBbUJyRCxNQUFNLE9BQU8saUJBQWlCOytHQUFqQixpQkFBaUI7Z0hBQWpCLGlCQUFpQixZQWIxQixZQUFZO1lBRVosT0FBTztZQUNQLHFCQUFxQixhQUdyQixxQkFBcUI7Z0hBT1osaUJBQWlCLGFBTGxCO1lBQ1IsVUFBVTtZQUNWLGlCQUFpQjtTQUNsQixZQVhDLFlBQVk7WUFDWixXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxDQUFDO1lBQ2pDLE9BQU87WUFDUCxxQkFBcUI7OzRGQVVaLGlCQUFpQjtrQkFqQjdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsQ0FBQzt3QkFDakMsT0FBTzt3QkFDUCxxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBQzt3QkFDTixxQkFBcUI7cUJBQ3RCO29CQUNELFNBQVMsRUFBQzt3QkFDUixVQUFVO3dCQUNWLGlCQUFpQjtxQkFDbEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSHdvYnNNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wLWh3b2JzLW1hbmFnZXIvaHdvYnMtbWFuYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcbmltcG9ydCB7IE5vdmFVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlLXVwbG9hZCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbmljTW9kdWxlLmZvclJvb3Qoe21vZGU6XCJpb3NcIn0pLFxuICAgIC8vIOeLrOeri+e7hOS7tlxuICAgIEh3b2JzTWFuYWdlckNvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czpbXG4gICAgSHdvYnNNYW5hZ2VyQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczpbXG4gICAgRGlhZ25vc3RpYyxcbiAgICBOb3ZhVXBsb2FkU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZtb2RlU3RvcmdlTW9kdWxlIHsgfVxuIl19
|
|
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/storage/storage.module.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{NgModule}from"@angular/core";import{CommonModule}from"@angular/common";import{HwobsManagerComponent}from"./comp-hwobs-manager/hwobs-manager.component";import{IonicModule}from"@ionic/angular";import{Diagnostic}from"@awesome-cordova-plugins/diagnostic/ngx";import{NovaUploadService}from"./service-upload";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";export class FmodeStorgeModule{static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule})}static{this.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,imports:[CommonModule,i1.IonicModule,HwobsManagerComponent],exports:[HwobsManagerComponent]})}static{this.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,providers:[Diagnostic,NovaUploadService],imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmodeStorgeModule,decorators:[{type:NgModule,args:[{declarations:[],imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent],exports:[HwobsManagerComponent],providers:[Diagnostic,NovaUploadService]}]}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3N0b3JhZ2UubW9kdWxlLm1qcw==`
|
|
10
|
+
|
|
@@ -1,221 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import * as i2 from
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
constructor(ncloud, authServ, http) {
|
|
12
|
-
this.ncloud = ncloud;
|
|
13
|
-
this.authServ = authServ;
|
|
14
|
-
this.http = http;
|
|
15
|
-
this.company = "";
|
|
16
|
-
this.billing = {
|
|
17
|
-
credit: {
|
|
18
|
-
usedDetail: {},
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
this.wxAppId = "";
|
|
22
|
-
this.wxpayEnabled = false;
|
|
23
|
-
this.appid = localStorage.getItem("WECHAT_APP_ID") || "wxb4193c93ae9aa696";
|
|
24
|
-
this.company = this.authServ.company || localStorage.getItem("company");
|
|
25
|
-
this.getBilling();
|
|
26
|
-
this.getProfile();
|
|
27
|
-
this.getUserOpenid();
|
|
28
|
-
}
|
|
29
|
-
/* 获取认证信息 */
|
|
30
|
-
async getProfile() {
|
|
31
|
-
let uid = Parse.User.current()?.id;
|
|
32
|
-
if (!uid)
|
|
33
|
-
return;
|
|
34
|
-
let query = new Parse.Query("Profile");
|
|
35
|
-
query.equalTo("user", uid);
|
|
36
|
-
query.equalTo("company", this.company);
|
|
37
|
-
query.notEqualTo("isDeleted", true);
|
|
38
|
-
let profile = await query.first();
|
|
39
|
-
if (profile?.id) {
|
|
40
|
-
this.profile = profile;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async getBilling() {
|
|
44
|
-
let data;
|
|
45
|
-
// if(!Parse.User.current()?.getSessionToken())return // 用户登陆时才可查询账单
|
|
46
|
-
try {
|
|
47
|
-
data = await this.ncloud.apig("aigc/account", null, "get");
|
|
48
|
-
}
|
|
49
|
-
catch (err) { }
|
|
50
|
-
if (data?.credit) {
|
|
51
|
-
this.billing = data;
|
|
52
|
-
}
|
|
53
|
-
return data;
|
|
54
|
-
}
|
|
55
|
-
/* 如果是微信内置浏览器,获取登录code */
|
|
56
|
-
async getUserOpenid() {
|
|
57
|
-
let ua = navigator.userAgent.toLowerCase();
|
|
58
|
-
let isWeixin = ua.indexOf("micromessenger") != -1;
|
|
59
|
-
let code = this.getQueryStringByName("code");
|
|
60
|
-
let openid = localStorage.getItem("openid");
|
|
61
|
-
if (!openid) {
|
|
62
|
-
if (!Parse.User.current())
|
|
63
|
-
return;
|
|
64
|
-
let wechat = Parse.User.current().get("wechat");
|
|
65
|
-
openid = wechat?.[this.appid]?.openid;
|
|
66
|
-
if (isWeixin) {
|
|
67
|
-
if (!code) {
|
|
68
|
-
this.authWechat();
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
await this.getwechat(code);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
authWechat(url = "/account/billing") {
|
|
77
|
-
if (!localStorage.getItem("openid")) {
|
|
78
|
-
// let REDIRECT_URI = "https://ai.fmode.cn" + url;
|
|
79
|
-
let REDIRECT_URI = window.location.href;
|
|
80
|
-
REDIRECT_URI = encodeURIComponent(REDIRECT_URI);
|
|
81
|
-
// console.log(REDIRECT_URI);
|
|
82
|
-
// console.log(
|
|
83
|
-
// "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
|
|
84
|
-
// this.appid +
|
|
85
|
-
// "&redirect_uri=" +
|
|
86
|
-
// REDIRECT_URI +
|
|
87
|
-
// "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
|
|
88
|
-
// );
|
|
89
|
-
window.location.href =
|
|
90
|
-
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
|
|
91
|
-
this.appid +
|
|
92
|
-
"&redirect_uri=" +
|
|
93
|
-
REDIRECT_URI +
|
|
94
|
-
"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
//根据QueryString参数名称获取值
|
|
99
|
-
getQueryStringByName(name) {
|
|
100
|
-
let result = location.search.match(new RegExp("[?&]" + name + "=([^&]+)", "i"));
|
|
101
|
-
if (result == null || result.length < 1) {
|
|
102
|
-
return "";
|
|
103
|
-
}
|
|
104
|
-
return result[1];
|
|
105
|
-
}
|
|
106
|
-
async getwechat(code, url = "/account/billing") {
|
|
107
|
-
return new Promise(async (resolve, reject) => {
|
|
108
|
-
this.http
|
|
109
|
-
.post(`https://server.fmode.cn/api/wechat/get_wx`, {
|
|
110
|
-
company: this.company,
|
|
111
|
-
code: code,
|
|
112
|
-
})
|
|
113
|
-
.subscribe(async (res) => {
|
|
114
|
-
console.log(res);
|
|
115
|
-
if (res && res.code == 200 && res.data.openid) {
|
|
116
|
-
let openid = res.data.openid;
|
|
117
|
-
// localStorage.setItem('authData', JSON.stringify(res.data))
|
|
118
|
-
localStorage.setItem("openid", openid);
|
|
119
|
-
localStorage.removeItem("code");
|
|
120
|
-
let wxopts = {};
|
|
121
|
-
wxopts[this.appid] = {
|
|
122
|
-
"openid": openid,
|
|
123
|
-
},
|
|
124
|
-
Parse.User.current().set("wechat", wxopts);
|
|
125
|
-
await Parse.User.current().save();
|
|
126
|
-
resolve(true);
|
|
127
|
-
}
|
|
128
|
-
}, async (err) => {
|
|
129
|
-
console.log("Error updating items", err);
|
|
130
|
-
this.authWechat(url);
|
|
131
|
-
reject(false);
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
/* 获取微信签名 */
|
|
136
|
-
getWXSignPackageInWechat() {
|
|
137
|
-
let params = {
|
|
138
|
-
company: this.company,
|
|
139
|
-
href: encodeURIComponent(location.href.split("?")[0]),
|
|
140
|
-
};
|
|
141
|
-
this.http
|
|
142
|
-
.post(`https://server.fmode.cn/api/wechat/getconfig`, params)
|
|
143
|
-
.subscribe((response) => {
|
|
144
|
-
// 返回的签名信息
|
|
145
|
-
let res = response;
|
|
146
|
-
const signPackage = res.data;
|
|
147
|
-
this.wxAppId = signPackage.appid;
|
|
148
|
-
this.wxpayEnabled = true;
|
|
149
|
-
wx.config({
|
|
150
|
-
debug: false, // 开启调试模式
|
|
151
|
-
appId: signPackage.appid, // 必填,公众号的唯一标识
|
|
152
|
-
timestamp: signPackage.timestamp, // 必填,生成签名的时间戳
|
|
153
|
-
nonceStr: signPackage.nonceStr, // 必填,生成签名的随机串
|
|
154
|
-
signature: signPackage.signature, // 必填,签名,见附录1
|
|
155
|
-
jsApiList: [
|
|
156
|
-
"chooseWXPay", // JSAPI微信支付
|
|
157
|
-
'onMenuShareTimeline', //分享到微信朋友圈
|
|
158
|
-
'onMenuShareAppMessage', //分享给微信朋友
|
|
159
|
-
'onMenuShareQQ', //分享到QQ
|
|
160
|
-
'onMenuShareQZone', //分享到QQ空间
|
|
161
|
-
'updateAppMessageShareData', //分享到微信及QQ(新接口)
|
|
162
|
-
'updateTimelineShareData' //分享到朋友圈”及“分享到QQ空间(新接口
|
|
163
|
-
], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
|
|
164
|
-
});
|
|
165
|
-
let url = 'https://ai.fmode.cn';
|
|
166
|
-
let pathname = location.pathname;
|
|
167
|
-
url + pathname + '?invite=' + Parse.User.current()?.id;
|
|
168
|
-
let shareInfo = this.shareInfo || {
|
|
169
|
-
title: '飞码AI', // 分享标题
|
|
170
|
-
desc: '解放创意引领未来|国际前沿的AIGC平台', // 分享描述
|
|
171
|
-
link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
|
|
172
|
-
type: 'link', //分享类型,music、video或link,不填默认为link
|
|
173
|
-
imgUrl: 'https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png', // 分享图标
|
|
174
|
-
success: function () {
|
|
175
|
-
// 设置成功
|
|
176
|
-
console.log('分享成功');
|
|
177
|
-
},
|
|
178
|
-
error: function () {
|
|
179
|
-
console.log('分享失败');
|
|
180
|
-
},
|
|
181
|
-
cancel: function () {
|
|
182
|
-
console.log('取消分享');
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
wx.ready(() => {
|
|
186
|
-
wx.updateAppMessageShareData(shareInfo); //分享到微信好友或者qq好友
|
|
187
|
-
wx.updateTimelineShareData(shareInfo); //分享到朋友圈或者qq空间
|
|
188
|
-
});
|
|
189
|
-
wx.error(() => { });
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
async saveAccountLog(info, orderid, company, message) {
|
|
193
|
-
let url = "https://test.fmode.cn/api/apig/saveAccountLog";
|
|
194
|
-
return new Promise((res, rej) => {
|
|
195
|
-
this.http
|
|
196
|
-
.post(url, {
|
|
197
|
-
company: company,
|
|
198
|
-
uid: Parse.User.current().id,
|
|
199
|
-
orderid: orderid,
|
|
200
|
-
info: info,
|
|
201
|
-
})
|
|
202
|
-
.subscribe((data) => {
|
|
203
|
-
console.log(data);
|
|
204
|
-
res(true);
|
|
205
|
-
}, (err) => {
|
|
206
|
-
console.warn(err);
|
|
207
|
-
message && message.error("请求超时,请稍后再试");
|
|
208
|
-
rej();
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, deps: [{ token: i1.NovaCloudService }, { token: i2.AuthService }, { token: i3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
213
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, providedIn: "root" }); }
|
|
214
|
-
}
|
|
215
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, decorators: [{
|
|
216
|
-
type: Injectable,
|
|
217
|
-
args: [{
|
|
218
|
-
providedIn: "root",
|
|
219
|
-
}]
|
|
220
|
-
}], ctorParameters: () => [{ type: i1.NovaCloudService }, { type: i2.AuthService }, { type: i3.HttpClient }] });
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi91c2VyL2FjY291bnQvYWNjb3VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBTWxELE1BQU0sT0FBTyxjQUFjO0lBWXpCLFlBQ1UsTUFBd0IsRUFDeEIsUUFBcUIsRUFDckIsSUFBZ0I7UUFGaEIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBZDFCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFRO1lBQ2IsTUFBTSxFQUFFO2dCQUNOLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7U0FDRixDQUFDO1FBRUYsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLFVBQUssR0FBVSxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1FBTzNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVB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QUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixHQUFHLENBQUUsSUFBSSxDQUFDLENBQUE7WUFDWixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDdkMsR0FBRyxFQUFFLENBQUE7WUFDUCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQzsrR0F4TlUsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5vdmFDbG91ZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vbm92YS1jbG91ZC9ub3ZhLWNsb3VkLnNlcnZpY2VcIjtcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSBcIi4uL2xvZ2luL2F1dGguc2VydmljZVwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuZGVjbGFyZSB2YXIgd3g6IGFueTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2Uge1xuICBjb21wYW55OiBzdHJpbmcgPSBcIlwiO1xuICBiaWxsaW5nOiBhbnkgPSB7XG4gICAgY3JlZGl0OiB7XG4gICAgICB1c2VkRGV0YWlsOiB7fSxcbiAgICB9LFxuICB9O1xuICBwcm9maWxlOiBQYXJzZS5PYmplY3Q7XG4gIHd4QXBwSWQgPSBcIlwiO1xuICB3eHBheUVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXBwaWQ6c3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJXRUNIQVRfQVBQX0lEXCIpIHx8IFwid3hiNDE5M2M5M2FlOWFhNjk2XCI7XG4gIHNoYXJlSW5mbzphbnlcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuY2xvdWQ6IE5vdmFDbG91ZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydjogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIHRoaXMuY29tcGFueSA9IHRoaXMuYXV0aFNlcnYuY29tcGFueSB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImNvbXBhbnlcIik7XG4gICAgdGhpcy5nZXRCaWxsaW5nKCk7XG4gICAgdGhpcy5nZXRQcm9maWxlKCk7XG4gICAgdGhpcy5nZXRVc2VyT3BlbmlkKCk7XG4gIH1cbiAgLyog6I635Y+W6K6k6K+B5L+h5oGvICovXG4gIGFzeW5jIGdldFByb2ZpbGUoKSB7XG4gICAgbGV0IHVpZCA9IFBhcnNlLlVzZXIuY3VycmVudCgpPy5pZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuO1xuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIlByb2ZpbGVcIik7XG4gICAgcXVlcnkuZXF1YWxUbyhcInVzZXJcIiwgdWlkKTtcbiAgICBxdWVyeS5lcXVhbFRvKFwiY29tcGFueVwiLCB0aGlzLmNvbXBhbnkpO1xuICAgIHF1ZXJ5Lm5vdEVxdWFsVG8oXCJpc0RlbGV0ZWRcIiwgdHJ1ZSk7XG4gICAgbGV0IHByb2ZpbGUgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xuICAgIGlmIChwcm9maWxlPy5pZCkge1xuICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgZ2V0QmlsbGluZygpIHtcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIC8vIGlmKCFQYXJzZS5Vc2VyLmN1cnJlbnQoKT8uZ2V0U2Vzc2lvblRva2VuKCkpcmV0dXJuIC8vIOeUqOaIt+eZu+mZhuaXtuaJjeWPr+afpeivoui0puWNlVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5uY2xvdWQuYXBpZyhcImFpZ2MvYWNjb3VudFwiLCBudWxsLCBcImdldFwiKTtcbiAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgaWYgKGRhdGE/LmNyZWRpdCkge1xuICAgICAgdGhpcy5iaWxsaW5nID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLyog5aaC5p6c5piv5b6u5L+h5YaF572u5rWP6KeI5Zmo77yM6I635Y+W55m75b2VY29kZSAqL1xuICBhc3luYyBnZXRVc2VyT3BlbmlkKCkge1xuICAgIGxldCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaXNXZWl4aW4gPSB1YS5pbmRleE9mKFwibWljcm9tZXNzZW5nZXJcIikgIT0gLTE7XG4gICAgbGV0IGNvZGUgPSB0aGlzLmdldFF1ZXJ5U3RyaW5nQnlOYW1lKFwiY29kZVwiKTtcbiAgICBsZXQgb3BlbmlkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJvcGVuaWRcIik7XG4gICAgaWYgKCFvcGVuaWQpIHtcbiAgICAgIGlmKCFQYXJzZS5Vc2VyLmN1cnJlbnQoKSkgcmV0dXJuXG4gICAgICBsZXQgd2VjaGF0ID0gUGFyc2UuVXNlci5jdXJyZW50KCkuZ2V0KFwid2VjaGF0XCIpO1xuICAgICAgb3BlbmlkID0gd2VjaGF0Py5bdGhpcy5hcHBpZF0/Lm9wZW5pZDtcbiAgICAgIGlmIChpc1dlaXhpbikge1xuICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICB0aGlzLmF1dGhXZWNoYXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldHdlY2hhdChjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBhdXRoV2VjaGF0KHVybDogc3RyaW5nID0gXCIvYWNjb3VudC9iaWxsaW5nXCIpIHtcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKFwib3BlbmlkXCIpKSB7XG4gICAgICAvLyBsZXQgUkVESVJFQ1RfVVJJID0gXCJodHRwczovL2FpLmZtb2RlLmNuXCIgKyB1cmw7XG4gICAgICBsZXQgUkVESVJFQ1RfVVJJID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBSRURJUkVDVF9VUkkgPSBlbmNvZGVVUklDb21wb25lbnQoUkVESVJFQ1RfVVJJKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFJFRElSRUNUX1VSSSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgIC8vICAgXCJodHRwczovL29wZW4ud2VpeGluLnFxLmNvbS9jb25uZWN0L29hdXRoMi9hdXRob3JpemU/YXBwaWQ9XCIgK1xuICAgICAgLy8gICAgIHRoaXMuYXBwaWQgK1xuICAgICAgLy8gICAgIFwiJnJlZGlyZWN0X3VyaT1cIiArXG4gICAgICAvLyAgICAgUkVESVJFQ1RfVVJJICtcbiAgICAgIC8vICAgICBcIiZyZXNwb25zZV90eXBlPWNvZGUmc2NvcGU9c25zYXBpX2Jhc2Umc3RhdGU9U1RBVEUjd2VjaGF0X3JlZGlyZWN0XCJcbiAgICAgIC8vICk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9XG4gICAgICAgIFwiaHR0cHM6Ly9vcGVuLndlaXhpbi5xcS5jb20vY29ubmVjdC9vYXV0aDIvYXV0aG9yaXplP2FwcGlkPVwiICtcbiAgICAgICAgdGhpcy5hcHBpZCArXG4gICAgICAgIFwiJnJlZGlyZWN0X3VyaT1cIiArXG4gICAgICAgIFJFRElSRUNUX1VSSSArXG4gICAgICAgIFwiJnJlc3BvbnNlX3R5cGU9Y29kZSZzY29wZT1zbnNhcGlfdXNlcmluZm8mc3RhdGU9U1RBVEUjd2VjaGF0X3JlZGlyZWN0XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIC8v5qC55o2uUXVlcnlTdHJpbmflj4LmlbDlkI3np7Dojrflj5blgLxcbiAgZ2V0UXVlcnlTdHJpbmdCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHJlc3VsdCA9IGxvY2F0aW9uLnNlYXJjaC5tYXRjaChcbiAgICAgIG5ldyBSZWdFeHAoXCJbPyZdXCIgKyBuYW1lICsgXCI9KFteJl0rKVwiLCBcImlcIilcbiAgICApO1xuICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRbMV07XG4gIH1cbiAgYXN5bmMgZ2V0d2VjaGF0KFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyA9IFwiL2FjY291bnQvYmlsbGluZ1wiXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3QoYGh0dHBzOi8vc2VydmVyLmZtb2RlLmNuL2FwaS93ZWNoYXQvZ2V0X3d4YCwge1xuICAgICAgICAgIGNvbXBhbnk6IHRoaXMuY29tcGFueSxcbiAgICAgICAgICBjb2RlOiBjb2RlLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhLm9wZW5pZCkge1xuICAgICAgICAgICAgICBsZXQgb3BlbmlkID0gcmVzLmRhdGEub3BlbmlkO1xuICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXV0aERhdGEnLCBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkpXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwib3BlbmlkXCIsIG9wZW5pZCk7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiY29kZVwiKTtcbiAgICAgICAgICAgICAgbGV0IHd4b3B0cyA9IHt9XG4gICAgICAgICAgICAgIHd4b3B0c1t0aGlzLmFwcGlkXSA9IHtcbiAgICAgICAgICAgICAgICBcIm9wZW5pZFwiOiBvcGVuaWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFBhcnNlLlVzZXIuY3VycmVudCgpLnNldChcIndlY2hhdFwiLCB3eG9wdHMpO1xuICAgICAgICAgICAgICBhd2FpdCBQYXJzZS5Vc2VyLmN1cnJlbnQoKS5zYXZlKCk7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIHVwZGF0aW5nIGl0ZW1zXCIsIGVycik7XG4gICAgICAgICAgICB0aGlzLmF1dGhXZWNoYXQodXJsKTtcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8qIOiOt+WPluW+ruS/oeetvuWQjSAqL1xuICBnZXRXWFNpZ25QYWNrYWdlSW5XZWNoYXQoKSB7XG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgIGNvbXBhbnk6IHRoaXMuY29tcGFueSxcbiAgICAgIGhyZWY6IGVuY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXSksXG4gICAgfTtcbiAgICB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGBodHRwczovL3NlcnZlci5mbW9kZS5jbi9hcGkvd2VjaGF0L2dldGNvbmZpZ2AsIHBhcmFtcylcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIOi/lOWbnueahOetvuWQjeS/oeaBr1xuICAgICAgICBsZXQgcmVzOiBhbnkgPSByZXNwb25zZTtcbiAgICAgICAgY29uc3Qgc2lnblBhY2thZ2UgPSByZXMuZGF0YTtcbiAgICAgICAgdGhpcy53eEFwcElkID0gc2lnblBhY2thZ2UuYXBwaWQ7XG4gICAgICAgIHRoaXMud3hwYXlFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgICB3eC5jb25maWcoe1xuICAgICAgICAgIGRlYnVnOiBmYWxzZSwgLy8g5byA5ZCv6LCD6K+V5qih5byPXG4gICAgICAgICAgYXBwSWQ6IHNpZ25QYWNrYWdlLmFwcGlkLCAvLyDlv4XloavvvIzlhazkvJflj7fnmoTllK/kuIDmoIfor4ZcbiAgICAgICAgICB0aW1lc3RhbXA6IHNpZ25QYWNrYWdlLnRpbWVzdGFtcCwgLy8g5b+F5aGr77yM55Sf5oiQ562+5ZCN55qE5pe26Ze05oizXG4gICAgICAgICAgbm9uY2VTdHI6IHNpZ25QYWNrYWdlLm5vbmNlU3RyLCAvLyDlv4XloavvvIznlJ/miJDnrb7lkI3nmoTpmo/mnLrkuLJcbiAgICAgICAgICBzaWduYXR1cmU6IHNpZ25QYWNrYWdlLnNpZ25hdHVyZSwgLy8g5b+F5aGr77yM562+5ZCN77yM6KeB6ZmE5b2VMVxuICAgICAgICAgIGpzQXBpTGlzdDogW1xuICAgICAgICAgICAgXCJjaG9vc2VXWFBheVwiLCAvLyBKU0FQSeW+ruS/oeaUr+S7mFxuICAgICAgICAgICAgJ29uTWVudVNoYXJlVGltZWxpbmUnLCAvL+WIhuS6q+WIsOW+ruS/oeaci+WPi+WciFxuICAgICAgICAgICAgJ29uTWVudVNoYXJlQXBwTWVzc2FnZScsIC8v5YiG5Lqr57uZ5b6u5L+h5pyL5Y+LXG4gICAgICAgICAgICAnb25NZW51U2hhcmVRUScsIC8v5YiG5Lqr5YiwUVFcbiAgICAgICAgICAgICdvbk1lbnVTaGFyZVFab25lJywgLy/liIbkuqvliLBRUeepuumXtFxuICAgICAgICAgICAgJ3VwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGEnLCAvL+WIhuS6q+WIsOW+ruS/oeWPilFR77yI5paw5o6l5Y+j77yJXG4gICAgICAgICAgICAndXBkYXRlVGltZWxpbmVTaGFyZURhdGEnIC8v5YiG5Lqr5Yiw5pyL5Y+L5ZyI4oCd5Y+K4oCc5YiG5Lqr5YiwUVHnqbrpl7TvvIjmlrDmjqXlj6NcbiAgICAgICAgICBdLCAvLyDlv4XloavvvIzpnIDopoHkvb/nlKjnmoRKU+aOpeWPo+WIl+ihqO+8jOaJgOaciUpT5o6l5Y+j5YiX6KGo6KeB6ZmE5b2VMlxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGxldCB1cmwgPSAnaHR0cHM6Ly9haS5mbW9kZS5jbidcbiAgICAgICAgbGV0IHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWVcbiAgICAgICAgdXJsICsgcGF0aG5hbWUgKyAnP2ludml0ZT0nICsgUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkXG4gICAgICAgIGxldCBzaGFyZUluZm8gPSB0aGlzLnNoYXJlSW5mbyB8fCB7XG4gICAgICAgICAgdGl0bGU6ICfpo57noIFBSScsIC8vIOWIhuS6q+agh+mimFxuICAgICAgICAgIGRlc2M6ICfop6PmlL7liJvmhI/lvJXpoobmnKrmnaV85Zu96ZmF5YmN5rK/55qEQUlHQ+W5s+WPsCcsIC8vIOWIhuS6q+aPj+i/sFxuICAgICAgICAgIGxpbms6IHVybCwgLy8g5YiG5Lqr6ZO+5o6l77yM6K+l6ZO+5o6l5Z+f5ZCN5oiW6Lev5b6E5b+F6aG75LiO5b2T5YmN6aG16Z2i5a+55bqU55qE5YWs5LyX5Y+3SlPlronlhajln5/lkI3kuIDoh7RcbiAgICAgICAgICB0eXBlOiAnbGluaycsIC8v5YiG5Lqr57G75Z6LLG11c2lj44CBdmlkZW/miJZsaW5r77yM5LiN5aGr6buY6K6k5Li6bGlua1xuICAgICAgICAgIGltZ1VybDogJ2h0dHBzOi8vZmlsZS1jbG91ZC5mbW9kZS5jbi9FNEtwR3ZURXRvLzIwMjMwODIyLzNta2Y0MTAzMzYyMzI3NS5wbmcnLCAvLyDliIbkuqvlm77moIdcbiAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIOiuvue9ruaIkOWKn1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+WIhuS6q+aIkOWKnycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+WIhuS6q+Wksei0pScpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCflj5bmtojliIbkuqsnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgd3gucmVhZHkoKCkgPT4ge1xuICAgICAgICAgIHd4LnVwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGEoc2hhcmVJbmZvKTsgLy/liIbkuqvliLDlvq7kv6Hlpb3lj4vmiJbogIVxceWlveWPi1xuICAgICAgICAgIHd4LnVwZGF0ZVRpbWVsaW5lU2hhcmVEYXRhKHNoYXJlSW5mbyk7IC8v5YiG5Lqr5Yiw5pyL5Y+L5ZyI5oiW6ICFcXHnqbrpl7RcbiAgICAgICAgfSk7XG4gICAgICAgIHd4LmVycm9yKCgpID0+IHt9KTtcbiAgICAgIH0pO1xuICB9XG4gIFxuICBhc3luYyBzYXZlQWNjb3VudExvZyhpbmZvOiBvYmplY3QsIG9yZGVyaWQ6c3RyaW5nLCBjb21wYW55OnN0cmluZywgbWVzc2FnZTphbnkpIHtcbiAgICBsZXQgdXJsID0gXCJodHRwczovL3Rlc3QuZm1vZGUuY24vYXBpL2FwaWcvc2F2ZUFjY291bnRMb2dcIjtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcyxyZWopPT57XG4gICAgICB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwge1xuICAgICAgICBjb21wYW55OiBjb21wYW55LFxuICAgICAgICB1aWQ6IFBhcnNlLlVzZXIuY3VycmVudCgpLmlkLFxuICAgICAgICBvcmRlcmlkOiBvcmRlcmlkLFxuICAgICAgICBpbmZvOiBpbmZvLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICByZXMgKHRydWUpXG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICBtZXNzYWdlICYmIG1lc3NhZ2UuZXJyb3IoXCLor7fmsYLotoXml7bvvIzor7fnqI3lkI7lho3or5VcIik7XG4gICAgICAgICAgcmVqKClcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KVxuICAgIFxuICB9XG59XG4iXX0=
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/user/account/account.service.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{NovaCloudService}from"../../nova-cloud/nova-cloud.service";import Parse from"parse";import{AuthService}from"../login/auth.service";import{HttpClient}from"@angular/common/http";import*as i0 from"@angular/core";import*as i1 from"../../nova-cloud/nova-cloud.service";import*as i2 from"../login/auth.service";import*as i3 from"@angular/common/http";export class AccountService{constructor(e,t,o){this.ncloud=e,this.authServ=t,this.http=o,this.company="",this.billing={credit:{usedDetail:{}}},this.wxAppId="",this.wxpayEnabled=!1,this.appid=localStorage.getItem("WECHAT_APP_ID")||"wxb4193c93ae9aa696",this.company=this.authServ.company||localStorage.getItem("company"),this.getBilling(),this.getProfile(),this.getUserOpenid()}async getProfile(){let e=Parse.User.current()?.id;if(!e)return;let t=new Parse.Query("Profile");t.equalTo("user",e),t.equalTo("company",this.company),t.notEqualTo("isDeleted",!0);let o=await t.first();o?.id&&(this.profile=o)}async getBilling(){let e;try{e=await this.ncloud.apig("aigc/account",null,"get")}catch(e){}return e?.credit&&(this.billing=e),e}async getUserOpenid(){let e=-1!=navigator.userAgent.toLowerCase().indexOf("micromessenger"),t=this.getQueryStringByName("code"),o=localStorage.getItem("openid");if(!o){if(!Parse.User.current())return;let i=Parse.User.current().get("wechat");o=i?.[this.appid]?.openid,e&&(t?await this.getwechat(t):this.authWechat())}}authWechat(e="/account/billing"){if(!localStorage.getItem("openid")){let e=window.location.href;return e=encodeURIComponent(e),void(window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+this.appid+"&redirect_uri="+e+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect")}}getQueryStringByName(e){let t=location.search.match(new RegExp("[?&]"+e+"=([^&]+)","i"));return null==t||t.length<1?"":t[1]}async getwechat(e,t="/account/billing"){return new Promise((async(o,i)=>{this.http.post("https://server.fmode.cn/api/wechat/get_wx",{company:this.company,code:e}).subscribe((async e=>{if(console.log(e),e&&200==e.code&&e.data.openid){let t=e.data.openid;localStorage.setItem("openid",t),localStorage.removeItem("code");let i={};i[this.appid]={openid:t},Parse.User.current().set("wechat",i),await Parse.User.current().save(),o(!0)}}),(async e=>{console.log("Error updating items",e),this.authWechat(t),i(!1)}))}))}getWXSignPackageInWechat(){let e={company:this.company,href:encodeURIComponent(location.href.split("?")[0])};this.http.post("https://server.fmode.cn/api/wechat/getconfig",e).subscribe((e=>{const t=e.data;this.wxAppId=t.appid,this.wxpayEnabled=!0,wx.config({debug:!1,appId:t.appid,timestamp:t.timestamp,nonceStr:t.nonceStr,signature:t.signature,jsApiList:["chooseWXPay","onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareQZone","updateAppMessageShareData","updateTimelineShareData"]});let o="https://ai.fmode.cn";location.pathname;Parse.User.current()?.id;let i=this.shareInfo||{title:"飞码AI",desc:"解放创意引领未来|国际前沿的AIGC平台",link:o,type:"link",imgUrl:"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png",success:function(){console.log("分享成功")},error:function(){console.log("分享失败")},cancel:function(){console.log("取消分享")}};wx.ready((()=>{wx.updateAppMessageShareData(i),wx.updateTimelineShareData(i)})),wx.error((()=>{}))}))}async saveAccountLog(e,t,o,i){return new Promise(((a,r)=>{this.http.post("https://test.fmode.cn/api/apig/saveAccountLog",{company:o,uid:Parse.User.current().id,orderid:t,info:e}).subscribe((e=>{console.log(e),a(!0)}),(e=>{console.warn(e),i&&i.error("请求超时,请稍后再试"),r()}))}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,deps:[{token:i1.NovaCloudService},{token:i2.AuthService},{token:i3.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.NovaCloudService},{type:i2.AuthService},{type:i3.HttpClient}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL2FjY291bnQvYWNjb3VudC5zZXJ2aWNlLm1qcw==`
|
|
10
|
+
|
|
@@ -1,135 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
constructor() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.drawCode = []; //验证码数组
|
|
12
|
-
this.vCode = ''; //用户输入code
|
|
13
|
-
this.changeVal = new EventEmitter(); //改变时触发
|
|
14
|
-
this.onEnter = new EventEmitter(); //enter按下触发
|
|
15
|
-
this.code = '';
|
|
16
|
-
}
|
|
17
|
-
ngOnInit() { }
|
|
18
|
-
ngAfterViewInit() {
|
|
19
|
-
//Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
|
|
20
|
-
//Add 'implements AfterViewInit' to the class.
|
|
21
|
-
this.updateDrawCode();
|
|
22
|
-
}
|
|
23
|
-
updateDrawCode() {
|
|
24
|
-
let canvas_width = 100;
|
|
25
|
-
let canvas_height = 38;
|
|
26
|
-
let canv = document.getElementById(this.canvas_id);
|
|
27
|
-
canv && this.canvasDom.nativeElement.removeChild(canv);
|
|
28
|
-
let _a = document.getElementById(this.canvas_id + '_a');
|
|
29
|
-
_a && this.canvasDom.nativeElement.removeChild(_a);
|
|
30
|
-
this.canvasDom.nativeElement;
|
|
31
|
-
let canvas = document.createElement("canvas");
|
|
32
|
-
canvas.className = "canvas";
|
|
33
|
-
canvas.setAttribute("id", this.canvas_id);
|
|
34
|
-
canvas.addEventListener("click", () => {
|
|
35
|
-
this.updateDrawCode();
|
|
36
|
-
});
|
|
37
|
-
let context = canvas.getContext("2d"); //获取到canvas画图的环境,演员表演的舞台
|
|
38
|
-
canvas.width = canvas_width;
|
|
39
|
-
canvas.height = canvas_height;
|
|
40
|
-
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";
|
|
41
|
-
let aCode = sCode.split(",");
|
|
42
|
-
let aLength = aCode.length; //获取到数组的长度
|
|
43
|
-
for (let i = 0; i <= 3; i++) {
|
|
44
|
-
let j = Math.floor(Math.random() * aLength); //获取到随机的索引值
|
|
45
|
-
let deg = (Math.random() * 30 * Math.PI) / 180; //产生0~30之间的随机弧度
|
|
46
|
-
let txt = aCode[j]; //得到随机的一个内容
|
|
47
|
-
this.drawCode[i] = txt;
|
|
48
|
-
let x = 10 + i * 20; //文字在canvas上的x坐标
|
|
49
|
-
let y = 20 + Math.random() * 8; //文字在canvas上的y坐标
|
|
50
|
-
context.font = "bold 23px 微软雅黑";
|
|
51
|
-
context.translate(x, y);
|
|
52
|
-
context.rotate(deg);
|
|
53
|
-
context.fillStyle = this.randomColor();
|
|
54
|
-
context.fillText(txt, 0, 0);
|
|
55
|
-
context.rotate(-deg);
|
|
56
|
-
context.translate(-x, -y);
|
|
57
|
-
}
|
|
58
|
-
for (let i = 0; i <= 5; i++) {
|
|
59
|
-
//验证码上显示线条
|
|
60
|
-
context.strokeStyle = this.randomColor();
|
|
61
|
-
context.beginPath();
|
|
62
|
-
context.moveTo(Math.random() * canvas_width, Math.random() * canvas_height);
|
|
63
|
-
context.lineTo(Math.random() * canvas_width, Math.random() * canvas_height);
|
|
64
|
-
context.stroke();
|
|
65
|
-
}
|
|
66
|
-
for (let i = 0; i <= 30; i++) {
|
|
67
|
-
//验证码上显示小点
|
|
68
|
-
context.strokeStyle = this.randomColor();
|
|
69
|
-
context.beginPath();
|
|
70
|
-
let x = Math.random() * canvas_width;
|
|
71
|
-
let y = Math.random() * canvas_height;
|
|
72
|
-
context.moveTo(x, y);
|
|
73
|
-
context.lineTo(x + 1, y + 1);
|
|
74
|
-
context.stroke();
|
|
75
|
-
}
|
|
76
|
-
this.code = this.drawCode.join("");
|
|
77
|
-
this.changeVal.emit({
|
|
78
|
-
code: this.code,
|
|
79
|
-
vCode: this.vCode
|
|
80
|
-
});
|
|
81
|
-
this.canvasDom.nativeElement.appendChild(canvas);
|
|
82
|
-
let a = document.createElement("a");
|
|
83
|
-
a.setAttribute("id", this.canvas_id + '_a');
|
|
84
|
-
a.innerText = "看不清,换一张";
|
|
85
|
-
a.addEventListener("click", () => {
|
|
86
|
-
this.updateDrawCode();
|
|
87
|
-
});
|
|
88
|
-
this.canvasDom.nativeElement.appendChild(a);
|
|
89
|
-
}
|
|
90
|
-
/* 得到随机的颜色值 */
|
|
91
|
-
randomColor() {
|
|
92
|
-
let r = Math.floor(Math.random() * 256);
|
|
93
|
-
let g = Math.floor(Math.random() * 256);
|
|
94
|
-
let b = Math.floor(Math.random() * 256);
|
|
95
|
-
return "rgb(" + r + "," + g + "," + b + ")";
|
|
96
|
-
}
|
|
97
|
-
//按下确认键触发
|
|
98
|
-
enter(e) {
|
|
99
|
-
if (e.keyCode == 13) {
|
|
100
|
-
this.changeVal.emit({
|
|
101
|
-
code: this.code,
|
|
102
|
-
vCode: this.vCode
|
|
103
|
-
});
|
|
104
|
-
this.onEnter.emit();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
onChange() {
|
|
108
|
-
this.changeVal.emit({
|
|
109
|
-
code: this.code,
|
|
110
|
-
vCode: this.vCode
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CaptchaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
114
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CaptchaComponent, isStandalone: true, selector: "fm-captcha", inputs: { type: "type", canvas_id: "canvas_id", drawCode: "drawCode", vCode: "vCode" }, outputs: { changeVal: "changeVal", onEnter: "onEnter" }, viewQueries: [{ propertyName: "canvasDom", first: true, predicate: ["canvasDom"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"type == 'input'; else elseTemplate\">\n <div class=\"captcha\">\n <input\n nz-input\n class=\"code-input\"\n type=\"text\"\n [(ngModel)]=\"vCode\"\n maxlength=\"4\"\n placeholder=\"\u9A8C\u8BC1\u7801\"\n [nzStatus]=\"vCode.length == 4 ? '' : 'error'\"\n (keydown)=\"enter($event)\"\n (change)=\"onChange()\"\n />\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class=\"captcha\">\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-template>\n", styles: [".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
115
|
-
}
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CaptchaComponent, decorators: [{
|
|
117
|
-
type: Component,
|
|
118
|
-
args: [{ imports: [CommonModule, FormsModule], standalone: true, selector: 'fm-captcha', template: "<ng-container *ngIf=\"type == 'input'; else elseTemplate\">\n <div class=\"captcha\">\n <input\n nz-input\n class=\"code-input\"\n type=\"text\"\n [(ngModel)]=\"vCode\"\n maxlength=\"4\"\n placeholder=\"\u9A8C\u8BC1\u7801\"\n [nzStatus]=\"vCode.length == 4 ? '' : 'error'\"\n (keydown)=\"enter($event)\"\n (change)=\"onChange()\"\n />\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class=\"captcha\">\n <div class=\"code-card\" #canvasDom></div>\n </div>\n</ng-template>\n", styles: [".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"] }]
|
|
119
|
-
}], ctorParameters: () => [], propDecorators: { canvasDom: [{
|
|
120
|
-
type: ViewChild,
|
|
121
|
-
args: ["canvasDom"]
|
|
122
|
-
}], type: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], canvas_id: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], drawCode: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], vCode: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], changeVal: [{
|
|
131
|
-
type: Output
|
|
132
|
-
}], onEnter: [{
|
|
133
|
-
type: Output
|
|
134
|
-
}] } });
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3VzZXIvY2FwdGNoYS9jYXB0Y2hhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdXNlci9jYXB0Y2hhL2NhcHRjaGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRN0MsTUFBTSxPQUFPLGdCQUFnQjtJQVV6QjtRQVBTLFNBQUksR0FBVyxPQUFPLENBQUMsQ0FBRSwyQkFBMkI7UUFDcEQsY0FBUyxHQUFXLFlBQVksQ0FBQyxDQUFDLE1BQU07UUFDeEMsYUFBUSxHQUFrQixFQUFFLENBQUMsQ0FBQyxPQUFPO1FBQ3JDLFVBQUssR0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQzdCLGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU87UUFDMUQsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsV0FBVztRQUN0RSxTQUFJLEdBQVUsRUFBRSxDQUFBO0lBQ0QsQ0FBQztJQUVoQixRQUFRLEtBQUksQ0FBQztJQUNiLGVBQWU7UUFDYiw2R0FBNkc7UUFDN0csOENBQThDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLGFBQWEsR0FBRyxF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QUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNsQixJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ2QsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLO2FBQ2pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDckIsQ0FBQztJQUNILENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsSUFBSSxFQUFDLElBQUksQ0FBQyxJQUFJO1lBQ2QsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBckhRLGdCQUFnQjttR0FBaEIsZ0JBQWdCLCtUQ2xCN0IsbWxCQXFCQSx5VkRUVyxZQUFZLGtJQUFDLFdBQVc7OzRGQU10QixnQkFBZ0I7a0JBUDVCLFNBQVM7OEJBQ0EsQ0FBQyxZQUFZLEVBQUMsV0FBVyxDQUFDLGNBQ3ZCLElBQUksWUFDTCxZQUFZO3dEQUtJLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFYixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6W0NvbW1vbk1vZHVsZSxGb3Jtc01vZHVsZV0sXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcbiAgc2VsZWN0b3I6ICdmbS1jYXB0Y2hhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcHRjaGEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXB0Y2hhLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZChcImNhbnZhc0RvbVwiKSBjYW52YXNEb206IEVsZW1lbnRSZWY7IC8v5pys5Zyw5qCh6aqM56CB57uY55S7XG5cbiAgICBASW5wdXQoKSB0eXBlOiBzdHJpbmcgPSAnaW5wdXQnOyAgLy9kZWZhdWx0ICYgaW5wdXQg6buY6K6kaW5wdXTmlrnlvI9cbiAgICBASW5wdXQoKSBjYW52YXNfaWQ6IHN0cmluZyA9ICdjYW52YXNDb2RlJzsgLy/lhYPntKBpZFxuICAgIEBJbnB1dCgpIGRyYXdDb2RlOiBBcnJheTxzdHJpbmc+ID0gW107IC8v6aqM6K+B56CB5pWw57uEXG4gICAgQElucHV0KCkgdkNvZGU6IHN0cmluZyA9ICcnOyAvL+eUqOaIt+i+k+WFpWNvZGVcbiAgICBAT3V0cHV0KCkgY2hhbmdlVmFsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy/mlLnlj5jml7bop6blj5FcbiAgICBAT3V0cHV0KCkgb25FbnRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vZW50ZXLmjInkuIvop6blj5FcbiAgICBjb2RlOnN0cmluZyA9ICcnXG4gICAgY29uc3RydWN0b3IoKSB7fVxuICBcbiAgICBuZ09uSW5pdCgpIHt9XG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgLy9DYWxsZWQgYWZ0ZXIgbmdBZnRlckNvbnRlbnRJbml0IHdoZW4gdGhlIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIEFwcGxpZXMgdG8gY29tcG9uZW50cyBvbmx5LlxuICAgICAgLy9BZGQgJ2ltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCcgdG8gdGhlIGNsYXNzLlxuICAgICAgdGhpcy51cGRhdGVEcmF3Q29kZSgpO1xuICAgIH1cbiAgICB1cGRhdGVEcmF3Q29kZSgpIHtcbiAgICAgIGxldCBjYW52YXNfd2lkdGggPSAxMDA7XG4gICAgICBsZXQgY2FudmFzX2hlaWdodCA9IDM4O1xuICAgICAgbGV0IGNhbnYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNhbnZhc19pZCk7XG4gICAgICBjYW52ICYmIHRoaXMuY2FudmFzRG9tLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2Fudik7XG4gICAgICBsZXQgX2EgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNhbnZhc19pZCArICdfYScpO1xuICAgICAgX2EgJiYgdGhpcy5jYW52YXNEb20ubmF0aXZlRWxlbWVudC5yZW1vdmVDaGlsZChfYSk7XG4gICAgICB0aGlzLmNhbnZhc0RvbS5uYXRpdmVFbGVtZW50O1xuICAgICAgbGV0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICBjYW52YXMuY2xhc3NOYW1lID0gXCJjYW52YXNcIjtcbiAgICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoXCJpZFwiLCB0aGlzLmNhbnZhc19pZCk7XG4gICAgICBjYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVEcmF3Q29kZSgpO1xuICAgICAgfSk7XG4gICAgICBsZXQgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7IC8v6I635Y+W5YiwY2FudmFz55S75Zu+55qE546v5aKD77yM5ryU5ZGY6KGo5ryU55qE6Iie5Y+wXG4gICAgICBjYW52YXMud2lkdGggPSBjYW52YXNfd2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gY2FudmFzX2hlaWdodDtcbiAgICAgIGxldCBzQ29kZSA9XG4gICAgICAgIFwiQSxCLEMsRSxGLEcsSCxKLEssTCxNLE4sUCxRLFIsUyxULFcsWCxZLFosMSwyLDMsNCw1LDYsNyw4LDksMCxxLHcsZSxyLHQseSx1LGksbyxwLGEscyxkLGYsZyxoLGosayxsLHoseCxjLHYsYixuLG1cIjtcbiAgICAgIGxldCBhQ29kZSA9IHNDb2RlLnNwbGl0KFwiLFwiKTtcbiAgICAgIGxldCBhTGVuZ3RoID0gYUNvZGUubGVuZ3RoOyAvL+iOt+WPluWIsOaVsOe7hOeahOmVv+W6plxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIGxldCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYUxlbmd0aCk7IC8v6I635Y+W5Yiw6ZqP5py655qE57Si5byV5YC8XG4gICAgICAgIGxldCBkZWcgPSAoTWF0aC5yYW5kb20oKSAqIDMwICogTWF0aC5QSSkgLyAxODA7IC8v5Lqn55SfMH4zMOS5i+mXtOeahOmaj+acuuW8p+W6plxuICAgICAgICBsZXQgdHh0ID0gYUNvZGVbal07IC8v5b6X5Yiw6ZqP5py655qE5LiA5Liq5YaF5a65XG4gICAgICAgIHRoaXMuZHJhd0NvZGVbaV0gPSB0eHQ7XG4gICAgICAgIGxldCB4ID0gMTAgKyBpICogMjA7IC8v5paH5a2X5ZyoY2FudmFz5LiK55qEeOWdkOagh1xuICAgICAgICBsZXQgeSA9IDIwICsgTWF0aC5yYW5kb20oKSAqIDg7IC8v5paH5a2X5ZyoY2FudmFz5LiK55qEeeWdkOagh1xuICAgICAgICBjb250ZXh0LmZvbnQgPSBcImJvbGQgMjNweCDlvq7ova/pm4Xpu5FcIjtcbiAgXG4gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICBjb250ZXh0LnJvdGF0ZShkZWcpO1xuICBcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSB0aGlzLnJhbmRvbUNvbG9yKCk7XG4gICAgICAgIGNvbnRleHQuZmlsbFRleHQodHh0LCAwLCAwKTtcbiAgXG4gICAgICAgIGNvbnRleHQucm90YXRlKC1kZWcpO1xuICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgteCwgLXkpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gNTsgaSsrKSB7XG4gICAgICAgIC8v6aqM6K+B56CB5LiK5pi+56S657q/5p2hXG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB0aGlzLnJhbmRvbUNvbG9yKCk7XG4gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKFxuICAgICAgICAgIE1hdGgucmFuZG9tKCkgKiBjYW52YXNfd2lkdGgsXG4gICAgICAgICAgTWF0aC5yYW5kb20oKSAqIGNhbnZhc19oZWlnaHRcbiAgICAgICAgKTtcbiAgICAgICAgY29udGV4dC5saW5lVG8oXG4gICAgICAgICAgTWF0aC5yYW5kb20oKSAqIGNhbnZhc193aWR0aCxcbiAgICAgICAgICBNYXRoLnJhbmRvbSgpICogY2FudmFzX2hlaWdodFxuICAgICAgICApO1xuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzA7IGkrKykge1xuICAgICAgICAvL+mqjOivgeeggeS4iuaYvuekuuWwj+eCuVxuICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdGhpcy5yYW5kb21Db2xvcigpO1xuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICBsZXQgeCA9IE1hdGgucmFuZG9tKCkgKiBjYW52YXNfd2lkdGg7XG4gICAgICAgIGxldCB5ID0gTWF0aC5yYW5kb20oKSAqIGNhbnZhc19oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgMSwgeSArIDEpO1xuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb2RlID0gdGhpcy5kcmF3Q29kZS5qb2luKFwiXCIpXG4gICAgICB0aGlzLmNoYW5nZVZhbC5lbWl0KHtcbiAgICAgICBjb2RlOnRoaXMuY29kZSxcbiAgICAgICB2Q29kZTp0aGlzLnZDb2RlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FudmFzRG9tLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgICBhLnNldEF0dHJpYnV0ZShcImlkXCIsIHRoaXMuY2FudmFzX2lkICsgJ19hJyk7XG4gICAgICBhLmlubmVyVGV4dCA9IFwi55yL5LiN5riF77yM5o2i5LiA5bygXCI7XG4gICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRHJhd0NvZGUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYW52YXNEb20ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChhKTtcbiAgICB9XG4gICAgLyog5b6X5Yiw6ZqP5py655qE6aKc6Imy5YC8ICovXG4gICAgcmFuZG9tQ29sb3IoKSB7XG4gICAgICBsZXQgciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgICBsZXQgZyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgICBsZXQgYiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7XG4gICAgICByZXR1cm4gXCJyZ2IoXCIgKyByICsgXCIsXCIgKyBnICsgXCIsXCIgKyBiICsgXCIpXCI7XG4gICAgfVxuICAgIC8v5oyJ5LiL56Gu6K6k6ZSu6Kem5Y+RXG4gICAgZW50ZXIoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykge1xuICAgICAgICB0aGlzLmNoYW5nZVZhbC5lbWl0KHtcbiAgICAgICAgICBjb2RlOnRoaXMuY29kZSxcbiAgICAgICAgICB2Q29kZTp0aGlzLnZDb2RlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uRW50ZXIuZW1pdCgpXG4gICAgICB9XG4gICAgfVxuICAgIG9uQ2hhbmdlKCl7XG4gICAgICB0aGlzLmNoYW5nZVZhbC5lbWl0KHtcbiAgICAgICAgY29kZTp0aGlzLmNvZGUsXG4gICAgICAgIHZDb2RlOnRoaXMudkNvZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAiLCI8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PSAnaW5wdXQnOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxuICA8ZGl2IGNsYXNzPVwiY2FwdGNoYVwiPlxuICAgIDxpbnB1dFxuICAgICAgbnotaW5wdXRcbiAgICAgIGNsYXNzPVwiY29kZS1pbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbKG5nTW9kZWwpXT1cInZDb2RlXCJcbiAgICAgIG1heGxlbmd0aD1cIjRcIlxuICAgICAgcGxhY2Vob2xkZXI9XCLpqozor4HnoIFcIlxuICAgICAgW256U3RhdHVzXT1cInZDb2RlLmxlbmd0aCA9PSA0ID8gJycgOiAnZXJyb3InXCJcbiAgICAgIChrZXlkb3duKT1cImVudGVyKCRldmVudClcIlxuICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgpXCJcbiAgICAvPlxuICAgIDxkaXYgY2xhc3M9XCJjb2RlLWNhcmRcIiAjY2FudmFzRG9tPjwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJjYXB0Y2hhXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvZGUtY2FyZFwiICNjYW52YXNEb20+PC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
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/captcha/captcha.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input,Output,EventEmitter,ViewChild,ElementRef}from"@angular/core";import{CommonModule}from"@angular/common";import{FormsModule}from"@angular/forms";import*as i0 from"@angular/core";import*as i1 from"@angular/common";import*as i2 from"@angular/forms";export class CaptchaComponent{constructor(){this.type="input",this.canvas_id="canvasCode",this.drawCode=[],this.vCode="",this.changeVal=new EventEmitter,this.onEnter=new EventEmitter,this.code=""}ngOnInit(){}ngAfterViewInit(){this.updateDrawCode()}updateDrawCode(){let e=100,t=document.getElementById(this.canvas_id);t&&this.canvasDom.nativeElement.removeChild(t);let n=document.getElementById(this.canvas_id+"_a");n&&this.canvasDom.nativeElement.removeChild(n),this.canvasDom.nativeElement;let o=document.createElement("canvas");o.className="canvas",o.setAttribute("id",this.canvas_id),o.addEventListener("click",(()=>{this.updateDrawCode()}));let a=o.getContext("2d");o.width=e,o.height=38;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(","),d=i.length;for(let e=0;e<=3;e++){let t=Math.floor(Math.random()*d),n=30*Math.random()*Math.PI/180,o=i[t];this.drawCode[e]=o;let r=10+20*e,s=20+8*Math.random();a.font="bold 23px 微软雅黑",a.translate(r,s),a.rotate(n),a.fillStyle=this.randomColor(),a.fillText(o,0,0),a.rotate(-n),a.translate(-r,-s)}for(let t=0;t<=5;t++)a.strokeStyle=this.randomColor(),a.beginPath(),a.moveTo(Math.random()*e,38*Math.random()),a.lineTo(Math.random()*e,38*Math.random()),a.stroke();for(let t=0;t<=30;t++){a.strokeStyle=this.randomColor(),a.beginPath();let t=Math.random()*e,n=38*Math.random();a.moveTo(t,n),a.lineTo(t+1,n+1),a.stroke()}this.code=this.drawCode.join(""),this.changeVal.emit({code:this.code,vCode:this.vCode}),this.canvasDom.nativeElement.appendChild(o);let r=document.createElement("a");r.setAttribute("id",this.canvas_id+"_a"),r.innerText="看不清,换一张",r.addEventListener("click",(()=>{this.updateDrawCode()})),this.canvasDom.nativeElement.appendChild(r)}randomColor(){return"rgb("+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+","+Math.floor(256*Math.random())+")"}enter(e){13==e.keyCode&&(this.changeVal.emit({code:this.code,vCode:this.vCode}),this.onEnter.emit())}onChange(){this.changeVal.emit({code:this.code,vCode:this.vCode})}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CaptchaComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CaptchaComponent,isStandalone:!0,selector:"fm-captcha",inputs:{type:"type",canvas_id:"canvas_id",drawCode:"drawCode",vCode:"vCode"},outputs:{changeVal:"changeVal",onEnter:"onEnter"},viewQueries:[{propertyName:"canvasDom",first:!0,predicate:["canvasDom"],descendants:!0}],ngImport:i0,template:'<ng-container *ngIf="type == \'input\'; else elseTemplate">\n <div class="captcha">\n <input\n nz-input\n class="code-input"\n type="text"\n [(ngModel)]="vCode"\n maxlength="4"\n placeholder="验证码"\n [nzStatus]="vCode.length == 4 ? \'\' : \'error\'"\n (keydown)="enter($event)"\n (change)="onChange()"\n />\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class="captcha">\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-template>\n',styles:[".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i1.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule},{kind:"directive",type:i2.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:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.MaxLengthValidator,selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",inputs:["maxlength"]},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CaptchaComponent,decorators:[{type:Component,args:[{imports:[CommonModule,FormsModule],standalone:!0,selector:"fm-captcha",template:'<ng-container *ngIf="type == \'input\'; else elseTemplate">\n <div class="captcha">\n <input\n nz-input\n class="code-input"\n type="text"\n [(ngModel)]="vCode"\n maxlength="4"\n placeholder="验证码"\n [nzStatus]="vCode.length == 4 ? \'\' : \'error\'"\n (keydown)="enter($event)"\n (change)="onChange()"\n />\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-container>\n<ng-template #elseTemplate>\n <div class="captcha">\n <div class="code-card" #canvasDom></div>\n </div>\n</ng-template>\n',styles:[".code-card{display:flex;align-items:center}.code-card .canvas{border:1px solid #c2def5;border-radius:5px;width:100px;height:38px}.code-input{width:90px;padding:4px;height:38px;border:1px solid #cdcdcd}.code-input:focus{outline:1px solid #40a9ff}.captcha{display:flex;align-items:center}\n"]}]}],ctorParameters:()=>[],propDecorators:{canvasDom:[{type:ViewChild,args:["canvasDom"]}],type:[{type:Input}],canvas_id:[{type:Input}],drawCode:[{type:Input}],vCode:[{type:Input}],changeVal:[{type:Output}],onEnter:[{type:Output}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL2NhcHRjaGEvY2FwdGNoYS5jb21wb25lbnQubWpz`
|
|
10
|
+
|