# CRM线索分配和删除功能 - 测试指引

## ✅ 开发完成状态

### 后端开发（hzhub-system）- 已完成

**新增文件**：
- 无新文件（修改现有文件）

**修改文件**：
- SysUserController.java - 添加 `/system/user/portal/select` API（员工门户用户选择器）

**总计**：1个文件修改

---

### 前端开发（hzhub-portal-employee）- 已完成

**新增文件**：
- API文件：2个（`src/api/user/index.ts`, `src/api/user/types.ts`）

**修改文件**：
- 页面文件：1个（`src/pages/crm/index.vue`）
  - 添加分配和删除按钮（操作列从220px扩展到280px）
  - 添加分配Dialog和用户选择器
  - 添加删除确认逻辑
  - 添加用户列表加载、分配提交、删除处理方法

**总计**：2个新API文件 + 1个页面文件修改

---

## 🚀 测试步骤

### 前提条件

1. 确保数据库SQL已执行（crm_dealer表和数据字典）
2. 确保所有服务正常运行
3. 已完成线索转化功能测试

---

### 测试1：用户选择器功能

**测试步骤**：

1. 登录员工门户：http://localhost:5137
2. 导航到"销售CRM" → "线索管理"Tab
3. 点击某个线索的"分配"按钮
4. 查看分配Dialog弹出
5. 查看用户选择下拉框

**预期结果**：
- 分配Dialog正常弹出
- 用户选择下拉框显示用户列表
- 每个用户选项显示：昵称（用户名）- 部门名称
- 下拉框支持搜索过滤（输入关键词后实时搜索）

---

### 测试2：线索分配功能

**测试步骤**：

1. 在分配Dialog中选择一个用户作为负责人
2. 点击"确认分配"按钮

**预期结果**：
- 显示"分配成功"提示
- Dialog自动关闭
- 线索列表刷新，负责人列显示新分配的用户头像
- 线索状态变为"跟进中"（如果之前是"新线索"）

**后端验证**：

```sql
SELECT lead_id, company_name, owner_user_id, lead_status
FROM crm_lead
WHERE lead_id = {线索ID};
```

**预期结果**：
- `owner_user_id` = 新分配的用户ID
- `lead_status` = 'following'（如果之前是'new'）

---

### 测试3：已转化线索的分配按钮隐藏

**测试步骤**：

1. 查找已转化的线索（线索状态为"已转化"）
2. 查看操作列按钮

**预期结果**：
- "分配"按钮不显示（已转化线索不能分配）
- "转经销商"按钮不显示（已转化线索不能重复转化）
- 只显示"详情"、"跟进"、"删除"按钮

---

### 测试4：线索删除功能

**测试步骤**：

1. 创建一个测试线索（用于删除测试）
2. 点击该线索的"删除"按钮
3. 查看删除确认对话框

**预期结果**：
- 弹出确认对话框，显示："确定要删除线索"XXX"吗？删除后无法恢复。"
- 有"确定"和"取消"按钮

4. 点击"确定"按钮

**预期结果**：
- 显示"删除成功"提示
- 线索从列表消失（逻辑删除）

**后端验证**：

```sql
SELECT lead_id, company_name, del_flag
FROM crm_lead
WHERE lead_id = {删除的线索ID};
```

**预期结果**：
- `del_flag` = 1（逻辑删除标记）

---

### 测试5：删除取消操作

**测试步骤**：

1. 点击某个线索的"删除"按钮
2. 在确认对话框中点击"取消"

**预期结果**：
- 对话框关闭
- 线索列表不刷新
- 线索数据未删除

---

## 📊 完整功能测试清单

| 测试项 | 状态 | 备注 |
|---|---|---|
| 用户选择器加载 | ⏳ | |
| 用户搜索过滤 | ⏳ | |
| 分配Dialog显示 | ⏳ | |
| 正常分配流程 | ⏳ | |
| 已转化线索分配按钮隐藏 | ⏳ | |
| 删除确认对话框 | ⏳ | |
| 正常删除流程 | ⏳ | |
| 删除取消操作 | ⏳ | |

---

## 🔧 后端接口验证

### 用户选择器API

**接口**：`GET /system/user/portal/select`

**请求参数**：
- keyword（可选）：搜索关键词

**请求示例**：

```bash
GET http://localhost:8080/system/user/portal/select?keyword=admin
Headers:
  Authorization: Bearer {token}
  ClientID: employee-portal
```

**成功响应**：

```json
{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "userId": 1,
      "userName": "admin",
      "nickName": "管理员",
      "deptName": "研发部门",
      "phonenumber": "15888888888",
      "status": "0"
    }
  ]
}
```

---

### 线索分配API

**接口**：`PUT /crm/lead/assign`

**请求参数**：

```json
{
  "leadId": 1,
  "ownerUserId": 12345
}
```

**请求示例**：

```bash
PUT http://localhost:8080/crm/lead/assign
Headers:
  Authorization: Bearer {token}
  ClientID: employee-portal
Body:
{
  "leadId": 1,
  "ownerUserId": 12345
}
```

**成功响应**：

```json
{
  "code": 200,
  "msg": "操作成功"
}
```

---

### 线索删除API

**接口**：`DELETE /crm/lead/{leadId}`

**请求示例**：

```bash
DELETE http://localhost:8080/crm/lead/1
Headers:
  Authorization: Bearer {token}
  ClientID: employee-portal
```

**成功响应**：

```json
{
  "code": 200,
  "msg": "操作成功"
}
```

---

## 🐛 常见问题排查

### 问题1：用户选择器加载失败

**排查步骤**：
1. 检查hzhub-system服务是否启动
2. 检查Gateway路由配置（`/system/**`路由）
3. 查看浏览器Console错误日志
4. 查看后端日志：
   ```bash
   tail -f /data/hzhub/hzhub-system/logs/hzhub-system.log
   ```

---

### 问题2：分配成功但负责人未更新

**排查步骤**：
1. 查询线索数据确认字段更新：
   ```sql
   SELECT lead_id, owner_user_id, lead_status FROM crm_lead WHERE lead_id = {线索ID};
   ```
2. 检查前端是否调用了`loadLeads()`刷新列表
3. 检查列表数据中的`ownerUserName`字段是否正确翻译

---

### 问题3：删除后线索仍显示在列表

**排查步骤**：
1. 查询线索的`del_flag`字段：
   ```sql
   SELECT lead_id, del_flag FROM crm_lead WHERE lead_id = {线索ID};
   ```
2. 检查前端列表查询是否正确过滤了`del_flag=1`的记录
3. 检查后端Mapper查询条件是否包含`del_flag`过滤

---

### 问题4：已转化线索仍显示分配按钮

**排查步骤**：
1. 检查前端条件渲染：
   ```vue
   <el-button v-if="row.leadStatus !== 'converted'" ...>
   ```
2. 检查线索列表数据中`leadStatus`字段的值
3. 使用浏览器开发者工具检查元素是否被渲染

---

## ✅ 开发总结

### 实现的功能

1. **用户选择器**：
   - 员工门户专用用户选择API（无需Sa-Token权限注解）
   - 支持关键词搜索过滤
   - 返回简化用户信息（ID、用户名、昵称、部门）
   - 只返回状态正常的用户

2. **线索分配**：
   - 分配按钮和Dialog UI
   - 用户选择下拉框（支持搜索）
   - 分配成功后更新负责人和状态
   - 已转化线索不显示分配按钮

3. **线索删除**：
   - 删除按钮和确认对话框
   - 逻辑删除（设置del_flag=1）
   - 删除成功后列表刷新
   - 用户可取消删除操作

### 技术要点

- **Gateway权限控制**：员工门户API不需要Sa-Token权限注解，权限由Gateway统一控制
- **用户选择器优化**：使用分页查询pageSize=1000获取所有用户，避免性能问题
- **前端交互优化**：使用ElMessageBox.confirm提供删除确认，防止误操作
- **状态联动**：分配线索时自动将状态更新为"跟进中"

---

## 🎯 下一步开发计划

根据"方案A：实用优先"，后续开发顺序：

**Week 2-3**：AI功能
1. AI意向分析 - 调用hzhub-ai服务分析线索意向
2. AI跟进摘要 - 使用LangChain4j生成跟进摘要
3. AI风险分析 - 基于线索数据生成风险评估

**Week 4+**：企业微信集成
1. 移动端H5页面
2. 企业微信侧边栏
3. 企业微信消息推送

---

**当前任务完成，请开始测试！**