# 鉴权服务器与报表能量显示迁移说明

更新时间：2026-06-25

这份文档记录两项未必已经提交到仓库的手工修改，后续迁移到另一个版本项目时按这里的内容对照修改。

## 1. 鉴权服务器地址

新的鉴权/API 服务器地址：

```text
http://8.141.12.31:80/api/v1/
```

迁移时检查启动项目配置文件：

```text
Txgy.EWS.Client.Start/App.config
```

确认 `api_domain` 使用新地址：

```xml
<add key="api_domain" value="http://8.141.12.31:80/api/v1/" />
```

登录接口仍按现有代码拼接：

```text
{api_domain}login/login
```

也就是：

```text
http://8.141.12.31:80/api/v1/login/login
```

注意：WPF 编译后运行时实际读取的是输出目录中的 `Txgy.EWS.Client.Start.exe.config`。如果只改源码 `App.config`，需要重新编译，确保输出配置同步更新。

## 2. 报表页能量显示

目标：在报表页面查询结果区域显示：

- 事件总数
- 中等能量事件数
- 总能量
- 平均能量
- 最大能量

涉及文件：

```text
Txgy.EWS.Client.PageModule/ViewModels/ReportViewModel.cs
Txgy.EWS.Client.PageModule/Views/ReportView.xaml
```

### 2.1 ReportViewModel 增加绑定属性

在 `SearchCount` 属性附近增加三个属性：

```csharp
private double _totalEnergy = 0;

public double TotalEnergy
{
    get { return _totalEnergy; }
    set
    {
        SetProperty(ref _totalEnergy, value);
    }
}

private double _averageEnergy = 0;

public double AverageEnergy
{
    get { return _averageEnergy; }
    set
    {
        SetProperty(ref _averageEnergy, value);
    }
}

private double _maxEnergy = 0;

public double MaxEnergy
{
    get { return _maxEnergy; }
    set
    {
        SetProperty(ref _maxEnergy, value);
    }
}
```

### 2.2 查询后更新能量统计

在 `SearchEvents(...)` 方法中，查询结果列表全部构建完成后，原来通常会有：

```csharp
SearchCount = results.Count;
return results;
```

改成：

```csharp
SearchCount = results.Count;
UpdateEnergyStats(results);
return results;
```

然后在 `SearchEvents(...)` 方法后增加：

```csharp
private void UpdateEnergyStats(List<GridItemEventResult> results)
{
    if (results == null || results.Count == 0)
    {
        TotalEnergy = 0;
        AverageEnergy = 0;
        MaxEnergy = 0;
        return;
    }

    TotalEnergy = Math.Round(results.Sum(rs => rs.Energy), 2);
    AverageEnergy = Math.Round(results.Average(rs => rs.Energy), 2);
    MaxEnergy = Math.Round(results.Max(rs => rs.Energy), 2);
}
```

前提：`ReportViewModel.cs` 已经有 `using System.Linq;` 和 `using System;`。当前项目已有这两个引用。

### 2.3 ReportView.xaml 增加显示区域

原页面查询按钮区域下方已有“事件总数 / 中等能量事件”显示。迁移时可以把那段替换为下面这段，或者在原有区域后追加三个能量字段。

推荐替换片段：

```xml
<StackPanel Grid.Row="1"
            Grid.ColumnSpan="3"
            VerticalAlignment="Center"
            Orientation="Horizontal">
    <TextBlock VerticalAlignment="Center"
               Text="事件总数："
               FontSize="16" />
    <TextBlock VerticalAlignment="Center"
               d:Text="11142"
               Foreground="Black"
               Text="{Binding SearchCount}"
               FontSize="16" />
    <TextBlock Margin="10,0,0,0"
               Text="中等能量事件："
               FontSize="16" />
    <TextBlock d:Text="1000"
               Foreground="Black"
               FontSize="16"
               Text="{Binding MiddleEventCount}" />
    <TextBlock Margin="20,0,0,0"
               Text="总能量："
               FontSize="16" />
    <TextBlock Foreground="Black"
               FontSize="16"
               FontWeight="SemiBold"
               Text="{Binding TotalEnergy, StringFormat={}{0:F0}J}" />
    <TextBlock Margin="20,0,0,0"
               Text="平均能量："
               FontSize="16" />
    <TextBlock Foreground="Black"
               FontSize="16"
               FontWeight="SemiBold"
               Text="{Binding AverageEnergy, StringFormat={}{0:F0}J}" />
    <TextBlock Margin="20,0,0,0"
               Text="最大能量："
               FontSize="16" />
    <TextBlock Foreground="Black"
               FontSize="16"
               FontWeight="SemiBold"
               Text="{Binding MaxEnergy, StringFormat={}{0:F0}J}" />
</StackPanel>
```

如果目标版本页面布局空间不足，可以使用 `WrapPanel` 避免文字挤出：

```xml
<WrapPanel Grid.Row="1"
           Grid.ColumnSpan="3"
           VerticalAlignment="Center">
    <TextBlock Text="事件总数：" FontSize="16" />
    <TextBlock Width="60"
               Foreground="Black"
               FontWeight="SemiBold"
               Text="{Binding SearchCount}"
               FontSize="16" />
    <TextBlock Text="中等能量事件：" FontSize="16" />
    <TextBlock Width="60"
               Foreground="Black"
               FontWeight="SemiBold"
               Text="{Binding MiddleEventCount}"
               FontSize="16" />
    <TextBlock Text="总能量：" FontSize="16" />
    <TextBlock Width="80"
               Foreground="Black"
               FontWeight="SemiBold"
               Text="{Binding TotalEnergy, StringFormat={}{0:F0}J}"
               FontSize="16" />
    <TextBlock Text="平均能量：" FontSize="16" />
    <TextBlock Width="80"
               Foreground="Black"
               FontWeight="SemiBold"
               Text="{Binding AverageEnergy, StringFormat={}{0:F0}J}"
               FontSize="16" />
    <TextBlock Text="最大能量：" FontSize="16" />
    <TextBlock Width="80"
               Foreground="Black"
               FontWeight="SemiBold"
               Text="{Binding MaxEnergy, StringFormat={}{0:F0}J}"
               FontSize="16" />
</WrapPanel>
```

### 2.4 验证点

迁移后至少验证：

1. 项目能通过 MSBuild 编译。
2. 报表页点击“查询”后，`事件总数` 正常变化。
3. `总能量 / 平均能量 / 最大能量` 能随查询结果更新。
4. 查询结果为空时，三个能量统计显示为 `0J`。

