Раньше поиск шёл только кнопкой «Найти». Добавлен KeyBinding Enter → SearchCommand прямо в поле ввода: набрал название, нажал Enter — ищет. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
141 lines
11 KiB
XML
141 lines
11 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:vm="using:Elfisa.Avalonia.ViewModels"
|
||
xmlns:conv="using:Avalonia.Data.Converters"
|
||
x:Class="Elfisa.Avalonia.Views.PriceListView"
|
||
x:DataType="vm:PriceListViewModel">
|
||
|
||
<DockPanel Margin="24">
|
||
<Grid DockPanel.Dock="Top" Margin="0,0,0,14" ColumnDefinitions="*,Auto">
|
||
<StackPanel Grid.Column="0" Spacing="2" VerticalAlignment="Center">
|
||
<TextBlock Text="Прайс-лист" Classes="h1"/>
|
||
<TextBlock Text="Каталог позиций — собери заказ и сохрани" Classes="muted"/>
|
||
</StackPanel>
|
||
<!-- Мои прайсы: видно, по какому прайсу заказываем; если подключено несколько — можно выбрать -->
|
||
<Border Grid.Column="1" VerticalAlignment="Center" Padding="12,8" CornerRadius="10"
|
||
Background="{DynamicResource Panel}" BorderThickness="1" BorderBrush="{DynamicResource Border}">
|
||
<StackPanel Orientation="Horizontal" Spacing="10" VerticalAlignment="Center">
|
||
<TextBlock Text="Мои прайсы" Classes="label" VerticalAlignment="Center"/>
|
||
<ComboBox ItemsSource="{Binding MyPriceLists}" SelectedItem="{Binding SelectedPriceList}"
|
||
MinWidth="240" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</Grid>
|
||
|
||
<Border DockPanel.Dock="Top" Margin="0,0,0,10" Padding="10,7" CornerRadius="6"
|
||
Background="{DynamicResource AccentSoft}"
|
||
IsVisible="{Binding Status, Converter={x:Static conv:ObjectConverters.IsNotNull}}">
|
||
<TextBlock Text="{Binding Status}" Foreground="{DynamicResource AccentPressed}" TextWrapping="Wrap" FontSize="12.5"/>
|
||
</Border>
|
||
|
||
<Grid ColumnDefinitions="*,16,430">
|
||
|
||
<!-- Каталог -->
|
||
<Border Grid.Column="0" Classes="card" Padding="0" ClipToBounds="True">
|
||
<DockPanel>
|
||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="10" Margin="14">
|
||
<TextBox Text="{Binding Search}" Width="330" Watermark="поиск по наименованию (от 2 символов)…">
|
||
<TextBox.KeyBindings>
|
||
<KeyBinding Gesture="Enter" Command="{Binding SearchCommand}"/>
|
||
</TextBox.KeyBindings>
|
||
</TextBox>
|
||
<Button Classes="primary" Content="Найти" Command="{Binding SearchCommand}" IsEnabled="{Binding !Busy}"/>
|
||
</StackPanel>
|
||
<Border DockPanel.Dock="Bottom" Margin="14" Padding="0">
|
||
<StackPanel Orientation="Horizontal" Spacing="10" VerticalAlignment="Center">
|
||
<TextBlock Text="Кол-во" Classes="label" VerticalAlignment="Center"/>
|
||
<NumericUpDown Value="{Binding SelectedOffer.OrderQty}" Minimum="0" Maximum="100000" Increment="1" FormatString="0" Width="120"
|
||
IsEnabled="{Binding SelectedOffer, Converter={x:Static conv:ObjectConverters.IsNotNull}}"/>
|
||
<Button Classes="primary" Content="Добавить в заказ ▸" Command="{Binding AddToOrderCommand}"/>
|
||
<TextBlock Text="или выдели строку и набери число на клавиатуре, Enter — добавить" Classes="muted" VerticalAlignment="Center" TextWrapping="Wrap" MaxWidth="240"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<!-- Дрилдаун как в старой программе: Название → МГ → Предложения -->
|
||
<Grid ColumnDefinitions="1.3*,10,120,10,2.2*" Margin="14,0,14,0">
|
||
|
||
<!-- Название (базовое наименование) -->
|
||
<DockPanel Grid.Column="0">
|
||
<TextBlock DockPanel.Dock="Top" Text="Название" Classes="label" Margin="2,0,0,5"/>
|
||
<ListBox ItemsSource="{Binding BaseNames}" SelectedItem="{Binding SelectedBaseName}"
|
||
BorderThickness="1" BorderBrush="{DynamicResource Border}" CornerRadius="8"/>
|
||
</DockPanel>
|
||
|
||
<!-- МГ (дозировка) -->
|
||
<DockPanel Grid.Column="2">
|
||
<TextBlock DockPanel.Dock="Top" Text="МГ" Classes="label" Margin="2,0,0,5"/>
|
||
<ListBox ItemsSource="{Binding MgOptions}" SelectedItem="{Binding SelectedMg}"
|
||
BorderThickness="1" BorderBrush="{DynamicResource Border}" CornerRadius="8"/>
|
||
</DockPanel>
|
||
|
||
<!-- Предложения (фильтр: название + МГ) -->
|
||
<DockPanel Grid.Column="4">
|
||
<TextBlock DockPanel.Dock="Top" Text="Предложения" Classes="label" Margin="2,0,0,5"/>
|
||
<DataGrid x:Name="OffersGrid" ItemsSource="{Binding Offers}" SelectedItem="{Binding SelectedOffer}" x:CompileBindings="False"
|
||
AutoGenerateColumns="False" IsReadOnly="True" HeadersVisibility="Column"
|
||
CanUserResizeColumns="True" CanUserSortColumns="False"
|
||
BorderThickness="1" BorderBrush="{DynamicResource Border}" CornerRadius="8">
|
||
<DataGrid.Columns>
|
||
<DataGridTextColumn Header="Наименование" Width="*" Binding="{Binding DrugName}"/>
|
||
<DataGridTextColumn Header="Поставщик" Width="140" Binding="{Binding SupplierName}"/>
|
||
<DataGridTextColumn Header="Цена" Width="85" Binding="{Binding Price, StringFormat='{}{0:N2}'}" CellStyleClasses="num"/>
|
||
<DataGridTextColumn Header="Остаток" Width="75" Binding="{Binding Quantity, StringFormat='{}{0:0}'}" CellStyleClasses="num"/>
|
||
<DataGridTextColumn Header="Заказ" Width="70" Binding="{Binding OrderQty, StringFormat='{}{0:0}'}" CellStyleClasses="num"
|
||
FontWeight="Bold" Foreground="{DynamicResource Accent}"/>
|
||
</DataGrid.Columns>
|
||
</DataGrid>
|
||
</DockPanel>
|
||
</Grid>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<!-- Мой заказ -->
|
||
<Border Grid.Column="2" Classes="card" Padding="16">
|
||
<DockPanel>
|
||
<TextBlock DockPanel.Dock="Top" Text="Мой заказ" Classes="h2" Margin="0,0,0,10"/>
|
||
|
||
<StackPanel DockPanel.Dock="Bottom" Spacing="10" Margin="0,12,0,0">
|
||
<StackPanel Spacing="5">
|
||
<TextBlock Text="Грузополучатель" Classes="muted"/>
|
||
<ComboBox ItemsSource="{Binding Locations}" SelectedItem="{Binding SelectedLocation}" HorizontalAlignment="Stretch"/>
|
||
</StackPanel>
|
||
<TextBox Text="{Binding Comment}" Watermark="комментарий (необязательно)"/>
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<TextBlock Grid.Column="0" Text="Итого" FontWeight="SemiBold" VerticalAlignment="Center" Foreground="{DynamicResource Text}"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding CartTotal, StringFormat='{}{0:N2}'}" FontWeight="Bold" FontSize="16" Foreground="{DynamicResource Accent}"/>
|
||
</Grid>
|
||
<Button Classes="primary" Content="Сохранить заказ" HorizontalAlignment="Stretch" Command="{Binding SaveDraftCommand}"/>
|
||
<TextBlock Text="Черновик появится в «Заказы» со статусом «Не отправлен»." Classes="muted" TextWrapping="Wrap"/>
|
||
</StackPanel>
|
||
|
||
<ScrollViewer>
|
||
<ItemsControl ItemsSource="{Binding Cart}" x:CompileBindings="False">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:CartItem">
|
||
<Border Padding="10" Margin="0,0,0,8" CornerRadius="9"
|
||
Background="{DynamicResource RowAlt}" BorderThickness="1" BorderBrush="{DynamicResource Border}">
|
||
<DockPanel>
|
||
<Button DockPanel.Dock="Right" Content="✕" Width="30" Height="30" Padding="0"
|
||
VerticalAlignment="Top" Background="Transparent" Foreground="{DynamicResource Muted}" Cursor="Hand"
|
||
Command="{Binding $parent[ItemsControl].DataContext.RemoveFromCartCommand}"
|
||
CommandParameter="{Binding}"/>
|
||
<StackPanel Spacing="6">
|
||
<TextBlock Text="{Binding Name}" Foreground="{DynamicResource Text}" TextWrapping="Wrap" MaxLines="2" TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Text="{Binding Supplier}" Classes="muted"/>
|
||
<Grid ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
||
<NumericUpDown Grid.Column="0" Value="{Binding Qty}" Minimum="1" Maximum="100000" Increment="1" FormatString="0" Width="120"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding Price, StringFormat='× {0:N2}'}" Classes="muted" VerticalAlignment="Center" Margin="10,0"/>
|
||
<TextBlock Grid.Column="2" Text="{Binding LineSum, StringFormat='{}{0:N2}'}" FontWeight="SemiBold" Foreground="{DynamicResource Text}" VerticalAlignment="Center"/>
|
||
</Grid>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</ScrollViewer>
|
||
</DockPanel>
|
||
</Border>
|
||
</Grid>
|
||
</DockPanel>
|
||
</UserControl>
|