1274 lines
94 KiB
XML
1274 lines
94 KiB
XML
<UserControl x:Class="YY.Admin.Views.RawMaterialEntry.RawMaterialEntryOperationView"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||
xmlns:hc="https://handyorg.github.io/handycontrol"
|
||
xmlns:ctrls="clr-namespace:YY.Admin.Controls"
|
||
xmlns:core="clr-namespace:YY.Admin.Core.Entity;assembly=YY.Admin.Core"
|
||
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
|
||
xmlns:prism="http://prismlibrary.com/"
|
||
prism:ViewModelLocator.AutoWireViewModel="True"
|
||
mc:Ignorable="d">
|
||
|
||
<UserControl.Resources>
|
||
<!-- 右侧今日列表:单选行选中态浅蓝背景 -->
|
||
<Style x:Key="TodayEntryListBoxItemStyle" TargetType="ListBoxItem">
|
||
<Setter Property="Padding" Value="0"/>
|
||
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
||
<Setter Property="Background" Value="Transparent"/>
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="ListBoxItem">
|
||
<Border x:Name="Bd" Background="{TemplateBinding Background}" Padding="6,4">
|
||
<ContentPresenter/>
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="Bd" Property="Background" Value="#FFF5F5F5"/>
|
||
</Trigger>
|
||
<Trigger Property="IsSelected" Value="True">
|
||
<Setter TargetName="Bd" Property="Background" Value="#E3F2FD"/>
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
</UserControl.Resources>
|
||
|
||
<Grid Style="{StaticResource BaseViewStyle}">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="Auto"/>
|
||
<RowDefinition Height="*"/>
|
||
<RowDefinition Height="Auto"/>
|
||
</Grid.RowDefinitions>
|
||
|
||
<Grid Grid.Row="0" Margin="24,16,24,12">
|
||
<TextBlock FontSize="18"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
Text="{Binding DialogTitle}"
|
||
HorizontalAlignment="Left"
|
||
VerticalAlignment="Center"/>
|
||
<!-- 收起/展开与右侧列表分离:置于页头右上,与标题同行 -->
|
||
<!-- 显式绑定 UserControl.DataContext:避免页眉 DataContext 非本页 ViewModel 时 Toggle 无效 -->
|
||
<Button HorizontalAlignment="Right"
|
||
VerticalAlignment="Center"
|
||
Command="{Binding DataContext.ToggleRightPanelCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
|
||
Click="ToggleTodayPanelButton_OnClick"
|
||
Padding="12,6"
|
||
FontSize="12"
|
||
MinHeight="32">
|
||
<Button.Style>
|
||
<Style TargetType="Button" BasedOn="{StaticResource ButtonDefault}">
|
||
<Setter Property="Content" Value="收起"/>
|
||
<Setter Property="ToolTip" Value="收起右侧「今日入场」列表"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding DataContext.IsRightPanelExpanded, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False">
|
||
<Setter Property="Content" Value="展开"/>
|
||
<Setter Property="ToolTip" Value="展开右侧「今日入场」列表"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Button.Style>
|
||
</Button>
|
||
</Grid>
|
||
|
||
<!-- 打印机:PrintDot 桥接器,与「打印模板」页一致 -->
|
||
<Border Grid.Row="1" Margin="24,0,24,8" Padding="0,4,0,4" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
||
<TextBlock Text="打印机:" VerticalAlignment="Center" FontSize="13" Foreground="#333333" Margin="0,0,8,0"/>
|
||
<ComboBox ItemsSource="{Binding Printers}"
|
||
SelectedItem="{Binding SelectedPrinter}"
|
||
DisplayMemberPath="Name"
|
||
MinWidth="220" Height="30"
|
||
VerticalContentAlignment="Center"
|
||
hc:InfoElement.Placeholder="请选择打印机"/>
|
||
<Button Command="{Binding RefreshPrintersCommand}"
|
||
Height="30" Padding="10,0" Margin="10,0,0,0"
|
||
FontSize="12"
|
||
Style="{StaticResource ButtonDefault}"
|
||
Content="刷新打印机"/>
|
||
<TextBlock Text="{Binding PrinterStatus}"
|
||
Margin="12,0,0,0"
|
||
VerticalAlignment="Center"
|
||
FontSize="12"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<Grid Grid.Row="2" x:Name="MainSplitRoot">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*" MinWidth="320"/>
|
||
<ColumnDefinition x:Name="SplitterCol" Width="4"/>
|
||
<ColumnDefinition x:Name="RightPaneCol" Width="280" MinWidth="0"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<hc:ScrollViewer Grid.Column="0" IsInertiaEnabled="True" HorizontalScrollBarVisibility="Disabled">
|
||
<StackPanel x:Name="RootPanel" Margin="24,8,24,8">
|
||
<DockPanel Margin="0,0,0,6">
|
||
<Button DockPanel.Dock="Right"
|
||
Content="重置"
|
||
Command="{Binding ResetCommand}"
|
||
Style="{StaticResource ButtonDefault}"
|
||
Width="80" Height="28" FontSize="12"/>
|
||
<TextBlock Text="基础资料"
|
||
FontSize="13"
|
||
FontWeight="SemiBold"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
VerticalAlignment="Center"/>
|
||
</DockPanel>
|
||
|
||
<!-- 带横竖线的表格式表单;已打印时整体禁用(IsTotalWeightEditable=false),IsEnabled 向下继承到所有子控件 -->
|
||
<Border BorderThickness="1" BorderBrush="{DynamicResource BorderBrush}" Margin="0,0,0,8"
|
||
IsEnabled="{Binding IsTotalWeightEditable}">
|
||
<Grid>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="36"/> <!-- 密炼物料 -->
|
||
<RowDefinition Height="38"/> <!-- 批次号 / 入场时间 -->
|
||
<RowDefinition Height="36"/> <!-- 榜单号 -->
|
||
<RowDefinition Height="36"/> <!-- 供料客户 / 供应商名称 -->
|
||
<RowDefinition Height="36"/> <!-- 厂家物料名称 / 保质期 -->
|
||
<RowDefinition Height="40"/> <!-- 总重 / 总份数 — 多 4px 给 NumericUpDown 上下间距,否则 spinner 箭头会被裁切 -->
|
||
<RowDefinition Height="36"/> <!-- 每份总重 / 每份包数 -->
|
||
<RowDefinition Height="36"/> <!-- 托盘及皮重(合计) -->
|
||
<RowDefinition Height="36"/> <!-- 库位 / 卸货人 -->
|
||
<RowDefinition Height="60"/> <!-- 备注 -->
|
||
</Grid.RowDefinitions>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="90"/>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="90"/>
|
||
<ColumnDefinition Width="*"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- ===== Row 0: 密炼物料 ===== -->
|
||
<Border Grid.Row="0" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="密炼物料" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Grid.Column="0" Text="{Binding SelectedMaterialDisplay}"
|
||
VerticalAlignment="Center" FontSize="13" TextTrimming="CharacterEllipsis">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Foreground" Value="{DynamicResource SecondaryTextBrush}"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasSelectedMaterial}" Value="True">
|
||
<Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
<Button Grid.Column="1" Content="选 择"
|
||
Command="{Binding OpenMaterialPickerCommand}"
|
||
Style="{StaticResource ButtonPrimary}"
|
||
Height="26" Margin="6,0,0,0" FontSize="12" Padding="10,0"/>
|
||
<Button Grid.Column="2"
|
||
Command="{Binding ClearMaterialCommand}"
|
||
Style="{StaticResource ButtonIcon}"
|
||
Height="26" Width="24" Margin="4,0,0,0" Padding="0"
|
||
ToolTip="清除物料"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
hc:IconElement.Geometry="{StaticResource ErrorGeometry}"/>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- ===== Row 1: 批次号 / 入场时间 ===== -->
|
||
<Border Grid.Row="1" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="批次号" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="1" Grid.Column="1"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<TextBlock Text="{Binding Entry.BatchNo}" VerticalAlignment="Center" FontSize="13"
|
||
Foreground="{DynamicResource SecondaryTextBrush}" TextTrimming="CharacterEllipsis"/>
|
||
</Border>
|
||
<Border Grid.Row="1" Grid.Column="2"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="入场时间" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="1" Grid.Column="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="4,3">
|
||
<!-- 自定义日期时间选择器:日历 + 时/分/秒 三列 + 此刻/确定 -->
|
||
<ctrls:DateTimeListPicker SelectedDateTime="{Binding EntryTimeInput, Mode=TwoWay}"
|
||
DateTimeFormat="yyyy-MM-dd HH:mm:ss"
|
||
Placeholder="请选择入场时间"/>
|
||
</Border>
|
||
|
||
<!-- ===== Row 2: 榜单号 ===== -->
|
||
<Border Grid.Row="2" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="榜单号" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Grid.Column="0" Text="{Binding Entry.BillNo}"
|
||
VerticalAlignment="Center" FontSize="13" TextTrimming="CharacterEllipsis"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<Button Grid.Column="1" Content="选 择"
|
||
Command="{Binding OpenWeightRecordPickerCommand}"
|
||
Style="{StaticResource ButtonPrimary}"
|
||
Height="26" Margin="6,0,0,0" FontSize="12" Padding="10,0"/>
|
||
<Button Grid.Column="2"
|
||
Command="{Binding ClearWeightRecordCommand}"
|
||
Style="{StaticResource ButtonIcon}"
|
||
Height="26" Width="24" Margin="4,0,0,0" Padding="0"
|
||
ToolTip="清除榜单"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
hc:IconElement.Geometry="{StaticResource ErrorGeometry}"/>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- ===== Row 3: 供料客户 / 供应商名称 ===== -->
|
||
<Border Grid.Row="3" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="供料客户" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="3" Grid.Column="1"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Padding="4,0">
|
||
<Grid>
|
||
<TextBox Text="{Binding Entry.SupplyCustomer, UpdateSourceTrigger=PropertyChanged}"
|
||
VerticalContentAlignment="Center" BorderThickness="0" Background="Transparent"
|
||
FontSize="13" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock IsHitTestVisible="False" VerticalAlignment="Center" Margin="4,0"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}" Opacity="0.6"
|
||
Text="请填写供料客户">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding Entry.SupplyCustomer}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding Entry.SupplyCustomer}" Value="{x:Null}">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
<Border Grid.Row="3" Grid.Column="2"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="供应商名称" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="3" Grid.Column="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<Grid Grid.Column="0">
|
||
<TextBox Text="{Binding Entry.SupplierName, UpdateSourceTrigger=PropertyChanged}"
|
||
VerticalContentAlignment="Center" BorderThickness="0" Background="Transparent"
|
||
FontSize="13" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock IsHitTestVisible="False" VerticalAlignment="Center" Margin="4,0"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}" Opacity="0.6"
|
||
Text="自动带出,或手动选择/填写">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding Entry.SupplierName}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding Entry.SupplierName}" Value="{x:Null}">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
<!-- 与「密炼物料 / 榜单号」两行的「选择 + 清除」按钮参数完全一致:右端齐平 + 内外边距统一 -->
|
||
<Button Grid.Column="1" Content="选 择"
|
||
Command="{Binding OpenSupplierPickerCommand}"
|
||
Style="{StaticResource ButtonPrimary}"
|
||
Height="26" Margin="6,0,0,0" FontSize="12" Padding="10,0"/>
|
||
<Button Grid.Column="2"
|
||
Command="{Binding ClearSupplierCommand}"
|
||
Style="{StaticResource ButtonIcon}"
|
||
Height="26" Width="24" Margin="4,0,0,0" Padding="0"
|
||
ToolTip="清除供应商"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
hc:IconElement.Geometry="{StaticResource ErrorGeometry}"/>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- ===== Row 4: 厂家物料名称 / 保质期 ===== -->
|
||
<Border Grid.Row="4" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="厂家物料名称" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="11" Foreground="{DynamicResource PrimaryTextBrush}"
|
||
TextWrapping="Wrap" TextAlignment="Center"/>
|
||
</Border>
|
||
<Border Grid.Row="4" Grid.Column="1"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<TextBlock Text="{Binding Entry.ManufacturerMaterialName}" VerticalAlignment="Center"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}" TextTrimming="CharacterEllipsis"/>
|
||
</Border>
|
||
<Border Grid.Row="4" Grid.Column="2"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="保质期" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="4" Grid.Column="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<TextBlock Text="{Binding Entry.ShelfLife}" VerticalAlignment="Center" FontSize="13"
|
||
Foreground="{DynamicResource SecondaryTextBrush}" TextTrimming="CharacterEllipsis"/>
|
||
</Border>
|
||
|
||
<!-- ===== Row 5: 总重(KG) / 总份数 ===== -->
|
||
<Border Grid.Row="5" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="总重(KG)" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="5" Grid.Column="1"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Padding="4,2">
|
||
<!--
|
||
显式 Height + VerticalAlignment=Center 避免被 Border 拉伸到 36+px,
|
||
否则 HandyControl 的 NumericUpDownPlus 内置 spinner 会被压扁导致箭头显示不全。
|
||
-->
|
||
<hc:NumericUpDown Value="{Binding TotalWeightInput}"
|
||
Minimum="0" DecimalPlaces="2"
|
||
Height="30" VerticalAlignment="Center"
|
||
Style="{StaticResource NumericUpDownPlus}"
|
||
hc:InfoElement.Placeholder="请输入总重"/>
|
||
</Border>
|
||
<Border Grid.Row="5" Grid.Column="2"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="总份数" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="5" Grid.Column="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<!-- 由拆码明细聚合而来:未维护明细时显示灰色占位提示,提示用户操作路径 -->
|
||
<Grid>
|
||
<TextBlock Text="{Binding SplitTotalPortionsDisplay}" VerticalAlignment="Center"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Text="由拆码明细自动生成" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="#BFBFBF" FontStyle="Italic"
|
||
IsHitTestVisible="False">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding SplitTotalPortionsDisplay}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- ===== Row 6: 每份总重(KG) / 每份包数 ===== -->
|
||
<Border Grid.Row="6" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="每份总重(KG)" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="11" Foreground="{DynamicResource PrimaryTextBrush}"
|
||
TextWrapping="Wrap" TextAlignment="Center"/>
|
||
</Border>
|
||
<Border Grid.Row="6" Grid.Column="1"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<Grid>
|
||
<TextBlock Text="{Binding SplitPortionWeightDisplay}" VerticalAlignment="Center"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Text="由拆码明细自动生成" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="#BFBFBF" FontStyle="Italic"
|
||
IsHitTestVisible="False">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding SplitPortionWeightDisplay}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
<Border Grid.Row="6" Grid.Column="2"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="每份包数" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="6" Grid.Column="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<Grid>
|
||
<TextBlock Text="{Binding SplitPortionPackagesDisplay}" VerticalAlignment="Center"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Text="由拆码明细自动生成" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="#BFBFBF" FontStyle="Italic"
|
||
IsHitTestVisible="False">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding SplitPortionPackagesDisplay}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- ===== Row 7: 托盘及皮重(合计) ===== -->
|
||
<Border Grid.Row="7" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="托盘及皮重(合计)" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="11" Foreground="{DynamicResource PrimaryTextBrush}"
|
||
TextWrapping="Wrap" TextAlignment="Center"/>
|
||
</Border>
|
||
<Border Grid.Row="7" Grid.Column="1" Grid.ColumnSpan="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="6,0">
|
||
<TextBlock Text="{Binding PalletTareTotalDisplay, StringFormat={}{0:0.##}}"
|
||
VerticalAlignment="Center" FontSize="13"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
ToolTip="由拆码明细自动汇总:Σ份数×(包装物皮重+托盘重量)"/>
|
||
</Border>
|
||
|
||
<!-- ===== Row 8: 库位 / 卸货人 ===== -->
|
||
<Border Grid.Row="8" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="库位" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="8" Grid.Column="1"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}" Padding="4,0">
|
||
<Grid>
|
||
<TextBox Text="{Binding Entry.WarehouseLocation, UpdateSourceTrigger=PropertyChanged}"
|
||
VerticalContentAlignment="Center" BorderThickness="0" Background="Transparent"
|
||
FontSize="13" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock IsHitTestVisible="False" VerticalAlignment="Center" Margin="4,0"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}" Opacity="0.6"
|
||
Text="请填写库位">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding Entry.WarehouseLocation}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding Entry.WarehouseLocation}" Value="{x:Null}">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
<Border Grid.Row="8" Grid.Column="2"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,1" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="卸货人" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="8" Grid.Column="3"
|
||
BorderThickness="0,0,0,1" BorderBrush="{DynamicResource BorderBrush}" Padding="4,0">
|
||
<Grid>
|
||
<TextBox Text="{Binding Entry.UnloadOperator, UpdateSourceTrigger=PropertyChanged}"
|
||
VerticalContentAlignment="Center" BorderThickness="0" Background="Transparent"
|
||
FontSize="13" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock IsHitTestVisible="False" VerticalAlignment="Center" Margin="4,0"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}" Opacity="0.6"
|
||
Text="请填写卸货人">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding Entry.UnloadOperator}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding Entry.UnloadOperator}" Value="{x:Null}">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- ===== Row 9: 备注(末行,无内部底边线) ===== -->
|
||
<Border Grid.Row="9" Grid.Column="0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
BorderThickness="0,0,1,0" BorderBrush="{DynamicResource BorderBrush}">
|
||
<TextBlock Text="备注" HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<Border Grid.Row="9" Grid.Column="1" Grid.ColumnSpan="3" Padding="4,4">
|
||
<Grid>
|
||
<TextBox Text="{Binding Entry.Remark, UpdateSourceTrigger=PropertyChanged}"
|
||
TextWrapping="Wrap" AcceptsReturn="True"
|
||
VerticalScrollBarVisibility="Auto"
|
||
BorderThickness="0" Background="Transparent"
|
||
FontSize="13" VerticalContentAlignment="Top"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock IsHitTestVisible="False" VerticalAlignment="Top" Margin="4,0"
|
||
FontSize="13" Foreground="{DynamicResource SecondaryTextBrush}" Opacity="0.6"
|
||
Text="请填写备注">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding Entry.Remark}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding Entry.Remark}" Value="{x:Null}">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
|
||
</Grid>
|
||
</Border>
|
||
|
||
<StackPanel>
|
||
<StackPanel.Style>
|
||
<Style TargetType="StackPanel">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Setter Property="Margin" Value="0"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding IsSpecialAdoptionValue}" Value="1">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
<Setter Property="Margin" Value="0,0,0,4"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</StackPanel.Style>
|
||
<hc:Row Gutter="16">
|
||
<hc:Col Span="8">
|
||
<hc:TextBox Text="{Binding Entry.SpecialAdoptionOperator, UpdateSourceTrigger=PropertyChanged}"
|
||
Height="34"
|
||
hc:InfoElement.Title="特采操作人"
|
||
hc:InfoElement.TitleWidth="80"
|
||
hc:InfoElement.TitlePlacement="Left"
|
||
hc:InfoElement.Placeholder="请输入特采操作人"
|
||
hc:InfoElement.ShowClearButton="True"
|
||
Margin="0,0,0,4"/>
|
||
</hc:Col>
|
||
<hc:Col Span="8">
|
||
<DockPanel Margin="0,0,0,4" LastChildFill="True">
|
||
<TextBlock DockPanel.Dock="Left" Text="特采时间" Width="80"
|
||
VerticalAlignment="Center"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<ctrls:DateTimeListPicker SelectedDateTime="{Binding Entry.SpecialAdoptionTime, Mode=TwoWay}"
|
||
DateTimeFormat="yyyy-MM-dd HH:mm:ss"
|
||
Placeholder="请选择特采时间"/>
|
||
</DockPanel>
|
||
</hc:Col>
|
||
</hc:Row>
|
||
|
||
<hc:TextBox Text="{Binding Entry.SpecialAdoptionReason, UpdateSourceTrigger=PropertyChanged}"
|
||
hc:InfoElement.Title="特采原因"
|
||
hc:InfoElement.TitleWidth="80"
|
||
hc:InfoElement.TitlePlacement="Left"
|
||
hc:InfoElement.Placeholder="请输入特采原因"
|
||
hc:InfoElement.ShowClearButton="True"
|
||
TextWrapping="Wrap"
|
||
AcceptsReturn="True"
|
||
HorizontalAlignment="Stretch"
|
||
Height="64"
|
||
VerticalScrollBarVisibility="Auto"
|
||
Margin="0,0,0,4"/>
|
||
</StackPanel>
|
||
|
||
<!-- 拆码明细:移出 hc:Row 避免被行高限制裁剪 -->
|
||
<Border BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1" CornerRadius="6" Padding="12" Margin="0,0,0,8">
|
||
<StackPanel>
|
||
<DockPanel Margin="0,0,0,10">
|
||
<TextBlock Text="拆码明细"
|
||
FontSize="14"
|
||
FontWeight="SemiBold"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
VerticalAlignment="Center"/>
|
||
<!-- 右侧按钮组:新增明细(始终可用,支持「继续拆码」) + 重新拆码(仅编辑态可用) -->
|
||
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" HorizontalAlignment="Right">
|
||
<!--
|
||
「新增明细」:始终可用。
|
||
已打印记录上点击 → 追加一行 HasCard=false 的可编辑行;
|
||
再点「生成原材料卡片」时按 HasCard 过滤,只对新增的行加卡(条码从已有数 +1 续编)。
|
||
-->
|
||
<Button Content="新增明细"
|
||
Command="{Binding AddSplitDetailCommand}"
|
||
Style="{StaticResource ButtonPrimary}"
|
||
Height="30"
|
||
Padding="10,0"
|
||
FontSize="12"
|
||
ToolTip="新增一行待拆码明细。已打印记录追加新行时支持「继续拆码」"/>
|
||
<Button Content="重新拆码"
|
||
Command="{Binding ResplitCommand}"
|
||
Style="{StaticResource ButtonWarning}"
|
||
Height="30"
|
||
Padding="10,0"
|
||
Margin="8,0,0,0"
|
||
FontSize="12"
|
||
ToolTip="清除该入场记录已生成的原材料卡片并清空明细,重新进行拆码"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
|
||
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
|
||
<StackPanel MinWidth="820">
|
||
<!-- 表头 -->
|
||
<Grid Background="{DynamicResource SecondaryRegionBrush}" Height="40">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="70"/>
|
||
<ColumnDefinition Width="100"/>
|
||
<ColumnDefinition Width="80"/>
|
||
<ColumnDefinition Width="100"/>
|
||
<ColumnDefinition Width="80"/>
|
||
<ColumnDefinition Width="140"/>
|
||
<ColumnDefinition Width="80"/>
|
||
<ColumnDefinition Width="120"/>
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Grid.Column="0" Text="份数"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock Grid.Column="1" Text="每份重量(KG)"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock Grid.Column="2" Text="每份包数"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock Grid.Column="3" Text="包装物皮重"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
ToolTip="自动匹配皮重策略;点击可手动选择"/>
|
||
<TextBlock Grid.Column="4" Text="托盘重量"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
ToolTip="由皮重策略自动匹配,未匹配时为0"/>
|
||
<TextBlock Grid.Column="5" Text="库位"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
ToolTip="生成原材料卡片时为必填项"/>
|
||
<TextBlock Grid.Column="6" Text="打印标记"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock Grid.Column="7" Text="操作"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontWeight="SemiBold" FontSize="12"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Grid>
|
||
|
||
<!-- 空状态提示 -->
|
||
<TextBlock Text="暂无明细,请点击「新增明细」添加"
|
||
HorizontalAlignment="Center"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
FontSize="12"
|
||
Margin="0,14">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding SplitCodeDetails.Count}" Value="0">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
|
||
<!-- 数据行:行高对齐表头 40px,输入框给足上下边距避免边框被裁切 -->
|
||
<ItemsControl ItemsSource="{Binding SplitCodeDetails}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate>
|
||
<DataTemplate.Resources>
|
||
<!--
|
||
已生成卡片的「行」锁定样式(HasCard==true):
|
||
把份数 / 每份重量 / 每份包数 三个 TextBox 设为只读 + 淡灰背景。
|
||
配合"该行隐藏删除按钮 + 库位按钮禁用"形成完整防护,避免改了行内数值后
|
||
与已生成的原材料卡片数据脱节。
|
||
业务流程:用户在已打印记录上想继续拆码 → 新增行(HasCard=false 可编辑)
|
||
→ 点「生成原材料卡片」只对未生成行加卡(条码续号续接)。
|
||
-->
|
||
<Style x:Key="LockableSplitTextBoxStyle" TargetType="TextBox">
|
||
<Setter Property="HorizontalContentAlignment" Value="Center"/>
|
||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||
<Setter Property="Height" Value="32"/>
|
||
<Setter Property="BorderBrush" Value="#D9D9D9"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
<Setter Property="Background" Value="White"/>
|
||
<Setter Property="FontSize" Value="13"/>
|
||
<Setter Property="Margin" Value="4,0"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasCard}" Value="True">
|
||
<Setter Property="IsReadOnly" Value="True"/>
|
||
<Setter Property="Background" Value="#F5F5F5"/>
|
||
<Setter Property="Foreground" Value="#8C8C8C"/>
|
||
<Setter Property="ToolTip" Value="该行已生成原材料卡片,不可修改。如需调整请先点「重新拆码」清空全部卡片"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</DataTemplate.Resources>
|
||
<Grid Height="44">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="70"/>
|
||
<ColumnDefinition Width="100"/>
|
||
<ColumnDefinition Width="80"/>
|
||
<ColumnDefinition Width="100"/>
|
||
<ColumnDefinition Width="80"/>
|
||
<ColumnDefinition Width="140"/>
|
||
<ColumnDefinition Width="80"/>
|
||
<ColumnDefinition Width="120"/>
|
||
</Grid.ColumnDefinitions>
|
||
<Border Grid.Column="0" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<TextBox Text="{Binding Portions, UpdateSourceTrigger=PropertyChanged}"
|
||
Style="{StaticResource LockableSplitTextBoxStyle}"/>
|
||
</Border>
|
||
<Border Grid.Column="1" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<TextBox Text="{Binding PortionWeightText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
|
||
Style="{StaticResource LockableSplitTextBoxStyle}"/>
|
||
</Border>
|
||
<Border Grid.Column="2" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<TextBox Text="{Binding PortionPackages, UpdateSourceTrigger=PropertyChanged}"
|
||
Style="{StaticResource LockableSplitTextBoxStyle}"/>
|
||
</Border>
|
||
<Border Grid.Column="3" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<Button Command="{Binding DataContext.OpenTareStrategyPickerCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
|
||
CommandParameter="{Binding}"
|
||
ToolTip="{Binding TareStrategyDisplay}"
|
||
Cursor="Hand"
|
||
VerticalAlignment="Center"
|
||
Height="32"
|
||
Margin="4,0"
|
||
Focusable="False">
|
||
<Button.Style>
|
||
<Style TargetType="Button">
|
||
<Setter Property="IsEnabled" Value="True"/>
|
||
<Setter Property="ToolTip" Value="点击选择皮重策略"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasCard}" Value="True">
|
||
<Setter Property="IsEnabled" Value="False"/>
|
||
<Setter Property="ToolTip" Value="该行已生成原材料卡片,不可修改。如需调整请先点「重新拆码」清空全部卡片"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Button.Style>
|
||
<Button.Template>
|
||
<ControlTemplate TargetType="Button">
|
||
<Border x:Name="Bd"
|
||
BorderBrush="#D9D9D9" BorderThickness="1"
|
||
CornerRadius="2"
|
||
Background="White">
|
||
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="13"
|
||
Text="{Binding PackagingTare, StringFormat={}{0:0.##}}"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="Bd" Property="BorderBrush" Value="#4096FF"/>
|
||
</Trigger>
|
||
<Trigger Property="IsPressed" Value="True">
|
||
<Setter TargetName="Bd" Property="Background" Value="#F0F7FF"/>
|
||
</Trigger>
|
||
<Trigger Property="IsEnabled" Value="False">
|
||
<Setter TargetName="Bd" Property="Background" Value="#F5F5F5"/>
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Button.Template>
|
||
</Button>
|
||
</Border>
|
||
<Border Grid.Column="4" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<TextBlock Text="{Binding PalletWeight, StringFormat={}{0:0.##}}"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="12" Foreground="{DynamicResource SecondaryTextBrush}"
|
||
ToolTip="{Binding TareStrategyDisplay}"/>
|
||
</Border>
|
||
<Border Grid.Column="5" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<!--
|
||
InputBindings 内 RelativeSource 不在可视树中,查找会静默失败。
|
||
改用 Button + ControlTemplate:Command 写在 Button 元素上,可视树正常,RelativeSource 可靠。
|
||
-->
|
||
<Button Command="{Binding DataContext.OpenWarehouseAreaPickerCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
|
||
CommandParameter="{Binding}"
|
||
Cursor="Hand"
|
||
VerticalAlignment="Center"
|
||
Height="32"
|
||
Margin="4,0"
|
||
Focusable="False">
|
||
<!-- 行级锁定:HasCard==true(该行已生成卡片)时禁用,与三个数字字段一致 -->
|
||
<Button.Style>
|
||
<Style TargetType="Button">
|
||
<Setter Property="IsEnabled" Value="True"/>
|
||
<Setter Property="ToolTip" Value="点击选择库区"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasCard}" Value="True">
|
||
<Setter Property="IsEnabled" Value="False"/>
|
||
<Setter Property="ToolTip" Value="该行已生成原材料卡片,不可修改。如需调整请先点「重新拆码」清空全部卡片"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Button.Style>
|
||
<Button.Template>
|
||
<!-- 视觉与同行的 TextBox 对齐:相同高度/边框色/圆角/字号,内容水平居中 -->
|
||
<ControlTemplate TargetType="Button">
|
||
<Border x:Name="Bd"
|
||
BorderBrush="#D9D9D9" BorderThickness="1"
|
||
CornerRadius="2"
|
||
Background="White">
|
||
<Grid>
|
||
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="13" TextTrimming="CharacterEllipsis"
|
||
Text="{Binding WarehouseLocation}">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Foreground" Value="#1F1F1F"/>
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding WarehouseLocation}" Value="">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding WarehouseLocation}" Value="{x:Null}">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"
|
||
FontSize="13" Text="点击选择库区" Foreground="#BFBFBF">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding WarehouseLocation}" Value="">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
<DataTrigger Binding="{Binding WarehouseLocation}" Value="{x:Null}">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="Bd" Property="BorderBrush" Value="#4096FF"/>
|
||
</Trigger>
|
||
<Trigger Property="IsPressed" Value="True">
|
||
<Setter TargetName="Bd" Property="Background" Value="#F0F7FF"/>
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Button.Template>
|
||
</Button>
|
||
</Border>
|
||
<Border Grid.Column="6" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<Grid>
|
||
<Border CornerRadius="2" Padding="6,2" VerticalAlignment="Center" HorizontalAlignment="Center">
|
||
<Border.Style>
|
||
<Style TargetType="Border">
|
||
<Setter Property="Background" Value="#F5F5F5"/>
|
||
<Setter Property="BorderBrush" Value="#D9D9D9"/>
|
||
<Setter Property="BorderThickness" Value="1"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasCard}" Value="True">
|
||
<Setter Property="Background" Value="#F6FFED"/>
|
||
<Setter Property="BorderBrush" Value="#B7EB8F"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Border.Style>
|
||
<TextBlock VerticalAlignment="Center" FontSize="12">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Text" Value="未打印"/>
|
||
<Setter Property="Foreground" Value="#8C8C8C"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasCard}" Value="True">
|
||
<Setter Property="Text" Value="已打印"/>
|
||
<Setter Property="Foreground" Value="#52C41A"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Border>
|
||
</Grid>
|
||
</Border>
|
||
<Border Grid.Column="7" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
|
||
<!-- 行级:HasCard==true(该行已生成卡片)时隐藏删除按钮,新增的待生成行可正常删除 -->
|
||
<Button Content="删除"
|
||
Command="{Binding DataContext.RemoveSplitDetailCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
|
||
CommandParameter="{Binding}"
|
||
VerticalAlignment="Center" Height="28"
|
||
Padding="6,0" Margin="12,0" FontSize="11">
|
||
<Button.Style>
|
||
<Style TargetType="Button" BasedOn="{StaticResource ButtonDanger}">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasCard}" Value="True">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Button.Style>
|
||
</Button>
|
||
</Border>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</StackPanel>
|
||
</ScrollViewer>
|
||
</StackPanel>
|
||
</Border>
|
||
</StackPanel>
|
||
</hc:ScrollViewer>
|
||
|
||
<GridSplitter x:Name="RightPaneSplitter"
|
||
Grid.Column="1"
|
||
Width="4"
|
||
HorizontalAlignment="Stretch"
|
||
VerticalAlignment="Stretch"
|
||
ResizeBehavior="PreviousAndNext"
|
||
ShowsPreview="True"
|
||
Cursor="SizeWE"
|
||
Background="{DynamicResource RegionBrush}"
|
||
PreviewStyle="{StaticResource GridSplitterPreviewStyle}"
|
||
DragCompleted="RightPaneSplitter_OnDragCompleted"/>
|
||
|
||
<Border Grid.Column="2"
|
||
BorderBrush="{DynamicResource BorderBrush}"
|
||
BorderThickness="1,0,0,0"
|
||
Background="{DynamicResource RegionBrush}">
|
||
<Grid>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="*" MinHeight="120"/>
|
||
<RowDefinition Height="Auto"/>
|
||
</Grid.RowDefinitions>
|
||
|
||
<DockPanel Grid.Row="0" LastChildFill="True">
|
||
|
||
<!-- ===== 标题 + 日期筛选 ===== -->
|
||
<Border DockPanel.Dock="Top" BorderBrush="{DynamicResource BorderBrush}"
|
||
BorderThickness="0,0,0,1" Padding="8,6">
|
||
<StackPanel>
|
||
<DockPanel>
|
||
<StackPanel>
|
||
<TextBlock Text="原料入场记录" FontWeight="SemiBold" FontSize="13"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"/>
|
||
<TextBlock Text="点击记录可回填到左侧表单" FontSize="11" Opacity="0.65"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"/>
|
||
</StackPanel>
|
||
<Button DockPanel.Dock="Right" Content="刷新" Margin="4,0,0,0"
|
||
Command="{Binding RefreshTodayEntriesCommand}"
|
||
Style="{StaticResource ButtonPrimary}"
|
||
Padding="8,2" FontSize="11" Height="26"
|
||
VerticalAlignment="Top"/>
|
||
</DockPanel>
|
||
<ComboBox ItemsSource="{Binding DateRangeOptions}"
|
||
SelectedItem="{Binding SelectedDateRange}"
|
||
Margin="0,6,0,0" Height="26" FontSize="12"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- ===== 入场记录列表(卡片式,支持换行) ===== -->
|
||
<ListBox ItemsSource="{Binding TodayEntries}"
|
||
SelectedItem="{Binding SelectedTodayEntry, Mode=TwoWay}"
|
||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||
BorderThickness="0"
|
||
Background="Transparent"
|
||
ItemContainerStyle="{StaticResource TodayEntryListBoxItemStyle}">
|
||
<ListBox.ItemTemplate>
|
||
<DataTemplate DataType="{x:Type core:MesXslRawMaterialEntry}">
|
||
<Border BorderBrush="{DynamicResource BorderBrush}"
|
||
BorderThickness="0,0,0,1" Padding="8,8">
|
||
<StackPanel>
|
||
|
||
<!-- 第一行:条码 + 打印状态 -->
|
||
<DockPanel>
|
||
<TextBlock DockPanel.Dock="Right"
|
||
Text="{Binding PrintFlagText}"
|
||
FontSize="13" Margin="6,0,0,0"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
VerticalAlignment="Top"/>
|
||
<TextBlock FontSize="14" TextWrapping="Wrap"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
ToolTip="{Binding Barcode}">
|
||
<Run Text="条码:" FontWeight="SemiBold"/>
|
||
<Run Text="{Binding Barcode}"/>
|
||
</TextBlock>
|
||
</DockPanel>
|
||
|
||
<!-- 第二行:榜单号 -->
|
||
<TextBlock FontSize="14" TextWrapping="Wrap"
|
||
Margin="0,5,0,0"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
ToolTip="{Binding BillNo}">
|
||
<Run Text="榜单号:" FontWeight="SemiBold"/>
|
||
<Run Text="{Binding BillNo}"/>
|
||
</TextBlock>
|
||
|
||
<!-- 第三行:批次号(加黑加粗) -->
|
||
<TextBlock FontSize="14" TextWrapping="Wrap"
|
||
FontWeight="Bold"
|
||
Margin="0,5,0,0"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
ToolTip="{Binding BatchNo}">
|
||
<Run Text="批次号:"/>
|
||
<Run Text="{Binding BatchNo}"/>
|
||
</TextBlock>
|
||
|
||
<!-- 物料 + 总重 -->
|
||
<DockPanel Margin="0,5,0,0">
|
||
<TextBlock DockPanel.Dock="Right"
|
||
FontSize="13" Margin="6,0,0,0"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
ToolTip="{Binding TotalWeight, StringFormat={}{0:0.##} KG}"
|
||
VerticalAlignment="Top">
|
||
<Run Text="总重:" FontWeight="SemiBold"/>
|
||
<Run Text="{Binding TotalWeight, StringFormat={}{0:0.##}KG}"/>
|
||
</TextBlock>
|
||
<TextBlock FontSize="14" TextWrapping="Wrap"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
ToolTip="{Binding MaterialName}">
|
||
<Run Text="物料:" FontWeight="SemiBold"/>
|
||
<Run Text="{Binding MaterialName}"/>
|
||
</TextBlock>
|
||
</DockPanel>
|
||
|
||
<!-- 供应商 -->
|
||
<TextBlock FontSize="13" TextWrapping="Wrap"
|
||
Margin="0,4,0,0" Opacity="0.7"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"
|
||
ToolTip="{Binding SupplierName}">
|
||
<Run Text="供应商:" FontWeight="SemiBold"/>
|
||
<Run Text="{Binding SupplierName}"/>
|
||
</TextBlock>
|
||
|
||
</StackPanel>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ListBox.ItemTemplate>
|
||
</ListBox>
|
||
|
||
</DockPanel>
|
||
|
||
<!-- ===== 下方:入场标签实时打印预览(可折叠,仅画布无 JSON) ===== -->
|
||
<StackPanel Grid.Row="1" Margin="0,4,0,0" VerticalAlignment="Bottom">
|
||
<Border BorderBrush="{DynamicResource BorderBrush}"
|
||
BorderThickness="1"
|
||
CornerRadius="6,6,0,0"
|
||
Background="{DynamicResource SecondaryRegionBrush}"
|
||
Padding="10,8">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Grid.Column="0"
|
||
Text="入场标签打印预览"
|
||
FontWeight="SemiBold"
|
||
FontSize="12"
|
||
VerticalAlignment="Center"/>
|
||
<TextBlock Grid.Column="1"
|
||
Text="{Binding PrintPreviewStatus}"
|
||
TextTrimming="CharacterEllipsis"
|
||
FontSize="10"
|
||
Opacity="0.72"
|
||
Margin="8,0,10,0"
|
||
VerticalAlignment="Center"
|
||
Foreground="{DynamicResource SecondaryTextBrush}"/>
|
||
<StackPanel Grid.Column="2"
|
||
Orientation="Horizontal"
|
||
VerticalAlignment="Center"
|
||
HorizontalAlignment="Right">
|
||
<StackPanel Orientation="Horizontal"
|
||
Margin="0,0,8,0"
|
||
VerticalAlignment="Center"
|
||
Visibility="{Binding IsPrintPreviewExpanded, Converter={StaticResource Boolean2VisibilityConverter}}">
|
||
<Button Content="-"
|
||
Width="24"
|
||
Height="24"
|
||
Padding="0"
|
||
FontSize="12"
|
||
Command="{Binding ZoomOutPrintPreviewCommand}"
|
||
Style="{StaticResource ButtonDefault}"
|
||
ToolTip="缩小预览"/>
|
||
<Button Content="{Binding PrintPreviewZoomText}"
|
||
MinWidth="56"
|
||
Height="24"
|
||
Margin="4,0,4,0"
|
||
Padding="10,0"
|
||
FontSize="11"
|
||
Command="{Binding ResetPrintPreviewZoomCommand}"
|
||
Style="{StaticResource ButtonDefault}"
|
||
ToolTip="重置为 70%"/>
|
||
<Button Content="+"
|
||
Width="24"
|
||
Height="24"
|
||
Padding="0"
|
||
FontSize="12"
|
||
Command="{Binding ZoomInPrintPreviewCommand}"
|
||
Style="{StaticResource ButtonDefault}"
|
||
ToolTip="放大预览"/>
|
||
</StackPanel>
|
||
<ToggleButton IsChecked="{Binding IsPrintPreviewExpanded, Mode=TwoWay}"
|
||
MinWidth="56"
|
||
Height="24"
|
||
Background="Transparent"
|
||
BorderThickness="1"
|
||
Padding="8,0"
|
||
FocusVisualStyle="{x:Null}"
|
||
Cursor="Hand"
|
||
VerticalAlignment="Center">
|
||
<ToggleButton.Template>
|
||
<ControlTemplate TargetType="ToggleButton">
|
||
<Border Background="{TemplateBinding Background}"
|
||
BorderBrush="{DynamicResource BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="2"
|
||
Padding="{TemplateBinding Padding}">
|
||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||
</Border>
|
||
</ControlTemplate>
|
||
</ToggleButton.Template>
|
||
<TextBlock FontSize="12"
|
||
VerticalAlignment="Center"
|
||
HorizontalAlignment="Center">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Text" Value="展开"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=ToggleButton}}" Value="True">
|
||
<Setter Property="Text" Value="折叠"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</ToggleButton>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Border>
|
||
<Border BorderBrush="{DynamicResource BorderBrush}"
|
||
BorderThickness="1,0,1,1"
|
||
CornerRadius="0,0,2,2"
|
||
Padding="0"
|
||
MinHeight="200"
|
||
MaxHeight="420"
|
||
Background="#525659"
|
||
Visibility="{Binding IsPrintPreviewWebAreaVisible, Converter={StaticResource Boolean2VisibilityConverter}}">
|
||
<wv2:WebView2 x:Name="PrintPreviewWebView"
|
||
DefaultBackgroundColor="#FF525659"/>
|
||
</Border>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Border>
|
||
</Grid>
|
||
|
||
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,12,0,20">
|
||
<Button Content="保存并打印入场记录"
|
||
Command="{Binding SaveAndPrintCommand}"
|
||
Style="{StaticResource ButtonPrimary}"
|
||
IsEnabled="{Binding IsNotActionBusy}"
|
||
Width="168" Margin="0,0,15,0"
|
||
ToolTip="保存成功后直接发送到已选打印机(不弹预览窗口)"/>
|
||
<Button Content="保存"
|
||
Command="{Binding SaveCommand}"
|
||
Style="{StaticResource ButtonDefault}"
|
||
IsEnabled="{Binding IsNotActionBusy}"
|
||
Width="100" Margin="0,0,15,0"/>
|
||
<Button Content="生成原材料卡片"
|
||
Command="{Binding GenerateRawMaterialCardsCommand}"
|
||
Style="{StaticResource ButtonDefault}"
|
||
Width="130"
|
||
IsEnabled="{Binding CanGenerateCards}"
|
||
ToolTip="根据拆码明细生成原材料卡片(需先保存入场记录)"/>
|
||
</StackPanel>
|
||
|
||
<!-- 底部动作按钮忙碌遮罩:保存/保存并打印/生成时显示,禁止重复点击 -->
|
||
<Border Grid.RowSpan="4"
|
||
Panel.ZIndex="999"
|
||
Background="#66000000"
|
||
Visibility="{Binding IsActionBusy, Converter={StaticResource Boolean2VisibilityConverter}}">
|
||
<Border Width="220"
|
||
Height="120"
|
||
CornerRadius="8"
|
||
Background="#F2FFFFFF"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
Padding="16">
|
||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
||
<hc:LoadingCircle Width="42" Height="42"/>
|
||
<TextBlock Text="{Binding ActionBusyText}"
|
||
Margin="0,14,0,0"
|
||
FontSize="14"
|
||
FontWeight="SemiBold"
|
||
Foreground="{DynamicResource PrimaryTextBrush}"
|
||
HorizontalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</Border>
|
||
</Grid>
|
||
</UserControl>
|