useLoginAndDownload.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. import type { FormInstance, FormRules } from 'element-plus'
  2. import { useUserStore } from '@/stores/modules/user'
  3. import { useCommonStore } from '@/stores/modules/common'
  4. import { getEmailCodeApi, getUpdateUserInfoApi, submitInfoApi, validateEmailIsExistApi } from '@/api/model/user'
  5. const { closeLoginAndDownloadModal } = useLoginAndDownLoadModal()
  6. const { loading, onGoogleLogin } = useGoogleLogin()
  7. const loginForm = ref<any>({
  8. email: '',
  9. captcha: '',
  10. })
  11. const emailStep = ref<number>(0)
  12. const isEmailGoogle = ref<boolean>(false)
  13. const selectedMethod = ref<string>('google')
  14. export default function useRegister() {
  15. const seconds = ref<number>(0)
  16. const errorCodeTxt = ref<string>('')
  17. const formInfo = ref<any>({
  18. firstName: '',
  19. catalogueId: '',
  20. lastName: '',
  21. mobile: '',
  22. mobileAreaCode: '+86',
  23. customServer: 'browing',
  24. companyName: '',
  25. purchaseAmount: undefined,
  26. purchaseRequest: '',
  27. })
  28. const visible = computed(() => formInfo.value.customServer === 'suppliers')
  29. watch(() => visible.value, (val) => {
  30. if (!val) {
  31. // 如果visible变为false,重置formInfo的相关字段
  32. formInfo.value.companyName = ''
  33. formInfo.value.purchaseAmount = undefined
  34. formInfo.value.purchaseRequest = ''
  35. }
  36. })
  37. const nextStep = () => {
  38. emailStep.value++
  39. }
  40. const setEmailStep = (val: number) => {
  41. emailStep.value = val
  42. }
  43. const backStep = () => {
  44. if (emailStep.value > 0)
  45. emailStep.value--
  46. }
  47. /**
  48. * 二选一选择邮箱--下一步
  49. */
  50. const onSelectEmail = () => {
  51. selectedMethod.value = 'email'
  52. loginForm.value.email = ''
  53. nextStep()
  54. }
  55. /**
  56. * 选择曾经登陆过的账号--下一步
  57. */
  58. const onSelectAccount = async (item: any) => {
  59. console.log('onSelectAccount', item, loading.value)
  60. // type: 'google' | 'email'
  61. if (item.type === 'google') {
  62. const result = await onGoogleLogin()
  63. await onGoogleLoginSuccess(result)
  64. }
  65. if (item.type === 'email') {
  66. loginForm.value.email = item.email
  67. emailStep.value = 1
  68. }
  69. }
  70. /**
  71. * dao: 倒计时60秒
  72. */
  73. const countSeconds = () => {
  74. seconds.value = 60
  75. const timer = setInterval(() => {
  76. seconds.value--
  77. if (seconds.value === 0)
  78. clearInterval(timer)
  79. }, 1000)
  80. }
  81. /**
  82. * 邮箱--发送验证码
  83. */
  84. const getMailCode = async () => {
  85. try {
  86. if (seconds.value > 0)
  87. return
  88. // 获取验证码
  89. await getEmailCodeApi({ account: loginForm.value.email, type: 's003_login' })
  90. countSeconds()
  91. }
  92. catch (error) {
  93. console.error('Error sending email code:', error)
  94. }
  95. }
  96. /**
  97. * 邮箱--验证是否存在--是否与已存在google的邮箱--下一步
  98. * @returns
  99. */
  100. async function sendEmail(formEl: FormInstance | undefined) {
  101. if (!formEl)
  102. return
  103. await formEl.validate(async (valid, fields) => {
  104. if (valid) {
  105. // 验证已存在google的邮箱
  106. const res: any = await validateEmailIsExistApi({ email: loginForm.value.email })
  107. if (!res || res !== 'google')
  108. // 如果没有google的邮箱,直接下一步,或者没有注册过邮箱
  109. isEmailGoogle.value = false
  110. if (res === 'google') {
  111. // 显示google登陆按钮
  112. isEmailGoogle.value = true
  113. loginForm.value.email = ''
  114. }
  115. nextStep()
  116. }
  117. else { console.log('error submit!', fields) }
  118. })
  119. }
  120. /**
  121. * 邮箱--验证码--完成注册
  122. * @returns
  123. */
  124. async function finishCode(formEl: FormInstance | undefined) {
  125. errorCodeTxt.value = ''
  126. if (!formEl)
  127. return
  128. await formEl.validate(async (valid, fields) => {
  129. if (valid) {
  130. await handleLogin({
  131. email: loginForm.value.email,
  132. captcha: loginForm.value.captcha,
  133. type: 'email',
  134. })
  135. }
  136. else { console.log('error submit!', fields) }
  137. })
  138. }
  139. /**
  140. * 登录--提交
  141. */
  142. async function handleLogin(params: any) {
  143. try {
  144. const { login } = useUserStore()
  145. await login(params)
  146. console.log('登陆成功后------1111', emailStep.value)
  147. // closeLoginAndDownloadModal({ status: true, isFirstLogin: true })
  148. }
  149. catch (err: any) {
  150. console.log('Login error:', err, selectedMethod.value)
  151. if (selectedMethod.value === 'email')
  152. errorCodeTxt.value = 'The code is wrong or invalid.'
  153. else
  154. ElMessage.error(err.message || 'Login failed, please try again later.')
  155. }
  156. }
  157. /**
  158. * google登陆成功
  159. */
  160. async function onGoogleLoginSuccess(info: any) {
  161. await handleLogin({
  162. googleKey: info.token,
  163. email: info.userInfo.email,
  164. type: 'google',
  165. })
  166. }
  167. // ------------------------ 填写信息部分 ------------------------
  168. const setSubmitInfo = async (formEl: FormInstance | undefined) => {
  169. if (!formEl)
  170. return
  171. await formEl.validate(async (valid, fields) => {
  172. if (valid) {
  173. const { downloadCatalog } = storeToRefs(useCommonStore())
  174. // 提交用户信息
  175. console.log('submit info', formInfo.value)
  176. formInfo.value.catalogueId = downloadCatalog.value?.id || ''
  177. await submitInfoApi(formInfo.value)
  178. // 更新用户信息
  179. const res = await getUpdateUserInfoApi()
  180. const { updateUserInfo } = useUserStore()
  181. updateUserInfo(res)
  182. emailStep.value = 4
  183. }
  184. else { console.log('error submit!', fields) }
  185. })
  186. }
  187. /**
  188. * 已经填写了用户信息---提交请求
  189. */
  190. const onSubmitRequest = async () => {
  191. const { downloadCatalog } = storeToRefs(useCommonStore())
  192. const { userInfo } = storeToRefs(useUserStore())
  193. // 提交用户信息
  194. const params = {
  195. catalogueId: downloadCatalog.value?.id || '',
  196. firstName: userInfo.value?.firstName,
  197. lastName: userInfo.value?.lastName,
  198. }
  199. await submitInfoApi(params)
  200. emailStep.value = 4
  201. }
  202. return { emailStep, visible, onGoogleLoginSuccess, loginForm, formInfo, setEmailStep, setSubmitInfo, onSubmitRequest, onSelectAccount, errorCodeTxt, seconds, isEmailGoogle, sendEmail, nextStep, onSelectEmail, finishCode, backStep, getMailCode }
  203. }