<?xml version="1.0" encoding="utf-8"?>
<Page
x:Class="HaloPixelToolBox.Backend.Views.IPBanManagePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:models="using:XFEExtension.NetCore.ServerInteractive.Models"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Loaded="Page_Loaded">
<Grid RowSpacing="14">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Spacing="6">
<TextBlock Text="IP 封禁管理" FontSize="28" FontWeight="SemiBold"/>
<TextBlock Text="黑名单由服务器持久化保存。被封禁的地址会在进入业务路由前收到 403 响应。" TextWrapping="Wrap" Opacity="0.72"/>
</StackPanel>
<Border Grid.Row="1" Background="{ThemeResource CardBackgroundFillColorDefaultBrush}" BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="8" Padding="16">
<StackPanel Spacing="10">
<Grid ColumnSpacing="12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="260"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Header="IP 地址" Text="{x:Bind ViewModel.IPAddressText, Mode=TwoWay}" PlaceholderText="203.0.113.10"/>
<TextBox Grid.Column="1" Header="备注" Text="{x:Bind ViewModel.Notes, Mode=TwoWay}" PlaceholderText="封禁原因"/>
</Grid>
<StackPanel Orientation="Horizontal" Spacing="10">
<Button Content="封禁" Command="{x:Bind ViewModel.AddCommand}"/>
<Button Content="解封选中项" Command="{x:Bind ViewModel.RemoveCommand}"/>
<Button Content="刷新" Command="{x:Bind ViewModel.RefreshCommand}"/>
<ProgressRing Width="24" Height="24" IsActive="{x:Bind ViewModel.IsBusy, Mode=OneWay}"/>
<TextBlock Text="{x:Bind ViewModel.StatusText, Mode=OneWay}" VerticalAlignment="Center" TextWrapping="Wrap"/>
</StackPanel>
</StackPanel>
</Border>
<ListView Grid.Row="2" ItemsSource="{x:Bind ViewModel.Items, Mode=OneWay}" SelectedItem="{x:Bind ViewModel.SelectedItem, Mode=TwoWay}" SelectionMode="Single">
<ListView.Header>
<Grid Padding="12,8" ColumnSpacing="16" Background="{ThemeResource SolidBackgroundFillColorTertiaryBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"/>
<ColumnDefinition Width="220"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="IP 地址" FontWeight="SemiBold"/>
<TextBlock Grid.Column="1" Text="封禁时间" FontWeight="SemiBold"/>
<TextBlock Grid.Column="2" Text="备注" FontWeight="SemiBold"/>
</Grid>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:IPAddressInfo">
<Grid Padding="4" ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"/>
<ColumnDefinition Width="220"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{x:Bind IPAddress}"/>
<TextBlock Grid.Column="1" Text="{x:Bind BannedTime}"/>
<TextBlock Grid.Column="2" Text="{x:Bind Notes}" TextWrapping="Wrap"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>
<?xml version="1.0" encoding="utf-8"?>
<Page
x:Class="HaloPixelToolBox.Backend.Views.IPBanManagePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:models="using:XFEExtension.NetCore.ServerInteractive.Models"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Loaded="Page_Loaded">
<Grid RowSpacing="14">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Spacing="6">
<TextBlock Text="IP 封禁管理" FontSize="28" FontWeight="SemiBold"/>
<TextBlock Text="黑名单由服务器持久化保存。被封禁的地址会在进入业务路由前收到 403 响应。" TextWrapping="Wrap" Opacity="0.72"/>
</StackPanel>
<Border Grid.Row="1" Background="{ThemeResource CardBackgroundFillColorDefaultBrush}" BorderBrush="{ThemeResource CardStrokeColorDefaultBrush}" BorderThickness="1" CornerRadius="8" Padding="16">
<StackPanel Spacing="10">
<Grid ColumnSpacing="12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="260"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Header="IP 地址" Text="{x:Bind ViewModel.IPAddressText, Mode=TwoWay}" PlaceholderText="203.0.113.10"/>
<TextBox Grid.Column="1" Header="备注" Text="{x:Bind ViewModel.Notes, Mode=TwoWay}" PlaceholderText="封禁原因"/>
</Grid>
<StackPanel Orientation="Horizontal" Spacing="10">
<Button Content="封禁" Command="{x:Bind ViewModel.AddCommand}"/>
<Button Content="解封选中项" Command="{x:Bind ViewModel.RemoveCommand}"/>
<Button Content="刷新" Command="{x:Bind ViewModel.RefreshCommand}"/>
<ProgressRing Width="24" Height="24" IsActive="{x:Bind ViewModel.IsBusy, Mode=OneWay}"/>
<TextBlock Text="{x:Bind ViewModel.StatusText, Mode=OneWay}" VerticalAlignment="Center" TextWrapping="Wrap"/>
</StackPanel>
</StackPanel>
</Border>
<ListView Grid.Row="2" ItemsSource="{x:Bind ViewModel.Items, Mode=OneWay}" SelectedItem="{x:Bind ViewModel.SelectedItem, Mode=TwoWay}" SelectionMode="Single">
<ListView.Header>
<Grid Padding="12,8" ColumnSpacing="16" Background="{ThemeResource SolidBackgroundFillColorTertiaryBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"/>
<ColumnDefinition Width="220"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="IP 地址" FontWeight="SemiBold"/>
<TextBlock Grid.Column="1" Text="封禁时间" FontWeight="SemiBold"/>
<TextBlock Grid.Column="2" Text="备注" FontWeight="SemiBold"/>
</Grid>
</ListView.Header>
<ListView.ItemTemplate>
<DataTemplate x:DataType="models:IPAddressInfo">
<Grid Padding="4" ColumnSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"/>
<ColumnDefinition Width="220"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{x:Bind IPAddress}"/>
<TextBlock Grid.Column="1" Text="{x:Bind BannedTime}"/>
<TextBlock Grid.Column="2" Text="{x:Bind Notes}" TextWrapping="Wrap"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Page>