This commit is contained in:
2025-12-11 11:30:18 +08:00
parent a339acd5b0
commit 0e689b5f8d
21 changed files with 1311 additions and 95 deletions
+77
View File
@@ -0,0 +1,77 @@
import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import { sendMsg } from '@/lib/qqbot';
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const { name, phone, email, description } = body;
// 验证必填字段
if (!name || !phone || !email || !description) {
return NextResponse.json(
{ error: '所有字段都是必填的' },
{ status: 400 }
);
}
// 验证邮箱格式
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
return NextResponse.json(
{ error: '邮箱格式不正确' },
{ status: 400 }
);
}
// 验证手机号格式(中国手机号)
const phoneRegex = /^1[3-9]\d{9}$/;
if (!phoneRegex.test(phone)) {
return NextResponse.json(
{ error: '手机号格式不正确' },
{ status: 400 }
);
}
// 保存到数据库
const message = await prisma.message.create({
data: {
name,
phone,
email,
description,
},
});
// 发送 QQ 消息通知管理员
const qqBotUrl = process.env.QQ_BOT_URL;
const qqBotTargetId = process.env.QQ_BOT_TARGET_ID;
if (qqBotUrl && qqBotTargetId) {
const notificationMsg = `【新留言通知】\n姓名:${name}\n电话:${phone}\n邮箱:${email}\n需求描述:${description}\n时间:${new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })}`;
try {
await sendMsg(notificationMsg, qqBotTargetId, qqBotUrl);
} catch (qqError) {
console.error('QQ消息发送失败:', qqError);
// QQ消息发送失败不影响留言保存
}
}
return NextResponse.json(
{
success: true,
message: '留言提交成功,我们会尽快与您联系!',
data: { id: message.id }
},
{ status: 201 }
);
} catch (error) {
console.error('留言提交失败:', error);
return NextResponse.json(
{ error: '服务器错误,请稍后再试' },
{ status: 500 }
);
}
}