login.component.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <form nz-form [formGroup]="form" (ngSubmit)="submit()" role="form">
  2. <nz-radio-group
  3. [(ngModel)]="loginType"
  4. [ngModelOptions]="{ standalone: true }"
  5. nzSize="large"
  6. *ngIf="switchTab"
  7. style="margin-bottom: 8px; width: 100%"
  8. >
  9. <label nz-radio-button nzValue="normal" style="width: 50%; text-align: center">
  10. <i nz-icon nzType="user" nzTheme="outline"></i>
  11. {{ 'mxk.login.tab-credentials' | i18n }}
  12. </label>
  13. <label nz-radio-button nzValue="mobile" style="width: 50%; text-align: center" class="d-none">
  14. <i nz-icon nzType="mobile" nzTheme="outline"></i>
  15. {{ 'mxk.login.tab-mobile' | i18n }}
  16. </label>
  17. <label nz-radio-button nzValue="qrscan" style="width: 50%; text-align: center" (click)="getQrCode()">
  18. <i nz-icon nzType="qrcode" nzTheme="outline"></i>{{ 'mxk.login.tab-qrscan' | i18n }}
  19. </label>
  20. </nz-radio-group>
  21. <div nz-row *ngIf="loginType == 'normal'">
  22. <nz-alert style="width: 100%" *ngIf="error" [nzType]="'error'" [nzMessage]="error" [nzShowIcon]="true" class="mb-lg"></nz-alert>
  23. <nz-form-item style="width: 100%">
  24. <nz-form-control nzErrorTip="">
  25. <nz-input-group nzSize="large" nzPrefixIcon="user">
  26. <input nz-input formControlName="userName" placeholder="{{ 'mxk.login.text.username' | i18n }}" />
  27. </nz-input-group>
  28. </nz-form-control>
  29. </nz-form-item>
  30. <nz-form-item style="width: 100%">
  31. <nz-form-control nzErrorTip="">
  32. <nz-input-group [nzSuffix]="suffixTemplate" nzSize="large" nzPrefixIcon="key">
  33. <input
  34. [type]="passwordVisible ? 'text' : 'password'"
  35. nz-input
  36. placeholder="{{ 'mxk.login.text.password' | i18n }}"
  37. formControlName="password"
  38. />
  39. </nz-input-group>
  40. <ng-template #suffixTemplate>
  41. <i nz-icon [nzType]="passwordVisible ? 'eye-invisible' : 'eye'" (click)="passwordVisible = !passwordVisible"></i>
  42. </ng-template>
  43. </nz-form-control>
  44. </nz-form-item>
  45. <nz-form-item style="width: 100%" *ngIf="captchaType != 'NONE'">
  46. <nz-form-control nzErrorTip="">
  47. <nz-input-group nzSearch nzSize="large" nzPrefixIcon="lock" nzSearch [nzAddOnAfter]="suffixImageCaptchaButton">
  48. <input type="text" formControlName="captcha" nz-input placeholder="{{ 'mxk.login.text.captcha' | i18n }}" />
  49. </nz-input-group>
  50. <ng-template #suffixImageCaptchaButton>
  51. <img src="{{ imageCaptcha }}" (click)="getImageCaptcha()" />
  52. </ng-template>
  53. </nz-form-control>
  54. </nz-form-item>
  55. </div>
  56. <div nz-row *ngIf="loginType == 'mobile'">
  57. <nz-form-item style="width: 100%">
  58. <nz-form-control [nzErrorTip]="">
  59. <nz-input-group nzSize="large" nzPrefixIcon="user">
  60. <input nz-input formControlName="mobile" placeholder="{{ 'mxk.login.text.mobile' | i18n }}" />
  61. </nz-input-group>
  62. <ng-template #mobileErrorTip let-i>
  63. <ng-container *ngIf="i.errors.required">
  64. {{ 'validation.phone-number.required' | i18n }}
  65. </ng-container>
  66. <ng-container *ngIf="i.errors.pattern">
  67. {{ 'validation.phone-number.wrong-format' | i18n }}
  68. </ng-container>
  69. </ng-template>
  70. </nz-form-control>
  71. </nz-form-item>
  72. <nz-form-item style="width: 100%">
  73. <nz-form-control [nzErrorTip]="'' | i18n">
  74. <nz-input-group nzSize="large" nzPrefixIcon="mail" nzSearch [nzAddOnAfter]="suffixSendOtpCodeButton">
  75. <input nz-input formControlName="otpCaptcha" placeholder="{{ 'mxk.login.text.captcha' | i18n }}" />
  76. </nz-input-group>
  77. <ng-template #suffixSendOtpCodeButton>
  78. <button type="button" nz-button nzSize="large" (click)="sendOtpCode()" [disabled]="count > 0" nzBlock [nzLoading]="loading">
  79. {{ count ? count + 's' : ('app.register.get-verification-code' | i18n) }}
  80. </button>
  81. </ng-template>
  82. </nz-form-control>
  83. </nz-form-item>
  84. </div>
  85. <div nz-row *ngIf="loginType=='qrscan'">
  86. <div class="qrcode" id="div_qrcodelogin" style="background: #fff;padding: 20px;"> </div>
  87. <div id="qrexpire" *ngIf="qrexpire" style="width: 100%;text-align: center;background: #fff;padding-bottom: 20px;">
  88. 二维码过期 <a href="javascript:" (click)="getQrCode()">刷新</a>
  89. </div>
  90. </div>
  91. <nz-form-item *ngIf="loginType == 'normal' || loginType == 'mobile'">
  92. <nz-col [nzSpan]="12">
  93. <label nz-checkbox formControlName="remember">{{ 'mxk.login.remember-me' | i18n }}</label>
  94. </nz-col>
  95. <nz-col [nzSpan]="12" class="text-right">
  96. <a class="forgot" routerLink="/passport/forgot">{{ 'mxk.login.forgot-password' | i18n }}</a>
  97. </nz-col>
  98. </nz-form-item>
  99. <nz-form-item *ngIf="loginType == 'normal' || loginType == 'mobile'">
  100. <button nz-button type="submit" nzType="primary" nzSize="large" [nzLoading]="loading" nzBlock>
  101. {{ 'app.login.login' | i18n }}
  102. </button>
  103. </nz-form-item>
  104. </form>
  105. <div class="other" *ngIf="loginType == 'normal'">
  106. {{ 'app.login.sign-in-with' | i18n }}
  107. <ng-container *ngFor="let provd of socials.providers">
  108. <i nz-tooltip nzTooltipTitle="{{ provd.providerName }}" (click)="socialauth(provd.provider)" nz-icon class="icon">
  109. <img src="{{ provd.icon }}" style="width: 32px" />
  110. </i>
  111. </ng-container>
  112. <a class="register d-none" routerLink="/passport/register">{{ 'mxk.login.signup' | i18n }}</a>
  113. </div>