forget-password.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <script setup lang="ts">
  2. import { VbenButton, VbenInput } from '@vben-core/shadcn-ui';
  3. import { $t } from '@vben/locales';
  4. import { computed, reactive } from 'vue';
  5. import { useRouter } from 'vue-router';
  6. import Title from './auth-title.vue';
  7. interface Props {
  8. /**
  9. * @zh_CN 是否处于加载处理状态
  10. */
  11. loading?: boolean;
  12. /**
  13. * @zh_CN 登陆路径
  14. */
  15. loginPath?: string;
  16. }
  17. defineOptions({
  18. name: 'AuthenticationForgetPassword',
  19. });
  20. const props = withDefaults(defineProps<Props>(), {
  21. loading: false,
  22. loginPath: '/auth/login',
  23. });
  24. const emit = defineEmits<{
  25. submit: [string];
  26. }>();
  27. const router = useRouter();
  28. const formState = reactive({
  29. email: '',
  30. submitted: false,
  31. });
  32. const emailStatus = computed(() => {
  33. return formState.submitted && !formState.email ? 'error' : 'default';
  34. });
  35. function handleSubmut() {
  36. formState.submitted = true;
  37. if (emailStatus.value !== 'default') {
  38. return;
  39. }
  40. emit('submit', formState.email);
  41. }
  42. function goLogin() {
  43. router.push(props.loginPath);
  44. }
  45. </script>
  46. <template>
  47. <div>
  48. <Title>
  49. {{ $t('authentication.forget-password') }} 🤦🏻‍♂️
  50. <template #desc>
  51. {{ $t('authentication.forget-password-subtitle') }}
  52. </template>
  53. </Title>
  54. <div class="mb-6">
  55. <VbenInput
  56. v-model="formState.email"
  57. :status="emailStatus"
  58. :error-tip="$t('authentication.email-tip')"
  59. :label="$t('authentication.email')"
  60. name="email"
  61. autofocus
  62. placeholder="example@example.com"
  63. type="text"
  64. />
  65. </div>
  66. <div>
  67. <VbenButton class="mt-2 w-full" @click="handleSubmut">
  68. {{ $t('authentication.send-reset-link') }}
  69. </VbenButton>
  70. <VbenButton class="mt-4 w-full" variant="outline" @click="goLogin()">
  71. {{ $t('common.back') }}
  72. </VbenButton>
  73. </div>
  74. </div>
  75. </template>