# 市场维护模块 ## 业务目标 建立医院、科室和医生的分层客户档案,支撑后续授权分配、拜访签到、会议邀约、覆盖进度和风险提示。 ## 已交付功能 1. 医院档案:名称、地区、等级、地址、月进货量、覆盖状态和负责人。 2. 科室档案:床位数、月住院人数、研究方向、推广产品、产品/竞品认识、分组、推广策略、目标量、实际量和问题记录。 3. 医生档案:姓名、联系方式、职称、等级、照片地址、职称证地址和专家简介。 4. 医院、科室、医生的列表查询、新增和更新 API,以及对应 Vue 页面。 ## API | 方法 | 地址 | 说明 | | --- | --- | --- | | GET | `/api/v1/market/hospitals?keyword=` | 查询医院 | | POST / PUT | `/api/v1/market/hospitals` | 新增 / 更新医院 | | GET | `/api/v1/market/departments?hospitalId=` | 查询科室 | | POST / PUT | `/api/v1/market/departments` | 新增 / 更新科室 | | GET | `/api/v1/market/doctors?departmentId=` | 查询医生 | | POST / PUT | `/api/v1/market/doctors` | 新增 / 更新医生 | 更新接口在对应地址后附加 `/{id}`。所有接口沿用统一响应格式。 ## 数据库 执行 `sairui-server/src/main/resources/db/schema/V2__market_maintenance.sql`。该脚本创建 `market_hospital`、`market_department` 和 `market_doctor`,并通过外键保持层级关系。 ## 联调步骤 1. 执行 V2 数据库脚本,重启后端。 2. 打开前端 `http://127.0.0.1:5173/market`。 3. 先录入医院,再录入该医院科室,最后录入科室医生。 4. 点击任意医院、科室或医生卡片,核对弹框中的完整详情数据;需要修改时,在弹框中点击“编辑档案”。 ## 当前边界 照片和职称证仅保存文件 URL;真实钉钉文件上传、医院与科室的授权分配、数据权限及拜访关联将在后续模块实现。 ## 科室档案新增与编辑 科室表单的新增态与编辑态已分离处理。仅点击已有科室卡片后保存才会调用更新接口;保存成功或点击“清空”后都会回到新增态。因此,连续新增不同科室会在 `market_department` 中产生独立记录,不会覆盖上一条数据。 ## 档案详情查看 点击医院、科室或医生的列表卡片会打开只读详情弹框,不会回填或改变当前录入表单。详情弹框内提供“编辑档案”按钮,点击后才会进入对应档案的编辑状态。 ## 录入与全部数据视图 市场维护页将“档案录入”与“全部数据”分开展示。录入视图仅展示当前类型的表单;全部数据视图以表格展示医院、科室或医生档案,可选择字段并按关键词筛选,点击“详情”查看完整档案,必要时再进入编辑。 ## 全部数据分页 全部数据表格默认每页显示 20 条,可切换为每页 10、20 或 50 条,并支持上一页、下一页及页码跳转。修改查询字段、关键词、档案分类或每页条数后,列表会自动回到第一页。 ## 档案模块分区 市场维护页将“客户档案”类型选择(医院、科室、医生)置于独立模块卡片中;“数据处理”区域单独提供档案录入与全部数据切换。左侧全局导航采用模块区分色的小图标,提高当前模块识别度。 ## 档案删除规则 - 医院、科室和医生档案均支持从“全部数据”列表或详情页发起删除。 - 删除操作需要二次确认,删除成功后列表自动刷新。 - 为保留业务历史,已关联下级档案、拜访记录或学术活动的医院和科室不能删除。 - 已关联拜访记录的医生不能删除。 - 系统会提示具体关联数量;需先处理关联数据后才能删除档案。