包含: - furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画) - autocad-plugin:AutoCAD 家具导出插件源码 - 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.8 KiB
8.8 KiB
Phase 4: 组织架构实现 - 完成文档
📋 概述
Phase 4 已完成,实现了完整的部门和小组管理功能,以及用户的部门/小组分配功能。
完成时间:2025-12-12
状态:✅ 已完成
✅ 已完成功能
1. 部门管理 API ✅
文件:src/app/api/departments/
- ✅
GET /api/departments- 获取部门列表(树形结构) - ✅
POST /api/departments- 创建部门 - ✅
PUT /api/departments/[id]- 更新部门 - ✅
DELETE /api/departments/[id]- 删除部门
功能特点:
- 支持部门层级结构(父子关系)
- 自动构建完整路径(如:设计部 > 3D组 > 建模小组)
- 部门负责人分配
- 同级部门名称唯一性验证
- 删除前检查(子部门、成员、小组)
2. 小组管理 API ✅
文件:src/app/api/teams/
- ✅
GET /api/teams- 获取小组列表 - ✅
POST /api/teams- 创建小组 - ✅
PUT /api/teams/[id]- 更新小组 - ✅
DELETE /api/teams/[id]- 删除小组
功能特点:
- 小组归属部门
- 组长分配
- 同部门下小组名称唯一性验证
- 删除前检查(成员)
3. 成员分配功能 ✅
文件:src/components/users/CreateUserModal.tsx, EditUserModal.tsx
- ✅ 创建用户时分配部门和小组
- ✅ 编辑用户时修改部门和小组
- ✅ 部门和小组级联选择(选择部门后自动加载该部门的小组)
- ✅ 树形部门列表展示(带缩进)
📁 文件结构
furniture-3d-system/
├── src/
│ ├── app/
│ │ └── api/
│ │ ├── departments/
│ │ │ ├── route.ts # 部门列表和创建 API
│ │ │ └── [id]/
│ │ │ └── route.ts # 单个部门操作 API
│ │ ├── teams/
│ │ │ ├── route.ts # 小组列表和创建 API
│ │ │ └── [id]/
│ │ │ └── route.ts # 单个小组操作 API
│ │ └── users/
│ │ ├── route.ts # 更新:支持部门/小组分配
│ │ └── [id]/
│ │ └── route.ts # 更新:支持部门/小组修改
│ └── components/
│ └── users/
│ ├── CreateUserModal.tsx # 更新:添加部门/小组选择
│ └── EditUserModal.tsx # 更新:添加部门/小组选择
└── docs/
└── PHASE4_COMPLETE.md # 本文档
🔐 权限控制
部门管理权限
- 创建部门:超级管理员、管理员
- 编辑部门:超级管理员、管理员
- 删除部门:超级管理员、管理员
- 查看部门:所有已登录用户
小组管理权限
- 创建小组:超级管理员、管理员、部门管理员
- 编辑小组:超级管理员、管理员、部门管理员
- 删除小组:超级管理员、管理员、部门管理员
- 查看小组:所有已登录用户
📊 数据模型
部门模型(Department)
{
id: string
name: string // 部门名称
fullPath: string // 完整路径(如:设计部 > 3D组)
parentId: string | null // 父部门ID
managerId: string | null // 部门负责人ID
orderIndex: number // 排序索引
createdAt: DateTime
updatedAt: DateTime
}
小组模型(Team)
{
id: string
name: string // 小组名称
description: string | null // 小组描述
departmentId: string // 所属部门ID
leaderId: string | null // 组长ID
orderIndex: number // 排序索引
createdAt: DateTime
updatedAt: DateTime
}
📝 API 使用示例
获取部门列表(树形结构)
const response = await fetch('/api/departments', {
headers: {
Authorization: `Bearer ${token}`,
},
});
const data = await response.json();
// {
// departments: [
// {
// id: "dept1",
// name: "设计部",
// fullPath: "设计部",
// children: [
// {
// id: "dept2",
// name: "3D组",
// fullPath: "设计部 > 3D组",
// children: []
// }
// ]
// }
// ]
// }
创建部门
const response = await fetch('/api/departments', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
name: '建模小组',
parentId: 'dept2', // 父部门ID(可选)
managerId: 'user1', // 部门负责人ID(可选)
}),
});
获取小组列表
// 获取所有小组
const response = await fetch('/api/teams', {
headers: {
Authorization: `Bearer ${token}`,
},
});
// 获取指定部门的小组
const response = await fetch('/api/teams?departmentId=dept1', {
headers: {
Authorization: `Bearer ${token}`,
},
});
创建小组
const response = await fetch('/api/teams', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
name: '建模小组',
description: '负责3D建模工作',
departmentId: 'dept1',
leaderId: 'user1', // 组长ID(可选)
}),
});
分配用户到部门和小组
// 创建用户时分配
const response = await fetch('/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
email: 'user@example.com',
name: '张三',
password: 'Password@123',
role: 'DESIGNER',
departmentId: 'dept1', // 部门ID
teamId: 'team1', // 小组ID
}),
});
// 更新用户的部门和小组
const response = await fetch(`/api/users/${userId}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
departmentId: 'dept2',
teamId: 'team2',
}),
});
🎨 UI 功能
用户创建/编辑界面增强
-
部门选择
- 下拉列表展示所有部门
- 树形结构显示(带缩进)
- 支持"未分配部门"选项
-
小组选择
- 根据选择的部门动态加载小组列表
- 只显示所选部门下的小组
- 支持"未分配小组"选项
-
级联选择
- 选择部门后自动加载该部门的小组
- 切换部门时自动清空小组选择
✅ 验收标准
- 部门 CRUD API 正常工作
- 小组 CRUD API 正常工作
- 部门树形结构正确构建
- 部门完整路径自动生成
- 同级部门名称唯一性验证
- 同部门下小组名称唯一性验证
- 删除前检查(子部门、成员、小组)
- 用户创建时可分配部门和小组
- 用户编辑时可修改部门和小组
- 部门和小组级联选择正常工作
- 类型检查通过(组织架构相关代码)
- 权限控制正确
📊 代码统计
- 新增文件:4 个
- 修改文件:4 个
- 新增代码行数:约 800 行
- API 端点:8 个
🔄 数据关系
Department (部门)
├── parentId → Department (父部门)
├── managerId → User (部门负责人)
├── children → Department[] (子部门)
├── members → User[] (部门成员)
└── teams → Team[] (部门下的小组)
Team (小组)
├── departmentId → Department (所属部门)
├── leaderId → User (组长)
└── members → User[] (小组成员)
User (用户)
├── departmentId → Department (所属部门)
├── teamId → Team (所属小组)
├── managedDepartmentId → Department (管理的部门)
└── managedTeamId → Team (管理的小组)
🚀 下一步
Phase 4 已完成,可以继续后续阶段:
Phase 5: 产品归属实现
- 产品协作者管理
- SKU 负责人分配
- 权限过滤
Phase 6: 离职交接实现
- 离职检测
- SKU 交接界面
- 交接历史记录
Phase 7: 问题反馈实现
- 反馈提交界面
- 反馈处理界面
- 自动分配逻辑
📞 注意事项
- 部门层级:支持无限层级,但建议不超过 3-4 层
- 删除限制:有子部门、成员或小组的部门无法删除
- 名称唯一性:同级部门名称必须唯一,同部门下小组名称必须唯一
- 完整路径:部门完整路径自动生成和更新
- 级联选择:选择部门后自动加载该部门的小组列表
Phase 4 完成! ✅
组织架构管理功能已全部实现,用户可以被正确分配到部门和小组。