From 62fa2b1aac2c97815f7aa214c6a1148741396d5f Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Fri, 20 Mar 2026 14:31:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A3=8E=E9=99=A9=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E6=80=BB=E8=A7=88=E6=A0=B8=E5=BF=83=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=82=B9=E6=A0=87=E7=AD=BE=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sk-people-core-hit-tags-frontend-record.md | 30 ++++++ .../components/detail/RiskPeopleSection.vue | 95 ++++++++++++++++++- .../detail/preliminaryCheck.mock.js | 11 +++ ...iminary-check-risk-people-hit-tags.test.js | 17 ++++ 4 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 docs/reports/implementation/2026-03-20-risk-people-core-hit-tags-frontend-record.md create mode 100644 ruoyi-ui/tests/unit/preliminary-check-risk-people-hit-tags.test.js diff --git a/docs/reports/implementation/2026-03-20-risk-people-core-hit-tags-frontend-record.md b/docs/reports/implementation/2026-03-20-risk-people-core-hit-tags-frontend-record.md new file mode 100644 index 00000000..3505a00f --- /dev/null +++ b/docs/reports/implementation/2026-03-20-risk-people-core-hit-tags-frontend-record.md @@ -0,0 +1,30 @@ +# 风险人员总览核心异常点标签化展示实施记录 + +## 本次改动 + +- 将风险人员总览中的“核心异常点”从纯文本展示改为标签列表展示,样式与“命中模型涉及人员”的异常标签保持一致。 +- 调整 [`RiskPeopleSection.vue`](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue): + - 新增 `riskPointTagList` 归一化逻辑。 + - 兼容后端返回标签数组、字符串数组、以及历史 `riskPoint` 拼接字符串三种输入形式。 + - 按风险等级映射 `el-tag` 颜色,空值场景显示 `-`。 +- 调整 [`preliminaryCheck.mock.js`](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js),补充标签列 mock 数据。 +- 新增 [`preliminary-check-risk-people-hit-tags.test.js`](/Users/wkc/Desktop/ccdi/ccdi/ruoyi-ui/tests/unit/preliminary-check-risk-people-hit-tags.test.js) 锁定核心异常点标签化渲染结构。 + +## 实现说明 + +- 不修改后端接口口径,展示层在前端做最小归一化处理。 +- 若接口继续返回 `riskPoint` 字符串,则按 `、`、`,`、`,`、`;`、`;` 拆分为多个标签。 +- 若接口后续直接返回 `riskPointTagList`,则优先使用该字段,避免重复拆分。 + +## 验证情况 + +- 前端单测: + - `node ruoyi-ui/tests/unit/preliminary-check-risk-people-hit-tags.test.js` + - `node ruoyi-ui/tests/unit/preliminary-check-risk-people-binding.test.js` + - `node ruoyi-ui/tests/unit/preliminary-check-summary-and-people.test.js` + +## 未包含内容 + +- 未调整风险人员总览接口返回结构 +- 未改动风险等级口径与统计逻辑 +- 未改动“命中模型涉及人员”区块的接口或交互 diff --git a/ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue b/ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue index b5978f0c..698f7a7e 100644 --- a/ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue +++ b/ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue @@ -10,7 +10,7 @@ 导出 - + @@ -24,7 +24,25 @@ - + + + + + {{ tag.ruleName }} + + + - + + {{ scope.row.actionLabel || "查看详情" }} @@ -37,6 +55,52 @@ @@ -88,4 +169,14 @@ export default { background: #f8fafc; color: #64748b; } + +.risk-point-tag-list { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.empty-text { + color: #94a3b8; +} diff --git a/ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js b/ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js index 0ca38925..e489bfb0 100644 --- a/ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js +++ b/ruoyi-ui/src/views/ccdiProject/components/detail/preliminaryCheck.mock.js @@ -22,6 +22,10 @@ export const mockOverviewData = { riskLevelType: "danger", modelCount: 3, riskPoint: "跨地域转账频繁交易", + riskPointTagList: [ + { ruleName: "跨地域转账", riskLevel: "HIGH" }, + { ruleName: "频繁交易", riskLevel: "HIGH" }, + ], actionLabel: "查看详情", }, { @@ -33,6 +37,10 @@ export const mockOverviewData = { riskLevelType: "warning", modelCount: 2, riskPoint: "多工资转入频繁交易", + riskPointTagList: [ + { ruleName: "多工资转入", riskLevel: "MEDIUM" }, + { ruleName: "频繁交易", riskLevel: "MEDIUM" }, + ], actionLabel: "查看详情", }, { @@ -44,6 +52,9 @@ export const mockOverviewData = { riskLevelType: "info", modelCount: 1, riskPoint: "频繁小额转账", + riskPointTagList: [ + { ruleName: "频繁小额转账", riskLevel: "LOW" }, + ], actionLabel: "查看详情", }, ], diff --git a/ruoyi-ui/tests/unit/preliminary-check-risk-people-hit-tags.test.js b/ruoyi-ui/tests/unit/preliminary-check-risk-people-hit-tags.test.js new file mode 100644 index 00000000..ccd838af --- /dev/null +++ b/ruoyi-ui/tests/unit/preliminary-check-risk-people-hit-tags.test.js @@ -0,0 +1,17 @@ +const assert = require("assert"); +const fs = require("fs"); +const path = require("path"); + +const source = fs.readFileSync( + path.resolve(__dirname, "../../src/views/ccdiProject/components/detail/RiskPeopleSection.vue"), + "utf8" +); + +[ + "risk-point-tag-list", + "scope.row.riskPointTagList", + "normalizeRiskPointTags", + ":type=\"mapRiskLevelToTagType(tag.riskLevel)\"", +].forEach((token) => assert(source.includes(token), token)); + +assert(!source.includes(''));