login.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <div class="header">
  3. <h2>{{ $t('sys.loginh1') }}</h2>
  4. <p>{{ $t('sys.loginh2') }}</p>
  5. </div>
  6. <a-form :model="loginState" class="form" @finish="login">
  7. <a-form-item name="phone" :rules="[phoneRule]">
  8. <a-input
  9. v-model:value="loginState.phone"
  10. style="height: 50px"
  11. :placeholder="$t('sys.phoneRule')"
  12. />
  13. </a-form-item>
  14. <a-form-item name="password" :rules="[passwordRule]">
  15. <a-input-password
  16. v-model:value="loginState.password"
  17. :placeholder="$t('sys.passwordRule')"
  18. style="height: 50px"
  19. />
  20. </a-form-item>
  21. <a-form-item>
  22. <a-form-item name="remember" no-style>
  23. <a-checkbox v-model:checked="loginState.remember">{{
  24. $t('sys.rememberLabel')
  25. }}</a-checkbox>
  26. </a-form-item>
  27. </a-form-item>
  28. <a-form-item>
  29. <a-button
  30. type="primary"
  31. html-type="submit"
  32. block
  33. class="login-form-button"
  34. style="height: 50px"
  35. >
  36. {{ $t('sys.login') }}
  37. </a-button>
  38. </a-form-item>
  39. </a-form>
  40. <div class="footer">
  41. <a :href="forgetLink">{{ $t('sys.forget') }}</a>
  42. <a :href="registerLink">{{ $t('sys.register') }}</a>
  43. </div>
  44. </template>
  45. <script setup lang="ts">
  46. import { useUserStore } from '@/store'
  47. import { router, RoutesName } from '@/router'
  48. import { phoneRule, passwordRule, encodePwd, useCacheState } from './shared'
  49. import { registerLink, forgetLink } from '@/env'
  50. defineOptions({ name: 'Login' })
  51. const [loginState, saveLoginState] = useCacheState()
  52. const userStore = useUserStore()
  53. const login = async () => {
  54. saveLoginState()
  55. await userStore.login({
  56. phone: loginState.value.phone,
  57. password: encodePwd(loginState.value.password)
  58. })
  59. router.push({ name: RoutesName.personal })
  60. }
  61. </script>
  62. <style scoped lang="scss">
  63. @import './shared/style.scss';
  64. </style>