整体调整了功能
This commit is contained in:
@@ -6,18 +6,24 @@ using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
|
||||
namespace FATrace.WPLApp.ViewModels
|
||||
{
|
||||
public class MainViewModel : NavigationViewModel
|
||||
{
|
||||
public MainViewModel(IRegionManager regionManager, IDialogService dialogService, IEventAggregator eventAggregator, NavigationServices navigationServices)
|
||||
public MainViewModel(IRegionManager regionManager, IDialogService dialogService, IEventAggregator eventAggregator, NavigationServices navigationServices, SysRunService sysRunService)
|
||||
{
|
||||
this.regionManager = regionManager;
|
||||
DialogService = dialogService;
|
||||
NavigationServices = navigationServices;
|
||||
NavigationItems = NavigationServices.NavItemDtos;
|
||||
_sys = sysRunService;
|
||||
NavigationItems = BuildNavigationItems(_sys.CurAccessLevel);
|
||||
_sys.PropertyChanged += SysOnPropertyChanged;
|
||||
|
||||
this.regionManager.RegisterViewWithRegion("FootRegion", typeof(FootView));
|
||||
this.regionManager.RegisterViewWithRegion("HeadRegion", typeof(HeadView));
|
||||
@@ -30,8 +36,69 @@ namespace FATrace.WPLApp.ViewModels
|
||||
public IDialogService DialogService { get; }
|
||||
public NavigationServices NavigationServices { get; }
|
||||
|
||||
private readonly SysRunService _sys;
|
||||
|
||||
public ObservableCollection<NavItemDto> NavigationItems { get; set; }
|
||||
|
||||
private void SysOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == nameof(SysRunService.CurAccessLevel) || e.PropertyName == nameof(SysRunService.CurUser))
|
||||
{
|
||||
NavigationItems = BuildNavigationItems(_sys.CurAccessLevel);
|
||||
RaisePropertyChanged(nameof(NavigationItems));
|
||||
}
|
||||
}
|
||||
|
||||
private ObservableCollection<NavItemDto> BuildNavigationItems(string? accessLevel)
|
||||
{
|
||||
// 未登录/访客:仅允许 Dashboard + 用户登录
|
||||
if (string.IsNullOrWhiteSpace(accessLevel) || string.Equals(accessLevel, UserManageViewModel.AccessLevels.Guest, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var dashboard = NavigationServices.NavItemDtos.FirstOrDefault(a => string.Equals(a.CmdPar, "Dashboard", StringComparison.OrdinalIgnoreCase));
|
||||
var system = NavigationServices.NavItemDtos.FirstOrDefault(a => string.Equals(a.Name, "系统", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
var result = new ObservableCollection<NavItemDto>();
|
||||
if (dashboard != null) result.Add(CloneNavItem(dashboard));
|
||||
|
||||
if (system != null)
|
||||
{
|
||||
var sysClone = CloneNavItem(system);
|
||||
sysClone.ChildrenNavItemDtos = new ObservableCollection<NavItemDto>(
|
||||
sysClone.ChildrenNavItemDtos
|
||||
.Where(a => string.Equals(a.CmdPar, "用户登录", StringComparison.OrdinalIgnoreCase))
|
||||
.ToList());
|
||||
result.Add(sysClone);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 管理员/操作员:完整菜单
|
||||
return new ObservableCollection<NavItemDto>(NavigationServices.NavItemDtos.Select(CloneNavItem));
|
||||
}
|
||||
|
||||
private NavItemDto CloneNavItem(NavItemDto src)
|
||||
{
|
||||
var dst = new NavItemDto
|
||||
{
|
||||
Name = src.Name,
|
||||
CmdPar = src.CmdPar,
|
||||
Icon = src.Icon,
|
||||
IsParent = src.IsParent,
|
||||
ChildrenNavItemDtos = new ObservableCollection<NavItemDto>()
|
||||
};
|
||||
|
||||
if (src.ChildrenNavItemDtos != null && src.ChildrenNavItemDtos.Count > 0)
|
||||
{
|
||||
foreach (var c in src.ChildrenNavItemDtos)
|
||||
{
|
||||
dst.ChildrenNavItemDtos.Add(CloneNavItem(c));
|
||||
}
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
private string titel = string.Empty;
|
||||
/// <summary>
|
||||
/// 标题
|
||||
@@ -60,7 +127,27 @@ namespace FATrace.WPLApp.ViewModels
|
||||
|
||||
private void OpenCommandMethod(object obj)
|
||||
{
|
||||
switch (obj.ToString())
|
||||
var cmd = obj?.ToString() ?? string.Empty;
|
||||
|
||||
// 父级目录/空命令不做任何处理(避免点击父节点触发弹窗或导航)
|
||||
if (string.IsNullOrWhiteSpace(cmd))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 访客/未登录:仅 Dashboard + 用户登录
|
||||
if (string.IsNullOrWhiteSpace(_sys.CurAccessLevel) || string.Equals(_sys.CurAccessLevel, UserManageViewModel.AccessLevels.Guest, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (!string.Equals(cmd, "Dashboard", StringComparison.OrdinalIgnoreCase)
|
||||
&& !string.Equals(cmd, "用户登录", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
MessageBox.Show("当前账号权限为【访客】,仅允许访问 Dashboard。", "权限不足", MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("DashBoardView");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case "Dashboard":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("DashBoardView");
|
||||
@@ -102,6 +189,37 @@ namespace FATrace.WPLApp.ViewModels
|
||||
case "原料入库查询":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("RawProInputView");
|
||||
break;
|
||||
case "文件导入日志":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("FileImportLogView");
|
||||
break;
|
||||
// 工厂/OEM Excel 导入数据查询
|
||||
case "工厂-入库":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("FactoryInboundView");
|
||||
break;
|
||||
case "工厂-领料":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("FactoryMaterialWithdrawalView");
|
||||
break;
|
||||
case "工厂-出入库":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("FactoryInventoryTransactionView");
|
||||
break;
|
||||
case "工厂-原料生产信息":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("FactoryProductionRecordView");
|
||||
break;
|
||||
case "工厂-成品出库":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("FactoryOutboundView");
|
||||
break;
|
||||
case "OEM-入库":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("OEMInboundView");
|
||||
break;
|
||||
case "OEM-出库":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("OEMOutboundView");
|
||||
break;
|
||||
case "OEM-出入库":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("OEMInventoryTransactionView");
|
||||
break;
|
||||
case "OEM-原料使用信息":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("OEMRawUsageInfoView");
|
||||
break;
|
||||
case "历史报警":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("HistoryAlarmView");
|
||||
|
||||
@@ -114,10 +232,11 @@ namespace FATrace.WPLApp.ViewModels
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("LoginView");
|
||||
//this.regionManager.Regions["ContentRegion"].Activate(Shift);
|
||||
break;
|
||||
case "用户管理":
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("UserManageView");
|
||||
break;
|
||||
case "使用手册":
|
||||
//this.regionManager.Regions["ContentRegion"].RequestNavigate("HelpManualView");
|
||||
//弹窗
|
||||
|
||||
this.regionManager.Regions["ContentRegion"].RequestNavigate("HelpManualView");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user