feat: Algorithm Config agile JSON Setting v1

master
Tongg 9 months ago
parent b6ae92c46b
commit 1810207d79
  1. 112
      Model/Entity/AgileJsonConfigEntity.cs
  2. 1
      ViewModel/BaseViewModel.cs
  3. 88
      ViewModel/Configuration/AlgorithmConfigVM.cs
  4. 262
      ViewModel/Grading/GradingResultVM.cs
  5. 270
      Views/Configuration/AlgorithmConfigPage.xaml
  6. 3
      Views/Configuration/AlgorithmConfigPage.xaml.cs

@ -0,0 +1,112 @@
using System.ComponentModel;
using System.Runtime.CompilerServices;
using SparkClient.ViewModel.Configuration;
namespace SparkClient.Model.Entity;
public class AgileJsonConfigEntity
{
private readonly AlgorithmConfigVM _vm;
private readonly List<string> _keys;
public AgileJsonConfigEntity(AlgorithmConfigVM vm, List<string> keys)
{
_vm = vm;
_mode = 0;
Shape = "圆形";
Spec = _vm.GetSpecOptions(_mode).FirstOrDefault();
_keys = keys;
JsonKeys = keys;
}
private int _mode;
public int Mode
{
get => _mode;
set
{
if (_mode == value) return;
_mode = value;
OnPropertyChanged();
// 自动更新规格
Spec = _vm.GetSpecOptions(value).FirstOrDefault();
}
}
private string _spec;
public string Spec
{
get => _spec;
set => SetField(ref _spec, value);
}
private string _shape;
public string Shape
{
get => _shape;
private set => SetField(ref _shape, value);
}
private string _jsonKey;
public string JsonKey
{
get => _jsonKey;
set
{
SetField(ref _jsonKey, value);
FilterItems(value);
}
}
private string _value;
public string Value
{
get => _value;
set => SetField(ref _value, value);
}
private List<string> _jsonKeys;
public List<string> JsonKeys
{
get => _jsonKeys;
set => SetField(ref _jsonKeys, value);
}
private string GetDefaultSpec(int mode)
{
return mode switch
{
0 => "p8-p8",
1 => "p8-p8-s1",
_ => null
};
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
protected bool SetField<T>(ref T field, T value, [CallerMemberName] string name = null)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(name);
return true;
}
private void FilterItems(string key)
{
JsonKeys.Clear();
foreach (var data in _keys)
{
if (data.ToLower().Contains(key.ToLower()))
{
JsonKeys.Add(data);
}
}
}
}

@ -14,6 +14,7 @@ public class BaseViewModel : INotifyPropertyChanged
protected void OnPropertyChanged([CallerMemberName] string propertyName = null) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public BaseViewModel()
{
// 记录当前 ViewModel 的名称

@ -1,4 +1,5 @@
using System.Data;
using System.Collections.ObjectModel;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Input;
@ -21,6 +22,12 @@ public class AlgorithmConfigVM : BaseViewModel
public ICommand SaveAlgorithmDataCommand { get; }
public ICommand BeautifyJsonCommand { get; }
public ICommand UglifyJsonCommand { get; }
public List<AgileJsonConfigEntity> AgileJsonConfigEntities { get; set; }
public List<string> JsonKeysBak = new List<string>();
public List<Param> ModeList { get; set; }
private bool _isEnabled;
public bool IsEnabled { get { return _isEnabled; } set { _isEnabled = value; OnPropertyChanged(nameof(IsEnabled)); } }
@ -34,8 +41,17 @@ public class AlgorithmConfigVM : BaseViewModel
UglifyJsonCommand = new RelayCommand(UglifyJson);
InitAlgorithmData(null);
IsEnabledByRole();
JsonKeysBak = GetNestedKeys(JObject.Parse(AlgorithmConfigJson));
ModeList = GetRunModelList();
AgileJsonConfigEntities = new List<AgileJsonConfigEntity>();
AgileJsonConfigEntities.Add(new AgileJsonConfigEntity(this, JsonKeysBak) {
Mode = 0,
Spec = "p8-p8",
});
}
/// <summary>
/// 初始化算法数据
/// </summary>
@ -115,8 +131,54 @@ public class AlgorithmConfigVM : BaseViewModel
Logger.Error($"全局异常捕获:{ex.Message}", ex);
}
}
// 命令实现
public ICommand AddCommand => new RelayCommand((param) =>
{
AgileJsonConfigEntities.Add(new AgileJsonConfigEntity(this, JsonKeysBak)
{
Mode = 0,
Spec = "p8-p8",
});
});
private static readonly Dictionary<int, List<string>> SpecOptions = new()
{
[0] = new List<string> { "p8-p8" },
[1] = new List<string> {
"p8-p8", "p8-p8-s1", "p8-p8-s2",
"p8-p8-s3", "p8-p8-s4"
}
};
public List<string> GetSpecOptions(int mode)
{
return SpecOptions.TryGetValue(mode, out var options)
? options
: new List<string>();
}
private List<string> GetNestedKeys(JToken token, string prefix = "")
{
var keys = new List<string>();
if (token is JObject obj)
{
foreach (var property in obj.Properties())
{
var currentKey = string.IsNullOrEmpty(prefix)
? property.Name
: $"{prefix}.{property.Name}";
keys.Add(currentKey);
keys.AddRange(GetNestedKeys(property.Value, currentKey));
}
}
return keys;
}
/// <summary>
/// 保存数据
/// </summary>
@ -227,5 +289,27 @@ public class AlgorithmConfigVM : BaseViewModel
{
return AlgorithmConfigJson;
}
public List<Param> GetRunModelList()
{
return new List<Param>
{
new Param()
{
Value = "0",
Name = "实验室模式"
},
new Param()
{
Value = "1",
Name = "工厂模式"
}
};
}
}
public class Param
{
public string Value { get; set; }
public string Name { get; set; }
}

@ -717,14 +717,17 @@ public class GradingResultVM : BaseViewModel
info.Max = FormatDouble_D(result.measurements.M2);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
info.Dtl1 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_1);
info.Dtl2 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_2);
info.Dtl3 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_3);
info.Dtl4 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_4);
info.Dtl5 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_5);
info.Dtl6 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_6);
info.Dtl7 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_7);
info.Dtl8 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_8);
if (data.DIAMETER_DETAIL != null)
{
info.Dtl1 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_1);
info.Dtl2 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_2);
info.Dtl3 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_3);
info.Dtl4 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_4);
info.Dtl5 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_5);
info.Dtl6 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_6);
info.Dtl7 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_7);
info.Dtl8 = FormatDouble_D(data.DIAMETER_DETAIL.DIAMETER_8);
}
info.SymLevel = calGradeSym("DIAMETER", calSymValue(data.M1, data.M2, data.DIAMETER,false));
return info;
}
@ -752,10 +755,13 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_TABLE(result.measurements.TABLE_MIN, result.measurements.TABLE_MAX);
info.isEnabled = false;
var data = result.measurements;
info.Dtl1 = FormatDouble_P(data.TABLE_DETAIL.TABLE_1);
info.Dtl2 = FormatDouble_P(data.TABLE_DETAIL.TABLE_2);
info.Dtl3 = FormatDouble_P(data.TABLE_DETAIL.TABLE_3);
info.Dtl4 = FormatDouble_P(data.TABLE_DETAIL.TABLE_4);
if (data.TABLE_DETAIL != null)
{
info.Dtl1 = FormatDouble_P(data.TABLE_DETAIL.TABLE_1);
info.Dtl2 = FormatDouble_P(data.TABLE_DETAIL.TABLE_2);
info.Dtl3 = FormatDouble_P(data.TABLE_DETAIL.TABLE_3);
info.Dtl4 = FormatDouble_P(data.TABLE_DETAIL.TABLE_4);
}
return info;
}
@ -772,14 +778,17 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_CROWN_ANGLE(result.measurements.CROWN_ANGLE_MIN, result.measurements.CROWN_ANGLE_MAX);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
info.Dtl1 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_1);
info.Dtl2 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_2);
info.Dtl3 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_3);
info.Dtl4 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_4);
info.Dtl5 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_5);
info.Dtl6 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_6);
info.Dtl7 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_7);
info.Dtl8 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_8);
if (data.CROWN_ANGLE_DETAIL != null)
{
info.Dtl1 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_1);
info.Dtl2 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_2);
info.Dtl3 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_3);
info.Dtl4 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_4);
info.Dtl5 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_5);
info.Dtl6 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_6);
info.Dtl7 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_7);
info.Dtl8 = FormatDouble_A(data.CROWN_ANGLE_DETAIL.CROWN_ANGLE_8);
}
info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.CROWN_ANGLE_MIN, data.CROWN_ANGLE_MAX, data.CROWN_ANGLE,false));
return info;
}
@ -797,14 +806,17 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_CROWN_HEIGHT(result.measurements.CROWN_H_MIN, result.measurements.CROWN_H_MAX);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
info.Dtl1 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_1);
info.Dtl2 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_2);
info.Dtl3 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_3);
info.Dtl4 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_4);
info.Dtl5 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_5);
info.Dtl6 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_6);
info.Dtl7 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_7);
info.Dtl8 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_8);
if (data.CROWN_HEIGHT_DETAIL != null)
{
info.Dtl1 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_1);
info.Dtl2 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_2);
info.Dtl3 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_3);
info.Dtl4 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_4);
info.Dtl5 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_5);
info.Dtl6 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_6);
info.Dtl7 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_7);
info.Dtl8 = FormatDouble_P(data.CROWN_HEIGHT_DETAIL.CROWN_HEIGHT_8);
}
info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.CROWN_H_MIN, data.CROWN_H_MAX, data.CROWN_HEIGHT));
return info;
}
@ -821,14 +833,17 @@ public class GradingResultVM : BaseViewModel
info.Max = FormatDouble_P(result.measurements.GIRDLE_BEZEL_MAX);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
info.Dtl1 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_1);
info.Dtl2 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_2);
info.Dtl3 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_3);
info.Dtl4 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_4);
info.Dtl5 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_5);
info.Dtl6 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_6);
info.Dtl7 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_7);
info.Dtl8 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_8);
if (data.GIRDLE_BEZEL_DETAIL != null)
{
info.Dtl1 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_1);
info.Dtl2 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_2);
info.Dtl3 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_3);
info.Dtl4 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_4);
info.Dtl5 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_5);
info.Dtl6 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_6);
info.Dtl7 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_7);
info.Dtl8 = FormatDouble_P(data.GIRDLE_BEZEL_DETAIL.GIRDLE_BEZEL_8);
}
info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.GIRDLE_BEZEL_MIN, data.GIRDLE_BEZEL_MAX, data.GIRDLE_BEZEL));
return info;
}
@ -844,14 +859,19 @@ public class GradingResultVM : BaseViewModel
info.Max = FormatDouble_P(result.measurements.GIRDLE_BONE_MAX);
info.isEnabled = false;
var data = result.measurements;
info.Dtl1 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_1);
info.Dtl2 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_2);
info.Dtl3 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_3);
info.Dtl4 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_4);
info.Dtl5 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_5);
info.Dtl6 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_6);
info.Dtl7 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_7);
info.Dtl8 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_8);
if (data.GIRDLE_BONE_DETAIL != null)
{
info.Dtl1 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_1);
info.Dtl2 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_2);
info.Dtl3 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_3);
info.Dtl4 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_4);
info.Dtl5 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_5);
info.Dtl6 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_6);
info.Dtl7 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_7);
info.Dtl8 = FormatDouble_P(data.GIRDLE_BONE_DETAIL.GIRDLE_BONE_8);
}
return info;
}
@ -868,33 +888,39 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_GIRDLE(result.measurements.GIRDLE_VALLEY_MIN, result.measurements.GIRDLE_VALLEY_MAX);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
List<double> doubles = new List<double>();
var girdleValleyDetail = data.GIRDLE_VALLEY_DETAIL;
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_1);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_2);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_3);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_4);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_5);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_6);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_7);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_8);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_9);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_10);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_11);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_12);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_13);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_14);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_15);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_16);
doubles.Sort();
info.Dtl1= FormatDouble_P2(doubles[0]);
info.Dtl2 = FormatDouble_P2(doubles[1]);
info.Dtl3 = FormatDouble_P2(doubles[2]);
info.Dtl4 = FormatDouble_P2(doubles[3]);
info.Dtl5 = FormatDouble_P2(doubles[12]);
info.Dtl6 = FormatDouble_P2(doubles[13]);
info.Dtl7 = FormatDouble_P2(doubles[14]);
info.Dtl8 = FormatDouble_P2(doubles[15]);
if (girdleValleyDetail != null)
{
List<double> doubles = new List<double>();
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_1);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_2);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_3);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_4);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_5);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_6);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_7);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_8);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_9);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_10);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_11);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_12);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_13);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_14);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_15);
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_16);
doubles.Sort();
info.Dtl1= FormatDouble_P2(doubles[0]);
info.Dtl2 = FormatDouble_P2(doubles[1]);
info.Dtl3 = FormatDouble_P2(doubles[2]);
info.Dtl4 = FormatDouble_P2(doubles[3]);
info.Dtl5 = FormatDouble_P2(doubles[12]);
info.Dtl6 = FormatDouble_P2(doubles[13]);
info.Dtl7 = FormatDouble_P2(doubles[14]);
info.Dtl8 = FormatDouble_P2(doubles[15]);
}
info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.GIRDLE_VALLEY_MIN, data.GIRDLE_VALLEY_MAX, data.GIRDLE_VALLEY));
return info;
}
@ -912,14 +938,17 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_PAV_ANGLE(result.measurements.PAV_ANGLE_MIN, result.measurements.PAV_ANGLE_MAX);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
info.Dtl1 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_1);
info.Dtl2 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_2);
info.Dtl3 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_3);
info.Dtl4 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_4);
info.Dtl5 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_5);
info.Dtl6 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_6);
info.Dtl7 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_7);
info.Dtl8 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_8);
if (data.PAV_ANGLE_DETAIL != null)
{
info.Dtl1 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_1);
info.Dtl2 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_2);
info.Dtl3 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_3);
info.Dtl4 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_4);
info.Dtl5 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_5);
info.Dtl6 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_6);
info.Dtl7 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_7);
info.Dtl8 = FormatDouble_A(data.PAV_ANGLE_DETAIL.PAV_ANGLE_8);
}
info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.PAV_ANGLE_MIN, data.PAV_ANGLE_MAX, data.PAV_ANGLE, false));
return info;
}
@ -937,14 +966,18 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_PAV_DEPTH(result.measurements.PAV_DEPTH_MIN, result.measurements.PAV_DEPTH_MAX);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
info.Dtl1 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_1);
info.Dtl2 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_2);
info.Dtl3 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_3);
info.Dtl4 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_4);
info.Dtl5 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_5);
info.Dtl6 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_6);
info.Dtl7 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_7);
info.Dtl8 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_8);
if (data.PAV_DEPTH_DETAIL != null)
{
info.Dtl1 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_1);
info.Dtl2 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_2);
info.Dtl3 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_3);
info.Dtl4 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_4);
info.Dtl5 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_5);
info.Dtl6 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_6);
info.Dtl7 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_7);
info.Dtl8 = FormatDouble_P(data.PAV_DEPTH_DETAIL.PAV_DEPTH_8);
}
info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.PAV_DEPTH_MIN, data.PAV_DEPTH_MAX, data.PAV_DEPTH));
return info;
}
@ -961,14 +994,17 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_STAR(result.measurements.STAR_MIN, result.measurements.STAR_MAX);
info.isEnabled = false;
var data = result.measurements;
info.Dtl1 = FormatDouble_P(data.STAR_DETAIL.STAR_1);
info.Dtl2 = FormatDouble_P(data.STAR_DETAIL.STAR_2);
info.Dtl3 = FormatDouble_P(data.STAR_DETAIL.STAR_3);
info.Dtl4 = FormatDouble_P(data.STAR_DETAIL.STAR_4);
info.Dtl5 = FormatDouble_P(data.STAR_DETAIL.STAR_5);
info.Dtl6 = FormatDouble_P(data.STAR_DETAIL.STAR_6);
info.Dtl7 = FormatDouble_P(data.STAR_DETAIL.STAR_7);
info.Dtl8 = FormatDouble_P(data.STAR_DETAIL.STAR_8);
if (data.STAR_DETAIL != null)
{
info.Dtl1 = FormatDouble_P(data.STAR_DETAIL.STAR_1);
info.Dtl2 = FormatDouble_P(data.STAR_DETAIL.STAR_2);
info.Dtl3 = FormatDouble_P(data.STAR_DETAIL.STAR_3);
info.Dtl4 = FormatDouble_P(data.STAR_DETAIL.STAR_4);
info.Dtl5 = FormatDouble_P(data.STAR_DETAIL.STAR_5);
info.Dtl6 = FormatDouble_P(data.STAR_DETAIL.STAR_6);
info.Dtl7 = FormatDouble_P(data.STAR_DETAIL.STAR_7);
info.Dtl8 = FormatDouble_P(data.STAR_DETAIL.STAR_8);
}
return info;
}
@ -984,14 +1020,17 @@ public class GradingResultVM : BaseViewModel
info.CutLevel = calGrade_LOWER_HALVES_RATIO(result.measurements.LOWER_HALVES_RATIO_MIN, result.measurements.LOWER_HALVES_RATIO_MAX);
info.isEnabled = false;
var data = result.measurements;
info.Dtl1 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_1);
info.Dtl2 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_2);
info.Dtl3 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_3);
info.Dtl4 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_4);
info.Dtl5 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_5);
info.Dtl6 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_6);
info.Dtl7 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_7);
info.Dtl8 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_8);
if (data.LOWER_HALVES_RATIO_DETAIL != null)
{
info.Dtl1 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_1);
info.Dtl2 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_2);
info.Dtl3 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_3);
info.Dtl4 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_4);
info.Dtl5 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_5);
info.Dtl6 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_6);
info.Dtl7 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_7);
info.Dtl8 = FormatDouble_P(data.LOWER_HALVES_RATIO_DETAIL.LOWER_HALVES_RATIO_8);
}
return info;
}
@ -1046,14 +1085,17 @@ public class GradingResultVM : BaseViewModel
info.Max = FormatDouble_A(result.measurements.TWIST_MAX);
info.Dev = calDev(info.Max, info.Min);
var data = result.measurements;
info.Dtl1 = FormatDouble_A(data.TWIST_DETAIL.TWIST_1);
info.Dtl2 = FormatDouble_A(data.TWIST_DETAIL.TWIST_2);
info.Dtl3 = FormatDouble_A(data.TWIST_DETAIL.TWIST_3);
info.Dtl4 = FormatDouble_A(data.TWIST_DETAIL.TWIST_4);
info.Dtl5 = FormatDouble_A(data.TWIST_DETAIL.TWIST_5);
info.Dtl6 = FormatDouble_A(data.TWIST_DETAIL.TWIST_6);
info.Dtl7 = FormatDouble_A(data.TWIST_DETAIL.TWIST_7);
info.Dtl8 = FormatDouble_A(data.TWIST_DETAIL.TWIST_8);
if (data.TWIST_DETAIL != null)
{
info.Dtl1 = FormatDouble_A(data.TWIST_DETAIL.TWIST_1);
info.Dtl2 = FormatDouble_A(data.TWIST_DETAIL.TWIST_2);
info.Dtl3 = FormatDouble_A(data.TWIST_DETAIL.TWIST_3);
info.Dtl4 = FormatDouble_A(data.TWIST_DETAIL.TWIST_4);
info.Dtl5 = FormatDouble_A(data.TWIST_DETAIL.TWIST_5);
info.Dtl6 = FormatDouble_A(data.TWIST_DETAIL.TWIST_6);
info.Dtl7 = FormatDouble_A(data.TWIST_DETAIL.TWIST_7);
info.Dtl8 = FormatDouble_A(data.TWIST_DETAIL.TWIST_8);
}
info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.TWIST_MIN, data.TWIST_MAX, data.TWIST));
return info;
}

@ -6,93 +6,205 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:SparkClient.Views"
xmlns:configuration="clr-namespace:SparkClient.Views.Configuration"
xmlns:system="clr-namespace:System;assembly=System.Runtime"
mc:Ignorable="d"
>
<Grid Background="Transparent">
<Border.Resources>
<x:Array x:Key="ShapeList" Type="system:String">
<system:String>圆形</system:String>
</x:Array>
</Border.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition MinWidth="300" Width="5*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition MinWidth="300" Width="4*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Column="0" Grid.Row="0" Width="100" Margin="0 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding SaveAlgorithmDataCommand}" IsEnabled="{Binding IsEnabled}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="{ DynamicResource Save}" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
<Button Grid.Column="1" Grid.Row="0" Width="100" Margin="10 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding BeautifyJsonCommand}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="{ DynamicResource BeautifyJson}" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
<Button Grid.Column="2" Grid.Row="0" Width="100" Margin="0 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding UglifyJsonCommand}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="{ DynamicResource UglifyJson}" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
<!-- <TextBox Grid.Column="3" Grid.Row="0" Text="{Binding AlgorithmConfigJson}"></TextBox> -->
<avalonEdit:TextEditor Grid.Column="0" Grid.ColumnSpan="4" Grid.Row="1"
xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
Name="TextEditor"
SyntaxHighlighting="JSON"
FontFamily="Consolas"
FontSize="16pt"
LineNumbersForeground="Black"
TextChanged="TextEditor_OnTextChanged"
ShowLineNumbers="True" >
<avalonEdit:TextEditor.Options>
<avalonEdit:TextEditorOptions ShowSpaces="True" />
</avalonEdit:TextEditor.Options>
</avalonEdit:TextEditor>
<!-- 按钮组 -->
<Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Width="100" Margin=" 10 5 0 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding SaveAlgorithmDataCommand}" IsEnabled="{Binding IsEnabled}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="{ DynamicResource Save}" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
<Button Grid.Column="3" Width="100" Margin="10 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding BeautifyJsonCommand}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="{ DynamicResource BeautifyJson}" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
<Button Grid.Column="4" Width="100" Margin="0 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding UglifyJsonCommand}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="{ DynamicResource UglifyJson}" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
<Button Grid.Column="1" Width="100" Margin="10 5 0 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding UglifyJsonCommand}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="删除行" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
<Button Grid.Column="2" Width="100" Margin="10 5 0 5 " Padding="0" Height="50"
BorderThickness="0" Background="Transparent" FocusVisualStyle="{x:Null}" Command="{Binding AddCommand}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0 0 0 0"
Padding="10, 10"
Width="100"
BorderThickness="0"
CornerRadius="20">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#61bde2" Offset="0"/>
<GradientStop Color="#53abd9" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="添加行" TextAlignment="Center" Foreground="#ffffff" FontSize="16"></TextBlock>
</Border>
</Button>
</Grid>
<!-- 左侧DataGrid -->
<Grid Grid.Row="1" Grid.Column="0" >
<DataGrid x:Name="AgileJsonDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding AgileJsonConfigEntities,Mode=TwoWay}"
SelectionUnit="FullRow">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="运行模式" SelectedValueBinding="{Binding Mode}" Width="*"
ItemsSource="{Binding ModeList}"
DisplayMemberPath="Name"/>
<DataGridTemplateColumn Header="形状" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="圆形" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox IsEnabled="False"
SelectedItem="圆形"
ItemsSource="{Binding Source={StaticResource ShapeList}}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<!-- 规格列修正为模板列 -->
<DataGridTemplateColumn Header="规格" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="p8-p8" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding Spec}">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<!-- JSON Key列(带自动完成) -->
<DataGridTemplateColumn Header="JSON Key" Width="3*" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding JsonKey}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<hc:AutoCompleteTextBox Text="{Binding JsonKey}" ItemsSource="{Binding JsonKeys}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<!-- 动态Value列 -->
<DataGridTextColumn Header="动态Value" Binding="{Binding Value}" Width="2*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<!-- 中间 -->
<GridSplitter Grid.Row="1" Grid.Column="1" Width="5" HorizontalAlignment="Stretch" Background="Transparent" />
<!-- 右侧json -->
<Grid Grid.Row="1" Grid.Column="2" Background="Transparent" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- <TextBlock Grid.Row="0"/> -->
<avalonEdit:TextEditor Grid.Row="1"
xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
Name="TextEditor"
SyntaxHighlighting="JSON"
FontFamily="Consolas"
FontSize="16pt"
LineNumbersForeground="Black"
TextChanged="TextEditor_OnTextChanged"
ShowLineNumbers="True" >
<avalonEdit:TextEditor.Options>
<avalonEdit:TextEditorOptions ShowSpaces="True" />
</avalonEdit:TextEditor.Options>
</avalonEdit:TextEditor>
</Grid>
</Grid>
</Border>

@ -3,6 +3,7 @@ using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Xml;
using HandyControl.Controls;
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Highlighting.Xshd;
@ -39,6 +40,8 @@ public partial class AlgorithmConfigPage
}
}
};
}
}

Loading…
Cancel
Save