设计师分配数据存储文档.md 5.1 KB

设计师分配数据存储文档

概述

本文档详细说明了设计师团队分配功能中,项目负责人和设计师空间分配数据的存储位置和数据结构。

数据存储位置

1. ProjectTeam 表

用途: 存储每个设计师的团队分配信息 字段: data

{
  spaces: string[],              // 分配的空间名称列表
  isCrossTeam: boolean,          // 是否为跨组合作
  isProjectLeader: boolean,      // 是否为项目负责人 ⭐
  assignedAt: string            // 分配时间 (ISO格式)
}

2. Project 表 - data 字段

用途: 存储项目级别的空间分配统计 字段: data.spaceAssignmentStats

{
  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

{
  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

assignedSpaces: Array<{
  id: string,      // 空间ID
  name: string,    // 空间名称
  area: number     // 空间面积
}>

数据查询示例

查询项目负责人

// 从Project表查询
const project = await projectQuery.first();
const leaderInfo = project.get('date')?.designerAssignmentStats?.projectLeader;

// 负责人姓名
const leaderName = leaderInfo?.name;

// 负责人分配的空间
const leaderSpaces = leaderInfo?.assignedSpaces || [];

查询设计师空间分配

// 从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(', '));
});

查询空间统计

// 从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 - 初始版本,包含项目负责人标记和空间数据统计功能