using Aucma.Core.Palletiz.Models; using Aucma.Core.Palletiz.Views; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using MaterialDesignThemes.Wpf; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.Metrics; using System.Drawing.Imaging; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using LiveChartsCore.Defaults; using LiveChartsCore.SkiaSharpView; using LiveChartsCore; using LiveChartsCore.SkiaSharpView.Extensions; using LiveChartsCore.Measure; using LiveChartsCore.SkiaSharpView.Painting; using SkiaSharp; using LiveChartsCore.ConditionalDraw; using LiveChartsCore.Drawing; using System.Linq; using System.Threading.Tasks; using LiveChartsCore.Themes; using System.Collections; using log4net; using Admin.Core.Tasks; using Aucma.Core.Palletiz.Common; /* * 首页信息 * */ namespace Aucma.Core.Palletiz.ViewModels { public partial class IndexPageViewModel : ObservableObject { private static readonly log4net.ILog log = LogManager.GetLogger(typeof(IndexPageViewModel)); private ObservableCollection listItems = new ObservableCollection(); private readonly Random _r = new(); private PilotInfo[] _modelData; public IndexPageViewModel() { StationName = "门体发泡"; MaterialName = "SC-AUCMA-农夫山泉,SC 门体"; OrderNo = "8512365486"; BeginTime = DateTime.Now.ToString("yyyy-mm-dd HH:mm:ss"); #region 每日产量 //var paints = new SolidColorPaint[] //{ // //new(SKColors.Blue) //}; var series = new ColumnSeries { Values = new[] { 2, 5, 4, 6, 8, 3, 2, 4, 6 }, DataLabelsPaint = new SolidColorPaint(new SKColor(30, 30, 30)), DataLabelsPosition = DataLabelsPosition.Top }.OnPointMeasured(point => { // this method is called for each point in the series // we can customize the visual here if (point.Visual is null) return; // get a paint from the array //var paint = paints[point.Index % paints.Length]; // set the paint to the visual ///point.Visual.Fill = paint; }); Series = new ISeries[] { series }; //TextPaint = new SolidColorPaint() //{ // Color = SKColors.DarkSlateGray, // SKTypeface = SKFontManager.Default.MatchCharacter('汉') //}; //TextPaint2 = new SolidColorPaint() //{ // Color = SKColors.DarkSlateGray, // SKTypeface = SKFontManager.Default.MatchCharacter('汉') //}; #endregion LoadModel(); } #region 扫描信息 #region 物料条码 private string _stationName; public string StationName { get { return _stationName; } set { _stationName = value; SetProperty(ref _stationName, value); } } #endregion #region 物料名称 private string _materialName; public string MaterialName { get { return _materialName; } set { _materialName = value; SetProperty(ref _materialName, value); } } #endregion #region 订单信息 private string _orderNo; public string OrderNo { get { return _orderNo; } set { _orderNo = value; SetProperty(ref _orderNo, value); } } #endregion #region 开始时间 private string _beginTime; public string BeginTime { get { return _beginTime; } set { _beginTime = value; SetProperty(ref _beginTime, value); } } #endregion #endregion #region 当日产量 public ISeries[] Series { get; set; } public Axis[] XAxes { get; set; } = { new Axis { //Name = "每日产量", NamePaint = new SolidColorPaint { Color = SKColors.Red }, // 对命名标签或静态标签使用labels属性 Labels = new string[] { "Sergio", "Lando", "Lewis", "Lewis", "Lewis", "Lewis", "Lewis", "Lewis", "Lewis", "Lewis" }, LabelsRotation = 15 } }; //[ObservableProperty] //private IPaint textPaint2; //private IPaint textPaint; //public IPaint TextPaint { get => textPaint; set => SetProperty(ref textPaint, value); } #endregion #region 型号统计 public void LoadModel() { // generate some paints for each pilot: var paints = Enumerable.Range(0, 7) .Select(i => new SolidColorPaint(ColorPalletes.MaterialDesign500[i].AsSKColor())) .ToArray(); // generate some data for each pilot: _modelData = new PilotInfo[] { new("Tsunoda", 500, paints[0]), new("Sainz", 450, paints[1]), new("Riccardo", 520, paints[2]), new("Bottas", 550, paints[3]), new("Perez", 660, paints[4]), new("Verstapen", 920, paints[5]), new("Hamilton", 1000, paints[6]) }; var rowSeries = new RowSeries { Values = _modelData.OrderBy(x => x.Value).ToArray(), DataLabelsPaint = new SolidColorPaint(new SKColor(245, 245, 245)), DataLabelsPosition = DataLabelsPosition.End, DataLabelsTranslate = new(-1, 0), DataLabelsFormatter = point => $"{point.Model!.Name} {point.Coordinate.PrimaryValue}", MaxBarWidth = 50, Padding = 10, }.OnPointMeasured(point => { if (point.Visual is null) return; point.Visual.Fill = point.Model!.Paint; }); //.OnPointMeasured(point => //{ // // assign a different color to each point // if (point.Visual is null) return; // point.Visual.Fill = point.Model!.Paint; //}); _modelSeries = new[] { rowSeries }; _ = StartRace(); } [ObservableProperty] private ISeries[] _modelSeries; [ObservableProperty] private Axis[] _xModelAxes = { new Axis { SeparatorsPaint = new SolidColorPaint(new SKColor(220, 220, 220)) } }; [ObservableProperty] private Axis[] _yModelAxes = { new Axis { IsVisible = false } }; public bool IsReading { get; set; } = true; public async Task StartRace() { await Task.Delay(1000); // to keep this sample simple, we run the next infinite loop // in a real application you should stop the loop/task when the view is disposed //while (IsReading) //{ //do a random change to the data foreach (var item in _modelData) item.Value += _r.Next(0, 100); ModelSeries[0].Values = _modelData.OrderBy(x => x.Value).ToArray(); await Task.Delay(100); //} } #endregion } }