# 员工信息维护导入功能真实页面测试记录

## 测试范围

- 页面：`http://localhost:8080/maintain/baseStaff`
- 后端：`http://localhost:62318`
- 模块：员工信息维护导入
- 测试方式：`browser-use` 打开真实业务页面，确认导入入口、模板下载和页面列表/详情展示；使用真实模板生成测试工作簿后调用同一导入接口上传，轮询导入任务状态并查询失败记录。

## 测试文件

- 真实模板：`output/spreadsheet/base_staff_import_template_20260430.xlsx`
- 空模板：`output/spreadsheet/base_staff_import_empty_20260430.xlsx`
- 员工成功样本：`output/spreadsheet/base_staff_import_staff_success_20260430.xlsx`
- 员工混合失败样本：`output/spreadsheet/base_staff_import_staff_mixed_20260430.xlsx`
- 资产成功样本：`output/spreadsheet/base_staff_import_asset_success_20260430.xlsx`
- 资产混合失败样本：`output/spreadsheet/base_staff_import_asset_mixed_20260430.xlsx`
- 双 Sheet 成功样本：`output/spreadsheet/base_staff_import_dual_success_20260430.xlsx`

## 页面验证

1. 打开真实员工信息维护页面，确认页面标题、查询区、列表、单一“导入”按钮加载正常。
2. 打开“员工信息维护导入”弹窗，确认存在“下载模板”入口。
3. 点击“下载模板”，页面触发真实模板下载。
4. 弹窗提示确认：
   - 模板包含“员工信息”和“员工资产信息”两个 Sheet。
   - 两个 Sheet 可单独填写，也可同时填写。
   - 员工信息命中现有员工直接报错。
   - 资产信息仅支持员工本人资产。
5. 页面查询员工 `9843001`，确认成功导入员工 `Codex导入员工A` 可在真实列表展示。
6. 打开员工 `9843001` 详情，确认资产 `Codex资产住宅A` 展示在资产信息区。
7. 页面查询员工 `9843004`，确认双 Sheet 成功样本中的员工 `Codex导入员工D` 可在真实列表展示。

## 接口与异步任务验证

| 场景 | 文件 | 结果 |
| --- | --- | --- |
| 空模板 | `base_staff_import_empty_20260430.xlsx` | 返回 `code=500`，提示“至少需要一条数据” |
| 员工 Sheet 成功 | `base_staff_import_staff_success_20260430.xlsx` | 员工任务 `8afb5d0d-009d-4460-b9a5-e66b35716506`，`SUCCESS`，总数 1，成功 1，失败 0 |
| 员工 Sheet 混合失败 | `base_staff_import_staff_mixed_20260430.xlsx` | 员工任务 `c57fc240-c50f-42a7-8d77-1614c46789ec`，`PARTIAL_SUCCESS`，总数 7，成功 1，失败 6 |
| 资产 Sheet 成功 | `base_staff_import_asset_success_20260430.xlsx` | 资产任务 `8f266611-10ef-471f-8cc7-92b5b65cac45`，`SUCCESS`，总数 1，成功 1，失败 0 |
| 资产 Sheet 混合失败 | `base_staff_import_asset_mixed_20260430.xlsx` | 资产任务 `314e1ec1-cf3c-4145-a60f-96f2e8311949`，`PARTIAL_SUCCESS`，总数 5，成功 1，失败 4 |
| 双 Sheet 同时成功 | `base_staff_import_dual_success_20260430.xlsx` | 员工任务 `cacb797b-f308-4766-8470-d32061f0a964` 成功 1；资产任务 `08d02f9d-266e-49a1-a52a-fff29426e033` 成功 1 |

## 失败记录核对

员工混合失败记录包含 `sheetName=员工信息`、准确 `rowNum` 和失败原因：

- 第 2 行：员工 ID 已存在。
- 第 3 行：姓名不能为空。
- 第 4 行：所属部门 ID 不存在或已停用/删除。
- 第 5 行：身份证号长度必须为 18 位。
- 第 6 行：年收入不能为负数。
- 第 8 行：员工 ID 在导入文件中重复。

资产混合失败记录包含 `sheetName=员工资产信息`、准确 `rowNum` 和失败原因：

- 第 2 行：资产记录已存在。
- 第 3 行：员工资产导入仅支持员工本人证件号。
- 第 4 行：资产名称不能为空。
- 第 6 行：资产记录在导入文件中重复。

## 数据回查

- 员工 `9843001`：列表接口返回 1 条，姓名 `Codex导入员工A`，部门 `研发部门`，状态 `在职`。
- 员工 `9843003`：列表接口返回 1 条，姓名 `Codex导入员工C`，验证混合失败文件中的成功行已入库。
- 员工 `9843004`：列表接口返回 1 条，姓名 `Codex导入员工D`，验证双 Sheet 员工任务成功入库。
- 员工 `9843001` 详情接口返回 3 条本轮导入资产：
  - `Codex资产住宅A`
  - `Codex资产车辆重复`
  - `Codex资产商铺D`

## 发现的问题

- 员工 `9843001` 列表中 `deptName=研发部门`，但详情接口返回 `deptName=null`，页面详情“所属部门”显示为 `-`。该问题不阻断导入成功，但属于员工详情展示链路的现存缺陷。

## 清理范围

本轮成功写入的测试员工：

- `9843001`
- `9843003`
- `9843004`

删除员工时，当前后端会同步删除员工身份证号对应的本人资产数据。

## 结论

员工信息维护导入主链路通过：双 Sheet 单入口、空数据拦截、员工新增、员工重复/必填/部门/证件/金额校验、资产新增、资产重复/归属/必填校验、失败记录 Sheet 与行号定位、页面列表与详情资产展示均已验证。需要单独处理员工详情部门名称缺失问题。
