注意:本实现与视频不一致。本实现中单独做了汇总接口,而视频中则合并到国todo接口当中了。
新建文件MyToDo.Share.Models.SummaryDto
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyToDo.Share.Models
{
public class SummaryDto:BaseDto
{
private int sum;
public int Sum
{
get { return sum; }
set { sum = value; OnPropertyChanged(); }
}
private int compeleteCnt;
public int CompeleteCnt
{
get { return compeleteCnt; }
set { compeleteCnt = value; OnPropertyChanged(); }
}
private int memoCnt;
public int MemoCnt
{
get { return memoCnt; }
set { memoCnt = value; OnPropertyChanged(); }
}
private string? compeleteRatio;
public string? CompeleteRatio
{
get { return compeleteRatio; }
set { compeleteRatio = value; OnPropertyChanged(); }
}
private ObservableCollection todoList;
public ObservableCollection TodoList
{
get { return todoList; }
set { todoList = value; }
}
///
/// MemoList
///
private ObservableCollection memoList;
public ObservableCollection MemoList
{
get { return memoList; }
set { memoList = value; }
}
}
}
添加文件:MyToDo.Api.Service.ISummary
using MyToDo.Share.Parameters;
namespace MyToDo.Api.Service
{
public interface ISummary
{
Task GetAllInfo(SummaryParameter parameter);
}
}
添加文件:MyToDo.Api.Service.Summary
using Arch.EntityFrameworkCore.UnitOfWork;
using AutoMapper;
using MyToDo.Api.Context;
using MyToDo.Share.Models;
using MyToDo.Share.Parameters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
namespace MyToDo.Api.Service
{
public class Summary : ISummary
{
private readonly IUnitOfWork work;
private readonly IMapper mapper;
public Summary(IUnitOfWork work,IMapper mapper)
{
this.work = work;
this.mapper = mapper;
}
public async Task GetAllInfo(SummaryParameter parameter)
{
try
{
SummaryDto sumdto = new SummaryDto();
//获取所有todo信息
var Pagetodos = await work.GetRepository().GetPagedListAsync(pageIndex: parameter.PageIndex, pageSize: parameter.PageSize, orderBy: source => source.OrderByDescending(t => t.CreateDate));
//获取所有memo信息
var Pagememos = await work.GetRepository().GetPagedListAsync(pageIndex: parameter.PageIndex, pageSize: parameter.PageSize, orderBy: source => source.OrderByDescending(t => t.CreateDate));
//汇总待办数量
sumdto.Sum = Pagetodos.TotalCount;
//统计完成数量
var todos = Pagetodos.Items;
sumdto.CompeleteCnt = todos.Where(t => t.Status == 1).Count();
//计算已完成比率
sumdto.CompeleteRatio = (sumdto.CompeleteCnt / (double)sumdto.Sum).ToString("0%");
//统计备忘录数量
var memos = Pagememos.Items;
sumdto.MemoCnt=Pagememos.TotalCount;
//获取todos项目与memos项目集合
sumdto.TodoList = new ObservableCollection(mapper.Map>(todos.Where(t => t.Status == 0)));
sumdto.MemoList = new ObservableCollection(mapper.Map>(memos));
return new ApiReponse(true, sumdto);
}
catch (Exception ex)
{
return new ApiReponse(false, ex);
}
}
}
}
添加文件MyToDo.Api.Controllers.SummaryController
using Microsoft.AspNetCore.Mvc;
using Microsoft.VisualBasic;
using MyToDo.Api.Service;
using MyToDo.Share.Models;
using MyToDo.Share.Parameters;
namespace MyToDo.Api.Controllers
{
[ApiController]
[Route("api/[controller]/[action]")]
public class SummaryController:ControllerBase
{
private readonly ISummary service;
public SummaryController(ISummary tService)
{
this.service = tService;
}
[HttpGet]
public async Task GetAllInfo([FromQuery] SummaryParameter parameter)=>await service.GetAllInfo(parameter);
}
}
文件:webapi.Program.cs
添加:
builder.Services.AddTransient();
新建文件:Mytodo.Service.ISummeryService.cs
using MyToDo.Share;
using MyToDo.Share.Contact;
using MyToDo.Share.Models;
using MyToDo.Share.Parameters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Mytodo.Service
{
public interface ISummeryService
{
//public async Task> GetAllInfo(SummaryParameter parameter)
Task> GetAllInfo(SummaryParameter parameter);
}
}
添加文件:Mytodo.Service.SummeryService
using MyToDo.Share;
using MyToDo.Share.Contact;
using MyToDo.Share.Models;
using MyToDo.Share.Parameters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Mytodo.Service
{
public class SummeryService : ISummeryService
{
private readonly HttpRestClient client;
private readonly string ServiceName="Summary";
public SummeryService(HttpRestClient client)
{
this.client = client;
}
public async Task> GetAllInfo(SummaryParameter parameter)
{
BaseRequest request = new BaseRequest();
request.Method = RestSharp.Method.GET;
//如果查询字段为空
request.Route = $"api/{ServiceName}/GetAllInfo?PageIndex={parameter.PageIndex}" + $"&PageSize={parameter.PageSize}";
//request.Route = $"api/{ServiceName}/GetAll?PageIndex={parameter.PageIndex}" + $"&PageSize={parameter.PageSize}" + $"&search={parameter.Search}";
return await client.ExecuteAsync(request);
}
}
}
修改文件App.xaml.cs 添加内容
containerRegistry.Register();
修改文件:Mytodo.Views.IndexView.xaml
由
ItemsSource="{Binding TodoDtos}"
ItemsSource="{Binding MemoDtos}"
修改为
ItemsSource="{Binding Summary.TodoList}"
ItemsSource="{Binding Summary.MemoList}"
修改文件:Mytodo.ViewModels.IndexViewModel.cs
public SummaryDto Summary
{
get { return summary; }
set { summary = value; RaisePropertyChanged(); }
}
private SummaryDto summary;
private readonly ISummeryService summService;
public IndexViewModel(IContainerProvider provider,
IDialogHostService dialog) : base(provider)
{
//实例化接口
this.toDoService= provider.Resolve();
this.memoService = provider.Resolve();
this.summService= provider.Resolve();
//初始化命令
EditMemoCmd = new DelegateCommand(Addmemo);
EditTodoCmd = new DelegateCommand(Addtodo);
ToDoCompltedCommand = new DelegateCommand(Compete);
ExecuteCommand = new DelegateCommand(Execute);
this.dialog = dialog;
CreatBars();
}
///
/// 更新首页所有信息
///
private async void UpdateData()
{
UpdateLoding(true);
var summaryResult = await summService.GetAllInfo(new SummaryParameter() { PageIndex = 0, PageSize = 1000 });
if (summaryResult.Status)
{
Summary = summaryResult.Result;
Refresh();
}
UpdateLoding(false);
}
public override async void OnNavigatedTo(NavigationContext navigationContext)
{
UpdateData();
base.OnNavigatedTo(navigationContext);
}
void Refresh()
{
TaskBars[0].Content = summary.Sum.ToString();
TaskBars[1].Content = summary.CompeleteCnt.ToString();
TaskBars[2].Content = summary.CompeleteRatio;
TaskBars[3].Content = summary.MemoCnt.ToString();
}
using Mytodo.Common.Models;
using MyToDo.Share.Parameters;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using MyToDo.Share.Models;
using Prism.Commands;
using Prism.Services.Dialogs;
using Mytodo.Dialog;
using Mytodo.ViewModels;
using Mytodo.Service;
using Prism.Ioc;
using System.Diagnostics;
using Microsoft.VisualBasic;
using ImTools;
using DryIoc;
using MyToDo.Share;
using System.Windows;
using Prism.Regions;
namespace Mytodo.ViewModels
{
public class IndexViewModel:NavigationViewModel
{
#region 定义命令
///
/// Todo完成命令
///
public DelegateCommand ToDoCompltedCommand { get; set; }
public DelegateCommand ExecuteCommand { get; set; }
///
/// 命令:编辑备忘
///
public DelegateCommand EditMemoCmd { get;private set; }
///
/// 命令:编辑待办
///
public DelegateCommand EditTodoCmd { get; private set; }
#endregion
#region 定义属性
public SummaryDto Summary
{
get { return summary; }
set { summary = value; RaisePropertyChanged(); }
}
public string Title { get; set; }
///
/// 首页任务条
///
public ObservableCollection TaskBars
{
get { return taskBars; }
set { taskBars = value; RaisePropertyChanged(); }
}
#endregion
#region 定义重要命令
#endregion
#region 定义重要字段
private readonly IDialogHostService dialog;
private readonly ITodoService toDoService;
private readonly ISummeryService summService;
private readonly IMemoService memoService;
#endregion
#region 定义普通字段
private SummaryDto summary;
private ObservableCollection taskBars;
#endregion
#region 命令相关方法
///
/// togglebutoon 的命令
///
///
///
async private void Compete(ToDoDto dto)
{
if (dto == null || string.IsNullOrEmpty(dto.Title) || (string.IsNullOrEmpty(dto.Content)))
return;
var updres = await toDoService.UpdateAsync(dto);
if (updres.Status)
{
var todo = Summary.TodoList.FirstOrDefault(x => x.Id.Equals(dto.Id));
//更新信息
todo.Status = dto.Status;
}
// 从数据库更新信息
UpdateData();
}
///
/// 选择执行命令
///
///
void Execute(string obj)
{
switch (obj)
{
case "新增待办": Addtodo(null); break;
case "新增备忘": Addmemo(null); break;
}
}
///
/// 添加待办事项
///
async void Addtodo(ToDoDto model)
{
DialogParameters param = new DialogParameters();
if (model != null)
param.Add("Value", model);
var dialogres = await dialog.ShowDialog("AddTodoView", param);
var newtodo = dialogres.Parameters.GetValue("Value");
if (newtodo == null || string.IsNullOrEmpty(newtodo.Title) || (string.IsNullOrEmpty(newtodo.Content)))
return;
if (dialogres.Result == ButtonResult.OK)
{
try
{
if (newtodo.Id > 0)
{
var updres = await toDoService.UpdateAsync(newtodo);
if (updres.Status)
{
var todo = Summary.TodoList.FirstOrDefault(x=>x.Id.Equals(newtodo.Id));
//更新信息
todo.Content = newtodo.Content;
todo.Title = newtodo.Title;
todo.Status = newtodo.Status;
}
}
else
{
//添加内容
//更新数据库数据
var addres = await toDoService.AddAsync(newtodo);
//更新UI数据
if (addres.Status)
{
Summary.TodoList.Add(addres.Result);
}
}
}
catch
{
}
finally
{
UpdateLoding(false);
}
}
// 从数据库更新信息
UpdateData();
}
///
/// 添加备忘录
///
async void Addmemo(MemoDto model)
{
DialogParameters param = new DialogParameters();
if (model != null)
param.Add("Value", model);
var dialogres = await dialog.ShowDialog("AddMemoView", param);
if (dialogres.Result == ButtonResult.OK)
{
try
{
var newmemo = dialogres.Parameters.GetValue("Value");
if (newmemo != null && string.IsNullOrWhiteSpace(newmemo.Content) && string.IsNullOrWhiteSpace(newmemo.Title))
return;
if (newmemo.Id > 0)
{
var updres = await memoService.UpdateAsync(newmemo);
if (updres.Status)
{
//var memo = MemoDtos.FindFirst(predicate: x => x.Id == newmemo.Id);
var memo = Summary.MemoList.FirstOrDefault( x => x.Id.Equals( newmemo.Id));
//更新信息
memo.Content = newmemo.Content;
memo.Title = newmemo.Title;
}
}
else
{
//添加内容
var addres = await memoService.AddAsync(newmemo);
//更新UI数据
if (addres.Status)
{
Summary.MemoList.Add(addres.Result);
}
}
}
catch
{
}
finally
{
UpdateLoding(false);
}
}
// 从数据库更新信息
UpdateData();
}
#endregion
#region 其它方法
///
/// 更新首页所有信息
///
private async void UpdateData()
{
UpdateLoding(true);
var summaryResult = await summService.GetAllInfo(new SummaryParameter() { PageIndex = 0, PageSize = 1000 });
if (summaryResult.Status)
{
Summary = summaryResult.Result;
Refresh();
}
UpdateLoding(false);
}
#endregion
#region 启动项相关
void CreatBars()
{
Title = "您好,2022";
TaskBars = new ObservableCollection();
TaskBars.Add(new TaskBar { Icon = "CalendarBlankOutline", Title = "汇总", Color = "#FF00FF00", Content = "27", Target = "" });
TaskBars.Add(new TaskBar { Icon = "CalendarMultipleCheck", Title = "已完成", Color = "#6B238E", Content = "24", Target = "" });
TaskBars.Add(new TaskBar { Icon = "ChartLine", Title = "完成比例", Color = "#32CD99", Content = "100%", Target = "" });
TaskBars.Add(new TaskBar { Icon = "CheckboxMarked", Title = "备忘录", Color = "#5959AB", Content = "13", Target = "" });
}
public override async void OnNavigatedTo(NavigationContext navigationContext)
{
UpdateData();
base.OnNavigatedTo(navigationContext);
}
void Refresh()
{
TaskBars[0].Content = summary.Sum.ToString();
TaskBars[1].Content = summary.CompeleteCnt.ToString();
TaskBars[2].Content = summary.CompeleteRatio;
TaskBars[3].Content = summary.MemoCnt.ToString();
}
#endregion
public IndexViewModel(IContainerProvider provider,
IDialogHostService dialog) : base(provider)
{
//实例化接口
this.toDoService= provider.Resolve();
this.memoService = provider.Resolve();
this.summService= provider.Resolve();
//初始化命令
EditMemoCmd = new DelegateCommand(Addmemo);
EditTodoCmd = new DelegateCommand(Addtodo);
ToDoCompltedCommand = new DelegateCommand(Compete);
ExecuteCommand = new DelegateCommand(Execute);
this.dialog = dialog;
CreatBars();
}
}
}