RegisterForm.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <Form
  3. v-show="getShow"
  4. :rules="rules"
  5. :schema="schema"
  6. class="dark:(border-1 border-[var(--el-border-color)] border-solid)"
  7. hide-required-asterisk
  8. label-position="top"
  9. size="large"
  10. @register="register"
  11. >
  12. <template #title>
  13. <LoginFormTitle style="width: 100%" />
  14. </template>
  15. <template #code="form">
  16. <div class="w-[100%] flex">
  17. <el-input v-model="form['code']" :placeholder="t('login.codePlaceholder')" />
  18. </div>
  19. </template>
  20. <template #register>
  21. <div class="w-[100%]">
  22. <XButton
  23. :loading="loading"
  24. :title="t('login.register')"
  25. class="w-[100%]"
  26. type="primary"
  27. @click="loginRegister()"
  28. />
  29. </div>
  30. <div class="w-[100%] mt-15px">
  31. <XButton :title="t('login.hasUser')" class="w-[100%]" @click="handleBackLogin()" />
  32. </div>
  33. </template>
  34. </Form>
  35. </template>
  36. <script lang="ts" setup>
  37. import type { FormRules } from 'element-plus'
  38. import { useForm } from '@/hooks/web/useForm'
  39. import { useValidator } from '@/hooks/web/useValidator'
  40. import LoginFormTitle from './LoginFormTitle.vue'
  41. import { LoginStateEnum, useLoginState } from './useLogin'
  42. import { FormSchema } from '@/types/form'
  43. defineOptions({ name: 'RegisterForm' })
  44. const { t } = useI18n()
  45. const { required } = useValidator()
  46. const { register, elFormRef } = useForm()
  47. const { handleBackLogin, getLoginState } = useLoginState()
  48. const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER)
  49. const schema = reactive<FormSchema[]>([
  50. {
  51. field: 'title',
  52. colProps: {
  53. span: 24
  54. }
  55. },
  56. {
  57. field: 'username',
  58. label: t('login.username'),
  59. value: '',
  60. component: 'Input',
  61. colProps: {
  62. span: 24
  63. },
  64. componentProps: {
  65. placeholder: t('login.usernamePlaceholder')
  66. }
  67. },
  68. {
  69. field: 'password',
  70. label: t('login.password'),
  71. value: '',
  72. component: 'InputPassword',
  73. colProps: {
  74. span: 24
  75. },
  76. componentProps: {
  77. style: {
  78. width: '100%'
  79. },
  80. strength: true,
  81. placeholder: t('login.passwordPlaceholder')
  82. }
  83. },
  84. {
  85. field: 'check_password',
  86. label: t('login.checkPassword'),
  87. value: '',
  88. component: 'InputPassword',
  89. colProps: {
  90. span: 24
  91. },
  92. componentProps: {
  93. style: {
  94. width: '100%'
  95. },
  96. strength: true,
  97. placeholder: t('login.passwordPlaceholder')
  98. }
  99. },
  100. {
  101. field: 'code',
  102. label: t('login.code'),
  103. colProps: {
  104. span: 24
  105. }
  106. },
  107. {
  108. field: 'register',
  109. colProps: {
  110. span: 24
  111. }
  112. }
  113. ])
  114. const rules: FormRules = {
  115. username: [required()],
  116. password: [required()],
  117. check_password: [required()],
  118. code: [required()]
  119. }
  120. const loading = ref(false)
  121. const loginRegister = async () => {
  122. const formRef = unref(elFormRef)
  123. formRef?.validate(async (valid) => {
  124. if (valid) {
  125. try {
  126. loading.value = true
  127. } finally {
  128. loading.value = false
  129. }
  130. }
  131. })
  132. }
  133. </script>