# 查看全部客户权限 - 前端联调方案 ## 涉及页面 | 页面 | 路由路径 | 说明 | |------|----------|------| | 客户管理列表 | `/crm/customer` | 客户列表页,新增"全部"Tab | --- ## API ### 已有接口:客户分页查询(无需新增接口) | 方法 | 路径 | 说明 | |------|------|------| | GET | `/crm/customer/page` | 客户分页查询 | **已有请求参数(`CrmCustomerPageReqVO`):** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | sceneType | Integer | 否 | 场景类型:1-我负责的 / 2-我参与的 / 3-下属负责的 / **4-全部(新增)** | | name | String | 否 | 客户名称(模糊) | | mobile | String | 否 | 手机 | | industryId | Integer | 否 | 所属行业 | | level | Integer | 否 | 客户等级 | | source | Integer | 否 | 客户来源 | | pool | Boolean | 否 | 是否为公海数据 | | followUpStatus | Boolean | 否 | 跟进状态 | **响应无变化**,`CrmCustomerRespVO` 已包含: - `ownerUserName` — 销售人员名称 - `ownerUserDeptName` — 销售人员部门名称 --- ## 业务规则说明 ### 场景类型扩展 | sceneType 值 | 场景名称 | 数据范围 | 权限要求 | |--------------|----------|----------|----------| | 1 | 我负责的 | `owner_user_id = 当前用户` | `crm:customer:query` | | 2 | 我参与的 | 团队成员(非负责人) | `crm:customer:query` | | 3 | 下属负责的 | 下属为负责人 | `crm:customer:query` | | **4(新增)** | **全部** | **所有客户(无过滤)** | **`crm:customer:view-all` 或 `crm_admin` 角色** | ### 权限降级规则 当用户以 `sceneType=4` 请求数据时: - 用户拥有 `crm:customer:view-all` 权限 **或** `crm_admin` 角色 → 返回全部客户 - 用户**没有**该权限 → 自动降级为"我负责的"(`sceneType=1`),仅返回自己的客户 ### 权限标识 | 权限标识 | 说明 | 所属菜单 | |----------|------|----------| | `crm:customer:view-all` | 查看全部客户 | CRM 客户公海 | 该权限已添加到数据库 `system_menu` 表,位于「客户公海」菜单下(id=602583),角色分配后即可生效。 --- ## 前端修改点 ### 1. 客户列表页 Tab 切换 在现有的场景类型 Tab(我负责的/我参与的/下属负责的)后面,新增"全部"Tab(`sceneType=4`)。 **展示规则**: - 仅当用户拥有 `crm:customer:view-all` 权限或 `crm_admin` 角色时,才显示"全部"Tab - 判断方式:调用权限判断接口或从用户权限列表中检查 ### 2. 权限判断 前端需要判断当前用户是否有 `crm:customer:view-all` 权限: - 方式一:通过 Vue 指令 `v-hasPermi="['crm:customer:view-all']"` 控制 Tab 显隐 - 方式二:通过获取用户权限列表判断 --- ## 注意事项 - "全部"Tab 仅控制数据可见范围,不改变其他功能权限(如编辑、删除仍需对应权限) - 导出 Excel 时同样支持 `sceneType=4`,拥有权限的用户可导出全部客户数据 - 权限数据已插入数据库(`system_menu` id=602583),无需前端额外处理权限注册 - 该权限与 `crm_admin` 角色的区别:`crm_admin` 拥有所有 CRM 管理权限,而 `view-all` 仅控制客户列表的查看范围