8.2 KiB
8.2 KiB
功能需求实现报告
📋 需求列表
根据用户提供的需求,以下是各项功能的实现状态:
✅ 1. 用户管理页面的树形结构根为最高权限账号
状态:已实现
实现内容:
- 修改
app/api/admin/users/route.ts,确保返回isSuperAdmin和managedDepartment字段 - 更新
app/admin/page.tsx中的getUserTreeData()函数,正确识别最高权限账号 - 用户管理页面以最高权限账号为根节点显示树形结构
- 如果没有最高权限账号,fallback到显示管理员列表
代码位置:
app/api/admin/users/route.ts(第18-39行)app/admin/page.tsx(第862-907行, 第1188-1396行)
✅ 2. 部门管理员账号显示合并到部门内置顶
状态:已实现
实现内容:
- 在
getUsersByDepartmentWithAdminPinned()函数中,确保部门管理员在部门用户列表的最前面 - 部门管理员显示特殊的"部门管理员"徽标
- 普通用户显示在部门管理员之后
代码位置:
app/admin/page.tsx(第877-889行, 第1282-1310行)
✅ 3. 系统第一个注册的账号自动设置为最高权限
状态:已实现
实现内容:
- 在
app/api/auth/register/route.ts中,检查用户总数 - 如果用户总数为0(第一个用户),自动设置
isSuperAdmin: true - 确保系统初始化时第一个注册的用户获得最高权限
代码位置:
app/api/auth/register/route.ts(第82-94行)
✅ 4. 激活功能开关只有最高权限账号可以操作
状态:已实现
实现内容:
- 在
app/admin/settings/page.tsx中,激活功能开关只有最高权限账号可以操作 - 非最高权限账号看到开关但无法操作(显示禁用状态和提示文字)
- 后端API (
app/api/system-settings/route.ts) 也进行了权限检查
代码位置:
app/admin/settings/page.tsx(第596-611行)app/api/system-settings/route.ts(第66-72行)
✅ 5. 邀请功能只有管理员及以上权限才能看到
状态:已实现
实现内容:
- 在
app/admin/page.tsx中,邀请管理标签页只对管理员显示 - 后端API (
app/api/invitations/route.ts) 也进行了权限检查,只有管理员及以上权限可以访问
代码位置:
app/admin/page.tsx(第1013-1026行)app/api/invitations/route.ts(第9-19行, 第44-54行)
⚠️ 6. 多账号登录功能(支持每个网页登录不同账号)
状态:待实现
技术挑战:
- NextAuth默认使用Cookie存储session,所有标签页共享同一个session
- 要实现多账号登录,需要修改NextAuth的session存储机制
实现方案(建议):
方案1:使用多窗口隔离(推荐)
- 每个浏览器窗口使用独立的session storage
- 通过
window.name或 URL参数区分不同的登录会话 - 优点:实现相对简单,不需要修改NextAuth核心
- 缺点:同一窗口内的标签页仍然共享session
方案2:自定义Session存储
- 修改NextAuth配置,使用自定义session存储(如localStorage + 数据库)
- 每个标签页使用不同的session key
- 优点:完全支持多账号登录
- 缺点:需要大量修改现有代码,可能影响现有功能
方案3:使用iframe隔离
- 每个标签页使用iframe加载应用
- iframe之间隔离,可以使用不同的session
- 优点:完全隔离,支持多账号
- 缺点:用户体验较差,可能影响性能
推荐实现:方案1(多窗口隔离)
实现步骤:
- 在登录时生成唯一的session key
- 将session key存储到URL参数或window.name
- 修改NextAuth配置,根据session key读取不同的session
- 每个窗口使用独立的session存储
优先级:中 预计工作量:2-3天
⚠️ 7. 断点续传功能保存文件上传进度
状态:部分实现(仅localStorage)
当前实现:
- 上传进度保存在
localStorage中 - 刷新页面后可以恢复表单数据,但文件需要重新选择
- 无法实现真正的断点续传(从上次中断的地方继续上传)
技术挑战:
- 真正的断点续传需要分块上传(chunked upload)
- 需要服务器支持分块上传和合并
- 需要数据库存储上传任务和进度
实现方案(建议):
方案1:服务器端进度保存(简化版)
- 创建上传任务记录(数据库表)
- 在上传开始时创建任务,上传过程中更新进度
- 刷新页面后可以从服务器获取进度
- 优点:即使刷新页面也能看到进度
- 缺点:仍然无法实现真正的断点续传(文件需要重新上传)
方案2:完整的分块上传和断点续传
- 实现分块上传(将大文件分成多个小块)
- 每个小块独立上传,支持失败重试
- 服务器端存储已上传的块,支持从中断处继续
- 所有块上传完成后,服务器端合并文件
- 优点:真正的断点续传,支持网络中断恢复
- 缺点:实现复杂,需要大量开发和测试
推荐实现:方案1(服务器端进度保存)
实现步骤:
-
创建
UploadTask数据库表model UploadTask { id String @id @default(uuid()) userId String fileName String fileSize BigInt progress Int @default(0) // 0-100 status String // pending/uploading/completed/failed metadata Json? // 存储表单数据 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } -
创建上传任务API
POST /api/upload/tasks- 创建上传任务PATCH /api/upload/tasks/:id- 更新上传进度GET /api/upload/tasks- 获取用户的上传任务列表
-
修改上传组件
- 上传开始时创建任务
- 上传过程中定期更新进度
- 上传完成后标记任务为完成
-
修改上传页面
- 页面加载时检查是否有未完成的上传任务
- 显示未完成的任务和进度
- 允许用户继续上传或取消任务
优先级:中 预计工作量:3-5天
📊 总结
已完成功能(5/7)
- ✅ 用户管理页面树形结构根为最高权限账号
- ✅ 部门管理员账号置顶显示
- ✅ 系统第一个注册账号自动设置为最高权限
- ✅ 激活功能开关权限控制
- ✅ 邀请功能权限控制
待实现功能(2/7)
- ⚠️ 多账号登录功能(需要修改NextAuth核心机制)
- ⚠️ 断点续传进度保存(需要实现分块上传)
建议
- 优先实现断点续传进度保存(方案1):这是用户更常用的功能,且实现相对简单
- 多账号登录功能:如果用户确实需要,建议使用方案1(多窗口隔离),实现相对简单且影响范围小
🔧 技术细节
数据库变更
- 无需新增数据库表(已完成的功能使用现有表结构)
- 待实现功能可能需要新增表(如
UploadTask表)
API变更
- ✅
GET /api/admin/users- 已更新,返回isSuperAdmin和managedDepartment - ⚠️ 待实现:上传任务相关API(如
/api/upload/tasks)
前端变更
- ✅
app/admin/page.tsx- 已更新用户管理页面显示逻辑 - ✅
app/admin/settings/page.tsx- 已更新激活功能开关权限控制 - ⚠️ 待实现:多账号登录相关组件
- ⚠️ 待实现:上传进度保存相关组件
📝 注意事项
- 最高权限账号:确保系统中至少有一个最高权限账号,否则某些功能可能无法正常使用
- 权限检查:所有权限相关的功能都进行了前后端双重检查,确保安全性
- 向后兼容:所有修改都保持了向后兼容,不会影响现有功能
- 测试建议:建议在测试环境中充分测试所有功能,特别是权限控制相关功能
🚀 下一步行动
- 立即部署已完成的修复:将已完成的5个功能部署到生产环境
- 用户反馈:收集用户对已实现功能的反馈,确认是否符合预期
- 实现断点续传进度保存:如果用户需要,实现方案1(服务器端进度保存)
- 评估多账号登录需求:确认用户是否真的需要多账号登录功能,如果不需要,可以暂缓实现