mars f20988b90c feat: 完成所有页面的演示模式实现
- 更新 DashboardLayout 组件,统一使用演示模式布局
- 实现仪表盘页面的完整演示数据和功能
- 完成用户管理页面的演示模式,包含搜索、过滤、分页等功能
- 实现通话记录页面的演示数据和录音播放功能
- 完成翻译员管理页面的演示模式
- 实现订单管理页面的完整功能
- 完成发票管理页面的演示数据
- 更新文档管理页面
- 添加 utils.ts 工具函数库
- 完善 API 路由和数据库结构
- 修复各种 TypeScript 类型错误
- 统一界面风格和用户体验
2025-06-30 19:42:43 +08:00

117 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { NextApiRequest, NextApiResponse } from 'next'
import { auth, db } from '../../../lib/supabase'
import { handleApiError, validateEmail, validatePassword } from '../../../lib/api-utils'
interface RegisterRequest {
email: string
password: string
name: string
phone?: string
user_type: 'individual' | 'enterprise'
enterprise_id?: string
}
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
if (req.method !== 'POST') {
return res.status(405).json({ success: false, error: '方法不允许' })
}
try {
const { email, password, name, phone, user_type, enterprise_id }: RegisterRequest = req.body
// 验证必填字段
if (!email || !password || !name || !user_type) {
return res.status(400).json({
success: false,
error: '缺少必填字段',
details: '邮箱、密码、姓名和用户类型为必填项'
})
}
// 验证邮箱格式
if (!validateEmail(email)) {
return res.status(400).json({
success: false,
error: '邮箱格式不正确'
})
}
// 验证密码强度
const passwordValidation = validatePassword(password)
if (!passwordValidation.valid) {
return res.status(400).json({
success: false,
error: passwordValidation.message
})
}
// 检查邮箱是否已注册
try {
const existingUsers = await db.select('users', '*')
const existingUser = existingUsers.find((user: any) => user.email === email)
if (existingUser) {
return res.status(400).json({
success: false,
error: '该邮箱已被注册'
})
}
} catch (error) {
console.error('Check existing user error:', error)
// 继续注册流程让Supabase处理重复邮箱的情况
}
// 注册用户
const authData = await auth.signUp(email, password, {
name,
phone,
user_type,
enterprise_id
})
if (!authData?.user) {
return res.status(400).json({
success: false,
error: '注册失败,请稍后重试'
})
}
// 创建用户记录
try {
const userData = {
id: authData.user.id,
email,
name,
phone: phone || null,
user_type,
enterprise_id: enterprise_id || null,
status: 'active',
created_at: new Date().toISOString(),
updated_at: new Date().toISOString()
}
const userRecord = await db.insert('users', userData)
return res.status(201).json({
success: true,
message: '注册成功',
data: {
user: userRecord,
needEmailVerification: !authData.session // 如果没有session说明需要邮箱验证
}
})
} catch (dbError) {
console.error('Create user record error:', dbError)
return res.status(500).json({
success: false,
error: '用户注册成功,但创建用户记录失败',
details: process.env.NODE_ENV === 'development' ? (dbError as Error).message : undefined
})
}
} catch (error) {
return handleApiError(res, error, 'Register')
}
}