# 规则准确率按版本追踪 - 页面改动说明

## 文档信息

- 文档名称：规则准确率按版本追踪 - 页面改动说明
- 所属模块：全知平台 / 风控模块 / 风险规则 / 准确率分析
- 编写目的：说明规则详情页新增准确率分析Tab、新增全局规则准确率分析页面的改动内容，为前端开发提供指引
- 前置依赖：规则版本管理功能、疑点甄别功能

---

## 涉及页面

| 序号 | 页面文件 | 改动类型 | 说明 |
|------|----------|----------|------|
| 1 | `规则详情.html` | 修改 | 新增"准确率分析"Tab，含版本准确率卡片、趋势图、明细表 |
| 2 | `规则统计分析.html` | 修改 | 左侧菜单"运营管理"下新增"规则准确率分析"菜单入口 |
| 3 | `规则准确率分析.html` | **新增** | 全局规则准确率分析页面，含筛选、排行榜、趋势对比图 |

---

## 改动内容

### 1. `规则详情.html`

#### 1.1 新增"准确率分析"Tab按钮

**位置**：`ruleDetailTabs`（约 line 1032-1036），在"版本历史"Tab之后插入。

```html
<li class="nav-item" role="presentation">
    <button class="nav-link" id="accuracy-tab" data-bs-toggle="tab"
            data-bs-target="#accuracyPanel" type="button" role="tab">
        <i class="fa fa-bullseye" style="margin-right: 6px;"></i>准确率分析
    </button>
</li>
```

**显示条件**：仅规则已上线时显示该Tab。草稿/审核中规则隐藏。

```javascript
// loadRuleData() 中控制Tab显示
const accuracyTab = document.getElementById('accuracy-tab');
if (accuracyTab) {
    const isOnline = !!rule.basic.onlineTime;
    accuracyTab.parentElement.style.display = isOnline ? '' : 'none';
}
```

---

#### 1.2 新增"准确率分析"Tab面板

**位置**：`tab-content` 区域内，`versionPanel` 之后（约 line 1067 之后）。

```html
<!-- 准确率分析面板 -->
<div class="tab-pane fade" id="accuracyPanel" role="tabpanel">
    <div id="accuracyAnalysisContent">
        <!-- 由 renderAccuracyAnalysis(ruleCode) 动态渲染 -->
    </div>
</div>
```

---

#### 1.3 准确率分析面板内容结构

`renderAccuracyAnalysis(ruleCode)` 函数渲染以下内容：

```html
<div style="padding: 20px;">
    <!-- 顶部卡片区：4张等宽卡片 -->
    <div style="display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:24px;">
        <!-- 当前版本 -->
        <div class="kpi-card" style="border-left-color:#409EFF;">
            <div class="kpi-title">当前版本</div>
            <div class="kpi-value" style="font-size:28px;">V3</div>
        </div>
        <!-- 准确率 -->
        <div class="kpi-card" style="border-left-color:#67C23A;">
            <div class="kpi-title">准确率</div>
            <div class="kpi-value" style="font-size:28px;">78.5%</div>
        </div>
        <!-- 已确认疑点 -->
        <div class="kpi-card" style="border-left-color:#E6A23C;">
            <div class="kpi-title">已确认疑点</div>
            <div class="kpi-value" style="font-size:28px;">157</div>
        </div>
        <!-- 已排除疑点 -->
        <div class="kpi-card" style="border-left-color:#F56C6C;">
            <div class="kpi-title">已排除疑点</div>
            <div class="kpi-value" style="font-size:28px;">43</div>
        </div>
    </div>

    <!-- 版本准确率趋势图 -->
    <div class="content-card" style="margin-bottom:24px;">
        <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:16px;">
            <span style="font-size:15px; font-weight:500;">版本准确率趋势</span>
        </div>
        <canvas id="versionAccuracyChart" height="80"></canvas>
    </div>

    <!-- 各版本准确率明细表 -->
    <div class="content-card">
        <div style="font-size:15px; font-weight:500; margin-bottom:16px;">各版本准确率明细</div>
        <table class="table table-hover" style="font-size:13px;">
            <thead>
                <tr>
                    <th style="width:80px;">版本</th>
                    <th style="width:200px;">时间区间</th>
                    <th style="width:100px;">准确率</th>
                    <th style="width:80px;">已确认</th>
                    <th style="width:80px;">已排除</th>
                    <th style="width:80px;">疑点总数</th>
                </tr>
            </thead>
            <tbody id="accuracyDetailBody">
                <!-- 动态渲染 -->
            </tbody>
        </table>
    </div>
</div>
```

---

#### 1.4 准确率卡片样式

复用效能分析看板的 `.kpi-card` 样式，无需新增CSS。

准确率数值颜色规则：

```javascript
function getAccuracyColor(accuracy) {
    if (accuracy >= 70) return '#67C23A';  // 绿色
    if (accuracy >= 50) return '#E6A23C';  // 橙色
    return '#F56C6C';                       // 红色
}
```

---

#### 1.5 版本准确率趋势图

使用 Chart.js 折线图，X轴为版本号，Y轴为准确率。

```javascript
function renderVersionAccuracyChart(versions) {
    const ctx = document.getElementById('versionAccuracyChart').getContext('2d');
    const labels = versions.map(v => v.version);
    const data = versions.map(v => v.accuracy);
    const colors = data.map(v => getAccuracyColor(v));

    new Chart(ctx, {
        type: 'line',
        data: {
            labels: labels,
            datasets: [{
                label: '准确率',
                data: data,
                borderColor: '#409EFF',
                backgroundColor: 'rgba(64,158,255,0.1)',
                borderWidth: 2,
                pointRadius: 6,
                pointBackgroundColor: '#fff',
                pointBorderColor: '#409EFF',
                pointBorderWidth: 2,
                fill: true,
                tension: 0.3
            }]
        },
        options: {
            responsive: true,
            plugins: {
                tooltip: {
                    callbacks: {
                        afterLabel: function(context) {
                            const v = versions[context.dataIndex];
                            return `疑点总数: ${v.totalCount}\n时间区间: ${v.startTime} ~ ${v.endTime || '至今'}`;
                        }
                    }
                }
            },
            scales: {
                y: {
                    min: 0,
                    max: 100,
                    ticks: { callback: v => v + '%' }
                }
            }
        }
    });
}
```

---

#### 1.6 各版本准确率明细表渲染

```javascript
function renderAccuracyDetailTable(versions, currentVersion) {
    const tbody = document.getElementById('accuracyDetailBody');
    const sorted = [...versions].reverse(); // 从新到旧

    let html = '';
    for (const v of sorted) {
        const isCurrent = v.version === currentVersion;
        const rowStyle = isCurrent ? 'background:#ecf5ff;' : '';
        const versionBadge = isCurrent
            ? `<span style="...">${v.version}</span> <span class="badge" style="background:#409EFF;font-size:10px;">当前</span>`
            : `<span style="...">${v.version}</span>`;
        const accuracyColor = getAccuracyColor(v.accuracy);
        const timeRange = v.startTime + ' ~ ' + (v.endTime || '至今');

        html += `<tr style="${rowStyle}">
            <td>${versionBadge}</td>
            <td>${timeRange}</td>
            <td style="color:${accuracyColor}; font-weight:600;">${v.accuracy}%</td>
            <td>${v.confirmedCount}</td>
            <td>${v.excludedCount}</td>
            <td>${v.totalCount}</td>
        </tr>`;
    }
    tbody.innerHTML = html;
}
```

---

#### 1.7 JavaScript — Mock数据新增

在 `ruleDatabase` 中为已上线规则新增准确率相关数据：

```javascript
// 新增准确率数据结构（按规则编码索引）
const accuracyDataMap = {
    'GZ177019905698527': {
        currentVersion: 'V1',
        versions: [
            {
                version: 'V1',
                accuracy: 45.0,
                confirmedCount: 54,
                excludedCount: 66,
                totalCount: 120,
                startTime: '2025-12-01',
                endTime: null  // 当前版本
            }
        ]
    },
    'GZ1716607905340192': {
        currentVersion: 'V5',
        versions: [
            { version: 'V1', accuracy: 45.0, confirmedCount: 54, excludedCount: 66,
              totalCount: 120, startTime: '2025-12-29', endTime: '2026-01-06' },
            { version: 'V2', accuracy: 58.3, confirmedCount: 75, excludedCount: 54,
              totalCount: 129, startTime: '2026-01-06', endTime: '2026-01-15' },
            { version: 'V3', accuracy: 62.1, confirmedCount: 87, excludedCount: 53,
              totalCount: 140, startTime: '2026-01-15', endTime: '2026-01-20' },
            { version: 'V4', accuracy: 70.5, confirmedCount: 119, excludedCount: 50,
              totalCount: 169, startTime: '2026-01-20', endTime: '2026-02-10' },
            { version: 'V5', accuracy: 78.5, confirmedCount: 157, excludedCount: 43,
              totalCount: 200, startTime: '2026-02-10', endTime: null }
        ]
    }
};
```

---

#### 1.8 JavaScript — `renderAccuracyAnalysis(ruleCode)`

```javascript
function renderAccuracyAnalysis(ruleCode) {
    const container = document.getElementById('accuracyAnalysisContent');
    const data = accuracyDataMap[ruleCode];

    if (!data || !data.versions || data.versions.length === 0) {
        container.innerHTML = `
            <div style="text-align:center; padding:60px 0; color:#909399;">
                <i class="fa fa-bullseye" style="font-size:36px; margin-bottom:12px; display:block;"></i>
                <p>暂无准确率数据。</p>
            </div>`;
        return;
    }

    const currentV = data.versions.find(v => v.version === data.currentVersion)
                     || data.versions[data.versions.length - 1];

    // 渲染卡片
    // ...（HTML结构见1.3节）

    // 渲染趋势图
    renderVersionAccuracyChart(data.versions);

    // 渲染明细表
    renderAccuracyDetailTable(data.versions, data.currentVersion);
}
```

---

#### 1.9 JavaScript — 修改 `loadRuleData()`

在 `loadRuleData()` 末尾（版本历史渲染之后）增加：

```javascript
// 渲染准确率分析Tab
renderAccuracyAnalysis(code);
```

---

#### 1.10 Tab切换联动

当用户切换到"准确率分析"Tab时，确保图表正确渲染（Canvas需要在可见状态下才能正确获取尺寸）：

```javascript
document.getElementById('accuracy-tab').addEventListener('shown.bs.tab', function () {
    const code = currentRuleCode;
    // 重新渲染图表以适应容器宽度
    const canvas = document.getElementById('versionAccuracyChart');
    if (canvas && canvas.__chart) {
        canvas.__chart.resize();
    }
});
```

---

### 2. `规则统计分析.html`

#### 2.1 左侧菜单新增入口

**位置**：运营管理菜单下（约 line 234），在"风控效能分析"之后、"规则分组管理"之前。

```html
<li class="tree-node level-3"><a href="规则准确率分析.html">规则准确率分析</a></li>
```

**改动后的运营管理菜单顺序**：

1. 规则统计分析
2. 疑点统计分析
3. 风控效能分析
4. **规则准确率分析** ← 新增
5. 规则分组管理
6. 风险主题管理
7. 消息模板管理
8. 已排除疑点汇总

> 注：其他含运营管理菜单的页面（如效能分析看板.html、疑点统计分析.html等）也需同步新增此菜单项，保持菜单一致性。

---

### 3. `规则准确率分析.html`（新增页面）

#### 3.1 页面入口

风控运营管理 → 规则准确率分析

#### 3.2 页面结构

```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>规则准确率分析 - 全知业务数字化治理平台</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="common-styles.css">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <style>
        /* 复用效能分析看板的基础样式 */
        /* ... */
    </style>
</head>
<body>
    <!-- 顶部导航栏（复用） -->
    <!-- 左侧菜单（复用，运营管理展开） -->
    <!-- 主内容区 -->
    <div class="main-content">
        <!-- 页面标题 -->
        <div class="page-header">
            <div class="page-header-left">
                <h2>规则准确率分析</h2>
                <span style="color:#909399; font-size:13px;">
                    展示所有规则的准确率排行与版本趋势对比
                </span>
            </div>
        </div>

        <!-- 筛选区 -->
        <div class="filter-section">
            <div class="filter-row">
                <div class="filter-item">
                    <label>规则类型：</label>
                    <select class="form-select form-select-sm" style="width:120px;" id="filterRuleType">
                        <option value="">全部</option>
                        <option value="AI规则">AI规则</option>
                        <option value="普通规则">普通规则</option>
                    </select>
                </div>
                <div class="filter-item">
                    <label>业务域：</label>
                    <select class="form-select form-select-sm" style="width:140px;" id="filterDomain">
                        <option value="">全部</option>
                        <!-- 动态加载 -->
                    </select>
                </div>
                <div class="filter-item">
                    <label>准确率区间：</label>
                    <select class="form-select form-select-sm" style="width:140px;" id="filterAccuracy">
                        <option value="">全部</option>
                        <option value="high">高（≥70%）</option>
                        <option value="medium">中（50%~70%）</option>
                        <option value="low">低（&lt;50%）</option>
                        <option value="none">无数据</option>
                    </select>
                </div>
                <div class="filter-item">
                    <div class="search-box">
                        <i class="fa fa-search search-icon"></i>
                        <input type="text" class="form-control form-control-sm" style="width:180px;" id="filterKeyword" placeholder="搜索规则名称/编号">
                    </div>
                </div>
                <button class="btn btn-primary btn-sm" id="btnSearch">
                    <i class="fa fa-search"></i> 查询
                </button>
                <button class="btn btn-outline-primary btn-sm" id="btnReset">
                    <i class="fa fa-refresh"></i> 重置
                </button>
            </div>
        </div>

        <!-- 准确率分布摘要（可点击筛选） -->
        <div class="distribution-bar" id="distributionBar">
            <!-- 由JS动态渲染：高(≥70%) | 中(50%-70%) | 低(<50%) | 无数据 -->
        </div>

        <!-- 规则准确率排行榜 -->
        <div class="content-card" style="padding:0;">
            <div style="padding:16px 20px 0;">
                <div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:12px;">
                    <span class="chart-title"><i class="fa fa-trophy me-2" style="color:var(--color-warning);"></i>规则准确率排行榜</span>
                    <span style="font-size:var(--font-sm); color:var(--text-secondary);">共 <span id="totalCount">0</span> 条规则</span>
                </div>
            </div>
            <table class="data-table" id="rankingTable">
                <thead>
                    <tr>
                        <th style="width:60px; text-align:center;">排名</th>
                        <th style="min-width:200px;">规则名称</th>
                        <th style="width:140px;">规则编号</th>
                        <th style="width:80px;">规则类型</th>
                        <th style="width:80px;">当前版本</th>
                        <th style="width:100px;">准确率</th>
                        <th style="width:80px;">已确认</th>
                        <th style="width:80px;">已排除</th>
                        <th style="width:90px; text-align:center;">操作</th>
                    </tr>
                </thead>
                <tbody id="rankingBody">
                    <!-- 动态渲染 -->
                </tbody>
            </table>
            <!-- 分页（支持每页条数切换） -->
            <div class="pagination-bar" id="paginationArea" style="padding:0 20px 16px;">
                <!-- 动态渲染：每页选择器 + 页码 -->
            </div>
        </div>

        <!-- 准确率趋势对比 -->
        <div class="content-card">
            <div class="chart-header">
                <div class="chart-title"><i class="fa fa-line-chart me-2" style="color:var(--color-primary);"></i>准确率趋势对比</div>
                <div style="font-size:var(--font-xs); color:var(--text-secondary);">最多选择5条规则进行对比</div>
            </div>
            <!-- 已选规则标签 + 搜索框 -->
            <div style="display:flex; gap:12px; align-items:flex-start; margin-bottom:16px;">
                <div style="flex:1;">
                    <div class="selected-tags" id="selectedTags">
                        <!-- 已选规则标签，或空状态提示 -->
                    </div>
                </div>
                <div style="width:240px; position:relative;">
                    <div class="search-box">
                        <i class="fa fa-search search-icon"></i>
                        <input type="text" class="form-control form-control-sm" id="compareSearch" placeholder="搜索规则添加到对比...">
                    </div>
                    <div id="searchDropdown" style="display:none; position:absolute; z-index:100; ..."><!-- 搜索结果 --></div>
                </div>
            </div>
            <canvas id="comparisonChart" height="100"></canvas>
            <div id="comparisonEmpty" style="text-align:center; padding:40px 0; color:var(--text-secondary);">
                <i class="fa fa-line-chart" style="font-size:36px; margin-bottom:12px; display:block;"></i>
                <p>请选择要对比的规则（最多5条）</p>
                <p style="font-size:var(--font-xs); color:var(--text-placeholder);">从排行榜点击"加入对比"，或使用上方搜索框</p>
            </div>
        </div>
    </div>
</body>
</html>
```

---

#### 3.3 左侧菜单

运营管理菜单完整结构（与其他页面保持一致）：

```html
<li class="tree-node level-3"><a href="规则统计分析.html">规则统计分析</a></li>
<li class="tree-node level-3"><a href="疑点统计分析.html">疑点统计分析</a></li>
<li class="tree-node level-3"><a href="效能分析看板.html">风控效能分析</a></li>
<li class="tree-node level-3 active"><a href="规则准确率分析.html">规则准确率分析</a></li>
<li class="tree-node level-3"><a href="规则分组管理.html">规则分组管理</a></li>
<li class="tree-node level-3"><a href="主题与维度管理.html">风险主题管理</a></li>
<li class="tree-node level-3"><a href="消息模板管理.html">消息模板管理</a></li>
<li class="tree-node level-3"><a href="已排除疑点汇总.html">已排除疑点汇总</a></li>
```

当前页面菜单项高亮：`active` 类加在"规则准确率分析"上。

---

#### 3.4 准确率排行榜渲染

排行榜每行新增"加入对比"操作列，用于向趋势图添加规则。

```javascript
function renderRankingTable() {
    const tbody = document.getElementById('rankingBody');
    document.getElementById('totalCount').textContent = filteredData.length;
    // ...分页逻辑...

    pageData.forEach((item, index) => {
        // ...排名、准确率颜色、类型标签渲染...

        // "加入对比"按钮状态判断
        const isInCompare = selectedCompareRules.some(r => r.ruleId === item.ruleId);
        let compareBtn = '';
        if (isInCompare) {
            compareBtn = '<button class="btn-compare added" disabled><i class="fa fa-check"></i> 已加入</button>';
        } else if (item.accuracy === null) {
            compareBtn = '<button class="btn-compare" disabled><i class="fa fa-plus"></i> 对比</button>';
        } else if (selectedCompareRules.length >= 5) {
            compareBtn = '<button class="btn-compare" disabled title="已达上限5条"><i class="fa fa-plus"></i> 对比</button>';
        } else {
            compareBtn = '<button class="btn-compare" onclick="addToCompare(\'' + item.ruleId + '\')"><i class="fa fa-plus"></i> 对比</button>';
        }

        html += '<tr>';
        // ...排名、规则名称链接、编号、类型、版本、准确率、已确认、已排除...
        html += '<td style="text-align:center;">' + compareBtn + '</td>';
        html += '</tr>';
    });
}
```

**分页增强**：支持"每页显示"选择器（10/20/50/全部），默认20条。超过7页时省略中间页码。

---

#### 3.5 趋势对比图 — 规则选择方式

**交互流程**：

1. **排行榜添加**：用户点击排行榜某行的"加入对比"按钮 → 该规则添加到 `selectedCompareRules` 数组 → 按钮变为"已加入" → 已选标签区更新 → 趋势图重新渲染
2. **搜索框添加**：用户在趋势图区域搜索框输入关键词 → **实时搜索**（input事件，无需回车）→ 下拉匹配结果每行显示"+ 对比"按钮 → 点击按钮添加 → 搜索框清空、下拉收起
3. **移除规则**：点击已选标签的×按钮 → 从 `selectedCompareRules` 移除 → 排行榜按钮恢复 → 趋势图重新渲染
4. **清空所有**：点击"清空"标签 → 清空 `selectedCompareRules` → 所有排行榜按钮恢复

**搜索框交互细节**：
- 输入即搜索，绑定 `input` 事件
- 搜索范围：规则名称 + 规则编号
- 排除已选规则和无准确率数据的规则
- 每行显示：规则名称（上方）+ 规则编号（下方）+ "+ 对比"按钮（右侧）
- 最多显示8条匹配结果
- 点击"+ 对比"按钮后，搜索框清空、下拉收起
- 点击页面其他区域自动收起下拉（document click事件监听）

**已选规则标签展示**：
- 每个标签：彩色圆点 + 规则名称 + ×删除按钮
- 颜色与趋势图折线颜色一致（5色循环：蓝、绿、橙、红、灰）
- 末尾显示虚线边框"清空"标签，点击一键移除所有

**趋势图配置要点**：
- `spanGaps: true`：折线跳过null值保持连续，避免断裂
- 版本标签插件：自定义Chart.js插件，在每个数据点上方绘制版本号（V1、V2等），颜色与折线一致
- Tooltip格式：`规则名称 [版本号]: 准确率%`

**状态管理**：
```javascript
let selectedCompareRules = []; // 已选对比规则数组

function addToCompare(ruleId) {
    if (selectedCompareRules.length >= 5) return;
    const rule = allRulesAccuracy.find(r => r.ruleId === ruleId);
    if (!rule || rule.accuracy === null) return;
    selectedCompareRules.push(rule);
    renderSelectedTags();
    renderComparisonChart();
    renderRankingTable(); // 刷新按钮状态
}
```

---

#### 3.6 筛选与交互

**新增关键词搜索**：筛选区增加"搜索规则名称/编号"输入框，支持回车触发查询。

**准确率分布摘要**：筛选区下方新增色块摘要栏，展示各准确率区间规则数量。点击某区间自动联动筛选。**分布摘要的统计独立于准确率区间筛选**——只根据规则类型、业务域、关键词三个条件过滤，确保无论选中哪个区间，四个色块的数字始终保持不变。

```javascript
// 分布摘要渲染（独立于准确率筛选）
function renderDistribution() {
    const ruleType = document.getElementById('filterRuleType').value;
    const domain = document.getElementById('filterDomain').value;
    const keyword = document.getElementById('filterKeyword').value.trim().toLowerCase();

    const counts = { high: 0, medium: 0, low: 0, none: 0 };
    allRulesAccuracy.forEach(item => {
        if (ruleType && item.ruleType !== ruleType) return;
        if (domain && item.businessDomain !== domain) return;
        if (keyword && !item.ruleName.toLowerCase().includes(keyword) && !item.ruleCode.toLowerCase().includes(keyword)) return;
        counts[getAccuracyLevel(item.accuracy)]++;
    });
    // 渲染4个色块：高(绿)、中(橙)、低(红)、无数据(灰)
}

// 点击分布摘要联动筛选
function filterByDistribution(level) {
    if (activeDistributionLevel === level) {
        activeDistributionLevel = null; // 取消筛选
        document.getElementById('filterAccuracy').value = '';
    } else {
        activeDistributionLevel = level;
        document.getElementById('filterAccuracy').value = level;
    }
    applyFilters();
}

// 查询按钮（含关键词）
document.getElementById('btnSearch').addEventListener('click', applyFilters);

function applyFilters() {
    const ruleType = document.getElementById('filterRuleType').value;
    const domain = document.getElementById('filterDomain').value;
    const accuracyLevel = document.getElementById('filterAccuracy').value;
    const keyword = document.getElementById('filterKeyword').value.trim().toLowerCase();

    filteredData = allRulesAccuracy.filter(item => {
        if (ruleType && item.ruleType !== ruleType) return false;
        if (domain && item.businessDomain !== domain) return false;
        if (accuracyLevel && getAccuracyLevel(item.accuracy) !== accuracyLevel) return false;
        if (keyword && !item.ruleName.toLowerCase().includes(keyword) && !item.ruleCode.toLowerCase().includes(keyword)) return false;
        return true;
    });
    // 排序、渲染...
}
```

---

#### 3.7 Mock数据

```javascript
const allRulesAccuracy = [
    {
        ruleId: 'GZ1716607905340192',
        ruleName: '投标文件围标识别',
        ruleCode: 'CJ-001-01',
        ruleType: 'AI规则',
        businessDomain: '供应链域',
        currentVersion: 'V5',
        accuracy: 78.5,
        confirmedCount: 157,
        excludedCount: 43,
        versions: [
            { version: 'V1', accuracy: 45.0, publishTime: '2025-12-29' },
            { version: 'V2', accuracy: 58.3, publishTime: '2026-01-06' },
            { version: 'V3', accuracy: 62.1, publishTime: '2026-01-15' },
            { version: 'V4', accuracy: 70.5, publishTime: '2026-01-20' },
            { version: 'V5', accuracy: 78.5, publishTime: '2026-02-10' }
        ]
    },
    {
        ruleId: 'GZ177019905698527',
        ruleName: '差旅费伙食补助人数校验',
        ruleCode: 'CW-002-01',
        ruleType: '普通规则',
        businessDomain: '财务域',
        currentVersion: 'V1',
        accuracy: 65.0,
        confirmedCount: 78,
        excludedCount: 42,
        versions: [
            { version: 'V1', accuracy: 65.0, publishTime: '2026-01-15' }
        ]
    },
    {
        ruleId: 'GZ1723456789012345',
        ruleName: '合同审批流程缺失检测',
        ruleCode: 'CW-003-01',
        ruleType: 'AI规则',
        businessDomain: '合同管理域',
        currentVersion: 'V3',
        accuracy: 52.3,
        confirmedCount: 47,
        excludedCount: 43,
        versions: [
            { version: 'V1', accuracy: 38.0, publishTime: '2026-02-01' },
            { version: 'V2', accuracy: 45.5, publishTime: '2026-03-10' },
            { version: 'V3', accuracy: 52.3, publishTime: '2026-04-20' }
        ]
    },
    {
        ruleId: 'GZ1734567890123456',
        ruleName: '供应商资质过期预警',
        ruleCode: 'CJ-004-01',
        ruleType: '普通规则',
        businessDomain: '供应链域',
        currentVersion: 'V2',
        accuracy: 82.0,
        confirmedCount: 82,
        excludedCount: 18,
        versions: [
            { version: 'V1', accuracy: 70.0, publishTime: '2026-01-20' },
            { version: 'V2', accuracy: 82.0, publishTime: '2026-03-05' }
        ]
    },
    {
        ruleId: 'GZ1745678901234567',
        ruleName: '报销金额异常检测',
        ruleCode: 'CW-005-01',
        ruleType: 'AI规则',
        businessDomain: '财务域',
        currentVersion: 'V1',
        accuracy: null,  // 无数据
        confirmedCount: 0,
        excludedCount: 0,
        versions: []
    }
];
```

---

## CSS样式改动

新增页面 `规则准确率分析.html` 复用 `common-styles.css` 和效能分析看板的已有样式，无需新增CSS变量或组件样式。

如需微调，仅增加以下辅助样式：

```css
/* 排行榜排名序号 */
.rank-number {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    font-size: 12px;
    font-weight: 600;
}
.rank-top1 { background: #FFD700; color: #fff; }
.rank-top2 { background: #C0C0C0; color: #fff; }
.rank-top3 { background: #CD7F32; color: #fff; }

/* 规则类型标签 */
.rule-type-tag {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 12px;
    font-weight: 500;
}
.rule-type-ai { background: #ecf5ff; color: #409EFF; }
.rule-type-normal { background: #f0f9eb; color: #67C23A; }

/* 准确率颜色 */
.accuracy-high { color: #67C23A; font-weight: 600; }
.accuracy-medium { color: #E6A23C; font-weight: 600; }
.accuracy-low { color: #F56C6C; font-weight: 600; }
.accuracy-none { color: #909399; }
```

---

## 接口依赖

| 接口 | 方法 | 说明 |
|------|------|------|
| `/core/riskRule/versionAccuracy` | GET | 单规则各版本准确率（参数：ruleId） |
| `/core/riskRule/accuracyRanking` | GET | 全局准确率排行（参数：ruleType, businessDomain, accuracyLevel, pageNum, pageSize） |
| `/core/riskRule/accuracyTrend` | GET | 多规则趋势对比（参数：ruleIds） |

---

## 测试要点

### 规则详情页 — 准确率分析Tab

| 测试项 | 说明 |
|--------|------|
| Tab显示条件 | 已上线规则显示该Tab，草稿/审核中规则隐藏 |
| 卡片数据 | 当前版本准确率、已确认数、已排除数正确 |
| 趋势图渲染 | 各版本数据点正确，当前版本高亮 |
| 趋势图交互 | 悬停显示tooltip（版本号、准确率、疑点总数、时间区间） |
| 明细表数据 | 各版本行数据准确，时间区间计算正确 |
| 当前版本行 | 浅蓝背景 + "当前"标记 |
| 准确率颜色 | ≥70%绿色、50%~70%橙色、<50%红色 |
| 无数据状态 | 无准确率数据时显示空状态提示 |
| 仅1个版本 | 单个数据点 + 提示"暂无历史版本可对比" |

### 全局规则准确率分析页

| 测试项 | 说明 |
|--------|------|
| 菜单入口 | 左侧菜单"规则准确率分析"入口正常，与其他页面菜单一致 |
| 筛选功能 | 规则类型、业务域、准确率区间、关键词搜索筛选生效 |
| 准确率分布摘要 | 各区间数量统计正确，点击可联动筛选，再次点击取消 |
| 分布摘要独立性 | 点击"中"后，高/低/无数据数字保持不变 |
| 排行榜排序 | 按准确率降序，无数据排最后 |
| 规则编号格式 | 显示为GZ+10位数字（如GZ1716607905） |
| 规则名称跳转 | 点击规则名称跳转至规则详情页 |
| 准确率颜色 | 排行榜中准确率颜色标识正确 |
| 加入对比按钮 | 可添加→点击后变"已加入"；无数据→禁用；达到5条→禁用 |
| 从排行榜添加 | 点击"加入对比"后趋势图自动更新 |
| 搜索框实时搜索 | 输入即搜索（input事件），无需回车 |
| 搜索结果按钮 | 每行显示"+ 对比"按钮，点击后添加 |
| 已选标签 | 标签显示正确，可单个删除或一键清空 |
| 折线连续性 | spanGaps=true，折线跳过null值保持连续，无断裂点 |
| 版本标签 | 数据点上方显示版本号（V1、V2等），颜色与折线一致 |
| Tooltip格式 | 显示"规则名称 [版本号]: 准确率%" |
| 时间轴对齐 | 不同规则版本按发布时间在X轴上正确定位 |
| 空状态 | 未选择规则时显示引导提示 |
| 分页 | 分页功能正常，支持每页10/20/50/全部切换 |
| 100+规则场景 | 排行榜分页正常，搜索响应流畅 |

### 菜单一致性

| 测试项 | 说明 |
|--------|------|
| 菜单顺序 | 运营管理下菜单顺序一致：规则统计分析 → 疑点统计分析 → 风控效能分析 → 规则准确率分析 → 规则分组管理 → 风险主题管理 → 消息模板管理 → 已排除疑点汇总 |
| 高亮状态 | 当前页面菜单项正确高亮 |
