useLogin.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { ref, computed, unref, Ref } from 'vue'
  2. import { useI18n } from '@/hooks/web/useI18n'
  3. export enum LoginStateEnum {
  4. LOGIN,
  5. REGISTER,
  6. RESET_PASSWORD,
  7. MOBILE,
  8. QR_CODE
  9. }
  10. const currentState = ref(LoginStateEnum.LOGIN)
  11. export function useLoginState() {
  12. function setLoginState(state: LoginStateEnum) {
  13. currentState.value = state
  14. }
  15. const getLoginState = computed(() => currentState.value)
  16. function handleBackLogin() {
  17. setLoginState(LoginStateEnum.LOGIN)
  18. }
  19. return {
  20. setLoginState,
  21. getLoginState,
  22. handleBackLogin
  23. }
  24. }
  25. export function useFormValid<T extends Object = any>(formRef: Ref<any>) {
  26. async function validForm() {
  27. const form = unref(formRef)
  28. if (!form) return
  29. const data = await form.validate()
  30. return data as T
  31. }
  32. return {
  33. validForm
  34. }
  35. }
  36. const getFormRules = computed(
  37. (): {
  38. [k: string]: ValidationRule | ValidationRule[]
  39. } => {
  40. const accountFormRule = unref(getAccountFormRule)
  41. const passwordFormRule = unref(getPasswordFormRule)
  42. const smsFormRule = unref(getSmsFormRule)
  43. const mobileFormRule = unref(getMobileFormRule)
  44. const mobileRule = {
  45. sms: smsFormRule,
  46. mobile: mobileFormRule
  47. }
  48. switch (unref(currentState)) {
  49. // register form rules
  50. case LoginStateEnum.REGISTER:
  51. return {
  52. account: accountFormRule,
  53. password: passwordFormRule,
  54. confirmPassword: [
  55. {
  56. validator: validateConfirmPassword(formData?.password),
  57. trigger: 'change'
  58. }
  59. ],
  60. policy: [
  61. {
  62. validator: validatePolicy,
  63. trigger: 'change'
  64. }
  65. ],
  66. ...mobileRule
  67. }
  68. // reset password form rules
  69. case LoginStateEnum.RESET_PASSWORD:
  70. return {
  71. account: accountFormRule,
  72. ...mobileRule
  73. }
  74. // mobile form rules
  75. case LoginStateEnum.MOBILE:
  76. return mobileRule
  77. // login form rules
  78. default:
  79. return {
  80. account: accountFormRule,
  81. password: passwordFormRule
  82. }
  83. }
  84. }
  85. )
  86. return {
  87. getFormRules
  88. }
  89. }
  90. function createRule(message: string) {
  91. return [
  92. {
  93. required: true,
  94. message,
  95. trigger: 'change'
  96. }
  97. ]
  98. }