From 13769da668dfef7b18396f700be6da8039a8749f Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Wed, 25 Mar 2026 14:51:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=BB=93=E6=9E=9C=E6=80=BB?= =?UTF-8?q?=E8=A7=88=E8=AF=A6=E6=83=85=E5=BC=B9=E7=AA=97=E7=9C=9F=E5=AE=9E?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ject-analysis-dialog-real-detail-design.md | 399 ++++++++++++++++++ ...alysis-dialog-real-detail-design-record.md | 36 ++ 2 files changed, 435 insertions(+) create mode 100644 docs/design/2026-03-25-results-overview-project-analysis-dialog-real-detail-design.md create mode 100644 docs/reports/implementation/2026-03-25-results-overview-project-analysis-dialog-real-detail-design-record.md diff --git a/docs/design/2026-03-25-results-overview-project-analysis-dialog-real-detail-design.md b/docs/design/2026-03-25-results-overview-project-analysis-dialog-real-detail-design.md new file mode 100644 index 00000000..a6b3ccbb --- /dev/null +++ b/docs/design/2026-03-25-results-overview-project-analysis-dialog-real-detail-design.md @@ -0,0 +1,399 @@ +# 结果总览项目分析弹窗真实详情设计 + +**日期**: 2026-03-25 +**模块**: 初核项目详情 - 结果总览 +**作者**: Codex +**状态**: 已确认 + +## 1. 概述 + +现有 `结果总览` 页的“项目分析”弹窗已完成前端壳子,但弹窗内容仍依赖本地静态拼装: + +- 弹窗宽度偏窄,流水类信息阅读空间不足 +- `异常明细` 仍使用本地 mock 数据 +- 左侧 `人员基础信息` 未读取员工信息表真实数据 +- `命中模型摘要` 当前由弹窗内部拼装,和入口上下文绑定不清晰 + +本次设计只解决上述真实详情接入问题,目标是在保留现有弹窗结构的前提下,把“查看详情”改造成可查询真实人员详情和真实异常明细的工作台弹窗。 + +## 2. 设计目标 + +### 2.1 包含内容 + +- 调整 `项目分析` 弹窗宽度 +- 新增结果总览详情专用后端接口 +- `人员基础信息` 改为读取员工信息表真实数据 +- `异常明细` 改为调用真实接口返回 +- `命中模型摘要` 改为由外部列表透传进入弹窗 +- `异常明细` 中: + - 流水维度异常按表格展示 + - `object` 类型异常标签按摘要卡展示 + +### 2.2 不包含内容 + +- 不改造项目详情页路由和导航 +- 不扩展弹窗内 `资产分析 / 征信摘要 / 关系图谱 / 资金流向` 的真实接口 +- 不把弹窗拆成新页面 +- 不向现有列表接口塞入详情字段 +- 不增加兼容分支、降级分支或补丁式旁路方案 + +## 3. 当前上下文 + +当前相关前端文件: + +- `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue` +- `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisSidebar.vue` +- `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisAbnormalTab.vue` +- `ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js` + +当前相关后端文件: + +- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java` +- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java` +- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiBankStatementController.java` +- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiBankStatementServiceImpl.java` +- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiBaseStaff.java` + +当前问题: + +1. 弹窗宽度固定为 `1280px`,流水类表格列空间不足 +2. 异常明细页仍是“当前行数据 + 静态模板”拼装 +3. 左侧基础信息没有使用员工主数据 +4. 结果总览后端尚无详情接口,只有列表类接口 + +## 4. 方案比较 + +### 4.1 方案 A:新增结果总览详情专用接口 + +做法: + +- 在结果总览控制器下新增详情接口 +- 一次返回人员基础信息和异常明细 +- 前端弹窗只负责展示和状态管理 + +优点: + +- 接口职责清晰,列表与详情边界明确 +- 前端不需要并发拼多个真实接口 +- 后续继续扩展其他页签时可以沿用同一详情链路 + +缺点: + +- 需要补一条新的后端查询链路 + +### 4.2 方案 B:前端并发查询员工信息和异常明细 + +做法: + +- 员工信息单独查员工模块 +- 异常明细单独查结果总览模块 +- 前端弹窗自行合并两份结果 + +优点: + +- 单个接口改动较小 + +缺点: + +- 前端状态更散 +- 打开弹窗时更容易出现半成功半失败 +- 员工信息与详情上下文容易失去统一入口 + +### 4.3 方案 C:把详情字段塞回现有列表接口 + +做法: + +- 在风险人员总览和模型人员列表接口中直接追加详情字段 +- 弹窗尽量少请求或不请求 + +优点: + +- 表面改动快 + +缺点: + +- 列表接口职责被拉坏 +- 数据量被放大 +- 不符合“查看详情单独获取真实信息”的语义 + +### 4.4 结论 + +采用 **方案 A**。 + +原因: + +1. 最符合“详情数据独立获取”的业务语义 +2. 不破坏现有结果总览列表接口职责 +3. 前后端边界最稳定,后续扩展成本最低 + +## 5. 总体设计 + +### 5.1 打开入口 + +以下两个入口继续共用同一个 `项目分析` 弹窗: + +1. `风险人员总览` +2. `命中模型涉及人员列表` + +### 5.2 打开流程 + +1. 用户点击列表中的 `查看详情` +2. 前端立即打开弹窗,默认进入 `异常明细` +3. 前端将入口行中的 `命中模型摘要` 直接透传给弹窗 +4. 前端发起结果总览详情接口请求 +5. 接口返回后刷新左侧真实人员基础信息和右侧真实异常明细 + +### 5.3 数据来源边界 + +- `人员基础信息`:后端详情接口内部查询员工信息表 `ccdi_base_staff` +- `命中模型摘要`:由外部列表透传,不由详情接口负责 +- `异常明细`:由详情接口统一返回真实信息 + +## 6. 后端设计 + +### 6.1 接口设计 + +建议在结果总览控制器下新增接口: + +- `GET /ccdi/project/overview/person-analysis/detail` + +入参: + +- `projectId` +- `staffIdCard` + +只保留这两个字段,避免把外层上下文和真实详情查询混在一起。 + +### 6.2 返回结构 + +返回对象建议收口为: + +```json +{ + "basicInfo": { + "name": "张三", + "idNo": "3301********1234", + "staffCode": "A1023", + "department": "信息二部", + "phone": "138****0000", + "riskLevel": "高风险", + "projectName": "项目A" + }, + "abnormalDetail": { + "groups": [ + { + "groupCode": "BANK_STATEMENT", + "groupName": "流水异常明细", + "groupType": "BANK_STATEMENT", + "records": [] + }, + { + "groupCode": "RELATED_OBJECT", + "groupName": "异常对象摘要", + "groupType": "OBJECT", + "records": [] + } + ] + } +} +``` + +### 6.3 人员基础信息查询 + +人员基础信息统一从员工信息表读取: + +- 主表:`ccdi_base_staff` +- 关联补充: + - 部门名称 + - 当前项目名称 + - 结果总览员工结果表中的风险等级 + +查询口径: + +1. `staffIdCard` 作为员工识别主键 +2. 员工表查不到时,仍允许返回异常明细,但 `basicInfo` 中对应字段为空 +3. 不新增前端二次查员工接口 + +### 6.4 异常明细查询 + +异常明细统一组织为 `groups` 列表,每组包含: + +- `groupCode` +- `groupName` +- `groupType` +- `records` + +本轮只支持两种 `groupType`: + +- `BANK_STATEMENT` +- `OBJECT` + +### 6.5 流水维度异常 + +`BANK_STATEMENT` 类型的 `records` 直接按流水明细展示口径返回,字段尽量贴近现有流水查询 VO: + +- `bankStatementId` +- `trxDate` +- `leAccountNo` +- `leAccountName` +- `customerAccountName` +- `customerAccountNo` +- `userMemo` +- `cashType` +- `displayAmount` +- `hitTags` + +要求: + +1. 展示口径与现有“流水明细查询”页面保持一致 +2. 命中标签继续沿用当前流水标签结果表查询方式 +3. 不再为弹窗单独造一套与流水查询不一致的字段命名 + +### 6.6 `OBJECT` 类型异常 + +`OBJECT` 类型记录用于卡片展示,返回摘要结构,不返回整对象平铺结构。 + +每条记录建议包含: + +- `title` +- `subtitle` +- `riskTags` +- `summary` +- `extraFields` + +其中: + +- `title`:对象主识别名称 +- `subtitle`:对象类型、关系或补充说明 +- `riskTags`:异常标签数组 +- `summary`:一句话摘要 +- `extraFields`:最多 2 到 4 个补充字段 + +这样可满足“卡片展示核心信息”的要求,避免对象型数据在弹窗内变成字段堆叠。 + +### 6.7 查询范围 + +无论从哪个入口进入,详情接口都返回“该人员在当前项目下的全部异常明细”。 + +即使入口来自 `命中模型涉及人员列表`,也: + +- 顶部继续显示当前命中模型上下文 +- 但异常明细不按当前模型过滤 + +## 7. 前端设计 + +### 7.1 弹窗尺寸 + +`ProjectAnalysisDialog.vue` 中弹窗宽度从 `1280px` 调整为 `1440px`。 + +布局建议: + +- 左侧侧栏宽度从 `320px` 微调到 `340px` +- 右侧主工作区尽量为流水表格腾出空间 + +### 7.2 侧栏展示 + +左侧侧栏拆成两类来源: + +1. 真实详情接口返回: + - 姓名 + - 身份证号 + - 工号 + - 部门 + - 联系方式 + - 风险等级 + - 所属项目 +2. 外层透传: + - 命中模型数 + - 当前命中模型 + - 核心异常标签 + +`排查记录摘要` 本轮没有真实口径,继续保留占位文案,不新增接口。 + +### 7.3 异常明细渲染 + +`ProjectAnalysisAbnormalTab.vue` 改为分组渲染: + +1. `BANK_STATEMENT` + - 渲染表格 + - 表头风格参考 `DetailQuery.vue` +2. `OBJECT` + - 渲染摘要卡列表 + - 每张卡只展示核心字段 + +空数据处理: + +- 空分组不展示 +- 全部为空时展示统一空态 + +### 7.4 Mock 替换策略 + +`preliminaryCheck.mock.js` 中的弹窗数据构造逻辑不再承担真实详情拼装职责。 + +保留内容: + +- 占位页签文案 +- 少量默认结构常量 + +移出内容: + +- `basicInfo` +- `abnormalDetail` + +这两部分改为完全由真实接口驱动。 + +## 8. 状态与交互设计 + +### 8.1 打开时机 + +点击后立即打开弹窗,不等待接口先返回。 + +### 8.2 加载态 + +- 左侧真实基础信息未返回前显示骨架或 `-` +- 右侧 `异常明细` 区域显示 `v-loading` 或骨架态 +- 外层透传的命中模型摘要可先展示 + +### 8.3 错误态 + +如果详情接口失败: + +- 弹窗保持打开 +- 右侧异常明细区域展示错误提示和重试入口 +- 左侧命中模型摘要继续保留 +- 未获取到的基础信息字段显示为空 + +### 8.4 页签行为 + +- 默认页签始终为 `异常明细` +- 关闭弹窗后再次打开,仍回到 `异常明细` +- 其余 4 个页签继续展示占位内容,不在本次扩展真实数据 + +## 9. 测试与验收要点 + +### 9.1 后端验收 + +1. 详情接口可根据 `projectId + staffIdCard` 返回真实详情 +2. 人员基础信息来源于员工信息表 +3. 流水型异常可返回真实流水记录和命中标签 +4. `OBJECT` 类型异常可返回摘要卡结构 +5. 从模型人员列表进入时,异常明细仍返回该人的全部异常 + +### 9.2 前端验收 + +1. 弹窗宽度明显加宽,流水表格可读性提升 +2. 点击 `查看详情` 后弹窗立即打开 +3. 左侧命中模型摘要由外层透传 +4. 左侧人员基础信息展示真实数据 +5. 流水型异常按表格展示 +6. `OBJECT` 类型异常按摘要卡展示 +7. 详情请求失败时弹窗不关闭,可重试 + +## 10. 结论 + +本方案采用“**结果总览新增专用详情接口 + 前端弹窗按类型渲染真实数据**”的最短路径实现: + +1. 不污染现有列表接口 +2. 不让前端并发拼多条真实接口 +3. 人员基础信息、异常明细、入口模型摘要三类职责边界清晰 +4. 既满足本轮真实详情接入,也为后续逐步接通更多页签留出稳定扩展位 diff --git a/docs/reports/implementation/2026-03-25-results-overview-project-analysis-dialog-real-detail-design-record.md b/docs/reports/implementation/2026-03-25-results-overview-project-analysis-dialog-real-detail-design-record.md new file mode 100644 index 00000000..2cedbecf --- /dev/null +++ b/docs/reports/implementation/2026-03-25-results-overview-project-analysis-dialog-real-detail-design-record.md @@ -0,0 +1,36 @@ +# 结果总览项目分析弹窗真实详情设计记录 + +**日期**: 2026-03-25 + +## 本次产出 + +- 新增正式设计文档 `docs/design/2026-03-25-results-overview-project-analysis-dialog-real-detail-design.md` +- 将“查看详情弹窗”真实数据接入方案收口为单详情接口方案 + +## 设计结论 + +### 后端 + +- 在结果总览域内新增人员分析详情接口 +- 入参统一为 `projectId + staffIdCard` +- `人员基础信息` 从员工信息表获取 +- `异常明细` 统一按分组结构返回,支持 `BANK_STATEMENT` 和 `OBJECT` 两类 + +### 前端 + +- 项目分析弹窗宽度由 `1280px` 调整为 `1440px` +- 命中模型摘要改由外层列表透传 +- 流水类异常按表格展示,风格对齐流水明细查询 +- `object` 类型异常按摘要卡展示 + +## 边界约束 + +- 不修改项目详情页路由 +- 不将详情字段塞回现有结果总览列表接口 +- 不扩展其余四个页签的真实数据 +- 从模型命中人员列表进入时,详情接口仍返回该人员全部异常明细 + +## 说明 + +- 本次仅完成设计沉淀,尚未进入代码实施 +- 后续需基于该设计继续产出前后端实施计划