feat:移植工程
This commit is contained in:
124
src/store/auth.ts
Normal file
124
src/store/auth.ts
Normal file
@@ -0,0 +1,124 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ILoginType, ISession } from '@/types/auth'
|
||||
import { loginHomeApi } from '@/apis/session'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { emailPattern, phonePattern } from '@/utils/element/elRules'
|
||||
|
||||
export const useAuthStore = defineStore('auth', {
|
||||
state: () => ({
|
||||
loginForm: {
|
||||
username: '',
|
||||
password: '',
|
||||
isRemember: false
|
||||
},
|
||||
phoneLoginForm: {
|
||||
phoneNumber: '',
|
||||
code: ''
|
||||
},
|
||||
emailLoginForm: {
|
||||
email: '',
|
||||
code: ''
|
||||
},
|
||||
loginType: 'common' as ILoginType,
|
||||
loginLoading: false,
|
||||
isVerified: false,
|
||||
isGettingCode: false,
|
||||
getCodeCountdown: 60,
|
||||
getCodeTimer: null as NodeJS.Timeout | null,
|
||||
homeSession: {} as ISession
|
||||
}),
|
||||
actions: {
|
||||
changeLoginType(type: ILoginType) {
|
||||
this.loginType = type
|
||||
|
||||
if (type === 'common') {
|
||||
this.stopCountdown()
|
||||
}
|
||||
this.resetLoginForm()
|
||||
},
|
||||
getAuthCode(type: ILoginType) {
|
||||
switch (type) {
|
||||
case 'phone':
|
||||
if (phonePattern.test(this.phoneLoginForm.phoneNumber)) {
|
||||
this.isGettingCode = true
|
||||
ElMessage.success('验证码已发送至手机')
|
||||
this.startCountdown()
|
||||
} else {
|
||||
ElMessage.error('请先输入正确的手机号')
|
||||
}
|
||||
break
|
||||
case 'email':
|
||||
if (emailPattern.test(this.emailLoginForm.email)) {
|
||||
this.isGettingCode = true
|
||||
ElMessage.success('验证码已发送至邮箱')
|
||||
this.startCountdown()
|
||||
} else {
|
||||
ElMessage.error('请先输入正确的邮箱地址')
|
||||
}
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
},
|
||||
startCountdown() {
|
||||
this.getCodeTimer = setInterval(() => {
|
||||
if (this.getCodeCountdown > 0) {
|
||||
this.getCodeCountdown--
|
||||
} else {
|
||||
clearInterval(this.getCodeTimer as NodeJS.Timeout)
|
||||
this.isGettingCode = false
|
||||
this.getCodeCountdown = 60
|
||||
}
|
||||
}, 1000)
|
||||
},
|
||||
stopCountdown() {
|
||||
if (this.getCodeTimer) {
|
||||
clearInterval(this.getCodeTimer)
|
||||
}
|
||||
},
|
||||
async handleLogin(type: ILoginType) {
|
||||
const { username, password } = this.loginForm
|
||||
const { phoneNumber, code: phoneCode } = this.phoneLoginForm
|
||||
const { email, code: emailCode } = this.emailLoginForm
|
||||
switch (type) {
|
||||
case 'common':
|
||||
this.homeSession = await loginHomeApi(username, password)
|
||||
break
|
||||
case 'phone':
|
||||
this.homeSession = await loginHomeApi(phoneNumber, phoneCode)
|
||||
break
|
||||
case 'email':
|
||||
this.homeSession = await loginHomeApi(email, emailCode)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
ElMessage.success('登录成功')
|
||||
},
|
||||
resetLoginForm() {
|
||||
switch (this.loginType) {
|
||||
case 'common':
|
||||
this.loginForm = {
|
||||
username: '',
|
||||
password: '',
|
||||
isRemember: false
|
||||
}
|
||||
break
|
||||
case 'phone':
|
||||
this.phoneLoginForm = {
|
||||
phoneNumber: '',
|
||||
code: ''
|
||||
}
|
||||
break
|
||||
case 'email':
|
||||
this.emailLoginForm = {
|
||||
email: '',
|
||||
code: ''
|
||||
}
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user