using LocalhostMES.DataBase; using LocalhostMES.Core; using LocalhostMES.Models; using LocalhostMES.ViewModels.Services; using LocalhostMES.Views; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.ObjectModel; using System.Windows; namespace LocalhostMES.ViewModels.Tabs { public class WorkOrderManagementViewModel : BindableBase { private readonly IMesWorkspace _workspace; public WorkOrderManagementViewModel(IMesWorkspace workspace) { _workspace = workspace; _workspace.Initialize(); MesDataChangedNotifier.Changed += OnDataChanged; } public ObservableCollection DgWorkOrders => _workspace.WorkOrders; private WorkOrderInfo _selectWorkOrderInfo; public WorkOrderInfo SelectWorkOrderInfo { get => _selectWorkOrderInfo; set => SetProperty(ref _selectWorkOrderInfo, value); } private DelegateCommand _refreshWorkOrdersCommand; public DelegateCommand RefreshWorkOrdersCommand => _refreshWorkOrdersCommand ?? (_refreshWorkOrdersCommand = new DelegateCommand(RefreshWorkOrders)); private DelegateCommand _addWorkOrderCommand; public DelegateCommand AddWorkOrderCommand => _addWorkOrderCommand ?? (_addWorkOrderCommand = new DelegateCommand(AddWorkOrder)); private DelegateCommand _deleteWorkOrderCommand; public DelegateCommand DeleteWorkOrderCommand => _deleteWorkOrderCommand ?? (_deleteWorkOrderCommand = new DelegateCommand(DeleteWorkOrder)); private DelegateCommand _editWorkOrderCommand; public DelegateCommand EditWorkOrderCommand => _editWorkOrderCommand ?? (_editWorkOrderCommand = new DelegateCommand(EditWorkOrder)); private void RefreshWorkOrders() { try { _workspace.ReloadWorkOrders(); _workspace.ShowStatus($"已加载 {_workspace.WorkOrders.Count} 个工单", false); } catch (Exception ex) { _workspace.ShowStatus($"刷新失败: {ex.Message}", true); } } private void OnDataChanged(object sender, MesDataChangedEventArgs e) { if (!e.Has(MesDataScope.WorkOrder) && !e.Has(MesDataScope.Sn)) { return; } Application.Current?.Dispatcher.Invoke(() => _workspace.ReloadWorkOrders()); } private void AddWorkOrder() { try { var dialog = new WorkOrderDialog(); if (dialog.ShowDialog() == true) { var workOrder = dialog.WorkOrder; if (DatabaseHelper.InsertWorkOrderInfo(workOrder)) { _workspace.ShowStatus("工单创建成功", false); _workspace.ReloadWorkOrders(); } else { _workspace.ShowStatus("创建失败", true); } } } catch (Exception ex) { _workspace.ShowStatus($"创建失败: {ex.Message}", true); } } private void EditWorkOrder() { if (SelectWorkOrderInfo == null) { _workspace.ShowStatus("请先选择要修改的工单", true); return; } try { var dialog = new WorkOrderDialog(SelectWorkOrderInfo) { Owner = Application.Current?.MainWindow }; if (dialog.ShowDialog() == true) { var workOrder = dialog.WorkOrder; if (DatabaseHelper.UpdateWorkOrderInfo(workOrder)) { _workspace.ShowStatus("工单修改成功", false); _workspace.ReloadWorkOrders(); } else { _workspace.ShowStatus("修改失败", true); } } } catch (Exception ex) { _workspace.ShowStatus($"修改失败: {ex.Message}", true); } } private void DeleteWorkOrder() { if (SelectWorkOrderInfo == null) { _workspace.ShowStatus("请先选择要删除的工单", true); return; } var result = MessageBox.Show($"确定要删除工单 {SelectWorkOrderInfo.WorkOrderNo} 吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) { try { DatabaseHelper.DeleteWorkOrderInfo(SelectWorkOrderInfo); _workspace.ShowStatus("工单已删除", false); _workspace.ReloadWorkOrders(); } catch (Exception ex) { _workspace.ShowStatus($"删除失败: {ex.Message}", true); } } } } }