@rolatech/angular-account 17.2.6 → 17.2.7

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 (63) hide show
  1. package/esm2022/lib/components/avatar-update-dialog/avatar-update-dialog.component.mjs +3 -3
  2. package/esm2022/lib/components/forgot-password/forgot-password.component.mjs +3 -3
  3. package/esm2022/lib/components/login/login-wechat/login-wechat.component.mjs +3 -3
  4. package/esm2022/lib/components/logout/logout.component.mjs +3 -3
  5. package/esm2022/lib/components/passwordreset/passwordreset.component.mjs +3 -3
  6. package/esm2022/lib/components/topbar-login/topbar-login.component.mjs +7 -6
  7. package/esm2022/lib/components/user-item/user-item.component.mjs +3 -3
  8. package/esm2022/lib/pages/accounts/signin/signin.component.mjs +3 -3
  9. package/esm2022/lib/pages/accounts/signup/signup.component.mjs +3 -3
  10. package/esm2022/lib/pages/myaccount/email/email.component.mjs +6 -6
  11. package/esm2022/lib/pages/myaccount/email-verification/email-verification.component.mjs +3 -3
  12. package/esm2022/lib/pages/myaccount/gender/gender.component.mjs +16 -9
  13. package/esm2022/lib/pages/myaccount/home/home.component.mjs +5 -5
  14. package/esm2022/lib/pages/myaccount/personal-info/info.component.mjs +6 -6
  15. package/esm2022/lib/pages/myaccount/personal-info/profile/profile.component.mjs +5 -5
  16. package/esm2022/lib/pages/myaccount/personal-info/username/username.component.mjs +6 -6
  17. package/esm2022/lib/pages/myaccount/phone/phone.component.mjs +5 -5
  18. package/esm2022/lib/pages/myaccount/security/security-faceid/security-faceid.component.mjs +3 -3
  19. package/esm2022/lib/pages/myaccount/security/security-index/security-index.component.mjs +6 -6
  20. package/esm2022/lib/pages/myaccount/security/security-password/security-password.component.mjs +5 -5
  21. package/esm2022/lib/pages/myaccount/security/security-verification/security-verification.component.mjs +3 -3
  22. package/esm2022/lib/services/wechat-login.service.mjs +4 -4
  23. package/fesm2022/{rolatech-angular-account-email-verification.component-Wgkfs9Lk.mjs → rolatech-angular-account-email-verification.component-BMf1IfbK.mjs} +4 -4
  24. package/fesm2022/{rolatech-angular-account-email-verification.component-Wgkfs9Lk.mjs.map → rolatech-angular-account-email-verification.component-BMf1IfbK.mjs.map} +1 -1
  25. package/fesm2022/rolatech-angular-account-email.component-BQaELPci.mjs +44 -0
  26. package/fesm2022/rolatech-angular-account-email.component-BQaELPci.mjs.map +1 -0
  27. package/fesm2022/rolatech-angular-account-gender.component-9GJeEE9U.mjs +55 -0
  28. package/fesm2022/rolatech-angular-account-gender.component-9GJeEE9U.mjs.map +1 -0
  29. package/fesm2022/{rolatech-angular-account-home.component-CLpbrgbY.mjs → rolatech-angular-account-home.component-BVB5vvE5.mjs} +6 -6
  30. package/fesm2022/rolatech-angular-account-home.component-BVB5vvE5.mjs.map +1 -0
  31. package/fesm2022/rolatech-angular-account-info.component-CYY20QY4.mjs +98 -0
  32. package/fesm2022/rolatech-angular-account-info.component-CYY20QY4.mjs.map +1 -0
  33. package/fesm2022/{rolatech-angular-account-login.routes-Ck2VnoP1.mjs → rolatech-angular-account-login.routes-XD8QIaL9.mjs} +5 -5
  34. package/fesm2022/{rolatech-angular-account-login.routes-Ck2VnoP1.mjs.map → rolatech-angular-account-login.routes-XD8QIaL9.mjs.map} +1 -1
  35. package/fesm2022/rolatech-angular-account-phone.component-D2v9enci.mjs +68 -0
  36. package/fesm2022/rolatech-angular-account-phone.component-D2v9enci.mjs.map +1 -0
  37. package/fesm2022/rolatech-angular-account-profile.component-WwV7Jpjy.mjs +50 -0
  38. package/fesm2022/rolatech-angular-account-profile.component-WwV7Jpjy.mjs.map +1 -0
  39. package/fesm2022/{rolatech-angular-account-rolatech-angular-account-OPsV8YM0.mjs → rolatech-angular-account-rolatech-angular-account-C4Q8Ay9E.mjs} +38 -38
  40. package/fesm2022/rolatech-angular-account-rolatech-angular-account-C4Q8Ay9E.mjs.map +1 -0
  41. package/fesm2022/rolatech-angular-account-security.routes-DiAm22Qh.mjs +203 -0
  42. package/fesm2022/rolatech-angular-account-security.routes-DiAm22Qh.mjs.map +1 -0
  43. package/fesm2022/rolatech-angular-account-username.component-D8DPlm9P.mjs +42 -0
  44. package/fesm2022/rolatech-angular-account-username.component-D8DPlm9P.mjs.map +1 -0
  45. package/fesm2022/rolatech-angular-account.mjs +1 -1
  46. package/package.json +1 -1
  47. package/themes/_default.scss +1 -1
  48. package/fesm2022/rolatech-angular-account-email.component-OZQWgvRq.mjs +0 -44
  49. package/fesm2022/rolatech-angular-account-email.component-OZQWgvRq.mjs.map +0 -1
  50. package/fesm2022/rolatech-angular-account-gender.component-et-tBTIn.mjs +0 -48
  51. package/fesm2022/rolatech-angular-account-gender.component-et-tBTIn.mjs.map +0 -1
  52. package/fesm2022/rolatech-angular-account-home.component-CLpbrgbY.mjs.map +0 -1
  53. package/fesm2022/rolatech-angular-account-info.component-BylW4MU8.mjs +0 -98
  54. package/fesm2022/rolatech-angular-account-info.component-BylW4MU8.mjs.map +0 -1
  55. package/fesm2022/rolatech-angular-account-phone.component-Y1-PQ88s.mjs +0 -68
  56. package/fesm2022/rolatech-angular-account-phone.component-Y1-PQ88s.mjs.map +0 -1
  57. package/fesm2022/rolatech-angular-account-profile.component-qPo6AqKP.mjs +0 -50
  58. package/fesm2022/rolatech-angular-account-profile.component-qPo6AqKP.mjs.map +0 -1
  59. package/fesm2022/rolatech-angular-account-rolatech-angular-account-OPsV8YM0.mjs.map +0 -1
  60. package/fesm2022/rolatech-angular-account-security.routes-oSrz_UlJ.mjs +0 -203
  61. package/fesm2022/rolatech-angular-account-security.routes-oSrz_UlJ.mjs.map +0 -1
  62. package/fesm2022/rolatech-angular-account-username.component-aqWzvFh7.mjs +0 -42
  63. package/fesm2022/rolatech-angular-account-username.component-aqWzvFh7.mjs.map +0 -1
@@ -1,203 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, Component, Renderer2, viewChild } from '@angular/core';
3
- import { MatDialog } from '@angular/material/dialog';
4
- import * as i2$1 from '@rolatech/angular-auth';
5
- import { AuthService, FaceidDetectDialogComponent } from '@rolatech/angular-auth';
6
- import { AngularCommonModule } from '@rolatech/angular-common';
7
- import { WechatConnectDialogComponent, AngularComponentsModule, AppContainerComponent, ToolbarComponent, SpinnerComponent } from '@rolatech/angular-components';
8
- import * as i1 from '@angular/router';
9
- import * as i2 from '@angular/material/divider';
10
- import * as i3 from '@angular/material/icon';
11
- import * as i4 from '@angular/material/list';
12
- import * as i1$1 from '@angular/forms';
13
- import { Validators } from '@angular/forms';
14
- import * as i3$1 from '@angular/material/snack-bar';
15
- import * as i2$2 from '@angular/material/button';
16
- import * as i3$2 from '@angular/material/form-field';
17
- import * as i4$1 from '@angular/material/input';
18
- import * as QRCode from 'qrcode';
19
-
20
- class SecurityIndexComponent {
21
- constructor() {
22
- this.dialog = inject(MatDialog);
23
- this.authService = inject(AuthService);
24
- this.bind = false;
25
- this.verified = false;
26
- }
27
- ngOnInit() {
28
- this.wechatStatus();
29
- }
30
- faceId() {
31
- const dialogRef = this.dialog.open(FaceidDetectDialogComponent, {
32
- data: {},
33
- });
34
- dialogRef.afterClosed().subscribe((result) => {
35
- this.verified = result;
36
- });
37
- }
38
- connectWeChat() {
39
- // const redirectUri = 'https://accounts.pinxiaoke.cn/login';
40
- const redirectUri = `${window.location.origin}/login`;
41
- const dialogRef = this.dialog.open(WechatConnectDialogComponent, {
42
- data: {
43
- appid: 'wx567acbea73439828',
44
- redirect_uri: redirectUri,
45
- state: 'add',
46
- },
47
- });
48
- dialogRef.afterClosed().subscribe((result) => {
49
- this.wechatStatus();
50
- });
51
- }
52
- disconnectWeChat() {
53
- this.authService.wechatDisconnect().subscribe({
54
- next: (res) => {
55
- this.bind = false;
56
- },
57
- });
58
- }
59
- wechatStatus() {
60
- this.authService.wechatStatus({ id: 'me' }).subscribe({
61
- next: (res) => {
62
- this.bind = res.data?.openid !== undefined;
63
- },
64
- });
65
- }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecurityIndexComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: SecurityIndexComponent, isStandalone: true, selector: "rolatech-account-security-index", ngImport: i0, template: "<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px] m-3\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">\u5B89\u5168\u8BBE\u7F6E</p>\n <p class=\"text-md\">\u7528\u6237\u4FE1\u606F\u7684\u5B89\u5168\u8BBE\u7F6E</p>\n </div>\n <div class=\"border border-grap-400 rounded px-3 pt-3\">\n <div class=\"p-3 text-xl\">\u57FA\u672C\u8BBE\u7F6E</div>\n <mat-nav-list>\n <mat-list-item (click)=\"faceId()\">\n <div class=\"flex items-center justify-between\">\n <span>\u5B9E\u540D\u8BA4\u8BC1</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n @if (!verified) {\n <span class=\"mr-3\"> \u672A\u8BA4\u8BC1 </span>\n }\n @if (verified) {\n <a class=\"mr-3\"> \u5DF2\u8BA4\u8BC1 </a>\n }\n <!-- @if (bind) {\n <a class=\"mr-3\" (click)=\"disconnectWeChat()\"> \u89E3\u7ED1 </a>\n } -->\n </div>\n </mat-list-item>\n <mat-divider></mat-divider>\n <mat-list-item>\n <div class=\"flex items-center justify-between\">\n <span>\u5FAE\u4FE1\u7ED1\u5B9A</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n @if (!bind) {\n <span class=\"mr-3\" (click)=\"connectWeChat()\"> \u7ED1\u5B9A </span>\n }\n @if (bind) {\n <a class=\"mr-3\"> \u5DF2\u7ED1\u5B9A </a>\n }\n <!-- @if (bind) {\n <a class=\"mr-3\" (click)=\"disconnectWeChat()\"> \u89E3\u7ED1 </a>\n } -->\n </div>\n </mat-list-item>\n <mat-divider></mat-divider>\n <mat-list-item routerLink=\"./password\">\n <div class=\"flex items-center justify-between\">\n <span>\u5BC6\u7801\u8BBE\u7F6E</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n <span>\n <mat-icon> navigate_next </mat-icon>\n </span>\n </div>\n </mat-list-item>\n </mat-nav-list>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }] }); }
68
- }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecurityIndexComponent, decorators: [{
70
- type: Component,
71
- args: [{ standalone: true, imports: [AngularCommonModule, AngularComponentsModule], selector: 'rolatech-account-security-index', template: "<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px] m-3\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">\u5B89\u5168\u8BBE\u7F6E</p>\n <p class=\"text-md\">\u7528\u6237\u4FE1\u606F\u7684\u5B89\u5168\u8BBE\u7F6E</p>\n </div>\n <div class=\"border border-grap-400 rounded px-3 pt-3\">\n <div class=\"p-3 text-xl\">\u57FA\u672C\u8BBE\u7F6E</div>\n <mat-nav-list>\n <mat-list-item (click)=\"faceId()\">\n <div class=\"flex items-center justify-between\">\n <span>\u5B9E\u540D\u8BA4\u8BC1</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n @if (!verified) {\n <span class=\"mr-3\"> \u672A\u8BA4\u8BC1 </span>\n }\n @if (verified) {\n <a class=\"mr-3\"> \u5DF2\u8BA4\u8BC1 </a>\n }\n <!-- @if (bind) {\n <a class=\"mr-3\" (click)=\"disconnectWeChat()\"> \u89E3\u7ED1 </a>\n } -->\n </div>\n </mat-list-item>\n <mat-divider></mat-divider>\n <mat-list-item>\n <div class=\"flex items-center justify-between\">\n <span>\u5FAE\u4FE1\u7ED1\u5B9A</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n @if (!bind) {\n <span class=\"mr-3\" (click)=\"connectWeChat()\"> \u7ED1\u5B9A </span>\n }\n @if (bind) {\n <a class=\"mr-3\"> \u5DF2\u7ED1\u5B9A </a>\n }\n <!-- @if (bind) {\n <a class=\"mr-3\" (click)=\"disconnectWeChat()\"> \u89E3\u7ED1 </a>\n } -->\n </div>\n </mat-list-item>\n <mat-divider></mat-divider>\n <mat-list-item routerLink=\"./password\">\n <div class=\"flex items-center justify-between\">\n <span>\u5BC6\u7801\u8BBE\u7F6E</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n <span>\n <mat-icon> navigate_next </mat-icon>\n </span>\n </div>\n </mat-list-item>\n </mat-nav-list>\n </div>\n </div>\n</div>\n" }]
72
- }], ctorParameters: () => [] });
73
-
74
- class SecurityPasswordComponent {
75
- constructor(formBuilder, authService, snackBar) {
76
- this.formBuilder = formBuilder;
77
- this.authService = authService;
78
- this.snackBar = snackBar;
79
- }
80
- ngOnInit() {
81
- this.passwordForm = this.formBuilder.group({
82
- oldPassword: ['', Validators.required],
83
- newPassword: ['', Validators.required],
84
- ne2Password: ['', Validators.required],
85
- });
86
- }
87
- save() {
88
- if (!this.passwordForm.valid) {
89
- return;
90
- }
91
- this.authService.changePassword(this.passwordForm.value).subscribe({
92
- next: (res) => {
93
- this.snackBar.open(res.message);
94
- },
95
- error: (e) => {
96
- this.snackBar.open(e.message);
97
- },
98
- });
99
- }
100
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecurityPasswordComponent, deps: [{ token: i1$1.FormBuilder }, { token: i2$1.AuthService }, { token: i3$1.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
101
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: SecurityPasswordComponent, isStandalone: true, selector: "rolatech-account-security-password", ngImport: i0, template: "<rolatech-app-container>\n <rolatech-toolbar title=\"\u4FEE\u6539\u5BC6\u7801\" subtitle=\"\u4FEE\u6539\u5BC6\u7801\" back divider></rolatech-toolbar>\n <div class=\"p-3\">\n <form [formGroup]=\"passwordForm\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u539F\u5BC6\u7801</mat-label>\n <input matInput type=\"password\" formControlName=\"oldPassword\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u65B0\u5BC6\u7801 </mat-label>\n <input matInput type=\"password\" formControlName=\"newPassword\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u65B0\u5BC6\u7801 </mat-label>\n <input matInput type=\"password\" formControlName=\"ne2Password\" required />\n </mat-form-field>\n </div>\n </form>\n <div class=\"flex justify-end items-center mt-3\">\n <button mat-button rolatechBackButton>\u53D6\u6D88</button>\n <button\n class=\"bg-orange-600 shadow shadow-gray-300 cursor-pointer w-[128px] p-2 text-white rounded text-center ml-3\"\n (click)=\"save()\"\n >\n \u4FDD\u5B58\n </button>\n </div>\n </div>\n</rolatech-app-container>\n<div class=\"max-w-[1120px] m-auto px-6\"></div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: AppContainerComponent, selector: "rolatech-app-container" }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }] }); }
102
- }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecurityPasswordComponent, decorators: [{
104
- type: Component,
105
- args: [{ standalone: true, imports: [AngularCommonModule, AngularComponentsModule, AppContainerComponent, ToolbarComponent], selector: 'rolatech-account-security-password', template: "<rolatech-app-container>\n <rolatech-toolbar title=\"\u4FEE\u6539\u5BC6\u7801\" subtitle=\"\u4FEE\u6539\u5BC6\u7801\" back divider></rolatech-toolbar>\n <div class=\"p-3\">\n <form [formGroup]=\"passwordForm\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> \u539F\u5BC6\u7801</mat-label>\n <input matInput type=\"password\" formControlName=\"oldPassword\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u65B0\u5BC6\u7801 </mat-label>\n <input matInput type=\"password\" formControlName=\"newPassword\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> \u65B0\u5BC6\u7801 </mat-label>\n <input matInput type=\"password\" formControlName=\"ne2Password\" required />\n </mat-form-field>\n </div>\n </form>\n <div class=\"flex justify-end items-center mt-3\">\n <button mat-button rolatechBackButton>\u53D6\u6D88</button>\n <button\n class=\"bg-orange-600 shadow shadow-gray-300 cursor-pointer w-[128px] p-2 text-white rounded text-center ml-3\"\n (click)=\"save()\"\n >\n \u4FDD\u5B58\n </button>\n </div>\n </div>\n</rolatech-app-container>\n<div class=\"max-w-[1120px] m-auto px-6\"></div>\n" }]
106
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: i2$1.AuthService }, { type: i3$1.MatSnackBar }] });
107
-
108
- class SecurityVerificationComponent {
109
- constructor() {
110
- this.dialog = inject(MatDialog);
111
- this.authService = inject(AuthService);
112
- this.verified = false;
113
- this.renderer = inject(Renderer2);
114
- this.qrcElement = viewChild.required('qrcode');
115
- this.loading = false;
116
- this.BizToken = '';
117
- this.identification = {};
118
- }
119
- ngOnInit() {
120
- this.checkFaceIdStatus();
121
- }
122
- checkFaceIdStatus() {
123
- this.authService.faceIdStatus().subscribe({
124
- next: (res) => {
125
- this.verified = res.data.verified;
126
- },
127
- });
128
- }
129
- verify() {
130
- this.loading = true;
131
- this.authService.requestFaceIdDetect().subscribe({
132
- next: ({ data }) => {
133
- this.genQRCode(data.url);
134
- // this.loop();
135
- },
136
- error: () => {
137
- this.loading = false;
138
- },
139
- });
140
- }
141
- loop() {
142
- const interval = setInterval(() => {
143
- this.authService.faceIdStatus().subscribe({
144
- next: (res) => {
145
- if (res) {
146
- clearInterval(interval);
147
- }
148
- },
149
- });
150
- this;
151
- }, 2000);
152
- }
153
- genQRCode(url) {
154
- const element = this.renderer.createElement('canvas');
155
- this.toCanvas(element, url)
156
- .then(() => {
157
- this.renderElement(element);
158
- })
159
- .catch((e) => {
160
- this.removeElementChildren();
161
- });
162
- }
163
- toCanvas(canvas, url) {
164
- return QRCode.toCanvas(canvas, url, {
165
- errorCorrectionLevel: 'M',
166
- width: 200,
167
- });
168
- }
169
- renderElement(element) {
170
- this.removeElementChildren();
171
- this.renderer.appendChild(this.qrcElement().nativeElement, element);
172
- }
173
- removeElementChildren() {
174
- for (const node of this.qrcElement().nativeElement.childNodes) {
175
- this.renderer.removeChild(this.qrcElement().nativeElement, node);
176
- }
177
- }
178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecurityVerificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
179
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: SecurityVerificationComponent, isStandalone: true, selector: "rolatech-account-security-verification", viewQueries: [{ propertyName: "qrcElement", first: true, predicate: ["qrcode"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px]\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">\u5B9E\u540D\u8BA4\u8BC1</p>\n <p class=\"text-md\">\u5B9E\u540D\u8BA4\u8BC1, \u4F1A\u8BA9\u4F60\u7684\u8D26\u6237\u66F4\u52A0\u5B89\u5168</p>\n </div>\n </div>\n @if (verified) {\n <div class=\"p-3\">\n <div class=\"text-md font-bold py-3\">\u60A8\u5DF2\u7ECF\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1</div>\n <div class=\"flex flex-col\">\n <div><span class=\"text-gray-600\">\u59D3\u540D: </span> <span>22</span></div>\n <div><span class=\"text-gray-600\">\u8EAB\u4EFD\u8BC1: </span><span>22</span></div>\n </div>\n </div>\n } @else {\n <div>\u672A\u8BA4\u8BC1</div>\n <button mat-raised-button (click)=\"verify()\" color=\"primary\">\u8BF7\u6C42\u8BA4\u8BC1</button>\n <div #qrcode>\n @if (loading) {\n <div>\n <rolatech-spinner></rolatech-spinner>\n </div>\n }\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2$2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }] }); }
180
- }
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecurityVerificationComponent, decorators: [{
182
- type: Component,
183
- args: [{ standalone: true, imports: [AngularCommonModule, AngularComponentsModule, SpinnerComponent], selector: 'rolatech-account-security-verification', template: "<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px]\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">\u5B9E\u540D\u8BA4\u8BC1</p>\n <p class=\"text-md\">\u5B9E\u540D\u8BA4\u8BC1, \u4F1A\u8BA9\u4F60\u7684\u8D26\u6237\u66F4\u52A0\u5B89\u5168</p>\n </div>\n </div>\n @if (verified) {\n <div class=\"p-3\">\n <div class=\"text-md font-bold py-3\">\u60A8\u5DF2\u7ECF\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1</div>\n <div class=\"flex flex-col\">\n <div><span class=\"text-gray-600\">\u59D3\u540D: </span> <span>22</span></div>\n <div><span class=\"text-gray-600\">\u8EAB\u4EFD\u8BC1: </span><span>22</span></div>\n </div>\n </div>\n } @else {\n <div>\u672A\u8BA4\u8BC1</div>\n <button mat-raised-button (click)=\"verify()\" color=\"primary\">\u8BF7\u6C42\u8BA4\u8BC1</button>\n <div #qrcode>\n @if (loading) {\n <div>\n <rolatech-spinner></rolatech-spinner>\n </div>\n }\n </div>\n }\n</div>\n" }]
184
- }] });
185
-
186
- const securityRoutes = [
187
- {
188
- path: '',
189
- component: SecurityIndexComponent,
190
- },
191
- {
192
- path: 'verification',
193
- component: SecurityVerificationComponent,
194
- },
195
- // {
196
- // path: 'faceid',
197
- // component: SecurityFaceidComponent,
198
- // },
199
- { path: 'password', component: SecurityPasswordComponent },
200
- ];
201
-
202
- export { securityRoutes as default };
203
- //# sourceMappingURL=rolatech-angular-account-security.routes-oSrz_UlJ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rolatech-angular-account-security.routes-oSrz_UlJ.mjs","sources":["../../../../libs/angular-account/src/lib/pages/myaccount/security/security-index/security-index.component.ts","../../../../libs/angular-account/src/lib/pages/myaccount/security/security-index/security-index.component.html","../../../../libs/angular-account/src/lib/pages/myaccount/security/security-password/security-password.component.ts","../../../../libs/angular-account/src/lib/pages/myaccount/security/security-password/security-password.component.html","../../../../libs/angular-account/src/lib/pages/myaccount/security/security-verification/security-verification.component.ts","../../../../libs/angular-account/src/lib/pages/myaccount/security/security-verification/security-verification.component.html","../../../../libs/angular-account/src/lib/pages/myaccount/security/security.routes.ts"],"sourcesContent":["import { Component, OnInit, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AuthService, FaceidDetectDialogComponent } from '@rolatech/angular-auth';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, WechatConnectDialogComponent } from '@rolatech/angular-components';\n\n@Component({\n standalone: true,\n imports: [AngularCommonModule, AngularComponentsModule],\n selector: 'rolatech-account-security-index',\n templateUrl: './security-index.component.html',\n styleUrls: ['./security-index.component.scss'],\n})\nexport class SecurityIndexComponent implements OnInit {\n dialog = inject(MatDialog);\n authService = inject(AuthService);\n bind = false;\n verified = false;\n\n constructor() {}\n\n ngOnInit(): void {\n this.wechatStatus();\n }\n faceId() {\n const dialogRef = this.dialog.open(FaceidDetectDialogComponent, {\n data: {},\n });\n dialogRef.afterClosed().subscribe((result) => {\n this.verified = result;\n });\n }\n connectWeChat() {\n // const redirectUri = 'https://accounts.pinxiaoke.cn/login';\n const redirectUri = `${window.location.origin}/login`;\n\n const dialogRef = this.dialog.open(WechatConnectDialogComponent, {\n data: {\n appid: 'wx567acbea73439828',\n redirect_uri: redirectUri,\n state: 'add',\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n this.wechatStatus();\n });\n }\n disconnectWeChat() {\n this.authService.wechatDisconnect().subscribe({\n next: (res) => {\n this.bind = false;\n },\n });\n }\n wechatStatus() {\n this.authService.wechatStatus({ id: 'me' }).subscribe({\n next: (res) => {\n this.bind = res.data?.openid !== undefined;\n },\n });\n }\n}\n","<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px] m-3\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">安全设置</p>\n <p class=\"text-md\">用户信息的安全设置</p>\n </div>\n <div class=\"border border-grap-400 rounded px-3 pt-3\">\n <div class=\"p-3 text-xl\">基本设置</div>\n <mat-nav-list>\n <mat-list-item (click)=\"faceId()\">\n <div class=\"flex items-center justify-between\">\n <span>实名认证</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n @if (!verified) {\n <span class=\"mr-3\"> 未认证 </span>\n }\n @if (verified) {\n <a class=\"mr-3\"> 已认证 </a>\n }\n <!-- @if (bind) {\n <a class=\"mr-3\" (click)=\"disconnectWeChat()\"> 解绑 </a>\n } -->\n </div>\n </mat-list-item>\n <mat-divider></mat-divider>\n <mat-list-item>\n <div class=\"flex items-center justify-between\">\n <span>微信绑定</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n @if (!bind) {\n <span class=\"mr-3\" (click)=\"connectWeChat()\"> 绑定 </span>\n }\n @if (bind) {\n <a class=\"mr-3\"> 已绑定 </a>\n }\n <!-- @if (bind) {\n <a class=\"mr-3\" (click)=\"disconnectWeChat()\"> 解绑 </a>\n } -->\n </div>\n </mat-list-item>\n <mat-divider></mat-divider>\n <mat-list-item routerLink=\"./password\">\n <div class=\"flex items-center justify-between\">\n <span>密码设置</span>\n <!-- <mat-icon mat-list-icon>arrow_drop_down</mat-icon> -->\n <span>\n <mat-icon> navigate_next </mat-icon>\n </span>\n </div>\n </mat-list-item>\n </mat-nav-list>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, AppContainerComponent, ToolbarComponent } from '@rolatech/angular-components';\n\n@Component({\n standalone: true,\n imports: [AngularCommonModule, AngularComponentsModule, AppContainerComponent, ToolbarComponent],\n selector: 'rolatech-account-security-password',\n templateUrl: './security-password.component.html',\n styleUrls: ['./security-password.component.scss'],\n})\nexport class SecurityPasswordComponent implements OnInit {\n passwordForm!: FormGroup;\n\n constructor(\n private formBuilder: FormBuilder,\n private authService: AuthService,\n private snackBar: MatSnackBar,\n ) {}\n\n ngOnInit(): void {\n this.passwordForm = this.formBuilder.group({\n oldPassword: ['', Validators.required],\n newPassword: ['', Validators.required],\n ne2Password: ['', Validators.required],\n });\n }\n save() {\n if (!this.passwordForm.valid) {\n return;\n }\n this.authService.changePassword(this.passwordForm.value).subscribe({\n next: (res: any) => {\n this.snackBar.open(res.message);\n },\n error: (e) => {\n this.snackBar.open(e.message);\n },\n });\n }\n}\n","<rolatech-app-container>\n <rolatech-toolbar title=\"修改密码\" subtitle=\"修改密码\" back divider></rolatech-toolbar>\n <div class=\"p-3\">\n <form [formGroup]=\"passwordForm\">\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <mat-label> 原密码</mat-label>\n <input matInput type=\"password\" formControlName=\"oldPassword\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> 新密码 </mat-label>\n <input matInput type=\"password\" formControlName=\"newPassword\" required />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label> 新密码 </mat-label>\n <input matInput type=\"password\" formControlName=\"ne2Password\" required />\n </mat-form-field>\n </div>\n </form>\n <div class=\"flex justify-end items-center mt-3\">\n <button mat-button rolatechBackButton>取消</button>\n <button\n class=\"bg-orange-600 shadow shadow-gray-300 cursor-pointer w-[128px] p-2 text-white rounded text-center ml-3\"\n (click)=\"save()\"\n >\n 保存\n </button>\n </div>\n </div>\n</rolatech-app-container>\n<div class=\"max-w-[1120px] m-auto px-6\"></div>\n","import { Component, ElementRef, OnInit, Renderer2, inject, viewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AuthService } from '@rolatech/angular-auth';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, SpinnerComponent } from '@rolatech/angular-components';\nimport * as QRCode from 'qrcode';\n\n@Component({\n standalone: true,\n imports: [AngularCommonModule, AngularComponentsModule, SpinnerComponent],\n selector: 'rolatech-account-security-verification',\n templateUrl: './security-verification.component.html',\n styleUrls: ['./security-verification.component.scss'],\n})\nexport class SecurityVerificationComponent implements OnInit {\n dialog = inject(MatDialog);\n authService = inject(AuthService);\n verified = false;\n renderer = inject(Renderer2);\n qrcElement = viewChild.required<ElementRef>('qrcode');\n loading = false;\n BizToken = '';\n identification = {};\n ngOnInit(): void {\n this.checkFaceIdStatus();\n }\n checkFaceIdStatus() {\n this.authService.faceIdStatus().subscribe({\n next: (res) => {\n this.verified = res.data.verified;\n },\n });\n }\n verify() {\n this.loading = true;\n this.authService.requestFaceIdDetect().subscribe({\n next: ({ data }) => {\n this.genQRCode(data.url);\n // this.loop();\n },\n error: () => {\n this.loading = false;\n },\n });\n }\n loop() {\n const interval = setInterval(() => {\n this.authService.faceIdStatus().subscribe({\n next: (res) => {\n if (res) {\n clearInterval(interval);\n }\n },\n });\n this;\n }, 2000);\n }\n\n genQRCode(url: string) {\n const element: Element = this.renderer.createElement('canvas');\n this.toCanvas(element, url)\n .then(() => {\n this.renderElement(element);\n })\n .catch((e) => {\n this.removeElementChildren();\n });\n }\n\n private toCanvas(canvas: any, url: any): Promise<any> {\n return QRCode.toCanvas(canvas, url, {\n errorCorrectionLevel: 'M',\n width: 200,\n });\n }\n private renderElement(element: any): void {\n this.removeElementChildren();\n this.renderer.appendChild(this.qrcElement().nativeElement, element);\n }\n private removeElementChildren(): void {\n for (const node of this.qrcElement().nativeElement.childNodes) {\n this.renderer.removeChild(this.qrcElement().nativeElement, node);\n }\n }\n}\n","<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px]\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">实名认证</p>\n <p class=\"text-md\">实名认证, 会让你的账户更加安全</p>\n </div>\n </div>\n @if (verified) {\n <div class=\"p-3\">\n <div class=\"text-md font-bold py-3\">您已经完成实名认证</div>\n <div class=\"flex flex-col\">\n <div><span class=\"text-gray-600\">姓名: </span> <span>22</span></div>\n <div><span class=\"text-gray-600\">身份证: </span><span>22</span></div>\n </div>\n </div>\n } @else {\n <div>未认证</div>\n <button mat-raised-button (click)=\"verify()\" color=\"primary\">请求认证</button>\n <div #qrcode>\n @if (loading) {\n <div>\n <rolatech-spinner></rolatech-spinner>\n </div>\n }\n </div>\n }\n</div>\n","import { Routes } from '@angular/router';\nimport { SecurityIndexComponent } from './security-index/security-index.component';\nimport { SecurityPasswordComponent } from './security-password/security-password.component';\nimport { SecurityFaceidComponent } from './security-faceid/security-faceid.component';\nimport { SecurityVerificationComponent } from './security-verification/security-verification.component';\n\nconst securityRoutes: Routes = [\n {\n path: '',\n component: SecurityIndexComponent,\n },\n {\n path: 'verification',\n component: SecurityVerificationComponent,\n },\n // {\n // path: 'faceid',\n // component: SecurityFaceidComponent,\n // },\n { path: 'password', component: SecurityPasswordComponent },\n];\n\nexport default securityRoutes;\n"],"names":["i1","i2","i3","i4","i5","i6"],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, effect, Component, ViewEncapsulation } from '@angular/core';
3
- import { AuthUserService, AuthService } from '@rolatech/angular-auth';
4
- import { AngularCommonModule } from '@rolatech/angular-common';
5
- import { BaseComponent, AngularComponentsModule } from '@rolatech/angular-components';
6
- import { BackButtonDirective } from '@rolatech/angular-services';
7
- import * as i1 from '@angular/forms';
8
- import * as i2 from '@angular/material/button';
9
- import * as i3 from '@angular/material/form-field';
10
- import * as i4 from '@angular/material/input';
11
-
12
- class UsernameComponent extends BaseComponent {
13
- constructor() {
14
- super();
15
- this.authUserService = inject(AuthUserService);
16
- this.user = inject(AuthService).user;
17
- this.username = '';
18
- effect(() => {
19
- this.username = this.user()?.username;
20
- });
21
- }
22
- ngOnInit() { }
23
- save() {
24
- this.authUserService.changeUsername(this.username).subscribe({
25
- next: (res) => {
26
- this.snackBarService.open(res.data);
27
- },
28
- error: (error) => {
29
- this.snackBarService.open(error.message);
30
- },
31
- });
32
- }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UsernameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.0", type: UsernameComponent, isStandalone: true, selector: "rolatech-account-username", usesInheritance: true, ngImport: i0, template: "<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px] p-4\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">\u4FEE\u6539\u7528\u6237\u540D</p>\n <p class=\"text-md\">\u7528\u6237\u540D\u662F\u60A8\u5728\u672C\u7AD9\u7684\u552F\u4E00\u6807\u8BC6</p>\n </div>\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <span matTextPrefix>&#64;</span>\n <input matInput [(ngModel)]=\"username\" />\n </mat-form-field>\n </div>\n <div class=\"flex justify-end items-center mt-3\">\n <button mat-button rolatechBackButton>\u53D6\u6D88</button>\n <button\n class=\"bg-orange-600 shadow shadow-gray-300 cursor-pointer w-20 p-2 text-white rounded text-center ml-3\"\n (click)=\"save()\"\n >\n \u4FDD\u5B58\n </button>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: BackButtonDirective, selector: "[rolatechBackButton]" }], encapsulation: i0.ViewEncapsulation.None }); }
35
- }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UsernameComponent, decorators: [{
37
- type: Component,
38
- args: [{ standalone: true, imports: [AngularCommonModule, AngularComponentsModule, BackButtonDirective], selector: 'rolatech-account-username', encapsulation: ViewEncapsulation.None, template: "<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px] p-4\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">\u4FEE\u6539\u7528\u6237\u540D</p>\n <p class=\"text-md\">\u7528\u6237\u540D\u662F\u60A8\u5728\u672C\u7AD9\u7684\u552F\u4E00\u6807\u8BC6</p>\n </div>\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <span matTextPrefix>&#64;</span>\n <input matInput [(ngModel)]=\"username\" />\n </mat-form-field>\n </div>\n <div class=\"flex justify-end items-center mt-3\">\n <button mat-button rolatechBackButton>\u53D6\u6D88</button>\n <button\n class=\"bg-orange-600 shadow shadow-gray-300 cursor-pointer w-20 p-2 text-white rounded text-center ml-3\"\n (click)=\"save()\"\n >\n \u4FDD\u5B58\n </button>\n </div>\n </div>\n</div>\n" }]
39
- }], ctorParameters: () => [] });
40
-
41
- export { UsernameComponent };
42
- //# sourceMappingURL=rolatech-angular-account-username.component-aqWzvFh7.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rolatech-angular-account-username.component-aqWzvFh7.mjs","sources":["../../../../libs/angular-account/src/lib/pages/myaccount/personal-info/username/username.component.ts","../../../../libs/angular-account/src/lib/pages/myaccount/personal-info/username/username.component.html"],"sourcesContent":["import { Component, OnInit, ViewEncapsulation, effect, inject } from '@angular/core';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { AngularCommonModule } from '@rolatech/angular-common';\nimport { AngularComponentsModule, BaseComponent } from '@rolatech/angular-components';\nimport { BackButtonDirective } from '@rolatech/angular-services';\n\n@Component({\n standalone: true,\n imports: [AngularCommonModule, AngularComponentsModule, BackButtonDirective],\n selector: 'rolatech-account-username',\n templateUrl: './username.component.html',\n styleUrls: ['./username.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class UsernameComponent extends BaseComponent implements OnInit {\n authUserService = inject(AuthUserService);\n user = inject(AuthService).user;\n username = '';\n constructor() {\n super();\n effect(() => {\n this.username = this.user()?.username!;\n });\n }\n ngOnInit(): void {}\n\n save() {\n this.authUserService.changeUsername(this.username).subscribe({\n next: (res) => {\n this.snackBarService.open(res.data);\n },\n error: (error) => {\n this.snackBarService.open(error.message);\n },\n });\n }\n}\n","<div class=\"max-w-[1120px] m-auto\">\n <div class=\"max-w-[820px] p-4\">\n <div class=\"flex flex-col justify-center items-center p-3 mb-12\">\n <p class=\"text-3xl\">修改用户名</p>\n <p class=\"text-md\">用户名是您在本站的唯一标识</p>\n </div>\n <div class=\"flex flex-col\">\n <mat-form-field appearance=\"fill\">\n <span matTextPrefix>&#64;</span>\n <input matInput [(ngModel)]=\"username\" />\n </mat-form-field>\n </div>\n <div class=\"flex justify-end items-center mt-3\">\n <button mat-button rolatechBackButton>取消</button>\n <button\n class=\"bg-orange-600 shadow shadow-gray-300 cursor-pointer w-20 p-2 text-white rounded text-center ml-3\"\n (click)=\"save()\"\n >\n 保存\n </button>\n </div>\n </div>\n</div>\n"],"names":[],"mappings":";;;;;;;;;;;AAcM,MAAO,iBAAkB,SAAQ,aAAa,CAAA;AAIlD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AAJV,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAChC,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QAGZ,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,QAAS,CAAC;AACzC,SAAC,CAAC,CAAC;KACJ;AACD,IAAA,QAAQ,MAAW;IAEnB,IAAI,GAAA;QACF,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AAC3D,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACrC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aAC1C;AACF,SAAA,CAAC,CAAC;KACJ;8GArBU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,4GCd9B,64BAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDfY,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,uBAAuB,o3BAAE,mBAAmB,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAMhE,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,mBAAmB,CAAC,EAClE,QAAA,EAAA,2BAA2B,EAGtB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,64BAAA,EAAA,CAAA;;;;;"}