From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点

---
 Plugin.DeviceConfig/BatchGenerateModal.xaml |  175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 175 insertions(+), 0 deletions(-)

diff --git a/Plugin.DeviceConfig/BatchGenerateModal.xaml b/Plugin.DeviceConfig/BatchGenerateModal.xaml
new file mode 100644
index 0000000..dd7dd35
--- /dev/null
+++ b/Plugin.DeviceConfig/BatchGenerateModal.xaml
@@ -0,0 +1,175 @@
+<pu:WindowX x:Class="Plugin.DeviceConfig.BatchGenerateModal"
+            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+            xmlns:pw="https://opensource.panuon.com/wpf"
+            xmlns:pu="https://opensource.panuon.com/wpf-ui"
+            xmlns:dp="clr-namespace:HMI.UI.DpUtil;assembly=HMI.UI"
+            xmlns:local="clr-namespace:Plugin.DeviceConfig"
+            mc:Ignorable="d"
+            Title="鎵归噺鐢熸垚璁惧"
+            SizeToContent="Height"
+            Width="780"
+            WindowStartupLocation="CenterOwner"
+            Style="{StaticResource ModalWindow}">
+    <pu:WindowX.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonListView.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
+    </pu:WindowX.Resources>
+
+    <Grid Margin="16">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+
+        <!-- 鍙傛暟杈撳叆鍖� -->
+        <GroupBox Grid.Row="0" Header="鐢熸垚鍙傛暟" FontWeight="SemiBold" Margin="0,0,0,12">
+            <Grid Margin="8">
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="120"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="120"/>
+                    <ColumnDefinition Width="*"/>
+                </Grid.ColumnDefinitions>
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="36"/>
+                    <RowDefinition Height="36"/>
+                    <RowDefinition Height="36"/>
+                    <RowDefinition Height="36"/>
+                    <RowDefinition Height="36"/>
+                </Grid.RowDefinitions>
+
+                <TextBlock Grid.Row="0" Grid.Column="0" Text="璁惧绫诲瀷 *" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <ComboBox Grid.Row="0" Grid.Column="1" x:Name="cbDeviceType" VerticalAlignment="Center" Margin="4,0"/>
+
+                <TextBlock Grid.Row="0" Grid.Column="2" Text="椹卞姩绫诲瀷" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <TextBox Grid.Row="0" Grid.Column="3" x:Name="tbDriverType" VerticalAlignment="Center"
+                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"/>
+
+                <TextBlock Grid.Row="1" Grid.Column="0" Text="浼犺緭鏂瑰紡 *" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <ComboBox Grid.Row="1" Grid.Column="1" x:Name="cbTransport" VerticalAlignment="Center" Margin="4,0"/>
+
+                <TextBlock Grid.Row="1" Grid.Column="2" Text="璁惧鏁伴噺 *" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <pu:NumberInput Grid.Row="1" Grid.Column="3" x:Name="niDeviceCount" VerticalAlignment="Center"
+                                Style="{StaticResource FormNumberInput}" Margin="4,0" Minimum="1" Maximum="100" Value="1"/>
+
+                <TextBlock Grid.Row="2" Grid.Column="0" Text="姣忚澶囬�氶亾鏁�" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <pu:NumberInput Grid.Row="2" Grid.Column="1" x:Name="niChannelsPerDevice" VerticalAlignment="Center"
+                                Style="{StaticResource FormNumberInput}" Margin="4,0" Minimum="0" Maximum="64" Value="1"/>
+
+                <TextBlock Grid.Row="2" Grid.Column="2" Text="璧峰绔彛鍙�" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <pu:NumberInput Grid.Row="2" Grid.Column="3" x:Name="niStartPort" VerticalAlignment="Center"
+                                Style="{StaticResource FormNumberInput}" Margin="4,0" Minimum="1" Maximum="65535" Value="30000"/>
+
+                <TextBlock Grid.Row="3" Grid.Column="0" Text="鍦板潃鐢熸垚瑙勫垯" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <TextBox Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3" x:Name="tbAddressRule" VerticalAlignment="Center"
+                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"
+                         pu:TextBoxHelper.Watermark="渚�: 192.168.10.{0}锛寋0}涓哄簭鍙峰崰浣嶇"/>
+                         
+                <TextBlock Grid.Row="4" Grid.Column="0" Text="Slot鏄犲皠璧风偣" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <TextBox Grid.Row="4" Grid.Column="1" x:Name="tbSlotStart" VerticalAlignment="Center"
+                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"
+                         pu:TextBoxHelper.Watermark="渚�: Slot001"/>
+                         
+                <TextBlock Grid.Row="4" Grid.Column="2" Text="璁惧ID鍓嶇紑" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
+                <TextBox Grid.Row="4" Grid.Column="3" x:Name="tbDeviceIdPrefix" VerticalAlignment="Center"
+                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"
+                         pu:TextBoxHelper.Watermark="渚�: PSU"/>
+            </Grid>
+        </GroupBox>
+
+        <!-- 棰勮鍖� -->
+        <GroupBox Grid.Row="1" Header="鐢熸垚棰勮" FontWeight="SemiBold" Margin="0,0,0,12">
+            <Grid Margin="8">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="Auto"/>
+                    <RowDefinition Height="200"/>
+                </Grid.RowDefinitions>
+
+                <TextBlock Grid.Row="0" x:Name="tbConflictMsg" Foreground="Red" Margin="0,0,0,4"
+                           TextWrapping="Wrap" Visibility="Collapsed"/>
+
+                <ListView Grid.Row="1" Style="{StaticResource DefaultListTable}" x:Name="previewListView"
+                          VirtualizingPanel.IsVirtualizing="True"
+                          VirtualizingPanel.VirtualizationMode="Standard">
+                    <ListView.View>
+                        <GridView AllowsColumnReorder="False">
+                            <GridViewColumn Width="50" Header="#">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <Border Style="{StaticResource CellBorder}">
+                                            <TextBlock Style="{StaticResource ListTableTextBlock}"
+                                                Text="{Binding Converter={StaticResource lvRowNumber},
+                                                RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListViewItem,AncestorLevel=1}}"/>
+                                        </Border>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="140" Header="DeviceId">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <Border Style="{StaticResource CellBorder}">
+                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding DeviceId}"/>
+                                        </Border>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="100" Header="Kind">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <Border Style="{StaticResource CellBorder}">
+                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding Kind}"/>
+                                        </Border>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="180" Header="Endpoint">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <Border Style="{StaticResource CellBorder}">
+                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding Endpoint}"/>
+                                        </Border>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="80" Header="閫氶亾鏁�">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <Border Style="{StaticResource CellBorder}">
+                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding ChannelCount}"/>
+                                        </Border>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="100" Header="Slot璧风偣">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <Border Style="{StaticResource CellBorder}">
+                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding SlotStart}"/>
+                                        </Border>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                        </GridView>
+                    </ListView.View>
+                </ListView>
+            </Grid>
+        </GroupBox>
+
+        <!-- 搴曢儴鎸夐挳 -->
+        <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" dp:StackPanelHelper.ChildSpace="10" Margin="0,12,0,0">
+            <Button x:Name="previewBtn" Click="PreviewBtn_Click" Content="鐢熸垚棰勮"
+                    Style="{StaticResource RfhBtn}" Width="90"/>
+            <Button x:Name="saveBtn" Click="SaveBtn_Click" Content="纭淇濆瓨"
+                    Style="{StaticResource AddBtn}" Width="90"/>
+            <Button x:Name="cancelBtn" Click="CancelBtn_Click" Content="鍙栨秷"
+                    Style="{StaticResource RfhBtn}" Width="90"/>
+        </StackPanel>
+    </Grid>
+</pu:WindowX>

--
Gitblit v1.9.1