change - 删除时添加确认界面

dev
WenJY 1 day ago
parent fef4b32c41
commit 0a8fcbf4df

@ -108,9 +108,13 @@ public abstract partial class CrudPageViewModel<T> : ObservableObject, ICrudPage
}
[RelayCommand]
private void Delete()
private async System.Threading.Tasks.Task Delete()
{
if (SelectedItem is null) return;
var dialog = new Views.Base.ConfirmDialog();
var ok = await dialog.ShowDialog("确定要删除该条记录吗?此操作不可恢复。", GetMainWindow());
if (!ok) return;
var prop = typeof(T).GetProperty("objId") ?? typeof(T).GetProperty("ObjId");
if (prop is null) return;
var id = prop.GetValue(SelectedItem);

@ -86,8 +86,10 @@ public partial class DeviceInfoViewModel : CrudPageViewModel<BaseDeviceInfo>
}
}
public void DeleteParam(BaseDeviceParam param)
public async System.Threading.Tasks.Task DeleteParamAsync(BaseDeviceParam param)
{
var dlg = new Sln.Wcs.UI.Views.Base.ConfirmDialog();
if (!await dlg.ShowDialog("确定要删除该参数吗?", GetMainWindow())) return;
_paramService.DeleteById(param.objId);
LoadParams();
}

@ -86,8 +86,10 @@ public partial class PathInfoViewModel : CrudPageViewModel<BasePathInfo>
}
}
public void DeleteDetail(BasePathDetails detail)
public async System.Threading.Tasks.Task DeleteDetailAsync(BasePathDetails detail)
{
var dlg = new Sln.Wcs.UI.Views.Base.ConfirmDialog();
if (!await dlg.ShowDialog("确定要删除该明细吗?", GetMainWindow())) return;
_detailService.DeleteById(detail.objId);
LoadDetails();
}

@ -92,8 +92,10 @@ public partial class TaskQueueViewModel : CrudPageViewModel<LiveTaskQueue>
}
}
public void DeleteDetail(LiveTaskDetail detail)
public async System.Threading.Tasks.Task DeleteDetailAsync(LiveTaskDetail detail)
{
var dlg = new Sln.Wcs.UI.Views.Base.ConfirmDialog();
if (!await dlg.ShowDialog("确定要删除该明细吗?", GetMainWindow())) return;
_detailService.DeleteById(detail.objId);
LoadDetails();
}

@ -0,0 +1,50 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Sln.Wcs.UI.Views.Base.ConfirmDialog"
x:CompileBindings="False"
Title="确认操作"
SizeToContent="WidthAndHeight"
MaxWidth="380"
WindowStartupLocation="CenterOwner"
CanResize="False"
Background="Transparent"
ExtendClientAreaToDecorationsHint="True"
ExtendClientAreaChromeHints="PreferSystemChrome"
SystemDecorations="Full">
<Border Background="{DynamicResource SurfaceBgBrush}" CornerRadius="10"
BorderBrush="{DynamicResource AccentBgBrush}" BorderThickness="1">
<Grid RowDefinitions="Auto,*,Auto" Margin="0" MinWidth="300">
<!-- Title -->
<Border Grid.Row="0" Padding="20,14" CornerRadius="10,10,0,0"
Background="{DynamicResource CardBgBrush}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
<StackPanel Orientation="Horizontal" Spacing="10">
<Rectangle Width="3" Height="18" Fill="#FFB74D" RadiusX="2" RadiusY="2" />
<TextBlock x:Name="TitleText" Text="确认操作" FontSize="15" FontWeight="SemiBold" Foreground="{DynamicResource PrimaryTextBrush}" />
</StackPanel>
</Border>
<!-- Message -->
<StackPanel Grid.Row="1" Margin="24,20,24,16">
<TextBlock x:Name="MessageText" Text="" FontSize="13"
Foreground="{DynamicResource SecondaryTextBrush}" TextWrapping="Wrap" />
</StackPanel>
<!-- Buttons -->
<Border Grid.Row="2" Padding="20,12" CornerRadius="0,0,10,10"
Background="{DynamicResource PageBgBrush}" BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,1,0,0">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Spacing="10">
<Button x:Name="CancelBtn" Content="取 消"
FontSize="12" Padding="24,8"
Background="{DynamicResource PrimaryBgBrush}" Foreground="{DynamicResource SecondaryTextBrush}"
BorderBrush="{DynamicResource BorderBrush}" BorderThickness="1"
CornerRadius="4" />
<Button x:Name="ConfirmBtn" Content="确 认"
FontSize="12" Padding="24,8"
Background="{DynamicResource DangerBtnBrush}" Foreground="White"
CornerRadius="4" />
</StackPanel>
</Border>
</Grid>
</Border>
</Window>

@ -0,0 +1,31 @@
using System.Threading.Tasks;
using Avalonia.Controls;
namespace Sln.Wcs.UI.Views.Base;
public partial class ConfirmDialog : Window
{
private TaskCompletionSource<bool>? _tcs;
public ConfirmDialog()
{
InitializeComponent();
CancelBtn.Click += (_, _) => CloseWith(false);
ConfirmBtn.Click += (_, _) => CloseWith(true);
}
public Task<bool> ShowDialog(string message, Window owner, string title = "确认操作")
{
TitleText.Text = title;
MessageText.Text = message;
_tcs = new TaskCompletionSource<bool>();
ShowDialog(owner);
return _tcs.Task;
}
private void CloseWith(bool result)
{
_tcs?.TrySetResult(result);
Close();
}
}

@ -65,10 +65,10 @@ public partial class DeviceInfoListView : UserControl
await vm.EditParamAsync(param);
}
private void ParamDelete_Click(object? sender, RoutedEventArgs e)
private async void ParamDelete_Click(object? sender, RoutedEventArgs e)
{
if (sender is Button btn && btn.Tag is Sln.Wcs.Model.Domain.BaseDeviceParam param && DataContext is DeviceInfoViewModel vm)
vm.DeleteParam(param);
await vm.DeleteParamAsync(param);
}
private async System.Threading.Tasks.Task AnimateSlideIn()

@ -65,10 +65,10 @@ public partial class PathInfoListView : UserControl
await vm.EditDetailAsync(detail);
}
private void DetailDelete_Click(object? sender, RoutedEventArgs e)
private async void DetailDelete_Click(object? sender, RoutedEventArgs e)
{
if (sender is Button btn && btn.Tag is Sln.Wcs.Model.Domain.BasePathDetails detail && DataContext is PathInfoViewModel vm)
vm.DeleteDetail(detail);
await vm.DeleteDetailAsync(detail);
}
private async System.Threading.Tasks.Task AnimateSlideIn()

@ -65,10 +65,10 @@ public partial class TaskQueueListView : UserControl
await vm.EditDetailAsync(detail);
}
private void DetailDelete_Click(object? sender, RoutedEventArgs e)
private async void DetailDelete_Click(object? sender, RoutedEventArgs e)
{
if (sender is Button btn && btn.Tag is Sln.Wcs.Model.Domain.LiveTaskDetail detail && DataContext is TaskQueueViewModel vm)
vm.DeleteDetail(detail);
await vm.DeleteDetailAsync(detail);
}
private async System.Threading.Tasks.Task AnimateSlideIn()

Loading…
Cancel
Save