466 lines
13 KiB
Markdown
466 lines
13 KiB
Markdown
# 专项核查拓展查询卡片设计文档
|
||
|
||
**模块**: 项目详情 - 专项核查
|
||
**日期**: 2026-03-24
|
||
**状态**: 已确认
|
||
|
||
## 一、背景
|
||
|
||
当前项目详情页的专项核查页签已包含两块内容:
|
||
|
||
1. 员工家庭资产负债专项核查
|
||
2. 图谱外链展示占位卡片
|
||
|
||
其中图谱外链卡片当前仅作为后续接入外链图谱页面的预留入口,尚未承载真实业务查询能力。
|
||
|
||
本轮需求是在图谱外链卡片下方新增一张“拓展查询”卡片,用于查询项目范围内员工的采购、招聘、调动记录,并支持按主题 Tab 切换、按主题对应姓名字段和时间范围检索,以及按记录查看完整详情。
|
||
|
||
## 二、目标
|
||
|
||
本次设计目标如下:
|
||
|
||
1. 在专项核查页签中新增“拓展查询”卡片,位置固定在图谱外链卡片下方。
|
||
2. 通过 Tab 切换展示 3 类拓展查询主题:
|
||
- 采购记录
|
||
- 招聘记录
|
||
- 调动记录
|
||
3. 列表数据只查询当前专项核查同范围员工,不扩展到项目全部目标员工。
|
||
4. 查询栏按主题独立配置,不共享无关筛选项。
|
||
5. 列表展示必要字段,操作列提供“查看详情”按钮。
|
||
6. 点击“查看详情”后,通过弹窗展示该条记录全部字段。
|
||
|
||
## 三、范围
|
||
|
||
### 3.1 本次范围
|
||
|
||
- 新增专项核查页的拓展查询卡片
|
||
- 新增采购、招聘、调动 3 个主题的 Tab 切换
|
||
- 新增项目范围拓展查询列表接口
|
||
- 新增项目范围拓展查询详情接口
|
||
- 新增对应前端查询、分页、详情弹窗交互
|
||
- 补充前后端测试与验证记录
|
||
|
||
### 3.2 不在本次范围
|
||
|
||
- 不接入真实图谱外链地址
|
||
- 不改动现有员工家庭资产负债专项核查逻辑
|
||
- 不新开独立路由页面
|
||
- 不扩展到项目全部目标员工
|
||
- 不为招聘记录新增时间筛选字段
|
||
- 不新增导出、编辑、删除等操作
|
||
- 不引入缓存、异步预计算或额外结果表
|
||
|
||
## 四、已确认业务口径
|
||
|
||
本次设计确认以下口径,后续实施必须严格遵守:
|
||
|
||
1. “项目范围内员工”定义为当前专项核查同范围员工,即现有专项核查链路中已归并出来的员工集合。
|
||
2. 不按项目全部目标员工查询。
|
||
3. 查询卡片位置固定在“图谱外链展示”卡片下方。
|
||
4. 采用横向 Tab 切换主题,不使用竖向主题导航。
|
||
5. 每个主题使用独立查询栏,不共享查询表单。
|
||
6. 采购记录按“申请人姓名 + 申请日期范围”筛选。
|
||
7. 招聘记录按“面试官姓名”筛选,本次不增加时间筛选。
|
||
8. 调动记录按“员工姓名 + 调动日期范围”筛选。
|
||
9. 列表只展示必要字段,详情弹窗展示该条记录全部字段。
|
||
|
||
## 五、方案对比
|
||
|
||
### 5.1 方案 A:图谱卡片下方新增独立拓展查询卡片
|
||
|
||
做法:
|
||
|
||
- 保留现有图谱卡片不变
|
||
- 在图谱卡片下方新增一张“拓展查询”卡片
|
||
- 卡片内部顶部使用横向 Tab 切换主题
|
||
|
||
优点:
|
||
|
||
- 完全符合“在图谱外链卡片下面添加拓展查询功能卡片”的原始需求
|
||
- 不影响现有图谱占位卡片结构
|
||
- 页面层级清晰,用户认知成本低
|
||
- 前端改造路径最短
|
||
|
||
缺点:
|
||
|
||
- 页面纵向高度会增加
|
||
|
||
### 5.2 方案 B:图谱卡片与拓展查询合并为一个大卡片
|
||
|
||
做法:
|
||
|
||
- 图谱占位与拓展查询共用同一张卡片
|
||
|
||
问题:
|
||
|
||
- 与“在图谱外链卡片下面添加卡片”的需求不一致
|
||
- 图谱占位与实际查询职责混在一起,层次不清
|
||
|
||
### 5.3 方案 C:独立拓展查询卡片,但使用左侧竖向主题导航
|
||
|
||
做法:
|
||
|
||
- 与方案 A 一样新增独立卡片
|
||
- 但主题切换改为左侧竖向导航
|
||
|
||
问题:
|
||
|
||
- 用户已明确要求通过 Tab 页切换主题
|
||
- 与当前页面已有横向区块风格不一致
|
||
|
||
### 5.4 推荐方案
|
||
|
||
采用方案 A:在图谱外链卡片下方新增独立拓展查询卡片,卡片内部使用横向 Tab 切换采购、招聘、调动 3 个主题。
|
||
|
||
## 六、页面结构设计
|
||
|
||
专项核查页整体结构调整后如下:
|
||
|
||
1. 员工家庭资产负债专项核查卡片
|
||
2. 图谱外链展示卡片
|
||
3. 拓展查询卡片
|
||
|
||
其中前两张卡片不修改现有交互,仅在其下方追加第三张卡片。
|
||
|
||
拓展查询卡片的渲染条件独立于家庭资产负债列表数据:
|
||
|
||
- 只要当前 `projectId` 有效,就应展示拓展查询卡片
|
||
- 即使家庭资产负债列表为空,拓展查询卡片仍需可见并可使用
|
||
|
||
拓展查询卡片结构如下:
|
||
|
||
### 6.1 卡片头部
|
||
|
||
- 标题:拓展查询
|
||
- 副标题:查询专项核查同范围员工的采购、招聘、调动记录
|
||
|
||
### 6.2 Tab 区
|
||
|
||
- Tab 1:采购记录
|
||
- Tab 2:招聘记录
|
||
- Tab 3:调动记录
|
||
|
||
### 6.3 主题查询区
|
||
|
||
每个 Tab 使用独立查询栏:
|
||
|
||
- 采购记录:
|
||
- 申请人姓名
|
||
- 申请日期范围
|
||
- 搜索
|
||
- 重置
|
||
- 招聘记录:
|
||
- 面试官姓名
|
||
- 搜索
|
||
- 重置
|
||
- 调动记录:
|
||
- 员工姓名
|
||
- 调动日期范围
|
||
- 搜索
|
||
- 重置
|
||
|
||
### 6.4 列表区
|
||
|
||
Tab 下方展示当前主题列表与分页。
|
||
|
||
切换 Tab 时:
|
||
|
||
- 不共用查询表单
|
||
- 不互相覆盖列表数据
|
||
- 各主题保留自己的查询条件与分页状态
|
||
- 首次进入某个 Tab 时再触发该 Tab 的首查
|
||
|
||
### 6.5 详情弹窗
|
||
|
||
操作列统一提供“查看详情”按钮。
|
||
|
||
点击后:
|
||
|
||
- 采购记录弹出采购详情弹窗
|
||
- 招聘记录弹出招聘详情弹窗
|
||
- 调动记录弹出调动详情弹窗
|
||
|
||
详情弹窗展示该条记录全部字段,不裁剪字段内容。
|
||
|
||
## 七、列表字段设计
|
||
|
||
### 7.1 采购记录列表字段
|
||
|
||
- 采购事项 ID
|
||
- 项目名称
|
||
- 标的物名称
|
||
- 申请人姓名
|
||
- 申请日期
|
||
- 操作
|
||
|
||
### 7.2 招聘记录列表字段
|
||
|
||
- 招聘项目编号
|
||
- 招聘项目名称
|
||
- 职位名称
|
||
- 面试官姓名摘要
|
||
- 录用情况
|
||
- 操作
|
||
|
||
其中面试官姓名摘要定义为:
|
||
|
||
- 优先展示 `面试官1姓名 / 面试官2姓名`
|
||
- 如某一个为空,则只展示存在的姓名
|
||
|
||
### 7.3 调动记录列表字段
|
||
|
||
- 员工姓名
|
||
- 调动类型
|
||
- 调动前部门
|
||
- 调动后部门
|
||
- 调动日期
|
||
- 操作
|
||
|
||
## 八、后端设计
|
||
|
||
### 8.1 接口归属
|
||
|
||
本次不直接复用信息采集模块现有 `/list` 接口,而是在专项核查域新增项目范围拓展查询接口,统一挂在:
|
||
|
||
- `CcdiProjectSpecialCheckController`
|
||
|
||
原因:
|
||
|
||
1. 现有信息采集模块接口仅面向各自主表查询,不包含“专项核查同范围员工”的限制。
|
||
2. 如果前端调用现有接口后自行过滤,会导致项目范围口径不稳定。
|
||
3. 在专项核查域统一收口,后续维护更清晰。
|
||
|
||
### 8.2 接口设计
|
||
|
||
建议新增 6 个接口:
|
||
|
||
- `GET /ccdi/project/special-check/extended-query/purchase/list`
|
||
- `GET /ccdi/project/special-check/extended-query/purchase/detail`
|
||
- `GET /ccdi/project/special-check/extended-query/recruitment/list`
|
||
- `GET /ccdi/project/special-check/extended-query/recruitment/detail`
|
||
- `GET /ccdi/project/special-check/extended-query/transfer/list`
|
||
- `GET /ccdi/project/special-check/extended-query/transfer/detail`
|
||
|
||
### 8.3 项目范围员工口径复用
|
||
|
||
项目范围员工统一复用当前专项核查 mapper 中的员工范围定义,即:
|
||
|
||
- `CcdiProjectSpecialCheckMapper.xml` 中的 `projectEmployeeScopeSql`
|
||
|
||
该范围已经与当前专项核查页保持一致,本轮不重新定义口径,不新增第二套项目员工范围逻辑。
|
||
|
||
### 8.4 列表查询设计
|
||
|
||
#### 采购记录
|
||
|
||
数据来源:
|
||
|
||
- `ccdi_purchase_transaction`
|
||
|
||
范围限制:
|
||
|
||
- 记录必须命中专项核查同范围员工
|
||
|
||
筛选条件:
|
||
|
||
- `projectId`
|
||
- `applicantName`
|
||
- `applyDateStart`
|
||
- `applyDateEnd`
|
||
|
||
员工姓名口径:
|
||
|
||
- 按采购记录的 `applicant_name` 检索
|
||
|
||
时间口径:
|
||
|
||
- 按采购记录的 `apply_date` 检索
|
||
|
||
#### 招聘记录
|
||
|
||
数据来源:
|
||
|
||
- `ccdi_staff_recruitment`
|
||
|
||
范围限制:
|
||
|
||
- 记录必须命中专项核查同范围员工
|
||
|
||
筛选条件:
|
||
|
||
- `projectId`
|
||
- `interviewerName`
|
||
|
||
员工姓名口径:
|
||
|
||
- 按招聘记录的 `interviewer_name_1` 或 `interviewer_name_2` 检索
|
||
- 同一条招聘记录若同时命中 `interviewer_name_1` 与 `interviewer_name_2`,列表结果必须按招聘记录主键去重
|
||
|
||
时间口径:
|
||
|
||
- 本次不提供招聘时间筛选
|
||
|
||
#### 调动记录
|
||
|
||
数据来源:
|
||
|
||
- `ccdi_staff_transfer`
|
||
- `ccdi_base_staff`
|
||
|
||
范围限制:
|
||
|
||
- 记录必须命中专项核查同范围员工
|
||
|
||
筛选条件:
|
||
|
||
- `projectId`
|
||
- `staffName`
|
||
- `transferDateStart`
|
||
- `transferDateEnd`
|
||
|
||
员工姓名口径:
|
||
|
||
- 按调动记录对应员工的 `staff_name` 检索
|
||
|
||
时间口径:
|
||
|
||
- 按 `transfer_date` 检索
|
||
|
||
### 8.5 详情查询设计
|
||
|
||
详情接口按各自主键查询,并返回该条记录全部字段:
|
||
|
||
- 采购详情:按 `purchaseId`
|
||
- 招聘详情:按 `recruitId`
|
||
- 调动详情:按 `id`
|
||
|
||
详情查询仍需校验该记录属于当前专项核查同范围员工;不属于时返回业务错误,避免越权或口径漂移。
|
||
|
||
### 8.6 DTO / VO 设计
|
||
|
||
建议在 `ccdi-project` 模块下新增独立 DTO:
|
||
|
||
- 采购拓展查询 DTO
|
||
- 招聘拓展查询 DTO
|
||
- 调动拓展查询 DTO
|
||
|
||
其中招聘主题查询字段命名统一使用 `interviewerName`,不再使用泛化的 `staffName`。
|
||
采购主题查询字段命名统一使用 `applicantName`,不再使用泛化的 `staffName`。
|
||
|
||
列表返回对象按主题独立定义轻量 VO,仅保留列表必要字段。
|
||
|
||
详情返回可优先复用现有 VO 字段结构:
|
||
|
||
- `CcdiPurchaseTransactionVO`
|
||
- `CcdiStaffRecruitmentVO`
|
||
- `CcdiStaffTransferVO`
|
||
|
||
如直接复用存在耦合问题,再在 `ccdi-project` 下补充专项核查详情 VO,但本轮优先选择最短路径实现。
|
||
|
||
## 九、前端设计
|
||
|
||
### 9.1 页面挂载位置
|
||
|
||
继续以:
|
||
|
||
- `ruoyi-ui/src/views/ccdiProject/components/detail/SpecialCheck.vue`
|
||
|
||
作为专项核查页签容器,不新增路由。
|
||
|
||
### 9.2 组件拆分
|
||
|
||
建议新增一张独立的拓展查询区块组件,例如:
|
||
|
||
- `ExtendedQuerySection.vue`
|
||
|
||
职责如下:
|
||
|
||
- 管理当前激活 Tab
|
||
- 管理各 Tab 的查询参数
|
||
- 驱动列表加载与分页
|
||
- 打开并关闭详情弹窗
|
||
|
||
详情展示建议按主题拆分为小组件或局部模板:
|
||
|
||
- 采购详情复用现有采购页的分组展示方式
|
||
- 招聘详情复用现有招聘页的分组展示方式
|
||
- 调动详情补齐与前两者一致的详情展示结构
|
||
|
||
### 9.3 状态管理
|
||
|
||
每个 Tab 独立维护以下状态:
|
||
|
||
- `query`
|
||
- `list`
|
||
- `loading`
|
||
- `pageNum`
|
||
- `pageSize`
|
||
- `total`
|
||
- `detailOpen`
|
||
- `detailLoading`
|
||
- `detailData`
|
||
|
||
原则如下:
|
||
|
||
1. 不共享查询表单
|
||
2. 不共享列表数据
|
||
3. 切换 Tab 时保留各自上次查询状态
|
||
4. 首次进入 Tab 时再请求列表
|
||
|
||
### 9.4 空态与异常
|
||
|
||
- 列表无数据时展示当前主题无数据空态
|
||
- 列表查询失败时提示错误信息,并清空当前主题列表
|
||
- 详情查询失败时只提示错误,不污染列表状态
|
||
- `projectId` 为空时沿用当前专项核查页已有空态逻辑
|
||
|
||
## 十、测试与验证设计
|
||
|
||
### 10.1 前端验证
|
||
|
||
补充以下验证:
|
||
|
||
1. 专项核查页新增拓展查询卡片结构断言
|
||
2. 卡片位于图谱外链卡片下方的结构断言
|
||
3. 3 个主题 Tab 的存在性断言
|
||
4. 不同 Tab 显示不同查询栏字段的断言
|
||
5. 操作列“查看详情”按钮存在性断言
|
||
6. 调动主题详情弹窗存在性断言
|
||
7. 前端构建验证
|
||
|
||
### 10.2 后端验证
|
||
|
||
补充以下验证:
|
||
|
||
1. 项目范围员工口径是否与 `projectEmployeeScopeSql` 一致
|
||
2. 采购列表按申请人姓名和申请日期范围过滤是否正确
|
||
3. 招聘列表按面试官姓名过滤是否正确
|
||
4. 调动列表按员工姓名和调动日期范围过滤是否正确
|
||
5. 详情接口是否能校验记录属于当前项目范围员工
|
||
6. 记录不属于当前项目范围员工时是否返回预期错误
|
||
|
||
### 10.3 联调验证
|
||
|
||
联调时重点验证:
|
||
|
||
1. Tab 切换后各自查询条件不会互相污染
|
||
2. 招聘主题不展示时间范围
|
||
3. 采购与调动主题展示时间范围
|
||
4. 详情弹窗字段完整性与原业务页一致
|
||
|
||
## 十一、实施约束
|
||
|
||
本轮实施需遵守以下要求:
|
||
|
||
1. 不新增兼容性分支或降级方案。
|
||
2. 不在需求外扩展更多主题。
|
||
3. 不新增导出、编辑、删除、批量操作。
|
||
4. 不改变现有图谱占位卡片行为。
|
||
5. 根据本设计文档产出两份实施计划:
|
||
- 后端实施计划放 `docs/plans/backend/`
|
||
- 前端实施计划放 `docs/plans/frontend/`
|
||
|
||
## 十二、结论
|
||
|
||
本次采用“图谱外链卡片下方新增独立拓展查询卡片”的方案,在专项核查页签内新增采购、招聘、调动 3 个主题查询能力。所有查询严格限制为当前专项核查同范围员工,采购与调动支持时间范围筛选,招聘仅支持面试官姓名筛选。前端不新增路由,后端在专项核查域新增统一接口,保持实现路径最短、页面职责清晰、业务口径稳定。
|