From c2fc884b66f68d2fd2178737c783696f88c30dbc Mon Sep 17 00:00:00 2001 From: Misaka_Company Date: Wed, 13 May 2026 09:48:08 +0800 Subject: [PATCH] feat(boxing): show work order numbers in boxing views --- lib/pages/boxing_detail_page.dart | 39 ++++++++++++++++----- lib/pages/boxing_page.dart | 57 ++++++++++++++++++++++--------- lib/services/api_service.dart | 11 +++++- 3 files changed, 81 insertions(+), 26 deletions(-) diff --git a/lib/pages/boxing_detail_page.dart b/lib/pages/boxing_detail_page.dart index a316867..229f7ca 100644 --- a/lib/pages/boxing_detail_page.dart +++ b/lib/pages/boxing_detail_page.dart @@ -19,10 +19,15 @@ class BoxingDetailPage extends StatelessWidget { children: [ const Text('装箱详情'), const SizedBox(width: 12), - Text( - paichanNo, - style: - const TextStyle(fontSize: 14, fontWeight: FontWeight.normal), + Expanded( + child: Text( + paichanNo, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.normal, + ), + overflow: TextOverflow.ellipsis, + ), ), ], ), @@ -77,11 +82,29 @@ class BoxingDetailPage extends StatelessWidget { return Padding( padding: const EdgeInsets.symmetric(vertical: 2), child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(item.zongpaiNo, style: const TextStyle(fontSize: 14)), - Text('数量:${item.quantity}', - style: const TextStyle(fontSize: 14)), + Expanded( + flex: 3, + child: Text( + item.zongpaiNo, + style: const TextStyle(fontSize: 14), + overflow: TextOverflow.ellipsis, + ), + ), + const SizedBox(width: 8), + Expanded( + flex: 2, + child: Text( + item.workOrderNo ?? '--', + style: const TextStyle(fontSize: 14), + overflow: TextOverflow.ellipsis, + ), + ), + const SizedBox(width: 8), + Text( + '数量:${item.quantity}', + style: const TextStyle(fontSize: 14), + ), ], ), ); diff --git a/lib/pages/boxing_page.dart b/lib/pages/boxing_page.dart index f74b5d7..f1324c8 100644 --- a/lib/pages/boxing_page.dart +++ b/lib/pages/boxing_page.dart @@ -49,6 +49,7 @@ class _BoxingPageState extends State { // 排产号信息(来自后端查询) String? _paichanNo; + String? _workOrderNo; int? _erpQuantity; List _existingBoxes = []; int _maxBoxNo = 0; @@ -129,6 +130,7 @@ class _BoxingPageState extends State { _phase = _Phase.waiting; _zongpaiNo = null; _paichanNo = null; + _workOrderNo = null; _erpQuantity = null; _existingBoxes = []; _maxBoxNo = 0; @@ -222,6 +224,7 @@ class _BoxingPageState extends State { setState(() { _zongpaiNo = zongpai; _paichanNo = result.paichanNo; + _workOrderNo = result.workOrderNo; _erpQuantity = result.quantity; _existingBoxes = result.existingBoxes; _maxBoxNo = result.maxBoxNo; @@ -363,7 +366,13 @@ class _BoxingPageState extends State { ..add( BoxDetailData( boxNo: boxNo, - items: [BoxItemData(zongpaiNo: _zongpaiNo!, quantity: quantity)], + items: [ + BoxItemData( + zongpaiNo: _zongpaiNo!, + workOrderNo: _workOrderNo, + quantity: quantity, + ), + ], ), ); _maxBoxNo = _maxBoxNo > boxNo ? _maxBoxNo : boxNo; @@ -658,27 +667,41 @@ class _BoxingPageState extends State { Widget _buildInfoArea(bool isWaiting, ColorScheme colorScheme) { final grey = isWaiting; + final paichanText = grey ? '--' : (_paichanNo ?? '--'); + final workOrderText = grey ? '--' : (_workOrderNo ?? '--'); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - '排产号:', - style: TextStyle( - fontSize: 13, - color: grey ? Colors.grey : Colors.black54, - ), + Row( + children: [ + Expanded( + child: Text( + paichanText, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w700, + color: grey ? Colors.grey : Colors.black87, + ), + overflow: TextOverflow.ellipsis, + ), + ), + const SizedBox(width: 12), + Expanded( + child: Text( + workOrderText, + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w700, + color: grey ? Colors.grey : Colors.black87, + ), + overflow: TextOverflow.ellipsis, + ), + ), + ], ), - const SizedBox(height: 2), - Text( - _paichanNo ?? '--', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: grey ? Colors.grey : Colors.black87, - ), - ), - const SizedBox(height: 8), + const SizedBox(height: 10), Row( children: [ diff --git a/lib/services/api_service.dart b/lib/services/api_service.dart index 47cc423..17d0ddb 100644 --- a/lib/services/api_service.dart +++ b/lib/services/api_service.dart @@ -33,13 +33,19 @@ class RegistrationResult { /// 箱号内单个总排号明细 class BoxItemData { final String zongpaiNo; + final String? workOrderNo; final int quantity; - BoxItemData({required this.zongpaiNo, required this.quantity}); + BoxItemData({ + required this.zongpaiNo, + this.workOrderNo, + required this.quantity, + }); factory BoxItemData.fromJson(Map json) { return BoxItemData( zongpaiNo: json['zongpai_no'] as String, + workOrderNo: json['work_order_no']?.toString(), quantity: json['quantity'] as int, ); } @@ -68,6 +74,7 @@ class BoxInfoResult { final String? errorMessage; final String? zongpaiNo; final String? paichanNo; + final String? workOrderNo; final int? quantity; final List existingBoxes; final int maxBoxNo; @@ -78,6 +85,7 @@ class BoxInfoResult { this.errorMessage, this.zongpaiNo, this.paichanNo, + this.workOrderNo, this.quantity, this.existingBoxes = const [], this.maxBoxNo = 0, @@ -94,6 +102,7 @@ class BoxInfoResult { success: true, zongpaiNo: json['zongpai_no'] as String?, paichanNo: json['paichan_no'] as String?, + workOrderNo: json['work_order_no']?.toString(), quantity: json['quantity'] as int?, existingBoxes: boxes, maxBoxNo: json['max_box_no'] as int? ?? 0,