Login.cshtml 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. @{
  2. ViewData["Title"] = "Login";
  3. Layout = "~/Views/Shared/_NothingLayout.cshtml";
  4. }
  5. <link rel="stylesheet" href="~/css/login.css" />
  6. <div class="login-background"></div>
  7. <div class="login-grid"></div>
  8. <div class="login-container">
  9. <div class="login-form-card">
  10. <div class="login-header">
  11. @* <div class="logo-circle">
  12. <i class="ft-lock" style="font-size: 36px; color: #333;"></i>
  13. </div> *@
  14. <h2 class="login-title">BALANCE PLUS MYTEL</h2>
  15. </div>
  16. <div class="form-section">
  17. <form class="form-horizontal" id="loginForm" action="@ViewBag.MyConfig.MyValue/Home/LoginAction" method="post">
  18. <div class="input-wrapper">
  19. <input type="text" class="input-enhanced" id="user-name" placeholder="USERNAME" name="account">
  20. <i class="ft-user input-icon"></i>
  21. </div>
  22. <div class="input-wrapper">
  23. <input type="password" class="input-enhanced input-password" id="user-password" placeholder="PASSWORD" name="password">
  24. <i class="fa fa-key input-icon"></i>
  25. <span class="toggle-password" id="togglePassword" title="Show/Hide Password">👁</span>
  26. </div>
  27. <div class="error-message">
  28. <span class="text-danger" id="errorMessage">@(TempData["ErrorMessage"]?.ToString())</span>
  29. </div>
  30. <button type="submit" class="btn-login">
  31. <i class="ft-unlock" style="margin-right: 8px;"></i>
  32. Login
  33. </button>
  34. </form>
  35. </div>
  36. <script>
  37. // Toggle password visibility
  38. document.getElementById('togglePassword').addEventListener('click', function() {
  39. var passwordInput = document.getElementById('user-password');
  40. var toggleIcon = document.getElementById('togglePassword');
  41. if (passwordInput.type === 'password') {
  42. passwordInput.type = 'text';
  43. toggleIcon.textContent = '🙈';
  44. toggleIcon.title = 'Hide Password';
  45. } else {
  46. passwordInput.type = 'password';
  47. toggleIcon.textContent = '👁';
  48. toggleIcon.title = 'Show Password';
  49. }
  50. });
  51. // Form validation
  52. document.getElementById('loginForm').addEventListener('submit', function(e) {
  53. var account = document.getElementById('user-name').value.trim();
  54. var password = document.getElementById('user-password').value.trim();
  55. var errorMessage = document.getElementById('errorMessage');
  56. // Clear previous error
  57. errorMessage.textContent = '';
  58. document.getElementById('user-name').classList.remove('input-error');
  59. document.getElementById('user-password').classList.remove('input-error');
  60. // Validate account
  61. if (!account) {
  62. e.preventDefault();
  63. errorMessage.textContent = 'Please enter infomation in this field';
  64. document.getElementById('user-name').classList.add('input-error');
  65. document.getElementById('user-name').focus();
  66. return false;
  67. }
  68. // Validate password
  69. if (!password) {
  70. e.preventDefault();
  71. errorMessage.textContent = 'Please enter password';
  72. document.getElementById('user-password').classList.add('input-error');
  73. document.getElementById('user-password').focus();
  74. return false;
  75. }
  76. return true;
  77. });
  78. </script>
  79. <style>
  80. .input-error {
  81. border-color: #dc3545 !important;
  82. box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25) !important;
  83. }
  84. .error-message {
  85. min-height: 20px;
  86. margin-bottom: 10px;
  87. }
  88. .error-message .text-danger {
  89. font-size: 14px;
  90. display: block;
  91. }
  92. .input-password {
  93. padding-right: 50px !important;
  94. }
  95. .toggle-password {
  96. position: absolute;
  97. right: 18px;
  98. top: 50%;
  99. transform: translateY(-50%);
  100. color: #666666;
  101. font-size: 18px;
  102. cursor: pointer;
  103. z-index: 2;
  104. transition: opacity 0.3s ease;
  105. pointer-events: auto;
  106. user-select: none;
  107. display: inline-block;
  108. line-height: 1;
  109. }
  110. .toggle-password:hover {
  111. opacity: 0.7;
  112. }
  113. .input-wrapper {
  114. position: relative;
  115. }
  116. </style>
  117. <div class="security-note">
  118. ⚡ Protected Access - Authorized Personnel Only
  119. </div>
  120. </div>
  121. </div>