You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

19 lines
2.1 KiB

4 days ago
# 03 — 联系人子表
**What to build:** 客户下的联系人能增删改查、全局搜索,且联系人权限继承客户(无独立 ACL)。同客户内电话不重复做表单级校验;跨客户电话命中只软提示、不禁止(D26 口径)。
**Blocked by:** 02 — 客户主表 CRUD + 查重校验
**Status:** ready-for-agent
**Spec 依据(详见 issues/06-answer.md)**:联系人独立表 `customer_contact` + 商机侧硬依赖契约。D26 翻案后口径:**不建电话唯一索引**,跨客户电话=可配置软提示。
- [ ] `customer_contact` 实体(票 06 §A 全字段):customer_id(NOT NULL,无孤立联系人) / name / jobTitleName / jobTitleId / jobTitleCategory / jobTitleLevel / phone / isKeyContact / isInternal / giftRemark / source + BaseEntity;`deleted` 逻辑删除
- [ ] 索引:`idx_contact_customer`(customer_id, deleted);`idx_contact_name`(name)。**不建** `uk_contact_phone`(D26 已撤销)
- [ ] 权限模型(票 06):**无独立 `@DataScope`**;服务层按所属客户校验——对客户有读权限→对其全部联系人有读权限;无客户读写权限时隐藏联系人增删改入口、服务端仍校验
- [ ] CRUD 契约:`POST /api/customer/contact` / `PUT /api/customer/contact/{id}` / `DELETE /api/customer/contact/{id}` / `GET /api/customer/{id}/contacts`(按客户查列表)
- [ ] 全局搜索:`GET /api/customer/contact/search`(带出所属客户名,商机「商机关键联系人」数据源)
- [ ] **电话查重(D26 最终口径)**:同一客户内同表格电话相同两行→禁止提交并定位重复行(表单级硬校验);无电话→按"客户+姓名+职务"提示疑似重复(只提示);跨客户电话命中→**软提示疑似重复、不阻断**,受 crm-rule「客户查重设置→联系电话」开关控制(默认开、可关)
- [ ] **商机侧硬依赖契约**:`POST /api/customer/quick-create`(最小必填集快速创建);`GET /api/customer/search`(名称/联系人/电话/类型四维模糊+分页)——供票 11 对接
- [ ] 手机号格式校验;联系人不设独立 ACL 的服务层测试覆盖