/
kochkatech
/
Queue
Обзор
Документация
Войти
/
kochkatech
/
Queue
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
dev
src/Queue.Display/Views/BoardWindow.xaml
115 строк
8 KB
kochkareal
feat: вкладка "Экраны" в Admin — запуск/управление табло и АРМ оператора
27 июл 2026, 21:26
27 июл 2026, 21:26
62e41f9
Код
Авторство
О чём код?
<Window x:Class="Queue.Display.Views.BoardWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Очередь — табло" Background="#0C123C" KeyDown="BoardWindow_KeyDown"> <!-- Viewbox масштабирует весь макет как единое целое под фактический размер окна/экрана — разметка проектируется на условном холсте 1920x1080, а дальше просто растягивается (Uniform — с сохранением пропорций, буквально как показ слайда на любом проекторе). Без этого крупные фиксированные размеры (FontSize=150 и т.п.) выглядели бы то слишком большими, то слишком маленькими в зависимости от реального разрешения ТВ/монитора. --> <Viewbox Stretch="Uniform"> <Grid Width="1920" Height="1080"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <!-- Шапка — отдельная полоса чуть светлее фона, чтобы визуально отделить бренд-плашку от содержимого табло (раньше логотип и контент были на одном сплошном фоне без какой-либо структуры). --> <Border Grid.Row="0" Background="#131A4A" Padding="48,24"> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="26" FontWeight="Bold" VerticalAlignment="Center"> <Run Text="КОЧКА" Foreground="White" /><Run Text="ТЕХ" Foreground="GreenYellow" /> </TextBlock> <TextBlock Text="Табло очереди" Foreground="White" Opacity="0.55" FontSize="17" VerticalAlignment="Center" Margin="16,4,0,0" /> </StackPanel> </Border> <Grid Grid.Row="1" Margin="48,32"> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="32" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!-- Карточка вызовов. Только номер талона и окно — какая именно услуга нужна конкретному посетителю, посторонним в зале ожидания видеть незачем. Каждый вызов — отдельная строка "номер слева, окно справа" (как на табло вылетов в аэропорту): раньше было одно огромное число и мелкая история под ним отдельными квадратиками — не сразу понятно, какому номеру какое окно соответствует, если вызовов несколько одновременно. --> <Border Grid.Column="0" Background="#131A4A" CornerRadius="16" Padding="40"> <DockPanel> <TextBlock DockPanel.Dock="Top" Text="ВЫЗВАНЫ" Foreground="GreenYellow" FontSize="22" FontWeight="Bold" Margin="0,0,0,24" /> <StackPanel VerticalAlignment="Top"> <!-- Самый свежий вызов — крупнее и на подсвеченном фоне, чтобы сразу бросался в глаза среди остальных строк. --> <Grid Margin="0,0,0,16"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Border Grid.ColumnSpan="2" Background="#1A2158" CornerRadius="12" /> <TextBlock Grid.Column="0" Text="{Binding CurrentCall.Number, FallbackValue=—}" Foreground="White" FontSize="90" FontWeight="Bold" Margin="32,16" VerticalAlignment="Center" /> <Border Grid.Column="1" Background="GreenYellow" CornerRadius="999" Padding="28,14" Margin="0,0,32,0" VerticalAlignment="Center"> <TextBlock Text="{Binding CurrentCall.WindowName, Mode=OneWay}" Foreground="#0C123C" FontSize="32" FontWeight="Bold" /> </Border> </Grid> <ItemsControl ItemsSource="{Binding RecentCalls}"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid Margin="32,10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding Number}" Foreground="White" Opacity="0.85" FontSize="48" FontWeight="Bold" VerticalAlignment="Center" /> <Border Grid.Column="1" BorderBrush="GreenYellow" BorderThickness="2" CornerRadius="999" Padding="20,8" VerticalAlignment="Center"> <TextBlock Text="{Binding WindowName}" Foreground="GreenYellow" FontSize="22" FontWeight="Bold" /> </Border> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> </DockPanel> </Border> <!-- Карточка очереди ожидания — тоже только номер, без услуги. --> <Border Grid.Column="2" Background="#131A4A" CornerRadius="16" Padding="32"> <DockPanel> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="0,0,0,20"> <TextBlock Text="Ожидают" Foreground="White" FontSize="20" FontWeight="Bold" VerticalAlignment="Center" /> <Border Background="GreenYellow" CornerRadius="999" Padding="12,2" Margin="12,0,0,0" VerticalAlignment="Center"> <TextBlock Text="{Binding WaitingCount, Mode=OneWay}" Foreground="#0C123C" FontWeight="Bold" FontSize="16" /> </Border> </StackPanel> <ItemsControl ItemsSource="{Binding Waiting}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Border Background="#1A2158" CornerRadius="8" Padding="20,14" Margin="0,0,12,12"> <TextBlock Text="{Binding Number}" Foreground="White" FontSize="26" FontWeight="Bold" /> </Border> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </DockPanel> </Border> </Grid> </Grid> </Viewbox> </Window>