# pm **Repository Path**: mysoft-free/pm ## Basic Information - **Project Name**: pm - **Description**: 项目管理相关 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-17 - **Last Updated**: 2026-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PMS - Project Management System 项目管理系统,采用前后端分离架构。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端框架 | Spring Boot 2.7.18 + Java 8 | | ORM | MyBatis-Plus 3.5.5 | | 安全 | Spring Security + JWT (jjwt 0.12.3) | | 实时通信 | WebSocket | | 前端框架 | Vue 3.4 + Vue Router 4 + Pinia 2.1 | | UI组件 | Element Plus 2.5 | | 拖拽组件 | vuedraggable 4.1 | | 构建工具 | Vite 5.0 + Maven | ## 项目结构 ``` pms/ ├── pms-admin/ # 后端项目 │ └── src/main/java/com/pms/ │ ├── controller/ # REST控制器 (8个) │ ├── service/ # 业务逻辑层 (7个) │ ├── mapper/ # 数据访问层 (8个) │ ├── entity/ # 实体类 (8个) │ ├── config/ # 配置类 (6个) │ ├── common/ # 公共类 │ └── websocket/ # WebSocket处理 │ └── pms-web/ # 前端项目 └── src/ ├── views/ # 页面组件 (8个) ├── api/ # API封装 ├── stores/ # Pinia状态管理 ├── router/ # 路由配置 └── utils/ # 工具函数 ``` ## 核心功能 ### 1. 项目管理 - 项目列表、创建、编辑、删除 - 项目状态管理 (ACTIVE/ARCHIVED) - 项目负责人指定 ### 2. 任务管理 - 看板视图(待办/进行中/已完成) - 拖拽切换状态 (vuedraggable) - 任务优先级 (LOW/MEDIUM/HIGH) - 任务指派和报告人 ### 3. 实时消息通知 - WebSocket实时推送 - 任务状态变更自动通知 - 消息中心(已读/未读管理) - 右上角通知弹窗 ### 4. 用户与权限 - 用户管理 (CRUD) - 部门管理(树形结构) - 角色管理 - 菜单管理 - 用户角色分配 ### 5. 认证与安全 - JWT Token认证 - BCrypt密码加密 - 接口权限控制 ## 数据库设计 | 表名 | 说明 | 前缀 | |------|------|------| | pms_project | 项目表 | 业务表 | | pms_task | 任务表 | 业务表 | | sys_user | 用户表 | 系统表 | | sys_message | 消息表 | 系统表 | | sys_dept | 部门表 | 系统表 | | sys_role | 角色表 | 系统表 | | sys_menu | 菜单表 | 系统表 | | sys_user_role | 用户角色关联表 | 系统表 | **共同字段**: - `id`: BIGINT, 自增主键 - `create_time`, `update_time`: DATETIME - `deleted`: TINYINT (逻辑删除) ## API设计 ### 认证模块 ``` POST /api/auth/login # 登录 POST /api/auth/register # 注册 ``` ### 项目模块 ``` GET /api/projects # 项目列表 GET /api/projects/{id} # 项目详情 POST /api/projects # 创建项目 PUT /api/projects/{id} # 更新项目 DELETE /api/projects/{id} # 删除项目 ``` ### 任务模块 ``` GET /api/tasks # 任务列表 GET /api/tasks/project/{id} # 项目任务 GET /api/tasks/{id} # 任务详情 POST /api/tasks # 创建任务 PUT /api/tasks/{id} # 更新任务 PUT /api/tasks/{id}/status # 更新状态(触发通知) DELETE /api/tasks/{id} # 删除任务 ``` ### 消息模块 ``` GET /api/messages # 消息列表 GET /api/messages/unread-count # 未读数量 PUT /api/messages/{id}/read # 标记已读 PUT /api/messages/read-all # 全部已读 DELETE /api/messages/{id} # 删除消息 ``` ### 用户模块 ``` GET /api/users # 用户列表 GET /api/users/{id} # 用户详情 POST /api/users # 创建用户 PUT /api/users/{id} # 更新用户 DELETE /api/users/{id} # 删除用户 ``` ### 部门模块 ``` GET /api/depts # 部门列表 GET /api/depts/tree # 部门树 GET /api/depts/{id} # 部门详情 POST /api/depts # 创建部门 PUT /api/depts/{id} # 更新部门 DELETE /api/depts/{id} # 删除部门 ``` ### 角色模块 ``` GET /api/roles # 角色列表 GET /api/roles/{id} # 角色详情 POST /api/roles # 创建角色 PUT /api/roles/{id} # 更新角色 DELETE /api/roles/{id} # 删除角色 GET /api/roles/user/{userId} # 用户角色 POST /api/roles/assign # 分配角色 ``` ### WebSocket ``` ws://localhost:8080/ws/{userId} # WebSocket连接 ``` ## 配置 ### application.yml ```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/pms username: root password: 123456789 jwt: secret: pms-secret-key-2024-project-management-system expiration: 86400000 # 24小时 ``` ### Vite配置 ```javascript server: { port: 5173, proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } ``` ## 运行 ### 后端 ```bash cd pms-admin # 开发模式 mvn spring-boot:run # 构建 mvn clean package -DskipTests java -jar target/pms-admin-1.0.0.jar # 测试 mvn test ``` ### 前端 ```bash cd pms-web # 安装依赖 npm install # 开发模式 (port 5173) npm run dev # 生产构建 npm run build # 预览 npm run preview ``` **访问地址**: - 前端: http://localhost:5173 - 后端API: http://localhost:8080/api ## 端口 | Service | Port | |---------|------| | Backend API | 8080 | | Frontend Dev | 5173 | | MySQL | 3306 | | WebSocket | 8080 | ## 代码规模 - 后端: ~1544 行 Java - 前端: ~1474 行 Vue/JS ## 技术亮点 1. 看板拖拽: 使用vuedraggable实现任务状态拖拽切换 2. 实时通知: WebSocket推送任务状态变更通知 3. 统一响应: Result封装所有API响应 4. 逻辑删除: 所有实体使用@TableLogic软删除 5. 自动填充: MyBatis-Plus FieldFill自动填充时间字段 6. 路由守卫: Vue Router beforeEach实现登录拦截 7. 状态管理: Pinia管理用户状态 8. API文档: Knife4j/Swagger生成API文档 9. 环境配置: 多环境配置支持(dev/prod) 10. 日志管理: Logback日志配置 ## 改进完成 ✅ 数据库初始化脚本 (schema.sql) ✅ 单元测试 (ProjectServiceTest, TaskServiceTest, Controller测试) ✅ 公共组件 (AppHeader, AppAside, AppTable, AppDialog, SearchBar) ✅ Swagger/Knife4j API文档 ✅ 环境变量管理 (application-dev.yml, application-prod.yml, .env) ✅ Logback日志配置 ## 访问地址 - 前端: http://localhost:5173 - 后端API: http://localhost:8080/api - Swagger文档: http://localhost:8080/doc.html