- Кроссплатформенный Avalonia-UI (net8.0, не net8.0-windows): экраны вход/ продажа/оплата/смена/возврат, тёмная тема, ViewLocator, компилируемые привязки. - Живое связывание: логин→сессия→Refit-API, привязка к точке; продажа (скан/ поиск/количество/весовой/скидки/удаление), модальная оплата → запись чека в офлайн-очередь + печать + попытка выгрузки; смена open/close/drawer на api/money/shifts; горячие клавиши F1/F2/F7/F9/F10/F12/Esc/Del (работа без мыши); индикатор связи/очереди + фоновая синхронизация; автопроверка версии. - Оборудование: ESC/POS-билдер (CP866, USB/COM/сеть, 58/80мм) + текст/PDF запасной; весы CAS/Масса-К (COM) + ручной ввод; IFiscalProvider — заглушка. - DpapiTokenStore (Windows, scope CurrentUser) для refresh-токена; 0600 на Linux. - Инструменты CLI: --smoke (замеры/сценарий без UI), --screenshots (headless рендер экранов), --uitest (headless UI-автотест, 15 проверок, Avalonia.Headless). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.7 KiB
XML
29 lines
1.7 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:vm="clr-namespace:foodmarket.Pos.ViewModels"
|
|
x:Class="foodmarket.Pos.Views.LoginView"
|
|
x:DataType="vm:LoginViewModel">
|
|
<Grid Background="#0f172a">
|
|
<Border Background="#1e293b" CornerRadius="12" Width="440" Padding="28" VerticalAlignment="Center" HorizontalAlignment="Center">
|
|
<StackPanel Spacing="14">
|
|
<TextBlock Text="FOOD MARKET" Foreground="#22c55e" FontWeight="Bold" FontSize="22" HorizontalAlignment="Center"/>
|
|
<TextBlock Text="Вход кассира" Foreground="#f8fafc" FontSize="18" HorizontalAlignment="Center"/>
|
|
<StackPanel Spacing="4">
|
|
<TextBlock Text="Адрес сервера" Foreground="#94a3b8"/>
|
|
<TextBox Classes="pos" Text="{Binding ServerUrl}" FontSize="16"/>
|
|
</StackPanel>
|
|
<StackPanel Spacing="4">
|
|
<TextBlock Text="Логин кассира" Foreground="#94a3b8"/>
|
|
<TextBox Classes="pos" Text="{Binding Username}" FontSize="18"/>
|
|
</StackPanel>
|
|
<StackPanel Spacing="4">
|
|
<TextBlock Text="PIN / пароль" Foreground="#94a3b8"/>
|
|
<TextBox Classes="pos" Text="{Binding Pin}" PasswordChar="●" FontSize="18"/>
|
|
</StackPanel>
|
|
<TextBlock Text="{Binding Error}" Foreground="#fca5a5" IsVisible="{Binding Error, Converter={x:Static ObjectConverters.IsNotNull}}"/>
|
|
<Button Classes="pos primary" HorizontalAlignment="Stretch" Height="56" FontSize="18" Content="Войти" Command="{Binding LoginCommand}" IsDefault="True" IsEnabled="{Binding !Busy}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
</Grid>
|
|
</UserControl>
|