import type { LoginByAccountParams, LoginBySmsParams, LoginResult, RegisterParams, ResetPasswordParams, User, } from '@/types/business/user' import { isPhone, isValidPassword } from '@/utils/validate' // TODO(api): 待接口文档到位后,将以下 mock 替换为 request 调用(页面 → store → api 数据流不变) const SIX_DIGIT_CODE = /^\d{6}$/ /** 发送短信验证码 */ export function sendSmsCode(phone: string): Promise { if (!isPhone(phone)) return Promise.reject(new Error('手机号格式不正确')) return Promise.resolve() } /** 账号密码登录(mock:demo 账号可登录,其余提示先注册) */ export function loginByAccount(params: LoginByAccountParams): Promise { const { account, password } = params if (!account.trim() || !password) { return Promise.reject(new Error('请输入账号和密码')) } if (account === 'demo') { const user: User = { id: 'u1', nickname: '王永志', avatar: '', phone: '186****618', email: 'yongzh******4@163.com', passwordModifiedAt: '', } return Promise.resolve({ token: `mock-token-${Date.now()}`, user }) } return Promise.reject(new Error('登录失败,请先注册账号')) } /** 手机验证码登录(mock:验证码须为 6 位数字) */ export function loginBySms(params: LoginBySmsParams): Promise { const { phone, code } = params if (!isPhone(phone)) return Promise.reject(new Error('手机号格式不正确')) if (!SIX_DIGIT_CODE.test(code)) return Promise.reject(new Error('验证码格式不正确,应为6位数字')) const user: User = { id: 'u1', nickname: '王永志', avatar: '', phone: '186****618', email: 'yongzh******4@163.com', passwordModifiedAt: '', } return Promise.resolve({ token: `mock-token-${Date.now()}`, user }) } function validateAuthForm( phone: string, code: string, password: string, confirmPassword: string, agree: boolean, ): string | null { if (!isPhone(phone)) return '手机号格式不正确' if (!SIX_DIGIT_CODE.test(code)) return '验证码格式不正确,应为6位数字' if (!isValidPassword(password)) return '密码长度应为6-20位' if (password !== confirmPassword) return '两次输入的密码不一致' if (!agree) return '请先阅读并同意《用户协议》和《隐私政策》' return null } /** 注册 */ export function register(params: RegisterParams): Promise { const message = validateAuthForm( params.phone, params.code, params.password, params.confirmPassword, params.agree, ) if (message) return Promise.reject(new Error(message)) return Promise.resolve() } /** 重置密码 */ export function resetPassword(params: ResetPasswordParams): Promise { const message = validateAuthForm( params.phone, params.code, params.password, params.confirmPassword, params.agree, ) if (message) return Promise.reject(new Error(message)) return Promise.resolve() }