[UI.Client]

修正RecipeEditor和PMProcess视图中Recipe编辑表格的行不随权限变更实时变化的问题。
This commit is contained in:
SL 2023-09-21 14:14:06 +08:00
parent 97e1f2ab98
commit 63b88cb8fb
2 changed files with 48 additions and 66 deletions

View File

@ -428,10 +428,10 @@ namespace MECF.Framework.UI.Client.CenterViews.Editors.Recipe
MultiChamberVisibility = Chambers.Count > 1 ? Visibility.Visible : Visibility.Collapsed;
SelectedChamber = Chambers[0];
var role = AccountClient.Instance.Service.GetRoleByID(BaseApp.Instance.UserContext.Role.RoleId);
// 如果RecipeData为空则先创建其实例
if (CurrentRecipe == null)
{
var role = AccountClient.Instance.Service.GetRoleByID(BaseApp.Instance.UserContext.Role.RoleId);
var recipeData = new RecipeData(_recipeGasFlowCalculator, CurrentProcessType);
recipeData.BuildFormat($"{CurrentChamberType}\\{CurrentProcessType}", SelectedChamber, role);
recipeData.OnValidated += (sender, args) =>
@ -448,6 +448,12 @@ namespace MECF.Framework.UI.Client.CenterViews.Editors.Recipe
_editMode = EditMode.None;
}
else
{
CurrentRecipe.UpdatePermission(role);
}
}
/// <summary>

View File

@ -43,20 +43,21 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
private double _sih4FlowRatio = 1;
private double _pn2FlowRatio = 1;
private bool _isHideRecipeValue = false;
private bool _allowSaveRecipe = false;
private bool _allowRipRecipe = false;
private int x = 0;
private DispatcherTimer timer;
private readonly object _lockerLoadingRecipe = new();
private readonly IRecipeGasFlowCalculator _recipeGasFlowCalculator;
private string _currentProcessingRecipe;
private string _selectedRecipe;
private bool _needLoadRecipe = false;
private IProgress<int> _progressRecipeStepChanged;
private IProgress<string> _progressLoadRecipe;
private readonly object _lockerLoadingRecipe = new();
CancellationTokenSource cts = new();
public string title { get; set; } = "123";
private CancellationTokenSource _cts;
public PMProcessViewModel()
{
@ -68,10 +69,13 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
IsBusyGasFlowSum = e.Message == "" ? false : true;
BusyIndicatorContent = e.Message;
});
_progressLoadRecipe = new Progress<string>(ProgLoadRecipeOnUiThread);
_progressRecipeStepChanged = new Progress<int>(RecipeStepInProcessChanged);
}
#region properties
#region Properties
public bool AllowSaveRecipe
{
get => _allowSaveRecipe;
@ -112,18 +116,10 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
public float[] RecipeData1 => RecipeData;
public float[] RecipeData = new float[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
private string selectedRecipe;
public string SelectedRecipe
{
set
{
selectedRecipe = value;
}
get
{
return selectedRecipe;
}
set => _selectedRecipe = value;
get => _selectedRecipe;
}
@ -176,19 +172,11 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
get
{
if (IsPMProcess)
{
return $"{RecipeStepNumber}";
}
else if (IsPreProcess)
{
return "0";
}
return "--";
}
set
{
}
}
@ -271,16 +259,9 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
}
}
//qbh 20220523
private int x = 0;
private DispatcherTimer timer;
//
public RecipeData CurrentRecipe { get; set; }
public List<EditorDataGridTemplateColumnBase> Columns { get; set; } = new List<EditorDataGridTemplateColumnBase>();
private RecipeFormatBuilder _recipeFormatBuilder = new ();
@ -347,7 +328,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
public string CurrentProcessType { get; set; }
private bool needLoadRecipe = false;
#endregion
@ -357,10 +338,10 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
/// <returns></returns>
private void LoadRolePermissions()
{
var roleID = BaseApp.Instance.UserContext.Role.RoleId;
_isHideRecipeValue = AccountClient.Instance.Service.GetMenuPermission(roleID, "Recipe.Behaviour.ShowValueInProcessView") == (int)MenuPermissionEnum.MP_NONE;
AllowSaveRecipe = AccountClient.Instance.Service.GetMenuPermission(roleID, "Recipe.Behaviour.AllowSaveInProcessView") != (int)MenuPermissionEnum.MP_NONE;
AllowRipRecipe = AccountClient.Instance.Service.GetMenuPermission(roleID, "Recipe.Behaviour.AllowRipInProcessView") != (int)MenuPermissionEnum.MP_NONE;
var roleId = BaseApp.Instance.UserContext.Role.RoleId;
_isHideRecipeValue = AccountClient.Instance.Service.GetMenuPermission(roleId, "Recipe.Behaviour.ShowValueInProcessView") == (int)MenuPermissionEnum.MP_NONE;
AllowSaveRecipe = AccountClient.Instance.Service.GetMenuPermission(roleId, "Recipe.Behaviour.AllowSaveInProcessView") != (int)MenuPermissionEnum.MP_NONE;
AllowRipRecipe = AccountClient.Instance.Service.GetMenuPermission(roleId, "Recipe.Behaviour.AllowRipInProcessView") != (int)MenuPermissionEnum.MP_NONE;
}
@ -372,15 +353,17 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
if (string.IsNullOrEmpty(DisplayingRecipeName))
{
needLoadRecipe = false;
_needLoadRecipe = false;
var recipeName =
(string)QueryDataClient.Instance.Service.GetConfig($"PM.{SystemName}.LastRecipeName");
DisplayingRecipeName = recipeName;
selectedRecipe = recipeName;
_selectedRecipe = recipeName;
}
// 更新Recipe参数值显示状态
SetRecipeValueVisibilityByCurrentRole();
UpdateRecipeFormat();
((PMProcessView)View)?.recipeLocker.Lock();
@ -402,22 +385,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
ActiveUpdateData = true;
base.OnDeactivate(close);
}
protected override void OnInitialize()
{
base.OnInitialize();
//权限
var roleID = BaseApp.Instance.UserContext.Role.RoleId;
StepsVisibility = RoleAccountProvider.Instance.GetMenuPermission(roleID, "PM1.Process.Steps") == MenuPermissionEnum.MP_READ_WRITE;
_progressLoadRecipe = new Progress<string>(ProgLoadRecipeOnUiThread);
_progressRecipeStepChanged = new Progress<int>(RecipeStepInProcessChanged);
UpdateRecipeFormat();
}
public bool StepsVisibility { get; private set; }
protected override void Poll()
{
try
@ -437,8 +405,8 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
if (data.TryGetValue("System.IsEngMode", out var isEngMode) && isEngMode is bool b)
IsEngMode = b;
if (needLoadRecipe)
needLoadRecipe = false;
if (_needLoadRecipe)
_needLoadRecipe = false;
base.InvokeAfterUpdateProperty(data);
}
@ -655,8 +623,16 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
public void UpdateRecipeFormat()
{
var role = AccountClient.Instance.Service.GetRoleByID(BaseApp.Instance.UserContext.Role.RoleId);
CurrentRecipe = new RecipeData(_recipeGasFlowCalculator, RecipeType.Process);
CurrentRecipe.BuildFormat($"Sic\\Process", SystemName, role);
if (CurrentRecipe == null)
{
CurrentRecipe = new RecipeData(_recipeGasFlowCalculator, RecipeType.Process);
CurrentRecipe.BuildFormat($"Sic\\Process", SystemName, role);
}
else
{
CurrentRecipe.UpdatePermission(role);
}
}
/// <summary>
@ -1725,7 +1701,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
return;
}
cts = new CancellationTokenSource();
_cts = new CancellationTokenSource();
Task.Run(() =>
{
@ -1739,9 +1715,9 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
{
Task.Run(() =>
{
if (cts?.Token.CanBeCanceled == true)
if (_cts?.Token.CanBeCanceled == true)
{
cts.Cancel();
_cts.Cancel();
}
Thread.Sleep(200);
@ -1757,7 +1733,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Modules.PM
//按天查询数据库单天返回数据类型为List<GasFlowSum>
foreach (var daySlice in daySlices)
{
if (cts.IsCancellationRequested)
if (_cts.IsCancellationRequested)
return ;
gasFlowRunVent.Add( GasFlowSqlHelp.GetDayGasFlowSum(daySlice, SystemName, GasFlowSumList));