实现结果总览排除可疑预警
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
# 项目结果总览排除可疑前端实施计划
|
||||
|
||||
## 1. 目标
|
||||
|
||||
在项目分析详情的异常明细中提供轻量“排除可疑”操作。用户确认排除后,页面重新请求后端数据,展示过滤后的风险人员、模型预警次数、命中人数与异常明细。
|
||||
|
||||
本阶段不做恢复入口,不做排除记录列表。
|
||||
|
||||
## 2. 涉及范围
|
||||
|
||||
前端模块:
|
||||
|
||||
```text
|
||||
ruoyi-ui
|
||||
```
|
||||
|
||||
重点文件:
|
||||
|
||||
1. `ruoyi-ui/src/api/ccdi/projectOverview.js`
|
||||
2. `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisAbnormalTab.vue`
|
||||
3. `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue`
|
||||
4. `ruoyi-ui/src/views/ccdiProject/components/detail/ExternalPersonDetailDialog.vue`
|
||||
5. `ruoyi-ui/src/views/ccdiProject/components/detail/PreliminaryCheck.vue`
|
||||
6. `ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue`
|
||||
7. `ruoyi-ui/src/views/ccdiProject/components/detail/RiskModelSection.vue`
|
||||
8. `ruoyi-ui/src/views/ccdiProject/components/detail/RiskDetailSection.vue`
|
||||
|
||||
## 3. API 封装
|
||||
|
||||
在 `projectOverview.js` 新增:
|
||||
|
||||
```js
|
||||
export function excludeOverviewRisk(data) {
|
||||
return request({
|
||||
url: '/ccdi/project/overview/risk-exclusions',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
请求字段:
|
||||
|
||||
```js
|
||||
{
|
||||
projectId,
|
||||
exclusionType,
|
||||
ruleCode,
|
||||
bankStatementId,
|
||||
staffIdCard,
|
||||
excludeReason
|
||||
}
|
||||
```
|
||||
|
||||
## 4. UI 设计
|
||||
|
||||
### 4.1 流水异常明细
|
||||
|
||||
位置:
|
||||
|
||||
```text
|
||||
ProjectAnalysisAbnormalTab.vue > BANK_STATEMENT 表格 > 异常标签列
|
||||
```
|
||||
|
||||
展示方式:
|
||||
|
||||
1. 每个异常标签保持 `el-tag`。
|
||||
2. 标签右侧增加小号文字按钮“排除可疑”。
|
||||
3. 按钮与标签在同一行内,不增加大操作列。
|
||||
|
||||
交互:
|
||||
|
||||
1. 点击“排除可疑”。
|
||||
2. 打开确认弹窗。
|
||||
3. 用户填写排除原因。
|
||||
4. 确认后调用后端接口。
|
||||
|
||||
提交参数:
|
||||
|
||||
```js
|
||||
{
|
||||
projectId,
|
||||
exclusionType: 'STATEMENT',
|
||||
ruleCode: tag.ruleCode,
|
||||
bankStatementId: row.bankStatementId,
|
||||
staffIdCard: resolvePersonIdCard(),
|
||||
excludeReason
|
||||
}
|
||||
```
|
||||
|
||||
其中 `staffIdCard` 仅作为上下文传递,后端流水型以 `bankStatementId` 为主。
|
||||
|
||||
### 4.2 对象异常明细
|
||||
|
||||
位置:
|
||||
|
||||
```text
|
||||
ProjectAnalysisAbnormalTab.vue > OBJECT 卡片右上角
|
||||
```
|
||||
|
||||
展示方式:
|
||||
|
||||
1. 卡片右上角增加小号按钮“排除可疑”。
|
||||
2. 样式仿照现有“加入证据库”按钮。
|
||||
3. 不新增恢复按钮。
|
||||
|
||||
提交参数:
|
||||
|
||||
```js
|
||||
{
|
||||
projectId,
|
||||
exclusionType: 'OBJECT',
|
||||
ruleCode: item.ruleCode || item.modelCode,
|
||||
staffIdCard: resolvePersonIdCard(),
|
||||
excludeReason
|
||||
}
|
||||
```
|
||||
|
||||
实施时需要确保对象异常记录保留真实 `ruleCode`。如果当前对象卡片只带 `modelCode`,前后端需补齐 `ruleCode` 字段,不能用 `modelCode` 替代规则编码。
|
||||
|
||||
## 5. 确认弹窗
|
||||
|
||||
使用 Element UI 对话框或 `$prompt`。
|
||||
|
||||
推荐文案:
|
||||
|
||||
流水型:
|
||||
|
||||
```text
|
||||
确认将当前流水的“{规则名称}”标记为排除可疑吗?
|
||||
该操作只影响当前流水上的这一个规则标签。
|
||||
```
|
||||
|
||||
对象型:
|
||||
|
||||
```text
|
||||
确认将“{人员姓名}”的“{规则名称}”标记为排除可疑吗?
|
||||
该操作只影响当前人员的这一个规则预警。
|
||||
```
|
||||
|
||||
输入框:
|
||||
|
||||
```text
|
||||
请输入排除原因
|
||||
```
|
||||
|
||||
校验:
|
||||
|
||||
1. 原因不能为空。
|
||||
2. 原因长度不超过 1000。
|
||||
|
||||
## 6. 刷新策略
|
||||
|
||||
排除成功后不做前端本地假删除,统一通知父组件刷新。
|
||||
|
||||
事件链路:
|
||||
|
||||
1. `ProjectAnalysisAbnormalTab` 调用接口成功。
|
||||
2. 向上 emit `risk-excluded`。
|
||||
3. `ProjectAnalysisDialog` 接收后重新加载当前人员详情,并继续向上 emit。
|
||||
4. `PreliminaryCheck` 接收后重新加载结果总览数据。
|
||||
5. 子组件因 props 更新重新加载风险人员、模型卡片、命中人员与涉疑交易。
|
||||
|
||||
外部人员详情:
|
||||
|
||||
1. `ExternalPersonDetailDialog` 接收 `risk-excluded` 后重新加载外部人员流水。
|
||||
2. 同时通知 `PreliminaryCheck` 刷新总览数据。
|
||||
|
||||
需要刷新的数据:
|
||||
|
||||
1. 风险人员列表。
|
||||
2. 外部人员预警列表。
|
||||
3. 风险模型卡片。
|
||||
4. 风险模型命中人员。
|
||||
5. 涉疑交易明细。
|
||||
6. 当前弹窗异常明细。
|
||||
|
||||
## 7. 页面状态
|
||||
|
||||
### 7.1 操作中
|
||||
|
||||
点击确认后按钮进入 loading 或禁用状态,避免重复提交。
|
||||
|
||||
### 7.2 成功
|
||||
|
||||
提示:
|
||||
|
||||
```text
|
||||
排除成功
|
||||
```
|
||||
|
||||
随后刷新页面数据。
|
||||
|
||||
### 7.3 失败
|
||||
|
||||
提示后端错误信息:
|
||||
|
||||
```text
|
||||
排除失败,请稍后重试
|
||||
```
|
||||
|
||||
不修改当前页面数据。
|
||||
|
||||
### 7.4 只读项目
|
||||
|
||||
如果 `canOperate=false`,不展示“排除可疑”按钮,或展示禁用态并提示当前项目仅可查看。
|
||||
|
||||
## 8. 数据要求
|
||||
|
||||
前端需要从后端获取或透传以下字段:
|
||||
|
||||
流水标签:
|
||||
|
||||
1. `ruleCode`
|
||||
2. `ruleName`
|
||||
3. `bankStatementId`
|
||||
|
||||
对象卡片:
|
||||
|
||||
1. `ruleCode`
|
||||
2. `ruleName`
|
||||
3. `modelCode`
|
||||
4. `modelName`
|
||||
5. `reasonDetail`
|
||||
|
||||
人员上下文:
|
||||
|
||||
1. `projectId`
|
||||
2. `idNo` 或 `staffIdCard`
|
||||
3. `name` 或 `staffName`
|
||||
|
||||
如果对象异常卡片缺少 `ruleCode`,应先补齐数据映射,再展示排除按钮。
|
||||
|
||||
## 9. 测试计划
|
||||
|
||||
### 9.1 Node 环境
|
||||
|
||||
前端命令执行前按仓库规则:
|
||||
|
||||
```bash
|
||||
cd ruoyi-ui
|
||||
nvm use
|
||||
node -v
|
||||
npm -v
|
||||
where node
|
||||
where npm
|
||||
```
|
||||
|
||||
如果 Node 14.21.3 缺少 `npm.cmd`,切换:
|
||||
|
||||
```bash
|
||||
nvm use 22.22.3
|
||||
```
|
||||
|
||||
并在实施记录中说明实际版本。
|
||||
|
||||
### 9.2 构建验证
|
||||
|
||||
```bash
|
||||
npm run build:prod
|
||||
```
|
||||
|
||||
### 9.3 浏览器验证
|
||||
|
||||
完成页面开发后,使用 `browser-use` 打开真实业务页面验证,不打开 prototype。
|
||||
|
||||
验证路径:
|
||||
|
||||
1. 登录系统。
|
||||
2. 进入项目详情。
|
||||
3. 打开结果总览。
|
||||
4. 打开某个风险人员项目分析详情。
|
||||
5. 对流水标签执行“排除可疑”。
|
||||
6. 确认弹窗填写原因。
|
||||
7. 验证异常明细、模型统计、风险人员数据刷新。
|
||||
8. 刷新浏览器,验证排除仍生效。
|
||||
9. 对对象型“年流水交易额超限”执行同样验证。
|
||||
|
||||
### 9.4 关键用例
|
||||
|
||||
1. 单笔流水多标签,只排除其中一个标签。
|
||||
2. 对象型单预警人员,排除后人员从风险列表消失。
|
||||
3. 对象型多预警人员,排除后人员保留但标签和次数减少。
|
||||
4. 只读项目不显示或禁用按钮。
|
||||
5. 排除原因为空时不能提交。
|
||||
|
||||
## 10. 不做事项
|
||||
|
||||
1. 不做恢复入口。
|
||||
2. 不做排除记录管理页。
|
||||
3. 不使用浏览器本地存储。
|
||||
4. 不新增批量排除。
|
||||
|
||||
Reference in New Issue
Block a user