using FATrace.Model; using FATrace.WPLApp.Core; using FATrace.WPLApp.Services; using FreeSql; using Prism.Commands; using Prism.Services.Dialogs; using System; using System.Threading.Tasks; using System.Windows; namespace FATrace.WPLApp.ViewModels { /// /// 称重用户新增/编辑 弹窗 VM /// public class DialogWeightUserEditViewModel : DialogViewModel { private readonly IFreeSql _fsql; private readonly ILogService _log; private string _mode = WeightUserManageViewModel.DialogModes.Add; private long _editUserId; public DialogWeightUserEditViewModel(IFreeSql fsql, ILogService log) { _fsql = fsql; _log = log; SaveCommand = new DelegateCommand(async () => await SaveAsync(), () => !IsBusy) .ObservesProperty(() => IsBusy); CancelCommand = new DelegateCommand(() => OnDialogClosed(ButtonResult.Cancel)); } private string? _checkName; /// /// 确认者 /// public string? CheckName { get => _checkName; set { _checkName = value; RaisePropertyChanged(); } } private string? _opName; /// /// 操作者 /// public string? OpName { get => _opName; set { _opName = value; RaisePropertyChanged(); } } private string? _password; /// /// 密码(当前按现有模型使用明文;如后续需哈希,可在保存处替换) /// public string? Password { get => _password; set { _password = value; RaisePropertyChanged(); } } /// /// 保存 /// public DelegateCommand SaveCommand { get; } /// /// 取消 /// public DelegateCommand CancelCommand { get; } /// /// 打开弹窗时初始化 /// /// 参数 public override void OnDialogOpened(IDialogParameters parameters) { _mode = parameters.GetValue(WeightUserManageViewModel.DialogKeys.Mode) ?? WeightUserManageViewModel.DialogModes.Add; Title = _mode == WeightUserManageViewModel.DialogModes.Edit ? "编辑称重用户" : "新增称重用户"; if (_mode == WeightUserManageViewModel.DialogModes.Edit) { _editUserId = parameters.GetValue(WeightUserManageViewModel.DialogKeys.UserId); LoadUser(_editUserId); } else { _editUserId = 0; CheckName = string.Empty; OpName = string.Empty; Password = string.Empty; } } private void LoadUser(long id) { try { var user = _fsql.Select().Where(a => a.Id == id).First(); if (user == null) { MessageBox.Show("称重用户不存在或已被删除", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } CheckName = user.CheckName; OpName = user.OpName; Password = user.Password; } catch (Exception ex) { _log.Error($"加载称重用户失败: {ex}"); MessageBox.Show($"加载称重用户失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } } private async Task SaveAsync() { if (IsBusy) return; try { if (string.IsNullOrWhiteSpace(CheckName)) { MessageBox.Show("请输入确认者", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } if (string.IsNullOrWhiteSpace(OpName)) { MessageBox.Show("请输入操作者", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } if (string.IsNullOrWhiteSpace(Password)) { MessageBox.Show("请输入密码", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; } IsBusy = true; if (_mode == WeightUserManageViewModel.DialogModes.Add) { await AddAsync(); } else { await UpdateAsync(); } OnDialogClosed(ButtonResult.OK); } catch (Exception ex) { _log.Error($"保存称重用户失败: {ex}"); MessageBox.Show($"保存失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error); } finally { IsBusy = false; } } private async Task AddAsync() { await Task.Run(() => { var entity = new TbWeightUser { CheckName = CheckName!, OpName = OpName!, Password = Password!, CreateTime = DateTime.Now }; _fsql.Insert(entity).ExecuteAffrows(); }); _log.Info($"新增称重用户成功: {CheckName}/{OpName}"); } private async Task UpdateAsync() { var id = _editUserId; if (id <= 0) throw new InvalidOperationException("编辑称重用户Id无效"); await Task.Run(() => { var aff = _fsql.Update() .Set(a => a.CheckName, CheckName!) .Set(a => a.OpName, OpName!) .Set(a => a.Password, Password!) .Where(a => a.Id == id) .ExecuteAffrows(); if (aff <= 0) { throw new InvalidOperationException("更新失败:称重用户不存在或未发生变化"); } }); _log.Info($"更新称重用户成功: Id={id}, CheckName={CheckName}, OpName={OpName}"); } } }