Browse Source

stepRunTime UI交互优化

git-svn-id: http://10.4.3.168:50001/svn/Furnace@135 dbcde07d-dcf5-c148-8a84-ac3097b7778e
Jiangjinyuan 4 weeks ago
parent
commit
9f7e3b2328

+ 33 - 0
FrameworkLocal/Common/Utilities/DateTimeUtil.cs

@@ -8,6 +8,22 @@ namespace MECF.Framework.Common.Utilities
 {
     public class DateTimeUtil
     {
+        public static int GetSecond(string timeString)
+        {
+            if (string.IsNullOrEmpty(timeString)) return 0;
+
+            if (TimeSpan.TryParse(timeString, out TimeSpan timeSpan))
+            {
+                // 获取总秒数(包括小数部分)
+                double totalSeconds = timeSpan.TotalSeconds;
+
+                // 将总秒数转换为整数秒数
+                int integerSeconds = Convert.ToInt32(totalSeconds);
+                return integerSeconds;
+
+            }
+            return 0;
+        }
         public static int GetSecond(float number)
         {
             if (number.ToString().Contains('.'))
@@ -21,6 +37,23 @@ namespace MECF.Framework.Common.Utilities
             }
 
         }
+        public static string SecondToHHmmss(string value)
+        {
+            if (value == null)
+                return "";
+            if (float.TryParse(value, out float floatResult))
+            {
+                var secondAll = Math.Round(floatResult, 1, MidpointRounding.AwayFromZero);
+                // 将总秒数转换为时间跨度
+                TimeSpan timeSpan = TimeSpan.FromSeconds(secondAll);
+
+                // 格式化为 HH:mm:ss
+                string formattedTime = $"{timeSpan.Hours:D2}:{timeSpan.Minutes:D2}:{timeSpan.Seconds:D2}";
+                return formattedTime;
+            }
+
+            return "00:00:00";
+        }
         public static void ConvertSecondsToHoursAndMinutes(int totalSeconds, out int hours, out int minutes)
         {
             hours = totalSeconds / 3600;

+ 2 - 2
FrameworkLocal/UIClient/Converter/SecondsToHourMinConverter.cs

@@ -18,7 +18,7 @@ namespace MECF.Framework.UI.Client.Converter
         {
             if (value == null)
                 return "";
-       
+
             if (value is float floatResult)
             {
                 var secondAll = Math.Round(floatResult, 1, MidpointRounding.AwayFromZero);
@@ -26,7 +26,7 @@ namespace MECF.Framework.UI.Client.Converter
                 TimeSpan timeSpan = TimeSpan.FromSeconds(secondAll);
 
                 // 格式化为 HH:mm:ss
-                string formattedTime = $"{timeSpan.Hours:D2}:{timeSpan.Minutes:D2}";
+                string formattedTime = $"{timeSpan.Hours:D2}:{timeSpan.Minutes:D2}:{timeSpan.Seconds:D2}";
                 return formattedTime;
             }
             return "";

+ 17 - 17
Furnace/FurnaceRT/Equipments/PMs/PMScheduleMaintenance.cs

@@ -67,26 +67,26 @@ namespace FurnaceRT.Equipments.PMs
             new ScheduleMaintenanceData(MaintenanceItemEnum.SDCarrierUseFreq.ToString(), "Times", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy");
             new ScheduleMaintenanceData(MaintenanceItemEnum.SDWaferThickness.ToString(), "Å", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy");
             new ScheduleMaintenanceData(MaintenanceItemEnum.SDUsableDummyWafer.ToString(), "Sheets", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.SDBufferRackStayTime.ToString(), "h:m", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.SDWaferUserTime.ToString(), "h:m", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.SDBufferRackStayTime.ToString(), "h:m:s", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.SDWaferUserTime.ToString(), "h:m:s", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy");
 
 
             new ScheduleMaintenanceData(MaintenanceItemEnum.FDCarrierUseFreq.ToString(), "Times", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy");
             new ScheduleMaintenanceData(MaintenanceItemEnum.FDWaferThickness.ToString(), "Å", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy");
             new ScheduleMaintenanceData(MaintenanceItemEnum.FDUsableDummyWafer.ToString(), "Sheets", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.FDBufferRackStayTime.ToString(), "h:m", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.FDWaferUserTime.ToString(), "h:m", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.FDBufferRackStayTime.ToString(), "h:m:s", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.FDWaferUserTime.ToString(), "h:m:s", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy");
 
 
             new ScheduleMaintenanceData(MaintenanceItemEnum.BoatRecipeThickness1.ToString(), "Å", "Boat");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.BoatTCUseTime.ToString(), "h:m", "Boat");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.BoatCKDUseTime.ToString(), "h:m", "Boat");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.BoatPUMPUseTime.ToString(), "h:m", "Boat");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.BoatTCUseTime.ToString(), "h:m:s", "Boat");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.BoatCKDUseTime.ToString(), "h:m:s", "Boat");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.BoatPUMPUseTime.ToString(), "h:m:s", "Boat");
 
 
 
-            new ScheduleMaintenanceData(MaintenanceItemEnum.NonOperationTime1.ToString(), "h:m", "Conditioning");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.NonOperationTime2.ToString(), "h:m", "Conditioning");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.NonOperationTime1.ToString(), "h:m:s", "Conditioning");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.NonOperationTime2.ToString(), "h:m:s", "Conditioning");
 
             new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeExecuteFreq.ToString(), "Times", "Reactor.Recipe", "Select Recipe");
             new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness.ToString(), "Å", "Reactor.Recipe", "Select Recipe");
@@ -97,14 +97,14 @@ namespace FurnaceRT.Equipments.PMs
             new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteFreq3.ToString(), "Times", "Reactor.StepRunFreq", "Step ID");
 
 
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime1.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime2.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime3.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime4.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime5.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime6.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime7.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
-            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime8.ToString(), "h:m", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime1.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime2.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime3.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime4.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime5.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime6.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime7.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
+            new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime8.ToString(), "h:m:s", "Reactor.StepRunTime", "Step ID");
 
 
 

+ 281 - 7
Furnace/FurnaceUI/Views/Scheduled/ScheduledMaintenanceMonitorView.xaml

@@ -252,7 +252,7 @@
                     HorizontalAlignment="Right"
                     VerticalAlignment="Center"
                     Text="Current Value" />
-                <TextBox
+                <!--<TextBox
                     Grid.Column="1"
                     Margin="5,0"
                     FontSize="20"
@@ -262,7 +262,7 @@
                     >
                     <TextBox.Style>
                         <Style TargetType="TextBox">
-                            <Setter Property="Text" Value="{Binding EditModel.CurrentValue,StringFormat={}{0:000.000}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
+                            <Setter Property="Text" Value="{Binding EditModel.CurrentValue}"/>
                             <Style.Triggers>
                                 <DataTrigger Binding="{Binding EditModel.Path}" Value="Reactor.StepRunTime">
                                     <Setter Property="Text" Value="{Binding EditModel.CurrentValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,Converter={StaticResource SecondsToHourMinConverter}}"/>
@@ -278,7 +278,98 @@
                             </cal:ActionMessage>
                         </i:EventTrigger>
                     </i:Interaction.Triggers>
-                </TextBox>
+                </TextBox>-->
+                <StackPanel   Grid.Column="1" Margin="5,0"  IsEnabled="{Binding IsEnable}">
+                    <ContentControl>
+                        <ContentControl.Resources>
+                            <DataTemplate x:Key="EmptyDataTemplate" />
+                            <DataTemplate x:Key="CommonDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.CurrentValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  IsEnabled="{Binding IsEnable}" Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorGroupDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.CurrentValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  IsEnabled="{Binding IsEnable}" Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorRecipeDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.CurrentValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  IsEnabled="{Binding IsEnable}" Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepRunDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.CurrentValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  IsEnabled="{Binding IsEnable}" Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepThicknessDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.CurrentValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  IsEnabled="{Binding IsEnable}" Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepRunTimeDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+     Text="{Binding DataContext.EditModel.CurrentValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged,Converter={StaticResource SecondsToHourMinConverter}}"  IsEnabled="{Binding IsEnable}" Tag="None" >
+                                    <i:Interaction.Triggers>
+                                        <i:EventTrigger EventName="PreviewMouseUp">
+                                            <cal:ActionMessage MethodName="TimeSelect">
+                                                <cal:Parameter Value="StepTime"></cal:Parameter>
+                                                <cal:Parameter Value="CurrentValue"></cal:Parameter>
+                                            </cal:ActionMessage>
+                                        </i:EventTrigger>
+                                    </i:Interaction.Triggers>
+                                </TextBox>
+                            </DataTemplate>
+                        </ContentControl.Resources>
+                        <ContentControl.Style>
+                            <Style TargetType="ContentControl">
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.CarrierWafer}">
+                                        <Setter Property="ContentTemplate" Value="{StaticResource CommonDataTemplate}" />
+                                    </DataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.Recipe}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorRecipeDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepRunTime}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepRunTimeDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepRunFreq}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepRunDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepThickness}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepThicknessDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </ContentControl.Style>
+                    </ContentControl>
+                </StackPanel>
+
                 <TextBox
                     Grid.Column="2"
                     Height="40"
@@ -403,14 +494,105 @@
                     HorizontalAlignment="Right"
                     VerticalAlignment="Center"
                     Text="Maintenance Processing" />
-                <TextBox
+                <!--<TextBox
                     Grid.Row="0"
                     Grid.Column="1"
                     Height="40"
                     Margin="5,0"
                     FontSize="20"
                       Tag="Number"
-                    Text="{Binding EditModel.StartValue, StringFormat={}{0:000.000}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
+                    Text="{Binding EditModel.StartValue, StringFormat={}{0:000.000}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />-->
+                <StackPanel  Grid.Row="0" Grid.Column="1" Height="40" Margin="5,0">
+                    <ContentControl>
+                        <ContentControl.Resources>
+                            <DataTemplate x:Key="EmptyDataTemplate" />
+                            <DataTemplate x:Key="CommonDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.StartValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  IsEnabled="{Binding IsEnable}" Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorGroupDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.StartValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"   Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorRecipeDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.StartValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepRunDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.StartValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"   Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepThicknessDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.StartValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepRunTimeDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+     Text="{Binding DataContext.EditModel.StartValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged,Converter={StaticResource SecondsToHourMinConverter}}"   Tag="None" >
+                                    <i:Interaction.Triggers>
+                                        <i:EventTrigger EventName="PreviewMouseUp">
+                                            <cal:ActionMessage MethodName="TimeSelect">
+                                                <cal:Parameter Value="StepTime"></cal:Parameter>
+                                                <cal:Parameter Value="StartValue"></cal:Parameter>
+                                            </cal:ActionMessage>
+                                        </i:EventTrigger>
+                                    </i:Interaction.Triggers>
+                                </TextBox>
+                            </DataTemplate>
+                        </ContentControl.Resources>
+                        <ContentControl.Style>
+                            <Style TargetType="ContentControl">
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.CarrierWafer}">
+                                        <Setter Property="ContentTemplate" Value="{StaticResource CommonDataTemplate}" />
+                                    </DataTrigger>
+
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.Recipe}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorRecipeDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepRunTime}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepRunTimeDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepRunFreq}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepRunDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepThickness}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepThicknessDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </ContentControl.Style>
+                    </ContentControl>
+                </StackPanel>
 
                 <ComboBox x:Name="cbPickModulesCassetteRobot" Grid.Row="1"
 Grid.Column="1"
@@ -467,13 +649,105 @@ FontSize="20" ItemsSource="{Binding MaintenanceProcessingList}"  SelectedItem="{
                     HorizontalAlignment="Right"
                     VerticalAlignment="Center"
                     Text="Maintenance Limit Value" />
-                <TextBox
+                <!--<TextBox
                     Grid.Column="1"
                     Height="40"
                     Margin="5,0"
                     FontSize="20"
                     Tag="Number"
-                    Text="{Binding EditModel.LimitValue, StringFormat={}{0:000.000}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
+                    Text="{Binding EditModel.LimitValue, StringFormat={}{0:000.000}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />-->
+                <StackPanel  Grid.Row="0" Grid.Column="1" Height="40" Margin="5,0">
+                    <ContentControl>
+                        <ContentControl.Resources>
+                            <DataTemplate x:Key="EmptyDataTemplate" />
+                            <DataTemplate x:Key="CommonDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.LimitValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  IsEnabled="{Binding IsEnable}" Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorGroupDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.LimitValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"   Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorRecipeDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.LimitValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepRunDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.LimitValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"   Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepThicknessDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+Text="{Binding DataContext.EditModel.LimitValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged}"  Tag="Number" >
+                                </TextBox>
+                            </DataTemplate>
+                            <DataTemplate x:Key="ReactorStepRunTimeDataTemplate">
+                                <TextBox Grid.Column="1"  Margin="5,0" FontSize="20"  Height="40"
+     Text="{Binding DataContext.EditModel.LimitValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, UpdateSourceTrigger=PropertyChanged,Converter={StaticResource SecondsToHourMinConverter}}"   Tag="None" >
+                                    <i:Interaction.Triggers>
+                                        <i:EventTrigger EventName="PreviewMouseUp">
+                                            <cal:ActionMessage MethodName="TimeSelect">
+                                                <cal:Parameter Value="StepTime"></cal:Parameter>
+                                                <cal:Parameter Value="LimitValue"></cal:Parameter>
+                                            </cal:ActionMessage>
+                                        </i:EventTrigger>
+                                    </i:Interaction.Triggers>
+                                </TextBox>
+                            </DataTemplate>
+                        </ContentControl.Resources>
+                        <ContentControl.Style>
+                            <Style TargetType="ContentControl">
+                                <Style.Triggers>
+                                    <DataTrigger Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.CarrierWafer}">
+                                        <Setter Property="ContentTemplate" Value="{StaticResource CommonDataTemplate}" />
+                                    </DataTrigger>
+
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.Recipe}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorRecipeDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepRunTime}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepRunTimeDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepRunFreq}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepRunDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                    <MultiDataTrigger>
+                                        <MultiDataTrigger.Conditions>
+                                            <Condition Binding="{Binding EditModel.DataItemType}" Value="{x:Static enumData:DataItemEnum.Reactor}" />
+                                            <Condition Binding="{Binding EditModel.ReactorsType}" Value="{x:Static enumData:ReactorsEnum.StepThickness}" />
+                                        </MultiDataTrigger.Conditions>
+                                        <MultiDataTrigger.Setters>
+                                            <Setter Property="ContentTemplate" Value="{StaticResource ReactorStepThicknessDataTemplate}" />
+                                        </MultiDataTrigger.Setters>
+                                    </MultiDataTrigger>
+                                </Style.Triggers>
+                            </Style>
+                        </ContentControl.Style>
+                    </ContentControl>
+                </StackPanel>
+
                 <TextBox
                     Grid.Column="2"
                     Height="40"

+ 52 - 0
Furnace/FurnaceUI/Views/Scheduled/ScheduledMaintenanceMonitorViewModel.cs

@@ -16,10 +16,12 @@ using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
 using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
 using OpenSEMI.ClientBase;
 using SciChart.Core.Extensions;
+using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Data;
 using System.Linq;
+using System.Text;
 using System.Windows.Controls;
 using System.Windows.Documents;
 using System.Windows.Input;
@@ -102,6 +104,56 @@ namespace FurnaceUI.Views.Editors
         }
         private bool _isEnable;
 
+        public void TimeSelect(object cmdName, object value)
+        {
+            var windowManager = IoC.Get<IWindowManager>();
+            RecipeStepTimeViewModel recipeStepTimeViewModel = new RecipeStepTimeViewModel("StepTime");
+
+            bool isCurrentValue = value.ToString() == "CurrentValue";
+            bool isStartValue = value.ToString() == "StartValue";
+            bool isLimitValue = value.ToString() == "LimitValue";
+            if (isCurrentValue)
+            {
+                recipeStepTimeViewModel.SelectValueTime = DateTimeUtil.SecondToHHmmss(EditModel.CurrentValue.ToString());
+            }
+            else if (isStartValue)
+            {
+                recipeStepTimeViewModel.SelectValueTime = DateTimeUtil.SecondToHHmmss(EditModel.StartValue.ToString());
+
+            }
+            else if (isLimitValue)
+            {
+                recipeStepTimeViewModel.SelectValueTime = DateTimeUtil.SecondToHHmmss(EditModel.LimitValue.ToString());
+            }
+
+            (windowManager as WindowManager)?.ShowDialogWithTitle(recipeStepTimeViewModel, null, "Standby Time Setting");
+            if (recipeStepTimeViewModel.IsSave)
+            {
+
+                if (recipeStepTimeViewModel.SelectTime == "Value")
+                {
+                    var allSecond = DateTimeUtil.GetSecond(recipeStepTimeViewModel.SelectValueTime);
+
+
+                    if (isCurrentValue)
+                    {
+                        EditModel.CurrentValue = allSecond;
+
+                    }
+                    else if (isStartValue)
+                    {
+                        EditModel.StartValue = allSecond;
+
+                    }
+                    else if (isLimitValue)
+                    {
+                        EditModel.LimitValue = allSecond;
+
+                    }
+                }
+
+            }
+        }
 
         #region 方法 CurrentValueChange
         /// <summary>

+ 32 - 10
Furnace/FurnaceUI/Views/Scheduled/ScheduledMaitView.xaml

@@ -196,11 +196,23 @@
                         <GridViewColumn Width="200">
                             <GridViewColumn.CellTemplate>
                                 <DataTemplate>
-                                    <TextBlock
-                                        Width="110"
-                                        HorizontalAlignment="Center"
-                                        Text="{Binding StartValue, StringFormat={}{0:000.000}, Mode=TwoWay}"
-                                        TextBlock.TextAlignment="Center" />
+                                 
+
+                                    <StackPanel>
+                                        <TextBlock  Width="132"   Margin="4"   HorizontalAlignment="Center"   TextBlock.TextAlignment="Center" >
+                                            <TextBlock.Style>
+                                                <Style TargetType="TextBlock">
+                                                    <Setter Property="Text" Value="{Binding StartValue,StringFormat={}{0:000.000}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
+                                                    <Style.Triggers>
+                                                        <DataTrigger Binding="{Binding Path}" Value="Reactor.StepRunTime">
+                                                            <Setter Property="Text" Value="{Binding StartValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,Converter={StaticResource SecondsToHourMinConverter}}"/>
+                                                        </DataTrigger>
+                                                    </Style.Triggers>
+                                                </Style>
+                                            </TextBlock.Style>
+
+                                        </TextBlock>
+                                    </StackPanel>
                                 </DataTemplate>
                             </GridViewColumn.CellTemplate>
                             <GridViewColumn.Header>
@@ -213,11 +225,21 @@
                         <GridViewColumn Width="200">
                             <GridViewColumn.CellTemplate>
                                 <DataTemplate>
-                                    <TextBlock
-                                        Width="110"
-                                        HorizontalAlignment="Center"
-                                        Text="{Binding LimitValue, StringFormat={}{0:000.000}, Mode=TwoWay}"
-                                        TextBlock.TextAlignment="Center" />
+                                    <StackPanel>
+                                        <TextBlock  Width="132"   Margin="4"   HorizontalAlignment="Center"   TextBlock.TextAlignment="Center" >
+                                            <TextBlock.Style>
+                                                <Style TargetType="TextBlock">
+                                                    <Setter Property="Text" Value="{Binding LimitValue,StringFormat={}{0:000.000}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
+                                                    <Style.Triggers>
+                                                        <DataTrigger Binding="{Binding Path}" Value="Reactor.StepRunTime">
+                                                            <Setter Property="Text" Value="{Binding LimitValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,Converter={StaticResource SecondsToHourMinConverter}}"/>
+                                                        </DataTrigger>
+                                                    </Style.Triggers>
+                                                </Style>
+                                            </TextBlock.Style>
+
+                                        </TextBlock>
+                                    </StackPanel>
                                 </DataTemplate>
                             </GridViewColumn.CellTemplate>
                             <GridViewColumn.Header>