# 公海池模块迁移方案 — 03 前端页面功能规格 > **UI 规范**:`docs/crm-migration/ref-ui-standards.md`、`docs/crm-migration/ref-frontend-diff.md` --- ## 页面 1:公海池客户列表(`views/crm/customer/pool/index.vue`) ### 页面功能 展示所有 `status='pool'` 的客户,支持搜索筛选、领取、分配、查看详情。顶部显示统计信息(总数/今日新增/本周新增/重点客户)。 ### 搜索条件 | # | 字段 | 组件类型 | 对应 API 参数 | 说明 | |---|------|---------|--------------|------| | 1 | 客户名称 | el-input | customerName | 模糊搜索 | | 2 | 客户编号 | el-input | customerNo | 模糊搜索 | | 3 | 客户级别 | el-select | level | 字典 crm_customer_level | | 4 | (快速搜索) | el-input(工具栏内) | keyword | 客户名称模糊搜索 | ### 统计信息栏 | 统计项 | 字段 | 说明 | |--------|------|------| | 公海池客户总数 | poolStatistics.totalCount | status=pool 的客户数 | | 今日新增 | poolStatistics.todayCount | 今日进入公海的客户数 | | 本周新增 | poolStatistics.weekCount | 本周进入公海的客户数 | | 重点客户 | poolStatistics.keyCount | level=key 的公海客户数 | ### 列表字段(完整,含列设置功能) | # | 列标题 | 字段 | min-width | 格式 | 列设置可见 | |---|--------|------|-----------|------|-----------| | 1 | 客户编号 | customerNo | 150 | text | 是 | | 2 | 客户名称 | customerName | 180 | link(点开详情) | 是 | | 3 | 客户简称 | shortName | 150 | text | 是 | | 4 | 客户类型 | customerType | 150 | el-tag | 是 | | 5 | 手机号 | mobile | 120 | text | 是 | | 6 | 固定电话 | telephone | 120 | text | 是 | | 7 | 邮箱 | email | 160 | text | 是 | | 8 | 客户网站 | website | 180 | text | 是 | | 9 | 客户级别 | level | 100 | el-tag | 是 | | 10 | 客户来源 | source | 100 | el-tag | 是 | | 11 | 所属行业 | industry | 120 | el-tag | 是 | | 12 | 所在园区 | parkArea | 120 | el-tag | 是 | | 13 | 企业规模 | scale | 100 | el-tag | 是 | | 14 | 省 | province | 100 | text | 是 | | 15 | 市 | city | 100 | text | 是 | | 16 | 区 | district | 100 | text | 是 | | 17 | 详细地址 | address | 200 | text | 是 | | 18 | 客户状态 | status | 100 | el-tag | 是 | | 19 | 成交状态 | dealStatus | 100 | el-tag | 是 | | 20 | 原负责人 | ownerUserName | 100 | text | 是 | | 21 | 跟进次数 | followCount | 100 | text | 是 | | 22 | 最后跟进时间 | lastTime | 160 | date | 是 | | 23 | 下次联系时间 | nextTime | 160 | date | 是 | | 24 | 成交时间 | dealTime | 160 | date | 是 | | 25 | 成交金额 | dealAmount | 120 | ¥xxx | 是 | | 26 | 联系人数量 | contactCount | 100 | text | 是 | | 27 | 商机数量 | opportunityCount | 100 | text | 是 | | 28 | 合同数量 | contractCount | 100 | text | 是 | | 29 | 进入公海时间 | intoPoolTime | 160 | date | 是 | | 30 | 领取时间 | claimTime | 160 | date | 是 | | 31 | 保护到期时间 | protectTime | 160 | date | 是 | | 32 | 创建部门 | createDeptName | 120 | text | 是 | | 33 | 创建人 | createByName | 100 | text | 是 | | 34 | 创建时间 | createTime | 160 | date | 是 | | 35 | 更新人 | updateByName | 100 | text | 是 | | 36 | 更新时间 | updateTime | 160 | date | 是 | | 37 | 备注 | remark | 200 | text | 是 | ### 操作按钮 | # | 按钮 | 位置 | 权限标识 | 触发动作 | |---|------|------|---------|---------| | 1 | 领取客户 | 工具栏 | claim | 需选中≥1行,打开领取弹窗 | | 2 | 分配客户 | 工具栏 | assign | 需选中≥1行,打开分配弹窗 | | 3 | 列设置 | 工具栏 | 无 | 打开列设置弹窗 | ### 弹窗清单 | 弹窗 | 组件文件 | 触发方式 | 说明 | |------|---------|---------|------| | 领取客户 | ClaimDialog.vue | 点击「领取客户」按钮 | 批量领取 | | 分配客户 | AssignDialog.vue | 点击「分配客户」按钮 | 批量分配给指定负责人 | | 客户详情 | CustomerDetailDialog.vue | 点击客户名称链接 | 查看客户详情 | | 列设置 | el-dialog(内联) | 点击「列设置」按钮 | 控制表格列显示/隐藏 | --- ## 弹窗 1:领取客户(`ClaimDialog.vue`) ### 表单字段 | # | 字段标签 | API 字段 | 组件类型 | 必填 | 默认值 | |---|---------|---------|---------|------|--------| | 1 | 领取数量 | — | el-tag(info) | — | 显示 N 个客户 | | 2 | 领取说明 | remark | el-input(textarea) | 否 | — | ### 交互流程 1. 选中客户 → 点击「领取客户」→ 打开弹窗 2. 调用 `fetchClaimCustomer({ ids, remark })` 3. 成功 → ElMessage.success + 关闭弹窗 + 刷新列表 --- ## 弹窗 2:分配客户(`AssignDialog.vue`) ### 表单字段 | # | 字段标签 | API 字段 | 组件类型 | 必填 | 校验 | 说明 | |---|---------|---------|---------|------|------|------| | 1 | 分配数量 | — | el-tag(info) | — | — | 显示 N 个客户 | | 2 | 分配给 | ownerUserId | el-select(filterable) | 是 | required | 加载系统用户列表 | | 3 | 分配说明 | remark | el-input(textarea) | 否 | — | — | ### 交互流程 1. 选中客户 → 点击「分配客户」→ 打开弹窗 + 加载用户列表 2. 选择负责人 → 调用 `fetchAssignPoolCustomers({ ids, ownerUserId, remark })` 3. 成功 → ElMessage.success + 关闭弹窗 + 刷新列表 --- ## 页面 2:公海池规则管理(`views/crm/customer/pool/RuleIndex.vue`) > 原 CRM 无独立前端页面(规则管理入口被隐藏),shanxia2.0 **新增**此页面以满足管理需求。 ### 搜索条件 | # | 字段 | 组件类型 | 对应 API 参数 | |---|------|---------|--------------| | 1 | 规则名称 | el-input | poolName | | 2 | 规则类型 | el-select | ruleType | | 3 | 状态 | el-select | status | ### 列表字段 | # | 列标题 | 字段 | min-width | 格式 | |---|--------|------|-----------|------| | 1 | 规则名称 | poolName | 150 | text | | 2 | 规则类型 | ruleType | 120 | el-tag(no_follow/no_deal) | | 3 | 超时天数 | timeoutDays | 100 | text | | 4 | 保护期天数 | protectDays | 100 | text | | 5 | 状态 | status | 100 | el-tag(enable/disable) | | 6 | 排序号 | sort | 80 | text | | 7 | 创建时间 | createTime | 160 | date | | 8 | 操作 | — | 200 | 编辑/删除/启停 | ### 操作按钮 | # | 按钮 | 位置 | 触发动作 | |---|------|------|---------| | 1 | 新增规则 | 工具栏 | 打开新增弹窗 | | 2 | 编辑 | 操作列 | 打开编辑弹窗 | | 3 | 删除 | 操作列 | 确认后删除(启用状态禁止删除) | | 4 | 启用/禁用 | 操作列 | 切换状态 | --- ## 前端功能完整性对照表 | # | 原 CRM 功能 | shanxia2.0 对应 | 状态 | |---|------------|----------------|------| | 1 | 公海池客户列表(含统计信息) | pool/index.vue | 待重写 | | 2 | 客户名称/编号/级别搜索 | 筛选区 | 待重写 | | 3 | 快速搜索框 | 工具栏内 el-input | 待新增 | | 4 | 统计信息栏(总数/今日/本周/重点) | el-statistic ×4 | 待新增 | | 5 | 领取客户 | ClaimDialog.vue | 待重写 | | 6 | 分配客户 | AssignDialog.vue | 待新增 | | 7 | 客户详情 | CustomerDetailDialog.vue | 待确认复用 | | 8 | 列设置(显示/隐藏列) | el-dialog + checkbox | 待新增 | | 9 | 规则管理(隐藏功能) | RuleIndex.vue | 待新增 | | 10 | dict-tag 字典展示 | el-tag + dictStore | 待适配 |