index.vue 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <script setup lang='ts'>
  2. import logo from '@assets/images/logo.webp';
  3. import {useToggle} from '@vueuse/core';
  4. import {useI18n} from 'vue-i18n';
  5. import RegisterContent from './content/index.vue';
  6. import {useFormState} from './hooks';
  7. import Success from './success/index.vue';
  8. defineOptions({name: 'Register'});
  9. const [isSuccess] = useToggle();
  10. const {t} = useI18n();
  11. const [{values}, {onSubmit, handleReset}] = useFormState(isSuccess);
  12. </script>
  13. <template>
  14. <main>
  15. <div class="container">
  16. <section class="logo">
  17. <img :src="logo" />
  18. <h1 v-t="'login.title'" />
  19. </section>
  20. <section class="tab">
  21. <span class="tab-item-active">{{t('register.tabs[0]')}}</span>
  22. <span :class="{'tab-item-active': isSuccess}">
  23. {{t('register.tabs[1]')}}
  24. </span>
  25. </section>
  26. <section class="content">
  27. <form v-show="!isSuccess" @submit="onSubmit" @reset="handleReset">
  28. <RegisterContent />
  29. </form>
  30. <Success v-show="isSuccess" :email="values.email" />
  31. </section>
  32. </div>
  33. </main>
  34. </template>
  35. <style scoped lang='css'>
  36. @import './index.css';
  37. </style>