# 设计师分配数据存储文档 ## 概述 本文档详细说明了设计师团队分配功能中,项目负责人和设计师空间分配数据的存储位置和数据结构。 ## 数据存储位置 ### 1. ProjectTeam 表 **用途**: 存储每个设计师的团队分配信息 **字段**: `data` ```typescript { spaces: string[], // 分配的空间名称列表 isCrossTeam: boolean, // 是否为跨组合作 isProjectLeader: boolean, // 是否为项目负责人 ⭐ assignedAt: string // 分配时间 (ISO格式) } ``` ### 2. Project 表 - data 字段 **用途**: 存储项目级别的空间分配统计 **字段**: `data.spaceAssignmentStats` ```typescript { assignmentDate: string, // 分配日期 projectLeader: string | null, // 项目负责人姓名 ⭐ spaceStats: { // 空间统计 [spaceId: string]: { spaceName: string, // 空间名称 assignedDesigners: string[], // 分配的设计师列表 projectLeader?: string, // 该空间的项目负责人 ⭐ totalArea?: number // 空间面积 } }, totalDesigners: number, // 总设计师数量 crossTeamCollaborators: string[] // 跨组合作者列表 } ``` ### 3. Project 表 - date 字段 ⭐ (主要统计字段) **用途**: 按用户要求,详细的设计师和空间分配统计数据 **字段**: `date.designerAssignmentStats` ```typescript { assignmentDate: string, // 分配日期 projectLeader: { // 项目负责人详细信息 ⭐ id: string | null, name: string | null, assignedSpaces: Array<{ // 负责人分配的空间 ⭐ id: string, name: string, area: number }> }, teamMembers: Array<{ // 团队成员详细信息 id: string, name: string, isProjectLeader: boolean, // 是否为项目负责人标记 ⭐ assignedSpaces: Array<{ // 成员分配的空间 id: string, name: string, area: number }> }>, crossTeamCollaborators: Array<{ // 跨组合作者详细信息 id: string, name: string, assignedSpaces: Array<{ // 合作者分配的空间 id: string, name: string, area: number }> }>, totalSpaceArea: number, // 总空间面积 totalSpaces: number // 总空间数量 } ``` ## 项目负责人标识 ### 标识规则 - **项目负责人**: 第一个被选择的设计师自动成为项目负责人 - **标识符号**: ⭐ 星号标记 - **存储标记**: `isProjectLeader: true` ### 负责人数据位置 1. **ProjectTeam.data.isProjectLeader**: `boolean` - 团队记录中的负责人标记 2. **Project.date.designerAssignmentStats.projectLeader**: `object` - 负责人详细信息和空间分配 3. **Project.date.designerAssignmentStats.teamMembers[].isProjectLeader**: `boolean` - 团队成员中的负责人标记 ## 空间分配数据位置 ### 设计师空间分配 1. **ProjectTeam.data.spaces**: `string[]` - 设计师分配的空间名称列表 2. **Project.date.designerAssignmentStats.teamMembers[].assignedSpaces**: 详细的空间信息(包含ID、名称、面积) 3. **Project.date.designerAssignmentStats.crossTeamCollaborators[].assignedSpaces**: 跨组合作者的空间分配 ### 项目负责人空间分配 ⭐ **主要位置**: `Project.date.designerAssignmentStats.projectLeader.assignedSpaces` ```typescript assignedSpaces: Array<{ id: string, // 空间ID name: string, // 空间名称 area: number // 空间面积 }> ``` ## 数据查询示例 ### 查询项目负责人 ```typescript // 从Project表查询 const project = await projectQuery.first(); const leaderInfo = project.get('date')?.designerAssignmentStats?.projectLeader; // 负责人姓名 const leaderName = leaderInfo?.name; // 负责人分配的空间 const leaderSpaces = leaderInfo?.assignedSpaces || []; ``` ### 查询设计师空间分配 ```typescript // 从Project表查询所有团队成员的空间分配 const teamMembers = project.get('date')?.designerAssignmentStats?.teamMembers || []; teamMembers.forEach(member => { console.log(`${member.name}${member.isProjectLeader ? ' ⭐负责人' : ''}`); console.log('分配空间:', member.assignedSpaces.map(s => s.name).join(', ')); }); ``` ### 查询空间统计 ```typescript // 从Project表查询空间统计 const stats = project.get('date')?.designerAssignmentStats; console.log('总空间数量:', stats?.totalSpaces); console.log('总空间面积:', stats?.totalSpaceArea); console.log('项目负责人:', stats?.projectLeader?.name); ``` ## 注意事项 1. **主要数据源**: `Project.date.designerAssignmentStats` 是最完整的统计数据源 2. **负责人标识**: 通过 `isProjectLeader: true` 和 ⭐ 星号进行标识 3. **数据同步**: 分配时会同时更新 ProjectTeam 表和 Project 表的相关字段 4. **空间信息**: 包含空间ID、名称和面积的完整信息 5. **时间戳**: 所有分配都记录了分配时间用于追踪 ## 更新日期 2024年11月13日 ## 版本 v1.0 - 初始版本,包含项目负责人标记和空间数据统计功能