admin-login.component.html 2.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. <main class="login-page">
  2. <section class="login-story">
  3. <div class="story-inner">
  4. <div class="story-brand"><img src="/static/images/logo.png" alt="" /><span>小树陪练</span></div>
  5. <p class="eyebrow">XIAOSHU PRACTICE</p>
  6. <h1>让每一次管理,<br />都服务于真实成长。</h1>
  7. <p class="story-copy">在一个后台完成会员、陪练、课程与排课管理,清晰掌握训练记录和学习进度,让日常运营更简单、更高效。</p>
  8. </div>
  9. </section>
  10. <section class="login-panel">
  11. <form (ngSubmit)="submit()">
  12. <div class="mobile-brand"><img src="/static/images/logo.png" alt="" /><span>小树陪练管理后台</span></div>
  13. <p class="eyebrow">ADMIN CONSOLE</p>
  14. <h2>欢迎回来</h2>
  15. <p class="form-intro">使用已授权的管理员账号登录系统</p>
  16. <label>
  17. <span>管理员账号</span>
  18. <div class="control"><lucide-icon [img]="icons.UserRound" [size]="19" /><input name="username" [(ngModel)]="username" autocomplete="username" placeholder="请输入账号" /></div>
  19. </label>
  20. <label>
  21. <span>登录密码</span>
  22. <div class="control"><lucide-icon [img]="icons.LockKeyhole" [size]="19" /><input name="password" [(ngModel)]="password" [type]="showPassword() ? 'text' : 'password'" autocomplete="current-password" placeholder="请输入密码" /><button aria-label="显示或隐藏密码" type="button" (click)="showPassword.set(!showPassword())"><lucide-icon [img]="showPassword() ? icons.EyeOff : icons.Eye" [size]="18" /></button></div>
  23. </label>
  24. @if (notice()) { <p class="notice" role="status">{{ notice() }}</p> }
  25. @if (error()) { <p class="error" role="alert">{{ error() }}</p> }
  26. <button class="submit" type="submit" [disabled]="loading()">
  27. @if (loading()) { <lucide-icon class="spin" [img]="icons.LoaderCircle" [size]="19" /> }
  28. {{ loading() ? '正在验证权限…' : '登录管理后台' }}
  29. </button>
  30. </form>
  31. </section>
  32. </main>