添加登录注册接口

This commit is contained in:
2026-02-23 10:08:37 +08:00
parent 86d58330d5
commit e2632d921f
8 changed files with 101 additions and 86 deletions

View File

@@ -1,4 +1,4 @@
# VITE_APP_URL = http://192.168.31.82:8771 # VITE_APP_URL = http://192.168.31.82:8771
# VITE_APP_URL = http://18.167.251.121:10095 VITE_APP_URL = http://18.167.251.121:10015
VITE_APP_URL = http://192.168.31.118:8080 # VITE_APP_URL = http://192.168.31.118:8080
VITE_GOOGLE_CLIENT_ID = 216037134725-7q8vqp0ohtmohlosltkfg7bd2v29rm5a.apps.googleusercontent.com VITE_GOOGLE_CLIENT_ID = 216037134725-7q8vqp0ohtmohlosltkfg7bd2v29rm5a.apps.googleusercontent.com

View File

@@ -1,3 +1,3 @@
VITE_APP_URL = https://www.lc-api.aida.com.hk # VITE_APP_URL = https://www.lc-api.aida.com.hk
# VITE_APP_URL = http://18.167.251.121:10095 VITE_APP_URL = http://18.167.251.121:10015
VITE_GOOGLE_CLIENT_ID = 29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com VITE_GOOGLE_CLIENT_ID = 29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com

View File

@@ -1,76 +1,47 @@
import request from '@/utils/request' import request from '@/utils/request'
interface LoginParamsType { /**
name?: string // 姓名 *
email: string // 邮箱 * 发送验证码
password?: string // 密码 * @param params 发送验证码的参数
operationType: 'REGISTER' | 'LOGIN' | 'FORGET_PWD' * @param params.email 邮箱
verifyCode?: string // 验证码 * @returns 验证码发送成功的响应
} */
export const SendVerificationCode = (params) => {
// 发送验证码
export const precheckEmail = (params: { email: string }): Promise<ApiResponse> => {
return request({ return request({
url: '/api/auth/precheckEmail', url: '/api/user/send-verification-code',
method: 'get', method: 'post',
params params
}) })
} }
export const fetchRegisterOrLogin = (data: LoginParamsType): Promise<LoginResponse> => { /**
return request({ * 注册用户
url: '/api/auth/registerOrLogin', * @param data 注册用户的参数
method: 'post', * @param data.username 姓名
data
})
}
export const resetPassword = (data: LoginParamsType): Promise<ApiResponse> => {
return request({
url: '/api/auth/forgotPwd',
method: 'post',
data
})
}
export const checkLoginStatus = (): Promise<ApiResponse<LoginResponse>> => {
return request({
url: '/api/auth/checkLoginStatus',
method: 'get',
meta: { responseAll: true }
})
}
export const LogOut = (): Promise<ApiResponse> => {
return request({
url: '/api/auth/logout',
method: 'get'
})
}
// Google登录/注册参数类型
interface GoogleAuthParamsType {
accessToken?: string // Google ID Token (用于One Tap登录)
}
export const googleAuth = (data: GoogleAuthParamsType): Promise<LoginResponse> => {
return request({
url: '/api/auth/parseGoogleAccessToken',
method: 'get',
params: data
})
}
/** 更改用户信息
* @param data 包含用户信息的对象
* @param data.username 用户名
* @param data.email 邮箱
* @param data.password 密码 * @param data.password 密码
* @returns 包含更新后的用户信息的对象 * @param data.email 邮箱
* @param data.verificationCode 验证码
* @returns 注册成功后的token
*/ */
export const updateUserInfo = (data: any) => { export const Register = (data) => {
return request({ return request({
url: '/api/auth/updateUserInfo', url: '/api/user/register',
method: 'post',
data
})
}
/**
* 登录用户
* @param data 登录用户的参数
* @param data.username 姓名
* @param data.password 密码
* @param data.verificationCode 验证码
* @returns 登录成功后的token
*/
export const Login = (data) => {
return request({
url: '/api/user/login',
method: 'post', method: 'post',
data data
}) })

View File

@@ -24,7 +24,7 @@ export const useUserInfoStore = defineStore('userInfo', () => {
const setToken = (data: string) => { const setToken = (data: string) => {
state.value.token = data state.value.token = data
setLocal(data, 'token') // setLocal(data, 'token')
} }
const getGenerateParams = () => { const getGenerateParams = () => {

View File

@@ -79,7 +79,7 @@ service.interceptors.response.use(
const res = response.data const res = response.data
// 处理异常的情况 // 处理异常的情况
// console.log(res) // console.log(res)
if (res.code != 0) { if (res.code != 200) {
// showToast({ // showToast({
// message: res.errMsg || res.message, // message: res.errMsg || res.message,
// // type: 'fail', // // type: 'fail',

View File

@@ -56,11 +56,14 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Login } from '@/api/login'
import { computed, reactive, ref } from 'vue' import { computed, reactive, ref } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { validateEmail, validatePass, validatePrivacy } from './tools' import { validateEmail, validatePass, validatePrivacy } from './tools'
import OtherLogin from './other-login.vue' import OtherLogin from './other-login.vue'
import VisibleCode from './visible-code.vue' import VisibleCode from './visible-code.vue'
import { useUserInfoStore } from '@/stores'
const userInfoStore = useUserInfoStore()
const router = useRouter() const router = useRouter()
const ruleForm = reactive({ const ruleForm = reactive({
email: [{ validator: validateEmail, trigger: 'blur' }], email: [{ validator: validateEmail, trigger: 'blur' }],
@@ -84,17 +87,30 @@
const onSubmit = () => { const onSubmit = () => {
formRef.value?.validate?.((valid) => { formRef.value?.validate?.((valid) => {
if (valid) { if (valid) {
console.log('submit!') // console.log('submit!')
isVisible.value = true isVisible.value = true
} else { } else {
console.log('error submit!') console.warn('error submit!')
} }
}) })
} }
const onVerifyCode = (code: string) => { const onVerifyCode = (code: string) => {
console.log(code) // console.log(code)
Login({
email: formData.email,
password: formData.password,
verificationCode: code
})
.then((res) => {
if (res) {
userInfoStore.setToken(res)
router.push({ name: 'mainInput' }) router.push({ name: 'mainInput' })
} }
})
.catch(() => {
console.warn('error verify code!')
})
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>

View File

@@ -60,11 +60,14 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Register } from '@/api/login'
import { computed, reactive, ref } from 'vue' import { computed, reactive, ref } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { validateName, validateEmail, validatePass, validatePrivacy } from './tools' import { validateName, validateEmail, validatePass, validatePrivacy } from './tools'
import OtherLogin from './other-login.vue' import OtherLogin from './other-login.vue'
import VisibleCode from './visible-code.vue' import VisibleCode from './visible-code.vue'
import { useUserInfoStore } from '@/stores'
const userInfoStore = useUserInfoStore()
const router = useRouter() const router = useRouter()
const ruleForm = reactive({ const ruleForm = reactive({
name: [{ validator: validateName, trigger: 'blur' }], name: [{ validator: validateName, trigger: 'blur' }],
@@ -90,17 +93,32 @@
const onSubmit = () => { const onSubmit = () => {
formRef.value?.validate?.((valid) => { formRef.value?.validate?.((valid) => {
if (valid) { if (valid) {
console.log('submit!') // console.log('submit!')
isVisible.value = true isVisible.value = true
} else { } else {
console.log('error submit!') console.warn('error submit!')
} }
}) })
} }
const onVerifyCode = (code: string) => { const onVerifyCode = (code: string) => {
console.log(code) Register({
username: formData.name,
email: formData.email,
password: formData.password,
verificationCode: code
})
.then((res) => {
if (res) {
userInfoStore.setToken(res)
router.push({ name: 'nuic' }) router.push({ name: 'nuic' })
} }
})
.catch(() => {
console.warn('error verify code!')
})
// router.push({ name: 'nuic' })
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>

View File

@@ -12,6 +12,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { SendVerificationCode } from '@/api/login'
import { computed, onBeforeUnmount, onMounted, ref } from 'vue' import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
import { CountDown } from '@/utils/tools' import { CountDown } from '@/utils/tools'
import InputCode from '@/components/input-code.vue' import InputCode from '@/components/input-code.vue'
@@ -44,11 +45,20 @@
clearTime() clearTime()
}) })
onMounted(() => { onMounted(() => {
setTime() onSendCode()
}) })
const onSendCode = async () => {
const email = props.email
if (!email) {
console.warn('请输入邮箱')
return
}
setTime()
await SendVerificationCode({ email })
}
const onResend = () => { const onResend = () => {
if (time.value > 0) return if (time.value > 0) return
setTime() onSendCode()
} }
const onVerify = () => { const onVerify = () => {
if (code.value.length !== 6) return if (code.value.length !== 6) return