Merge pull request 'dev-ui' (#1) from dev-ui into dev

Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
wkc
2026-04-22 01:50:37 +00:00
48 changed files with 2788 additions and 117 deletions

View File

@@ -0,0 +1,44 @@
# 证据库最小改造验证清单
## 验证范围
- 流水证据:流水详情中小号「加入证据库」按钮、确认弹窗、保存入库。
- 模型证据:模型详情异常对象卡片中小号「加入证据库」按钮、确认弹窗、保存入库。
- 资产证据:资产详情中小号「加入证据库」按钮、确认弹窗、保存入库。
- 证据线索:项目详情右上角小号「证据线索」入口、右侧抽屉列表、搜索框基础展示。
## 版式约束
- 不新增独立证据库页面。
- 不改变原详情页主体字段、表格列、字号体系和业务阅读顺序。
- 「加入证据库」只能作为低频辅助按钮出现,使用 mini 尺寸、弱边框、弱背景。
- 「证据线索」只能作为轻入口和右侧抽屉,不遮挡或重排项目详情主体内容。
## 功能验证
- 项目详情页能正常打开,顶部「证据线索」按钮可打开抽屉。
- 抽屉无证据时展示空状态,有证据时展示编号、类型、关联人员、摘要、来源、确认人、备注。
- 模型详情点击「加入证据库」后,弹窗自动带出证据类型、关联人员、证据摘要。
- 流水详情点击「加入证据库」后,弹窗自动带出流水证据摘要,`source_record_id` 使用 `md5(本方账号+本方名称+对方账号+对方名称+交易时间+金额+摘要)`
- 资产详情点击「加入证据库」后,弹窗自动带出资产证据摘要。
- 模型证据 `source_record_id` 使用 `md5(人员身份证+模型编码)`,缺少人员身份证或模型编码时不允许入库。
- 资产证据 `source_record_id` 使用 `md5(人员身份证+资产字段)`,当前资产负债聚合口径的资产字段为家庭总收入、家庭总负债、家庭总资产、风险等级编码。
- 确认理由为空时不能提交。
- 填写确认理由后可以提交,提交成功后自动打开或刷新证据线索抽屉。
- 保存后的证据落库到 `ccdi_evidence`
## 技术验证
- 后端 `ccdi-project` 编译通过。
- 前端 `npm run build:prod` 通过。
- 数据库表 `ccdi_evidence` 存在。
- 流水证据 `source_record_id` 不依赖 `statementId/bankStatementId`,应为 32 位 MD5 指纹。
- 模型证据、资产证据的 `source_record_id` 均不拼接项目 ID项目归属仅存 `project_id` 字段。
- 页面控制台不出现由本次改造引入的明显错误。
- 不提交或误动无关文件。
## 本期不做
- 证据卡片「查看详情」真实跳转原记录。
- 跨项目引用/复用 UI。
- 重复证据拦截。

View File

@@ -0,0 +1,64 @@
# 员工招聘功能自验收清单
验收日期2026-04-20
## 验收范围
本次自验收覆盖员工招聘页面与接口联动所需的前后端能力,包括招聘类型、候选人历史工作经历、工作经历单独导入、详情/编辑页展示顺序、面试官字段展示一致性,以及基于现有招聘数据补充联调样例数据。
## 前端页面
- [x] 查询条件保持原有结构,仅新增“招聘类型”筛选项。
- [x] 顶部操作区包含“新增”“导入”“导入工作经历”“导出”。
- [x] 列表列按最新口径展示:招聘记录编号、招聘项目名称、职位名称、候选人姓名、录用情况、学历 / 毕业学校、招聘类型、历史工作经历、操作。
- [x] 列表“操作”列包含“详情”“编辑”“删除”按钮。
- [x] 招聘项目名称列已加宽,长名称不再只显示为“办结”一类截断残片。
- [x] “学历 / 毕业学校”在列表合并展示,详情/编辑中仍保留学历、毕业院校、毕业年月、专业等候选人基础字段。
- [x] 详情页模块顺序为:招聘岗位信息、录用情况、候选人情况、候选人历史工作经历、面试官信息。
- [x] 编辑页模块顺序与详情页保持一致:招聘岗位信息、录用情况、候选人情况、面试官信息。
- [x] 详情页“面试官信息”统一按四个字段展示面试官1姓名、面试官1工号、面试官2姓名、面试官2工号。
- [x] 详情页不再展示重复的“社招工作经历摘要”,只保留“候选人历史工作经历”。
- [x] 工作经历导入使用独立入口、独立模板、独立上传接口。
## 后端接口与数据结构
- [x] 主表 `ccdi_staff_recruitment` 保留原有创建/更新人员字段命名,不改动既有审计字段口径。
- [x] 主表新增 `recruit_type`,用于区分社招、校招。
- [x] 历史工作经历使用独立表 `ccdi_staff_recruitment_work`,不把工作经历摘要字段放入主表。
- [x] 列表查询聚合返回历史工作经历段数,避免前端列表加载完整经历明细。
- [x] 详情查询返回完整历史工作经历列表。
- [x] 删除招聘记录时同步删除对应历史工作经历。
- [x] 工作经历导入以招聘记录编号为唯一匹配依据。
- [x] 工作经历导入时,候选人姓名、招聘项目名称、职位名称仅用于人工核对和导入校验。
- [x] 工作经历导入时,三个辅助字段与主表不一致则禁止导入。
- [x] 工作经历导入只允许社招记录导入,校招记录禁止导入。
- [x] 同一个招聘记录编号在工作经历导入文件中任意一行失败时,该招聘记录编号下本次所有工作经历均不覆盖入库。
## 数据库与联调样例数据
- [x] 已补充数据库迁移脚本:`sql/migration/2026-04-15-add-staff-recruitment-social-work-summary.sql`
- [x] 已补充现有数据联调样例脚本:`sql/migration/2026-04-20-seed-staff-recruitment-work-existing-data.sql`
- [x] 样例脚本不改动已有招聘项目名称、职位名称、候选人姓名、录用情况、面试官等原始业务信息。
- [x] 样例脚本只在招聘类型为空时补充 `recruit_type`,并生成带标记的历史工作经历样例。
- [x] 数据库验证结果:`SOCIAL = 4646``CAMPUS = 1355`
- [x] 数据库验证结果:已生成历史工作经历样例 `25` 条,覆盖社招招聘记录 `20` 条。
## 构建与验证
- [x] 后端编译通过:`mvn -pl ccdi-info-collection -am compile -DskipTests`
- [x] 前端生产构建通过:`npm run build:prod`
- [x] 前端构建仅存在体积提示类 warning未出现编译错误。
- [x] 前端预览截图已生成,覆盖列表、工作经历导入、详情面试官展示。
- [x] 验证过程中启动的前端预览进程已停止,未保留 8088 端口监听。
## 预览截图
- 列表页:`C:\Users\20696\codex-preview\staff-recruitment-work-import-list.png`
- 工作经历导入弹窗:`C:\Users\20696\codex-preview\staff-recruitment-work-import-dialog.png`
- 详情页面试官四字段展示:`C:\Users\20696\codex-preview\staff-recruitment-detail-interviewer-separated.png`
## 注意事项
- 当前机器无法通过 `bin/mysql_utf8_exec.sh` 调用 MySQL 客户端执行中文 SQL实际数据库脚本执行采用本地 Maven 缓存中的 MySQL JDBC 驱动,并显式设置 `utf8mb4` 会话字符集。
- 列表默认第一页如果主要是校招记录,“历史工作经历”可能显示为 `-`;筛选“社招”后可看到已补充的工作经历段数。
- 仓库中存在与本次招聘功能无关的未跟踪 `docx` 文件,本次未处理、未纳入验收范围。

View File

@@ -0,0 +1,51 @@
# 证据库最小改造验证记录
## 验证时间
2026-04-21
## 验证环境
- 前端:`http://localhost:62319`
- 后端:`http://localhost:62318`
- 项目:`test`
- 项目 ID`90337`
## 验证结果
| 验证项 | 结果 | 说明 |
| --- | --- | --- |
| 后端编译 | 通过 | `mvn -pl ccdi-project -am compile -DskipTests` 成功 |
| 前端构建 | 通过 | `npm run build:prod` 成功,仅存在原有包体积 warning |
| 数据库表 | 通过 | `ccdi_evidence` 已存在 |
| 模型证据入库 | 通过 | 模型详情小号「加入证据库」可打开弹窗并保存,生成 `EV-001` |
| 流水证据入库 | 通过 | 流水详情小号「加入证据库」可打开弹窗并保存,当前代码已改为使用 32 位 MD5 指纹作为 `source_record_id` |
| 资产证据入库 | 通过 | 资产详情小号「加入证据库」可打开弹窗并保存,已验证旧规则测试数据 `EV-003` 与新指纹规则测试数据 `EV-004` |
| 证据线索抽屉 | 通过 | 抽屉展示三类证据,包含编号、类型、关联人员、摘要、来源、确认人、备注 |
| 前端控制台 | 通过 | 验证后未发现 error/warn |
| 模型/资产来源指纹更新 | 通过 | 已重启后端并通过 MCP 页面验证:模型证据、资产证据均可打开确认弹窗,本次未确认入库,避免新增测试数据 |
| 证据抽屉跳转入口 | 通过 | 本期不做原记录跳转,已移除抽屉卡片中的「查看流水详情」「查看模型详情」「查看资产详情」按钮 |
## 落库核对
项目 `90337` 当前证据数:
| 类型 | 数量 |
| --- | ---: |
| FLOW | 1 |
| MODEL | 1 |
| ASSET | 2 |
| 合计 | 4 |
## 注意事项
- 本次验证产生了测试证据数据,如正式交付前需要干净环境,可按项目 ID 清理。
- 历史已保存的测试证据可能保留旧来源标识,新保存的流水、模型、资产证据会按当前规则生成 MD5 指纹。
- 当前代码已将模型证据来源标识改为 `md5(人员身份证+模型编码)`,资产证据来源标识改为 `md5(人员身份证+资产字段)`,均不拼接项目 ID。
- 为让模型详情前端拿到模型编码,后端仅补充返回 `modelCode` 字段,不涉及表结构和接口路径变更。
## 后续边界
- 证据卡片「查看详情」本期不做真实跳转,当前抽屉不展示跳转按钮;后续如要定位原记录,可基于 `source_type``source_record_id``snapshot_json` 增加跳转逻辑。
- 跨项目引用/复用 UI 本期不做;当前 `source_record_id` 已按不拼接项目 ID 的规则生成,后续具备按同一来源指纹做跨项目比对的基础。
- 重复证据拦截本期不做;当前允许同一项目内重复确认,后续可按 `project_id + evidence_type + source_type + source_record_id` 增加唯一性提示或软拦截。