feat:登录注册完成

This commit is contained in:
李伊帆
2026-10-09 14:29:58 +08:00
parent da83a58948
commit ee3ecc00eb
106 changed files with 4937 additions and 59 deletions

34
src/utils/api-error.ts Normal file
View File

@@ -0,0 +1,34 @@
import type { ApiResponse } from '@/types/api'
export class ApiError extends Error {
code?: number
constructor(message: string, code?: number) {
super(message)
this.name = 'ApiError'
this.code = code
}
}
export function isApiSuccess(body: ApiResponse): boolean {
if (body.code === undefined) return true
return body.code === 200 || body.code === 0
}
export function unwrapApiData<T>(body: ApiResponse<T> & Record<string, unknown>): T {
if (body.data !== undefined && body.data !== null) {
return body.data as T
}
return body as T
}
export function getErrorMessage(err: unknown, fallback = '请求失败'): string {
if (err instanceof ApiError) return err.message
if (err instanceof Error && err.message) return err.message
if (err && typeof err === 'object' && 'data' in err) {
const data = (err as { data?: ApiResponse }).data
if (data?.msg) return data.msg
if (data?.message) return data.message
}
return fallback
}

View File

@@ -0,0 +1,66 @@
/** 设计稿静态图标(src/static) */
import logoCenter from '@/static/logo-center@2x.png'
import iconPhone from '@/static/icon-phone@2x.png'
import iconCode from '@/static/icon-code@2x.png'
import iconChecked from '@/static/icon-checked@2x.png'
import iconPassword from '@/static/路径.png'
import iconHomeSelector from '@/static/图标 4.png'
import iconHomeArrow from '@/static/组 9.png'
import iconNotify from '@/static/组 27.png'
import iconDeviceEmpty from '@/static/图标 8.png'
import iconDeviceNameEdit from '@/static/图标 9.png'
import iconBindComplete from '@/static/组 41@2x.png'
import iconBluetooth from '@/static/蓝牙-F.png'
import iconBindDiscover from '@/static/组 281@2x.png'
import iconBindPair from '@/static/组 286@2x.png'
import iconBindSecure from '@/static/组 291@2x.png'
import iconScanDevice from '@/static/组 600@2x.png'
import iconScanDeviceAction from '@/static/组 468@2x.png'
import iconScanDeviceActionDisabled from '@/static/组 476@2x.png'
import tabDevice from '@/static/tab-device-active.png'
import tabDeviceActive from '@/static/tab-device.png'
import tabMine from '@/static/tab-mine-active.png'
import tabMineActive from '@/static/tab-mine.png'
export const staticAssets = {
/** 组 15106@2x.png — 登录区中心大图标 */
logo: logoCenter,
/** 手机号@2x.png */
iconPhone,
/** 验证码@2x.png */
iconCode,
/** 选中@2x.png */
iconChecked,
/** 路径.png — 密码框 */
iconPassword,
/** 图标 4.png — 首页「我的家」 */
iconHomeSelector,
/** 组 9.png — 「我的家」下拉箭头 */
iconHomeArrow,
/** 组 27.png — 设备页右上角通知 */
iconNotify,
/** 图标 8.png — 设备空状态中心图标 */
iconDeviceEmpty,
/** 图标 9.png — 完成配置「设备名称」编辑 */
iconDeviceNameEdit,
/** 组 41@2x.png — 完成配置成功示意图 */
iconBindComplete,
/** 蓝牙-F.png — 添加设备页蓝牙示意图 */
iconBluetooth,
/** 组 281@2x.png — 添加设备「发现附近设备」 */
iconBindDiscover,
/** 组 286@2x.png — 添加设备「快速配对连接」 */
iconBindPair,
/** 组 291@2x.png — 添加设备「本地安全控制」 */
iconBindSecure,
/** 组 600@2x.png — 扫描设备页示意图 */
iconScanDevice,
/** 组 468@2x.png — 发现设备列表「可添加」箭头 */
iconScanDeviceAction,
/** 组 476@2x.png — 发现设备列表「不可添加」箭头 */
iconScanDeviceActionDisabled,
tabDevice,
tabDeviceActive,
tabMine,
tabMineActive,
} as const

11
src/utils/validate.ts Normal file
View File

@@ -0,0 +1,11 @@
export function isValidPhone(phone: string): boolean {
return /^1\d{10}$/.test(phone.trim())
}
export function isValidSmsCode(code: string): boolean {
return /^\d{4,6}$/.test(code.trim())
}
export function isValidPassword(password: string): boolean {
return password.length >= 6 && password.length <= 32
}