新增MES模块,包含供应商、客户、车辆和地磅数据记录管理功能,支持免密接口和数据同步。更新相关控制器、实体、服务和数据库配置,优化权限管理和数据字典支持,确保系统的灵活性和可扩展性。

This commit is contained in:
geht
2026-04-30 15:28:20 +08:00
parent 142a0bdaba
commit b03cbeff9b
121 changed files with 10540 additions and 424 deletions

View File

@@ -4,6 +4,7 @@ using System.Windows.Threading;
using YY.Admin.Core;
using YY.Admin.Core.Util;
using YY.Admin.Event;
using Prism.Events;
using YY.Admin.Module;
using YY.Admin.Services;
using YY.Admin.Services.Service.Menu;
@@ -64,7 +65,40 @@ namespace YY.Admin.ViewModels.Control
["/system/tenant"] = "TenantManagementView",
["/system/tenant/index"] = "TenantManagementView",
["/platform/tenant"] = "TenantManagementView",
["sysTenant"] = "TenantManagementView"
["sysTenant"] = "TenantManagementView",
// 已实现页面:菜单管理
["MenuManagementView"] = "MenuManagementView",
["/platform/menu"] = "MenuManagementView",
["/system/menu/index"] = "MenuManagementView",
["sysMenu"] = "MenuManagementView",
// 已实现页面:登录设置
["LoginSettingsView"] = "LoginSettingsView",
["/system/loginSettings"] = "LoginSettingsView",
["/system/login-setting"] = "LoginSettingsView",
["/system/login-settings"] = "LoginSettingsView",
["loginSettings"] = "LoginSettingsView",
["登录设置"] = "LoginSettingsView",
["登陆设置"] = "LoginSettingsView",
// 已实现页面:车辆管理
["VehicleListView"] = "VehicleListView",
["/xslmes/mesXslVehicle"] = "VehicleListView",
["/xslmes/vehicle"] = "VehicleListView",
["mesXslVehicle"] = "VehicleListView",
// 已实现页面:客户管理
["CustomerListView"] = "CustomerListView",
["/xslmes/mesXslCustomer"] = "CustomerListView",
["/xslmes/customer"] = "CustomerListView",
["mesXslCustomer"] = "CustomerListView",
// 已实现页面:供应商管理
["SupplierListView"] = "SupplierListView",
["/xslmes/mesXslSupplier"] = "SupplierListView",
["/xslmes/supplier"] = "SupplierListView",
["mesXslSupplier"] = "SupplierListView"
};
private MenuItem? _selectedMenuItem;
@@ -83,6 +117,7 @@ namespace YY.Admin.ViewModels.Control
private SubscriptionToken? tabSelectedToken;
private SubscriptionToken? tabClosedToken;
private SubscriptionToken? _menuStructureToken;
public MenuTreeViewModel(
ISysMenuService sysMenuService,
@@ -99,10 +134,30 @@ namespace YY.Admin.ViewModels.Control
// 订阅事件
tabSelectedToken = _eventAggregator.GetEvent<TabSelectedEvent>().Subscribe(OnTabSelected);
tabClosedToken = _eventAggregator.GetEvent<TabClosedEvent>().Subscribe(OnTabClosed);
_menuStructureToken = _eventAggregator.GetEvent<MenuStructureChangedEvent>()
.Subscribe(async _ => await ReloadMenusAsync(), ThreadOption.UIThread);
}
/// <summary>
/// 菜单数据变更后刷新左侧树(不重复执行默认页签导航)
/// </summary>
private async Task ReloadMenusAsync()
{
try
{
var menuTree = await _sysMenuService.GetLoginMenuTree();
MenuItems.Clear();
ConvertMenuTreeToViewModel(menuTree);
}
catch (Exception ex)
{
_logger.Error($"菜单重新加载失败: {ex.Message}", ex);
}
}
public void OpenOrActivateTab(MenuItem menuItem)
{
_logger.Debug($"菜单点击触发: Name={menuItem?.Name}, ViewName={menuItem?.ViewName}, ChildrenCount={menuItem?.Children?.Count ?? 0}");
// 发布事件
_eventAggregator.GetEvent<TabSourceSelectedEvent>().Publish(menuItem);
}
@@ -169,6 +224,7 @@ namespace YY.Admin.ViewModels.Control
/// </summary>
private void ConvertMenuTreeToViewModel(List<MenuOutput> menuTree)
{
MenuItems.Clear();
// 过滤并排序菜单项:只包含目录和菜单类型,排除按钮类型,并按排序号排序
var rootMenus = menuTree
.Where(m => m.Type == MenuTypeEnum.Dir || m.Type == MenuTypeEnum.Menu)
@@ -244,10 +300,14 @@ namespace YY.Admin.ViewModels.Control
continue;
if (RouteToViewMap.TryGetValue(candidate.Trim(), out var viewName))
{
_logger.Debug($"菜单路由命中: Title={menu.Title}, Candidate={candidate}, View={viewName}");
return viewName;
}
}
// 保留原始Path若未注册将统一展示NotFoundView
_logger.Warning($"菜单路由未命中映射: Title={menu.Title}, Path={menu.Path}, Component={menu.Component}, Name={menu.Name}");
return menu.Path;
}
@@ -336,6 +396,12 @@ namespace YY.Admin.ViewModels.Control
.Unsubscribe(tabClosedToken);
tabClosedToken = null;
}
if (_menuStructureToken != null)
{
_eventAggregator.GetEvent<MenuStructureChangedEvent>().Unsubscribe(_menuStructureToken);
_menuStructureToken = null;
}
}
/// <summary>