# 招聘信息新增弹窗工作经历维护实施记录

## 背景

招聘信息维护页面的编辑弹窗已支持维护社招候选人的历史工作经历，但新增弹窗隐藏了同一维护区域，且新增提交时未携带 `workExperienceList`，导致新增招聘记录时无法同步维护候选人工作经历。

## 修改内容

- 前端 `ruoyi-ui/src/views/ccdiStaffRecruitment/index.vue`
  - 将候选人历史工作经历维护区域从“仅编辑弹窗展示”调整为“社招新增和编辑弹窗均展示”。
  - 新增提交时保留 `workExperienceList`，不再删除工作经历数据。
  - 工作经历校验同步覆盖新增和编辑场景，仍仅对社招记录生效。

- 后端 `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiStaffRecruitmentAddDTO.java`
  - 新增 `workExperienceList` 入参，并使用 `@Valid` 复用现有工作经历字段校验。

- 后端 `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiStaffRecruitmentServiceImpl.java`
  - 新增招聘信息保存后，如为社招且提交了工作经历，按新增记录主键写入 `ccdi_staff_recruitment_work`。
  - 复用编辑场景的工作经历实体构造逻辑，保持字段、排序号和必填过滤规则一致。

## 影响范围

- 仅影响招聘信息维护页面的新增弹窗和新增接口。
- 编辑弹窗、详情展示、导入功能和校招新增逻辑不改变。

## 验证记录

- 后端相关模块编译通过：
  - `mvn -pl ccdi-info-collection -am test -DskipTests`
- 前端生产构建通过：
  - `cd ruoyi-ui && source ~/.nvm/nvm.sh && nvm use && node -v && npm run build:prod`
  - 使用 Node `v14.21.3`，构建仅保留既有资源体积 warning。
- 真实接口新增与编辑验证通过：
  - 新增社招招聘记录 `AUTO-WORK-202605070053`，新增详情回查 `workExperienceList` 为 1 条。
  - 编辑同一条招聘记录，工作经历由 1 条覆盖为 2 条，详情回查包含 `编辑后公司B`、`编辑新增公司C`。
- 主键关联数据库回查通过：
  - 使用 `bin/mysql_utf8_exec.sh output/sql/2026-05-07-staff-recruitment-work-pk-check.sql` 回查，主表自增主键 `id=6006` 下关联 2 条子表记录。
  - 回查 `work_links` 为 `6006:1:编辑后公司B | 6006:2:编辑新增公司C`，`orphan_work_count=0`。
- 真实页面验证通过：
  - 使用 `browser-use` 打开真实页面 `http://localhost:1025/maintain/staffRecruitment`。
  - 新增弹窗已展示“候选人历史工作经历”区域，点击“新增经历”后出现工作单位、入职时间等输入列。
  - 编辑同一条测试记录时，编辑弹窗按主键回显 2 条历史工作经历，列表页显示历史工作经历为 `2段`。
- 清理验证通过：
  - 测试结束后调用删除接口清理 `id=6006`，再次数据库回查 `orphan_work_count=0`，无测试工作经历孤儿数据残留。
