整体调整了功能

This commit is contained in:
2026-01-13 15:03:02 +08:00
parent 63a768bd80
commit f1a892281b
82 changed files with 11226 additions and 291 deletions

View File

@@ -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;