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

125 lines
3.3 KiB
TypeScript

import { NextApiRequest, NextApiResponse } from 'next'
import { getDemoData } from '../../../lib/demo-data'
import {
authenticateUser,
getUserProfile,
handleApiError,
generateOrderNumber,
calculateServiceCost,
User
} from '../../../lib/api-utils'
import { db } from '../../../lib/supabase'
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
// 认证用户
const user = await authenticateUser(req, res)
if (!user) return // 错误已在authenticateUser中处理
if (req.method === 'GET') {
// 获取订单列表
try {
// 在演示模式下返回演示数据
if (process.env.NODE_ENV === 'development' && !process.env.SUPABASE_URL) {
const demoOrders = await getDemoData.orders()
return res.status(200).json({
success: true,
data: {
orders: demoOrders,
total: demoOrders.length
}
})
}
// 从数据库获取订单
const orders = await db.select('orders', '*')
// 根据用户类型过滤订单
const currentUser = await getUserProfile(user.id)
let filteredOrders = orders
if (currentUser && currentUser.user_type === 'individual') {
// 个人用户只能看到自己的订单
filteredOrders = orders.filter((order: any) => order.user_id === user.id)
}
// 企业用户和管理员可以看到所有订单
return res.status(200).json({
success: true,
data: {
orders: filteredOrders,
total: filteredOrders.length
}
})
} catch (error) {
return handleApiError(res, error, 'Get orders')
}
} else if (req.method === 'POST') {
// 创建新订单
const {
service_type,
service_name,
source_language,
target_language,
duration,
priority = 'normal',
scheduled_time,
notes
} = req.body
// 验证必填字段
if (!service_type || !source_language || !target_language) {
return res.status(400).json({
success: false,
error: '缺少必填字段',
details: '服务类型、源语言和目标语言为必填项'
})
}
try {
// 获取用户信息
const currentUser = await getUserProfile(user.id)
const orderData = {
order_number: generateOrderNumber(),
user_id: user.id,
user_name: currentUser?.name || user.email,
user_email: user.email,
service_type,
service_name: service_name || service_type,
source_language,
target_language,
duration: duration || null,
status: 'pending',
priority,
cost: calculateServiceCost(service_type, duration),
currency: 'CNY',
scheduled_time: scheduled_time || null,
notes: notes || null,
created_at: new Date().toISOString(),
updated_at: new Date().toISOString()
}
const newOrder = await db.insert('orders', orderData)
return res.status(201).json({
success: true,
message: '订单创建成功',
data: {
order: newOrder
}
})
} catch (error) {
return handleApiError(res, error, 'Create order')
}
} else {
return res.status(405).json({
success: false,
error: '方法不允许'
})
}
}