# 项目管理模块部署说明

## 一、概述

本文档说明如何部署 lyzsys-module-demo 项目管理模块。

### 模块信息
- **模块名称**: lyzsys-module-demo
- **功能**: 项目管理（增删改查导出）
- **数据库表**: demo_project
- **菜单结构**:
  - 一级菜单：项目管理
  - 二级菜单：项目列表

### 命名规范遵循
✅ 所有字段名遵循驼峰命名规范，第一个单词不能只有一个字母
- `projectName`（而非 `pName`）
- `projectCode`（而非 `pCode`）
- `establishDate`（而非 `eDate`）

## 二、部署步骤

### 1. 数据库部署

按顺序执行以下 SQL 脚本：

```bash
# 1. 创建项目管理表
mysql> source e:/workspace/lyzsys/lyzsys_backend/sql/mysql/demo_project.sql

# 2. 创建菜单配置
mysql> source e:/workspace/lyzsys/lyzsys_backend/sql/mysql/demo_menu.sql
```

**说明**：
- `demo_project.sql` - 创建项目管理表，包含示例数据
- `demo_menu.sql` - 创建菜单配置，包含一级菜单、二级菜单和按钮权限

### 2. 后端部署

后端代码已自动集成到项目中，无需额外配置。

**后端文件清单**：

```
lyzsys_backend/lyzsys-module-demo/
├── pom.xml                                                    # Maven 配置
└── src/main/java/cn/iocoder/lyzsys/module/demo/
    ├── controller/admin/project/
    │   ├── ProjectController.java                            # 控制器
    │   └── vo/
    │       ├── ProjectPageReqVO.java                         # 分页查询请求
    │       ├── ProjectRespVO.java                            # 响应 VO
    │       └── ProjectSaveReqVO.java                         # 保存请求 VO
    ├── service/project/
    │   ├── ProjectService.java                               # 服务接口
    │   └── ProjectServiceImpl.java                           # 服务实现
    ├── dal/
    │   ├── dataobject/project/
    │   │   └── ProjectDO.java                                # 数据对象
    │   └── mysql/project/
    │       └── ProjectMapper.java                            # Mapper 接口
    └── enums/
        └── ErrorCodeConstants.java                           # 错误码常量
```

**验证后端部署**：
1. Maven 重新导入项目依赖
2. 确认 `lyzsys-server/pom.xml` 包含 `lyzsys-module-demo` 依赖
3. 启动后端项目，查看日志确认模块加载成功

### 3. 前端部署

前端代码已生成，无需额外配置。

**前端文件清单**：

```
lyzsys-ui-admin/src/
├── api/demo/project/
│   └── index.ts                                              # API 接口定义
└── views/demo/project/
    ├── index.vue                                             # 项目列表页面
    └── ProjectForm.vue                                       # 项目表单组件
```

**验证前端部署**：
1. 重新启动前端项目（如果正在运行）
2. 使用管理员账号登录系统
3. 在左侧菜单栏查看"项目管理"菜单

## 三、功能验证

### 1. 菜单验证

登录后台管理系统，应该看到以下菜单结构：

```
项目管理（一级菜单）
  └── 项目列表（二级菜单）
系统管理（已调整到最后）
基础设施（已调整到最后）
```

### 2. 权限验证

项目列表页面应包含以下操作按钮：
- ✅ 搜索
- ✅ 重置
- ✅ 新增
- ✅ 导出
- ✅ 批量删除
- ✅ 修改（每行）
- ✅ 删除（每行）

### 3. 功能验证

测试以下功能：

#### 查询功能
- [ ] 按项目名称模糊查询
- [ ] 按项目编号模糊查询
- [ ] 按立项时间范围查询
- [ ] 分页查询

#### 新增功能
- [ ] 点击"新增"按钮打开表单
- [ ] 必填字段验证（项目名称、项目编号）
- [ ] 项目编号唯一性校验
- [ ] 保存成功后刷新列表

#### 修改功能
- [ ] 点击"修改"按钮打开表单
- [ ] 回显原有数据
- [ ] 修改后保存成功

#### 删除功能
- [ ] 单个删除确认提示
- [ ] 删除成功后刷新列表
- [ ] 批量删除功能

#### 导出功能
- [ ] 点击"导出"按钮
- [ ] 下载 Excel 文件
- [ ] 验证导出数据正确

## 四、接口文档

### API 端点

**Base URL**: `/demo/project`

| 接口 | 方法 | 说明 | 权限 |
|-----|------|------|------|
| `/create` | POST | 创建项目 | demo:project:create |
| `/update` | PUT | 修改项目 | demo:project:update |
| `/delete` | DELETE | 删除项目 | demo:project:delete |
| `/delete-list` | DELETE | 批量删除 | demo:project:delete |
| `/page` | GET | 分页查询 | demo:project:query |
| `/get` | GET | 查询详情 | demo:project:query |
| `/export-excel` | GET | 导出Excel | demo:project:export |

### 请求示例

**创建项目**：
```json
POST /demo/project/create
{
  "projectName": "示例项目",
  "projectCode": "PROJ-2024-001",
  "establishDate": "2024-01-01 00:00:00"
}
```

**查询列表**：
```
GET /demo/project/page?pageNo=1&pageSize=10&projectName=示例
```

## 五、常见问题

### 1. 菜单不显示

**原因**：可能是权限问题
**解决**：
1. 确认已执行 `demo_menu.sql`
2. 检查当前登录用户的角色权限
3. 在"系统管理 > 菜单管理"中确认菜单已创建
4. 在"系统管理 > 角色管理"中给当前角色分配菜单权限

### 2. 后端接口 404

**原因**：模块未启动或路由配置错误
**解决**：
1. 检查 `lyzsys-server/pom.xml` 是否包含 demo 模块依赖
2. 重新编译启动项目
3. 查看启动日志确认模块加载

### 3. 前端页面报错

**原因**：API 接口路径不匹配
**解决**：
1. 检查 `src/api/demo/project/index.ts` 中的接口路径
2. 确认后端 Controller 的 `@RequestMapping` 路径
3. 查看浏览器控制台错误信息

### 4. 项目编号重复错误

**原因**：唯一性校验生效
**解决**：这是正常的业务校验，请使用不同的项目编号

## 六、扩展开发

### 添加新字段

1. **修改数据库表**：
```sql
ALTER TABLE demo_project ADD COLUMN new_field VARCHAR(100) COMMENT '新字段';
```

2. **修改后端代码**：
- 在 `ProjectDO.java` 中添加字段
- 在 `ProjectRespVO.java` 和 `ProjectSaveReqVO.java` 中添加字段
- 根据需要修改 `ProjectMapper.java` 查询条件

3. **修改前端代码**：
- 在 `api/demo/project/index.ts` 中添加字段定义
- 在 `ProjectForm.vue` 中添加表单项
- 在 `index.vue` 中添加表格列

### 添加新功能

参考现有的增删改查实现，遵循以下开发流程：
1. 在 Service 层添加业务方法
2. 在 Controller 层添加接口
3. 在前端 API 文件中添加接口调用
4. 在前端页面中实现 UI 交互

## 七、技术栈

### 后端
- Spring Boot 2.7.18
- MyBatis Plus 3.5.15
- MySQL 8.0+

### 前端
- Vue 3.5.12
- Element Plus 2.11.1
- TypeScript 5.3.3
- Vite 5.1.4

## 八、联系方式

如有问题，请联系开发团队或查阅项目文档。

---

**生成时间**: 2024年
**版本**: v1.0
