---
title: Project 模块
created: 2026-04-13
updated: 2026-04-14
type: entity
tags: [module, project, backend, frontend]
sources: [packages/backend/src/modules/project/, packages/frontend/src/modules/project/]
---

# Project 模块

项目管理模块，支持甘特图、日历、看板、列表四种视图，含完整的工时记录系统。

## 后端数据模型（5个表）

| 表名 | 用途 |
|------|------|
| `project_info` | 项目信息 |
| `project_phase` | 项目阶段 |
| `project_task` | 任务（支持父子关系、优先级、负责人、工时、进度） |
| `project_task_dependency` | 任务依赖关系 |
| `project_time_log` | 工时记录（userId/logDate/hours/description） |

### project_task 关键字段

`estimatedHours`(decimal 8,1) | `actualHours`(decimal 8,1) | `progress`(0-100) | `color`(自定义颜色) | `status` | `priority` | `category` | `assigneeName` | `startDate` | `endDate` | `parentId`

## 后端 Service 核心方法

| 方法 | 功能 |
|------|------|
| `tree(projectId)` | 任务树（按阶段分组，含子任务层级） |
| `kanban(projectId)` | 看板数据（按状态分组：todo/inProgress/done/closed） |
| `kanbanSort(items)` | 看板排序/状态变更 |
| `cascadeUpdateFields(id, fields)` | 级联更新子任务字段（status/priority/category/assigneeName/dates/estimatedHours） |
| `hasChildren(id)` | 检查是否有子任务 |

## 前端四视图

| 视图 | 组件 | 依赖库 |
|------|------|--------|
| 甘特图 | `views/components/gantt.vue` | dhtmlx-gantt 9.1.3 |
| 日历 | `views/components/calendar.vue` | FullCalendar 6.1.20 |
| 看板 | `views/components/kanban.vue` | vuedraggable |
| 列表 | `views/components/table.vue` | Element Plus Table |

## 关键组件

- `task-drawer.vue`：任务详情侧抽屉（含工时显示：预估+实际自动计算、进度滑块、工时记录表）
- `phase-manager.vue`：阶段管理弹窗
- `time-log-dialog.vue`：工时记录弹窗（日期、工时、描述，提交后自动更新 actualHours）

## 相关页面

- [[project-overview]] — 项目总览
- [[cool-admin-framework]] — 自动 CRUD
- [[database-entity-overview]] — 5 个业务表
