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,41 +1,10 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { HwobsManagerComponent } from './comp-hwobs-manager/hwobs-manager.component';
4
- import { IonicModule } from '@ionic/angular';
5
- import { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';
6
- import { NovaUploadService } from './service-upload';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@ionic/angular";
9
- export class FmodeStorgeModule {
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmodeStorgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
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
- import { Injectable } from "@angular/core";
2
- import { NovaCloudService } from "../../nova-cloud/nova-cloud.service";
3
- import Parse from "parse";
4
- import { AuthService } from "../login/auth.service";
5
- import { HttpClient } from "@angular/common/http";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../nova-cloud/nova-cloud.service";
8
- import * as i2 from "../login/auth.service";
9
- import * as i3 from "@angular/common/http";
10
- export class AccountService {
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
- import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { FormsModule } from "@angular/forms";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- import * as i2 from "@angular/forms";
7
- export class CaptchaComponent {
8
- constructor() {
9
- this.type = 'input'; //default & input 默认input方式
10
- this.canvas_id = 'canvasCode'; //元素id
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
+