97 lines
3.0 KiB
TypeScript
97 lines
3.0 KiB
TypeScript
import type {
|
||
LoginByAccountParams,
|
||
LoginBySmsParams,
|
||
LoginResult,
|
||
RegisterParams,
|
||
ResetPasswordParams,
|
||
User,
|
||
} from '@/types/business/user'
|
||
import { isPhone, isValidPassword } from '@/utils/validate'
|
||
|
||
// TODO(api): 待接口文档到位后,将以下 mock 替换为 request<T> 调用(页面 → store → api 数据流不变)
|
||
|
||
const SIX_DIGIT_CODE = /^\d{6}$/
|
||
|
||
/** 发送短信验证码 */
|
||
export function sendSmsCode(phone: string): Promise<void> {
|
||
if (!isPhone(phone)) return Promise.reject(new Error('手机号格式不正确'))
|
||
return Promise.resolve()
|
||
}
|
||
|
||
/** 账号密码登录(mock:demo 账号可登录,其余提示先注册) */
|
||
export function loginByAccount(params: LoginByAccountParams): Promise<LoginResult> {
|
||
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<LoginResult> {
|
||
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<void> {
|
||
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<void> {
|
||
const message = validateAuthForm(
|
||
params.phone,
|
||
params.code,
|
||
params.password,
|
||
params.confirmPassword,
|
||
params.agree,
|
||
)
|
||
if (message) return Promise.reject(new Error(message))
|
||
return Promise.resolve()
|
||
}
|