使用vue3+tsx实现一个注册登录
// AuthForm.tsx
import { defineComponent, reactive, ref } from 'vue'interface FormData {email: stringpassword: stringconfirmPassword?: string
}export default defineComponent({setup() {const isLoginMode = ref(true)const isLoading = ref(false)const errorMessage = ref('')const formData = reactive<FormData>({email: '',password: '',confirmPassword: ''})const errors = reactive({email: '',password: '',confirmPassword: ''})const validateEmail = (email: string) => {const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/if (!email) return 'Email is required'if (!regex.test(email)) return 'Invalid email format'return ''}const validatePassword = (password: string) => {if (!password) return 'Password is required'if (password.length < 6) return 'Password must be at least 6 characters'return ''}const validateForm = () => {let isValid = trueerrors.email = validateEmail(formData.email)errors.password = validatePassword(formData.password)if (!isLoginMode.value) {errors.confirmPassword = formData.password === formData.confirmPassword ? '' : 'Passwords do not match'}if (Object.values(errors).some(msg => msg)) isValid = falsereturn isValid}const handleSubmit = async (e: Event) => {e.preventDefault()if (!validateForm()) returnisLoading.value = trueerrorMessage.value = ''try {// 模拟 API 调用await new Promise(resolve => setTimeout(resolve, 1000))if (isLoginMode.value) {console.log('Login data:', formData)// 实际调用登录 API} else {console.log('Register data:', formData)// 实际调用注册 API}} catch (err) {errorMessage.value = 'An error occurred. Please try again.'} finally {isLoading.value = false}}const switchMode = () => {isLoginMode.value = !isLoginMode.value// 重置表单Object.assign(formData, {email: '',password: '',confirmPassword: ''})Object.assign(errors, {email: '',password: '',confirmPassword: ''})}return () => (<div class="auth-container"><h2>{isLoginMode.value ? 'Login' : 'Register'}</h2>{errorMessage.value && (<div class="error-message">{errorMessage.value}</div>)}<form onSubmit={handleSubmit}><div class="form-group"><label>Email</label><inputtype="email"v-model={formData.email}disabled={isLoading.value}/>{errors.email && <div class="error">{errors.email}</div>}</div><div class="form-group"><label>Password</label><inputtype="password"v-model={formData.password}disabled={isLoading.value}/>{errors.password && <div class="error">{errors.password}</div>}</div>{!isLoginMode.value && (<div class="form-group"><label>Confirm Password</label><inputtype="password"v-model={formData.confirmPassword}disabled={isLoading.value}/>{errors.confirmPassword && (<div class="error">{errors.confirmPassword}</div>)}</div>)}<buttontype="submit"disabled={isLoading.value}class="submit-btn">{isLoading.value ? 'Processing...' : isLoginMode.value ? 'Login' : 'Register'}</button></form><div class="switch-mode">{isLoginMode.value ? 'Need an account? ' : 'Already have an account? '}<button type="button" onClick={switchMode} class="switch-btn">{isLoginMode.value ? 'Register' : 'Login'}</button></div></div>)}
})
使用截图
总结
主要功能亮点:
- AI增强验证
- 实时邮箱格式验证调用DeepSeek API
- 密码强度分析采用自然语言处理
- 动态生成带干扰线的验证码
- 安全防护
- 注册行为风险预检测
- 验证码点击刷新防暴力破解
- 敏感操作日志记录(可扩展)
- 交互优化
- 进度条可视化密码强度
- 悬浮AI助手实时答疑
- 智能错误提示(解析DeepSeek返回)
- 类型安全
- 严格定义AuthForm接口类型
- API响应类型校验
- 组件Props类型约束
该实现方案通过DeepSeek-R1的自然语言处理能力,在传统注册登录流程中增加了智能风险识别、实时交互引导等增强功能,同时保持TypeScript的类型安全优势。实际部署时建议将敏感操作放在后端代理执行,前端通过环境变量管理API端点。
@腾讯云 AI 代码助手