PgSelect.xaml.cs 8.66 KB
Newer Older
潘栩锋's avatar
潘栩锋 committed
1 2
using CommunityToolkit.Mvvm.Input;
using FLY.Thick.FilmCasting.Server.Model;
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
using FLY.Thick.FilmCasting.UI.DbViewer.Core;
using FLY.Thick.FilmCasting.UI.DbViewer.Db;
using MahApps.Metro.Controls;
using MahApps.Metro.Controls.Dialogs;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

namespace FLY.Thick.FilmCasting.UI.DbViewer
{
    /// <summary>
    /// PageSelect.xaml 的交互逻辑
    /// </summary>
    public partial class PgSelect : Page
    {
        PgSelectVm viewModel;
        DbViewerModel dbViewerModel;
        public PgSelect()
        {
            InitializeComponent();
        }

        [Unity.InjectionMethod]
        public void Init(DbViewerModel dBViewerModel)
        {
            this.dbViewerModel = dBViewerModel;
            viewModel = new PgSelectVm();
            viewModel.Init(dbViewerModel, dgridProfiles);
            this.DataContext = viewModel;

            viewModel.OkSuccessEvent += ViewModel_SearchSuccessEvent;
潘栩锋's avatar
潘栩锋 committed
39

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
        }

        private void ViewModel_SearchSuccessEvent(object sender, EventArgs e)
        {
            this.NavigationService.GoBack();
            this.NavigationService.RemoveBackEntry();
        }

        private void ButtonBack_Click(object sender, RoutedEventArgs e)
        {
            this.NavigationService.GoBack();
            this.NavigationService.RemoveBackEntry();
        }

    }
    public class PgSelectVm : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;


        public DateTime BeginDate { get; set; }
        public DateTime EndDate { get; set; }
        public string ProductNameFilter { get; set; }
        public string BatchFilter { get; set; }

        public ObservableCollection<Db_Profile> Profiles { get; } = new ObservableCollection<Db_Profile>();
        //public ObservableCollection<Db_Profile> SelectedItems { get; } = new ObservableCollection<Db_Profile>();

        public string MonthPath { get; private set; }
潘栩锋's avatar
潘栩锋 committed
69
        public DateTime DbBeginTime { get; private set; }
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
        public DateTime DbEndTime { get; private set; }

        #region CMD
        public RelayCommand SearchCmd { get; private set; }
        public RelayCommand DeleteCmd { get; private set; }
        public RelayCommand OkCmd { get; private set; }

        public RelayCommand SelectMonthPathCmd { get; private set; }
        #endregion
        public DbHelper DbHelper => dbHelper;
        DbViewerModel dbViewerModel;
        DataGrid dgridProfiles;
        DbHelper dbHelper;
        public event EventHandler OkSuccessEvent;

        public PgSelectVm()
        {
            SearchCmd = new RelayCommand(Search);
            DeleteCmd = new RelayCommand(Delete);
            OkCmd = new RelayCommand(Ok);
            SelectMonthPathCmd = new RelayCommand(SelectMonthPath);
        }



潘栩锋's avatar
潘栩锋 committed
95
        public void Init(DbViewerModel dbViewerModel, DataGrid dgridProfiles)
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
        {
            this.dbViewerModel = dbViewerModel;
            this.dbHelper = dbViewerModel.mDbHelper;
            this.dgridProfiles = dgridProfiles;


            Misc.BindingOperations.SetBinding(dbHelper, nameof(dbHelper.MonthPath), () =>
            {
                if (string.IsNullOrEmpty(this.dbHelper.MonthPath))
                {
                    MonthPath = "最近2个月";
                }
                else
                {
                    MonthPath = this.dbHelper.MonthPath;
                }
            });

            updateDate();
            dbHelper.PropertyChanged += DbHelper_PropertyChanged;


        }

        private void DbHelper_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
潘栩锋's avatar
潘栩锋 committed
122 123
            if ((e.PropertyName == nameof(dbHelper.DbEndTime)) || (e.PropertyName == nameof(dbHelper.DbBeginTime)))
            {
124 125 126 127
                updateDate();
            }
        }

潘栩锋's avatar
潘栩锋 committed
128
        void updateDate()
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
        {
            DbEndTime = dbHelper.DbEndTime;
            DbBeginTime = dbHelper.DbBeginTime;
            EndDate = DbEndTime;
            BeginDate = EndDate.AddDays(-1);
        }
        private async void SelectMonthPath()
        {
            DgSelectMonth dialog = new DgSelectMonth();
            dialog.Init(dbHelper); ;
            await App.MetroWindow.ShowMetroDialogAsync(dialog);
        }

        async void Search()
        {
144 145 146 147 148 149 150 151 152 153 154
            var controller = await App.MetroWindow.ShowProgressAsync("请等待...", "开始搜索",
                settings: new MetroDialogSettings()
                {
                    NegativeButtonText = "停止",
                    AnimateShow = false,
                    AnimateHide = false,

                });
            //controller.SetCancelable(true);
            controller.SetIndeterminate();

155 156 157 158 159 160
            var list = dbHelper.GetProfileList(BeginDate, EndDate, ProductNameFilter, BatchFilter);
            Profiles.Clear();
            foreach (var p in list)
            {
                Profiles.Add(p);
            }
161 162

            await controller.CloseAsync();
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
            await App.MetroWindow.ShowMessageAsync("搜索完成",
                    $"搜索结果 为 {Profiles.Count}条");
            return;
        }

        async void Delete()
        {

            var SelectedItems = dgridProfiles.SelectedItems;
            if (SelectedItems.Count == 0)
            {
                await App.MetroWindow.ShowMessageAsync("删除异常",
                    $"没有选择任何一个记录!!");
                return;
            }
            var result = await App.MetroWindow.ShowMessageAsync("警告",
                   $"是否确定删除这些记录?",
                   MessageDialogStyle.AffirmativeAndNegative,
                   new MetroDialogSettings()
                   {
                       AffirmativeButtonText = "确定删除",
                       NegativeButtonText = "取消",
                       DefaultButtonFocus = MessageDialogResult.Negative,
                       ColorScheme = MetroDialogColorScheme.Inverted
                   });
            if (result != MessageDialogResult.Affirmative)
            {
                return;
            }

            List<Db_Profile> dels = new List<Db_Profile>();
            foreach (Db_Profile p in SelectedItems)
            {
                dbHelper.DeleteProfile(p);
                dels.Add(p);
            }
            foreach (var del in dels)
                Profiles.Remove(del);

            SelectedItems.Clear();


            await App.MetroWindow.ShowMessageAsync("删除完成",
                    $"删除 {dels.Count}条 数据");
            return;
        }

        async void Ok()
        {
            var SelectedItems = dgridProfiles.SelectedItems;
            if (SelectedItems.Count == 0)
            {
                await App.MetroWindow.ShowMessageAsync("加载异常",
                    $"没有选择任何一个记录,也许忘记按 【搜索】 了!!");
                return;
            }

            //开始加载
            var controller = await App.MetroWindow.ShowProgressAsync("请等待...", "开始加载数据",
                settings: new MetroDialogSettings()
                {
                    NegativeButtonText = "停止",
                    AnimateShow = false,
                    AnimateHide = false,
                });
            //controller.SetCancelable(true);
            controller.SetIndeterminate();


            List<Db_Profile> profiles = new List<Db_Profile>();
            if (SelectedItems.Count > 0)
            {
                foreach (Db_Profile p in SelectedItems)
                {
                    profiles.Add(p);
                }
                //按顺序排列
                profiles.Sort((p1, p2) =>
                {
                    return p1.ID.CompareTo(p2.ID);
                });
            }
            bool ret = await Task.Factory.StartNew(() =>
            {
                return dbViewerModel.GetProfilePacks(profiles);
            });



            if (!ret)
            {
                //获取出错
                await controller.CloseAsync();
                await ((MetroWindow)Application.Current.MainWindow).ShowMessageAsync("加载出错", "数据异常,请检测数据库");
                return;
            }

            await controller.CloseAsync();

潘栩锋's avatar
潘栩锋 committed
262
            string msg = $"扫描数据 {dbViewerModel.ProfilePacks.Sum(p => p.ScanDatas.Count())}幅";
263 264 265 266 267 268 269 270 271 272 273 274

            //加载成功
            await ((MetroWindow)Application.Current.MainWindow).ShowMessageAsync("加载成功", msg);
            OkSuccessEvent?.Invoke(this, null);

        }
    }
    public class PgSelectVmUt : PgSelectVm
    {

    }
}