MoldOutboundExecutePage.xaml.cs
2.7 KB
1
2
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
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
69
70
71
72
73
74
75
76
77
using System.Text.Json;
using IndustrialControl.Models;
using IndustrialControl.ViewModels;
namespace IndustrialControl.Pages;
// 注意:不再使用 [QueryProperty],改用 IQueryAttributable
public partial class MoldOutboundExecutePage : ContentPage, IQueryAttributable
{
private readonly MoldOutboundExecuteViewModel _vm;
// 这三个由搜索页传入
private string? _orderNo;
private string? _orderId;
private List<BaseInfoItem>? _baseInfos;
public MoldOutboundExecutePage(MoldOutboundExecuteViewModel vm)
{
InitializeComponent();
BindingContext = _vm = vm;
}
// Shell 在导航时会调用这里,参数肯定已到
public void ApplyQueryAttributes(IDictionary<string, object> query)
{
// 1) 优先:整条 WorkOrderDto(JSON 传参)
if (query.TryGetValue("orderDto", out var obj) && obj is string json && !string.IsNullOrWhiteSpace(json))
{
var dto = JsonSerializer.Deserialize<WorkOrderDto>(json,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
if (dto != null)
{
_vm.OrderNo = dto.OrderNo;
_vm.OrderId = dto.Id;
_vm.StatusText = dto.Status;
_vm.OrderName = dto.OrderName;
_vm.Urgent = dto.Urgent;
_vm.ProductName = dto.MaterialName;
_vm.PlanQtyText = dto.CurQty?.ToString();
_vm.CreateDateText = dto.CreateDate;
_vm.BomCode = dto.BomCode;
_vm.RouteName = dto.RouteName;
return; // 已就绪
}
}
// 2) 兼容:旧的 orderNo/orderId/baseInfo 三参数
if (query.TryGetValue("orderNo", out var ono)) _vm.OrderNo = ono as string;
if (query.TryGetValue("orderId", out var oid)) _vm.OrderId = oid as string;
if (query.TryGetValue("baseInfo", out var bi) && bi is string baseInfoJson && !string.IsNullOrWhiteSpace(baseInfoJson))
{
try
{
var items = JsonSerializer.Deserialize<List<BaseInfoItem>>(baseInfoJson);
if (items != null)
{
// 让 VM 把 BaseInfos 落到固定属性上(见步骤 B)
_vm.SetFixedFieldsFromBaseInfos(items);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("[Execute] baseInfo JSON parse error: " + ex);
}
}
}
protected override async void OnAppearing()
{
base.OnAppearing();
if (!string.IsNullOrWhiteSpace(_vm.OrderNo))
await _vm.LoadAsync(_vm.OrderNo!, _vm.OrderId);
}
}