|
|
@@ -1,10 +1,12 @@
|
|
|
<template>
|
|
|
- <app-view class="g-form">
|
|
|
+ <app-view class="forget g-form g-layout">
|
|
|
<template #header>
|
|
|
<app-navbar :title="t('user.forget.title')" />
|
|
|
</template>
|
|
|
- <Form ref="formRef" class="g-form__container" style="margin-top: var(--van-padding-md);" @submit="formSubmit">
|
|
|
- <CellGroup :inset="insetStyle">
|
|
|
+ <app-switch-tab class="g-layout-block" v-model="selectedMethod" :options="openMethodList" @change="changeMethod"
|
|
|
+ v-if="openMethodList.length > 1" />
|
|
|
+ <Form ref="formRef" class="g-form__container g-layout-block" @submit="formSubmit">
|
|
|
+ <CellGroup :inset="insetStyle" v-if="selectedMethod === 1">
|
|
|
<Field :label="t('user.register.area')" right-icon="arrow" v-if="codeList.length">
|
|
|
<template #input>
|
|
|
<app-select v-model="selectedCode" :options="codeList">
|
|
|
@@ -16,9 +18,9 @@
|
|
|
</template>
|
|
|
</Field>
|
|
|
<Field v-model="formData.mobile" type="digit" name="mobile" :label="t('user.register.mobile')"
|
|
|
- :placeholder="t('common.pleaseenter')" autocomplete="off" :rules="formRules.mobile" />
|
|
|
+ :placeholder="t('common.required')" autocomplete="off" :rules="formRules.mobile" />
|
|
|
<Field v-model="formData.vcode" type="digit" name="vcode" :label="t('user.forget.vcode')"
|
|
|
- :placeholder="t('common.pleaseenter')" autocomplete="off" :rules="formRules.vcode">
|
|
|
+ :placeholder="t('common.required')" autocomplete="off" :rules="formRules.vcode">
|
|
|
<template #button>
|
|
|
<Button size="small" :disabled="loading" @click="sendVerifyCode">
|
|
|
<span v-if="isCountdown">{{ t('user.forget.sendagain') }}({{ currentTime }})</span>
|
|
|
@@ -27,11 +29,24 @@
|
|
|
</template>
|
|
|
</Field>
|
|
|
</CellGroup>
|
|
|
+ <CellGroup :inset="insetStyle" v-if="selectedMethod === 2">
|
|
|
+ <Field name="email" label="邮箱地址" v-model="formData.mobile" :placeholder="t('common.required')"
|
|
|
+ :rules="formRules.email" />
|
|
|
+ <Field v-model="formData.vcode" type="digit" name="vcode" label="验证码"
|
|
|
+ :placeholder="t('common.required')" :rules="formRules.vcode">
|
|
|
+ <template #button>
|
|
|
+ <Button size="small" :disabled="loading" @click="sendVerifyCode">
|
|
|
+ <span v-if="isCountdown">{{ t('user.register.sendagain') }}({{ currentTime }})</span>
|
|
|
+ <span v-else>{{ t('user.register.getsmscode') }}</span>
|
|
|
+ </Button>
|
|
|
+ </template>
|
|
|
+ </Field>
|
|
|
+ </CellGroup>
|
|
|
<CellGroup :inset="insetStyle">
|
|
|
<Field v-model="formData.password" name="password" type="password" :label="t('user.forget.newpwd')"
|
|
|
- :placeholder="t('common.pleaseenter')" autocomplete="off" :rules="formRules.password" />
|
|
|
+ :placeholder="t('common.required')" autocomplete="off" :rules="formRules.password" />
|
|
|
<Field v-model="formData.confirmpassword" name="confirmpassword" type="password"
|
|
|
- :label="t('user.forget.confirmpwd')" :placeholder="t('common.pleaseenter')" autocomplete="off"
|
|
|
+ :label="t('user.forget.confirmpwd')" :placeholder="t('common.required')" autocomplete="off"
|
|
|
:rules="formRules.confirmpassword" />
|
|
|
</CellGroup>
|
|
|
</Form>
|
|
|
@@ -50,12 +65,14 @@ import { useCountDown } from '@vant/use'
|
|
|
import { fullloading, dialog } from '@/utils/vant'
|
|
|
import { getEncryptMobile } from '@/filters'
|
|
|
import { validateRules } from '@/constants/regex'
|
|
|
+import { getOpenMethodList } from '@/constants/common'
|
|
|
import { useNavigation } from '@mobile/router/navigation'
|
|
|
import { queryLoginId } from '@/services/api/account'
|
|
|
import { resetPassword, sendResetVerifyCode } from '@/services/api/common'
|
|
|
import cryptojs from 'crypto-js'
|
|
|
import { i18n, useUserStore, useGlobalStore } from '@/stores'
|
|
|
import { getCountryCodeList } from '@/constants/unit'
|
|
|
+import AppSwitchTab from '@mobile/components/base/switch-tab/index.vue'
|
|
|
import AppSelect from '@mobile/components/base/select/index.vue'
|
|
|
|
|
|
defineProps({
|
|
|
@@ -72,13 +89,21 @@ const loading = ref(false)
|
|
|
const isCountdown = ref(false) // 是否正在倒计时
|
|
|
const globalStore = useGlobalStore()
|
|
|
|
|
|
+const openMethodList = getOpenMethodList() // 开户方式
|
|
|
+const selectedMethod = shallowRef(1) // 选中的开户方式
|
|
|
+
|
|
|
const { getSystemParamValue } = useUserStore()
|
|
|
const param1010 = getSystemParamValue('1010') ?? '1'
|
|
|
const param1013 = getSystemParamValue('1013') ?? '30'
|
|
|
|
|
|
const codeList = getCountryCodeList()
|
|
|
const selectedCode = shallowRef(codeList[0]?.value) // 选中的区号
|
|
|
-const phoneNumber = computed(() => (selectedCode.value ?? '') + formData.mobile) // 手机号码
|
|
|
+
|
|
|
+// 用户名
|
|
|
+const accountName = computed(() => {
|
|
|
+ const prefix = selectedMethod.value === 1 ? (selectedCode.value ?? '') : ''
|
|
|
+ return prefix + formData.mobile
|
|
|
+})
|
|
|
|
|
|
// 倒计时函数
|
|
|
const countdown = useCountDown({
|
|
|
@@ -125,6 +150,16 @@ const formRules: { [key: string]: FieldRule[] } = {
|
|
|
}
|
|
|
}
|
|
|
}],
|
|
|
+ email: [{
|
|
|
+ required: true,
|
|
|
+ message: '请输入邮箱地址',
|
|
|
+ validator: (val) => {
|
|
|
+ if (validateRules.email.validate(val)) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return validateRules.email.message
|
|
|
+ }
|
|
|
+ }],
|
|
|
password: [{
|
|
|
required: true,
|
|
|
message: t('user.forget.tips3'),
|
|
|
@@ -154,13 +189,22 @@ const formRules: { [key: string]: FieldRule[] } = {
|
|
|
}],
|
|
|
}
|
|
|
|
|
|
+// 选择忘记方式
|
|
|
+const changeMethod = (value: number) => {
|
|
|
+ formData.mobile = ''
|
|
|
+ formData.vcode = ''
|
|
|
+ selectedMethod.value = value
|
|
|
+}
|
|
|
+
|
|
|
// 发送手机验证码
|
|
|
const sendVerifyCode = () => {
|
|
|
- formRef.value?.validate('mobile').then(() => {
|
|
|
+ const field = selectedMethod.value === 1 ? 'mobile' : 'email'
|
|
|
+
|
|
|
+ formRef.value?.validate(field).then(() => {
|
|
|
loading.value = true
|
|
|
sendResetVerifyCode({
|
|
|
data: {
|
|
|
- mobile: getEncryptMobile(phoneNumber.value),
|
|
|
+ mobile: getEncryptMobile(accountName.value),
|
|
|
businessType: 1
|
|
|
}
|
|
|
}).then(() => {
|
|
|
@@ -177,7 +221,7 @@ const formSubmit = () => {
|
|
|
fullloading((hideLoading) => {
|
|
|
queryLoginId({
|
|
|
data: {
|
|
|
- username: phoneNumber.value
|
|
|
+ username: accountName.value
|
|
|
}
|
|
|
}).then((res) => {
|
|
|
const { password, vcode } = formData
|
|
|
@@ -188,7 +232,7 @@ const formSubmit = () => {
|
|
|
resetPassword({
|
|
|
data: {
|
|
|
logincode,
|
|
|
- mobile: getEncryptMobile(phoneNumber.value),
|
|
|
+ mobile: getEncryptMobile(accountName.value),
|
|
|
password: encryptedHex,
|
|
|
vcode,
|
|
|
}
|
|
|
@@ -199,6 +243,7 @@ const formSubmit = () => {
|
|
|
router.back()
|
|
|
})
|
|
|
} else {
|
|
|
+ formData.vcode = ''
|
|
|
showFailToast(res.message)
|
|
|
}
|
|
|
}).catch((err) => {
|