# 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 ``` 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. 企业微信消息推送 --- **当前任务完成,请开始测试!**