- 创建统一的下载错误处理模块 (lib/download-errors.ts) - 实现13种错误类型分类和中文错误消息 - 后端统一使用 createDownloadError 创建标准化错误响应 - 前端统一使用 parseDownloadError 解析错误并显示 - 修复正式系统数据库Schema,添加产品全案相关字段和表 - 执行数据库迁移:添加 task_no, task_status, task_fetched_at 字段 - 创建 material_assets, api_keys, api_call_logs 表
90 lines
2.8 KiB
TypeScript
90 lines
2.8 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
||
import { getServerSession } from 'next-auth';
|
||
import { authOptions } from '@/lib/auth';
|
||
import { prisma } from '@/lib/prisma';
|
||
import { isSystemAdmin } from '@/lib/department-permission';
|
||
|
||
// GET /api/admin/users - 获取用户列表
|
||
export async function GET() {
|
||
try {
|
||
const session = await getServerSession(authOptions);
|
||
if (!session || !session.user || !isSystemAdmin((session.user as any).role)) {
|
||
return NextResponse.json({ error: '无权限' }, { status: 403 });
|
||
}
|
||
|
||
const users = await prisma.user.findMany({
|
||
select: {
|
||
id: true,
|
||
email: true,
|
||
username: true,
|
||
realName: true, // 真实姓名(用于搜索)
|
||
role: true,
|
||
isActive: true, // 保留,向后兼容
|
||
status: true, // 新增:用户状态(阶段一)
|
||
canDownload: true,
|
||
department: true, // 保留,向后兼容
|
||
departmentId: true, // 新增:部门ID(阶段二)
|
||
managedDepartment: true, // 管理员负责的部门
|
||
createdAt: true,
|
||
lastLoginAt: true, // 新增:最后登录时间(阶段一)
|
||
loginCount: true, // 新增:登录次数(阶段一)
|
||
archivedAt: true, // 新增:归档时间(阶段一)
|
||
departmentRef: { // 新增:部门关联信息(阶段二)
|
||
select: {
|
||
id: true,
|
||
name: true,
|
||
}
|
||
},
|
||
_count: {
|
||
select: {
|
||
materials: {
|
||
where: {
|
||
deletedAt: null,
|
||
} as any,
|
||
},
|
||
},
|
||
},
|
||
},
|
||
orderBy: {
|
||
createdAt: 'desc',
|
||
},
|
||
});
|
||
|
||
return NextResponse.json(users);
|
||
} catch (error) {
|
||
console.error('Error fetching users:', error);
|
||
return NextResponse.json({ error: '获取用户列表失败' }, { status: 500 });
|
||
}
|
||
}
|
||
|
||
// DELETE /api/admin/users - 删除用户
|
||
export async function DELETE(request: NextRequest) {
|
||
try {
|
||
const session = await getServerSession(authOptions);
|
||
if (!session || !session.user || !isSystemAdmin((session.user as any).role)) {
|
||
return NextResponse.json({ error: '无权限' }, { status: 403 });
|
||
}
|
||
|
||
const { searchParams } = new URL(request.url);
|
||
const id = searchParams.get('id');
|
||
|
||
if (!id) {
|
||
return NextResponse.json({ error: '缺少用户ID' }, { status: 400 });
|
||
}
|
||
|
||
// 不能删除自己
|
||
if (id === (session.user as any).id) {
|
||
return NextResponse.json({ error: '不能删除自己' }, { status: 400 });
|
||
}
|
||
|
||
await prisma.user.delete({
|
||
where: { id },
|
||
});
|
||
|
||
return NextResponse.json({ message: '删除成功' });
|
||
} catch (error) {
|
||
console.error('Error deleting user:', error);
|
||
return NextResponse.json({ error: '删除失败' }, { status: 500 });
|
||
}
|
||
}
|