浏览代码

fix 所有操作按钮添加弹窗确认

jiangjy 3 天之前
父节点
当前提交
e34932b71d

+ 42 - 0
Furnace/FurnaceUI/Views/Maintenances/BoatRobotViewModel.cs

@@ -361,6 +361,9 @@ namespace FurnaceUI.Views.Maintenances
 
         public void MoveTo(object targetPosition)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to MoveTo {targetPosition}?"))
+                return;
+
             switch (targetPosition)
             {
                 case "Position1":
@@ -419,6 +422,9 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void BoatZServoTest()
         {
+            if (!DialogBox.Confirm($"Are you sure  want to Move Test?"))
+                return;
+
             if (string.IsNullOrEmpty(ZAxisTestStartPosition))
             {
                 return;
@@ -434,10 +440,16 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void BoatRotationServoTest(object targetPosition)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to CW?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"Boat.RAxisMovingTest", targetPosition);
         }
         public void BoatTestStart()
         {
+            if (!DialogBox.Confirm($"Are you sure  want to  Test Start?"))
+                return;
+
             if (zPositionTranslate.Keys.Contains(ZAxisTestStartPosition) && zPositionTranslate.Keys.Contains(ZAxisTestStartPosition))
             {
                 InvokeClient.Instance.Service.DoOperation($"Boat.MovingTest", zPositionTranslate[ZAxisTestStartPosition], zPositionTranslate[ZAxisTestEndPosition], RAxisTestDirection);
@@ -450,50 +462,80 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void BoatTestStop()
         {
+            if (!DialogBox.Confirm($"Are you sure  want to  Test Stop?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"Boat.Abort");
         }
 
         public void ShutterTestStart()
         {
+            if (!DialogBox.Confirm($"Are you sure  want to Shutter Test Start?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"Boat.ShutterCycleTest");
 
         }
         public void ShutterTestStop()
         {
+            if (!DialogBox.Confirm($"Are you sure  want to Shutter Test Stop?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"Boat.Abort");
         }
 
         public void BoatRotationServoStopTest()
         {
+            if (!DialogBox.Confirm($"Are you sure  want to  Abort?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"Boat.Abort");
         }
 
         public void Home(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to  Home?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.ServoHome");
         }
 
         public void SetServoOn(object target, object isOn)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {isOn} ?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}", $"{isOn}");
         }
 
         public void Continue(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to  Continue?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.Continue");
         }
         public void Stop(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to  Stop?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.ServoStop");
         }
         public void Reset(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to  Reset?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.ServoResetAlarm");
         }
 
         public void SetOpen(object target, bool open)
         {
+            var str = open ? "open" : "false";
             // IsAutoDoorEnableManualOperation
+            if (!DialogBox.Confirm($"Are you sure  want to  {str} Shutter?"))
+                return;
 
             InvokeClient.Instance.Service.DoOperation($"{target}", open);
         }

+ 23 - 0
Furnace/FurnaceUI/Views/Maintenances/BufferRobotViewModel.cs

@@ -173,21 +173,38 @@ namespace FurnaceUI.Views.Maintenances
 
         public void SetValue()
         {
+            if (string.IsNullOrEmpty(SelectedTargetPosition))
+                return;
+
+            if (!DialogBox.Confirm($"Are you sure  want to buffer Set {SelectedTargetPosition}?"))
+                return;
+
             var target = _targetPositionDic.ContainsKey(SelectedTargetPosition) ? _targetPositionDic[SelectedTargetPosition] : SelectedTargetPosition;
             InvokeClient.Instance.Service.DoOperation($"PM1.BufferServo.ServoTargetPosition", target);
         }
 
         public void MoveTo()
         {
+            if (!DialogBox.Confirm($"Are you sure  want to move?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"PM1.BufferServo.ServoMoveTo", "");
         }
 
         public void SetServoOn(object target, object isOn)
         {
+            var str = bool.Parse(isOn.ToString()) ? "On" : "Off";
+            if (!DialogBox.Confirm($"Are you sure  want to buffer  Servo {str}?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}", $"{isOn}");
         }
         public void BufferSaveValue(object obj, object tb)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to SaveValue?"))
+                return;
+
+
             switch (obj)
             {
              
@@ -205,10 +222,16 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void Stop(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to Stop?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.ServoStop");
         }
         public void Reset(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to Reset?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.ServoResetAlarm");
         }
 

+ 223 - 178
Furnace/FurnaceUI/Views/Maintenances/FIMSSensorView.xaml

@@ -9,7 +9,7 @@
              xmlns:deviceControl="clr-namespace:Aitex.Core.UI.DeviceControl;assembly=MECF.Framework.UI.Core"
              xmlns:local="clr-namespace:FurnaceUI.Views.Maintenances"
              mc:Ignorable="d" 
-             d:DesignHeight="420" d:DesignWidth="1040" x:Name="self">
+             d:DesignHeight="420"  x:Name="self">
     <UserControl.Resources>
         <DataTemplate  x:Key="IndexTemplate">
             <Label Content="{Binding Index}"  Width="30" Height="36" VerticalAlignment="Center" HorizontalAlignment="Left"></Label>
@@ -25,184 +25,230 @@
         </DataTemplate>
 
     </UserControl.Resources>
-    <Grid Margin="10,0,10,0" Height="420" Width="1000">
-        <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="500"/>
-            <ColumnDefinition Width="500"/>
-        </Grid.ColumnDefinitions>
-        <Grid.RowDefinitions>
-            <RowDefinition  Height="310"/>
-            <RowDefinition Height="90"/>
-        </Grid.RowDefinitions>
-        <Canvas Grid.Column="0" Grid.Row="0"  >
-            <Grid Margin="10 10 10 10" >
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="30"></RowDefinition>
-                    <RowDefinition Height="290"></RowDefinition>
-                </Grid.RowDefinitions>
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="130"></ColumnDefinition>
-                    <ColumnDefinition Width="130"></ColumnDefinition>
-                    <ColumnDefinition Width="110"></ColumnDefinition>
-                    <ColumnDefinition Width="110"></ColumnDefinition>
-                </Grid.ColumnDefinitions>
-
-                <Label Content="FIMS1 Information" Style="{DynamicResource Table_TitleStyle}" Grid.Row="0" Grid.ColumnSpan="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
-                <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1 0 1 1" Background="{DynamicResource Table_BG_Title}" Grid.Row="1" Padding="5,1">
-                    <TextBlock Text="Status" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
-                </Border>
-                <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.ColumnSpan="2"  Grid.Column="1" Padding="5,1">
-                    <TextBlock Text="{Binding FIMS1Status}" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"  HorizontalAlignment="Center"/>
-                </Border>
-                <!--<Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="2" Padding="5,1">
-                    <TextBlock Text="Status" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
-                </Border>-->
-                <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="3" Padding="5,1">
-                    <StackPanel Orientation="Vertical">
-                        <Button  Content="Init"  IsEnabled="{Binding IsSystemStaus}" Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,8,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="Home">
-                                        <cal:Parameter Value="FIMS1"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Load" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="Load">
-                                        <cal:Parameter Value="FIMS1"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Unload" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="Unload">
-                                        <cal:Parameter Value="FIMS1"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Reset"  IsEnabled="{Binding IsSystemStaus}" Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="SetAlarmReset">
-                                        <cal:Parameter Value="PM1.FIMS1"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Online"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS1OnlineButtonEnable}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="SetOnline">
-                                        <cal:Parameter Value="FIMS1"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Offline"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS1OfflineButtonEnable}"  FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="SetOffline">
-                                        <cal:Parameter Value="FIMS1"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                    </StackPanel>
-                </Border>
-            </Grid>
-        </Canvas>
-
-        <Canvas Grid.Column="1" Grid.Row="0" >
-            <Grid Margin="10 10 10 10" >
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="30"></RowDefinition>
-                    <RowDefinition Height="290"></RowDefinition>
-                </Grid.RowDefinitions>
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="130"></ColumnDefinition>
-                    <ColumnDefinition Width="130"></ColumnDefinition>
-                    <ColumnDefinition Width="110"></ColumnDefinition>
-                    <ColumnDefinition Width="110"></ColumnDefinition>
-                </Grid.ColumnDefinitions>
-
-                <Label Content="FIMS2 Information" Style="{DynamicResource Table_TitleStyle}" Grid.Row="0" Grid.ColumnSpan="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
-                <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1 0 1 1" Background="{DynamicResource Table_BG_Title}" Grid.Row="1" Padding="5,1">
-                    <TextBlock Text="Status" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
-                </Border>
-                <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.ColumnSpan="2"  Grid.Column="1" Padding="5,1">
-                    <TextBlock Text="{Binding FIMS2Status}" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"  HorizontalAlignment="Center"/>
-                </Border>
-                <!--<Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="2" Padding="5,1">
+    <Grid Margin="10,0,10,0" Height="420" Width="auto" >
+        <StackPanel Orientation="Horizontal">
+            <Canvas Visibility="{Binding FIMS1Visibility, Converter={StaticResource bool2VisibilityConverter}}"   Width="550" >
+                <Grid Margin="10 10 10 10" >
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="30"></RowDefinition>
+                        <RowDefinition Height="290"></RowDefinition>
+                        <RowDefinition Height="30"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="130"></ColumnDefinition>
+                        <ColumnDefinition Width="130"></ColumnDefinition>
+                        <ColumnDefinition Width="110"></ColumnDefinition>
+                        <ColumnDefinition Width="110"></ColumnDefinition>
+                    </Grid.ColumnDefinitions>
+
+                    <Label Content="FIMS1 Information" Style="{DynamicResource Table_TitleStyle}" Grid.Row="0" Grid.ColumnSpan="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
+                    <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1 0 1 1" Background="{DynamicResource Table_BG_Title}" Grid.Row="1" Padding="5,1">
+                        <TextBlock Text="Status" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
+                    </Border>
+                    <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1"   Grid.Column="1" Padding="5,1">
+
+                        <UniformGrid Rows="2" HorizontalAlignment="Center" VerticalAlignment="Center">
+                            <TextBlock Text="{Binding FIMS1Status}" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
+                            <TextBlock Visibility="{Binding FIMS1CycleVisibility,Converter={StaticResource bool2VisibilityConverter}}" Margin="0,30,0,0" Text="{Binding FIMS1CycleInfo}" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
+                        </UniformGrid>
+                    </Border>
+
+
+                    <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" Padding="5,1">
+
+                        <UniformGrid Columns="2" Rows="4">
+                            <Button  Content="Init"  IsEnabled="{Binding IsSystemStaus}" Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center">
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="Home">
+                                            <cal:Parameter Value="FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Reset"  IsEnabled="{Binding IsSystemStaus}" Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetAlarmReset">
+                                            <cal:Parameter Value="PM1.FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+
+
+                            <Button  Content="Load" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center">
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="Load">
+                                            <cal:Parameter Value="FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Unload" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="Unload">
+                                            <cal:Parameter Value="FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="CycleStart" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetFIMSCycle">
+                                            <cal:Parameter Value="FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="CycleStop" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetFIMSAbort">
+                                            <cal:Parameter Value="FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Online"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS1OnlineButtonEnable}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetOnline">
+                                            <cal:Parameter Value="FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Offline"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS1OfflineButtonEnable}"  FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center">
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetOffline">
+                                            <cal:Parameter Value="FIMS1"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+
+                        </UniformGrid>
+
+                    </Border>
+
+
+                </Grid>
+            </Canvas>
+
+            <Canvas Visibility="{Binding FIMS2Visibility, Converter={StaticResource bool2VisibilityConverter}}"  Width="550">
+                <Grid Margin="10 10 10 10" >
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="30"></RowDefinition>
+                        <RowDefinition Height="290"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="130"></ColumnDefinition>
+                        <ColumnDefinition Width="130"></ColumnDefinition>
+                        <ColumnDefinition Width="110"></ColumnDefinition>
+                        <ColumnDefinition Width="110"></ColumnDefinition>
+                    </Grid.ColumnDefinitions>
+
+                    <Label Content="FIMS2 Information" Style="{DynamicResource Table_TitleStyle}" Grid.Row="0" Grid.ColumnSpan="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
+                    <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1 0 1 1" Background="{DynamicResource Table_BG_Title}" Grid.Row="1" Padding="5,1">
+                        <TextBlock Text="Status" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
+                    </Border>
+                    <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="1" Padding="5,1">
+                        <UniformGrid Rows="2" HorizontalAlignment="Center" VerticalAlignment="Center">
+                            <TextBlock Text="{Binding FIMS2Status}" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
+                            <TextBlock Visibility="{Binding FIMS2CycleVisibility,Converter={StaticResource bool2VisibilityConverter}}"  Margin="0,30,0,0" Text="{Binding FIMS2CycleInfo}" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
+
+                        </UniformGrid>
+                    </Border>
+                    <!--<Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="2" Padding="5,1">
                     <TextBlock Text="Status" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="16" FontFamily="Arial" VerticalAlignment="Center"/>
                 </Border>-->
-                <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="3" Padding="5,1">
-                    <StackPanel Orientation="Vertical">
-                        <Button  Content="Init"  IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,8,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="Home">
-                                        <cal:Parameter Value="FIMS2"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Load"  IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="Load">
-                                        <cal:Parameter Value="FIMS2"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Unload"   IsEnabled="{Binding IsSystemStaus}" Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,10">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="Unload">
-                                        <cal:Parameter Value="FIMS2"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Reset"  IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="SetAlarmReset">
-                                        <cal:Parameter Value="FIMS2"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Online"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS2OnlineButtonEnable}"  FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="SetOnline">
-                                        <cal:Parameter Value="FIMS2"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                        <Button  Content="Offline"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS2OfflineButtonEnable}"  FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" Margin="0,10,0,0">
-                            <i:Interaction.Triggers>
-                                <i:EventTrigger EventName="Click">
-                                    <cal:ActionMessage MethodName="SetOffline">
-                                        <cal:Parameter Value="FIMS2"/>
-                                    </cal:ActionMessage>
-                                </i:EventTrigger>
-                            </i:Interaction.Triggers>
-                        </Button>
-                    </StackPanel>
-                </Border>
-            </Grid>
-        </Canvas>
-
-        <DockPanel Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,30,0,0">
+                    <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0 0 1 1" Background="{DynamicResource Table_BG_Content}" Grid.Row="1" Grid.Column="2"  Grid.ColumnSpan="2"  Padding="5,1">
+
+                        <UniformGrid Columns="2" Rows="4">
+                            <Button  Content="Init"  IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="Home">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Reset"  IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center">
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetAlarmReset">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Load"  IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="Load">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Unload"   IsEnabled="{Binding IsSystemStaus}" Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center">
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="Unload">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="CycleStart" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetFIMSCycle">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="CycleStop" IsEnabled="{Binding IsSystemStaus}"  Foreground="{DynamicResource FG_Black}" FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetFIMSAbort">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Online"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS2OnlineButtonEnable}"  FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetOnline">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                            <Button  Content="Offline"  Foreground="{DynamicResource FG_Black}" IsEnabled="{Binding IsFIMS2OfflineButtonEnable}"  FontSize="16" Height="37" FontFamily="Arial" VerticalAlignment="Center" >
+                                <i:Interaction.Triggers>
+                                    <i:EventTrigger EventName="Click">
+                                        <cal:ActionMessage MethodName="SetOffline">
+                                            <cal:Parameter Value="FIMS2"/>
+                                        </cal:ActionMessage>
+                                    </i:EventTrigger>
+                                </i:Interaction.Triggers>
+                            </Button>
+                        </UniformGrid>
+
+                    </Border>
+                </Grid>
+            </Canvas>
+        </StackPanel>
+        <DockPanel  VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,30,0,30">
             <Border>
                 <Button Content="Close"  Style="{StaticResource CommandButton}" Margin="0,0,20,0" Width="120" Height="40">
                     <i:Interaction.Triggers>
@@ -217,5 +263,4 @@
 
     </Grid>
 
-   
 </UserControl>

+ 55 - 1
Furnace/FurnaceUI/Views/Maintenances/FIMSSensorViewModel.cs

@@ -23,6 +23,20 @@ namespace FurnaceUI.Views.Maintenances
     public class FIMSSensorViewModel : FurnaceUIViewModelBase
     {
         public bool IsPermission { get => this.Permission == 3; }
+        private bool _fIMS1CycleVisibility = false;
+        public bool FIMS1CycleVisibility { get => _fIMS1CycleVisibility; set => SetField(ref _fIMS1CycleVisibility, value, nameof(FIMS1CycleVisibility)); }
+
+
+        private bool _fIMS2CycleVisibility = false;
+        public bool FIMS2CycleVisibility { get => _fIMS2CycleVisibility; set => SetField(ref _fIMS2CycleVisibility, value, nameof(FIMS2CycleVisibility)); }
+        [Subscription("FIMS1.FIMSCycledCount")]
+        public int FIMS1CycledCount { get; set; }
+        [Subscription("FIMS2.FIMSCycledCount")]
+        public int FIMS2CycledCount { get; set; }
+        public string FIMS1CycleInfo => $"{FIMS1CycledCount} / {_fims1CycleCount}";
+        public string FIMS2CycleInfo => $"{FIMS2CycledCount} / {_fims2CycleCount}";
+        private int _fims1CycleCount;
+        private int _fims2CycleCount;
 
 
         public bool IsSystemStaus => (RtStatus != "AutoRunning");
@@ -59,7 +73,7 @@ namespace FurnaceUI.Views.Maintenances
                 InvokeClient.Instance.Service.DoOperation($"{target}.Load", new object[] { valueConfig });
 
             }
-     
+
         }
 
         public void Unload(object target)
@@ -75,10 +89,16 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void SetOnline(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Online?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.SetOnline");
         }
         public void SetOffline(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Offline?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.SetOffline");
         }
 
@@ -86,5 +106,39 @@ namespace FurnaceUI.Views.Maintenances
         {
             (GetView() as Window).Close();
         }
+        protected override void OnViewLoaded(object view)
+        {
+            base.OnViewLoaded(view);
+
+            _fims1CycleCount = (int)QueryDataClient.Instance.Service.GetConfig("FIMS.FIMS1.CycleCount");
+            _fims2CycleCount = (int)QueryDataClient.Instance.Service.GetConfig("FIMS.FIMS2.CycleCount");
+        }
+        public void SetDockUndock(object target, bool value)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{target}.SetDockUndock", value);
+
+
+        }
+        protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
+        {
+            base.InvokeAfterUpdateProperty(data);
+            FIMS1CycleVisibility = FIMS1Status == "Cycle";
+            FIMS2CycleVisibility = FIMS2Status == "Cycle";
+
+        }
+        public void SetFIMSCycle(object target)
+        {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Cycle Start?"))
+                return;
+
+            InvokeClient.Instance.Service.DoOperation($"{target}.Cycle");
+        }
+        public void SetFIMSAbort(object target)
+        {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Cycle Stop?"))
+                return;
+
+            InvokeClient.Instance.Service.DoOperation($"{target}.Abort");
+        }
     }
 }

+ 13 - 0
Furnace/FurnaceUI/Views/Maintenances/LPSensorViewModel.cs

@@ -19,6 +19,7 @@ using Aitex.Core.RT.SCCore;
 using MECF.Framework.Common.SubstrateTrackings;
 using OpenSEMI.ClientBase;
 using DocumentFormat.OpenXml.Office.Word;
+using RecipeEditorLib.RecipeModel.Params;
 
 namespace FurnaceUI.Views.Maintenances
 {
@@ -232,20 +233,32 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void Home(object para)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {para} Home?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{para}.Home", "");
         }
 
         public void SetClamp(object para)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {para} Unload?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{para}.Unload", "");
         }
 
         public void SetRelease(object para)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {para} Load?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{para}.Load", "");
         }
         public void ReadCarrierId(string moduleID)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {moduleID} ReadCarrierId?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{moduleID}.ReadCarrierId");
         }
         public void ClosedCmd()

+ 6 - 0
Furnace/FurnaceUI/Views/Operations/TransferMain/BoatModifyViewModel.cs

@@ -282,6 +282,9 @@ namespace FurnaceUI.Views.Operations
 
         public void CreateWafer()
         {
+            if (!DialogBox.Confirm("Are you sure  want to CreateWafer?"))
+                return;
+
             WaferType waferType = WaferType.None;
             if (SDIsChecked)
                 waferType = WaferType.SD;
@@ -314,6 +317,9 @@ namespace FurnaceUI.Views.Operations
 
         public void DeleteWafer()
         {
+            if (!DialogBox.Confirm("Are you sure  want to DeleteWafer?"))
+                return;
+
             if (BoatSlotFrom < 1 || BoatSlotTo > (int)QueryDataClient.Instance.Service.GetConfig("Boat.SlotCount"))
             {
                 DialogBox.ShowWarning($"BoatSlot input error,can not delete,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("Boat.SlotCount")}");

+ 15 - 0
Furnace/FurnaceUI/Views/Operations/TransferMain/CassetteModifyViewModel.cs

@@ -208,6 +208,9 @@ namespace FurnaceUI.Views.Operations
 
         public void CreateWafer()
         {
+            if (!DialogBox.Confirm("Are you sure  want to CreateWafer?"))
+                return;
+
             WaferType waferType = WaferType.None;
             if (SDIsChecked)
                 waferType = WaferType.SD;
@@ -253,6 +256,10 @@ namespace FurnaceUI.Views.Operations
         }
         public void CreateCarrier()
         {
+            if (!DialogBox.Confirm("Are you sure  want to CreateCarrier?"))
+                return;
+
+
             WaferType waferType = WaferType.None;
             if (SDIsChecked)
                 waferType = WaferType.SD;
@@ -276,6 +283,11 @@ namespace FurnaceUI.Views.Operations
         }
         public void DeleteCarrier()
         {
+
+            if (!DialogBox.Confirm("Are you sure  want to DeleteCarrier?"))
+                return;
+
+
             InvokeClient.Instance.Service.DoOperation("System.DeleteCarrier", $"{ModuleName}", 1);
             foreach (var item in CassetteWaferInfoItems)
             {
@@ -291,6 +303,9 @@ namespace FurnaceUI.Views.Operations
 
         public void DeleteWafer()
         {
+
+            if (!DialogBox.Confirm("Are you sure  want to DeleteWafer?"))
+                return;
             if (CassetteSlot < 1 || CassetteSlot > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"))
             {
                 DialogBox.ShowWarning($"CassetteSlot input error,can not delete,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount")}");

+ 19 - 2
Furnace/FurnaceUI/Views/Operations/TransferMain/CassetteRobotViewModel.cs

@@ -250,11 +250,16 @@ namespace FurnaceUI.Views.Maintenances
 
         public void Home()
         {
+            if (!DialogBox.Confirm("Are you sure  want to Home?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation("CarrierRobot.Home");
         }
 
         public void CassetteRobot_Pick()
         {
+            if (!DialogBox.Confirm("Are you sure  want to Pick?"))
+                return;
 
             var module = _modulesDic.ContainsKey(PickSelectedModuleCassetteRobot) ? _modulesDic[PickSelectedModuleCassetteRobot] : PickSelectedModuleCassetteRobot;
             if (DialogBox.Confirm($"Are you sure you want to  Pick {module} foup?"))
@@ -266,7 +271,9 @@ namespace FurnaceUI.Views.Maintenances
 
         public void CassetteRobot_Place()
         {
-         
+            if (!DialogBox.Confirm("Are you sure  want to Place?"))
+                return;
+
             var module = _modulesDic.ContainsKey(PlaceSelectedModuleCassetteRobot) ? _modulesDic[PlaceSelectedModuleCassetteRobot] : PlaceSelectedModuleCassetteRobot;
             if (DialogBox.Confirm($"Are you sure you want to  place to  {module} ?"))
             {
@@ -275,7 +282,8 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void CassetteRobot_CycleSwap()
         {
-
+            if (!DialogBox.Confirm("Are you sure  want to CycleSwap?"))
+                return;
 
             var cyclenum = (int)QueryDataClient.Instance.Service.GetConfig("CarrierRobot.RunToRunNumber"); ;
             var fromModule = _modulesDic.ContainsKey(CycleSwapFromSelectedModuleCassetteRobot) ? _modulesDic[CycleSwapFromSelectedModuleCassetteRobot] : CycleSwapFromSelectedModuleCassetteRobot;
@@ -291,16 +299,25 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void CassetteRobot_Swap()
         {
+            if (!DialogBox.Confirm("Are you sure  want to Swap?"))
+                return;
+
             var fromModule = _modulesDic.ContainsKey(SwapFromSelectedModuleCassetteRobot) ? _modulesDic[SwapFromSelectedModuleCassetteRobot] : SwapFromSelectedModuleCassetteRobot;
             var toModule = _modulesDic.ContainsKey(SwapToSelectedModuleCassetteRobot) ? _modulesDic[SwapToSelectedModuleCassetteRobot] : SwapToSelectedModuleCassetteRobot;
             InvokeClient.Instance.Service.DoOperation($"CarrierRobot.Transfer", fromModule, toModule, 0, 0);
         }
         public void SetOnline(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Online?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.SetOnline");
         }
         public void SetOffline(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Offline?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.SetOffline");
         }
         public void ClosedCmd()

+ 10 - 0
Furnace/FurnaceUI/Views/Operations/TransferMain/SelfCheckInitViewModel.cs

@@ -7,6 +7,7 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Windows;
 using FurnaceUI.Models;
+using OpenSEMI.ClientBase;
 
 namespace FurnaceUI.Views.Operations
 {
@@ -218,16 +219,25 @@ namespace FurnaceUI.Views.Operations
 
         public void HomeAll()
         {
+            if (!DialogBox.Confirm("Are you sure  want to HomeAll?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation("System.HomeAll");
         }
 
         public void Home(string module)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {module} Home?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{module}.Home");
         }
 
         public void Abort(string module)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {module} Abort?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{module}.Abort");
         }
 

+ 21 - 0
Furnace/FurnaceUI/Views/Operations/TransferMain/StockerModifyViewModel.cs

@@ -386,6 +386,9 @@ namespace FurnaceUI.Views.Operations
 
         public void CreateSlot()
         {
+            if (!DialogBox.Confirm("Are you sure  want to CreateSlot?"))
+                return;
+
             WaferType waferType = WaferType.None;
             if (SDIsChecked)
                 waferType = WaferType.SD;
@@ -412,6 +415,9 @@ namespace FurnaceUI.Views.Operations
         }
         public void DeleteSlot()
         {
+            if (!DialogBox.Confirm("Are you sure  want to DeleteSlot?"))
+                return;
+
             if (SlotFrom > SlotTo || SlotTo > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount") || SlotFrom < 1)
             {
                 DialogBox.ShowWarning("input error,can not create");
@@ -421,6 +427,9 @@ namespace FurnaceUI.Views.Operations
         }
         public void CreateAll()
         {
+            if (!DialogBox.Confirm("Are you sure  want to CreateAll?"))
+                return;
+
             WaferType waferType = WaferType.None;
             if (SDIsChecked)
                 waferType = WaferType.SD;
@@ -442,10 +451,16 @@ namespace FurnaceUI.Views.Operations
         }
         public void DeleteAll()
         {
+            if (!DialogBox.Confirm("Are you sure  want to DeleteAll?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation("DeleteCassetteWafer", $"{ModuleName}", 1, (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"));
         }
         public void CreateCarrier()
         {
+            if (!DialogBox.Confirm("Are you sure  want to CreateCarrier?"))
+                return;
+ 
             WaferType waferType = WaferType.None;
             if (SDIsChecked)
                 waferType = WaferType.SD;
@@ -467,11 +482,17 @@ namespace FurnaceUI.Views.Operations
         }
         public void DeleteCarrier()
         {
+            if (!DialogBox.Confirm("Are you sure  want to DeleteCarrier?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation("System.DeleteCarrier", $"{ModuleName}", 1);
         }
 
         public void SetLotID(string lotID)
         {
+            if (!DialogBox.Confirm("Are you sure  want to SetLotID?"))
+                return;
+
             LotID = lotID;
             InvokeClient.Instance.Service.DoOperation("System.SetLotID", $"{ModuleName}", lotID);
         }

+ 6 - 0
Furnace/FurnaceUI/Views/Operations/TransferMain/WaferRobotModifyViewModel.cs

@@ -143,6 +143,9 @@ namespace FurnaceUI.Views.Operations
 
         public void CreateWafer()
         {
+            if (!DialogBox.Confirm("Are you sure  want to CreateWafer?"))
+                return;
+
             WaferType waferType = WaferType.None;
             if (SDIsChecked)
                 waferType = WaferType.SD;
@@ -176,6 +179,9 @@ namespace FurnaceUI.Views.Operations
 
         public void DeleteWafer()
         {
+            if (!DialogBox.Confirm("Are you sure  want to DeleteWafer?"))
+                return;
+
             if (WaferRobotSlot < 1 || WaferRobotSlot > (int)QueryDataClient.Instance.Service.GetConfig("WaferRobot.SlotCount"))
             {
                 DialogBox.ShowWarning($"WaferRobotSlot input error,can not delete,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("WaferRobot.SlotCount")}");

+ 19 - 5
Furnace/FurnaceUI/Views/Operations/TransferMain/WaferRobotViewModel.cs

@@ -234,11 +234,16 @@ namespace FurnaceUI.Views.Maintenances
 
         public void Home()
         {
+            if (!DialogBox.Confirm("Are you sure  want to Home?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation("WaferRobot.Home");
         }
 
         public void TMRobot_Pick()
         {
+            if (!DialogBox.Confirm("Are you sure  want to Pick?"))
+                return;
 
             var module = PickSelectedModuleTMRobot.Replace("Boat", "PM1");
             if (DialogBox.Confirm($"Are you sure you want to  Pick Wafer?"))
@@ -250,12 +255,12 @@ namespace FurnaceUI.Views.Maintenances
 
         public void TMRobot_Place()
         {
-            if (DialogBox.Confirm($"Are you sure you want to  place Wafer?"))
-            {
-                var module = PlaceSelectedModuleTMRobot.Replace("Boat", "PM1");
-                InvokeClient.Instance.Service.DoOperation($"WaferRobot.Place", module, PlaceSelectedSlotTMRobot - 1, PlaceSelectedBladeTMRobot == "Single" ? 0 : (PlaceSelectedBladeTMRobot == "Blade2" ? 1 : 2));
+            if (!DialogBox.Confirm("Are you sure  want to Pick?"))
+                return;
+
+            var module = PlaceSelectedModuleTMRobot.Replace("Boat", "PM1");
+            InvokeClient.Instance.Service.DoOperation($"WaferRobot.Place", module, PlaceSelectedSlotTMRobot - 1, PlaceSelectedBladeTMRobot == "Single" ? 0 : (PlaceSelectedBladeTMRobot == "Blade2" ? 1 : 2));
 
-            }
         }
 
         public void TMRobot_Mapping()
@@ -280,6 +285,9 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void WaferRobot_Swap()
         {
+            if (!DialogBox.Confirm("Are you sure  want to Swap?"))
+                return;
+
             var fromModule = SwapFromSelectedModuleTMRobot.Replace("Boat", "PM1"); ;
             var toModule = SwapToSelectedModuleTMRobot.Replace("Boat", "PM1"); ;
             InvokeClient.Instance.Service.DoOperation($"WaferRobot.Swap", fromModule, toModule, SwapFromSelectedSlotTMRobot - 1, SwapToSelectedSlotTMRobot - 1,
@@ -287,10 +295,16 @@ namespace FurnaceUI.Views.Maintenances
         }
         public void SetOnline(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Online?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.SetOnline");
         }
         public void SetOffline(object target)
         {
+            if (!DialogBox.Confirm($"Are you sure  want to {target} Offline?"))
+                return;
+
             InvokeClient.Instance.Service.DoOperation($"{target}.SetOffline");
         }
         public void ClosedCmd()