- CartService: единая корзина для Прайс-листа и Отправить - Прайс-лист: выбор позиции + кол-во + «Добавить в заказ», индикатор корзины - Настройки (диалог ⚙ в шапке): адрес API, тема (свет/тьма, применяется сразу), грузополучатель по умолчанию; сохранение в %APPDATA% - SettingsStore (Core) + AppConfig читает сохранённый API-адрес - тема применяется на старте Проверено вживую: добавление из Прайс-листа в корзину, диалог настроек. Реальная отправка заказа (POST) — собрана и связана, живой заказ по явному «да» (автозащита блокирует боевую транзакцию без подтверждения). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
54 lines
3.3 KiB
XML
54 lines
3.3 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">
|
|
<StackPanel Spacing="2" VerticalAlignment="Center">
|
|
<TextBlock Text="Прайс-лист" Classes="h1"/>
|
|
<TextBlock Text="Каталог доступных позиций и цены" Classes="muted"/>
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
<Border DockPanel.Dock="Top" Classes="card" Margin="0,0,0,12" Padding="16">
|
|
<StackPanel Orientation="Horizontal" Spacing="10">
|
|
<TextBox Text="{Binding Search}" Width="440"
|
|
Watermark="поиск по наименованию (от 2 символов)…"/>
|
|
<Button Classes="primary" Content="Найти" Command="{Binding SearchCommand}" IsEnabled="{Binding !Busy}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<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}" FontSize="12.5"/>
|
|
</Border>
|
|
|
|
<Border DockPanel.Dock="Bottom" Classes="card" Margin="0,10,0,0" Padding="14">
|
|
<StackPanel Orientation="Horizontal" Spacing="12" VerticalAlignment="Center">
|
|
<TextBlock Text="Кол-во" Classes="label"/>
|
|
<NumericUpDown Value="{Binding Qty}" Minimum="1" Maximum="100000" Increment="1" FormatString="0" Width="130"/>
|
|
<Button Classes="primary" Content="Добавить в заказ ▸" Command="{Binding AddToOrderCommand}"/>
|
|
<TextBlock Text="{Binding CartInfo}" Classes="muted" VerticalAlignment="Center" Margin="10,0,0,0"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border Classes="card" Padding="0" ClipToBounds="True">
|
|
<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" x:CompileBindings="False"
|
|
AutoGenerateColumns="False" IsReadOnly="True" HeadersVisibility="Column"
|
|
CanUserResizeColumns="True" CanUserSortColumns="False">
|
|
<DataGrid.Columns>
|
|
<DataGridTextColumn Header="Наименование" Width="*" Binding="{Binding DrugName}"/>
|
|
<DataGridTextColumn Header="Форма" Width="150" Binding="{Binding CureForm}"/>
|
|
<DataGridTextColumn Header="Производитель" Width="220" Binding="{Binding Manufacturer}"/>
|
|
<DataGridTextColumn Header="Поставщик" Width="130" Binding="{Binding SupplierName}"/>
|
|
<DataGridTextColumn Header="Цена" Width="110" Binding="{Binding Price, StringFormat='{}{0:N2}'}" CellStyleClasses="num"/>
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</Border>
|
|
</DockPanel>
|
|
</UserControl>
|